diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..45d02d2a4 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +# Public client configuration. Never put a Supabase service-role key here. +VITE_SUPABASE_URL=https://YOUR_PROJECT_REF.supabase.co +VITE_SUPABASE_PUBLISHABLE_KEY=sb_publishable_YOUR_KEY diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 45e5f6512..bb3499870 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -52,8 +52,14 @@ jobs: continue-on-error: true run: npm run format:check - - name: Test + # Real recording-import tests require the binary skipped by --ignore-scripts. + - name: Install FFmpeg for integration tests + id: ffmpeg if: ${{ !cancelled() && steps.install.outcome == 'success' }} + run: npm rebuild ffmpeg-static + + - name: Test + if: ${{ !cancelled() && steps.install.outcome == 'success' && steps.ffmpeg.outcome == 'success' }} run: npm test # Main currently has known locale-parity debt covered by PR #710. Keep the diff --git a/.gitignore b/.gitignore index 3784c0cf8..de89bad27 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,7 @@ electron/native/bin/*/whisper-runtime.json tmp-*.ps1 .tmp-*.ps1 gpu-export-probe.mp4 + +# Browser test output +test-results/ +playwright-report/ diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md new file mode 100644 index 000000000..8a9f73a4e --- /dev/null +++ b/THIRD_PARTY_NOTICES.md @@ -0,0 +1,38 @@ +# Third-party notices + +## Voom + +Recordly Share includes code adapted from the Voom project: + +- Project: [Voom](https://github.com/aritropaul/voom) +- Adapted component: `services/recordly-share/worker` +- License: MIT +- Copyright © 2026 Aritro Paul +- Upstream reference: `c1c0350ed610b0c9bc4a307fcc6a01aab0f926f9` + +Recordly changes include product branding, desktop publishing integration, +authenticated commenting, local-development configuration, and viewer styling. + +The Voom software is provided under the following license: + +> MIT License +> +> Copyright (c) 2026 Aritro Paul +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. diff --git a/components.json b/components.json deleted file mode 100644 index f6dc1d599..000000000 --- a/components.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$schema": "https://ui.shadcn.com/schema.json", - "style": "new-york", - "rsc": false, - "tsx": true, - "tailwind": { - "config": "tailwind.config.cjs", - "css": "src/index.css", - "baseColor": "stone", - "cssVariables": true, - "prefix": "" - }, - "iconLibrary": "lucide", - "aliases": { - "components": "@/components", - "utils": "@/lib/utils", - "ui": "@/components/ui", - "lib": "@/lib", - "hooks": "@/hooks" - }, - "registries": {} -} diff --git a/design-app-catalog.html b/design-app-catalog.html new file mode 100644 index 000000000..bd1376091 --- /dev/null +++ b/design-app-catalog.html @@ -0,0 +1,7 @@ +Recordly app component catalog
diff --git a/design-capture.html b/design-capture.html new file mode 100644 index 000000000..c88860dae --- /dev/null +++ b/design-capture.html @@ -0,0 +1,5 @@ +Recordly design transfer
diff --git a/design-extra-catalog.html b/design-extra-catalog.html new file mode 100644 index 000000000..e466487bb --- /dev/null +++ b/design-extra-catalog.html @@ -0,0 +1 @@ +Recordly Export and Popup Catalog
diff --git a/design-hud-branches.html b/design-hud-branches.html new file mode 100644 index 000000000..eb3fbfb0c --- /dev/null +++ b/design-hud-branches.html @@ -0,0 +1,5 @@ +Recordly HUD branch catalog
\ No newline at end of file diff --git a/design-inspector-catalog.html b/design-inspector-catalog.html new file mode 100644 index 000000000..013a532e8 --- /dev/null +++ b/design-inspector-catalog.html @@ -0,0 +1,8 @@ + +Recordly inspector catalog + +
diff --git a/design-library.html b/design-library.html new file mode 100644 index 000000000..d6037287c --- /dev/null +++ b/design-library.html @@ -0,0 +1 @@ +Recordly Component Library
diff --git a/design-preview-menus.html b/design-preview-menus.html new file mode 100644 index 000000000..8c80cb47b --- /dev/null +++ b/design-preview-menus.html @@ -0,0 +1 @@ +Recordly Preview Menus
diff --git a/design-timeline-catalog.html b/design-timeline-catalog.html new file mode 100644 index 000000000..8fab5ab96 --- /dev/null +++ b/design-timeline-catalog.html @@ -0,0 +1 @@ +Recordly Timeline Component Library
diff --git a/design-timeline-details.html b/design-timeline-details.html new file mode 100644 index 000000000..db02cc9c0 --- /dev/null +++ b/design-timeline-details.html @@ -0,0 +1,5 @@ +Recordly timeline detail components
diff --git a/design-window-capture.html b/design-window-capture.html new file mode 100644 index 000000000..74774936d --- /dev/null +++ b/design-window-capture.html @@ -0,0 +1,27 @@ + +Recordly window states +
diff --git a/design-window-catalog.html b/design-window-catalog.html new file mode 100644 index 000000000..bcae4a0e9 --- /dev/null +++ b/design-window-catalog.html @@ -0,0 +1,5 @@ +Recordly window catalog
diff --git a/docs/HEROUI_MIGRATION.md b/docs/HEROUI_MIGRATION.md new file mode 100644 index 000000000..22b182b96 --- /dev/null +++ b/docs/HEROUI_MIGRATION.md @@ -0,0 +1,92 @@ +# HeroUI UI branch + +This migration is isolated on `codex/heroui-ui`, based on `9693ad7` from +`codex/clip-controls`. It lives in the sibling `recordly-heroui` Git worktree. +The original `recordly` checkout and its uncommitted files were left intact. +Nothing has been merged or pushed. + +## Try it + +From the original checkout: + +```sh +cd ../recordly-heroui +npm run dev +``` + +A fresh checkout needs `npm install` first, including Recordly's normal native +helper installation. The dependency lockfile belongs to this branch. + +To go back, close the development app and run `npm run dev` from the original +`recordly` directory. No reset, stash, or file restoration is needed. You can +keep both checkouts while comparing them. To undo just the UI refinement pass, +use `git revert `. To undo the entire migration after merging, +revert the branch commits newest-first, including the original `93be193` migration. + +## UI approach + +The controls use HeroUI React 3.2.6 and its default light/dark theme, following +[the official component demos](https://heroui.com/en/docs/react/components). +This includes buttons, fields, switches, sliders, tabs, tag groups, toggle groups, radios, +selects, modals, popovers, menus, tooltips, color pickers, progress indicators, +skeletons, and toasts. React 19 and Tailwind 4 satisfy HeroUI v3 requirements. +The former Radix, Sonner, and third-party color picker dependencies are removed. + +The editor uses a floating inspector card, an open canvas and timeline, aligned +toolbars, consistent spacing, and restrained selection colors. Advanced controls +live behind a per-section switch; changing views preserves project values. +Background types and other exclusive choices use TagGroup. The header follows +native fullscreen state and keeps project titles centered at narrow widths. Floating layers keep one +surface instead of nesting cards and shadows. Timeline blocks retain the original +Recordly palette in both themes. Inspector controls use compact 12–13px text and +32–36px controls, with 14px section titles. Image and video wallpaper grids share +a plus tile for importing and a small remove control on custom tiles, revealed +on hover or keyboard focus. The background gallery slides left/right with tab order. + +The clip lane samples real source frames with a bounded cache and one background +video decoder. Sampling follows clip source offsets, speed, and the visible timeline +range; it never seeks the playback element. Zooms use a compact lane with labels +that adapt to block width. The ruler chooses tick density from available width, +and the red playhead has a white centre line. Webcam roundness defaults to 100%; +existing saved values remain intact. New recordings inherit the saved webcam +appearance, and 100% is the maximum squircle radius rather than a circular mask. +Three compact timeline tracks fit before +vertical scrolling. Popovers support outside-click and Escape dismissal and +share one padding layer. Export states retain generous content padding. Timeline +selection ignores pointer jitter up to 4px, including clicks on trim handles, +so selecting a clip cannot introduce a leading gap. Project and preset names truncate inside their rows. +The recorder keeps its compact desktop layout. + +The adapters in `src/components/ui` translate existing Recordly state/callback +props to HeroUI APIs. The timeline geometry, crop handles, video canvas, caption +canvas editor, waveform, and native file inputs remain application-specific; +HeroUI does not replace those editing engines. Recording/export/project logic +is retained, with nullable ref types updated for React 19. + +## Verification + +```sh +npm run typecheck +npm test +npx vite build +npx playwright install chromium +npm run test:ui +``` + +The production build includes both the renderer and Electron main/preload +bundles. It is not an installer packaging run. + +Browser tests use an explicit mocked Electron bridge and a generated six-second +video fixture; they never start a real screen recording. A second changing-frame +fixture verifies that timeline thumbnails decode distinct source frames. They cover control +callbacks and keyboard behavior, modal focus, export settings, presets, cropping, +annotation formatting/undo, project menus, recorder popovers, countdown and update +windows, theme switching, Advanced state, color editing, wallpaper uploads and +keyboard/hover removal, and header/playback +alignment from 800–1440px with and without macOS window controls. Screenshots and failure +traces go to the ignored `test-results/` directory. + +`npm run dev:ui` starts only Vite for browser inspection; the component fixture +is at `/tests/ui/controls.html`. The real editor requires Electron or the test +bridge. Native recording, device permissions, and end-to-end media export still +need a desktop smoke test on the target platform. diff --git a/docs/authentication.md b/docs/authentication.md new file mode 100644 index 000000000..6d9d2d49c --- /dev/null +++ b/docs/authentication.md @@ -0,0 +1,52 @@ +# Recordly authentication setup + +Recordly uses Supabase Auth for one shared session across email/password and Google. The desktop application uses PKCE and returns from the system browser through a loopback callback in development and `recordly://auth/callback` in production. X and SAML are intentionally hidden until those providers are configured. + +## 1. Create the project + +1. Create a Supabase project. +2. In **Project settings → API**, copy the project URL and publishable key. +3. Copy `.env.example` to `.env.local` and fill in both values. Never use the service-role key in the desktop application. +4. In **Authentication → URL configuration**, add `recordly://auth/callback` and `http://127.0.0.1:43821/auth/callback` to the redirect allow list. + +Email/password works once email authentication is enabled and a user has been created. Password-reset emails use the same desktop callback. + +## 2. Google + +1. Create a Web OAuth client in Google Auth Platform. +2. Add Supabase's callback URL, `https://YOUR_PROJECT_REF.supabase.co/auth/v1/callback`, as an authorized redirect URI. +3. Enable Google under **Supabase → Authentication → Sign In / Providers** and paste the Google client ID and secret. +4. Keep the requested scopes to `openid`, email, and profile unless Recordly genuinely needs more. + +## 3. X (currently hidden) + +1. Create an OAuth 2.0 app in the X Developer Dashboard and enable requesting the user's email. +2. Set its callback URL to `https://YOUR_PROJECT_REF.supabase.co/auth/v1/callback`. +3. Enable X/Twitter OAuth 2.0 in Supabase and paste the client ID and secret. + +## 4. SAML SSO (currently hidden) + +SAML is configured per customer workspace. Supabase's SAML support requires Pro or above. + +1. Enable SAML in the Supabase Auth provider settings. +2. Obtain the customer's IdP metadata URL or metadata XML file. +3. Register the connection and its email domain with the Supabase CLI, for example: + + ```sh + supabase sso add --type saml --project-ref YOUR_PROJECT_REF \ + --metadata-url 'https://customer.example/idp/metadata' \ + --domains customer.example + ``` + +The Recordly modal extracts the domain from the entered email address and starts the matching SAML connection. + +## 5. Verify locally + +Restart `npm run dev` after creating `.env.local`. Open an editor and verify: + +1. The account button opens **Sign into Recordly**. +2. Email/password creates a persistent Supabase session. +3. Google opens the system browser and returns to Recordly. +4. Clicking **Create link** while signed out opens this modal; after successful authentication it continues to the share dialog. + +Add the same `SUPABASE_URL` and `SUPABASE_PUBLISHABLE_KEY` values to the share Worker's secrets or variables. Set `OWNER_USER_ID` to the owner’s Supabase user ID. The Worker validates the access token with Supabase and requires that owner identity before accepting API requests. `API_SECRET` is server-side only and remains available for library administration and explicitly enabled local integration tests; it is never entered into or exposed by the desktop app. diff --git a/docs/cloud-sharing.md b/docs/cloud-sharing.md new file mode 100644 index 000000000..f8e5fc238 --- /dev/null +++ b/docs/cloud-sharing.md @@ -0,0 +1,30 @@ +# Recordly cloud sharing + +Recordly's **Export** menu offers downloading the current edit or **Create share link**. The Account button at the bottom of the left toolbar opens sign-in. Sharing renders an MP4 to a temporary file, uploads it to Recordly Share, finalizes its metadata, and removes the temporary file when the dialog closes. + +The desktop app defaults to the local development endpoint: + +```text +http://localhost:8787/api/upload +``` + +The endpoint is intentionally not user-configurable. All builds currently use the local service above. Production service integration is planned but is not selected by any build. Publishing requires the user's Recordly access token. No share API secret is exposed in the app. + +## Publishing protocol + +1. `POST /api/upload` creates a recording and share code. +2. Small files use `PUT /api/upload-data/:shareCode`; files over 50 MB use multipart uploads in retryable 25 MB chunks. +3. `POST /api/metadata/:shareCode` publishes the title and creator notes. +4. The returned `/s/:shareCode` URL opens the complete viewing and feedback page. + +The service provides R2 video storage, D1 metadata, range streaming, a responsive viewing page, timestamped comments, reactions, captions, password protection, expiry, and a private video library. See [the service README](../services/recordly-share/worker/README.md) for local and deployment instructions. + +## Comments + +Anyone with a valid link can watch a public recording and leave timestamped feedback using a display name. No account or sign-in is required. The existing per-IP rate limit and 2,000-character comment limit still apply. + +## Third-party licensing + +The hosting service is based on MIT-licensed open-source software. Required attribution and the complete license text are preserved in [THIRD_PARTY_NOTICES.md](../THIRD_PARTY_NOTICES.md) and [the vendored license](../services/recordly-share/LICENSE). + +The self-hosted worker is a single-owner library. Set `OWNER_USER_ID` to the owner’s Supabase user ID. Other accounts in the same Supabase project cannot administer the library. Missing owner configuration disables Supabase bearer access. diff --git a/docs/figma-component-coverage.md b/docs/figma-component-coverage.md new file mode 100644 index 000000000..6df3cc63c --- /dev/null +++ b/docs/figma-component-coverage.md @@ -0,0 +1,590 @@ +# Recordly HeroUI — Figma component coverage + +[Open the editable Figma file](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm) + +Audited 20 September 2026 against the `recordly-heroui` renderer. The file contains **254 native components**, **6,986 editable component layers**, **126 variables**, an assembled editor and two structural wireframes. Variable-alias validation found no broken references. + +## Start here + +- [Assembled desktop editor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-3) +- [Editor wireframe](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=33-2) +- [Recorder wireframe](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=33-13) +- [Foundations](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=9-4) +- [Getting started](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=9-3) + +Components are organized by controls, inspectors, timeline, recording, windows and popup families. Edit a main component to update its Figma instances. The full component/node index below links directly to each definition. This is an editable design handoff; Figma changes do not automatically rewrite the React project. + +## Scope and fidelity + +- Every one of the 91 original renderer TSX modules is accounted for below: 85 visual modules and 6 providers/bootstrap modules without standalone UI. +- Includes basic and advanced inspectors, four background tabs, selected/unselected timeline blocks, annotations, waveform and keyframe details, project dialogs, export stages and errors, presets, announcement layouts, all recorder menus, recording/finalizing states, floating webcam preview, countdown, update notifications, and tooltips. +- Controls, text, icons and waveform shapes are editable Figma layers. Filmstrip/preview footage and image assets retain bitmap media fills. These are fixture media, not editable video sequences. +- The source uses SF Pro; the matching Figma faces are used. Menlo was unavailable in Figma and its small monospaced samples use JetBrains Mono Medium. +- Context providers, event hooks, native operating-system file/device permission dialogs and runtime behavior have no independent Figma visual. Project-owned dialogs and device-selection menus are included. +- Frame and Crop inspector identifiers currently resolve to Scene in the source. Their captured compatibility states reflect that behavior. Extensions are retained as a labelled legacy component, despite removal from active navigation. +- Capture-only containers make otherwise hidden dialogs visible and expand inspector scroll areas. Preview menus and recording-only HUD branches preserve source JSX and original CSS with inert handlers. No capture controls are added to the shipping editor. + +## Source module coverage + +| Source | Figma representation | +| --- | --- | +| [src/App.tsx](../src/App.tsx) | [Editor screen](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-3), [App / Startup](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4977) | +| [src/components/announcements/AnnouncementDialog.tsx](../src/components/announcements/AnnouncementDialog.tsx) | [Popup/announcement-popup](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4683), [Announcement cover](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=51-37) | +| [src/components/announcements/EditorAnnouncementBanner.tsx](../src/components/announcements/EditorAnnouncementBanner.tsx) | [Popup/announcement-banner](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4701) | +| [src/components/announcements/LiveAnnouncementNotifications.tsx](../src/components/announcements/LiveAnnouncementNotifications.tsx) | [Popup/announcement-notification](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4713) | +| [src/components/countdown/CountdownOverlay.tsx](../src/components/countdown/CountdownOverlay.tsx) | [CountdownOverlay / 3 seconds](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4916) | +| [src/components/launch/HudWindow.tsx](../src/components/launch/HudWindow.tsx) | [HudWindow / Idle](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4968), [HUD — recording states](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=46-2) | +| [src/components/launch/LaunchWindow.tsx](../src/components/launch/LaunchWindow.tsx) | [HudWindow / Idle](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4968), [HUD — recording states](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=46-2), [Popups — Recording](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-2) | +| [src/components/launch/MarqueeText.tsx](../src/components/launch/MarqueeText.tsx) | [MarqueeText](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1306) | +| [src/components/launch/RecordingControls.tsx](../src/components/launch/RecordingControls.tsx) | [RecordingControls / Recording](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1191), [RecordingControls / Paused](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1222) | +| [src/components/launch/SourceSelector.tsx](../src/components/launch/SourceSelector.tsx) | [SourceSelectorContent / Sources](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1255), [Popup/launch-sources](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-255) | +| [src/components/launch/UpdateToastWindow.tsx](../src/components/launch/UpdateToastWindow.tsx) | [Windows & tooltips](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4759) | +| [src/components/launch/contexts/HudInteractionContext.tsx](../src/components/launch/contexts/HudInteractionContext.tsx) | Provider/bootstrap only; represented through its rendered children. | +| [src/components/launch/popovers/CountdownPopover.tsx](../src/components/launch/popovers/CountdownPopover.tsx) | [Popup/launch-countdown](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-97) | +| [src/components/launch/popovers/LaunchPopoverCoordinator.tsx](../src/components/launch/popovers/LaunchPopoverCoordinator.tsx) | Provider/bootstrap only; represented through its rendered children. | +| [src/components/launch/popovers/MicPopover.tsx](../src/components/launch/popovers/MicPopover.tsx) | [Popup/launch-mic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-113), [Popup/launch-mic-devices](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-37) | +| [src/components/launch/popovers/MorePopover.tsx](../src/components/launch/popovers/MorePopover.tsx) | [Popup/launch-more](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-236) | +| [src/components/launch/popovers/PopoverScaffold.tsx](../src/components/launch/popovers/PopoverScaffold.tsx) | [DropdownItem / Selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1280), [MicDeviceRow / Selected and unselected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1301), [Popups — Recording](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-2) | +| [src/components/launch/popovers/ProjectPopover.tsx](../src/components/launch/popovers/ProjectPopover.tsx) | [Popup/launch-projects](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-279) | +| [src/components/launch/popovers/SourcePopover.tsx](../src/components/launch/popovers/SourcePopover.tsx) | [Popup/launch-sources](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-255) | +| [src/components/launch/popovers/WebcamPopover.tsx](../src/components/launch/popovers/WebcamPopover.tsx) | [Popup/launch-webcam](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-122), [Popup/launch-webcam-devices](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-67) | +| [src/components/ui/accordion.tsx](../src/components/ui/accordion.tsx) | [Accordion](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-15) | +| [src/components/ui/audio-level-meter.tsx](../src/components/ui/audio-level-meter.tsx) | [App — Shared utilities](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-348) | +| [src/components/ui/button.tsx](../src/components/ui/button.tsx) | [Button](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=18-2) | +| [src/components/ui/card.tsx](../src/components/ui/card.tsx) | [Card](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-2) | +| [src/components/ui/choice-group.tsx](../src/components/ui/choice-group.tsx) | [ChoiceGroup](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-36) | +| [src/components/ui/color-picker.tsx](../src/components/ui/color-picker.tsx) | [ColorPalette](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-368), [ColorControl](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-379), [Popup/color](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-886) | +| [src/components/ui/content-clamp.tsx](../src/components/ui/content-clamp.tsx) | [ContentClamp](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-383), [Tooltip / Content clamp](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4981) | +| [src/components/ui/dialog.tsx](../src/components/ui/dialog.tsx) | [Popup/dialog](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-573) | +| [src/components/ui/dropdown-menu.tsx](../src/components/ui/dropdown-menu.tsx) | [Popup/dropdown](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-783) | +| [src/components/ui/input.tsx](../src/components/ui/input.tsx) | [Input](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=22-2), [TextArea](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=22-27) | +| [src/components/ui/item-content.tsx](../src/components/ui/item-content.tsx) | [ItemContent](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-390) | +| [src/components/ui/label.tsx](../src/components/ui/label.tsx) | [Label](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-47) | +| [src/components/ui/popover.tsx](../src/components/ui/popover.tsx) | [Popup/popover](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-769) | +| [src/components/ui/select.tsx](../src/components/ui/select.tsx) | [Select](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-58), [Popup/select](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-759) | +| [src/components/ui/separator.tsx](../src/components/ui/separator.tsx) | [Separator](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-51) | +| [src/components/ui/skeleton.tsx](../src/components/ui/skeleton.tsx) | [Skeleton](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-54) | +| [src/components/ui/slider.tsx](../src/components/ui/slider.tsx) | [Slider](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=24-2) | +| [src/components/ui/switch.tsx](../src/components/ui/switch.tsx) | [Switch](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=23-2) | +| [src/components/ui/tabs.tsx](../src/components/ui/tabs.tsx) | [Tabs](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-45) | +| [src/components/ui/toast.tsx](../src/components/ui/toast.tsx) | [Popup/toast](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-794) | +| [src/components/ui/toggle-group.tsx](../src/components/ui/toggle-group.tsx) | [ToggleGroup](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-27) | +| [src/components/ui/toggle.tsx](../src/components/ui/toggle.tsx) | [Toggle](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-2) | +| [src/components/video-editor/AddCustomFontDialog.tsx](../src/components/video-editor/AddCustomFontDialog.tsx) | [Popup/font](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-605) | +| [src/components/video-editor/AnnotationOverlay.tsx](../src/components/video-editor/AnnotationOverlay.tsx) | [Timeline — AnnotationOverlay](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4199) | +| [src/components/video-editor/AnnotationSettingsPanel.tsx](../src/components/video-editor/AnnotationSettingsPanel.tsx) | [App — Annotation controls](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-750) | +| [src/components/video-editor/ArrowSvgs.tsx](../src/components/video-editor/ArrowSvgs.tsx) | [AnnotationSettingsPanel / figure](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-986) — all eight editable direction vectors | +| [src/components/video-editor/CaptionListPanel.tsx](../src/components/video-editor/CaptionListPanel.tsx) | [CaptionListPanel / Editing](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-748) | +| [src/components/video-editor/CropControl.tsx](../src/components/video-editor/CropControl.tsx) | [CropControl](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-690) | +| [src/components/video-editor/EditorWindow.tsx](../src/components/video-editor/EditorWindow.tsx) | [Assembled editor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-3) | +| [src/components/video-editor/ExportSettingsMenu.tsx](../src/components/video-editor/ExportSettingsMenu.tsx) | [ExportSettingsMenu / MP4](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-586), [ExportSettingsMenu / GIF](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-642) | +| [src/components/video-editor/ExtensionManager.tsx](../src/components/video-editor/ExtensionManager.tsx) | [ExtensionManager / Legacy](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-454) | +| [src/components/video-editor/FormatSelector.tsx](../src/components/video-editor/FormatSelector.tsx) | [FormatSelector / MP4](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-472), [FormatSelector / GIF](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-489) | +| [src/components/video-editor/GifOptionsPanel.tsx](../src/components/video-editor/GifOptionsPanel.tsx) | [GifOptionsPanel](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-519) | +| [src/components/video-editor/KeyboardShortcutsHelp.tsx](../src/components/video-editor/KeyboardShortcutsHelp.tsx) | [Popup/keyboard-help](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-853) | +| [src/components/video-editor/PlaybackControls.tsx](../src/components/video-editor/PlaybackControls.tsx) | [Timeline — PlaybackControls](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4126) | +| [src/components/video-editor/ProjectBrowserDialog.tsx](../src/components/video-editor/ProjectBrowserDialog.tsx) | [App — Projects](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-407) | +| [src/components/video-editor/SettingsPanel.tsx](../src/components/video-editor/SettingsPanel.tsx) | [Inspectors — all sections](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2) | +| [src/components/video-editor/ShortcutsConfigDialog.tsx](../src/components/video-editor/ShortcutsConfigDialog.tsx) | [Popup/shortcuts](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-701) | +| [src/components/video-editor/SliderControl.tsx](../src/components/video-editor/SliderControl.tsx) | [SliderControl](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-655) | +| [src/components/video-editor/TutorialHelp.tsx](../src/components/video-editor/TutorialHelp.tsx) | [Popup/tutorial](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-556), [Popup/feedback](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-415), [Popup/keyboard-dialog](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-493), [Editor/Header](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-391) | +| [src/components/video-editor/VideoEditor.tsx](../src/components/video-editor/VideoEditor.tsx) | [Assembled editor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-3) | +| [src/components/video-editor/VideoPlayback.tsx](../src/components/video-editor/VideoPlayback.tsx) | [Editor/Preview](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-887), [Timeline — AnnotationOverlay](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4199) | +| [src/components/video-editor/WallpaperGrid.tsx](../src/components/video-editor/WallpaperGrid.tsx) | [WallpaperGrid](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-713) | +| [src/components/video-editor/WebcamCropControl.tsx](../src/components/video-editor/WebcamCropControl.tsx) | [WebcamCropControl](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-674) | +| [src/components/video-editor/layout/CropEditorDialog.tsx](../src/components/video-editor/layout/CropEditorDialog.tsx) | [Popup/crop-dialog](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-731) | +| [src/components/video-editor/layout/EditorDialogs.tsx](../src/components/video-editor/layout/EditorDialogs.tsx) | [Popups — Dialogs](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-281) | +| [src/components/video-editor/layout/EditorExportMenu.tsx](../src/components/video-editor/layout/EditorExportMenu.tsx) | [Popups — Export](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4276) | +| [src/components/video-editor/layout/EditorHeader.tsx](../src/components/video-editor/layout/EditorHeader.tsx) | [Editor/Header](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-391) | +| [src/components/video-editor/layout/EditorLoadingSkeleton.tsx](../src/components/video-editor/layout/EditorLoadingSkeleton.tsx) | [Popup/loading](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-957) | +| [src/components/video-editor/layout/EditorPresetMenu.tsx](../src/components/video-editor/layout/EditorPresetMenu.tsx) | [Popups — Presets & announcements](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4592) | +| [src/components/video-editor/layout/EditorPreviewPanel.tsx](../src/components/video-editor/layout/EditorPreviewPanel.tsx) | [Editor/Preview](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-887), [Popups — Preview](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4988) | +| [src/components/video-editor/layout/EditorShell.tsx](../src/components/video-editor/layout/EditorShell.tsx) | [Assembled editor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-3) | +| [src/components/video-editor/layout/EditorSidebar.tsx](../src/components/video-editor/layout/EditorSidebar.tsx) | [Editor/Sidebar / Scene](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-630), [Inspectors — all sections](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2), [Tooltip / Sidebar placement](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4985) | +| [src/components/video-editor/layout/EditorTimelinePanel.tsx](../src/components/video-editor/layout/EditorTimelinePanel.tsx) | [Editor/Timeline](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-986), [Timeline — TimelineEditor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3613) | +| [src/components/video-editor/layout/EditorVideoPreview.tsx](../src/components/video-editor/layout/EditorVideoPreview.tsx) | [Editor/Preview](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-887) | +| [src/components/video-editor/timeline/Item.tsx](../src/components/video-editor/timeline/Item.tsx) | [Timeline — TimelineEditor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3613) — clip, zoom, annotation, caption and audio blocks | +| [src/components/video-editor/timeline/Row.tsx](../src/components/video-editor/timeline/Row.tsx) | [Timeline — TimelineEditor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3613) — nested row layers | +| [src/components/video-editor/timeline/TimelineEditor.tsx](../src/components/video-editor/timeline/TimelineEditor.tsx) | [Timeline — TimelineEditor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3613) | +| [src/components/video-editor/timeline/components/filmstrip/ClipFilmstrip.tsx](../src/components/video-editor/timeline/components/filmstrip/ClipFilmstrip.tsx) | [Timeline — TimelineEditor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3613) — nested filmstrip media frames | +| [src/components/video-editor/timeline/components/markers/KeyframeMarkers.tsx](../src/components/video-editor/timeline/components/markers/KeyframeMarkers.tsx) | [Default marker](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=52-7), [Selected marker](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=52-9) | +| [src/components/video-editor/timeline/components/playhead/PlaybackCursor.tsx](../src/components/video-editor/timeline/components/playhead/PlaybackCursor.tsx) | [Timeline — TimelineEditor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3613) — nested playhead layers | +| [src/components/video-editor/timeline/components/viewport/TimelineCanvas.tsx](../src/components/video-editor/timeline/components/viewport/TimelineCanvas.tsx) | [Timeline — TimelineEditor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3613) — nested track viewport layers | +| [src/components/video-editor/timeline/components/waveform/AudioWaveform.tsx](../src/components/video-editor/timeline/components/waveform/AudioWaveform.tsx) | [AudioWaveform / Normal](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=55-6), [AudioWaveform / Normalized](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=55-9) | +| [src/components/video-editor/timeline/components/wrapper/TimelineWrapper.tsx](../src/components/video-editor/timeline/components/wrapper/TimelineWrapper.tsx) | [Timeline — TimelineEditor](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3613) — composition/context wrapper | +| [src/contexts/I18nContext.tsx](../src/contexts/I18nContext.tsx) | Provider/bootstrap only; represented through its rendered children. | +| [src/contexts/ShortcutsContext.tsx](../src/contexts/ShortcutsContext.tsx) | Provider/bootstrap only; represented through its rendered children. | +| [src/contexts/ThemeContext.tsx](../src/contexts/ThemeContext.tsx) | Provider/bootstrap only; represented through its rendered children. | +| [src/main.tsx](../src/main.tsx) | Provider/bootstrap only; represented through its rendered children. | + +## Native component index + +Each row is a Figma component definition. Button names include their containing style family to distinguish repeated size/state names. + +### Icons + +| Component | Node | +| --- | --- | +| [Icon / Plus](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-5) | `16:5` | +| [Icon / Trash](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-8) | `16:8` | +| [Icon / Play](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-11) | `16:11` | +| [Icon / Pause](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-14) | `16:14` | +| [Icon / Scissors](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-17) | `16:17` | +| [Icon / Volume2](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-20) | `16:20` | +| [Icon / Undo2](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-23) | `16:23` | +| [Icon / Redo2](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-26) | `16:26` | +| [Icon / ChevronDown](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-29) | `16:29` | +| [Icon / Settings2](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-32) | `16:32` | +| [Icon / MousePointer](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-35) | `16:35` | +| [Icon / Type](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-38) | `16:38` | +| [Icon / Camera](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-41) | `16:41` | +| [Icon / Image](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-44) | `16:44` | +| [Icon / Download](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=16-47) | `16:47` | + +### Button + +| Component | Node | +| --- | --- | +| [default / Size=sm, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-20) | `19:20` | +| [default / Size=sm, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-23) | `19:23` | +| [default / Size=default, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-26) | `19:26` | +| [default / Size=default, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-29) | `19:29` | +| [default / Size=lg, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-32) | `19:32` | +| [default / Size=lg, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-35) | `19:35` | +| [default / Size=icon, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-40) | `19:40` | +| [default / Size=icon, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-45) | `19:45` | +| [secondary / Size=sm, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-48) | `19:48` | +| [secondary / Size=sm, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-51) | `19:51` | +| [secondary / Size=default, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-54) | `19:54` | +| [secondary / Size=default, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-57) | `19:57` | +| [secondary / Size=lg, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-60) | `19:60` | +| [secondary / Size=lg, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-63) | `19:63` | +| [secondary / Size=icon, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-68) | `19:68` | +| [secondary / Size=icon, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-73) | `19:73` | +| [outline / Size=sm, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-76) | `19:76` | +| [outline / Size=sm, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-79) | `19:79` | +| [outline / Size=default, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-82) | `19:82` | +| [outline / Size=default, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-85) | `19:85` | +| [outline / Size=lg, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-88) | `19:88` | +| [outline / Size=lg, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-91) | `19:91` | +| [outline / Size=icon, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-96) | `19:96` | +| [outline / Size=icon, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-101) | `19:101` | +| [ghost / Size=sm, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-104) | `19:104` | +| [ghost / Size=sm, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-107) | `19:107` | +| [ghost / Size=default, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-110) | `19:110` | +| [ghost / Size=default, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-113) | `19:113` | +| [ghost / Size=lg, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-116) | `19:116` | +| [ghost / Size=lg, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-119) | `19:119` | +| [ghost / Size=icon, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-124) | `19:124` | +| [ghost / Size=icon, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-129) | `19:129` | +| [destructive / Size=sm, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-132) | `19:132` | +| [destructive / Size=sm, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-135) | `19:135` | +| [destructive / Size=default, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-138) | `19:138` | +| [destructive / Size=default, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-141) | `19:141` | +| [destructive / Size=lg, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-144) | `19:144` | +| [destructive / Size=lg, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-147) | `19:147` | +| [destructive / Size=icon, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-152) | `19:152` | +| [destructive / Size=icon, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-157) | `19:157` | +| [destructive-soft / Size=sm, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-160) | `19:160` | +| [destructive-soft / Size=sm, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-163) | `19:163` | +| [destructive-soft / Size=default, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-166) | `19:166` | +| [destructive-soft / Size=default, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-169) | `19:169` | +| [destructive-soft / Size=lg, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-172) | `19:172` | +| [destructive-soft / Size=lg, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-175) | `19:175` | +| [destructive-soft / Size=icon, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-180) | `19:180` | +| [destructive-soft / Size=icon, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-185) | `19:185` | +| [link / Size=sm, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-188) | `19:188` | +| [link / Size=sm, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-191) | `19:191` | +| [link / Size=default, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-194) | `19:194` | +| [link / Size=default, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-197) | `19:197` | +| [link / Size=lg, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-200) | `19:200` | +| [link / Size=lg, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-203) | `19:203` | +| [link / Size=icon, State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-208) | `19:208` | +| [link / Size=icon, State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=19-213) | `19:213` | + +### Input + +| Component | Node | +| --- | --- | +| [State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=22-5) | `22:5` | +| [State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=22-8) | `22:8` | +| [State=Filled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=22-11) | `22:11` | + +### TextArea + +| Component | Node | +| --- | --- | +| [TextArea](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=22-30) | `22:30` | + +### Switch + +| Component | Node | +| --- | --- | +| [State=Off](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=23-8) | `23:8` | +| [State=On](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=23-14) | `23:14` | +| [State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=23-20) | `23:20` | + +### Slider + +| Component | Node | +| --- | --- | +| [State=Single](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=24-8) | `24:8` | +| [State=Range](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=24-16) | `24:16` | +| [State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=24-22) | `24:22` | + +### Toggle + +| Component | Node | +| --- | --- | +| [State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-5) | `28:5` | +| [State=Selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-8) | `28:8` | +| [State=Disabled](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-11) | `28:11` | + +### ToggleGroup + +| Component | Node | +| --- | --- | +| [ToggleGroup](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-35) | `28:35` | + +### ChoiceGroup + +| Component | Node | +| --- | --- | +| [ChoiceGroup](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-44) | `28:44` | + +### Tabs + +| Component | Node | +| --- | --- | +| [Tabs](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-57) | `28:57` | + +### Select + +| Component | Node | +| --- | --- | +| [Select](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=28-64) | `28:64` | + +### Card + +| Component | Node | +| --- | --- | +| [Card](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-14) | `30:14` | + +### Accordion + +| Component | Node | +| --- | --- | +| [State=Expanded](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-25) | `30:25` | +| [State=Collapsed](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-31) | `30:31` | + +### Label + +| Component | Node | +| --- | --- | +| [Label](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-50) | `30:50` | + +### Separator + +| Component | Node | +| --- | --- | +| [Separator](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-53) | `30:53` | + +### Skeleton + +| Component | Node | +| --- | --- | +| [Skeleton](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=30-57) | `30:57` | + +### App — Shared utilities + +| Component | Node | +| --- | --- | +| [ColorPalette](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-368) | `35:368` | +| [ColorControl](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-379) | `35:379` | +| [ContentClamp](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-383) | `35:383` | +| [ItemContent](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-390) | `35:390` | +| [AudioLevelMeter / 12](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-395) | `35:395` | +| [AudioLevelMeter / 72](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-400) | `35:400` | +| [AudioLevelMeter / 94](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-405) | `35:405` | + +### App — Projects + +| Component | Node | +| --- | --- | +| [ProjectBrowserDialog / Populated](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-432) | `35:432` | +| [ProjectBrowserDialog / Empty](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-443) | `35:443` | +| [ExtensionManager / Legacy](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-454) | `35:454` | + +### App — Export controls + +| Component | Node | +| --- | --- | +| [FormatSelector / MP4](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-472) | `35:472` | +| [FormatSelector / GIF](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-489) | `35:489` | +| [GifOptionsPanel](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-519) | `35:519` | +| [ExportSettingsMenu / MP4](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-586) | `35:586` | +| [ExportSettingsMenu / GIF](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-642) | `35:642` | + +### App — Preview controls + +| Component | Node | +| --- | --- | +| [SliderControl](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-655) | `35:655` | +| [WebcamCropControl](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-674) | `35:674` | +| [CropControl](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-690) | `35:690` | +| [WallpaperGrid](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-713) | `35:713` | +| [CaptionListPanel / Editing](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-748) | `35:748` | + +### App — Annotation controls + +| Component | Node | +| --- | --- | +| [AnnotationSettingsPanel / text](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-879) | `35:879` | +| [AnnotationSettingsPanel / figure](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-986) | `35:986` | +| [AnnotationSettingsPanel / blur](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1098) | `35:1098` | +| [AnnotationSettingsPanel / image](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1159) | `35:1159` | + +### App — Recording & sources + +| Component | Node | +| --- | --- | +| [RecordingControls / Recording](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1191) | `35:1191` | +| [RecordingControls / Paused](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1222) | `35:1222` | +| [SourceSelectorContent / Sources](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1255) | `35:1255` | +| [SourceSelectorContent / Empty](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1260) | `35:1260` | +| [SourceSelectorContent / Loading](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1265) | `35:1265` | +| [DropdownItem / Selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1280) | `35:1280` | +| [MicDeviceRow / Selected and unselected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1301) | `35:1301` | +| [MarqueeText](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=35-1306) | `35:1306` | + +### Popups — Recording + +| Component | Node | +| --- | --- | +| [Popup/launch-mic-devices](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-37) | `38:37` | +| [Popup/launch-webcam-devices](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-67) | `38:67` | +| [Popup/launch-countdown](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-97) | `38:97` | +| [Popup/launch-mic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-113) | `38:113` | +| [Popup/launch-webcam](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-122) | `38:122` | +| [Popup/launch-more](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-236) | `38:236` | +| [Popup/launch-sources](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-255) | `38:255` | +| [Popup/launch-projects](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-279) | `38:279` | + +### Popups — Dialogs + +| Component | Node | +| --- | --- | +| [Popup/project-save](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-307) | `38:307` | +| [Popup/project-saving](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-334) | `38:334` | +| [Popup/unsaved-changes](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-353) | `38:353` | +| [Popup/native-capture-unavailable](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-368) | `38:368` | +| [Popup/feedback](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-415) | `38:415` | +| [Popup/keyboard-dialog](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-493) | `38:493` | +| [Popup/tutorial](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-556) | `38:556` | +| [Popup/dialog](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-573) | `38:573` | +| [Popup/font](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-605) | `38:605` | +| [Popup/shortcuts](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-701) | `38:701` | +| [Popup/crop-dialog](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-731) | `38:731` | + +### Popups — Controls & feedback + +| Component | Node | +| --- | --- | +| [Popup/select](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-759) | `38:759` | +| [Popup/popover](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-769) | `38:769` | +| [Popup/dropdown](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-783) | `38:783` | +| [Popup/toast](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-794) | `38:794` | +| [Popup/keyboard-help](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-853) | `38:853` | +| [Popup/color](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-886) | `38:886` | +| [Popup/loading](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=38-957) | `38:957` | + +### Inspectors — all sections + +| Component | Node | +| --- | --- | +| [Inspector/scene / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-116) | `41:116` | +| [Inspector/scene / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-283) | `41:283` | +| [Inspector/frame / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-398) | `41:398` | +| [Inspector/frame / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-565) | `41:565` | +| [Inspector/crop / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-680) | `41:680` | +| [Inspector/crop / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-847) | `41:847` | +| [Inspector/cursor / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-932) | `41:932` | +| [Inspector/cursor / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1115) | `41:1115` | +| [Inspector/captions / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1177) | `41:1177` | +| [Inspector/captions / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1300) | `41:1300` | +| [Inspector/caption / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1337) | `41:1337` | +| [Inspector/caption / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1374) | `41:1374` | +| [Inspector/webcam / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1451) | `41:1451` | +| [Inspector/webcam / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1600) | `41:1600` | +| [Inspector/settings / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1668) | `41:1668` | +| [Inspector/settings / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1839) | `41:1839` | +| [Inspector/zoom / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1878) | `41:1878` | +| [Inspector/zoom / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1930) | `41:1930` | +| [Inspector/clip / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1957) | `41:1957` | +| [Inspector/clip / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-1984) | `41:1984` | +| [Inspector/audio / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2016) | `41:2016` | +| [Inspector/audio / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2048) | `41:2048` | +| [Inspector/extensions / Basic](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2163) | `41:2163` | +| [Inspector/extensions / Advanced](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2330) | `41:2330` | +| [Inspector/Background / Image](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2444) | `41:2444` | +| [Inspector/Background / Video](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2497) | `41:2497` | +| [Inspector/Background / Color](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2575) | `41:2575` | +| [Inspector/Background / Gradient](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2661) | `41:2661` | +| [Inspector/Zoom / Manual](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2713) | `41:2713` | +| [Inspector/Clip / Muted and speed override](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2742) | `41:2742` | +| [Inspector/Captions / Model unavailable](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2804) | `41:2804` | +| [Inspector/Captions / Downloading model](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2868) | `41:2868` | +| [Inspector/Captions / Model ready](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2930) | `41:2930` | +| [Inspector/Captions / Generating](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-2998) | `41:2998` | +| [Inspector/Captions / Download error](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3060) | `41:3060` | +| [Inspector/Webcam / Empty](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3131) | `41:3131` | +| [Inspector/Cursor / Hidden](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3216) | `41:3216` | +| [Inspector/Zoom / No selection](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3220) | `41:3220` | +| [Inspector/Clip / No selection](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3240) | `41:3240` | +| [Inspector/Audio / No selection](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3265) | `41:3265` | + +### Timeline — TimelineEditor + +| Component | Node | +| --- | --- | +| [TimelineEditor / clip selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3712) | `41:3712` | +| [TimelineEditor / zoom selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3812) | `41:3812` | +| [TimelineEditor / annotation selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-3912) | `41:3912` | +| [TimelineEditor / audio selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4012) | `41:4012` | +| [TimelineEditor / caption selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4112) | `41:4112` | +| [TimelineEditor / Empty](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4124) | `41:4124` | + +### Timeline — PlaybackControls + +| Component | Node | +| --- | --- | +| [PlaybackControls / Paused](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4149) | `41:4149` | +| [PlaybackControls / Playing](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4173) | `41:4173` | +| [PlaybackControls / Muted](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4197) | `41:4197` | + +### Timeline — AnnotationOverlay + +| Component | Node | +| --- | --- | +| [AnnotationOverlay / text / Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4205) | `41:4205` | +| [AnnotationOverlay / text / Selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4219) | `41:4219` | +| [AnnotationOverlay / figure / Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4226) | `41:4226` | +| [AnnotationOverlay / figure / Selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4240) | `41:4240` | +| [AnnotationOverlay / image / Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4245) | `41:4245` | +| [AnnotationOverlay / image / Selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4257) | `41:4257` | +| [AnnotationOverlay / blur / Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4262) | `41:4262` | +| [AnnotationOverlay / blur / Selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4274) | `41:4274` | + +### Popups — Export + +| Component | Node | +| --- | --- | +| [Popup/export-settings-mp4](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4357) | `41:4357` | +| [Popup/export-settings-gif](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4413) | `41:4413` | +| [Popup/export-preparing](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4431) | `41:4431` | +| [Popup/export-rendering](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4452) | `41:4452` | +| [Popup/export-audio](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4473) | `41:4473` | +| [Popup/export-finalizing](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4491) | `41:4491` | +| [Popup/export-muxing](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4509) | `41:4509` | +| [Popup/export-saving](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4527) | `41:4527` | +| [Popup/export-success](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4541) | `41:4541` | +| [Popup/export-error](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4553) | `41:4553` | +| [Popup/export-pending-save](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4567) | `41:4567` | +| [Popup/export-legacy](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4590) | `41:4590` | + +### Popups — Presets & announcements + +| Component | Node | +| --- | --- | +| [Popup/presets-empty](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4611) | `41:4611` | +| [Popup/presets-saved](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4649) | `41:4649` | +| [Popup/announcement-popup](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4683) | `41:4683` | +| [Popup/announcement-banner](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4701) | `41:4701` | +| [Popup/announcement-notification](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4713) | `41:4713` | +| [Popup/toolbar-aspect-ratio](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4757) | `41:4757` | +| [Popup/announcement-cover](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=51-37) | `51:37` | + +### Windows & tooltips + +| Component | Node | +| --- | --- | +| [UpdateToastWindow / Available](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4778) | `41:4778` | +| [UpdateToastWindow / Downloading](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4803) | `41:4803` | +| [UpdateToastWindow / Ready](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4823) | `41:4823` | +| [UpdateToastWindow / Check error](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4843) | `41:4843` | +| [UpdateToastWindow / Download error](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4863) | `41:4863` | +| [UpdateToastWindow / Experimental](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4886) | `41:4886` | +| [UpdateToastWindow / Preview](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4909) | `41:4909` | +| [CountdownOverlay / 3 seconds](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4916) | `41:4916` | +| [HudWindow / Idle](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4968) | `41:4968` | +| [App / Startup](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4977) | `41:4977` | +| [Tooltip / Content clamp](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4981) | `41:4981` | +| [Tooltip / Sidebar placement](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-4985) | `41:4985` | + +### Popups — Preview + +| Component | Node | +| --- | --- | +| [Popup/aspect-ratio](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-5017) | `41:5017` | +| [Popup/add-layer](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-5025) | `41:5025` | +| [Popup/preview-volume](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=41-5034) | `41:5034` | + +### HUD — recording states + +| Component | Node | +| --- | --- | +| [HUD / Finalizing recording](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=46-18) | `46:18` | +| [HUD / Floating webcam preview](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=46-23) | `46:23` | +| [HUD / Recording](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=46-61) | `46:61` | + +### Timeline — KeyframeMarkers + +| Component | Node | +| --- | --- | +| [State=Default](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=52-7) | `52:7` | +| [State=Selected](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=52-9) | `52:9` | + +### Timeline — AudioWaveform + +| Component | Node | +| --- | --- | +| [AudioWaveform / Normal](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=55-6) | `55:6` | +| [AudioWaveform / Normalized](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=55-9) | `55:9` | + +### Editor — shell & screen + +| Component | Node | +| --- | --- | +| [Editor/Header](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-391) | `32:391` | +| [Editor/Sidebar / Scene](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-630) | `32:630` | +| [Editor/Preview](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-887) | `32:887` | +| [Editor/Timeline](https://www.figma.com/design/bE2Ew2nF1Zd0ixci9SwJDm?node-id=32-986) | `32:986` | + +## Reproducible capture fixtures + +| Entry | Coverage | +| --- | --- | +| `design-library.html` | Primitive controls and variants | +| `design-capture.html?windowType=editor` | Actual assembled renderer | +| `design-app-catalog.html` | Shared app controls, source lists and annotation inspectors | +| `design-app-catalog.html?view=all-states` | 26 popup and dialog states | +| `design-inspector-catalog.html` | 40 inspector/background states | +| `design-timeline-catalog.html` | Timeline, playback and annotation overlays | +| `design-timeline-details.html` | Explicit waveform peaks and keyframe markers | +| `design-extra-catalog.html` | Export, preset and announcement states; legacy toolbar | +| `design-extra-catalog.html?view=announcement-cover` | Cover-media announcement | +| `design-preview-menus.html` | Aspect ratio, Add Layer and volume menus | +| `design-window-catalog.html` | Seven update states, countdown, idle HUD, startup and tooltips | +| `design-hud-branches.html` | Finalizing recorder and floating webcam/recording HUD | +| `design-window-capture.html` | Individual window state verification through the live bridge path | + +The capture entry points load the existing test bridge and fixture media. The renderer-only development server must be running to use them. They are separate from the production `index.html` entry. + +## Validation + +- TypeScript and targeted lint pass for source changes and all capture fixtures. +- Timeline/deletion changes: 135 focused unit tests and 13 browser regressions passed. +- Controlled and live update-window paths were rendered successfully; the window/detail galleries reported no JavaScript errors. +- Figma audit checks native component/layer counts, variable aliases and fonts. Visual QA corrected capture artifacts in slider borders, tooltip sizing and popup envelopes. Raw and failed intermediate capture frames were removed after conversion. + +Compatibility toolbar, unmounted ruler and marker-overlay source files were removed on 20 September 2026. Their earlier Figma captures are historical, not current app surfaces. diff --git a/docs/timeline-sequence.md b/docs/timeline-sequence.md new file mode 100644 index 000000000..dc0fe667b --- /dev/null +++ b/docs/timeline-sequence.md @@ -0,0 +1,25 @@ +# Clip sequence timing + +Primary footage is an ordered, contiguous sequence. A visual clip separator has no duration. Both sides of a cut at 2.8 seconds represent 2.8 seconds, even if the second clip starts at a different point in the source recording. + +- `ClipRegion.startMs/endMs`: edited timeline coordinates. +- `sourceStartMs`: the retained recording in-point. Packing or reordering never derives this from the new timeline position. +- `speed`: source milliseconds consumed per timeline millisecond. +- `clipSequence.ts`: packs trims/deletes/speed changes, handles explicit insertion indices, and maps connected effects and audio anchors. +- `timeline/core/clipPresentation.ts`: maps media time into inset clip rectangles and back. Scrubbing a separator returns its cut timestamp. The playhead does not wait or animate through a separator. + +Clip resizing is constrained by available source footage and minimum clip duration, rather than collision with the next clip. Dragging a clip chooses an insertion index rather than looking for empty space. Source-based captions are reprojected from their original cues. Imported audio retains its duration as its anchor moves. Annotation selection is independent of whether the annotation is visible at the current playhead time. + +Legacy projects with primary-track gaps are normalized before establishing the loaded undo baseline. Editing and export use the same contiguous clip positions. + +## Verification + +135 focused unit tests passed for sequence packing/rippling, persistence, drag and resize resolution, visual seam mapping, playback, annotation visibility and deletion shortcuts. All 13 renderer regressions passed for block deletion, dragged annotation selection, background transitions, gap-free trims, clip reordering, and connected annotation/audio undo. These browser checks use fixture media and a mocked Electron bridge. + +## Boundary snapping and preview motion + +Timeline effects use the same media-to-display mapping as clips and the playhead. Dragging or resizing a zoom, annotation, caption, or audio block snaps within 8 screen pixels of other block boundaries, including clip cuts, at every timeline zoom level. Dragging preserves the block duration. Moving beyond that distance releases the snap. Zoom blocks can span visual separators continuously. + +Hover previews and caption placement use the same inverse mapping. Keyframe positions and playhead snapping use media time consistently. Source-video seeks at contiguous cuts preserve camera springs; explicit timeline seeks still snap to the requested frame. + +Caption visibility was checked in the real renderer with fixture footage at 1×, 2× and 4×, including source-frame matching, cue visibility boundaries and moving playback. The caption test captures the preview at 2×. This verifies rendering and timing, not speech-recognition accuracy or a packaged export. diff --git a/docs/ui-redundancy-audit.md b/docs/ui-redundancy-audit.md new file mode 100644 index 000000000..0cdd8fcad --- /dev/null +++ b/docs/ui-redundancy-audit.md @@ -0,0 +1,65 @@ +# HeroUI editor redundancy audit + +Reviewed 19 September 2026 in the `recordly-heroui` redesign. Findings use the current renderer and source, including the existing uncommitted redesign work. + +## Cleaned up + +| Area | Problem | Change | +| --- | --- | --- | +| Zoom inspector | Two Delete Zoom buttons for the same selected block: one in the scrolling content, another in the fixed footer. | Kept the fixed footer action. | +| Extensions navigation | A permanent tool tab leads only to “Extensions are no longer available.” | Removed the navigation entry; retained the existing compatibility component. | +| Account navigation | A permanent button only shows “Account coming soon.” | Removed the placeholder button. | +| Clip and Caption inspectors | The panel title is repeated immediately as a section heading without introducing a subsection. | Kept the panel title and removed the repeated heading. | +| Basic Zoom inspector | Animation heading, Reset button and directions to Settings appear without an animation control. The actual control is Advanced-only. | Grouped these with Classic Animation under Advanced. | + +## Further consolidation opportunities + +These are recommendations, not additional changes in this patch. + +1. **Crop has two separate editing surfaces.** The toolbar opens the visual Crop Video dialog; Scene → Advanced offers four inset sliders for the same crop state. Put precise inset inputs and reset inside the crop dialog so there is one place to edit cropping. Preserve numeric precision when consolidating. +2. **Zoom controls are scattered across two inspectors.** The block inspector contains Mode, Amount and Classic Animation; Settings contains Connect neighboring zooms, automatic suggestions and Motion Presets. Group motion settings in a clearly labelled project-wide subsection alongside Zoom controls, instead of a message directing users elsewhere. Some motion presets also affect the cursor, so their scope must stay explicit. +3. **Adding content is split between Add Layer and adjacent buttons.** Add Layer offers annotation/audio, while Add Zoom is a separate icon. A single Add menu could enumerate all supported insertions; keep Split separate as an editing operation. Hover-to-add is useful direct manipulation and need not be removed. +4. **Support commands occupy permanent editing-toolbar space.** Discord and Feedback sit beside project opening and Undo/Redo. A single Help menu could contain both plus shortcut help. This is lower-priority toolbar clutter, not two identical functions. +5. **Audio repeats its inspector title.** An “Audio” heading inside the Audio inspector mainly provides a home for Reset. Move Reset to the inspector header when standardizing section actions. +6. **Saved Presets and Motion Presets need clearer scope.** The header stores whole-editor presets; Settings applies motion presets. These are different functions, but the repeated naming obscures that distinction. Label the former “Style presets” and the latter “Motion” or explain their scope. + +Removed the unused compatibility timeline toolbar and its design-catalog fixture, plus the unmounted TimelineAxis and ClipMarkerOverlay components. Removed ignored SliderControl props and their call-site values. + +## Interaction defects fixed + +- Connected `handleClipDelete` to `TimelineEditor.onClipDelete`. Previously Backspace reached a no-op because the callback was absent. +- Routed Delete, Backspace and the configured delete shortcut consistently for every selected block type before the timeline-focus check. Inspecting a block no longer makes it undeletable. Form controls, editable text, composition events and overlay controls retain their own keyboard behavior. +- Removed the clip-only Backspace special case, which bypassed shared selection priority. +- Preserved a selected caption fragment when the playhead leaves its time span. Deletion still maps the fragment to its source caption cue. +- Removed unnecessary requirements for optional selection callbacks from clip, annotation and audio deletion. +- Cleared stale keyframe selection when selecting a timeline block. +- Cleared block selection when navigating to a global sidebar tool. A selected annotation previously overrode every tool's inspector, making Cursor, Scene, Webcam and Settings appear to show the same content. + +## Validation + +Passed: TypeScript checking, 72 focused unit tests, 14 browser tests, targeted lint, and diff whitespace checks. + +Regression coverage includes keyboard deletion for each block type, inspector deletion, clip undo, caption deletion after seeking, text-entry protection, and switching away from an annotation inspector. Unit coverage includes both delete keys, configured shortcuts, selection priority, editable/overlay guards and composition/modifier handling. Browser tests use the real renderer with a mocked Electron bridge and fixture media; packaged Electron is not exercised here. + +## Videos library and HUD follow-up + +- HUD source/device rows and source/region triggers use ghost buttons. Project cards fit the 300px HUD popup, scroll vertically with thin scrollbars, and no longer truncate the library at 24 entries. +- Caption generation skips session re-registration when the source is unchanged, preserving active companion-audio approvals. Local media URLs resolve the current server port; preview retries a failed local load once through the existing approved-media API. +- Videos uses a secondary header button at the far left and replaces the existing left inspector with lightweight file cards (no embedded video players). It lists files in the configured recordings directory. Removal sends the selected recordings and their capture companions to system Trash. Session undo restores from a temporary recovery copy without overwriting newer files. This replaces the earlier hide-only behavior. Automatic recording age/count pruning is removed. +- Timeline drops insert at a clip boundary. Since preview/export share a single source, imports prepare an immutable combined source in `.recordly-media`. New footage fits the current source canvas/frame rate; subsequent imports copy existing prepared video, with lossless system/mic companions and shifted cursor telemetry. Preparation takes time for large recordings. Clip source bounds prevent trimming into the next recording. Timeline history can undo/redo insertions because existing source offsets are retained. +- The existing FFmpeg metadata parser is now shared by import and export, rather than duplicating it or depending on the incompatible FFprobe binary found in this development install. + +Validation: real FFmpeg integration covers differing dimensions, audio routing, repeated inserts, and original preservation. Browser tests cover library removal/undo, drag insertion/undo/redo, caption generation without session reset, preview recovery, and 30 projects in the HUD popup. Caption visibility at 1x/2x/4x and gap snapping remain covered. + + +## Clips, overlays, and cloud integration + +- The Videos inspector uses shared search, checkbox, menu, and button controls. File rows support selection, double-click/+ insertion, and drag-to-timeline; bulk Trash is in the actions menu. No library video elements are loaded. +- Webcam imports normalize and concatenate a separate webcam track, account for capture start offsets, and preserve source-time visibility ranges. Preview and both renderer paths hide the bubble in screen-only spans. Saved projects preserve these ranges; style presets omit them and preserve the current source's ranges when applied. +- Imported click, mouse-up, right-click, and cursor-shape samples retain event types, shifted timestamps, and letterbox-adjusted coordinates. +- Annotation drag bounds now use the complete canvas. Position percentages may extend outside the recording rectangle and survive save/reload; export uses the same coordinates. Webcam and caption overlays already use their own canvas layout. +- Zoom blocks show the icon with the full label when space allows; narrow blocks hide the icon and mode while retaining the numeric multiplier. +- Cloud integration was ported from the cloud worktree, including its current service/viewer edits, desktop authentication, multipart uploads, and preparation of the current edit for sharing. Account lives at the bottom of the tool rail; Create share link lives in Export. Nothing was deployed or uploaded. Live sign-in requires the public Supabase environment settings described in authentication.md. + + +Thumbnail and sign-in refinement: Videos uses lazily requested 160×90 JPEG stills, cached by source path, modification time, and size. It displays unmodified filenames, including extensions, with ellipsis and the full hover title. Sign-in uses HeroUI Modal, Form, TextField, Input, Button, and Alert components with shared styling. diff --git a/electron-builder.json5 b/electron-builder.json5 index 73d57fb8b..4a6b6aed1 100644 --- a/electron-builder.json5 +++ b/electron-builder.json5 @@ -11,6 +11,12 @@ "electron/native/bin/**" ], "productName": "Recordly", + "protocols": [ + { + "name": "Recordly authentication", + "schemes": ["recordly"] + } + ], "npmRebuild": true, "buildDependenciesFromSource": true, "compression": "normal", diff --git a/electron/authCallback.ts b/electron/authCallback.ts new file mode 100644 index 000000000..bfbbbea9f --- /dev/null +++ b/electron/authCallback.ts @@ -0,0 +1,121 @@ +import { createServer, type Server } from "node:http"; +import { app, BrowserWindow, ipcMain } from "electron"; + +const DEV_CALLBACK_HOST = "127.0.0.1:43821"; +const DEV_CALLBACK_ORIGIN = `http://${DEV_CALLBACK_HOST}`; +const CALLBACK_PATH = "/callback"; +const LOOPBACK_CALLBACK_PATH = "/auth/callback"; +const MAX_CALLBACK_URL_LENGTH = 8192; +const CALLBACK_PARAMETERS = new Set(["code", "error", "error_code", "error_description"]); + +type AuthCallbackOptions = { + isDev: boolean; + focusApp: () => void; +}; + +function callbackHeaders(contentType: string) { + return { + "Cache-Control": "no-store", + "Content-Security-Policy": + "default-src 'none'; style-src 'unsafe-inline'; base-uri 'none'; frame-ancestors 'none'", + "Content-Type": contentType, + "Referrer-Policy": "no-referrer", + "X-Content-Type-Options": "nosniff", + }; +} + +export function createAuthCallbackController({ isDev, focusApp }: AuthCallbackOptions) { + const protocol = isDev ? "recordly-dev" : "recordly"; + let pendingUrl: string | null = null; + let server: Server | null = null; + + function parseCallback(rawUrl: string): URL | null { + if (rawUrl.length > MAX_CALLBACK_URL_LENGTH) return null; + try { + const url = new URL(rawUrl); + if (url.protocol !== `${protocol}:` || url.hostname !== "auth") return null; + if (url.pathname !== CALLBACK_PATH || url.username || url.password) return null; + return url; + } catch { + return null; + } + } + + function find(args: readonly string[]) { + return args.find((arg) => parseCallback(arg) !== null) ?? null; + } + + function dispatch(rawUrl: string) { + const url = parseCallback(rawUrl); + if (!url) return false; + pendingUrl = url.href; + for (const window of BrowserWindow.getAllWindows()) { + if (!window.isDestroyed()) window.webContents.send("auth:callback", url.href); + } + if (app.isReady()) focusApp(); + return true; + } + + function startDevServer() { + if (!isDev || server) return; + server = createServer((request, response) => { + if ( + request.method !== "GET" || + request.headers.host !== DEV_CALLBACK_HOST || + (request.url?.length ?? 0) > MAX_CALLBACK_URL_LENGTH + ) { + response.writeHead(404, callbackHeaders("text/plain; charset=utf-8")); + response.end("Not found"); + return; + } + + const requestUrl = new URL(request.url ?? "/", DEV_CALLBACK_ORIGIN); + if (requestUrl.pathname !== LOOPBACK_CALLBACK_PATH) { + response.writeHead(404, callbackHeaders("text/plain; charset=utf-8")); + response.end("Not found"); + return; + } + + const appUrl = new URL(`${protocol}://auth${CALLBACK_PATH}`); + for (const key of CALLBACK_PARAMETERS) { + for (const value of requestUrl.searchParams.getAll(key)) { + appUrl.searchParams.append(key, value); + } + } + if (!appUrl.searchParams.has("code") && !appUrl.searchParams.has("error")) { + response.writeHead(400, callbackHeaders("text/plain; charset=utf-8")); + response.end("Invalid authentication callback"); + return; + } + + dispatch(appUrl.href); + response.writeHead(200, callbackHeaders("text/html; charset=utf-8")); + response.end( + 'Signed into Recordly

Signed into Recordly

You can close this tab and return to the app.

', + ); + }); + server.on("error", (error) => { + console.error("[auth] Could not start local callback server", error); + server = null; + }); + server.listen(43821, "127.0.0.1"); + } + + function close() { + server?.close(); + server = null; + } + + app.on("open-url", (event, url) => { + event.preventDefault(); + dispatch(url); + }); + + ipcMain.handle("auth:get-pending-callback", () => { + const callback = pendingUrl; + pendingUrl = null; + return callback; + }); + + return { close, dispatch, find, protocol, startDevServer }; +} diff --git a/electron/electron-env.d.ts b/electron/electron-env.d.ts index 1a926718f..6ee89b0ea 100644 --- a/electron/electron-env.d.ts +++ b/electron/electron-env.d.ts @@ -752,6 +752,26 @@ interface Window { }>; getCurrentVideoPath: () => Promise<{ success: boolean; path?: string }>; clearCurrentVideoPath: () => Promise<{ success: boolean }>; + getRecordingThumbnail: (filePath: string) => Promise>; + cancelRecordingImport: () => Promise<{ success: boolean }>; + listRecordings: () => Promise< + import("../src/types/recordingLibrary").LibraryResult< + import("../src/types/recordingLibrary").RecordingLibraryEntry[] + > + >; + setRecordingsRemoved: ( + paths: string[], + removed: boolean, + ) => Promise>; + importRecording: ( + currentPath: string, + recordingPath: string, + webcam?: import("../src/types/recordingLibrary").RecordingWebcamSource, + ) => Promise< + import("../src/types/recordingLibrary").LibraryResult< + import("../src/types/recordingLibrary").RecordingImportResult + > + >; deleteRecordingFile: (filePath: string) => Promise<{ success: boolean; error?: string }>; getLocalMediaUrl: ( filePath: string, @@ -864,11 +884,41 @@ interface Window { onMenuLoadProject: (callback: () => void) => () => void; onMenuSaveProject: (callback: () => void) => () => void; onMenuSaveProjectAs: (callback: () => void) => () => void; + getWindowChrome: () => Promise<{ trafficLightsVisible: boolean }>; + onWindowChromeChanged: ( + callback: (chrome: { trafficLightsVisible: boolean }) => void, + ) => () => void; getPlatform: () => Promise; + isWindowFullscreen: () => Promise; + onWindowFullscreenChanged: (callback: (isFullscreen: boolean) => void) => () => void; getLinuxWindowSystem: () => Promise<"wayland" | "x11" | null>; + getPendingAuthCallbackUrl: () => Promise; + onAuthCallbackUrl: (callback: (url: string) => void) => () => void; revealInFolder: ( filePath: string, ) => Promise<{ success: boolean; error?: string; message?: string }>; + cloudShareUpload: (input: { + filePath: string; + endpoint: string; + token?: string; + title?: string; + notes?: string; + uploadId?: string; + }) => Promise<{ + success: boolean; + uploadId?: string; + shareUrl?: string; + canceled?: boolean; + error?: string; + }>; + cloudShareCancel: (uploadId: string) => Promise<{ success: boolean }>; + onCloudShareProgress: ( + callback: (progress: { + uploadId: string; + uploadedBytes: number; + totalBytes: number; + }) => void, + ) => () => void; openRecordingsFolder: () => Promise<{ success: boolean; error?: string; message?: string }>; getRecordingsDirectory: () => Promise<{ success: boolean; diff --git a/electron/ipc/captions/generate.ts b/electron/ipc/captions/generate.ts index 246c4f1aa..f394769ab 100644 --- a/electron/ipc/captions/generate.ts +++ b/electron/ipc/captions/generate.ts @@ -7,11 +7,16 @@ import { app } from "electron"; import { getFfmpegBinaryPath } from "../ffmpeg/binary"; import { getBundledWhisperExecutableCandidates } from "../paths/binaries"; import { resolveRecordingSession } from "../project/session"; -import { getUsableCompanionAudioCandidates } from "../recording/diagnostics"; +import { + getCompanionAudioStartDelayMs, + getUsableCompanionAudioCandidates, +} from "../recording/diagnostics"; import { normalizeVideoSourcePath } from "../utils"; -import { getCaptionCompanionAudioCandidates } from "./audioCandidates"; -import { parseSrtCues, parseWhisperJsonCues, shouldRetryWhisperWithoutJson } from "./parser"; +import { type CaptionAudioCandidate, getCaptionCompanionAudioCandidates } from "./audioCandidates"; +import { shouldRetryWhisperWithoutJson } from "./parser"; +import { readWhisperCaptionOutput } from "./output"; import { isMissingWindowsWhisperRuntimeDependency } from "./runtimeErrors"; +import { mergeCaptionSources } from "./mergeSources"; import { segmentCuesIntoPhrases } from "./segment"; import { parseSilenceIntervals, @@ -22,6 +27,8 @@ import { const execFileAsync = promisify(execFile); +class NoCaptionAudioError extends Error {} + async function executeWhisper(whisperExecutablePath: string, args: string[]) { try { await execFileAsync(whisperExecutablePath, args, { @@ -116,9 +123,15 @@ export async function resolveCaptionAudioCandidates(videoPath: string) { candidates.push({ path: normalizedCandidatePath, label }); }; - pushCandidate(videoPath, "recording"); const companionAudio = await getUsableCompanionAudioCandidates(videoPath); - for (const candidate of getCaptionCompanionAudioCandidates(companionAudio)) { + const companions = getCaptionCompanionAudioCandidates(companionAudio); + for (const candidate of companions.filter( + (candidate) => candidate.label === "microphone audio sidecar", + )) { + pushCandidate(candidate.path, candidate.label); + } + pushCandidate(videoPath, "recording"); + for (const candidate of companions) { pushCandidate(candidate.path, candidate.label); } @@ -132,8 +145,10 @@ export async function extractCaptionAudioSource(options: { videoPath: string; ffmpegPath: string; wavPath: string; + candidates?: CaptionAudioCandidate[]; }) { - const candidates = await resolveCaptionAudioCandidates(options.videoPath); + const candidates = + options.candidates ?? (await resolveCaptionAudioCandidates(options.videoPath)); const attemptedCandidates: Array<{ path: string; label: string; @@ -145,6 +160,9 @@ export async function extractCaptionAudioSource(options: { for (const candidate of candidates) { try { await ensureReadableFile(candidate.path); + const delayMs = candidate.label.endsWith("audio sidecar") + ? ((await getCompanionAudioStartDelayMs(candidate.path)) ?? 0) + : 0; await execFileAsync( options.ffmpegPath, [ @@ -154,6 +172,7 @@ export async function extractCaptionAudioSource(options: { "-map", "0:a:0", "-vn", + ...(delayMs > 0 ? ["-af", `adelay=${delayMs}:all=1`] : []), "-ac", "1", "-ar", @@ -181,7 +200,7 @@ export async function extractCaptionAudioSource(options: { attemptedCandidates, ); - throw new Error( + throw new NoCaptionAudioError( "No audio was found to transcribe in the saved recording file. Captions need an audio track. If this recording should have contained sound, the recording was saved without an audio stream.", ); } @@ -210,11 +229,12 @@ export async function detectSilenceIntervals(options: { return parseSilenceIntervals(stderr ?? ""); } -export async function generateAutoCaptionsFromVideo(options: { +async function generateCaptionsForSource(options: { videoPath: string; whisperExecutablePath?: string; whisperModelPath: string; language?: string; + candidates: CaptionAudioCandidate[]; }) { const ffmpegPath = getFfmpegBinaryPath(); const normalizedVideoPath = normalizeVideoSourcePath(options.videoPath); @@ -241,6 +261,7 @@ export async function generateAutoCaptionsFromVideo(options: { videoPath: normalizedVideoPath, ffmpegPath, wavPath, + candidates: options.candidates, }); const language = @@ -256,6 +277,9 @@ export async function generateAutoCaptionsFromVideo(options: { "-l", language, "-np", + // Do not carry a hallucinated phrase through later decoding windows. + "-mc", + "0", ]; let jsonEnabled = true; @@ -274,22 +298,7 @@ export async function generateAutoCaptionsFromVideo(options: { await executeWhisper(whisperExecutablePath, whisperBaseArgs); } - const timedCues = jsonEnabled - ? parseWhisperJsonCues(await fs.readFile(jsonPath, "utf-8")) - : []; - if (jsonEnabled && timedCues.length === 0) { - // JSON ran but yielded no word-timed cues (empty/malformed output). We fall back - // to SRT, which has no word timings — captions are then split by sentence text and - // silence rather than precise word timing. Surface it for diagnosis. - console.warn( - "[auto-captions] Whisper JSON produced no word-timed cues; falling back to SRT (no word timings).", - ); - } - const cues = - timedCues.length > 0 ? timedCues : parseSrtCues(await fs.readFile(srtPath, "utf-8")); - if (cues.length === 0) { - throw new Error("Whisper completed, but no caption cues were produced."); - } + const cues = await readWhisperCaptionOutput(outputBase, jsonEnabled); // Whisper cues run sentences together and don't break on pauses. Re-segment them // into one caption per sentence/phrase using Whisper's own word stream (punctuation @@ -321,3 +330,38 @@ export async function generateAutoCaptionsFromVideo(options: { ]); } } + +export async function generateAutoCaptionsFromVideo(options: { + videoPath: string; + whisperExecutablePath?: string; + whisperModelPath: string; + language?: string; +}) { + const candidates = await resolveCaptionAudioCandidates(options.videoPath); + const microphone = candidates.filter((source) => source.label === "microphone audio sidecar"); + const system = candidates.filter((source) => source.label === "system audio sidecar"); + const secondary = candidates.filter( + (source) => !microphone.includes(source) && !system.includes(source), + ); + if (microphone.length === 0) { + return generateCaptionsForSource({ ...options, candidates: [...system, ...candidates] }); + } + // Decode independently so simultaneous voices do not confuse recognition. The + // sidecar replaces embedded system audio to avoid transcribing it twice. + const transcribeTrack = async (sources: CaptionAudioCandidate[]) => { + try { + return (await generateCaptionsForSource({ ...options, candidates: sources })).cues; + } catch (error) { + if (!(error instanceof NoCaptionAudioError)) throw error; + return null; + } + }; + const micCues = await transcribeTrack(microphone); + const systemCues = await transcribeTrack([...system, ...secondary]); + if (micCues === null && systemCues === null) + throw new NoCaptionAudioError("No audio could be extracted from the recording."); + return { + cues: mergeCaptionSources(micCues ?? [], systemCues ?? []), + audioSourceLabel: "microphone and system audio", + }; +} diff --git a/electron/ipc/captions/generation.test.ts b/electron/ipc/captions/generation.test.ts new file mode 100644 index 000000000..70ba26588 --- /dev/null +++ b/electron/ipc/captions/generation.test.ts @@ -0,0 +1,166 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; + +const mocks = vi.hoisted(() => ({ + exec: vi.fn(), + readFile: vi.fn(), + rm: vi.fn(), + companions: vi.fn(), + delay: vi.fn(), + session: vi.fn(), +})); +vi.mock("node:child_process", () => ({ + execFile: (...args: unknown[]) => { + const callback = args.pop() as (error: Error | null, result: unknown) => void; + Promise.resolve() + .then(() => mocks.exec(...args)) + .then( + (result) => callback(null, result ?? { stderr: "" }), + (error) => callback(error, undefined), + ); + }, + spawnSync: vi.fn(), +})); +vi.mock("node:fs/promises", () => ({ + default: { + access: vi.fn().mockResolvedValue(undefined), + readFile: mocks.readFile, + rm: mocks.rm, + }, +})); +vi.mock("electron", () => ({ app: { getPath: () => "/tmp" } })); +vi.mock("../ffmpeg/binary", () => ({ getFfmpegBinaryPath: () => "/ffmpeg" })); +vi.mock("../paths/binaries", () => ({ getBundledWhisperExecutableCandidates: () => ["/whisper"] })); +vi.mock("../project/session", () => ({ resolveRecordingSession: mocks.session })); +vi.mock("../recording/diagnostics", () => ({ + getUsableCompanionAudioCandidates: mocks.companions, + getCompanionAudioStartDelayMs: mocks.delay, +})); +vi.mock("../utils", () => ({ normalizeVideoSourcePath: (value: string) => value })); + +import { generateAutoCaptionsFromVideo } from "./generate"; + +const options = { videoPath: "/video.mp4", whisperModelPath: "/model.bin" }; +const srt = "1\n00:00:00,000 --> 00:00:02,000\nHello world.\n"; +const json = JSON.stringify({ + transcription: [ + { + offsets: { from: 0, to: 2000 }, + text: "Hello world.", + tokens: [ + { text: "Hello", offsets: { from: 0, to: 900 } }, + { text: " world.", offsets: { from: 900, to: 2000 } }, + ], + }, + ], +}); + +beforeEach(() => { + vi.clearAllMocks(); + mocks.session.mockReset().mockResolvedValue(null); + mocks.companions.mockReset().mockResolvedValue([]); + mocks.delay.mockReset().mockResolvedValue(null); + mocks.exec.mockReset().mockResolvedValue({ stderr: "" }); + mocks.readFile + .mockReset() + .mockImplementation(async (file: string) => (file.endsWith(".json") ? json : srt)); + mocks.rm.mockResolvedValue(undefined); +}); + +const whisperCalls = () => mocks.exec.mock.calls.filter(([file]) => file === "/whisper"); + +describe("caption generation pipeline", () => { + it("transcribes both sidecars independently, preserving the microphone delay", async () => { + mocks.companions.mockResolvedValue([ + { + platform: "mac", + micPath: "/video.mic.wav", + systemPath: "/video.system.wav", + usablePaths: ["/video.system.wav", "/video.mic.wav"], + }, + ]); + mocks.delay.mockResolvedValue(450); + const result = await generateAutoCaptionsFromVideo(options); + expect(result.audioSourceLabel).toBe("microphone and system audio"); + expect(whisperCalls()).toHaveLength(2); + expect(mocks.exec.mock.calls.some(([, args]) => args.includes("/video.system.wav"))).toBe( + true, + ); + expect(mocks.exec.mock.calls[0][1]).toEqual( + expect.arrayContaining(["-i", "/video.mic.wav", "-af", "adelay=450:all=1"]), + ); + }); + + it("falls back to embedded audio when the microphone cannot be extracted", async () => { + mocks.companions.mockResolvedValue([ + { + platform: "mac", + micPath: "/video.mic.wav", + systemPath: "/video.system.wav", + usablePaths: ["/video.mic.wav"], + }, + ]); + mocks.exec.mockImplementation(async (_file: string, args: string[]) => { + if (args.includes("/video.mic.wav")) throw new Error("unreadable microphone"); + return { stderr: "" }; + }); + expect((await generateAutoCaptionsFromVideo(options)).cues[0].text).toBe("Hello world."); + }); + + it("extracts mono audio, transcribes, segments word timings and cleans up", async () => { + const result = await generateAutoCaptionsFromVideo(options); + expect(result.cues[0].text).toBe("Hello world."); + expect(result.cues[0].words).toHaveLength(2); + expect(mocks.exec.mock.calls[0][1]).toEqual( + expect.arrayContaining(["-ac", "1", "-ar", "16000"]), + ); + expect(whisperCalls()).toHaveLength(1); + expect(whisperCalls()[0][1]).toEqual(expect.arrayContaining(["-mc", "0"])); + expect(mocks.rm).toHaveBeenCalledTimes(3); + }); + + it("retries SRT only for a runtime that rejects full JSON", async () => { + mocks.exec.mockImplementation(async (file: string, args: string[]) => { + if (file === "/whisper" && args.includes("-ojf")) + throw new Error("unknown argument: -ojf"); + return { stderr: "" }; + }); + expect((await generateAutoCaptionsFromVideo(options)).cues).toHaveLength(1); + expect(whisperCalls()).toHaveLength(2); + expect(whisperCalls()[1][1]).not.toContain("-ojf"); + }); + + it("keeps transcription when optional silence detection fails", async () => { + mocks.exec.mockImplementation(async (_file: string, args: string[]) => { + if (args.includes("-af")) throw new Error("silence filter failed"); + return { stderr: "" }; + }); + expect((await generateAutoCaptionsFromVideo(options)).cues[0].text).toBe("Hello world."); + }); +}); + +it("falls back to linked webcam audio when mic exists and other secondary sources fail", async () => { + mocks.session.mockResolvedValue({ webcamPath: "/webcam.mp4" }); + mocks.companions.mockResolvedValue([ + { + platform: "mac", + micPath: "/video.mic.wav", + systemPath: "/video.system.wav", + usablePaths: ["/video.mic.wav", "/video.system.wav"], + }, + ]); + mocks.exec.mockImplementation(async (file: string, args: string[]) => { + if (file === "/ffmpeg" && args.includes("pcm_s16le")) { + const source = args[args.indexOf("-i") + 1]; + if (source === "/video.mp4" || source === "/video.system.wav") + throw new Error("No audio"); + } + return { stderr: "" }; + }); + const result = await generateAutoCaptionsFromVideo(options); + expect(result.cues.length).toBeGreaterThan(0); + expect( + mocks.exec.mock.calls.some( + ([file, args]) => file === "/ffmpeg" && args.includes("/webcam.mp4"), + ), + ).toBe(true); +}); diff --git a/electron/ipc/captions/mergeSources.test.ts b/electron/ipc/captions/mergeSources.test.ts new file mode 100644 index 000000000..4e7bb5240 --- /dev/null +++ b/electron/ipc/captions/mergeSources.test.ts @@ -0,0 +1,94 @@ +import { expect, it } from "vitest"; +import { mergeCaptionSources } from "./mergeSources"; +import { parseWhisperJsonCues } from "./parser"; + +it("keeps system speech when the microphone has no speech", () => { + const system = [{ id: "s", startMs: 0, endMs: 1000, text: "System speech" }]; + expect(mergeCaptionSources([], system)[0].text).toBe("System speech"); +}); +it("keeps both tracks, choosing mic only for overlapping words", () => { + const mic = [{ id: "m", startMs: 1000, endMs: 2000, text: "Mic speech" }]; + const system = [ + { + id: "s", + startMs: 0, + endMs: 3000, + text: "Before conflict after", + words: [ + { text: "Before", startMs: 0, endMs: 900 }, + { text: "conflict", startMs: 1100, endMs: 1900, leadingSpace: true }, + { text: "after", startMs: 2100, endMs: 3000, leadingSpace: true }, + ], + }, + ]; + expect(mergeCaptionSources(mic, system).map((cue) => cue.text)).toEqual([ + "Before", + "Mic speech", + "after", + ]); +}); +it("retains real Whisper word timing through control tokens and punctuation", () => { + const cues = parseWhisperJsonCues( + JSON.stringify({ + transcription: [ + { + offsets: { from: 0, to: 1000 }, + text: "Hello.", + tokens: [ + { text: "[_BEG_]", offsets: { from: 0, to: 0 } }, + { text: " Hello", offsets: { from: 0, to: 900 } }, + { text: ".", offsets: { from: 900, to: 900 } }, + { text: "[_TT_50]", offsets: { from: 1000, to: 1000 } }, + ], + }, + ], + }), + ); + expect(cues[0].words).toEqual([{ text: "Hello.", startMs: 0, endMs: 900 }]); +}); + +it("does not let mic sound labels replace system speech", () => { + expect( + mergeCaptionSources( + [{ id: "m", startMs: 0, endMs: 2000, text: "[Coughing]" }], + [{ id: "s", startMs: 0, endMs: 2000, text: "The spoken paragraph." }], + ).map((c) => c.text), + ).toEqual(["The spoken paragraph."]); +}); + +it("preserves untimed speech next to timed words", async () => { + const { segmentCuesIntoPhrases } = await import("./segment"); + const result = segmentCuesIntoPhrases( + [ + { + id: "a", + startMs: 0, + endMs: 1000, + text: "First.", + words: [{ text: "First.", startMs: 0, endMs: 1000 }], + }, + { id: "b", startMs: 1000, endMs: 3000, text: "There is a timeline editor." }, + ], + [], + ); + expect(result.map((c) => c.text).join(" ")).toContain("There is a timeline editor."); +}); + +it("preserves system speech between timed microphone words", () => { + const result = mergeCaptionSources( + [ + { + id: "mic", + startMs: 0, + endMs: 3000, + text: "Hello again", + words: [ + { text: "Hello", startMs: 0, endMs: 600 }, + { text: "again", startMs: 2400, endMs: 3000 }, + ], + }, + ], + [{ id: "system", startMs: 1000, endMs: 1800, text: "In the gap" }], + ); + expect(result.map((cue) => cue.text)).toContain("In the gap"); +}); diff --git a/electron/ipc/captions/mergeSources.ts b/electron/ipc/captions/mergeSources.ts new file mode 100644 index 000000000..6d44622c0 --- /dev/null +++ b/electron/ipc/captions/mergeSources.ts @@ -0,0 +1,47 @@ +import type { CaptionCuePayload, CaptionWordPayload } from "../types"; +import { buildCaptionTextFromWords } from "./parser"; + +/** Keep both speakers, with microphone speech taking priority during overlap. */ +export function mergeCaptionSources( + microphone: CaptionCuePayload[], + system: CaptionCuePayload[], +): CaptionCuePayload[] { + // Sound-event labels are not competing microphone speech. + const micSpeech = microphone.filter((cue) => !/^(?:\s*[[(][^\])]+[\])]\s*)+$/.test(cue.text)); + const micSpans = micSpeech.flatMap((cue) => (cue.words?.length ? cue.words : [cue])); + const overlapsMic = (startMs: number, endMs: number) => + micSpans.some((span) => startMs < span.endMs && endMs > span.startMs); + const systemCues: CaptionCuePayload[] = []; + for (const cue of system) { + if (!overlapsMic(cue.startMs, cue.endMs)) { + systemCues.push(cue); + continue; + } + // Preserve words outside the conflict, rather than dropping a whole paragraph. + let run: CaptionWordPayload[] = []; + const flush = () => { + if (run.length === 0) return; + systemCues.push({ + id: cue.id, + startMs: run[0].startMs, + endMs: run[run.length - 1].endMs, + text: buildCaptionTextFromWords(run), + words: run, + }); + run = []; + }; + for (const word of cue.words ?? []) { + if (overlapsMic(word.startMs, word.endMs)) flush(); + else run.push(word); + } + flush(); + } + const micEvents = microphone.filter( + (cue) => + !micSpeech.includes(cue) && + !system.some((other) => cue.startMs < other.endMs && cue.endMs > other.startMs), + ); + return [...micSpeech, ...micEvents, ...systemCues] + .sort((a, b) => a.startMs - b.startMs || a.endMs - b.endMs) + .map((cue, index) => ({ ...cue, id: `caption-${index + 1}` })); +} diff --git a/electron/ipc/captions/output.test.ts b/electron/ipc/captions/output.test.ts new file mode 100644 index 000000000..8b000966f --- /dev/null +++ b/electron/ipc/captions/output.test.ts @@ -0,0 +1,51 @@ +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { afterEach, beforeEach, expect, it } from "vitest"; +import { readWhisperCaptionOutput } from "./output"; +let directory: string; +let output: string; +beforeEach(async () => { + directory = await fs.mkdtemp(path.join(os.tmpdir(), "recordly-caption-output-")); + output = path.join(directory, "speech"); + await fs.writeFile(`${output}.srt`, "1\n00:00:01,200 --> 00:00:02,400\nFallback speech\n"); +}); +afterEach(async () => { + await fs.rm(directory, { recursive: true, force: true }); +}); +it.each([ + undefined, + "invalid json", + '{"transcription":[]}', +])("uses SRT when JSON is unusable: %s", async (json) => { + if (json !== undefined) await fs.writeFile(`${output}.json`, json); + const cues = await readWhisperCaptionOutput(output, true); + expect(cues).toEqual([ + { id: "caption-1", startMs: 1200, endMs: 2400, text: "Fallback speech" }, + ]); +}); +it("prefers valid JSON word timing", async () => { + await fs.writeFile( + `${output}.json`, + JSON.stringify({ + transcription: [ + { + offsets: { from: 1200, to: 2400 }, + text: "Timed speech", + tokens: [ + { text: "Timed", offsets: { from: 1200, to: 1800 } }, + { text: " speech", offsets: { from: 1800, to: 2400 } }, + ], + }, + ], + }), + ); + const cues = await readWhisperCaptionOutput(output, true); + expect(cues[0].text).toBe("Timed speech"); + expect(cues[0].words).toHaveLength(2); + expect(cues[0].words?.[1].startMs).toBe(1800); +}); +it("still surfaces missing subtitle output", async () => { + await fs.rm(`${output}.srt`); + await expect(readWhisperCaptionOutput(output, false)).rejects.toMatchObject({ code: "ENOENT" }); +}); diff --git a/electron/ipc/captions/output.ts b/electron/ipc/captions/output.ts new file mode 100644 index 000000000..a48f43f05 --- /dev/null +++ b/electron/ipc/captions/output.ts @@ -0,0 +1,18 @@ +import fs from "node:fs/promises"; +import { parseSrtCues, parseWhisperJsonCues } from "./parser"; + +/** Older Whisper builds may emit SRT without the requested word-timing JSON. */ +export async function readWhisperCaptionOutput(outputBase: string, jsonEnabled: boolean) { + if (jsonEnabled) { + let json = ""; + try { + json = await fs.readFile(`${outputBase}.json`, "utf8"); + } catch (error) { + if ((error as NodeJS.ErrnoException).code !== "ENOENT") throw error; + } + const timed = json ? parseWhisperJsonCues(json) : []; + if (timed.length) return timed; + console.warn("[auto-captions] No usable JSON timing output; falling back to SRT."); + } + return parseSrtCues(await fs.readFile(`${outputBase}.srt`, "utf8")); +} diff --git a/electron/ipc/captions/parser.ts b/electron/ipc/captions/parser.ts index ff4c62ce6..7ab213183 100644 --- a/electron/ipc/captions/parser.ts +++ b/electron/ipc/captions/parser.ts @@ -31,7 +31,7 @@ export function parseWhisperJsonWords(tokens: unknown): CaptionWordPayload[] { const tokenData = token as WhisperJsonToken; const tokenText = typeof tokenData.text === "string" ? tokenData.text : ""; - if (!tokenText) { + if (!tokenText || /^\[_[^\]]+\]$/.test(tokenText)) { continue; } @@ -49,11 +49,13 @@ export function parseWhisperJsonWords(tokens: unknown): CaptionWordPayload[] { continue; } - if (tokenStartMs == null || tokenEndMs == null || tokenEndMs <= tokenStartMs) { - return []; + const previousWord = words.length > 0 ? words[words.length - 1] : null; + if (previousWord && !nextLeadingSpace && /^\p{P}+$/u.test(part)) { + previousWord.text += part; + continue; } + if (tokenStartMs == null || tokenEndMs == null || tokenEndMs <= tokenStartMs) return []; - const previousWord = words.length > 0 ? words[words.length - 1] : null; if (!previousWord || nextLeadingSpace) { words.push({ text: part, @@ -179,5 +181,7 @@ export function parseSrtCues(content: string): CaptionCuePayload[] { export function shouldRetryWhisperWithoutJson(error: unknown): boolean { const message = error instanceof Error ? error.message : String(error); - return /unknown argument|output-json-full|output-json|ojf|\boj\b/i.test(message); + return /(?:unknown|unrecognized|unsupported) (?:argument|option)[:\s=]+['"]?--?(?:ojf|output-json-full)\b/i.test( + message, + ); } diff --git a/electron/ipc/captions/segment.ts b/electron/ipc/captions/segment.ts index 60407a00a..b5528447e 100644 --- a/electron/ipc/captions/segment.ts +++ b/electron/ipc/captions/segment.ts @@ -374,6 +374,17 @@ export function segmentCuesIntoPhrases( return []; } + // Keep untimed segments separate: merging them into timed segments would + // rebuild the text from words and silently discard the untimed speech. + if (!hasWordTimings(cues) && cues.some((cue) => (cue.words?.length ?? 0) > 0)) { + const segmented = cues.flatMap((cue) => segmentCuesIntoPhrases([cue], silences, options)); + segmented.sort((a, b) => a.startMs - b.startMs || a.endMs - b.endMs); + for (let index = 0; index < segmented.length - 1; index++) { + segmented[index].endMs = Math.min(segmented[index].endMs, segmented[index + 1].startMs); + } + return renumberCues(segmented.filter((cue) => cue.endMs > cue.startMs)); + } + // No word timings (SRT path): the silence-only segmenter trims/merges by acoustic // silence but can't see sentence boundaries, so a continuous paragraph would collapse // into one caption. Re-segment by silence first, then split each cue on its sentence diff --git a/electron/ipc/cloudShareContract.ts b/electron/ipc/cloudShareContract.ts new file mode 100644 index 000000000..f85a28a2c --- /dev/null +++ b/electron/ipc/cloudShareContract.ts @@ -0,0 +1,100 @@ +export type CloudShareTicket = { + uploadUrl: string; + shareUrl: string; + shareCode?: string; + method: "PUT"; + headers: Record; + finalizeUrl?: string; +}; + +const TRUSTED_SHARE_ORIGINS = new Set([ + "https://videos.recordly.dev", + "http://localhost:8787", + "http://127.0.0.1:8787", +]); + +function parseUrl(value: unknown, label: string): URL { + if (typeof value !== "string") throw new Error(`${label} is missing.`); + const url = new URL(value); + if (url.username || url.password) throw new Error(`${label} cannot contain credentials.`); + return url; +} + +export function normalizeCloudEndpoint(value: unknown): string { + if (typeof value !== "string" || value.trim().length === 0) { + throw new Error("Enter a cloud share endpoint."); + } + const url = parseUrl(value.trim(), "Cloud share endpoint"); + if (!TRUSTED_SHARE_ORIGINS.has(url.origin)) { + throw new Error("Cloud sharing is only allowed through the Recordly service."); + } + if (url.pathname !== "/api/upload" || url.search) { + throw new Error("The cloud share endpoint is invalid."); + } + url.hash = ""; + return url.toString(); +} + +function parseHttpUrl(value: unknown, label: string): string { + const url = parseUrl(value, `${label} from the server response`); + const localHttp = + url.protocol === "http:" && (url.hostname === "localhost" || url.hostname === "127.0.0.1"); + if (url.protocol !== "https:" && !localHttp) { + throw new Error(`${label} must use HTTPS (HTTP is allowed for localhost).`); + } + return url.toString(); +} + +export function parseCloudShareTicket(value: unknown): CloudShareTicket { + if (!value || typeof value !== "object" || Array.isArray(value)) { + throw new Error("The cloud share server returned an invalid response."); + } + const input = value as Record; + const uploadUrl = input.uploadUrl ?? input.uploadURL; + const shareUrl = input.shareUrl ?? input.shareURL; + const shareCode = + typeof input.shareCode === "string" && /^[a-z0-9]+$/.test(input.shareCode) + ? input.shareCode + : undefined; + const method = input.method === undefined ? "PUT" : input.method; + if (method !== "PUT") throw new Error("Only presigned PUT uploads are currently supported."); + const headers: Record = {}; + if (input.headers !== undefined) { + if (!input.headers || typeof input.headers !== "object" || Array.isArray(input.headers)) { + throw new Error("Upload headers must be an object."); + } + for (const [key, headerValue] of Object.entries(input.headers)) { + if (typeof headerValue !== "string") + throw new Error("Upload header values must be strings."); + if ( + [ + "authorization", + "cookie", + "host", + "content-length", + "proxy-authorization", + ].includes(key.toLowerCase()) + ) { + throw new Error(`The upload header ${key} is not allowed.`); + } + headers[key] = headerValue; + } + } + const parsedUploadUrl = parseHttpUrl(uploadUrl, "uploadUrl"); + const parsedShareUrl = parseHttpUrl(shareUrl, "shareUrl"); + let finalizeUrl: string | undefined; + if (typeof input.finalizeUrl === "string") { + finalizeUrl = parseHttpUrl(input.finalizeUrl, "finalizeUrl"); + } else if (typeof input.shareCode === "string" && /^[a-z0-9]+$/.test(input.shareCode)) { + // Voom marks a recording ready after metadata is posted. + finalizeUrl = new URL(`/api/metadata/${input.shareCode}`, parsedShareUrl).toString(); + } + return { + uploadUrl: parsedUploadUrl, + shareUrl: parsedShareUrl, + shareCode, + method, + headers, + finalizeUrl, + }; +} diff --git a/electron/ipc/constants.ts b/electron/ipc/constants.ts index 2c5cf8f17..9e438b4b4 100644 --- a/electron/ipc/constants.ts +++ b/electron/ipc/constants.ts @@ -12,8 +12,6 @@ export const RECORDINGS_SETTINGS_FILE = path.join(USER_DATA_PATH, "recordings-se export const COUNTDOWN_SETTINGS_FILE = path.join(USER_DATA_PATH, "countdown-settings.json"); export const APP_SETTINGS_FILE = path.join(USER_DATA_PATH, "app-settings.json"); export const AUTO_RECORDING_PREFIX = "recording-"; -export const AUTO_RECORDING_RETENTION_COUNT = 20; -export const AUTO_RECORDING_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1000; export const ALLOW_RECORDLY_WINDOW_CAPTURE = Boolean(process.env["VITE_DEV_SERVER_URL"]); export const RECORDING_SESSION_MANIFEST_SUFFIX = ".recordly-session.json"; export const WHISPER_MODEL_DOWNLOAD_URL = diff --git a/electron/ipc/export/native-video.ts b/electron/ipc/export/native-video.ts index 81b56b480..1aa5fc4e2 100644 --- a/electron/ipc/export/native-video.ts +++ b/electron/ipc/export/native-video.ts @@ -1,3 +1,11 @@ +import { probeNativeVideoMetadata, type NativeVideoMetadataProbe } from "../ffmpeg/metadata"; +export { + probeNativeVideoMetadata, + parseNativeVideoMetadataProbeOutput, + parseFfmpegDurationSeconds, + parseFfmpegFrameRate, + type NativeVideoMetadataProbe, +} from "../ffmpeg/metadata"; import type { ChildProcessByStdio } from "node:child_process"; import { execFile, spawn } from "node:child_process"; import fs from "node:fs/promises"; @@ -308,20 +316,6 @@ export interface NvidiaCudaExportSummary { outputAudio?: unknown; } -export interface NativeVideoMetadataProbe { - width: number; - height: number; - duration: number; - mediaStartTime?: number; - streamStartTime?: number; - streamDuration?: number; - frameRate: number; - codec: string; - hasAudio: boolean; - audioCodec?: string; - audioSampleRate?: number; -} - export interface NativeVideoStreamStatsProbe { durationSec: number | null; frameCount: number | null; @@ -961,116 +955,6 @@ export interface NativeExportCapabilities { }; } -export function parseFfmpegDurationSeconds(value: string): number | null { - const parts = value.trim().split(":"); - if (parts.length !== 3) { - return null; - } - - const [hours, minutes, seconds] = parts.map(Number); - if (![hours, minutes, seconds].every(Number.isFinite)) { - return null; - } - - return hours * 3600 + minutes * 60 + seconds; -} - -export function parseFfmpegFrameRate(line: string): number | null { - const fpsMatch = line.match(/,\s*([0-9]+(?:\.[0-9]+)?)\s*fps\b/i); - if (fpsMatch) { - const frameRate = Number(fpsMatch[1]); - return Number.isFinite(frameRate) && frameRate > 0 ? frameRate : null; - } - - const tbrMatch = line.match(/,\s*([0-9]+(?:\.[0-9]+)?)\s*tbr\b/i); - if (tbrMatch) { - const frameRate = Number(tbrMatch[1]); - return Number.isFinite(frameRate) && frameRate > 0 ? frameRate : null; - } - - return null; -} - -export function parseNativeVideoMetadataProbeOutput( - output: string, -): NativeVideoMetadataProbe | null { - const durationMatch = output.match( - /Duration:\s*([0-9:.]+),\s*start:\s*(-?[0-9]+(?:\.[0-9]+)?)/i, - ); - const duration = durationMatch ? parseFfmpegDurationSeconds(durationMatch[1]) : null; - if (!duration || duration <= 0) { - return null; - } - - const mediaStartTime = durationMatch ? Number(durationMatch[2]) : 0; - const lines = output.split(/\r?\n/); - const videoLine = lines.find((line) => /\bVideo:\s*/i.test(line)); - if (!videoLine) { - return null; - } - - const dimensionsMatch = videoLine.match(/,\s*([0-9]{2,5})x([0-9]{2,5})(?:[,\s]|$)/); - if (!dimensionsMatch) { - return null; - } - - const width = Number(dimensionsMatch[1]); - const height = Number(dimensionsMatch[2]); - if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) { - return null; - } - - const videoCodecMatch = videoLine.match(/Video:\s*([^,\r\n]+)/i); - const videoStartMatch = videoLine.match(/\bstart:\s*(-?[0-9]+(?:\.[0-9]+)?)/i); - const frameRate = parseFfmpegFrameRate(videoLine) ?? 60; - const audioLine = lines.find((line) => /\bAudio:\s*/i.test(line)); - const audioCodecMatch = audioLine?.match(/Audio:\s*([^,\r\n]+)/i); - const audioSampleRateMatch = audioLine?.match(/,\s*([0-9]+)\s*Hz\b/i); - - return { - width, - height, - duration, - mediaStartTime: Number.isFinite(mediaStartTime) ? mediaStartTime : 0, - streamStartTime: videoStartMatch ? Number(videoStartMatch[1]) : mediaStartTime, - streamDuration: duration, - frameRate, - codec: videoCodecMatch?.[1]?.trim() || "unknown", - hasAudio: Boolean(audioLine), - audioCodec: audioCodecMatch?.[1]?.trim(), - audioSampleRate: audioSampleRateMatch ? Number(audioSampleRateMatch[1]) : undefined, - }; -} - -export async function probeNativeVideoMetadata( - ffmpegPath: string, - inputPath: string, -): Promise { - let output = ""; - try { - const result = await execFileAsync(ffmpegPath, ["-hide_banner", "-i", inputPath], { - timeout: 30_000, - maxBuffer: 4 * 1024 * 1024, - }); - output = `${result.stdout}\n${result.stderr}`; - } catch (error) { - const processOutput = error as { stdout?: unknown; stderr?: unknown }; - output = [processOutput.stdout, processOutput.stderr] - .filter((value): value is string => typeof value === "string") - .join("\n"); - if (!output) { - throw error; - } - } - - const metadata = parseNativeVideoMetadataProbeOutput(output); - if (!metadata) { - throw new Error("Unable to parse native video metadata from FFmpeg output"); - } - - return metadata; -} - export async function probeNativeVideoStreamStats( ffprobePath: string, inputPath: string, diff --git a/electron/ipc/ffmpeg/metadata.ts b/electron/ipc/ffmpeg/metadata.ts new file mode 100644 index 000000000..50aaf731f --- /dev/null +++ b/electron/ipc/ffmpeg/metadata.ts @@ -0,0 +1,130 @@ +import { execFile } from "node:child_process"; +import { promisify } from "node:util"; +const execFileAsync = promisify(execFile); + +export interface NativeVideoMetadataProbe { + width: number; + height: number; + duration: number; + mediaStartTime?: number; + streamStartTime?: number; + streamDuration?: number; + frameRate: number; + codec: string; + hasAudio: boolean; + audioCodec?: string; + audioSampleRate?: number; +} + +export function parseFfmpegDurationSeconds(value: string): number | null { + const parts = value.trim().split(":"); + if (parts.length !== 3) { + return null; + } + + const [hours, minutes, seconds] = parts.map(Number); + if (![hours, minutes, seconds].every(Number.isFinite)) { + return null; + } + + return hours * 3600 + minutes * 60 + seconds; +} + +export function parseFfmpegFrameRate(line: string): number | null { + const fpsMatch = line.match(/,\s*([0-9]+(?:\.[0-9]+)?)\s*fps\b/i); + if (fpsMatch) { + const frameRate = Number(fpsMatch[1]); + return Number.isFinite(frameRate) && frameRate > 0 ? frameRate : null; + } + + const tbrMatch = line.match(/,\s*([0-9]+(?:\.[0-9]+)?)\s*tbr\b/i); + if (tbrMatch) { + const frameRate = Number(tbrMatch[1]); + return Number.isFinite(frameRate) && frameRate > 0 ? frameRate : null; + } + + return null; +} + +export function parseNativeVideoMetadataProbeOutput( + output: string, +): NativeVideoMetadataProbe | null { + const durationMatch = output.match( + /Duration:\s*([0-9:.]+),\s*start:\s*(-?[0-9]+(?:\.[0-9]+)?)/i, + ); + const duration = durationMatch ? parseFfmpegDurationSeconds(durationMatch[1]) : null; + if (!duration || duration <= 0) { + return null; + } + + const mediaStartTime = durationMatch ? Number(durationMatch[2]) : 0; + const lines = output.split(/\r?\n/); + const videoLine = lines.find((line) => /\bVideo:\s*/i.test(line)); + if (!videoLine) { + return null; + } + + const dimensionsMatch = videoLine.match(/,\s*([0-9]{2,5})x([0-9]{2,5})(?:[,\s]|$)/); + if (!dimensionsMatch) { + return null; + } + + const width = Number(dimensionsMatch[1]); + const height = Number(dimensionsMatch[2]); + if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) { + return null; + } + + const videoCodecMatch = videoLine.match(/Video:\s*([^,\r\n]+)/i); + const videoStartMatch = videoLine.match(/\bstart:\s*(-?[0-9]+(?:\.[0-9]+)?)/i); + const frameRate = parseFfmpegFrameRate(videoLine) ?? 60; + const audioLine = lines.find((line) => /\bAudio:\s*/i.test(line)); + const audioCodecMatch = audioLine?.match(/Audio:\s*([^,\r\n]+)/i); + const audioSampleRateMatch = audioLine?.match(/,\s*([0-9]+)\s*Hz\b/i); + + return { + width, + height, + duration, + mediaStartTime: Number.isFinite(mediaStartTime) ? mediaStartTime : 0, + streamStartTime: videoStartMatch ? Number(videoStartMatch[1]) : mediaStartTime, + streamDuration: duration, + frameRate, + codec: videoCodecMatch?.[1]?.trim() || "unknown", + hasAudio: Boolean(audioLine), + audioCodec: audioCodecMatch?.[1]?.trim(), + audioSampleRate: audioSampleRateMatch ? Number(audioSampleRateMatch[1]) : undefined, + }; +} + +export async function probeNativeVideoMetadata( + ffmpegPath: string, + inputPath: string, + signal?: AbortSignal, +): Promise { + let output = ""; + try { + const result = await execFileAsync(ffmpegPath, ["-hide_banner", "-i", inputPath], { + signal, + timeout: 30_000, + maxBuffer: 4 * 1024 * 1024, + }); + output = `${result.stdout}\n${result.stderr}`; + } catch (error) { + signal?.throwIfAborted(); + const processOutput = error as { stdout?: unknown; stderr?: unknown }; + output = [processOutput.stdout, processOutput.stderr] + .filter((value): value is string => typeof value === "string") + .join("\n"); + if (!output) { + throw error; + } + } + + const metadata = parseNativeVideoMetadataProbeOutput(output); + if (!metadata) { + throw new Error("Unable to parse native video metadata from FFmpeg output"); + } + + return metadata; +} diff --git a/electron/ipc/handlers.ts b/electron/ipc/handlers.ts index 2a0f998eb..e87e677e4 100644 --- a/electron/ipc/handlers.ts +++ b/electron/ipc/handlers.ts @@ -2,6 +2,7 @@ import { BrowserWindow } from "electron"; import { registerAnnouncementHandlers } from "./register/announcements"; import { registerAssetHandlers } from "./register/assets"; import { registerCaptionHandlers } from "./register/captions"; +import { registerCloudShareHandlers } from "./register/cloudShare"; import { registerExportHandlers } from "./register/export"; import { registerPermissionHandlers } from "./register/permissions"; import { registerProjectHandlers } from "./register/project"; @@ -69,6 +70,7 @@ export function registerIpcHandlers( registerAssetHandlers(); registerExportHandlers(); registerCaptionHandlers(); + registerCloudShareHandlers(); registerProjectHandlers(); registerSettingsHandlers(); } diff --git a/electron/ipc/recording/diagnostics.ts b/electron/ipc/recording/diagnostics.ts index 76a9a343d..2c7c7cd61 100644 --- a/electron/ipc/recording/diagnostics.ts +++ b/electron/ipc/recording/diagnostics.ts @@ -1,3 +1,4 @@ +import { isLibrarySequenceSource } from "./sequenceSource"; import { execFile } from "node:child_process"; import fs from "node:fs/promises"; import { promisify } from "node:util"; @@ -513,7 +514,9 @@ export async function getCompanionAudioFallbackInfo(videoPath: string) { } let paths: string[]; - if (await hasEmbeddedAudioStream(videoPath)) { + if (isLibrarySequenceSource(videoPath)) { + paths = companionCandidates.flatMap((candidate) => candidate.usablePaths); + } else if (await hasEmbeddedAudioStream(videoPath)) { const hasUsableMacSystemCompanion = companionCandidates.some( (candidate) => candidate.platform === "mac" && diff --git a/electron/ipc/recording/importRecording.ts b/electron/ipc/recording/importRecording.ts new file mode 100644 index 000000000..ce4ab45e4 --- /dev/null +++ b/electron/ipc/recording/importRecording.ts @@ -0,0 +1,255 @@ +import { composeSequenceWebcam, sequenceWebcamOutputs } from "./sequenceWebcam"; +import { probeNativeVideoMetadata } from "../ffmpeg/metadata"; +import { isLibrarySequenceSource } from "./sequenceSource"; +import { execFile } from "node:child_process"; +import { randomUUID } from "node:crypto"; +import fs from "node:fs/promises"; +import path from "node:path"; +import { promisify } from "node:util"; +import { buildMediaUrl, getMediaServerBaseUrl } from "../../mediaServer"; +import { getFfmpegBinaryPath } from "../ffmpeg/binary"; +import { rememberApprovedLocalReadPath, resolveApprovedLocalMediaPath } from "../project/manager"; +import { getRecordingsDir, getTelemetryPathForVideo } from "../utils"; +import { getUsableCompanionAudioCandidates } from "./diagnostics"; +import { normalizeCursorTelemetrySamples, writeCursorTelemetry } from "../cursor/telemetry"; +import { listRecordings } from "./library"; +import type { + RecordingImportResult, + RecordingWebcamSource, +} from "../../../src/types/recordingLibrary"; + +const run = promisify(execFile); +async function ffmpeg(args: string[], signal?: AbortSignal) { + await run( + getFfmpegBinaryPath(), + ["-hide_banner", "-loglevel", "error", "-nostdin", "-y", ...args], + { signal, timeout: 60 * 60 * 1000, maxBuffer: 1024 * 1024, windowsHide: true }, + ); +} +async function probe(file: string, signal?: AbortSignal) { + const meta = await probeNativeVideoMetadata(getFfmpegBinaryPath(), file, signal); + return { + width: meta.width, + height: meta.height, + fps: meta.frameRate, + duration: meta.duration, + audio: meta.hasAudio, + }; +} +type Format = { width: number; height: number; fps: number }; + +/** Normalize new media once. Existing sequence video is copied, avoiding generation loss. */ +async function normalize( + file: string, + out: string, + format: Format, + copyVideo: boolean, + signal?: AbortSignal, +) { + const meta = await probe(file, signal); + const candidates = await getUsableCompanionAudioCandidates(file); + const companion = candidates[0]; + const system = companion?.usablePaths.includes(companion.systemPath) + ? companion.systemPath + : null; + const mic = companion?.usablePaths.includes(companion.micPath) ? companion.micPath : null; + const args = ["-i", file]; + const filters: string[] = []; + let input = 1; + for (const [kind, source] of [ + ["system", system], + ["mic", mic], + ] as const) { + let label: string; + let delay = 0; + if (source) { + args.push("-i", source); + label = `${input++}:a:0`; + try { + delay = Math.max( + 0, + Number(JSON.parse(await fs.readFile(`${source}.json`, "utf8")).startDelayMs) || + 0, + ); + } catch { + /* Optional capture timing. */ + } + } else if (kind === "system" && meta.audio) { + label = "0:a:0"; + } else { + args.push("-f", "lavfi", "-i", "anullsrc=r=48000:cl=stereo"); + label = `${input++}:a:0`; + } + filters.push( + `[${label}]aresample=48000,aformat=sample_fmts=s16:channel_layouts=stereo,asetpts=PTS-STARTPTS,adelay=${Math.round(delay)}:all=1,apad,atrim=duration=${meta.duration}[${kind}]`, + ); + } + if (!copyVideo) + filters.push( + `[0:v:0]setpts=PTS-STARTPTS,scale=${format.width}:${format.height}:force_original_aspect_ratio=decrease,pad=${format.width}:${format.height}:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=${format.fps},format=yuv420p[v]`, + ); + args.push( + "-filter_complex", + filters.join(";"), + "-map", + copyVideo ? "0:v:0" : "[v]", + "-map", + "[system]", + "-map", + "[mic]", + "-c:v", + copyVideo ? "copy" : "libx264", + ); + if (!copyVideo) args.push("-preset", "fast", "-crf", "18"); + args.push("-c:a", "pcm_s16le", "-t", String(meta.duration), out); + await ffmpeg(args, signal); +} + +/** The editor and export share one immutable source, with stable offsets across imports. */ +export async function importRecording( + currentPath: string, + recordingPath: string, + currentWebcam?: RecordingWebcamSource, + signal?: AbortSignal, +): Promise { + const entry = (await listRecordings()).find((entry) => entry.path === recordingPath); + if (!entry) throw new Error("Recording is no longer in Videos"); + const current = await resolveApprovedLocalMediaPath(currentPath); + if (!current) throw new Error("Current video is no longer available"); + const server = getMediaServerBaseUrl(); + if (!server) throw new Error("Media server is not ready"); + const root = path.join(await getRecordingsDir(), ".recordly-media"); + await fs.mkdir(root, { recursive: true }); + const base = await probe(current, signal); + const format = { + width: Math.ceil(base.width / 2) * 2, + height: Math.ceil(base.height / 2) * 2, + fps: base.fps, + }; + const id = randomUUID(); + const work = await fs.mkdtemp(path.join(root, "import-")); + const output = path.join(root, `${id}.mp4`); + const stem = output.slice(0, -4); + const outputs = [ + ...sequenceWebcamOutputs(output), + output, + `${stem}.system.wav`, + `${stem}.mic.wav`, + `${output}.cursor.json`, + ]; + try { + const normalizedBase = path.join(work, "base.mkv"); + const normalizedNew = path.join(work, "new.mkv"); + // Only our own normalized source format may be copied across appends. + const copyVideo = isLibrarySequenceSource(current); + await normalize(current, normalizedBase, format, copyVideo, signal); + await normalize(entry.path, normalizedNew, format, false, signal); + const baseMeta = await probe(normalizedBase, signal); + const newMeta = await probe(normalizedNew, signal); + await fs.writeFile(path.join(work, "list.txt"), "file 'base.mkv'\nfile 'new.mkv'\n"); + const combined = path.join(work, "combined.mkv"); + await ffmpeg( + [ + "-f", + "concat", + "-safe", + "1", + "-i", + path.join(work, "list.txt"), + "-map", + "0", + "-c", + "copy", + combined, + ], + signal, + ); + await ffmpeg( + [ + "-i", + combined, + "-filter_complex", + "[0:a:0][0:a:1]amix=inputs=2:normalize=0[mix]", + "-map", + "0:v:0", + "-map", + "[mix]", + "-c:v", + "copy", + "-c:a", + "aac", + "-b:a", + "192k", + "-movflags", + "+faststart", + output, + "-map", + "0:a:0", + "-c:a", + "pcm_s16le", + `${stem}.system.wav`, + "-map", + "0:a:1", + "-c:a", + "pcm_s16le", + `${stem}.mic.wav`, + ], + signal, + ); + const sourceStartMs = Math.round(baseMeta.duration * 1000); + const samples = []; + for (const [file, offset, meta] of [ + [current, 0, base], + [entry.path, sourceStartMs, await probe(entry.path, signal)], + ] as const) { + let points: ReturnType = []; + try { + points = normalizeCursorTelemetrySamples( + JSON.parse(await fs.readFile(getTelemetryPathForVideo(file), "utf8")), + ); + } catch { + /* Recording may not contain cursor telemetry. */ + } + const scale = Math.min(format.width / meta.width, format.height / meta.height); + samples.push( + ...points.map((point) => ({ + ...point, + timeMs: point.timeMs + offset, + cx: + (point.cx * meta.width * scale + (format.width - meta.width * scale) / 2) / + format.width, + cy: + (point.cy * meta.height * scale + + (format.height - meta.height * scale) / 2) / + format.height, + })), + ); + } + await writeCursorTelemetry(output, samples); + const webcam = await composeSequenceWebcam( + current, + entry.path, + output, + work, + sourceStartMs, + Math.round(newMeta.duration * 1000), + currentWebcam, + signal, + ); + signal?.throwIfAborted(); + await rememberApprovedLocalReadPath(output); + return { + path: output, + webcam, + url: buildMediaUrl(server, output), + sourceStartMs, + durationMs: Math.round(newMeta.duration * 1000), + totalDurationMs: sourceStartMs + Math.round(newMeta.duration * 1000), + }; + } catch (error) { + await Promise.all(outputs.map((file) => fs.rm(file, { force: true }))); + throw error; + } finally { + await fs.rm(work, { recursive: true, force: true }); + } +} diff --git a/electron/ipc/recording/library.test.ts b/electron/ipc/recording/library.test.ts new file mode 100644 index 000000000..3e240023b --- /dev/null +++ b/electron/ipc/recording/library.test.ts @@ -0,0 +1,299 @@ +import { execFile } from "node:child_process"; +import { createRequire } from "node:module"; +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { promisify } from "node:util"; +import { afterEach, beforeEach, expect, it, vi } from "vitest"; + +const state = vi.hoisted(() => ({ root: "", approved: new Set() })); +vi.mock("electron", () => ({ + app: { getPath: () => state.root }, + shell: { + trashItem: vi.fn(async (file: string) => { + await fs.mkdir(path.join(state.root, ".test-trash"), { recursive: true }); + await fs.rename(file, path.join(state.root, ".test-trash", path.basename(file))); + }), + }, +})); +vi.mock("../../appPaths", () => ({ + USER_DATA_PATH: "/tmp/recordly-test", + RECORDINGS_DIR: "/tmp/recordly-test", +})); +vi.mock("../utils", () => ({ + getRecordingsDir: async () => state.root, + getTelemetryPathForVideo: (file: string) => `${file}.cursor.json`, + parseJsonWithByteOrderMark: JSON.parse, + normalizeVideoSourcePath: (file: string) => file, + getScreen: vi.fn(), +})); +vi.mock("../../mediaServer", () => ({ + getMediaServerBaseUrl: () => "http://127.0.0.1:9999", + buildMediaUrl: (server: string, file: string) => + `${server}/video?path=${encodeURIComponent(file)}`, +})); +vi.mock("../project/manager", () => ({ + rememberApprovedLocalReadPath: async (file: string) => { + state.approved.add(file); + }, + resolveApprovedLocalMediaPath: async (file: string) => (state.approved.has(file) ? file : null), + isPathInsideDirectory: (file: string, root: string) => file.startsWith(`${root}${path.sep}`), +})); +vi.mock("../ffmpeg/binary", async () => { + const require = createRequire(import.meta.url); + return { + getFfmpegBinaryPath: () => require("ffmpeg-static"), + getFfprobeBinaryPath: () => require("ffprobe-static").path, + }; +}); +import { listRecordings, setRecordingsRemoved } from "./library"; +import { importRecording } from "./importRecording"; +import { getRecordingThumbnail } from "./thumbnail"; +import { getCompanionAudioFallbackInfo } from "./diagnostics"; +const require = createRequire(import.meta.url); +const ffmpeg = require("ffmpeg-static") as string; +const run = promisify(execFile); +beforeEach(async () => { + state.root = await fs.realpath(await fs.mkdtemp(path.join(os.tmpdir(), "recordly-library-"))); + state.approved.clear(); +}); +afterEach(async () => { + await fs.rm(state.root, { recursive: true, force: true }); +}); + +it("lists recordings, moves recordings and their companions to Trash with reversible removals, and excludes companion media and symlinks", async () => { + const first = path.join(state.root, "recording-old.mp4"); + const second = path.join(state.root, "recording-new.mov"); + for (const name of [ + first, + second, + path.join(state.root, "recording-new.webcam.mp4"), + path.join(state.root, "recording-new.mic.wav"), + ]) + await fs.writeFile(name, "fixture"); + await fs.symlink(first, path.join(state.root, "linked.mp4")); + expect((await listRecordings()).map((entry) => entry.path).sort()).toEqual( + [first, second].sort(), + ); + await setRecordingsRemoved([first, second], true); + expect(await listRecordings()).toEqual([]); + await expect(fs.access(first)).rejects.toThrow(); + await expect(fs.access(path.join(state.root, "recording-new.mic.wav"))).rejects.toThrow(); + expect(await fs.readdir(path.join(state.root, ".test-trash"))).toHaveLength(1); + await setRecordingsRemoved([first, second], false); + expect(await listRecordings()).toHaveLength(2); + expect(await fs.readFile(first, "utf8")).toBe("fixture"); + expect(await fs.readFile(path.join(state.root, "recording-new.mic.wav"), "utf8")).toBe( + "fixture", + ); + await expect(setRecordingsRemoved(["/tmp/outside.mp4"], true)).rejects.toThrow("outside"); +}); + +it("imports different-sized recordings with playable video, separate audio, stable offsets, and untouched originals", async () => { + const base = path.join(state.root, "recording-base.mp4"); + const added = path.join(state.root, "recording-added.mp4"); + await run(ffmpeg, [ + "-v", + "error", + "-f", + "lavfi", + "-i", + "color=c=red:s=160x90:r=30:d=1", + "-f", + "lavfi", + "-i", + "sine=frequency=440:duration=1", + "-c:v", + "libx264", + "-pix_fmt", + "yuv420p", + "-c:a", + "aac", + "-shortest", + base, + ]); + await run(ffmpeg, [ + "-v", + "error", + "-f", + "lavfi", + "-i", + "color=c=blue:s=90x160:r=30:d=1", + "-c:v", + "libx264", + "-pix_fmt", + "yuv420p", + added, + ]); + const webcam = added.replace(".mp4", "-webcam.mp4"); + await run(ffmpeg, [ + "-v", + "error", + "-f", + "lavfi", + "-i", + "color=c=lime:s=80x60:r=30:d=0.8", + "-c:v", + "libx264", + "-pix_fmt", + "yuv420p", + webcam, + ]); + await fs.writeFile( + added.replace(".mp4", ".recordly-session.json"), + JSON.stringify({ version: 2, webcamFileName: path.basename(webcam), timeOffsetMs: 200 }), + ); + await fs.writeFile( + `${added}.cursor.json`, + JSON.stringify({ + samples: [ + { timeMs: 200, cx: 0.2, cy: 0.4, interactionType: "click", cursorType: "pointer" }, + { + timeMs: 260, + cx: 0.2, + cy: 0.4, + interactionType: "mouseup", + cursorType: "pointer", + }, + { timeMs: 600, cx: 0.4, cy: 0.5, interactionType: "right-click" }, + ], + }), + ); + const original = await fs.readFile(base); + await listRecordings(); + const thumbnail = await getRecordingThumbnail(base); + expect(thumbnail).toMatch(/^data:image\/jpeg;base64,/); + const jpeg = Buffer.from(thumbnail.split(",")[1], "base64"); + expect([...jpeg.subarray(0, 2)]).toEqual([0xff, 0xd8]); + expect(await getRecordingThumbnail(base)).toBe(thumbnail); + await expect(getRecordingThumbnail("/tmp/unapproved.mp4")).rejects.toThrow("outside"); + const result = await importRecording(base, added); + expect(result.sourceStartMs).toBeCloseTo(1000, -1); + expect(result.durationMs).toBeCloseTo(1000, -1); + expect(result.webcam?.visibleRanges).toEqual([{ startMs: 1200, endMs: 2000 }]); + const cursor = JSON.parse(await fs.readFile(`${result.path}.cursor.json`, "utf8")).samples; + expect( + cursor.map((point: { timeMs: number; interactionType: string }) => [ + point.timeMs, + point.interactionType, + ]), + ).toEqual([ + [1200, "click"], + [1260, "mouseup"], + [1600, "right-click"], + ]); + expect(cursor[0].cursorType).toBe("pointer"); + expect(cursor[0].cx).toBeCloseTo(0.405078125); + const webcamPixels = await run( + ffmpeg, + [ + "-v", + "error", + "-ss", + "1.5", + "-i", + result.webcam!.sourcePath!, + "-vf", + "crop=2:2:40:30", + "-frames:v", + "1", + "-f", + "rawvideo", + "-pix_fmt", + "rgb24", + "-", + ], + { encoding: "buffer" }, + ); + expect(webcamPixels.stdout[1]).toBeGreaterThan(200); + const companions = await getCompanionAudioFallbackInfo(result.path); + expect(companions.paths).toHaveLength(2); + expect(companions.paths.every((file) => file.endsWith(".wav"))).toBe(true); + await run(ffmpeg, ["-v", "error", "-i", result.path, "-f", "null", "-"]); + const pixels = await run( + ffmpeg, + [ + "-v", + "error", + "-ss", + "1.5", + "-i", + result.path, + "-vf", + "crop=2:2:80:44", + "-frames:v", + "1", + "-f", + "rawvideo", + "-pix_fmt", + "rgb24", + "-", + ], + { encoding: "buffer" }, + ); + expect(pixels.stdout[2]).toBeGreaterThan(200); // blue centre survives aspect-ratio fitting + const second = await importRecording(result.path, added); + expect(second.sourceStartMs).toBeCloseTo(2000, -1); + expect(second.webcam?.visibleRanges).toEqual([ + { startMs: 1200, endMs: 2000 }, + { startMs: 2200, endMs: 3000 }, + ]); + expect(await fs.readFile(base)).toEqual(original); + expect((await listRecordings()).map((entry) => entry.path).sort()).toEqual( + [base, added].sort(), + ); + await expect(importRecording("/tmp/unapproved.mp4", added)).rejects.toThrow( + "no longer available", + ); +}, 60000); + +it("restores every original when the OS refuses to trash the bundle", async () => { + const { shell } = await import("electron"); + const file = path.join(state.root, "recording-failure.mp4"); + await fs.writeFile(file, "original"); + vi.mocked(shell.trashItem).mockRejectedValueOnce(new Error("Trash unavailable")); + await expect(setRecordingsRemoved([file], true)).rejects.toThrow("Trash unavailable"); + expect(await fs.readFile(file, "utf8")).toBe("original"); +}); + +it("undo never overwrites a new file at the original location", async () => { + const file = path.join(state.root, "recording-conflict.mp4"); + await fs.writeFile(file, "original"); + await setRecordingsRemoved([file], true); + await fs.writeFile(file, "new recording"); + await expect(setRecordingsRemoved([file], false)).rejects.toThrow("already exists"); + expect(await fs.readFile(file, "utf8")).toBe("new recording"); +}); + +it("cancels an active import and removes partial outputs without changing originals", async () => { + const base = path.join(state.root, "recording-base.mp4"); + const added = path.join(state.root, "recording-added.mp4"); + await run(ffmpeg, [ + "-v", + "error", + "-f", + "lavfi", + "-i", + "color=c=red:s=640x480:r=30:d=10", + "-c:v", + "libx264", + "-pix_fmt", + "yuv420p", + base, + ]); + await fs.copyFile(base, added); + state.approved.add(base); + const original = await fs.readFile(base); + const controller = new AbortController(); + const importing = importRecording(base, added, undefined, controller.signal); + const rejected = expect(importing).rejects.toMatchObject({ name: "AbortError" }); + await vi.waitFor(async () => { + const files = await fs.readdir(path.join(state.root, ".recordly-media")); + expect(files.some((name) => name.startsWith("import-"))).toBe(true); + }); + controller.abort(); + await rejected; + expect(await fs.readdir(path.join(state.root, ".recordly-media"))).toEqual([]); + expect(await fs.readFile(base)).toEqual(original); + expect(await fs.readFile(added)).toEqual(original); +}); diff --git a/electron/ipc/recording/library.ts b/electron/ipc/recording/library.ts new file mode 100644 index 000000000..81322be8d --- /dev/null +++ b/electron/ipc/recording/library.ts @@ -0,0 +1,161 @@ +import fs from "node:fs/promises"; +import { constants } from "node:fs"; +import path from "node:path"; +import { app, shell } from "electron"; +import { buildMediaUrl, getMediaServerBaseUrl } from "../../mediaServer"; +import { rememberApprovedLocalReadPath } from "../project/manager"; +import { getRecordingsDir } from "../utils"; +import type { RecordingLibraryEntry } from "../../../src/types/recordingLibrary"; + +let mutation = Promise.resolve(); +const undoBatches = new Map(); +const isRecording = (name: string) => + /\.(mp4|mov|webm|mkv|m4v)$/i.test(name) && !/[.-]webcam[.-]/i.test(name); +const batchKey = (paths: string[]) => JSON.stringify([...new Set(paths)].sort()); + +export async function listRecordings(): Promise { + const root = await fs.realpath(await getRecordingsDir()); + const server = getMediaServerBaseUrl(); + if (!server) throw new Error("Media server is not ready. Try again."); + const entries = await fs.readdir(root, { withFileTypes: true }); + const result: RecordingLibraryEntry[] = []; + for (const entry of entries) { + if (!entry.isFile() || !isRecording(entry.name)) continue; + const filePath = path.join(root, entry.name); + const stat = await fs.stat(filePath); + if (!stat.size) continue; + await rememberApprovedLocalReadPath(filePath); + result.push({ + path: filePath, + name: entry.name, + bytes: stat.size, + createdAt: stat.mtimeMs, + url: buildMediaUrl(server, filePath), + }); + } + return result.sort((a, b) => b.createdAt - a.createdAt); +} + +// Only capture sidecars belonging to this exact recording, never adjacent recordings or projects. +function belongsToRecording(name: string, video: string) { + const stem = video.slice(0, -path.extname(video).length); + return ( + name === video || + name === `${video}.cursor.json` || + (name.startsWith(`${stem}.`) && + /\.(?:system|mic|microphone|audio|webcam)\.(?:wav|webm|mp4|m4a)(?:\.json)?$/i.test( + name, + )) || + name === `${stem}.recordly-session.json` || + name === `${stem}.recording-session.json` || + (name.startsWith(`${stem}-webcam.`) && /\.(?:mp4|webm|mov|mkv|avi)$/i.test(name)) + ); +} + +/** Move the recording bundle into the system Trash. Session backups allow cross-platform Undo. */ +export function setRecordingsRemoved(paths: string[], removed: boolean): Promise { + const task = mutation.then(async () => { + if ( + typeof removed !== "boolean" || + !Array.isArray(paths) || + !paths.length || + paths.some((value) => typeof value !== "string") + ) + throw new Error("Invalid recording selection"); + const root = await fs.realpath(await getRecordingsDir()); + const selected = [...new Set(paths)]; + for (const candidate of selected) { + if (path.dirname(candidate) !== root || !isRecording(path.basename(candidate))) + throw new Error("Recording is outside the Videos library"); + } + const key = batchKey(selected); + if (!removed) { + const batch = undoBatches.get(key); + if (!batch) + throw new Error( + "This removal can no longer be undone. Restore the files from Trash.", + ); + // Check every destination before restoring any file; never overwrite newer media. + for (const file of batch.files) { + if ( + await fs.lstat(file).then( + () => true, + (error) => { + if (error.code === "ENOENT") return false; + throw error; + }, + ) + ) + throw new Error( + "A file with this name already exists. Restore it from Trash instead.", + ); + } + const restored: string[] = []; + try { + for (const file of batch.files) { + await fs.copyFile( + path.join(batch.backup, path.basename(file)), + file, + constants.COPYFILE_EXCL, + ); + restored.push(file); + } + } catch (error) { + await Promise.all(restored.map((file) => fs.rm(file, { force: true }))); + throw error; + } + undoBatches.delete(key); + await fs.rm(batch.backup, { recursive: true, force: true }); + return; + } + const available = await fs.readdir(root, { withFileTypes: true }); + for (const file of selected) { + if (!available.some((entry) => entry.name === path.basename(file) && entry.isFile())) + throw new Error("Recording is missing or is not a regular file"); + } + const files = available + .filter( + (entry) => + entry.isFile() && + selected.some((file) => belongsToRecording(entry.name, path.basename(file))), + ) + .map((entry) => path.join(root, entry.name)); + const backup = await fs.mkdtemp(path.join(app.getPath("temp"), "recordly-trash-undo-")); + const bundle = await fs.mkdtemp(path.join(root, "Recordly videos ")); + const moved: string[] = []; + try { + for (const file of files) + await fs.copyFile( + file, + path.join(backup, path.basename(file)), + constants.COPYFILE_FICLONE, + ); + for (const file of files) { + await fs.rename(file, path.join(bundle, path.basename(file))); + moved.push(file); + } + await shell.trashItem(bundle); + undoBatches.set(key, { backup, files }); + } catch (error) { + for (const file of moved) await fs.rename(path.join(bundle, path.basename(file)), file); + await fs.rm(backup, { recursive: true, force: true }); + throw error; + } finally { + await fs.rmdir(bundle).catch((error) => { + if (error.code !== "ENOENT") throw error; + }); + } + }); + mutation = task.catch(() => undefined); + return task; +} + +export async function clearRecordingTrashUndo() { + await mutation; + await Promise.all( + [...undoBatches.values()].map(({ backup }) => + fs.rm(backup, { recursive: true, force: true }), + ), + ); + undoBatches.clear(); +} diff --git a/electron/ipc/recording/mac.ts b/electron/ipc/recording/mac.ts index 57a9e6881..bec79bc06 100644 --- a/electron/ipc/recording/mac.ts +++ b/electron/ipc/recording/mac.ts @@ -23,7 +23,7 @@ import { setNativeCaptureTargetPath, setNativeScreenRecordingActive, } from "../state"; -import { isAutoRecordingPath, moveFileWithOverwrite } from "../utils"; +import { moveFileWithOverwrite } from "../utils"; import { getFileSizeIfPresent, recordNativeCaptureDiagnostics, @@ -31,7 +31,6 @@ import { } from "./diagnostics"; import { emitRecordingInterrupted } from "./events"; import { getFinalMacCompanionAudioPath } from "./macCompanionAudio"; -import { pruneAutoRecordings } from "./prune"; export function waitForNativeCaptureStart(process: ChildProcessWithoutNullStreams) { return new Promise((resolve, reject) => { @@ -270,9 +269,6 @@ export async function finalizeStoredVideo(videoPath: string) { } catch (error) { console.warn("[mac-stop] Failed to persist cursor telemetry:", error); } - if (isAutoRecordingPath(videoPath)) { - await pruneAutoRecordings([videoPath]); - } if ( lastNativeCaptureDiagnostics?.backend === "mac-screencapturekit" || diff --git a/electron/ipc/recording/prune.test.ts b/electron/ipc/recording/prune.test.ts deleted file mode 100644 index 8c1c66839..000000000 --- a/electron/ipc/recording/prune.test.ts +++ /dev/null @@ -1,130 +0,0 @@ -import fs from "node:fs/promises"; -import os from "node:os"; -import path from "node:path"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; - -describe("pruneAutoRecordings", () => { - let tempRoot: string; - let appDataPath: string; - let userDataPath: string; - let tempPath: string; - let appPath: string; - - beforeEach(async () => { - tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "recordly-prune-")); - appDataPath = path.join(tempRoot, "AppData"); - userDataPath = path.join(tempRoot, "UserData"); - tempPath = path.join(tempRoot, "Temp"); - appPath = path.join(tempRoot, "App"); - - await Promise.all( - [appDataPath, userDataPath, tempPath, appPath].map((dirPath) => - fs.mkdir(dirPath, { recursive: true }), - ), - ); - - vi.resetModules(); - vi.doMock("electron", () => ({ - app: { - isPackaged: false, - getAppPath: () => appPath, - getPath: (name: string) => { - if (name === "appData") return appDataPath; - if (name === "userData") return userDataPath; - if (name === "temp") return tempPath; - return tempRoot; - }, - setPath: () => undefined, - }, - })); - }); - - afterEach(async () => { - vi.resetModules(); - vi.doUnmock("electron"); - if (tempRoot) { - await fs.rm(tempRoot, { recursive: true, force: true }); - } - }); - - it("preserves recordings referenced by saved projects in the Projects directory", async () => { - const { getRecordingsDir } = await import("../utils"); - const { PROJECTS_DIRECTORY_NAME, PROJECT_FILE_EXTENSION } = await import("../constants"); - const { pruneAutoRecordings } = await import("./prune"); - - const recordingsDir = await getRecordingsDir(); - const projectsDir = path.join(recordingsDir, PROJECTS_DIRECTORY_NAME); - await fs.mkdir(projectsDir, { recursive: true }); - - const recordingPaths: string[] = []; - for (let index = 0; index < 23; index += 1) { - const recordingPath = path.join(recordingsDir, `recording-${index}.mp4`); - recordingPaths.push(recordingPath); - await fs.writeFile(recordingPath, `video-${index}`); - const timestamp = new Date(Date.now() - index * 60_000); - await fs.utimes(recordingPath, timestamp, timestamp); - } - - const protectedVideoRecordingPath = recordingPaths.at(-3); - const protectedWebcamRecordingPath = recordingPaths.at(-2); - const prunableRecordingPath = recordingPaths.at(-1); - - await fs.writeFile( - path.join(projectsDir, `saved-project-video.${PROJECT_FILE_EXTENSION}`), - JSON.stringify( - { - videoPath: protectedVideoRecordingPath, - }, - null, - 2, - ), - "utf-8", - ); - - await fs.writeFile( - path.join(projectsDir, `saved-project-webcam.${PROJECT_FILE_EXTENSION}`), - JSON.stringify( - { - editor: { - webcam: { - sourcePath: protectedWebcamRecordingPath, - }, - }, - }, - null, - 2, - ), - "utf-8", - ); - - await pruneAutoRecordings(); - - await expect(fs.access(protectedVideoRecordingPath!)).resolves.toBeUndefined(); - await expect(fs.access(protectedWebcamRecordingPath!)).resolves.toBeUndefined(); - await expect(fs.access(prunableRecordingPath!)).rejects.toThrow(); - }); - - it("aborts pruning when a saved project cannot be parsed", async () => { - const { getRecordingsDir } = await import("../utils"); - const { PROJECTS_DIRECTORY_NAME, PROJECT_FILE_EXTENSION } = await import("../constants"); - const { pruneAutoRecordings } = await import("./prune"); - - const recordingsDir = await getRecordingsDir(); - const projectsDir = path.join(recordingsDir, PROJECTS_DIRECTORY_NAME); - await fs.mkdir(projectsDir, { recursive: true }); - - const recordingPath = path.join(recordingsDir, "recording-stale.mp4"); - await fs.writeFile(recordingPath, "video"); - const staleTimestamp = new Date(Date.now() - 48 * 60 * 60 * 1_000); - await fs.utimes(recordingPath, staleTimestamp, staleTimestamp); - - await fs.writeFile( - path.join(projectsDir, `broken-project.${PROJECT_FILE_EXTENSION}`), - "{ invalid json", - "utf-8", - ); - - await expect(pruneAutoRecordings()).rejects.toThrow(); - await expect(fs.access(recordingPath)).resolves.toBeUndefined(); - }); -}); diff --git a/electron/ipc/recording/prune.ts b/electron/ipc/recording/prune.ts deleted file mode 100644 index 29787e8e2..000000000 --- a/electron/ipc/recording/prune.ts +++ /dev/null @@ -1,190 +0,0 @@ -import fs from "node:fs/promises"; -import path from "node:path"; -import { - AUTO_RECORDING_MAX_AGE_MS, - AUTO_RECORDING_RETENTION_COUNT, - COMPANION_AUDIO_LAYOUTS, - LEGACY_PROJECT_FILE_EXTENSIONS, - PROJECT_FILE_EXTENSION, - PROJECTS_DIRECTORY_NAME, -} from "../constants"; -import { currentVideoPath } from "../state"; -import { - getRecordingsDir, - getTelemetryPathForVideo, - isAutoRecordingPath, - normalizePath, - normalizeVideoSourcePath, - parseJsonWithByteOrderMark, -} from "../utils"; - -export async function hasSiblingProjectFile(videoPath: string) { - const baseName = path.basename(videoPath, path.extname(videoPath)); - const candidateExtensions = [PROJECT_FILE_EXTENSION, ...LEGACY_PROJECT_FILE_EXTENSIONS]; - - for (const extension of candidateExtensions) { - const projectPath = path.join(path.dirname(videoPath), `${baseName}.${extension}`); - - try { - await fs.access(projectPath); - return true; - } catch { - continue; - } - } - - return false; -} - -export { isAutoRecordingPath }; - -async function loadSavedProjectMediaPaths() { - const recordingsDir = await getRecordingsDir(); - const projectsDir = path.join(recordingsDir, PROJECTS_DIRECTORY_NAME); - const protectedPaths = new Set(); - const candidateExtensions = new Set([ - PROJECT_FILE_EXTENSION, - ...LEGACY_PROJECT_FILE_EXTENSIONS, - ]); - - let projectEntries: Array<{ isFile(): boolean; name: string }>; - try { - projectEntries = await fs.readdir(projectsDir, { withFileTypes: true }); - } catch (error) { - const code = - typeof error === "object" && error !== null && "code" in error ? error.code : undefined; - if (code === "ENOENT") { - return protectedPaths; - } - - throw error; - } - - await Promise.all( - projectEntries - .filter((entry) => { - if (!entry.isFile()) { - return false; - } - - const extension = path.extname(entry.name).replace(/^\./, "").toLowerCase(); - return candidateExtensions.has(extension); - }) - .map(async (entry) => { - const projectPath = path.join(projectsDir, entry.name); - let rawProject: { - videoPath?: unknown; - editor?: { webcam?: { sourcePath?: unknown } }; - }; - try { - rawProject = parseJsonWithByteOrderMark<{ - videoPath?: unknown; - editor?: { webcam?: { sourcePath?: unknown } }; - }>(await fs.readFile(projectPath, "utf-8")); - } catch (error) { - console.warn( - "[prune] Aborting recording prune because a saved project is unreadable", - { - projectPath, - error, - }, - ); - throw error; - } - const candidatePaths = [ - rawProject.videoPath, - rawProject.editor?.webcam?.sourcePath, - ]; - - for (const candidatePath of candidatePaths) { - if (typeof candidatePath !== "string" || candidatePath.trim().length === 0) { - continue; - } - - const normalizedCandidatePath = normalizePath( - normalizeVideoSourcePath(candidatePath) ?? candidatePath, - ); - protectedPaths.add(normalizedCandidatePath); - try { - protectedPaths.add(await fs.realpath(normalizedCandidatePath)); - } catch { - // Ignore missing project media; project loading already surfaces that error. - } - } - }), - ); - - return protectedPaths; -} - -export async function pruneAutoRecordings(exemptPaths: string[] = []) { - const recordingsDir = await getRecordingsDir(); - await fs.mkdir(recordingsDir, { recursive: true }); - const protectedProjectMediaPaths = await loadSavedProjectMediaPaths(); - const exempt = new Set( - [currentVideoPath, ...exemptPaths] - .filter((value): value is string => Boolean(value)) - .map((value) => normalizePath(value)), - ); - - const entries = await fs.readdir(recordingsDir, { withFileTypes: true }); - const autoRecordingStats = await Promise.all( - entries - .filter((entry) => entry.isFile() && /^recording-.*\.(mp4|mov|webm)$/i.test(entry.name)) - .map(async (entry) => { - const filePath = path.join(recordingsDir, entry.name); - const stats = await fs.stat(filePath); - return { filePath, stats }; - }), - ); - - const sorted = autoRecordingStats.sort( - (left, right) => right.stats.mtimeMs - left.stats.mtimeMs, - ); - const now = Date.now(); - - for (const [index, entry] of sorted.entries()) { - const normalizedFilePath = normalizePath(entry.filePath); - if (exempt.has(normalizedFilePath)) { - continue; - } - - if (await hasSiblingProjectFile(entry.filePath)) { - continue; - } - - const resolvedFilePath = await fs.realpath(entry.filePath).catch(() => normalizedFilePath); - if ( - protectedProjectMediaPaths.has(normalizedFilePath) || - protectedProjectMediaPaths.has(resolvedFilePath) - ) { - continue; - } - - const tooOld = now - entry.stats.mtimeMs > AUTO_RECORDING_MAX_AGE_MS; - const overLimit = index >= AUTO_RECORDING_RETENTION_COUNT; - if (!tooOld && !overLimit) { - continue; - } - - try { - await fs.rm(entry.filePath, { force: true }); - await fs.rm(getTelemetryPathForVideo(entry.filePath), { force: true }); - // Clean up companion audio files left from recording (macOS .m4a, Windows .wav) - const base = entry.filePath.replace(/\.(mp4|mov|webm)$/i, ""); - const companionSuffixes = Array.from( - new Set( - COMPANION_AUDIO_LAYOUTS.flatMap((layout) => [ - layout.systemSuffix, - layout.micSuffix, - ]), - ), - ); - for (const suffix of companionSuffixes) { - await fs.rm(base + suffix, { force: true }).catch(() => undefined); - } - } catch (error) { - console.warn("Failed to prune old auto recording:", entry.filePath, error); - } - } -} diff --git a/electron/ipc/recording/sequenceSource.ts b/electron/ipc/recording/sequenceSource.ts new file mode 100644 index 000000000..45abfee34 --- /dev/null +++ b/electron/ipc/recording/sequenceSource.ts @@ -0,0 +1,9 @@ +import path from "node:path"; + +/** Sources generated by Videos imports have independent, lossless audio companions. */ +export function isLibrarySequenceSource(file: string): boolean { + return ( + path.basename(path.dirname(file)) === ".recordly-media" && + /^[0-9a-f-]{36}\.mp4$/.test(path.basename(file)) + ); +} diff --git a/electron/ipc/recording/sequenceWebcam.ts b/electron/ipc/recording/sequenceWebcam.ts new file mode 100644 index 000000000..a6ed5c9c0 --- /dev/null +++ b/electron/ipc/recording/sequenceWebcam.ts @@ -0,0 +1,142 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { execFile } from "node:child_process"; +import { promisify } from "node:util"; +import { getFfmpegBinaryPath } from "../ffmpeg/binary"; +import { probeNativeVideoMetadata } from "../ffmpeg/metadata"; +import { resolveRecordingSession, persistRecordingSessionManifest } from "../project/session"; +import { rememberApprovedLocalReadPath, resolveApprovedLocalMediaPath } from "../project/manager"; +import type { RecordingWebcamSource } from "../../../src/types/recordingLibrary"; + +const run = promisify(execFile); +type Range = { startMs: number; endMs: number }; +const rangesPath = (video: string) => `${video}.webcam-ranges.json`; +export const sequenceWebcamOutputs = (video: string) => [ + video.replace(/\.mp4$/, "-webcam.mp4"), + video.replace(/\.mp4$/, ".recordly-session.json"), + rangesPath(video), +]; +async function linked(video: string): Promise { + const session = await resolveRecordingSession(video); + if (!session?.webcamPath) return undefined; + const webcamPath = await fs.realpath(session.webcamPath); + if (path.dirname(webcamPath) !== path.dirname(video)) + throw new Error("Linked webcam is outside the recording folder"); + let visibleRanges: Range[] | undefined; + try { + visibleRanges = JSON.parse(await fs.readFile(rangesPath(video), "utf8")); + } catch { + /* Original recordings have no range file. */ + } + return { sourcePath: webcamPath, timeOffsetMs: session.timeOffsetMs ?? 0, visibleRanges }; +} +async function ffmpeg(args: string[], signal?: AbortSignal) { + await run( + getFfmpegBinaryPath(), + ["-hide_banner", "-loglevel", "error", "-nostdin", "-y", ...args], + { signal, timeout: 60 * 60 * 1000, maxBuffer: 1024 * 1024 }, + ); +} + +/** Keep webcam media separate from the screen, including blank spans for screen-only clips. */ +export async function composeSequenceWebcam( + current: string, + added: string, + output: string, + work: string, + baseDurationMs: number, + addedDurationMs: number, + currentWebcam?: RecordingWebcamSource, + signal?: AbortSignal, +) { + const base = currentWebcam === undefined ? await linked(current) : currentWebcam; + if (currentWebcam?.sourcePath) { + const approved = await resolveApprovedLocalMediaPath(currentWebcam.sourcePath); + if (!approved) throw new Error("Current webcam is no longer available"); + base!.sourcePath = approved; + } + const next = await linked(added); + const firstPath = base?.sourcePath || next?.sourcePath; + if (!firstPath) return undefined; + const meta = await probeNativeVideoMetadata(getFfmpegBinaryPath(), firstPath, signal); + const width = Math.ceil(meta.width / 2) * 2; + const height = Math.ceil(meta.height / 2) * 2; + const ranges: Range[] = []; + for (const [index, source, durationMs, offsetMs] of [ + [0, base, baseDurationMs, 0], + [1, next, addedDurationMs, baseDurationMs], + ] as const) { + const duration = durationMs / 1000; + const args: string[] = []; + let filter = `scale=${width}:${height}:force_original_aspect_ratio=decrease,pad=${width}:${height}:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p`; + if (source?.sourcePath) { + const info = await probeNativeVideoMetadata( + getFfmpegBinaryPath(), + source.sourcePath, + signal, + ); + const delayMs = Number.isFinite(source.timeOffsetMs) ? source.timeOffsetMs : 0; + args.push("-i", source.sourcePath); + filter = `trim=start=${Math.max(0, -delayMs) / 1000},setpts=PTS-STARTPTS,${filter},tpad=start_mode=add:start_duration=${Math.max(0, delayMs) / 1000}:stop_mode=add:stop_duration=${duration},trim=duration=${duration}`; + const active = source.visibleRanges ?? [ + { + startMs: Math.max(0, delayMs), + endMs: Math.min(durationMs, info.duration * 1000 + delayMs), + }, + ]; + for (const range of active) { + if (!Number.isFinite(range.startMs) || !Number.isFinite(range.endMs)) continue; + const startMs = Math.max(0, range.startMs); + const endMs = Math.min(durationMs, range.endMs); + if (endMs > startMs) + ranges.push({ startMs: offsetMs + startMs, endMs: offsetMs + endMs }); + } + } else { + args.push("-f", "lavfi", "-i", `color=c=black:s=${width}x${height}:r=30:d=${duration}`); + } + await ffmpeg( + [ + ...args, + "-an", + "-vf", + filter, + "-t", + String(duration), + "-c:v", + "libx264", + "-preset", + "fast", + "-crf", + "18", + path.join(work, `webcam-${index}.mp4`), + ], + signal, + ); + } + await fs.writeFile( + path.join(work, "webcam-list.txt"), + "file 'webcam-0.mp4'\nfile 'webcam-1.mp4'\n", + ); + const webcamPath = sequenceWebcamOutputs(output)[0]; + await ffmpeg( + [ + "-f", + "concat", + "-safe", + "1", + "-i", + path.join(work, "webcam-list.txt"), + "-an", + "-c:v", + "copy", + "-movflags", + "+faststart", + webcamPath, + ], + signal, + ); + await persistRecordingSessionManifest({ videoPath: output, webcamPath, timeOffsetMs: 0 }); + await fs.writeFile(rangesPath(output), JSON.stringify(ranges)); + await rememberApprovedLocalReadPath(webcamPath); + return { sourcePath: webcamPath, timeOffsetMs: 0, visibleRanges: ranges }; +} diff --git a/electron/ipc/recording/thumbnail.ts b/electron/ipc/recording/thumbnail.ts new file mode 100644 index 000000000..5397b3b37 --- /dev/null +++ b/electron/ipc/recording/thumbnail.ts @@ -0,0 +1,76 @@ +import { createHash } from "node:crypto"; +import { execFile } from "node:child_process"; +import fs from "node:fs/promises"; +import path from "node:path"; +import { promisify } from "node:util"; +import { app } from "electron"; +import { getFfmpegBinaryPath } from "../ffmpeg/binary"; +import { resolveApprovedLocalMediaPath } from "../project/manager"; +import { getRecordingsDir } from "../utils"; + +const run = promisify(execFile); +const pending = new Map>(); +let queue = Promise.resolve(); + +/** Decode one small still, never a video player per library row. */ +export async function getRecordingThumbnail(candidate: string): Promise { + const root = await fs.realpath(await getRecordingsDir()); + const file = await resolveApprovedLocalMediaPath(candidate); + if (!file || path.dirname(file) !== root || !/\.(mp4|mov|webm|mkv|m4v)$/i.test(file)) + throw new Error("Recording is outside the Videos library"); + const stat = await fs.stat(file); + if (!stat.isFile()) throw new Error("Recording is not a file"); + const key = createHash("sha256").update(`${file}:${stat.mtimeMs}:${stat.size}`).digest("hex"); + const existing = pending.get(key); + if (existing) return existing; + const cache = path.join(app.getPath("userData"), "recording-thumbnails", `${key}.jpg`); + const task = queue.then(async () => { + let jpeg: Buffer; + try { + jpeg = await fs.readFile(cache); + } catch (error) { + if ((error as NodeJS.ErrnoException).code !== "ENOENT") throw error; + const result = await run( + getFfmpegBinaryPath(), + [ + "-hide_banner", + "-loglevel", + "error", + "-nostdin", + "-threads", + "1", + "-i", + file, + "-frames:v", + "1", + "-an", + "-vf", + "scale=160:90:force_original_aspect_ratio=increase,crop=160:90", + "-q:v", + "5", + "-f", + "image2pipe", + "-c:v", + "mjpeg", + "pipe:1", + ], + { encoding: "buffer", maxBuffer: 512 * 1024, timeout: 15000, windowsHide: true }, + ); + jpeg = result.stdout; + if (!jpeg.length) throw new Error("Recording has no preview frame"); + await fs.mkdir(path.dirname(cache), { recursive: true }); + await fs.writeFile(cache, jpeg); + } + return `data:image/jpeg;base64,${jpeg.toString("base64")}`; + }); + pending.set(key, task); + queue = task.then( + () => undefined, + () => undefined, + ); + try { + return await task; + } finally { + pending.delete(key); + } +} diff --git a/electron/ipc/register/assets.ts b/electron/ipc/register/assets.ts index a9e972788..11b244cb5 100644 --- a/electron/ipc/register/assets.ts +++ b/electron/ipc/register/assets.ts @@ -1,3 +1,4 @@ +import { createHash } from "node:crypto"; import { existsSync } from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; @@ -27,11 +28,21 @@ export function registerAssetHandlers() { ipcMain.handle("generate-wallpaper-thumbnail", async (_, filePath: string) => { try { - const resolved = await resolveReadableLocalFilePath(filePath); + const bundled = filePath.startsWith("/wallpapers/"); + const candidate = bundled + ? path.join( + getAssetRootPath(), + "wallpapers", + path.basename(decodeURIComponent(filePath)), + ) + : filePath; + const resolved = await resolveReadableLocalFilePath(candidate); // Deterministic cache key from file path + mtime const stat = await fs.stat(resolved); - const cacheKey = Buffer.from(`${resolved}:${stat.mtimeMs}`).toString("base64url"); + const cacheKey = createHash("sha256") + .update(`${resolved}:${stat.mtimeMs}`) + .digest("hex"); const thumbPath = path.join(thumbCacheDir, `${cacheKey}.jpg`); // Return cached thumbnail if it exists (no queue needed) diff --git a/electron/ipc/register/cloudShare.test.ts b/electron/ipc/register/cloudShare.test.ts new file mode 100644 index 000000000..bfaa11983 --- /dev/null +++ b/electron/ipc/register/cloudShare.test.ts @@ -0,0 +1,92 @@ +import { describe, expect, it } from "vitest"; +import { normalizeCloudEndpoint, parseCloudShareTicket } from "../cloudShareContract"; + +describe("cloud share contract", () => { + it("accepts only Recordly production and local development endpoints", () => { + expect(normalizeCloudEndpoint("https://videos.recordly.dev/api/upload#ignored")).toBe( + "https://videos.recordly.dev/api/upload", + ); + expect(normalizeCloudEndpoint("http://localhost:8787/api/upload")).toBe( + "http://localhost:8787/api/upload", + ); + }); + + it("normalizes a Voom upload ticket and derives its metadata endpoint", () => { + expect( + parseCloudShareTicket({ + shareCode: "abc123", + uploadURL: "http://localhost:8787/api/upload-data/abc123", + shareURL: "http://localhost:8787/s/abc123", + }), + ).toEqual({ + uploadUrl: "http://localhost:8787/api/upload-data/abc123", + shareUrl: "http://localhost:8787/s/abc123", + shareCode: "abc123", + method: "PUT", + headers: {}, + finalizeUrl: "http://localhost:8787/api/metadata/abc123", + }); + }); + + it("rejects insecure and untrusted remote endpoints", () => { + expect(() => normalizeCloudEndpoint("http://share.example.com/api/shares")).toThrow( + "only allowed through the Recordly service", + ); + expect(() => normalizeCloudEndpoint("https://share.example.com/api/upload")).toThrow( + "only allowed through the Recordly service", + ); + expect(() => normalizeCloudEndpoint("https://videos.recordly.dev/api/other")).toThrow( + "endpoint is invalid", + ); + }); + + it("normalizes a presigned PUT ticket", () => { + expect( + parseCloudShareTicket({ + uploadUrl: "https://storage.example.com/upload", + shareUrl: "https://share.example.com/s/123", + headers: { "x-test": "value" }, + }), + ).toEqual({ + uploadUrl: "https://storage.example.com/upload", + shareUrl: "https://share.example.com/s/123", + shareCode: undefined, + method: "PUT", + headers: { "x-test": "value" }, + finalizeUrl: undefined, + }); + }); + + it("rejects unsupported methods and malformed headers", () => { + expect(() => + parseCloudShareTicket({ + uploadUrl: "https://storage.example.com/upload", + shareUrl: "https://share.example.com/s/123", + method: "POST", + }), + ).toThrow("presigned PUT"); + expect(() => + parseCloudShareTicket({ + uploadUrl: "https://storage.example.com/upload", + shareUrl: "https://share.example.com/s/123", + headers: { invalid: 42 }, + }), + ).toThrow("must be strings"); + expect(() => + parseCloudShareTicket({ + uploadUrl: "https://storage.example.com/upload", + shareUrl: "https://share.example.com/s/123", + headers: { authorization: "Bearer exfiltrate-me" }, + }), + ).toThrow("not allowed"); + }); + + it("rejects an insecure remote upload URL", () => { + expect(() => + parseCloudShareTicket({ + uploadUrl: "http://storage.example.com/upload", + shareUrl: "https://share.example.com/s/123", + }), + ).toThrow("uploadUrl must use HTTPS"); + }); +}); diff --git a/electron/ipc/register/cloudShare.ts b/electron/ipc/register/cloudShare.ts new file mode 100644 index 000000000..e23fab3b5 --- /dev/null +++ b/electron/ipc/register/cloudShare.ts @@ -0,0 +1,433 @@ +import { createReadStream } from "node:fs"; +import fs from "node:fs/promises"; +import path from "node:path"; +import { Transform } from "node:stream"; +import { ipcMain } from "electron"; +import { normalizeCloudEndpoint, parseCloudShareTicket } from "../cloudShareContract"; +import { isOwnedExportPath } from "../export/exportStream"; +import { isAllowedLocalReadPath } from "../project/manager"; + +const MAX_CONTROL_RESPONSE_BYTES = 1024 * 1024; +const MAX_AUTH_TOKEN_BYTES = 8192; +const MULTIPART_THRESHOLD_BYTES = 50 * 1024 * 1024; +const MULTIPART_PART_BYTES = 25 * 1024 * 1024; +const MULTIPART_PART_ATTEMPTS = 3; +const activeUploads = new Map(); + +type UploadedPart = { partNumber: number; etag: string }; + +class NonRetryableUploadError extends Error {} + +function contentTypeFor(filePath: string) { + switch (path.extname(filePath).toLowerCase()) { + case ".mp4": + return "video/mp4"; + case ".webm": + return "video/webm"; + case ".mov": + return "video/quicktime"; + case ".gif": + return "image/gif"; + default: + return "application/octet-stream"; + } +} + +async function readJsonResponse(response: Response) { + const text = await response.text(); + if (Buffer.byteLength(text) > MAX_CONTROL_RESPONSE_BYTES) { + throw new Error("The cloud share server response was too large."); + } + try { + return JSON.parse(text) as unknown; + } catch { + throw new Error(`The cloud share server returned invalid JSON (${response.status}).`); + } +} + +async function responseError(response: Response, fallback: string) { + try { + const body = await readJsonResponse(response); + if (body && typeof body === "object" && "error" in body) { + return String((body as { error: unknown }).error); + } + } catch { + // Cloudflare may return an HTML/plain-text edge error instead of Worker JSON. + } + return `${fallback} (${response.status}).`; +} + +function waitForRetry(delayMs: number, signal: AbortSignal) { + return new Promise((resolve, reject) => { + if (signal.aborted) { + reject(signal.reason ?? new Error("Upload aborted")); + return; + } + const handleAbort = () => { + clearTimeout(timeout); + reject(signal.reason ?? new Error("Upload aborted")); + }; + const timeout = setTimeout(() => { + signal.removeEventListener("abort", handleAbort); + resolve(); + }, delayMs); + signal.addEventListener("abort", handleAbort, { once: true }); + }); +} + +function isRetryableUploadStatus(status: number) { + return status === 408 || status === 425 || status === 429 || status >= 500; +} + +async function uploadMultipart(options: { + endpoint: string; + shareCode: string; + filePath: string; + fileSize: number; + contentType: string; + token: string; + signal: AbortSignal; + onProgress: (uploadedBytes: number) => void; +}) { + const endpointOrigin = new URL(options.endpoint).origin; + const authHeaders = { authorization: `Bearer ${options.token}` }; + const startResponse = await fetch( + new URL(`/api/upload-multipart/${options.shareCode}`, endpointOrigin), + { + method: "POST", + headers: authHeaders, + redirect: "error", + signal: options.signal, + }, + ); + if (!startResponse.ok) { + throw new Error(await responseError(startResponse, "Could not start video upload")); + } + const startBody = await readJsonResponse(startResponse); + const multipartUploadId = + startBody && + typeof startBody === "object" && + "uploadId" in startBody && + typeof (startBody as { uploadId: unknown }).uploadId === "string" + ? (startBody as { uploadId: string }).uploadId + : ""; + if (!multipartUploadId || Buffer.byteLength(multipartUploadId) > 2048) { + throw new Error("The cloud share server returned an invalid multipart upload ID."); + } + + const encodedUploadId = encodeURIComponent(multipartUploadId); + const parts: UploadedPart[] = []; + let confirmedBytes = 0; + let completed = false; + + try { + const partCount = Math.ceil(options.fileSize / MULTIPART_PART_BYTES); + for (let partIndex = 0; partIndex < partCount; partIndex += 1) { + const partNumber = partIndex + 1; + const start = partIndex * MULTIPART_PART_BYTES; + const end = Math.min(options.fileSize, start + MULTIPART_PART_BYTES) - 1; + const partSize = end - start + 1; + let uploadedPart: UploadedPart | undefined; + + for (let attempt = 1; attempt <= MULTIPART_PART_ATTEMPTS; attempt += 1) { + let attemptBytes = 0; + const progress = new Transform({ + transform(chunk, _encoding, callback) { + attemptBytes += chunk.length; + options.onProgress( + Math.min(options.fileSize, confirmedBytes + attemptBytes), + ); + callback(null, chunk); + }, + }); + const body = createReadStream(options.filePath, { start, end }).pipe(progress); + try { + const partResponse = await fetch( + new URL( + `/api/upload-part/${options.shareCode}/${encodedUploadId}/${partNumber}`, + endpointOrigin, + ), + { + method: "PUT", + headers: { + ...authHeaders, + "content-type": options.contentType, + "content-length": String(partSize), + }, + body: body as unknown as BodyInit, + duplex: "half", + redirect: "error", + signal: options.signal, + } as RequestInit & { duplex: "half" }, + ); + if (!partResponse.ok) { + const message = await responseError( + partResponse, + `Video part ${partNumber} failed`, + ); + if (!isRetryableUploadStatus(partResponse.status)) { + throw new NonRetryableUploadError(message); + } + throw new Error(message); + } else { + const partBody = await readJsonResponse(partResponse); + const etag = + partBody && typeof partBody === "object" && "etag" in partBody + ? (partBody as { etag: unknown }).etag + : undefined; + const returnedPartNumber = + partBody && typeof partBody === "object" && "partNumber" in partBody + ? (partBody as { partNumber: unknown }).partNumber + : undefined; + if (typeof etag !== "string" || returnedPartNumber !== partNumber) { + throw new NonRetryableUploadError( + `The cloud share server returned invalid data for video part ${partNumber}.`, + ); + } + uploadedPart = { partNumber, etag }; + break; + } + } catch (error) { + if ( + options.signal.aborted || + error instanceof NonRetryableUploadError || + attempt === MULTIPART_PART_ATTEMPTS + ) { + throw error; + } + } finally { + body.destroy(); + } + + options.onProgress(confirmedBytes); + await waitForRetry(300 * 3 ** (attempt - 1), options.signal); + } + + if (!uploadedPart) throw new Error(`Video part ${partNumber} could not be uploaded.`); + parts.push(uploadedPart); + confirmedBytes += partSize; + options.onProgress(confirmedBytes); + } + + const completeResponse = await fetch( + new URL(`/api/upload-complete/${options.shareCode}/${encodedUploadId}`, endpointOrigin), + { + method: "POST", + headers: { ...authHeaders, "content-type": "application/json" }, + body: JSON.stringify({ parts }), + redirect: "error", + signal: options.signal, + }, + ); + if (!completeResponse.ok) { + throw new Error(await responseError(completeResponse, "Could not finish video upload")); + } + completed = true; + } finally { + if (!completed) { + try { + await fetch( + new URL( + `/api/upload-abort/${options.shareCode}/${encodedUploadId}`, + endpointOrigin, + ), + { + method: "POST", + headers: authHeaders, + redirect: "error", + signal: AbortSignal.timeout(5000), + }, + ); + } catch { + // R2 also reaps abandoned multipart uploads, so cleanup is best-effort. + } + } + } +} + +export function registerCloudShareHandlers() { + ipcMain.handle( + "cloud-share-upload", + async ( + event, + input: { + filePath?: unknown; + endpoint?: unknown; + token?: unknown; + title?: unknown; + notes?: unknown; + uploadId?: unknown; + }, + ) => { + let uploadId: string | undefined; + try { + const endpoint = normalizeCloudEndpoint(input?.endpoint); + if (typeof input?.filePath !== "string" || input.filePath.trim().length === 0) { + throw new Error("Export a video before sharing it."); + } + uploadId = + typeof input.uploadId === "string" && /^[a-f0-9-]{36}$/i.test(input.uploadId) + ? input.uploadId + : crypto.randomUUID(); + const controller = new AbortController(); + activeUploads.set(uploadId, controller); + const requestedPath = path.resolve(input.filePath); + const resolvedPath = await fs.realpath(requestedPath); + const isRecordlyExport = + isOwnedExportPath(requestedPath) || isOwnedExportPath(resolvedPath); + if (!isRecordlyExport && !isAllowedLocalReadPath(resolvedPath)) { + throw new Error("This file is outside Recordly's approved media locations."); + } + const stat = await fs.stat(resolvedPath); + if (!stat.isFile()) throw new Error("The exported video could not be found."); + const title = + (typeof input.title === "string" ? input.title.trim().slice(0, 200) : "") || + path.basename(resolvedPath, path.extname(resolvedPath)); + const notes = + typeof input.notes === "string" ? input.notes.trim().slice(0, 2000) : ""; + + const token = typeof input.token === "string" ? input.token.trim() : ""; + if (!token || Buffer.byteLength(token) > MAX_AUTH_TOKEN_BYTES) { + throw new Error("Sign in to Recordly before creating a shared link."); + } + const controlHeaders: Record = { + "content-type": "application/json", + }; + if (token) controlHeaders.authorization = `Bearer ${token}`; + const ticketResponse = await fetch(endpoint, { + method: "POST", + headers: controlHeaders, + body: JSON.stringify({ + name: path.basename(resolvedPath), + title, + fileSize: stat.size, + notes, + size: stat.size, + contentType: contentTypeFor(resolvedPath), + }), + redirect: "error", + signal: controller.signal, + }); + const ticketBody = await readJsonResponse(ticketResponse); + if (!ticketResponse.ok) { + const message = + ticketBody && typeof ticketBody === "object" && "error" in ticketBody + ? String((ticketBody as { error: unknown }).error) + : `Cloud share request failed (${ticketResponse.status}).`; + throw new Error(message); + } + const ticket = parseCloudShareTicket(ticketBody); + const endpointOrigin = new URL(endpoint).origin; + if (new URL(ticket.shareUrl).origin !== endpointOrigin) { + throw new Error("The share service returned an untrusted viewing URL."); + } + if (ticket.finalizeUrl && new URL(ticket.finalizeUrl).origin !== endpointOrigin) { + throw new Error("The share service returned an untrusted finalization URL."); + } + const contentType = contentTypeFor(resolvedPath); + const sendProgress = (uploadedBytes: number) => { + event.sender.send("cloud-share-progress", { + uploadId, + uploadedBytes, + totalBytes: stat.size, + }); + }; + const canUseMultipart = + stat.size > MULTIPART_THRESHOLD_BYTES && + ticket.shareCode !== undefined && + new URL(ticket.uploadUrl).origin === endpointOrigin; + + if (canUseMultipart) { + await uploadMultipart({ + endpoint, + shareCode: ticket.shareCode as string, + filePath: resolvedPath, + fileSize: stat.size, + contentType, + token, + signal: controller.signal, + onProgress: sendProgress, + }); + } else { + let uploaded = 0; + const progress = new Transform({ + transform(chunk, _encoding, callback) { + uploaded += chunk.length; + sendProgress(uploaded); + callback(null, chunk); + }, + }); + const body = createReadStream(resolvedPath).pipe(progress); + const uploadHeaders: Record = { + "content-type": contentType, + "content-length": String(stat.size), + ...ticket.headers, + }; + if (new URL(ticket.uploadUrl).origin === endpointOrigin) { + uploadHeaders.authorization = `Bearer ${token}`; + } + try { + const uploadResponse = await fetch(ticket.uploadUrl, { + method: "PUT", + headers: uploadHeaders, + body: body as unknown as BodyInit, + duplex: "half", + redirect: "error", + signal: controller.signal, + } as RequestInit & { duplex: "half" }); + if (!uploadResponse.ok) { + throw new Error( + await responseError(uploadResponse, "Video upload failed"), + ); + } + } finally { + body.destroy(); + } + } + + if (ticket.finalizeUrl) { + const finalizeHeaders: Record = { + "content-type": "application/json", + }; + if (token && new URL(ticket.finalizeUrl).origin === new URL(endpoint).origin) { + finalizeHeaders.authorization = `Bearer ${token}`; + } + const finalizeResponse = await fetch(ticket.finalizeUrl, { + method: "POST", + headers: finalizeHeaders, + body: JSON.stringify({ + title, + summary: notes, + }), + redirect: "error", + signal: controller.signal, + }); + if (!finalizeResponse.ok) { + throw new Error( + `Cloud share finalization failed (${finalizeResponse.status}).`, + ); + } + } + return { success: true, uploadId, shareUrl: ticket.shareUrl }; + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + return { + success: false, + uploadId, + canceled: message.includes("aborted"), + error: message, + }; + } finally { + if (uploadId) activeUploads.delete(uploadId); + } + }, + ); + + ipcMain.handle("cloud-share-cancel", (_event, uploadId: unknown) => { + if (typeof uploadId !== "string") return { success: false }; + const controller = activeUploads.get(uploadId); + if (!controller) return { success: false }; + controller.abort(); + return { success: true }; + }); +} diff --git a/electron/ipc/register/project.ts b/electron/ipc/register/project.ts index ff309a19a..52b85b64a 100644 --- a/electron/ipc/register/project.ts +++ b/electron/ipc/register/project.ts @@ -1,3 +1,6 @@ +import { getRecordingThumbnail } from "../recording/thumbnail"; +import { listRecordings, setRecordingsRemoved } from "../recording/library"; +import { importRecording } from "../recording/importRecording"; import { randomUUID } from "node:crypto"; import { constants as fsConstants } from "node:fs"; import fs from "node:fs/promises"; @@ -211,6 +214,63 @@ async function ensureNamedProjectSaveDoesNotOverwriteDifferentProject( } export function registerProjectHandlers() { + const imports = new Map(); + ipcMain.handle("cancel-recording-import", (event) => { + imports.get(event.sender.id)?.abort(); + return { success: true }; + }); + ipcMain.handle("get-recording-thumbnail", async (_, file: string) => { + try { + return { success: true, value: await getRecordingThumbnail(file) }; + } catch (error) { + return { success: false, error: String(error) }; + } + }); + ipcMain.handle("list-recordings", async () => { + try { + return { success: true, value: await listRecordings() }; + } catch (error) { + return { success: false, error: String(error) }; + } + }); + ipcMain.handle("set-recordings-removed", async (_, paths: string[], removed: boolean) => { + try { + await setRecordingsRemoved(paths, removed); + return { success: true, value: null }; + } catch (error) { + return { success: false, error: String(error) }; + } + }); + ipcMain.handle( + "import-recording", + async ( + event, + currentPath: string, + recordingPath: string, + webcam?: import("../../../src/types/recordingLibrary").RecordingWebcamSource, + ) => { + const owner = event.sender.id; + if (imports.has(owner)) + return { success: false, error: "An import is already running" }; + const controller = new AbortController(); + imports.set(owner, controller); + try { + return { + success: true, + value: await importRecording( + currentPath, + recordingPath, + webcam, + controller.signal, + ), + }; + } catch (error) { + return { success: false, error: String(error) }; + } finally { + imports.delete(owner); + } + }, + ); ipcMain.handle("reveal-in-folder", async (_, filePath: string) => { try { // shell.showItemInFolder doesn't return a value, it throws on error diff --git a/electron/ipc/register/settings.ts b/electron/ipc/register/settings.ts index 93aee8783..91de5ea3f 100644 --- a/electron/ipc/register/settings.ts +++ b/electron/ipc/register/settings.ts @@ -1,5 +1,5 @@ import fs from "node:fs/promises"; -import { app, ipcMain } from "electron"; +import { app, BrowserWindow, ipcMain } from "electron"; import { hasAppSetting, readAppSettingsStore, writeAppSettingsStore } from "../../appSettingsStore"; import { hideCursor } from "../../cursorHider"; import { closeCountdownWindow, createCountdownWindow, getCountdownWindow } from "../../windows"; @@ -43,10 +43,22 @@ function getBrowserMicrophoneProfileFromEnv() { } export function registerSettingsHandlers() { + ipcMain.handle("get-window-fullscreen", (event) => BrowserWindow.fromWebContents(event.sender)?.isFullScreen() ?? false); ipcMain.handle("app:getVersion", () => { return app.getVersion(); }); + ipcMain.handle("get-window-chrome", (event) => { + const win = BrowserWindow.fromWebContents(event.sender); + return { + trafficLightsVisible: + process.platform === "darwin" && + !!win && + !win.isFullScreen() && + !win.isSimpleFullScreen(), + }; + }); + ipcMain.handle("get-platform", () => { return process.platform; }); diff --git a/electron/ipc/utils.ts b/electron/ipc/utils.ts index 23960f209..af6b3c2bd 100644 --- a/electron/ipc/utils.ts +++ b/electron/ipc/utils.ts @@ -1,3 +1,4 @@ +import { getLocalMediaServerPath } from "../../src/lib/localMediaUrl"; import fs from "node:fs/promises"; import { createRequire } from "node:module"; import path from "node:path"; @@ -46,7 +47,7 @@ export function normalizeVideoSourcePath(videoPath?: string | null): string | nu } } - return trimmed; + return getLocalMediaServerPath(trimmed) ?? trimmed; } export function stripJsonByteOrderMark(content: string) { diff --git a/electron/main.ts b/electron/main.ts index 890726670..915873c2d 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -1,3 +1,4 @@ +import { clearRecordingTrashUndo } from "./ipc/recording/library"; import fs from "node:fs/promises"; import path from "node:path"; import { fileURLToPath, pathToFileURL } from "node:url"; @@ -16,6 +17,7 @@ import { Tray, } from "electron"; import { RECORDINGS_DIR } from "./appPaths"; +import { createAuthCallbackController } from "./authCallback"; import { showCursor } from "./cursorHider"; import { getGpuSwitches } from "./gpuSwitches"; import { @@ -189,6 +191,11 @@ if (!hasSingleInstanceLock) { app.quit(); } +const authCallbacks = createAuthCallbackController({ + isDev: IS_DEV, + focusApp: () => focusOrCreateMainWindow(), +}); + function closeEditorWindowBypassingUnsavedPrompt(window: BrowserWindow | null) { if (!window || window.isDestroyed()) { return; @@ -865,6 +872,8 @@ function createSourceSelectorWindowWrapper() { // explicitly with Cmd + Q. app.on("before-quit", () => { isAppQuitting = true; + authCallbacks.close(); + void clearRecordingTrashUndo().catch((error) => console.warn("Could not clear recording undo cache", error)); killWindowsCaptureProcess(); showCursor(); cleanupNativeVideoExportSessions(); @@ -883,12 +892,23 @@ app.on("activate", () => { focusOrCreateMainWindow(); }); -app.on("second-instance", () => { +app.on("second-instance", (_event, commandLine) => { + const authCallback = authCallbacks.find(commandLine); + if (authCallback) authCallbacks.dispatch(authCallback); focusOrCreateMainWindow(); }); // Register all IPC handlers when app is ready app.whenReady().then(async () => { + authCallbacks.startDevServer(); + if (process.defaultApp && process.argv[1]) { + app.setAsDefaultProtocolClient(authCallbacks.protocol, process.execPath, [path.resolve(process.argv[1])]); + } else { + app.setAsDefaultProtocolClient(authCallbacks.protocol); + } + const startupAuthCallback = authCallbacks.find(process.argv); + if (startupAuthCallback) authCallbacks.dispatch(startupAuthCallback); + if (process.platform === "win32") { app.setAppUserModelId("dev.recordly.app"); } diff --git a/electron/preload.ts b/electron/preload.ts index 990ee7a8f..1cf6c5dcc 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -787,6 +787,13 @@ contextBridge.exposeInMainWorld("electronAPI", { clearCurrentVideoPath: () => { return ipcRenderer.invoke("clear-current-video-path"); }, + getRecordingThumbnail: (filePath: string) => ipcRenderer.invoke("get-recording-thumbnail", filePath), + cancelRecordingImport: () => ipcRenderer.invoke("cancel-recording-import"), + listRecordings: () => ipcRenderer.invoke("list-recordings"), + setRecordingsRemoved: (paths: string[], removed: boolean) => + ipcRenderer.invoke("set-recordings-removed", paths, removed), + importRecording: (currentPath: string, recordingPath: string, webcam?: import("../src/types/recordingLibrary").RecordingWebcamSource) => + ipcRenderer.invoke("import-recording", currentPath, recordingPath, webcam), deleteRecordingFile: (filePath: string) => { return ipcRenderer.invoke("delete-recording-file", filePath); }, @@ -940,15 +947,62 @@ contextBridge.exposeInMainWorld("electronAPI", { ipcRenderer.on("menu-save-project-as", listener); return () => ipcRenderer.removeListener("menu-save-project-as", listener); }, + getWindowChrome: () => ipcRenderer.invoke("get-window-chrome"), + onWindowChromeChanged: (callback: (chrome: { trafficLightsVisible: boolean }) => void) => { + const listener = ( + _event: Electron.IpcRendererEvent, + chrome: { trafficLightsVisible: boolean }, + ) => callback(chrome); + ipcRenderer.on("window-chrome-changed", listener); + return () => ipcRenderer.removeListener("window-chrome-changed", listener); + }, getPlatform: () => { return ipcRenderer.invoke("get-platform"); }, + isWindowFullscreen: () => { + return ipcRenderer.invoke("get-window-fullscreen"); + }, + onWindowFullscreenChanged: (callback: (isFullscreen: boolean) => void) => { + const listener = (_event: Electron.IpcRendererEvent, isFullscreen: boolean) => + callback(isFullscreen); + ipcRenderer.on("window-fullscreen-changed", listener); + return () => ipcRenderer.removeListener("window-fullscreen-changed", listener); + }, getLinuxWindowSystem: () => { return ipcRenderer.invoke("get-linux-window-system"); }, + getPendingAuthCallbackUrl: () => ipcRenderer.invoke("auth:get-pending-callback"), + onAuthCallbackUrl: (callback: (url: string) => void) => { + const listener = (_event: Electron.IpcRendererEvent, url: string) => callback(url); + ipcRenderer.on("auth:callback", listener); + return () => ipcRenderer.removeListener("auth:callback", listener); + }, revealInFolder: (filePath: string) => { return ipcRenderer.invoke("reveal-in-folder", filePath); }, + cloudShareUpload: (input: { + filePath: string; + endpoint: string; + token?: string; + title?: string; + notes?: string; + uploadId?: string; + }) => ipcRenderer.invoke("cloud-share-upload", input), + cloudShareCancel: (uploadId: string) => ipcRenderer.invoke("cloud-share-cancel", uploadId), + onCloudShareProgress: ( + callback: (progress: { + uploadId: string; + uploadedBytes: number; + totalBytes: number; + }) => void, + ) => { + const listener = ( + _event: Electron.IpcRendererEvent, + progress: { uploadId: string; uploadedBytes: number; totalBytes: number }, + ) => callback(progress); + ipcRenderer.on("cloud-share-progress", listener); + return () => ipcRenderer.removeListener("cloud-share-progress", listener); + }, openRecordingsFolder: () => { return ipcRenderer.invoke("open-recordings-folder"); }, diff --git a/electron/windows.ts b/electron/windows.ts index 23e874fa1..06083afa9 100644 --- a/electron/windows.ts +++ b/electron/windows.ts @@ -919,7 +919,7 @@ export function createEditorWindow(): BrowserWindow { }), ...(isMac && { titleBarStyle: "hiddenInset", - trafficLightPosition: { x: 12, y: 12 }, + trafficLightPosition: { x: 16, y: 20 }, }), autoHideMenuBar: !isMac, transparent: false, @@ -938,6 +938,17 @@ export function createEditorWindow(): BrowserWindow { }, }); + const publishWindowChrome = () => { + if (!win.isDestroyed()) + win.webContents.send("window-chrome-changed", { + trafficLightsVisible: isMac && !win.isFullScreen() && !win.isSimpleFullScreen(), + }); + }; + win.on("enter-full-screen", publishWindowChrome); + win.on("leave-full-screen", publishWindowChrome); + win.on("resize", publishWindowChrome); + win.webContents.on("did-finish-load", publishWindowChrome); + win.once("ready-to-show", () => { console.log(`[PERF:MAIN] Editor Window: ready-to-show in ${Date.now() - perfStart}ms`); win.show(); @@ -973,6 +984,14 @@ export function createEditorWindow(): BrowserWindow { console.log("[editor-window] focus"); }); + win.on("enter-full-screen", () => { + if (!win.isDestroyed()) win.webContents.send("window-fullscreen-changed", true); + }); + + win.on("leave-full-screen", () => { + if (!win.isDestroyed()) win.webContents.send("window-fullscreen-changed", false); + }); + if (VITE_DEV_SERVER_URL) { const query = new URLSearchParams(getEditorWindowQuery()); win.loadURL(`${VITE_DEV_SERVER_URL}?${query.toString()}`); diff --git a/package-lock.json b/package-lock.json index 5ef927981..6dac10a95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "hasInstallScript": true, "dependencies": { "@phosphor-icons/react": "^2.1.10", + "@supabase/supabase-js": "^2.116.0", "capturekit": "^1.0.13", "electron-updater": "^6.8.3", "ffmpeg-static": "^5.3.0", @@ -18,28 +19,18 @@ }, "devDependencies": { "@biomejs/biome": "2.3.13", + "@dnd-kit/core": "^6.3.1", "@electron/rebuild": "^4.2.0", "@fix-webm-duration/fix": "^1.0.1", - "@radix-ui/react-accordion": "^1.2.12", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-dropdown-menu": "^2.1.16", - "@radix-ui/react-popover": "^1.1.15", - "@radix-ui/react-select": "^2.2.6", - "@radix-ui/react-slider": "^1.3.6", - "@radix-ui/react-slot": "^1.2.3", - "@radix-ui/react-switch": "^1.2.6", - "@radix-ui/react-tabs": "^1.1.13", - "@radix-ui/react-toggle": "^1.1.10", - "@radix-ui/react-toggle-group": "^1.1.11", + "@heroui/react": "^3.2.6", + "@heroui/styles": "^3.2.6", + "@playwright/test": "^1.63.0", + "@tailwindcss/postcss": "^4.3.3", "@types/gif.js": "^0.2.5", "@types/node": "^25.0.3", - "@types/react": "^18.2.64", - "@types/react-dom": "^18.2.21", - "@uiw/color-convert": "^2.9.2", - "@uiw/react-color-block": "^2.9.2", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^4.2.1", - "autoprefixer": "^10.4.21", - "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "dnd-timeline": "^2.2.0", "electron": "^43.1.0", @@ -53,14 +44,14 @@ "pixi-filters": "^6.1.5", "pixi.js": "^8.14.0", "postcss": "^8.5.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^19.3.0", + "react-aria": "3.52.1", + "react-dom": "^19.3.0", "react-icons": "^5.5.0", "react-resizable-panels": "^3.0.6", "react-rnd": "^10.5.2", - "sonner": "^2.0.7", "tailwind-merge": "^3.3.1", - "tailwindcss": "^3.4.18", + "tailwindcss": "^4.3.3", "tailwindcss-animate": "^1.0.7", "terser": "^5.44.1", "typescript": "^5.2.2", @@ -71,10 +62,57 @@ "web-demuxer": "^4.0.0" } }, + "node_modules/@adobe/react-spectrum": { + "version": "3.47.5", + "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.47.5.tgz", + "integrity": "sha512-iTbAwwMijVnQjwjwbvkWn82AyRAbFNSJzt/VawWp1vXRIxVIO9COZ1pPG5Fj88xXgqlG8maVcv58p74vqqy5HA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.4", + "@react-types/shared": "^3.36.1", + "@spectrum-icons/ui": "^3.7.2", + "@spectrum-icons/workflow": "^4.3.2", + "@swc/helpers": "^0.5.0", + "client-only": "^0.0.1", + "clsx": "^2.0.0", + "react-aria": "3.52.1", + "react-aria-components": "1.21.1", + "react-stately": "3.50.0", + "react-transition-group": "^4.4.5", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@adobe/react-spectrum-ui": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@adobe/react-spectrum-ui/-/react-spectrum-ui-1.2.1.tgz", + "integrity": "sha512-wcrbEE2O/9WnEn6avBnaVRRx88S5PLFsPLr4wffzlbMfXeQsy+RMQwaJd3cbzrn18/j04Isit7f7Emfn0dhrJA==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@adobe/react-spectrum-workflow": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@adobe/react-spectrum-workflow/-/react-spectrum-workflow-2.3.5.tgz", + "integrity": "sha512-b53VIPwPWKb/T5gzE3qs+QlGP5gVrw/LnWV3xMksDU+CRl3rzOKUwxIGiZO8ICyYh1WiyqY4myGlPU/nAynBUg==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.3.0.tgz", + "integrity": "sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==", "dev": true, "license": "MIT", "engines": { @@ -344,7 +382,6 @@ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -1483,149 +1520,74 @@ "tslib": "^2.3.0" } }, - "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.3", - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "node_modules/@heroui/react": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@heroui/react/-/react-3.2.6.tgz", + "integrity": "sha512-KBhUUUdX4571SSjwpuBPEFZTYAw/tmGezTIsTnjIOlXDZkjWACfhFe6ibtReO+xTkUcfxCV1r3cF00/3OPlhhw==", "dev": true, "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.4" + "@heroui/styles": "3.2.6", + "@radix-ui/react-avatar": "1.2.6", + "@react-stately/utils": "3.12.1", + "@react-types/color": "3.2.0", + "@react-types/shared": "3.36.1", + "input-otp": "1.5.0", + "tailwind-variants": "3.3.1" }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "@internationalized/date": "^3.12.4", + "@react-aria/ssr": "^3.10.1", + "@react-aria/utils": "^3.34.1", + "react": ">=19.0.0", + "react-aria": "^3.52.1", + "react-aria-components": "^1.21.1", + "react-dom": ">=19.0.0", + "tailwindcss": ">=4.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/@heroui/styles": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@heroui/styles/-/styles-3.2.6.tgz", + "integrity": "sha512-feKZUphVe5+QCXnUe8kpqT5T+pPeMI3LaQcSztx08PGVTkhz0dU0C6crKvA1G4HHIPFXXon68VeL8lPjvGHsWg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "tailwind-variants": "3.3.1", + "tw-animate-css": "1.4.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "tailwindcss": ">=4.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@internationalized/date": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.4.tgz", + "integrity": "sha512-M1dEn4c1U1HsSlaVR8upZtSqvXrTkHDfv18H01uCSJyjVLDxnBR38v/fMxecmlwXKR4i9HeZcmgQAPE6A+aGJQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@swc/helpers": "^0.5.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/@internationalized/number": { + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.8.tgz", + "integrity": "sha512-8UmMFia46DUt+k97zKd9fKWXcWHR+k8ae3eYzILETuT2KbIvLyOfac7zesw+sJdRAAZ7Q9pM1Mk22aXp2LD0Ig==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "@swc/helpers": "^0.5.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@internationalized/string": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.10.tgz", + "integrity": "sha512-PDx6//vHSpRnHfxqMqto11zQvhsaU74O3mKv2F/0eicGZcl9NLjQmGlbHz/LsJh5tLKp4A4L7ZVTzN1/MmMTvA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@swc/helpers": "^0.5.0" } }, "node_modules/@isaacs/fs-minipass": { @@ -1780,44 +1742,6 @@ "node": ">= 10.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@phosphor-icons/react": { "version": "2.1.10", "resolved": "https://registry.npmjs.org/@phosphor-icons/react/-/react-2.1.10.tgz", @@ -1838,47 +1762,35 @@ "dev": true, "license": "MIT" }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@playwright/test": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz", + "integrity": "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==", "dev": true, - "license": "MIT", - "optional": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, "engines": { - "node": ">=14" + "node": ">=20" } }, - "node_modules/@radix-ui/number": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@radix-ui/react-accordion": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", - "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "node_modules/@radix-ui/react-avatar": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.6.tgz", + "integrity": "sha512-4ULOTJ/mqy2hT9GlWa/MFHxHSvH3nJzHnZM1waNsc5Bonv7i70aNenghXmD97S6OJ81ekXONGGt4nT1r0PfEdA==", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collapsible": "1.1.12", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-is-hydrated": "0.1.3", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -1895,72 +1807,53 @@ } } }, - "node_modules/@radix-ui/react-arrow": { + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/primitive": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.7.tgz", + "integrity": "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.5.tgz", + "integrity": "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==", "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", - "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.2.tgz", + "integrity": "sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==", "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.10.tgz", + "integrity": "sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" + "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", @@ -1977,12 +1870,15 @@ } } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-slot": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.3.tgz", + "integrity": "sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==", "dev": true, "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.5" + }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -1993,10 +1889,10 @@ } } }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.4.tgz", + "integrity": "sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2009,47 +1905,26 @@ } } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.4.tgz", + "integrity": "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==", "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.3.tgz", + "integrity": "sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2062,757 +1937,283 @@ } } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "node_modules/@react-aria/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@react-aria/color/-/color-3.2.1.tgz", + "integrity": "sha512-v/pZh1yBNeayQ5Kio0xRIX0gBf6uu+KjCRW4QSydTyRpmhvk6sMzHT9i9/vIMdaDHaYHBXlXF+Tp/mvS9CG4Zw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" + "@swc/helpers": "^0.5.0", + "react-aria": "^3.48.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", - "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "node_modules/@react-aria/ssr": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.10.1.tgz", + "integrity": "sha512-jn038/ZYmu6DpfXJ6r2U9zFFppjbc9wnApPJSCxao2RZVEqep4YyoniHSy8qv6V21/xyS4IV7W9a+X2jOjSuag==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@swc/helpers": "^0.5.0", + "react-aria": "^3.48.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">= 12" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "node_modules/@react-aria/utils": { + "version": "3.34.1", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.34.1.tgz", + "integrity": "sha512-H6+rGZL+0f58bBNaUMfctEnT+NogqwAk+nHiB8sR3K+YlQ37GTuCijy2U/pPvQtFMS5mURrjZeBH5JNNXsx14A==", "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-aria": "^3.48.0", + "react-stately": "^3.46.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "node_modules/@react-spectrum/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@react-spectrum/color/-/color-3.2.1.tgz", + "integrity": "sha512-FbB+GaVufsN+obNJmUAe8XGZTeJjEWvEf/k/7nxDxoDCBdg/o6eEPONAZyID5Dj1f8BZKNym8VURxDZx7IIyuQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" + "@adobe/react-spectrum": "^3.47.0", + "@swc/helpers": "^0.5.0", + "react-stately": "^3.46.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "node_modules/@react-spectrum/provider": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@react-spectrum/provider/-/provider-3.11.1.tgz", + "integrity": "sha512-TsoNdVdmlQ7L+75ILq5Yb3+wp/I1AtIeat0o+Y+ZBxP+TtWpwT1ZtCB5l3cplFVzHzOpZlzO0VaDrDP9ElGYDw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@adobe/react-spectrum": "^3.47.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/color": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@react-stately/color/-/color-3.10.1.tgz", + "integrity": "sha512-v4YlLa/oRQpPa/M9Yq1e0Bl8Z7xzGZdNDAIbfIMZuiJtacaOKriPW+AOgjjT/Ab0fNX2YDbwIYvkiMOJBnTi5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-stately": "^3.46.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@radix-ui/react-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", - "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "node_modules/@react-stately/utils": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.12.1.tgz", + "integrity": "sha512-NqKfzrknpfwiewx7R2vk1P+CneClInPDsIhw15+jOcUYSEfej0nta4cJywuKQJ2gsPwqX/ojDNixedCve9FWGw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-stately": "^3.46.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popover": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", - "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-select": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", - "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slider": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", - "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-switch": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", - "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tabs": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", - "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", - "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", - "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "node_modules/@react-types/color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-types/color/-/color-3.2.0.tgz", + "integrity": "sha512-beV3vz80nzZ1EuYUM7296Kyi3AHcMrbQw0qub/9yzHWVTKKc5sy/e4dCMKcWL/ArkeAyc7jDOiui190RQ4l0Fw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-toggle": "1.1.10", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@react-aria/color": "^3.2.0", + "@react-spectrum/color": "^3.2.0", + "@react-stately/color": "^3.10.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "@react-spectrum/provider": "^3.0.0", + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "node_modules/@react-types/shared": { + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", + "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "license": "MIT" }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", + "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", + "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", + "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", + "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", + "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", + "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", + "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", - "dev": true, - "license": "MIT" + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", + "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rollup/rollup-android-arm-eabi": { + "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", - "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", + "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", "cpu": [ - "arm" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "android" + "linux" ] }, - "node_modules/@rollup/rollup-android-arm64": { + "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", - "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", + "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", "cpu": [ "arm64" ], @@ -2820,71 +2221,71 @@ "license": "MIT", "optional": true, "os": [ - "android" + "linux" ] }, - "node_modules/@rollup/rollup-darwin-arm64": { + "node_modules/@rollup/rollup-linux-loong64-gnu": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", - "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", + "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", "cpu": [ - "arm64" + "loong64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ] }, - "node_modules/@rollup/rollup-darwin-x64": { + "node_modules/@rollup/rollup-linux-ppc64-gnu": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", - "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz", + "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", "cpu": [ - "x64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ] }, - "node_modules/@rollup/rollup-freebsd-arm64": { + "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", - "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz", + "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", "cpu": [ - "arm64" + "riscv64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" + "linux" ] }, - "node_modules/@rollup/rollup-freebsd-x64": { + "node_modules/@rollup/rollup-linux-riscv64-musl": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", - "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz", + "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", "cpu": [ - "x64" + "riscv64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" + "linux" ] }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", - "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz", + "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", "cpu": [ - "arm" + "s390x" ], "dev": true, "license": "MIT", @@ -2893,12 +2294,12 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", - "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", + "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", "cpu": [ - "arm" + "x64" ], "dev": true, "license": "MIT", @@ -2907,12 +2308,12 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { + "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", - "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz", + "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", @@ -2921,10 +2322,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-arm64-musl": { + "node_modules/@rollup/rollup-openharmony-arm64": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", - "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz", + "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", "cpu": [ "arm64" ], @@ -2932,167 +2333,482 @@ "license": "MIT", "optional": true, "os": [ - "linux" + "openharmony" ] }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { + "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", - "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz", + "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", "cpu": [ - "loong64" + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz", + "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", + "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", + "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@spectrum-icons/ui": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@spectrum-icons/ui/-/ui-3.7.2.tgz", + "integrity": "sha512-7IuSHO+Ck8gJUIGIXqDcDIU4R8RHRUZhlfz8AwN1rSdCEvdgp6DWYN0LDTMrWh7TN/H5hrJ7oDO/gUpR3TnBjw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@adobe/react-spectrum-ui": "1.2.1", + "@babel/runtime": "^7.24.4", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "@adobe/react-spectrum": "^3.47.0", + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@spectrum-icons/workflow": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@spectrum-icons/workflow/-/workflow-4.3.2.tgz", + "integrity": "sha512-UkVg8Kp9rInjfqtG27in9p7RWfN9JFSvZr7ZOpN2n9jkrQ1y88hZpK8dKce8lgVb7jALXtsi2p0rjyaWzO0QsA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@adobe/react-spectrum-workflow": "2.3.5", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "@adobe/react-spectrum": "^3.47.0", + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@supabase/auth-js": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.116.0.tgz", + "integrity": "sha512-Cmosty12gyKGK9N3bQb+lMmuAFev5nmUzaR1AsmZHqKOAGzqX1VQzmp49CNPwOx/pw0H9Qqk4rs9yhwTlKpfDg==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.116.0.tgz", + "integrity": "sha512-E+VOc2QDcni/fySqkBFiZhnoB3SGydEdZgFI6/dEAGAHx6yEhB46TN9qb2wXs+E+RSzOBV0R6dasiSlw4xlZAA==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/phoenix": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@supabase/phoenix/-/phoenix-0.4.5.tgz", + "integrity": "sha512-aAn9H9ovVyeApKy11OWOrrOGq8DV68yWeH4ud2lN9fzn4aO8Zb5GLL9m1pUg9nLqIcT+ZDfAcsZe0E/nqdv2lw==", + "license": "MIT" + }, + "node_modules/@supabase/postgrest-js": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.116.0.tgz", + "integrity": "sha512-kGpVZTDHxFTJS3tu+rU0iTAZ+4U0bcLVjxwCk8f3gRhjw3qdCZjTBlgYvc4kGH2XccmAzbkKwXL/mrNHMGSc+A==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.116.0.tgz", + "integrity": "sha512-MHAnlXxi2s6yiJsZsQMfs2B3RFxeVfQWxerqYhIMqcCQV/FuY3LIeouPEkXw/ah7wUWMLYwempF9MOCUScyddg==", + "license": "MIT", + "dependencies": { + "@supabase/phoenix": "0.4.5", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.116.0.tgz", + "integrity": "sha512-6/3hR6vccBP6oGM5B6RfbwZcTCKmQOodd/ZWQdsw8yJsU5zO/a//oBL6yLnmgxcjnHSrelW8rsO7hL5DPybyUQ==", + "license": "MIT", + "dependencies": { + "iceberg-js": "^0.8.1", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.116.0.tgz", + "integrity": "sha512-YyWmKXt2NspV9iO8FPnlswUFJIRnrLd3oTCb+3ZyYRuKZtBH0xCUDgnUqoyA0fGUxpM/UhfwDjYf/dht/9bp7g==", + "license": "MIT", + "dependencies": { + "@supabase/auth-js": "2.116.0", + "@supabase/functions-js": "2.116.0", + "@supabase/postgrest-js": "2.116.0", + "@supabase/realtime-js": "2.116.0", + "@supabase/storage-js": "2.116.0" + }, + "engines": { + "node": ">=22.0.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + } + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "android" + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz", - "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", "cpu": [ - "ppc64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "darwin" + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz", - "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", "cpu": [ - "riscv64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "darwin" + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz", - "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", "cpu": [ - "riscv64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "freebsd" + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz", - "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", "cpu": [ - "s390x" + "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", - "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", "cpu": [ - "x64" + "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz", - "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", "cpu": [ - "x64" + "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz", - "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", "cpu": [ - "arm64" + "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ - "openharmony" - ] + "linux" + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz", - "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", "cpu": [ - "arm64" + "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ - "win32" - ] + "linux" + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz", - "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], "cpu": [ - "ia32" + "wasm32" ], "dev": true, "license": "MIT", "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", - "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">= 20" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", - "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", "cpu": [ "x64" ], @@ -3101,32 +2817,23 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "license": "MIT", + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "node": ">= 20" } }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "node_modules/@tailwindcss/postcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.3.3.tgz", + "integrity": "sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==", "dev": true, "license": "MIT", "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "postcss": "^8.5.16", + "tailwindcss": "4.3.3" } }, "node_modules/@types/babel__core": { @@ -3333,32 +3040,24 @@ "xmlbuilder": ">=11.0.1" } }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.3.26", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.26.tgz", - "integrity": "sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", "dev": true, "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", "dev": true, "license": "MIT", "peerDependencies": { - "@types/react": "^18.0.0" + "@types/react": "^19.3.0" } }, "node_modules/@types/responselike": { @@ -3379,72 +3078,6 @@ "license": "MIT", "optional": true }, - "node_modules/@uiw/color-convert": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@uiw/color-convert/-/color-convert-2.9.2.tgz", - "integrity": "sha512-ibw9OS29S7GlL+vDwU3p5XG3vhR7XdzUecydpZbakUeg2Td6nfsnrCAX9sbLwQ73p0abO42v+V4qRaWq+7/BjQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://jaywcjlove.github.io/#/sponsor" - }, - "peerDependencies": { - "@babel/runtime": ">=7.19.0" - } - }, - "node_modules/@uiw/react-color-block": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@uiw/react-color-block/-/react-color-block-2.9.2.tgz", - "integrity": "sha512-0EIZTELA5pnxyMlBOFo3hrpy73db+Qeq6E+QptNfD/8izor8OvY1Uquj2VqD6gDz+iVHMELIoKxpaQ8sZR7NOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@uiw/color-convert": "2.9.2", - "@uiw/react-color-editable-input": "2.9.2", - "@uiw/react-color-swatch": "2.9.2" - }, - "funding": { - "url": "https://jaywcjlove.github.io/#/sponsor" - }, - "peerDependencies": { - "@babel/runtime": ">=7.19.0", - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@uiw/react-color-editable-input": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@uiw/react-color-editable-input/-/react-color-editable-input-2.9.2.tgz", - "integrity": "sha512-DY7pu12+LDRn6cxDMvsy1/quaPTxicAPz/kfODV7KBf8+Hq4rFWeJ4KS6m22IKIbQxrBQgmQG0WFJLaPeY7cPw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://jaywcjlove.github.io/#/sponsor" - }, - "peerDependencies": { - "@babel/runtime": ">=7.19.0", - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@uiw/react-color-swatch": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@uiw/react-color-swatch/-/react-color-swatch-2.9.2.tgz", - "integrity": "sha512-6zBy+E9NzZR672M2wPsbbNRqKy9Wi9jOuuxxyzov1CEZp+pPX7UwMlCX6RUhKdO0PzTSPCVQmbz5bplu5vsW0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@uiw/color-convert": "2.9.2" - }, - "funding": { - "url": "https://jaywcjlove.github.io/#/sponsor" - }, - "peerDependencies": { - "@babel/runtime": ">=7.19.0", - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, "node_modules/@vitejs/plugin-react": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", @@ -3693,27 +3326,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/app-builder-bin": { "version": "5.0.0-alpha.12", "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz", @@ -3936,16 +3548,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/app-builder-lib/node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, "node_modules/app-builder-lib/node_modules/minimatch": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.0.tgz", @@ -3978,13 +3580,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -4070,44 +3665,6 @@ "node": ">= 4.0.0" } }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4146,19 +3703,6 @@ "baseline-browser-mapping": "dist/cli.js" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/boolean": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", @@ -4174,21 +3718,8 @@ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/browserslist": { @@ -4424,16 +3955,6 @@ "node": ">= 0.4" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001749", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001749.tgz", @@ -4517,44 +4038,6 @@ "node": ">= 16" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -4588,19 +4071,6 @@ "node": ">=8" } }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" - }, - "funding": { - "url": "https://polar.sh/cva" - } - }, "node_modules/cli-truncate": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", @@ -4619,6 +4089,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "dev": true, + "license": "MIT" + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -4766,23 +4243,10 @@ "node": ">= 8" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, "license": "MIT" }, @@ -4906,8 +4370,6 @@ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", - "optional": true, - "peer": true, "engines": { "node": ">=8" } @@ -4920,20 +4382,6 @@ "license": "MIT", "optional": true }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/dir-compare": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", @@ -4969,13 +4417,6 @@ "node": "*" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, "node_modules/dmg-builder": { "version": "26.7.0", "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.7.0.tgz", @@ -5070,6 +4511,17 @@ "resize-observer-polyfill": "^1.5.1" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dotenv": { "version": "16.6.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", @@ -5121,13 +4573,6 @@ "dev": true, "license": "ISC" }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -5441,6 +4886,20 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz", + "integrity": "sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -5712,36 +5171,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -5749,16 +5178,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/ffmpeg-static": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-5.3.0.tgz", @@ -5804,19 +5223,6 @@ "node": ">=10" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/flairup": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/flairup/-/flairup-1.0.0.tgz", @@ -5824,23 +5230,6 @@ "dev": true, "license": "MIT" }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/form-data": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", @@ -5858,29 +5247,15 @@ "node": ">= 6" } }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, "node_modules/framer-motion": { - "version": "12.23.24", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.24.tgz", - "integrity": "sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==", + "version": "12.43.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.43.0.tgz", + "integrity": "sha512-1eaL3RvR/kAlbG7UYcpMptEyzPoENO0c6w7ZnB3/hh2vSAz/6uGAFn6fdoqTBguNstf3MsFhJHsD/0DHiclG+g==", "dev": true, "license": "MIT", "dependencies": { - "motion-dom": "^12.23.23", - "motion-utils": "^12.23.6", + "motion-dom": "^12.43.0", + "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -5977,16 +5352,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -6056,19 +5421,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -6332,6 +5684,15 @@ "node": ">=10.17.0" } }, + "node_modules/iceberg-js": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz", + "integrity": "sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/iconv-corefoundation": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", @@ -6403,43 +5764,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/input-otp": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.5.0.tgz", + "integrity": "sha512-3AcfdW1sNG0FmSA5hHMBXG7jNW5CdcdKs8ln8JOmn6S2SRkoXoJx+2UwC+ZvjflfnOdHJx0SfQ9/YjlxVYLtGQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "node_modules/is-fullwidth-code-point": { @@ -6452,29 +5785,6 @@ "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/isbinaryfile": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", @@ -6501,22 +5811,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jake": { "version": "10.9.4", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", @@ -6536,13 +5830,13 @@ } }, "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", "dev": true, "license": "MIT", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/js-binary-schema-parser": { @@ -6556,6 +5850,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -6650,8 +5945,6 @@ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "dev": true, "license": "MPL-2.0", - "optional": true, - "peer": true, "dependencies": { "detect-libc": "^2.0.3" }, @@ -6689,7 +5982,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6711,7 +6003,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6733,7 +6024,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6755,7 +6045,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6777,7 +6066,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6799,7 +6087,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6821,7 +6108,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6843,7 +6129,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6865,7 +6150,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6887,7 +6171,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6909,7 +6192,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -6918,26 +6200,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash": { "version": "4.17.23", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", @@ -6962,6 +6224,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -7062,30 +6325,6 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -7218,19 +6457,19 @@ } }, "node_modules/motion-dom": { - "version": "12.23.23", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", - "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", + "version": "12.43.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.43.0.tgz", + "integrity": "sha512-azKON4d9S65PEoFUiQTMTgPheEmzf2QngdRc50AKfJp9Q9mmcBVw22c8eMq9k8kxOFHdL7+WZY7N/5F/lwiDag==", "dev": true, "license": "MIT", "dependencies": { - "motion-utils": "^12.23.6" + "motion-utils": "^12.39.0" } }, "node_modules/motion-utils": { - "version": "12.23.6", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", - "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "version": "12.39.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz", + "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==", "dev": true, "license": "MIT" }, @@ -7248,19 +6487,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.15", @@ -7397,26 +6624,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -7452,16 +6659,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -7524,13 +6721,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, "node_modules/parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", @@ -7562,37 +6752,6 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -7632,39 +6791,6 @@ "dev": true, "license": "ISC" }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/pixi-filters": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/pixi-filters/-/pixi-filters-6.1.5.tgz", @@ -7702,6 +6828,35 @@ "url": "https://opencollective.com/pixijs" } }, + "node_modules/playwright": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", + "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", + "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/plist": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", @@ -7746,140 +6901,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", - "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.1.1" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, "node_modules/postject": { "version": "1.0.0-alpha.6", "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", @@ -8012,27 +7033,6 @@ ], "license": "MIT" }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -8058,28 +7058,66 @@ } }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, + "node_modules/react-aria": { + "version": "3.52.1", + "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.52.1.tgz", + "integrity": "sha512-fdZZruC9/x/joCg0mhKGs5aHpwrXLCSZ4GOJmhhYyiE0ffyEsk9MLFt9LCOCF9tn8ErTD+UDQP4oDUSlZkmpCg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.4", + "@internationalized/number": "^3.6.8", + "@internationalized/string": "^3.2.10", + "@react-types/shared": "^3.36.1", + "@swc/helpers": "^0.5.0", + "aria-hidden": "^1.2.3", + "clsx": "^2.0.0", + "react-stately": "3.50.0", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-aria-components": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/react-aria-components/-/react-aria-components-1.21.1.tgz", + "integrity": "sha512-J88WflYY0z+EhLX0ce+GjFlQ3ag3ubIgfUTjpKSrBQBu92Xtl4Ub9o118HItUddtbk1Ido0jzyPy94/klZy1hg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.4", + "@internationalized/string": "^3.2.10", + "@react-types/shared": "^3.36.1", + "@swc/helpers": "^0.5.0", + "client-only": "^0.0.1", + "react-aria": "3.52.1", + "react-stately": "3.50.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.28.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.3.0" } }, "node_modules/react-draggable": { @@ -8134,55 +7172,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/react-resizable-panels": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-3.0.6.tgz", @@ -8217,27 +7206,39 @@ "dev": true, "license": "0BSD" }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "node_modules/react-stately": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.50.0.tgz", + "integrity": "sha512-TnckvpDQGU0672wEaLZqdzvhuSeXWjgW6vijMWxiKOxc8CosQUfPGISdcZyfHqjX3XMjEtRxj4w9HumvX4h4mw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" + "@internationalized/date": "^3.12.4", + "@internationalized/number": "^3.6.8", + "@internationalized/string": "^3.2.10", + "@react-types/shared": "^3.36.1", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.6.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, "node_modules/read-binary-file-arch": { @@ -8253,16 +7254,6 @@ "read-binary-file-arch": "cli.js" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -8277,19 +7268,6 @@ "node": ">= 6" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8325,27 +7303,6 @@ "dev": true, "license": "MIT" }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", @@ -8376,17 +7333,6 @@ "node": ">= 4" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/roarr": { "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", @@ -8448,30 +7394,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -8516,13 +7438,10 @@ "license": "ISC" }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" }, "node_modules/semver": { "version": "7.7.3", @@ -8603,19 +7522,6 @@ "dev": true, "license": "ISC" }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -8657,17 +7563,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/sonner": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", - "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8755,22 +7650,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8784,20 +7663,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -8827,60 +7692,6 @@ "dev": true, "license": "MIT" }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -8907,19 +7718,6 @@ "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/tailwind-merge": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", @@ -8931,44 +7729,36 @@ "url": "https://github.com/sponsors/dcastil" } }, - "node_modules/tailwindcss": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", - "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", + "node_modules/tailwind-variants": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.3.1.tgz", + "integrity": "sha512-4pAvwUtM4HKBiRZftncAbpn6V9Hhwoa5Fl7O2u5zbp7Z5Cvu+/o/6+176WY3WCEES209543quG8zFIcXCsc5Jw==", "dev": true, "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.7", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" + "engines": { + "node": ">=16.9.x", + "pnpm": ">=7.x" }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" + "peerDependencies": { + "tailwind-merge": ">=3.0.0", + "tailwindcss": "*" }, - "engines": { - "node": ">=14.0.0" + "peerDependenciesMeta": { + "tailwind-merge": { + "optional": true + }, + "tailwindcss": { + "optional": true + } } }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, "node_modules/tailwindcss-animate": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", @@ -8979,6 +7769,20 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/tar": { "version": "7.5.19", "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.19.tgz", @@ -9125,29 +7929,6 @@ "dev": true, "license": "MIT" }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/tiny-async-pool": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", @@ -9296,19 +8077,6 @@ "tmp": "^0.2.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -9319,20 +8087,22 @@ "utf8-byte-length": "^1.0.1" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, "license": "0BSD" }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -9435,49 +8205,14 @@ "punycode": "^2.1.0" } }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "node_modules/use-sync-external-store": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.7.0.tgz", + "integrity": "sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A==", "dev": true, "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/utf8-byte-length": { @@ -9760,25 +8495,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 6ef75b014..e0a6c11b2 100644 --- a/package.json +++ b/package.json @@ -43,10 +43,14 @@ "checksums:release": "node scripts/write-release-checksums.mjs", "release:create": "node scripts/create-release.mjs", "test": "vitest --run", - "test:watch": "vitest" + "test:watch": "vitest", + "typecheck": "tsc --noEmit", + "test:ui": "playwright test", + "dev:ui": "vite --mode ui --host 127.0.0.1" }, "dependencies": { "@phosphor-icons/react": "^2.1.10", + "@supabase/supabase-js": "^2.116.0", "capturekit": "^1.0.13", "electron-updater": "^6.8.3", "ffmpeg-static": "^5.3.0", @@ -55,28 +59,18 @@ }, "devDependencies": { "@biomejs/biome": "2.3.13", + "@dnd-kit/core": "^6.3.1", "@electron/rebuild": "^4.2.0", "@fix-webm-duration/fix": "^1.0.1", - "@radix-ui/react-accordion": "^1.2.12", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-dropdown-menu": "^2.1.16", - "@radix-ui/react-popover": "^1.1.15", - "@radix-ui/react-select": "^2.2.6", - "@radix-ui/react-slider": "^1.3.6", - "@radix-ui/react-slot": "^1.2.3", - "@radix-ui/react-switch": "^1.2.6", - "@radix-ui/react-tabs": "^1.1.13", - "@radix-ui/react-toggle": "^1.1.10", - "@radix-ui/react-toggle-group": "^1.1.11", + "@heroui/react": "^3.2.6", + "@heroui/styles": "^3.2.6", + "@playwright/test": "^1.63.0", + "@tailwindcss/postcss": "^4.3.3", "@types/gif.js": "^0.2.5", "@types/node": "^25.0.3", - "@types/react": "^18.2.64", - "@types/react-dom": "^18.2.21", - "@uiw/color-convert": "^2.9.2", - "@uiw/react-color-block": "^2.9.2", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^4.2.1", - "autoprefixer": "^10.4.21", - "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "dnd-timeline": "^2.2.0", "electron": "^43.1.0", @@ -90,14 +84,14 @@ "pixi-filters": "^6.1.5", "pixi.js": "^8.14.0", "postcss": "^8.5.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^19.3.0", + "react-aria": "3.52.1", + "react-dom": "^19.3.0", "react-icons": "^5.5.0", "react-resizable-panels": "^3.0.6", "react-rnd": "^10.5.2", - "sonner": "^2.0.7", "tailwind-merge": "^3.3.1", - "tailwindcss": "^3.4.18", + "tailwindcss": "^4.3.3", "tailwindcss-animate": "^1.0.7", "terser": "^5.44.1", "typescript": "^5.2.2", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 000000000..a264222e3 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from "@playwright/test"; +export default defineConfig({ + testDir: "./tests/ui", + timeout: 30000, + use: { + baseURL: "http://127.0.0.1:5178", + viewport: { width: 1440, height: 1000 }, + trace: "retain-on-failure", + }, + webServer: { + env: { RECORDLY_RENDERER_ONLY: "1" }, + command: "npx vite --host 127.0.0.1 --port 5178 --strictPort", + url: "http://127.0.0.1:5178", + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/postcss.config.cjs b/postcss.config.cjs index e873f1a4f..2769da7a1 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -1,6 +1 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; +module.exports = { plugins: { "@tailwindcss/postcss": {} } }; diff --git a/services/recordly-share/LICENSE b/services/recordly-share/LICENSE new file mode 100644 index 000000000..3f323cc23 --- /dev/null +++ b/services/recordly-share/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Aritro Paul + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/services/recordly-share/worker/.dev.vars.example b/services/recordly-share/worker/.dev.vars.example new file mode 100644 index 000000000..72cfc85a4 --- /dev/null +++ b/services/recordly-share/worker/.dev.vars.example @@ -0,0 +1,17 @@ +# The shared secret Recordly uses to authenticate with this worker. +# During the Deploy to Cloudflare flow you'll be prompted to set secrets — paste +# a value here. Or set it later: Worker → Settings → Variables and Secrets → add +# a Secret named API_SECRET. +# +# Generate a strong value with: openssl rand -hex 32 +API_SECRET= +# Local integration tests only. Never enable this in production. +ALLOW_API_SECRET_UPLOADS=false + +# Use the same public Supabase project configuration as the desktop app so +# signed-in users can publish without seeing an API-secret field. +SUPABASE_URL=https://YOUR_PROJECT_REF.supabase.co +SUPABASE_PUBLISHABLE_KEY=sb_publishable_YOUR_KEY + +# Only this Supabase user may administer this single-owner deployment. +OWNER_USER_ID= diff --git a/services/recordly-share/worker/.env.example b/services/recordly-share/worker/.env.example new file mode 100644 index 000000000..941fbcd2a --- /dev/null +++ b/services/recordly-share/worker/.env.example @@ -0,0 +1,14 @@ +# Cloudflare Worker configuration +# Copy this to wrangler.toml and fill in your values + +# D1 database ID (from `npx wrangler d1 create recordly-share-db`) +D1_DATABASE_ID= + +# Server-side library administration only; never place this in the desktop app. +API_SECRET= +SUPABASE_URL= +SUPABASE_PUBLISHABLE_KEY= +ALLOW_API_SECRET_UPLOADS=false + +# Only this Supabase user may administer this single-owner deployment. +OWNER_USER_ID= diff --git a/services/recordly-share/worker/.gitignore b/services/recordly-share/worker/.gitignore new file mode 100644 index 000000000..b9bda4007 --- /dev/null +++ b/services/recordly-share/worker/.gitignore @@ -0,0 +1,10 @@ +.wrangler/ +node_modules/ +.dev.vars +web/.astro/ +videos/ + +# Ship prebuilt share-page assets so the Deploy-to-Cloudflare button (which +# clones this repo) serves them without a build step. Overrides root `dist/`. +!web/dist/ +!web/dist/** diff --git a/services/recordly-share/worker/CREATOR_PROFILE.md b/services/recordly-share/worker/CREATOR_PROFILE.md new file mode 100644 index 000000000..bd673de91 --- /dev/null +++ b/services/recordly-share/worker/CREATOR_PROFILE.md @@ -0,0 +1,9 @@ +# Public creator profile + +This single-owner share service displays an optional public creator profile on recordings. Configure the following Worker environment variables (in `.dev.vars` for local development or Cloudflare for deployment): + +- `CREATOR_NAME`: public display name (100 characters maximum) +- `CREATOR_BIO`: optional short description (200 characters maximum) +- `CREATOR_WEBSITE`: optional public HTTP(S) website + +These values are returned by the share data endpoint after the recording access checks. They apply to existing and future recordings on this service. No account email or operating-system identity is inferred. Unconfigured services display “Creator not provided”. diff --git a/services/recordly-share/worker/README.md b/services/recordly-share/worker/README.md new file mode 100644 index 000000000..a95b22266 --- /dev/null +++ b/services/recordly-share/worker/README.md @@ -0,0 +1,38 @@ +# Recordly Share + +Recordly Share is the self-hosted video publishing and review service used by Recordly. It runs as a Cloudflare Worker with R2 video storage, D1 metadata, range streaming, a responsive viewer, timestamped comments, reactions, passwords, expiration, and a private recording library. + +## Local development + +```sh +cp .dev.vars.example .dev.vars +npm install +npm --prefix web install +npm --prefix web run build +npm run dev +``` + +Set `OWNER_USER_ID` to the deployment owner’s Supabase user ID. Only that user may administer this single-owner library. Set `SUPABASE_URL` and `SUPABASE_PUBLISHABLE_KEY` in `.dev.vars` to the same public project configuration used by the desktop app. Recordly sends the signed-in user's access token when it publishes to: + +- Endpoint: `http://localhost:8787/api/upload` + +The Worker validates Supabase access tokens before accepting uploads. `API_SECRET` remains a server-side library-administration password. An API-secret upload fallback can be enabled only for isolated local tests by setting `ALLOW_API_SECRET_UPLOADS=true`; do not enable it in production. + +Anyone with a valid link can watch and leave timestamped feedback using a display name; commenting does not require an account. Per-IP rate limiting and comment-length limits remain enabled. + +## Deployment + +```sh +npm install +npm --prefix web install +npm --prefix web run build +npx wrangler secret put API_SECRET +npx wrangler secret put SUPABASE_PUBLISHABLE_KEY +npm run deploy +``` + +Set `SUPABASE_URL` as a Worker variable. The ID-less configuration provisions `recordly-share-db` and `recordly-videos` for a new deployment. Desktop builds currently upload only to localhost; production service integration is deferred. + +## Attribution + +This service is adapted from an MIT-licensed open-source project. The required original copyright and permission notice is preserved in [`../LICENSE`](../LICENSE) and Recordly's root `THIRD_PARTY_NOTICES.md`. Product-facing pages use Recordly branding; legal attribution must remain with distributed copies. diff --git a/services/recordly-share/worker/icon-64.png b/services/recordly-share/worker/icon-64.png new file mode 100644 index 000000000..fc3c7a673 Binary files /dev/null and b/services/recordly-share/worker/icon-64.png differ diff --git a/services/recordly-share/worker/migrations/0002_share_enhancements.sql b/services/recordly-share/worker/migrations/0002_share_enhancements.sql new file mode 100644 index 000000000..dcc791506 --- /dev/null +++ b/services/recordly-share/worker/migrations/0002_share_enhancements.sql @@ -0,0 +1,30 @@ +-- Migration 2: Password protection, CTA, view tracking, reactions, comments + +-- Add password and CTA columns to videos +ALTER TABLE videos ADD COLUMN password_hash TEXT; +ALTER TABLE videos ADD COLUMN cta_url TEXT; +ALTER TABLE videos ADD COLUMN cta_text TEXT; +ALTER TABLE videos ADD COLUMN last_notified_view_count INTEGER NOT NULL DEFAULT 0; + +-- Reactions table +CREATE TABLE IF NOT EXISTS reactions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + emoji TEXT NOT NULL, + client_ip TEXT NOT NULL DEFAULT '', + created_at TEXT NOT NULL DEFAULT (datetime('now')) +); +CREATE INDEX IF NOT EXISTS idx_reactions_video_id ON reactions(video_id); +CREATE INDEX IF NOT EXISTS idx_reactions_ip ON reactions(video_id, client_ip); + +-- Comments table +CREATE TABLE IF NOT EXISTS comments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + author_name TEXT NOT NULL DEFAULT 'Anonymous', + text TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) +); +CREATE INDEX IF NOT EXISTS idx_comments_video_id ON comments(video_id); diff --git a/services/recordly-share/worker/migrations/0003_chapters_speakers.sql b/services/recordly-share/worker/migrations/0003_chapters_speakers.sql new file mode 100644 index 000000000..726c0c0e6 --- /dev/null +++ b/services/recordly-share/worker/migrations/0003_chapters_speakers.sql @@ -0,0 +1,9 @@ +-- Migration: Add speaker labels, chapters, and meeting flag +ALTER TABLE transcript_segments ADD COLUMN speaker TEXT; +ALTER TABLE videos ADD COLUMN is_meeting INTEGER NOT NULL DEFAULT 0; +CREATE TABLE IF NOT EXISTS chapters ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + title TEXT NOT NULL +); diff --git a/services/recordly-share/worker/migrations/0004_security.sql b/services/recordly-share/worker/migrations/0004_security.sql new file mode 100644 index 000000000..33d3c0193 --- /dev/null +++ b/services/recordly-share/worker/migrations/0004_security.sql @@ -0,0 +1,2 @@ +-- Add client_ip tracking for comment rate limiting +ALTER TABLE comments ADD COLUMN client_ip TEXT NOT NULL DEFAULT ''; diff --git a/services/recordly-share/worker/migrations/0005_add_summary.sql b/services/recordly-share/worker/migrations/0005_add_summary.sql new file mode 100644 index 000000000..99ffa9334 --- /dev/null +++ b/services/recordly-share/worker/migrations/0005_add_summary.sql @@ -0,0 +1,2 @@ +-- Add summary column to videos +ALTER TABLE videos ADD COLUMN summary TEXT; diff --git a/services/recordly-share/worker/migrations/0006_password_salt_and_indexes.sql b/services/recordly-share/worker/migrations/0006_password_salt_and_indexes.sql new file mode 100644 index 000000000..53e94b5ac --- /dev/null +++ b/services/recordly-share/worker/migrations/0006_password_salt_and_indexes.sql @@ -0,0 +1,17 @@ +-- Migration 0006: salted share passwords, password brute-force tracking, +-- and the missing chapters lookup index. +-- Applied by CloudflareDeployService for token-based self-host deploys. +-- The hosted worker applies the same change at runtime (SCHEMA_VERSION 2). + +ALTER TABLE videos ADD COLUMN password_salt TEXT; + +CREATE INDEX IF NOT EXISTS idx_chapters_video_id ON chapters(video_id); + +CREATE TABLE IF NOT EXISTS password_attempts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL, + client_ip TEXT NOT NULL, + attempted_at TEXT NOT NULL DEFAULT (datetime('now')) +); + +CREATE INDEX IF NOT EXISTS idx_password_attempts ON password_attempts(video_id, client_ip, attempted_at); diff --git a/services/recordly-share/worker/migrations/0007_comment_accounts.sql b/services/recordly-share/worker/migrations/0007_comment_accounts.sql new file mode 100644 index 000000000..38b97c6a7 --- /dev/null +++ b/services/recordly-share/worker/migrations/0007_comment_accounts.sql @@ -0,0 +1,20 @@ +-- Require an authenticated Recordly viewer account before posting comments. + +CREATE TABLE IF NOT EXISTS comment_users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + email TEXT UNIQUE NOT NULL, + display_name TEXT NOT NULL, + password_hash TEXT NOT NULL, + password_salt TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) +); + +CREATE TABLE IF NOT EXISTS comment_sessions ( + token_hash TEXT PRIMARY KEY, + user_id INTEGER NOT NULL REFERENCES comment_users(id) ON DELETE CASCADE, + expires_at TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) +); + +CREATE INDEX IF NOT EXISTS idx_comment_sessions_user ON comment_sessions(user_id); +CREATE INDEX IF NOT EXISTS idx_comment_sessions_expiry ON comment_sessions(expires_at); diff --git a/services/recordly-share/worker/package-lock.json b/services/recordly-share/worker/package-lock.json new file mode 100644 index 000000000..ffccd9799 --- /dev/null +++ b/services/recordly-share/worker/package-lock.json @@ -0,0 +1,3914 @@ +{ + "name": "recordly-share", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "recordly-share", + "version": "1.0.0", + "devDependencies": { + "@cloudflare/vitest-pool-workers": "^0.9.12", + "vitest": "^3.2.0", + "wrangler": "^4.98.0" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.5.0.tgz", + "integrity": "sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@cloudflare/vitest-pool-workers": { + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/@cloudflare/vitest-pool-workers/-/vitest-pool-workers-0.9.14.tgz", + "integrity": "sha512-1D/1KFa32EymaYDojWcrmUyMbHJwewn/mZSxsAqXdybvKMrHVaoaqGpLoH9bgWSfbrGs4af4RrmIXMINOqc4Lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "birpc": "0.2.14", + "cjs-module-lexer": "^1.2.3", + "devalue": "^5.3.2", + "miniflare": "4.20251011.0", + "semver": "^7.7.1", + "wrangler": "4.44.0", + "zod": "^3.22.3" + }, + "peerDependencies": { + "@vitest/runner": "2.0.x - 3.2.x", + "@vitest/snapshot": "2.0.x - 3.2.x", + "vitest": "2.0.x - 3.2.x" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz", + "integrity": "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "mime": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@cloudflare/unenv-preset": { + "version": "2.7.8", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.7.8.tgz", + "integrity": "sha512-Ky929MfHh+qPhwCapYrRPwPVHtA2Ioex/DbGZyskGyNRDe9Ru3WThYZivyNVaPy5ergQSgMs9OKrM9Ajtz9F6w==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.21", + "workerd": "^1.20250927.0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/unenv": { + "version": "2.0.0-rc.21", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.21.tgz", + "integrity": "sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "exsolve": "^1.0.7", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "ufo": "^1.6.1" + } + }, + "node_modules/@cloudflare/vitest-pool-workers/node_modules/wrangler": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.44.0.tgz", + "integrity": "sha512-BLOUigckcWZ0r4rm7b5PuaTpb9KP9as0XeCRSJ8kqcNgXcKoUD3Ij8FlPvN25KybLnFnetaO0ZdfRYUPWle4qw==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.4.0", + "@cloudflare/unenv-preset": "2.7.8", + "blake3-wasm": "2.1.5", + "esbuild": "0.25.4", + "miniflare": "4.20251011.0", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.21", + "workerd": "1.20251011.0" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20251011.0" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20251011.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20251011.0.tgz", + "integrity": "sha512-0DirVP+Z82RtZLlK2B+VhLOkk+ShBqDYO/jhcRw4oVlp0TOvk3cOVZChrt3+y3NV8Y/PYgTEywzLKFSziK4wCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20251011.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20251011.0.tgz", + "integrity": "sha512-1WuFBGwZd15p4xssGN/48OE2oqokIuc51YvHvyNivyV8IYnAs3G9bJNGWth1X7iMDPe4g44pZrKhRnISS2+5dA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20251011.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20251011.0.tgz", + "integrity": "sha512-BccMiBzFlWZyFghIw2szanmYJrJGBGHomw2y/GV6pYXChFzMGZkeCEMfmCyJj29xczZXxcZmUVJxNy4eJxO8QA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20251011.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20251011.0.tgz", + "integrity": "sha512-79o/216lsbAbKEVDZYXR24ivEIE2ysDL9jvo0rDTkViLWju9dAp3CpyetglpJatbSi3uWBPKZBEOqN68zIjVsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20251011.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20251011.0.tgz", + "integrity": "sha512-RIXUQRchFdqEvaUqn1cXZXSKjpqMaSaVAkI5jNZ8XzAw/bw2bcdOVUtakrflgxDprltjFb0PTNtuss1FKtH9Jg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz", + "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.1.tgz", + "integrity": "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.1.tgz", + "integrity": "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.1.tgz", + "integrity": "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.1.tgz", + "integrity": "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.1.tgz", + "integrity": "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.1.tgz", + "integrity": "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.1.tgz", + "integrity": "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.1.tgz", + "integrity": "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.1.tgz", + "integrity": "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.1.tgz", + "integrity": "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.1.tgz", + "integrity": "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.1.tgz", + "integrity": "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.1.tgz", + "integrity": "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.1.tgz", + "integrity": "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.1.tgz", + "integrity": "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.1.tgz", + "integrity": "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.1.tgz", + "integrity": "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz", + "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.1.tgz", + "integrity": "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.1.tgz", + "integrity": "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.1.tgz", + "integrity": "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.1.tgz", + "integrity": "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.1.tgz", + "integrity": "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.1.tgz", + "integrity": "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.1.tgz", + "integrity": "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.16.tgz", + "integrity": "sha512-yNm/fYEcnpRjYduLMaddTK9XKYil6xB88+qFg79ZdZhHu1PadfoQmFW7pVTx7FZqMBNcUuThiAhxhENgtAO2/w==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/expect": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.6.tgz", + "integrity": "sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.6", + "@vitest/utils": "3.2.6", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.6.tgz", + "integrity": "sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.6", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.6.tgz", + "integrity": "sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.6.tgz", + "integrity": "sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.6", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.6.tgz", + "integrity": "sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.6", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.6.tgz", + "integrity": "sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.6.tgz", + "integrity": "sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.6", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/birpc": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.14.tgz", + "integrity": "sha512-37FHE8rqsYM5JEKCnXFyHpBCzvgHEExwVVTq+nUmloInU7l8ezD1TpOhKpS8oe1DTYFqEK27rFZVKG43oTqXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/miniflare": { + "version": "4.20251011.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20251011.0.tgz", + "integrity": "sha512-DlZ7vR5q/RE9eLsxsrXzfSZIF2f6O5k0YsFrSKhWUtdefyGtJt4sSpR6V+Af/waaZ6+zIFy9lsknHBCm49sEYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "acorn": "8.14.0", + "acorn-walk": "8.3.2", + "exit-hook": "2.2.1", + "glob-to-regexp": "0.4.1", + "sharp": "^0.33.5", + "stoppable": "1.1.0", + "undici": "7.14.0", + "workerd": "1.20251011.0", + "ws": "8.18.0", + "youch": "4.1.0-beta.10", + "zod": "3.22.3" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/miniflare/node_modules/zod": { + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz", + "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz", + "integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.61.1", + "@rollup/rollup-android-arm64": "4.61.1", + "@rollup/rollup-darwin-arm64": "4.61.1", + "@rollup/rollup-darwin-x64": "4.61.1", + "@rollup/rollup-freebsd-arm64": "4.61.1", + "@rollup/rollup-freebsd-x64": "4.61.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.61.1", + "@rollup/rollup-linux-arm-musleabihf": "4.61.1", + "@rollup/rollup-linux-arm64-gnu": "4.61.1", + "@rollup/rollup-linux-arm64-musl": "4.61.1", + "@rollup/rollup-linux-loong64-gnu": "4.61.1", + "@rollup/rollup-linux-loong64-musl": "4.61.1", + "@rollup/rollup-linux-ppc64-gnu": "4.61.1", + "@rollup/rollup-linux-ppc64-musl": "4.61.1", + "@rollup/rollup-linux-riscv64-gnu": "4.61.1", + "@rollup/rollup-linux-riscv64-musl": "4.61.1", + "@rollup/rollup-linux-s390x-gnu": "4.61.1", + "@rollup/rollup-linux-x64-gnu": "4.61.1", + "@rollup/rollup-linux-x64-musl": "4.61.1", + "@rollup/rollup-openbsd-x64": "4.61.1", + "@rollup/rollup-openharmony-arm64": "4.61.1", + "@rollup/rollup-win32-arm64-msvc": "4.61.1", + "@rollup/rollup-win32-ia32-msvc": "4.61.1", + "@rollup/rollup-win32-x64-gnu": "4.61.1", + "@rollup/rollup-win32-x64-msvc": "4.61.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.14.0.tgz", + "integrity": "sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/unenv": { + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3" + } + }, + "node_modules/vite": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz", + "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.6.tgz", + "integrity": "sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.6", + "@vitest/mocker": "3.2.6", + "@vitest/pretty-format": "^3.2.6", + "@vitest/runner": "3.2.6", + "@vitest/snapshot": "3.2.6", + "@vitest/spy": "3.2.6", + "@vitest/utils": "3.2.6", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.6", + "@vitest/ui": "3.2.6", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerd": { + "version": "1.20251011.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20251011.0.tgz", + "integrity": "sha512-Dq35TLPEJAw7BuYQMkN3p9rge34zWMU2Gnd4DSJFeVqld4+DAO2aPG7+We2dNIAyM97S8Y9BmHulbQ00E0HC7Q==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20251011.0", + "@cloudflare/workerd-darwin-arm64": "1.20251011.0", + "@cloudflare/workerd-linux-64": "1.20251011.0", + "@cloudflare/workerd-linux-arm64": "1.20251011.0", + "@cloudflare/workerd-windows-64": "1.20251011.0" + } + }, + "node_modules/wrangler": { + "version": "4.99.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.99.0.tgz", + "integrity": "sha512-i7GA2mZETTyq3ljWdEzM908FjLaMWZ1AaAHKaOJ8pFA/tonf2VqIWDyBGzKleIVBbNQxOTIY2wnbv0iaK3rC6g==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.5.0", + "@cloudflare/unenv-preset": "2.16.1", + "blake3-wasm": "2.1.5", + "esbuild": "0.27.3", + "miniflare": "4.20260609.0", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.24", + "workerd": "1.20260609.1" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=22.0.0" + }, + "optionalDependencies": { + "fsevents": "2.3.3" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20260609.1" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/wrangler/node_modules/@cloudflare/unenv-preset": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.1.tgz", + "integrity": "sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.24", + "workerd": ">1.20260305.0 <2.0.0-0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } + }, + "node_modules/wrangler/node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20260609.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260609.1.tgz", + "integrity": "sha512-AK8tYLQm+8BqQMzjZ55ZfuhfIm1eCkj+Ykxz6kWXojdACwjjU03MrwdM9fBDdgzU3upXOs4e1scOFHySlfVQjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/wrangler/node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20260609.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260609.1.tgz", + "integrity": "sha512-4kKXfr7ZHU6xQ/R9ShdSuj1A1bEouoRcHzUWdjnuMPBlRsAAVanlxAVYISotFUulLEinayOpRFbhpsfwzrpSSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/wrangler/node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20260609.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260609.1.tgz", + "integrity": "sha512-T2Ebir2OPHAvvZ0HUh5mi1lN8q30sVi4lf7LIpc28AHoWtoOmJ0jA5AJK4IYJm1MKEbBldq+QsckaHOCQFmRpQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/wrangler/node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20260609.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260609.1.tgz", + "integrity": "sha512-INfcYoSsKqEIvPL69/3RkqYoP8WUR0VEN6loWN/3tekXLoJrVOj3E5NjIetsdS8MJN6zc3st/ae4bMuWRRzoDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/wrangler/node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20260609.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260609.1.tgz", + "integrity": "sha512-EWhfxKI1aqUr7S8xuGxgmRCumEzB8iSsCIz6oEqJN+3pZuW3EWiKDGFW4EY1BmwNINLW1eO5VMGYb8Fj6FVYxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/wrangler/node_modules/miniflare": { + "version": "4.20260609.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260609.0.tgz", + "integrity": "sha512-4ZfNh9ACDa/mKKQvTSO2vigyQS2MB7dEU02KRPle4FqL7S6nek+2Fq6WGzazZbt1OORYgb4OGVLnOCx+My2NNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "sharp": "0.34.5", + "undici": "7.24.8", + "workerd": "1.20260609.1", + "ws": "8.20.1", + "youch": "4.1.0-beta.10" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/wrangler/node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/wrangler/node_modules/undici": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.8.tgz", + "integrity": "sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/wrangler/node_modules/workerd": { + "version": "1.20260609.1", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260609.1.tgz", + "integrity": "sha512-KF/Y/8f4VoXCk87NuU6RqmO0X5fdzcrxU3XzAgoPUpnH9t1ZyzRgX1O/9sJvjItxroCBTEBzKssda02Dz9i6BA==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20260609.1", + "@cloudflare/workerd-darwin-arm64": "1.20260609.1", + "@cloudflare/workerd-linux-64": "1.20260609.1", + "@cloudflare/workerd-linux-arm64": "1.20260609.1", + "@cloudflare/workerd-windows-64": "1.20260609.1" + } + }, + "node_modules/wrangler/node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/youch": { + "version": "4.1.0-beta.10", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.4", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.3" + } + }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/services/recordly-share/worker/package.json b/services/recordly-share/worker/package.json new file mode 100644 index 000000000..07049b345 --- /dev/null +++ b/services/recordly-share/worker/package.json @@ -0,0 +1,16 @@ +{ + "name": "recordly-share", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "wrangler dev --config wrangler.jsonc", + "deploy": "wrangler deploy --config wrangler.jsonc", + "db:init": "wrangler d1 execute recordly-share-db --file=./schema.sql", + "test": "vitest run" + }, + "devDependencies": { + "@cloudflare/vitest-pool-workers": "^0.9.12", + "vitest": "^3.2.0", + "wrangler": "^4.98.0" + } +} diff --git a/services/recordly-share/worker/schema.sql b/services/recordly-share/worker/schema.sql new file mode 100644 index 000000000..eed9b8a0c --- /dev/null +++ b/services/recordly-share/worker/schema.sql @@ -0,0 +1,95 @@ +-- Recordly Share — consolidated D1 schema (based on Voom, through migration 0007). +-- Keep in sync with SCHEMA_STATEMENTS in src/index.js (the runtime source of +-- truth for fresh databases). Statements are idempotent so this file is safe +-- to re-apply to an existing database; the numbered files in migrations/ +-- exist for upgrading databases created from an older schema.sql. + +CREATE TABLE IF NOT EXISTS videos ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + share_code TEXT UNIQUE NOT NULL, + title TEXT NOT NULL, + duration REAL NOT NULL DEFAULT 0, + width INTEGER NOT NULL DEFAULT 0, + height INTEGER NOT NULL DEFAULT 0, + has_webcam INTEGER NOT NULL DEFAULT 0, + file_size INTEGER NOT NULL DEFAULT 0, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + expires_at TEXT NOT NULL, + upload_completed INTEGER NOT NULL DEFAULT 0, + view_count INTEGER NOT NULL DEFAULT 0, + password_hash TEXT, + cta_url TEXT, + cta_text TEXT, + last_notified_view_count INTEGER NOT NULL DEFAULT 0, + is_meeting INTEGER NOT NULL DEFAULT 0, + summary TEXT, + password_salt TEXT +); +CREATE INDEX IF NOT EXISTS idx_videos_share_code ON videos(share_code); +CREATE INDEX IF NOT EXISTS idx_videos_expires_at ON videos(expires_at); + +CREATE TABLE IF NOT EXISTS transcript_segments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + start_time REAL NOT NULL, + end_time REAL NOT NULL, + text TEXT NOT NULL, + speaker TEXT +); +CREATE INDEX IF NOT EXISTS idx_transcript_video_id ON transcript_segments(video_id); + +CREATE TABLE IF NOT EXISTS reactions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + emoji TEXT NOT NULL, + client_ip TEXT NOT NULL DEFAULT '', + created_at TEXT NOT NULL DEFAULT (datetime('now')) +); +CREATE INDEX IF NOT EXISTS idx_reactions_video_id ON reactions(video_id); +CREATE INDEX IF NOT EXISTS idx_reactions_ip ON reactions(video_id, client_ip); + +CREATE TABLE IF NOT EXISTS comments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + author_name TEXT NOT NULL DEFAULT 'Anonymous', + text TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + client_ip TEXT NOT NULL DEFAULT '' +); +CREATE INDEX IF NOT EXISTS idx_comments_video_id ON comments(video_id); + +CREATE TABLE IF NOT EXISTS chapters ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + title TEXT NOT NULL +); +CREATE INDEX IF NOT EXISTS idx_chapters_video_id ON chapters(video_id); + +CREATE TABLE IF NOT EXISTS password_attempts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL, + client_ip TEXT NOT NULL, + attempted_at TEXT NOT NULL DEFAULT (datetime('now')) +); +CREATE INDEX IF NOT EXISTS idx_password_attempts ON password_attempts(video_id, client_ip, attempted_at); + +CREATE TABLE IF NOT EXISTS comment_users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + email TEXT UNIQUE NOT NULL, + display_name TEXT NOT NULL, + password_hash TEXT NOT NULL, + password_salt TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) +); + +CREATE TABLE IF NOT EXISTS comment_sessions ( + token_hash TEXT PRIMARY KEY, + user_id INTEGER NOT NULL REFERENCES comment_users(id) ON DELETE CASCADE, + expires_at TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) +); +CREATE INDEX IF NOT EXISTS idx_comment_sessions_user ON comment_sessions(user_id); +CREATE INDEX IF NOT EXISTS idx_comment_sessions_expiry ON comment_sessions(expires_at); diff --git a/services/recordly-share/worker/src/index.js b/services/recordly-share/worker/src/index.js new file mode 100644 index 000000000..941c4b23f --- /dev/null +++ b/services/recordly-share/worker/src/index.js @@ -0,0 +1,1582 @@ +// Adapted from Voom (MIT), Copyright (c) 2026 Aritro Paul. +// See ../LICENSE and ../../../THIRD_PARTY_NOTICES.md for attribution. + +const SHARE_CODE_CHARS = 'abcdefghjkmnpqrstuvwxyz23456789'; +const SHARE_CODE_LENGTH = 10; +const EXPIRY_DAYS = 30; + +function generateShareCode() { + const bytes = new Uint8Array(SHARE_CODE_LENGTH); + crypto.getRandomValues(bytes); + return Array.from(bytes, b => SHARE_CODE_CHARS[b % SHARE_CODE_CHARS.length]).join(''); +} + +// --- Self-bootstrap: runtime schema migration --- +// When deployed via the "Deploy to Cloudflare" button, D1 is auto-provisioned +// empty, so the worker migrates its own schema at runtime on first request. +// Authentication uses the API_SECRET set during deploy (dashboard or prompt). + +const SCHEMA_VERSION = 3; + +// Consolidated current schema (base schema.sql + migrations 0002-0007). All +// statements are idempotent, so this is safe on both fresh (button-deployed) +// and existing (token-deployed) databases. +const SCHEMA_STATEMENTS = [ + `CREATE TABLE IF NOT EXISTS videos ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + share_code TEXT UNIQUE NOT NULL, + title TEXT NOT NULL, + duration REAL NOT NULL DEFAULT 0, + width INTEGER NOT NULL DEFAULT 0, + height INTEGER NOT NULL DEFAULT 0, + has_webcam INTEGER NOT NULL DEFAULT 0, + file_size INTEGER NOT NULL DEFAULT 0, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + expires_at TEXT NOT NULL, + upload_completed INTEGER NOT NULL DEFAULT 0, + view_count INTEGER NOT NULL DEFAULT 0, + password_hash TEXT, + cta_url TEXT, + cta_text TEXT, + last_notified_view_count INTEGER NOT NULL DEFAULT 0, + is_meeting INTEGER NOT NULL DEFAULT 0, + summary TEXT, + password_salt TEXT + )`, + `CREATE INDEX IF NOT EXISTS idx_videos_share_code ON videos(share_code)`, + `CREATE INDEX IF NOT EXISTS idx_videos_expires_at ON videos(expires_at)`, + `CREATE TABLE IF NOT EXISTS transcript_segments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + start_time REAL NOT NULL, + end_time REAL NOT NULL, + text TEXT NOT NULL, + speaker TEXT + )`, + `CREATE INDEX IF NOT EXISTS idx_transcript_video_id ON transcript_segments(video_id)`, + `CREATE TABLE IF NOT EXISTS reactions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + emoji TEXT NOT NULL, + client_ip TEXT NOT NULL DEFAULT '', + created_at TEXT NOT NULL DEFAULT (datetime('now')) + )`, + `CREATE INDEX IF NOT EXISTS idx_reactions_video_id ON reactions(video_id)`, + `CREATE INDEX IF NOT EXISTS idx_reactions_ip ON reactions(video_id, client_ip)`, + `CREATE TABLE IF NOT EXISTS comments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + author_name TEXT NOT NULL DEFAULT 'Anonymous', + text TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + client_ip TEXT NOT NULL DEFAULT '' + )`, + `CREATE INDEX IF NOT EXISTS idx_comments_video_id ON comments(video_id)`, + `CREATE TABLE IF NOT EXISTS chapters ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + title TEXT NOT NULL + )`, + `CREATE INDEX IF NOT EXISTS idx_chapters_video_id ON chapters(video_id)`, + `CREATE TABLE IF NOT EXISTS password_attempts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL, + client_ip TEXT NOT NULL, + attempted_at TEXT NOT NULL DEFAULT (datetime('now')) + )`, + `CREATE INDEX IF NOT EXISTS idx_password_attempts ON password_attempts(video_id, client_ip, attempted_at)`, + `CREATE TABLE IF NOT EXISTS comment_users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + email TEXT UNIQUE NOT NULL, + display_name TEXT NOT NULL, + password_hash TEXT NOT NULL, + password_salt TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) + )`, + `CREATE TABLE IF NOT EXISTS comment_sessions ( + token_hash TEXT PRIMARY KEY, + user_id INTEGER NOT NULL REFERENCES comment_users(id) ON DELETE CASCADE, + expires_at TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) + )`, + `CREATE INDEX IF NOT EXISTS idx_comment_sessions_user ON comment_sessions(user_id)`, + `CREATE INDEX IF NOT EXISTS idx_comment_sessions_expiry ON comment_sessions(expires_at)`, +]; + +// Incremental migrations for databases that are already at an older version. +// SCHEMA_STATEMENTS only covers fresh databases (CREATE TABLE IF NOT EXISTS +// cannot add columns to existing tables), so any change that ALTERs an +// existing table MUST appear here under a bumped SCHEMA_VERSION. +const SCHEMA_MIGRATIONS = { + 2: [ + `CREATE INDEX IF NOT EXISTS idx_chapters_video_id ON chapters(video_id)`, + `ALTER TABLE videos ADD COLUMN password_salt TEXT`, + `CREATE TABLE IF NOT EXISTS password_attempts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL, + client_ip TEXT NOT NULL, + attempted_at TEXT NOT NULL DEFAULT (datetime('now')) + )`, + `CREATE INDEX IF NOT EXISTS idx_password_attempts ON password_attempts(video_id, client_ip, attempted_at)`, + ], + 3: [ + `CREATE TABLE IF NOT EXISTS comment_users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + email TEXT UNIQUE NOT NULL, + display_name TEXT NOT NULL, + password_hash TEXT NOT NULL, + password_salt TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) + )`, + `CREATE TABLE IF NOT EXISTS comment_sessions ( + token_hash TEXT PRIMARY KEY, + user_id INTEGER NOT NULL REFERENCES comment_users(id) ON DELETE CASCADE, + expires_at TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) + )`, + `CREATE INDEX IF NOT EXISTS idx_comment_sessions_user ON comment_sessions(user_id)`, + `CREATE INDEX IF NOT EXISTS idx_comment_sessions_expiry ON comment_sessions(expires_at)`, + ], +}; + +let schemaReady = false; + +// Test-only: lets the vitest suite force ensureSchema to re-run after it +// rebuilds the database into an older shape. Never called in production. +export function __resetSchemaCacheForTests() { + schemaReady = false; +} + +async function ensureSchema(env) { + if (schemaReady) return; + await env.DB.prepare(`CREATE TABLE IF NOT EXISTS _meta (key TEXT PRIMARY KEY, value TEXT)`).run(); + const row = await env.DB.prepare(`SELECT value FROM _meta WHERE key = 'schema_version'`).first(); + let current = row ? parseInt(row.value, 10) : 0; + + if (current === 0) { + // No version stamp ≠ fresh: databases created before versioning existed + // have tables but no _meta row. Treating one as fresh would skip the + // ALTERs (CREATE TABLE IF NOT EXISTS no-ops on existing tables). + const videos = await env.DB.prepare( + `SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'videos'` + ).first(); + if (videos) current = 1; + } + + if (current >= 2) { + // Repair pass: v4.1.0 stamped pre-versioning databases as current without + // running the v2 ALTERs. If anything v2 introduced is missing, rewind so + // the migration loop below re-runs (its statements tolerate re-application). + const cols = await env.DB.prepare(`PRAGMA table_info(videos)`).all(); + const attempts = await env.DB.prepare( + `SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'password_attempts'` + ).first(); + if (!(cols.results || []).some(c => c.name === 'password_salt') || !attempts) current = 1; + } + + if (current === 3) { + const commentUsers = await env.DB.prepare( + `SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'comment_users'` + ).first(); + const commentSessions = await env.DB.prepare( + `SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'comment_sessions'` + ).first(); + if (!commentUsers || !commentSessions) current = 2; + } + + if (current < SCHEMA_VERSION) { + if (current === 0) { + // Fresh database: the consolidated schema already reflects every migration. + await env.DB.batch(SCHEMA_STATEMENTS.map(sql => env.DB.prepare(sql))); + } else { + // Existing database: apply each migration step in order. ALTER TABLE + // is not idempotent, so tolerate duplicate-column errors from re-runs. + for (let v = current + 1; v <= SCHEMA_VERSION; v++) { + for (const sql of SCHEMA_MIGRATIONS[v] || []) { + try { + await env.DB.prepare(sql).run(); + } catch (e) { + if (!/duplicate column|already exists/i.test(e.message || '')) throw e; + } + } + } + } + await env.DB.prepare( + `INSERT INTO _meta (key, value) VALUES ('schema_version', ?) + ON CONFLICT(key) DO UPDATE SET value = excluded.value` + ).bind(String(SCHEMA_VERSION)).run(); + } + schemaReady = true; +} + +// Constant-time string comparison — avoids leaking match length via timing. +function timingSafeEqual(a, b) { + if (typeof a !== 'string' || typeof b !== 'string') return false; + const enc = new TextEncoder(); + const ab = enc.encode(a); + const bb = enc.encode(b); + let diff = ab.length ^ bb.length; + const len = Math.max(ab.length, bb.length); + for (let i = 0; i < len; i++) { + diff |= (ab[i % ab.length] ?? 0) ^ (bb[i % bb.length] ?? 0); + } + return diff === 0; +} + +async function sha256Hex(input) { + const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(input)); + return Array.from(new Uint8Array(digest), b => b.toString(16).padStart(2, '0')).join(''); +} + +function generateSalt() { + const bytes = new Uint8Array(16); + crypto.getRandomValues(bytes); + return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join(''); +} + +const COMMENT_SESSION_COOKIE = 'recordly_comment_session'; +const COMMENT_SESSION_SECONDS = 30 * 24 * 60 * 60; + +async function hashCommentPassword(password, salt) { + const material = await crypto.subtle.importKey( + 'raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveBits'] + ); + const bits = await crypto.subtle.deriveBits( + { + name: 'PBKDF2', + hash: 'SHA-256', + salt: new TextEncoder().encode(salt), + iterations: 210000, + }, + material, + 256, + ); + return Array.from(new Uint8Array(bits), b => b.toString(16).padStart(2, '0')).join(''); +} + +function generateSessionToken() { + const bytes = new Uint8Array(32); + crypto.getRandomValues(bytes); + return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join(''); +} + +function commentSessionCookie(request, token, maxAge = COMMENT_SESSION_SECONDS) { + const secure = new URL(request.url).protocol === 'https:' ? '; Secure' : ''; + return `${COMMENT_SESSION_COOKIE}=${token}; HttpOnly; SameSite=Lax; Path=/; Max-Age=${maxAge}${secure}`; +} + +async function commentViewer(request, env) { + const cookies = parseCookies(request.headers.get('Cookie') || ''); + const token = cookies[COMMENT_SESSION_COOKIE]; + if (!token) return null; + const tokenHash = await sha256Hex(token); + return env.DB.prepare( + `SELECT u.id, u.email, u.display_name + FROM comment_sessions s + JOIN comment_users u ON u.id = s.user_id + WHERE s.token_hash = ? AND datetime(s.expires_at) > datetime('now')` + ).bind(tokenHash).first(); +} + +async function createCommentSession(request, env, user) { + const token = generateSessionToken(); + const tokenHash = await sha256Hex(token); + const expiresAt = new Date(Date.now() + COMMENT_SESSION_SECONDS * 1000).toISOString(); + await env.DB.prepare( + 'INSERT INTO comment_sessions (token_hash, user_id, expires_at) VALUES (?, ?, ?)' + ).bind(tokenHash, user.id, expiresAt).run(); + return new Response(JSON.stringify({ + user: { email: user.email, displayName: user.display_name }, + }), { + headers: { + 'Content-Type': 'application/json', + 'Set-Cookie': commentSessionCookie(request, token), + }, + }); +} + +async function handleCommentRegister(request, env) { + const ip = request.headers.get('CF-Connecting-IP') || 'unknown'; + if (!checkLoginRateLimit(`comment:${ip}`)) return errorResponse('Too many attempts', 429); + const body = await request.json(); + const email = String(body.email || '').trim().toLowerCase(); + const displayName = String(body.displayName || '').trim(); + const password = String(body.password || ''); + if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email) || email.length > 254) { + return errorResponse('Enter a valid email address'); + } + if (displayName.length < 2 || displayName.length > 100) { + return errorResponse('Display name must be between 2 and 100 characters'); + } + if (password.length < 8 || password.length > 256) { + return errorResponse('Password must be between 8 and 256 characters'); + } + const salt = generateSalt(); + const passwordHash = await hashCommentPassword(password, salt); + try { + const result = await env.DB.prepare( + 'INSERT INTO comment_users (email, display_name, password_hash, password_salt) VALUES (?, ?, ?, ?)' + ).bind(email, displayName, passwordHash, salt).run(); + clearLoginRateLimit(`comment:${ip}`); + return createCommentSession(request, env, { id: result.meta.last_row_id, email, display_name: displayName }); + } catch (error) { + if (/unique|constraint/i.test(error.message || '')) { + return errorResponse('An account with this email already exists', 409); + } + throw error; + } +} + +async function handleCommentLogin(request, env) { + const ip = request.headers.get('CF-Connecting-IP') || 'unknown'; + if (!checkLoginRateLimit(`comment:${ip}`)) return errorResponse('Too many attempts', 429); + const body = await request.json(); + const email = String(body.email || '').trim().toLowerCase(); + const password = String(body.password || ''); + const user = await env.DB.prepare( + 'SELECT id, email, display_name, password_hash, password_salt FROM comment_users WHERE email = ?' + ).bind(email).first(); + if (!user) return errorResponse('Incorrect email or password', 401); + const actualHash = await hashCommentPassword(password, user.password_salt); + if (!timingSafeEqual(actualHash, user.password_hash)) { + return errorResponse('Incorrect email or password', 401); + } + clearLoginRateLimit(`comment:${ip}`); + return createCommentSession(request, env, user); +} + +async function handleCommentLogout(request, env) { + const cookies = parseCookies(request.headers.get('Cookie') || ''); + const token = cookies[COMMENT_SESSION_COOKIE]; + if (token) { + await env.DB.prepare('DELETE FROM comment_sessions WHERE token_hash = ?') + .bind(await sha256Hex(token)).run(); + } + return new Response(JSON.stringify({ ok: true }), { + headers: { + 'Content-Type': 'application/json', + 'Set-Cookie': commentSessionCookie(request, '', 0), + }, + }); +} + +async function isAuthorized(request, env) { + const auth = request.headers.get('Authorization'); + if (!auth) return false; + const match = /^Bearer ([^\s]+)$/.exec(auth); + if (!match) return false; + const token = match[1]; + if (token.length > 8192) return false; + if ( + env.ALLOW_API_SECRET_UPLOADS === 'true' && + env.API_SECRET && + timingSafeEqual(token, env.API_SECRET) + ) return true; + if (!env.SUPABASE_URL || !env.SUPABASE_PUBLISHABLE_KEY || !env.OWNER_USER_ID) return false; + try { + const authBase = new URL(env.SUPABASE_URL); + const isLocal = authBase.hostname === 'localhost' || authBase.hostname === '127.0.0.1'; + if (authBase.protocol !== 'https:' && !(authBase.protocol === 'http:' && isLocal)) return false; + const userUrl = new URL('/auth/v1/user', authBase); + const response = await fetch(userUrl, { + headers: { + Authorization: `Bearer ${token}`, + apikey: env.SUPABASE_PUBLISHABLE_KEY, + }, + }); + if (!response.ok) return false; + const user = await response.json(); + return typeof user.id === 'string' && timingSafeEqual(user.id, env.OWNER_USER_ID); + } catch { + return false; + } +} + +function jsonResponse(data, status = 200) { + return new Response(JSON.stringify(data), { + status, + headers: { 'Content-Type': 'application/json' }, + }); +} + +function errorResponse(message, status = 400) { + return jsonResponse({ error: message }, status); +} + +function parseCookies(cookieStr) { + const cookies = {}; + cookieStr.split(';').forEach(c => { + const [key, ...val] = c.trim().split('='); + if (key) cookies[key] = val.join('='); + }); + return cookies; +} + +async function generateAuthToken(shareCode, expiresAt, apiSecret) { + const encoder = new TextEncoder(); + const key = await crypto.subtle.importKey( + 'raw', encoder.encode(apiSecret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'] + ); + const sig = await crypto.subtle.sign('HMAC', key, encoder.encode(shareCode + expiresAt)); + return Array.from(new Uint8Array(sig), b => b.toString(16).padStart(2, '0')).join(''); +} + +async function verifyPasswordAuth(request, env, shareCode, video) { + if (!video.password_hash) return true; + const cookies = parseCookies(request.headers.get('Cookie') || ''); + const authToken = cookies[`voom_auth_${shareCode}`]; + if (!authToken) return false; + const expected = await generateAuthToken(shareCode, video.expires_at, env.API_SECRET); + return timingSafeEqual(authToken, expected); +} + +// --- Dashboard session helpers --- + +function dashboardPassword(env) { + return env.DASHBOARD_PASSWORD || env.API_SECRET; +} + +async function expectedSessionToken(env) { + const password = dashboardPassword(env); + const encoder = new TextEncoder(); + const key = await crypto.subtle.importKey( + 'raw', encoder.encode(password), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'] + ); + const sig = await crypto.subtle.sign('HMAC', key, encoder.encode('voom-dashboard-v1')); + return Array.from(new Uint8Array(sig), b => b.toString(16).padStart(2, '0')).join(''); +} + +async function isDashboardAuthed(request, env) { + return (await isAuthorized(request, env)) || dashboardCookieAuthed(request, env); +} + +async function dashboardCookieAuthed(request, env) { + const cookies = parseCookies(request.headers.get('Cookie') || ''); + const sessionToken = cookies['voom_session']; + if (!sessionToken) return false; + return timingSafeEqual(sessionToken, await expectedSessionToken(env)); +} + +// best-effort, per-isolate login rate limiter (real protection is the password's entropy) +const _loginAttempts = new Map(); + +function checkLoginRateLimit(ip) { + const now = Date.now(); + const entry = _loginAttempts.get(ip); + if (entry && now < entry.resetAt) { + if (entry.count >= 10) return false; + entry.count++; + } else { + _loginAttempts.set(ip, { count: 1, resetAt: now + 5 * 60 * 1000 }); + } + return true; +} + +function clearLoginRateLimit(ip) { + _loginAttempts.delete(ip); +} + +function formatDuration(seconds) { + const h = Math.floor(seconds / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = Math.floor(seconds % 60); + if (h > 0) return `${h}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`; + return `${m}:${String(s).padStart(2, '0')}`; +} + +function formatDate(isoString) { + const d = new Date(isoString + 'Z'); + return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }); +} + +function formatVTTTime(seconds) { + const h = Math.floor(seconds / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = seconds % 60; + const ms = Math.floor((s % 1) * 1000); + return `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}:${String(Math.floor(s)).padStart(2, '0')}.${String(ms).padStart(3, '0')}`; +} + +function escapeHTML(str) { + return str.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); +} + +function formatTimestamp(seconds) { + const m = Math.floor(seconds / 60); + const s = Math.floor(seconds % 60); + return `${m}:${String(s).padStart(2, '0')}`; +} + +// --- Main Router --- + +export default { + async fetch(request, env) { + try { + return await handleRequest(request, env); + } catch (e) { + // D1/R2 transient failures and bugs land here instead of surfacing as + // opaque Workers runtime errors. Keep the response app-shaped (JSON). + console.error('unhandled error', request.method, new URL(request.url).pathname, e.message, e.stack); + return errorResponse('Internal error', 500); + } + }, + + async scheduled(event, env) { + try { + await ensureSchema(env); + await cleanupExpired(env); + } catch (e) { + console.error('cron cleanup failed', e.message, e.stack); + } + }, +}; + +async function handleRequest(request, env) { + const url = new URL(request.url); + const path = url.pathname; + + await ensureSchema(env); + + if (path === '/auth/session' && request.method === 'GET') { + const viewer = await commentViewer(request, env); + return jsonResponse({ + user: viewer ? { email: viewer.email, displayName: viewer.display_name } : null, + }); + } + if (path === '/auth/register' && request.method === 'POST') { + return handleCommentRegister(request, env); + } + if (path === '/auth/login' && request.method === 'POST') { + return handleCommentLogin(request, env); + } + if (path === '/auth/logout' && request.method === 'POST') { + return handleCommentLogout(request, env); + } + + // Library login (public — no bearer required; form POST) + if (path === '/library/login' && request.method === 'POST') { + const ip = request.headers.get('CF-Connecting-IP') || 'unknown'; + if (!checkLoginRateLimit(ip)) { + return new Response('Too many attempts — try again later', { status: 429 }); + } + const form = await request.formData(); + const password = form.get('password') || ''; + if (timingSafeEqual(password, dashboardPassword(env))) { + clearLoginRateLimit(ip); + const token = await expectedSessionToken(env); + return new Response(null, { + status: 302, + headers: { + 'Location': '/library', + 'Set-Cookie': `voom_session=${token}; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=604800`, + }, + }); + } + return new Response(null, { status: 302, headers: { 'Location': '/library/login?error=1' } }); + } + + // Library logout + if (path === '/library/logout' && request.method === 'GET') { + return new Response(null, { + status: 302, + headers: { + 'Location': '/library/login', + 'Set-Cookie': 'voom_session=; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=0', + }, + }); + } + + // Library dashboard (auth-gated) + // Internal asset is /lib.html (not /library.html) so the ASSETS binding + // does not auto-serve it before the worker runs (no run_worker_first needed). + if (path === '/library' && request.method === 'GET') { + if (!(await isDashboardAuthed(request, env))) { + return new Response(null, { status: 302, headers: { 'Location': '/library/login' } }); + } + return env.ASSETS.fetch(new Request(new URL('/lib', url), request)); + } + + // Library login page (public) + if (path === '/library/login' && request.method === 'GET') { + return env.ASSETS.fetch(new Request(new URL('/lib-login', url), request)); + } + + // API routes (authenticated) + if (path.startsWith('/api/')) { + if (request.method === 'OPTIONS') { + return new Response(null, { + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', + 'Access-Control-Allow-Headers': 'Authorization, Content-Type', + }, + }); + } + + if (!(await isAuthorized(request, env)) && !(await dashboardCookieAuthed(request, env))) { + return errorResponse('Unauthorized', 401); + } + + // Connection check used by the desktop app to validate a worker URL + secret. + if (path === '/api/health' && request.method === 'GET') { + return jsonResponse({ ok: true, app: 'recordly' }); + } + + if (path === '/api/videos' && request.method === 'GET') { + return handleListVideos(env); + } + + if (path === '/api/upload' && request.method === 'POST') { + return handleUpload(request, env); + } + + const uploadDataMatch = path.match(/^\/api\/upload-data\/([a-z0-9]+)$/); + if (uploadDataMatch && request.method === 'PUT') { + return handleUploadData(request, env, uploadDataMatch[1]); + } + + const thumbnailMatch = path.match(/^\/api\/upload-thumbnail\/([a-z0-9]+)$/); + if (thumbnailMatch && request.method === 'PUT') { + return handleUploadThumbnail(request, env, thumbnailMatch[1]); + } + + const multipartStartMatch = path.match(/^\/api\/upload-multipart\/([a-z0-9]+)$/); + if (multipartStartMatch && request.method === 'POST') { + return handleMultipartStart(request, env, multipartStartMatch[1]); + } + + const multipartPartMatch = path.match(/^\/api\/upload-part\/([a-z0-9]+)\/(.+?)\/(\d+)$/); + if (multipartPartMatch && request.method === 'PUT') { + const multipartUploadId = decodeUploadId(multipartPartMatch[2]); + if (!multipartUploadId) return errorResponse('Invalid multipart upload ID'); + return handleMultipartPart(request, env, multipartPartMatch[1], multipartUploadId, parseInt(multipartPartMatch[3], 10)); + } + + const multipartCompleteMatch = path.match(/^\/api\/upload-complete\/([a-z0-9]+)\/(.+)$/); + if (multipartCompleteMatch && request.method === 'POST') { + const multipartUploadId = decodeUploadId(multipartCompleteMatch[2]); + if (!multipartUploadId) return errorResponse('Invalid multipart upload ID'); + return handleMultipartComplete(request, env, multipartCompleteMatch[1], multipartUploadId); + } + + const multipartAbortMatch = path.match(/^\/api\/upload-abort\/([a-z0-9]+)\/(.+)$/); + if (multipartAbortMatch && request.method === 'POST') { + const multipartUploadId = decodeUploadId(multipartAbortMatch[2]); + if (!multipartUploadId) return errorResponse('Invalid multipart upload ID'); + return handleMultipartAbort(request, env, multipartAbortMatch[1], multipartUploadId); + } + + const metadataMatch = path.match(/^\/api\/metadata\/([a-z0-9]+)$/); + if (metadataMatch && request.method === 'POST') { + return handleMetadata(request, env, metadataMatch[1]); + } + + const renewMatch = path.match(/^\/api\/renew\/([a-z0-9]+)$/); + if (renewMatch && request.method === 'POST') { + return handleRenew(env, renewMatch[1]); + } + + const deleteMatch = path.match(/^\/api\/delete\/([a-z0-9]+)$/); + if (deleteMatch && request.method === 'DELETE') { + return handleDelete(env, deleteMatch[1]); + } + + if (path === '/api/check-views' && request.method === 'POST') { + return handleCheckViews(request, env); + } + + return errorResponse('Not found', 404); + } + + // CORS preflight for public endpoints + if (request.method === 'OPTIONS') { + return new Response(null, { + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', + 'Access-Control-Allow-Headers': 'Content-Type', + }, + }); + } + + // Password verification (public) + const verifyMatch = path.match(/^\/s\/([a-z0-9]+)\/verify-password$/); + if (verifyMatch && request.method === 'POST') { + return handleVerifyPassword(request, env, verifyMatch[1]); + } + + // Share data endpoint (public, for SPA) + const dataMatch = path.match(/^\/s\/([a-z0-9]+)\/data$/); + if (dataMatch && request.method === 'GET') { + return handleShareData(request, env, dataMatch[1]); + } + + // Reactions (public) + const reactMatch = path.match(/^\/s\/([a-z0-9]+)\/react$/); + if (reactMatch && request.method === 'POST') { + return handleReact(request, env, reactMatch[1]); + } + const reactGetMatch = path.match(/^\/s\/([a-z0-9]+)\/reactions$/); + if (reactGetMatch && request.method === 'GET') { + return handleGetReactions(request, env, reactGetMatch[1]); + } + + // Comments (public) + const commentMatch = path.match(/^\/s\/([a-z0-9]+)\/comment$/); + if (commentMatch && request.method === 'POST') { + return handleComment(request, env, commentMatch[1]); + } + const commentGetMatch = path.match(/^\/s\/([a-z0-9]+)\/comments$/); + if (commentGetMatch && request.method === 'GET') { + return handleGetComments(request, env, commentGetMatch[1]); + } + + // VTT captions + const vttMatch = path.match(/^\/vtt\/([a-z0-9]+)$/); + if (vttMatch && request.method === 'GET') { + return handleVTT(request, env, vttMatch[1]); + } + + // Share page — serve Astro SPA or OG for bots + const shareMatch = path.match(/^\/s\/([a-z0-9]+)$/); + if (shareMatch && request.method === 'GET') { + const shareCode = shareMatch[1]; + const ua = request.headers.get('User-Agent') || ''; + if (/bot|crawl|spider|facebook|twitter|slack|discord|telegram|whatsapp|linkedin/i.test(ua)) { + return handleOGPage(request, env, shareCode); + } + return env.ASSETS.fetch(new Request(new URL('/share', url), request)); + } + + // Video streaming + const videoMatch = path.match(/^\/v\/([a-z0-9]+)$/); + if (videoMatch && request.method === 'GET') { + return handleVideoStream(request, env, videoMatch[1]); + } + + // OG image + const ogMatch = path.match(/^\/og\/([a-z0-9]+)$/); + if (ogMatch && request.method === 'GET') { + return handleOGImage(env, ogMatch[1]); + } + + // Embed player — serve Astro embed page + const embedMatch = path.match(/^\/embed\/([a-z0-9]+)$/); + if (embedMatch && request.method === 'GET') { + return env.ASSETS.fetch(new Request(new URL('/embed', url), request)); + } + + // Thumbnail (high-res poster) — gated like the OG image: the poster frame + // of a password-protected or expired video may itself be sensitive. + const thumbMatch = path.match(/^\/thumb\/([a-z0-9]+)$/); + if (thumbMatch && request.method === 'GET') { + const video = await env.DB.prepare( + "SELECT password_hash, expires_at FROM videos WHERE share_code = ? AND datetime(expires_at) > datetime('now')" + ).bind(thumbMatch[1]).first(); + if (!video) return new Response('Not found', { status: 404 }); + if (!(await verifyPasswordAuth(request, env, thumbMatch[1], video))) { + return new Response('Not found', { status: 404 }); + } + const thumb = await env.VIDEOS_BUCKET.get(`thumbnails/${thumbMatch[1]}.jpg`); + if (thumb) { + return new Response(thumb.body, { + // private: the unlock cookie gates access — a shared cache must not + // serve a protected poster to other clients. + headers: { 'Content-Type': 'image/jpeg', 'Cache-Control': video.password_hash ? 'private, max-age=3600' : 'public, max-age=86400' }, + }); + } + return new Response('Not found', { status: 404 }); + } + + // Static assets from R2 + if (path === '/icon-64.png' && request.method === 'GET') { + const obj = await env.VIDEOS_BUCKET.get('static/icon-64.png'); + if (obj) { + return new Response(obj.body, { + headers: { 'Content-Type': 'image/png', 'Cache-Control': 'public, max-age=604800' }, + }); + } + } + + if (path === '/') { + return new Response('Recordly Share', { status: 200 }); + } + + // Fall through to static assets + return env.ASSETS.fetch(request); +} + +// --- API Handlers --- + +function finiteNonnegative(value) { + const number = Number(value); + return Number.isFinite(number) && number >= 0 ? number : 0; +} + +async function handleUpload(request, env) { + const body = await request.json(); + const { title, duration, width, height, hasWebcam, fileSize, password_hash, cta_url, cta_text } = body; + + if (!title) return errorResponse('title is required'); + + // CTA links render as on the share page — only allow web URLs so a + // stored javascript:/data: URL can never reach that sink. + if (cta_url && !/^https?:\/\//i.test(cta_url)) { + return errorResponse('cta_url must be an http(s) URL'); + } + + const shareCode = generateShareCode(); + const expiresAt = new Date(Date.now() + EXPIRY_DAYS * 24 * 60 * 60 * 1000).toISOString(); + + // Store password hashes salted: hash = SHA256(salt + clientHash). The client + // sends SHA256(password) so the raw password never leaves the user's machine; + // salting server-side makes a leaked D1 dump useless against rainbow tables. + let storedHash = null; + let salt = null; + if (password_hash) { + salt = generateSalt(); + storedHash = await sha256Hex(salt + password_hash); + } + + await env.DB.prepare( + `INSERT INTO videos (share_code, title, duration, width, height, has_webcam, file_size, expires_at, password_hash, password_salt, cta_url, cta_text) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` + ) + .bind(shareCode, title, finiteNonnegative(duration), finiteNonnegative(width), finiteNonnegative(height), hasWebcam ? 1 : 0, finiteNonnegative(fileSize), expiresAt, storedHash, salt, cta_url || null, cta_text || null) + .run(); + + const baseUrl = new URL(request.url).origin; + + return jsonResponse({ + shareCode, + uploadURL: `${baseUrl}/api/upload-data/${shareCode}`, + shareURL: `${baseUrl}/s/${shareCode}`, + expiresAt, + }); +} + +async function handleUploadData(request, env, shareCode) { + const video = await env.DB.prepare('SELECT id FROM videos WHERE share_code = ?').bind(shareCode).first(); + if (!video) return errorResponse('Video not found', 404); + + const contentType = request.headers.get('Content-Type') || 'video/mp4'; + + await env.VIDEOS_BUCKET.put(`videos/${shareCode}.mp4`, request.body, { + httpMetadata: { contentType }, + }); + + return jsonResponse({ ok: true }); +} + +async function handleUploadThumbnail(request, env, shareCode) { + const video = await env.DB.prepare('SELECT id FROM videos WHERE share_code = ?').bind(shareCode).first(); + if (!video) return errorResponse('Video not found', 404); + + const contentType = request.headers.get('Content-Type') || 'image/jpeg'; + + await env.VIDEOS_BUCKET.put(`thumbnails/${shareCode}.jpg`, request.body, { + httpMetadata: { contentType }, + }); + + return jsonResponse({ ok: true }); +} + +async function handleMultipartStart(request, env, shareCode) { + const video = await env.DB.prepare('SELECT id FROM videos WHERE share_code = ?').bind(shareCode).first(); + if (!video) return errorResponse('Video not found', 404); + + const key = `videos/${shareCode}.mp4`; + const multipartUpload = await env.VIDEOS_BUCKET.createMultipartUpload(key, { + httpMetadata: { contentType: 'video/mp4' }, + }); + + return jsonResponse({ uploadId: multipartUpload.uploadId }); +} + +function decodeUploadId(value) { + try { + const decoded = decodeURIComponent(value); + return decoded && decoded.length <= 2048 ? decoded : null; + } catch { + return null; + } +} + +async function handleMultipartPart(request, env, shareCode, uploadId, partNumber) { + const video = await env.DB.prepare('SELECT id FROM videos WHERE share_code = ?').bind(shareCode).first(); + if (!video) return errorResponse('Video not found', 404); + if (!Number.isInteger(partNumber) || partNumber < 1 || partNumber > 10000) { + return errorResponse('Invalid multipart part number'); + } + + const key = `videos/${shareCode}.mp4`; + const multipartUpload = env.VIDEOS_BUCKET.resumeMultipartUpload(key, uploadId); + + const part = await multipartUpload.uploadPart(partNumber, request.body); + + return jsonResponse({ partNumber: part.partNumber, etag: part.etag }); +} + +async function handleMultipartAbort(request, env, shareCode, uploadId) { + const key = `videos/${shareCode}.mp4`; + try { + const multipartUpload = env.VIDEOS_BUCKET.resumeMultipartUpload(key, uploadId); + await multipartUpload.abort(); + } catch (_e) { + // Ignore errors — upload may already be completed or expired + } + return jsonResponse({ ok: true }); +} + +async function handleMultipartComplete(request, env, shareCode, uploadId) { + const video = await env.DB.prepare('SELECT id FROM videos WHERE share_code = ?').bind(shareCode).first(); + if (!video) return errorResponse('Video not found', 404); + + const key = `videos/${shareCode}.mp4`; + const multipartUpload = env.VIDEOS_BUCKET.resumeMultipartUpload(key, uploadId); + + const body = await request.json(); + const parts = body.parts; // [{ partNumber, etag }, ...] + if (!Array.isArray(parts) || parts.length === 0 || parts.length > 10000) { + return errorResponse('Invalid multipart parts'); + } + if (parts.some(part => + !part || + !Number.isInteger(part.partNumber) || + part.partNumber < 1 || + part.partNumber > 10000 || + typeof part.etag !== 'string' || + !part.etag + )) { + return errorResponse('Invalid multipart parts'); + } + + await multipartUpload.complete(parts); + + return jsonResponse({ ok: true }); +} + +async function handleMetadata(request, env, shareCode) { + const video = await env.DB.prepare('SELECT id FROM videos WHERE share_code = ?').bind(shareCode).first(); + if (!video) return errorResponse('Video not found', 404); + + const body = await request.json(); + const { segments, title, summary, chapters, isMeeting } = body; + + // Chunk inserts so a multi-hour transcript can't exceed D1 batch limits. + const BATCH_CHUNK = 100; + if (segments && segments.length > 0) { + const stmt = env.DB.prepare( + 'INSERT INTO transcript_segments (video_id, start_time, end_time, text, speaker) VALUES (?, ?, ?, ?, ?)' + ); + const batch = segments.map(seg => stmt.bind(video.id, seg.startTime, seg.endTime, seg.text, seg.speaker || null)); + for (let i = 0; i < batch.length; i += BATCH_CHUNK) { + await env.DB.batch(batch.slice(i, i + BATCH_CHUNK)); + } + } + + if (chapters && chapters.length > 0) { + const stmt = env.DB.prepare( + 'INSERT INTO chapters (video_id, timestamp, title) VALUES (?, ?, ?)' + ); + const batch = chapters.map(ch => stmt.bind(video.id, ch.timestamp, ch.title)); + for (let i = 0; i < batch.length; i += BATCH_CHUNK) { + await env.DB.batch(batch.slice(i, i + BATCH_CHUNK)); + } + } + + // Update title, summary, is_meeting, and mark upload complete + const updateFields = ['upload_completed = 1']; + const updateBinds = []; + if (title) { updateFields.push('title = ?'); updateBinds.push(title); } + if (summary !== undefined) { updateFields.push('summary = ?'); updateBinds.push(summary || null); } + if (isMeeting !== undefined) { updateFields.push('is_meeting = ?'); updateBinds.push(isMeeting ? 1 : 0); } + updateBinds.push(shareCode); + await env.DB.prepare( + `UPDATE videos SET ${updateFields.join(', ')} WHERE share_code = ?` + ).bind(...updateBinds).run(); + + return jsonResponse({ ok: true }); +} + +async function handleRenew(env, shareCode) { + const newExpiry = new Date(Date.now() + EXPIRY_DAYS * 24 * 60 * 60 * 1000).toISOString(); + + const result = await env.DB.prepare('UPDATE videos SET expires_at = ? WHERE share_code = ?') + .bind(newExpiry, shareCode) + .run(); + + if (result.meta.changes === 0) return errorResponse('Video not found', 404); + + return jsonResponse({ expiresAt: newExpiry }); +} + +async function handleDelete(env, shareCode) { + const video = await env.DB.prepare('SELECT id FROM videos WHERE share_code = ?').bind(shareCode).first(); + if (!video) return errorResponse('Video not found', 404); + + await Promise.all([ + env.VIDEOS_BUCKET.delete(`videos/${shareCode}.mp4`), + env.VIDEOS_BUCKET.delete(`thumbnails/${shareCode}.jpg`), + ]); + await env.DB.batch(deleteVideoStatements(env, video.id)); + + return jsonResponse({ ok: true }); +} + +// One round-trip delete of a video and all child rows. Explicit child deletes +// rather than relying on ON DELETE CASCADE: legacy self-host databases were +// created from a base schema without cascade on every table. +function deleteVideoStatements(env, videoId) { + return [ + env.DB.prepare('DELETE FROM chapters WHERE video_id = ?').bind(videoId), + env.DB.prepare('DELETE FROM reactions WHERE video_id = ?').bind(videoId), + env.DB.prepare('DELETE FROM comments WHERE video_id = ?').bind(videoId), + env.DB.prepare('DELETE FROM transcript_segments WHERE video_id = ?').bind(videoId), + env.DB.prepare('DELETE FROM password_attempts WHERE video_id = ?').bind(videoId), + env.DB.prepare('DELETE FROM videos WHERE id = ?').bind(videoId), + ]; +} + +// --- Video Streaming --- + +async function handleVideoStream(request, env, shareCode) { + const video = await env.DB.prepare( + "SELECT * FROM videos WHERE share_code = ? AND upload_completed = 1 AND datetime(expires_at) > datetime('now')" + ) + .bind(shareCode) + .first(); + + if (!video) return new Response('Not found', { status: 404 }); + + // Password protection check for video stream + if (video.password_hash) { + const authed = await verifyPasswordAuth(request, env, shareCode, video); + if (!authed) return new Response('Unauthorized', { status: 401 }); + } + + const key = `videos/${shareCode}.mp4`; + const rangeHeader = request.headers.get('Range'); + + let object; + if (rangeHeader) { + const match = rangeHeader.match(/bytes=(\d*)-(\d*)/); + if (match && (match[1] || match[2])) { + const suffix = !match[1]; // "bytes=-N" — last N bytes + let r2Range; + if (suffix) { + r2Range = { suffix: parseInt(match[2], 10) }; + } else { + const start = parseInt(match[1], 10); + const end = match[2] ? parseInt(match[2], 10) : undefined; + r2Range = { offset: start, length: end !== undefined ? end - start + 1 : undefined }; + } + + try { + object = await env.VIDEOS_BUCKET.get(key, { range: r2Range }); + } catch (_e) { + // R2 throws on an unsatisfiable range (e.g. offset past end of object). + return new Response('Range not satisfiable', { status: 416 }); + } + + if (!object) return new Response('Not found', { status: 404 }); + + const totalSize = object.size; // R2Object.size is the full stored object size + const start = suffix ? Math.max(0, totalSize - r2Range.suffix) : r2Range.offset; + const actualEnd = !suffix && r2Range.length !== undefined ? start + r2Range.length - 1 : totalSize - 1; + + return new Response(object.body, { + status: 206, + headers: { + 'Content-Type': 'video/mp4', + 'Content-Range': `bytes ${start}-${actualEnd}/${totalSize}`, + 'Content-Length': String(actualEnd - start + 1), + 'Accept-Ranges': 'bytes', + 'Cache-Control': video.password_hash ? 'private, no-store' : 'public, max-age=3600', + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Expose-Headers': 'Content-Range, Content-Length, Accept-Ranges', + }, + }); + } + } + + object = await env.VIDEOS_BUCKET.get(key); + if (!object) return new Response('Not found', { status: 404 }); + + return new Response(object.body, { + status: 200, + headers: { + 'Content-Type': 'video/mp4', + 'Content-Length': String(object.size), + 'Accept-Ranges': 'bytes', + 'Cache-Control': video.password_hash ? 'private, no-store' : 'public, max-age=3600', + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Expose-Headers': 'Content-Range, Content-Length, Accept-Ranges', + }, + }); +} + +// --- VTT Captions --- + +async function handleVTT(request, env, shareCode) { + const video = await env.DB.prepare( + "SELECT * FROM videos WHERE share_code = ? AND upload_completed = 1 AND datetime(expires_at) > datetime('now')" + ).bind(shareCode).first(); + + if (!video) return new Response('Not found', { status: 404 }); + + // Password protection check + if (video.password_hash) { + const authed = await verifyPasswordAuth(request, env, shareCode, video); + if (!authed) return new Response('Unauthorized', { status: 401 }); + } + + const segments = await env.DB.prepare( + 'SELECT start_time, end_time, text, speaker FROM transcript_segments WHERE video_id = ? ORDER BY start_time' + ).bind(video.id).all(); + + let vtt = 'WEBVTT\n\n'; + (segments.results || []).forEach((seg, i) => { + const start = formatVTTTime(seg.start_time); + const end = formatVTTTime(seg.end_time); + const speaker = seg.speaker ? `` : ''; + vtt += `${i + 1}\n${start} --> ${end}\n${speaker}${seg.text}\n\n`; + }); + + return new Response(vtt, { + headers: { + 'Content-Type': 'text/vtt; charset=utf-8', + 'Cache-Control': video.password_hash ? 'private, no-store' : 'public, max-age=3600', + 'Access-Control-Allow-Origin': '*', + }, + }); +} + +// --- Share Data (JSON endpoint for SPA) --- + +async function handleShareData(request, env, shareCode) { + const video = await env.DB.prepare( + "SELECT * FROM videos WHERE share_code = ? AND upload_completed = 1" + ).bind(shareCode).first(); + + if (!video) return jsonResponse({ expired: true }, 404); + + const isExpired = new Date(video.expires_at + 'Z') < new Date(); + if (isExpired) return jsonResponse({ expired: true }, 404); + + if (video.password_hash) { + const authed = await verifyPasswordAuth(request, env, shareCode, video); + if (!authed) { + return jsonResponse({ password_protected: true, title: video.title }, 401); + } + } + + // View-count bump and the two reads are independent — run them together. + const [, segments, chapters] = await Promise.all([ + env.DB.prepare('UPDATE videos SET view_count = view_count + 1 WHERE id = ?').bind(video.id).run(), + env.DB.prepare( + 'SELECT start_time, end_time, text, speaker FROM transcript_segments WHERE video_id = ? ORDER BY start_time' + ).bind(video.id).all(), + env.DB.prepare( + 'SELECT timestamp, title FROM chapters WHERE video_id = ? ORDER BY timestamp' + ).bind(video.id).all(), + ]); + + return jsonResponse({ + video: { + title: video.title, + duration: video.duration, + width: video.width, + height: video.height, + summary: video.summary, + has_webcam: video.has_webcam, + cta_url: video.cta_url, + cta_text: video.cta_text, + created_at: video.created_at, + view_count: (video.view_count || 0) + 1, + is_meeting: video.is_meeting, + }, + segments: (segments.results || []), + chapters: (chapters.results || []), + shareCode, + creator: typeof env.CREATOR_NAME === 'string' && env.CREATOR_NAME.trim() ? { + name: env.CREATOR_NAME.trim().slice(0, 100), + bio: typeof env.CREATOR_BIO === 'string' ? env.CREATOR_BIO.trim().slice(0, 200) : null, + website: typeof env.CREATOR_WEBSITE === 'string' && /^https?:\/\//i.test(env.CREATOR_WEBSITE) ? env.CREATOR_WEBSITE : null, + } : null, + }); +} + +// --- OG Page (bot-only, minimal HTML with meta tags) --- + +async function handleOGPage(request, env, shareCode) { + const video = await env.DB.prepare( + "SELECT * FROM videos WHERE share_code = ? AND upload_completed = 1" + ).bind(shareCode).first(); + + if (!video) return new Response('Not found', { status: 404 }); + + const isExpired = new Date(video.expires_at + 'Z') < new Date(); + if (isExpired) return new Response('Not found', { status: 404 }); + + const baseUrl = new URL(request.url).origin; + + // Don't leak title/summary/thumbnail of password-protected videos to + // crawlers — the OG path has no way to present the password gate. + if (video.password_hash) { + const lockedHtml = ` + + + +Protected video — Recordly + + + + + + +

This recording is password protected.

+`; + return new Response(lockedHtml, { + headers: { 'Content-Type': 'text/html; charset=utf-8', 'Cache-Control': 'public, max-age=3600' }, + }); + } + + const desc = video.summary ? escapeHTML(video.summary) : `${formatTimestamp(video.duration)} screen recording`; + + const html = ` + + + +${escapeHTML(video.title)} — Recordly + + + + + + + + + + + + + + + + + + + + + + + +

${escapeHTML(video.title)}

+ +`; + + return new Response(html, { + headers: { 'Content-Type': 'text/html; charset=utf-8', 'Cache-Control': 'public, max-age=3600' }, + }); +} + +// --- Cron Cleanup --- + +async function cleanupExpired(env) { + const expired = await env.DB.prepare( + "SELECT id, share_code FROM videos WHERE datetime(expires_at) < datetime('now')" + ).all(); + + for (const video of expired.results || []) { + await Promise.all([ + env.VIDEOS_BUCKET.delete(`videos/${video.share_code}.mp4`), + env.VIDEOS_BUCKET.delete(`thumbnails/${video.share_code}.jpg`), + ]); + await env.DB.batch(deleteVideoStatements(env, video.id)); + } + + // Drop stale password rate-limit rows so the table can't grow unboundedly. + await env.DB.prepare( + "DELETE FROM password_attempts WHERE datetime(attempted_at) < datetime('now', '-1 day')" + ).run(); + await env.DB.prepare( + "DELETE FROM comment_sessions WHERE datetime(expires_at) < datetime('now')" + ).run(); +} + +// --- Password Verification --- + +async function handleVerifyPassword(request, env, shareCode) { + const video = await env.DB.prepare( + "SELECT * FROM videos WHERE share_code = ? AND upload_completed = 1 AND datetime(expires_at) > datetime('now')" + ).bind(shareCode).first(); + + if (!video || !video.password_hash) return errorResponse('Not found', 404); + + // Brute-force protection: 10 attempts per IP per video per 5 minutes. + const clientIP = request.headers.get('CF-Connecting-IP') || 'unknown'; + const recent = await env.DB.prepare( + "SELECT COUNT(*) as cnt FROM password_attempts WHERE video_id = ? AND client_ip = ? AND datetime(attempted_at) > datetime('now', '-5 minutes')" + ).bind(video.id, clientIP).first(); + if (recent && recent.cnt >= 10) return errorResponse('Too many attempts — try again later', 429); + + const body = await request.json(); + const password = body.password || ''; + + // The browser sends the raw password (HTTPS); the app stored it as a salted + // hash of SHA256(password). Legacy rows (pre-salt) hold bare SHA256(password). + const clientHash = await sha256Hex(password); + let matches; + if (video.password_salt) { + matches = timingSafeEqual(await sha256Hex(video.password_salt + clientHash), video.password_hash); + } else { + matches = timingSafeEqual(clientHash, video.password_hash); + // Lazy upgrade: re-store the legacy unsalted hash as salted on success. + if (matches) { + const salt = generateSalt(); + const upgraded = await sha256Hex(salt + clientHash); + await env.DB.prepare('UPDATE videos SET password_hash = ?, password_salt = ? WHERE id = ?') + .bind(upgraded, salt, video.id).run(); + } + } + + if (!matches) { + await env.DB.prepare( + 'INSERT INTO password_attempts (video_id, client_ip) VALUES (?, ?)' + ).bind(video.id, clientIP).run(); + return jsonResponse({ error: 'Incorrect password' }, 403); + } + + // Issue an HMAC session token (never the stored hash). + const authToken = await generateAuthToken(shareCode, video.expires_at, env.API_SECRET); + const expires = new Date(video.expires_at + 'Z'); + + return new Response(JSON.stringify({ ok: true }), { + status: 200, + headers: { + 'Content-Type': 'application/json', + 'Set-Cookie': `voom_auth_${shareCode}=${authToken}; Path=/; Expires=${expires.toUTCString()}; HttpOnly; SameSite=Lax; Secure`, + }, + }); +} + +// --- Reactions --- + +async function handleReact(request, env, shareCode) { + const video = await env.DB.prepare( + "SELECT id, password_hash, expires_at FROM videos WHERE share_code = ? AND upload_completed = 1 AND datetime(expires_at) > datetime('now')" + ).bind(shareCode).first(); + + if (!video) return errorResponse('Not found', 404); + + // Password check + if (video.password_hash) { + const authed = await verifyPasswordAuth(request, env, shareCode, video); + if (!authed) return errorResponse('Unauthorized', 401); + } + + const body = await request.json(); + const { timestamp, emoji } = body; + const allowedEmojis = ['👍', '❤️', '😂', '😮', '🔥', '👏']; + if (!allowedEmojis.includes(emoji)) return errorResponse('Invalid emoji'); + if (typeof timestamp !== 'number' || timestamp < 0) return errorResponse('Invalid timestamp'); + + // Rate limit: 50 reactions per IP per video + const clientIP = request.headers.get('CF-Connecting-IP') || 'unknown'; + const count = await env.DB.prepare( + 'SELECT COUNT(*) as cnt FROM reactions WHERE video_id = ? AND client_ip = ?' + ).bind(video.id, clientIP).first(); + if (count && count.cnt >= 50) return errorResponse('Rate limit exceeded', 429); + + await env.DB.prepare( + 'INSERT INTO reactions (video_id, timestamp, emoji, client_ip) VALUES (?, ?, ?, ?)' + ).bind(video.id, timestamp, emoji, clientIP).run(); + + return jsonResponse({ ok: true }); +} + +async function handleGetReactions(request, env, shareCode) { + const video = await env.DB.prepare( + "SELECT id, password_hash, expires_at FROM videos WHERE share_code = ? AND upload_completed = 1 AND datetime(expires_at) > datetime('now')" + ).bind(shareCode).first(); + + if (!video) return errorResponse('Not found', 404); + + // Same gate as POST /react — listing must not bypass the password. + const authed = await verifyPasswordAuth(request, env, shareCode, video); + if (!authed) return errorResponse('Password required', 401); + + const reactions = await env.DB.prepare( + 'SELECT timestamp, emoji, created_at FROM reactions WHERE video_id = ? ORDER BY created_at DESC LIMIT 500' + ).bind(video.id).all(); + + return jsonResponse({ reactions: reactions.results || [] }); +} + +// --- Comments --- + +async function handleComment(request, env, shareCode) { + const video = await env.DB.prepare( + "SELECT id, password_hash, expires_at FROM videos WHERE share_code = ? AND upload_completed = 1 AND datetime(expires_at) > datetime('now')" + ).bind(shareCode).first(); + + if (!video) return errorResponse('Not found', 404); + + // Password check + if (video.password_hash) { + const authed = await verifyPasswordAuth(request, env, shareCode, video); + if (!authed) return errorResponse('Unauthorized', 401); + } + + const body = await request.json(); + const { timestamp, text, author_name: authorName } = body; + if (typeof timestamp !== 'number' || timestamp < 0) return errorResponse('Invalid timestamp'); + if (!authorName || typeof authorName !== 'string' || authorName.trim().length === 0) { + return errorResponse('Display name is required'); + } + if (authorName.length > 100) return errorResponse('Display name is too long'); + if (!text || text.trim().length === 0) return errorResponse('Text is required'); + if (text.length > 2000) return errorResponse('Text too long'); + + // Rate limit: 5 comments per IP per 5 minutes + const clientIP = request.headers.get('CF-Connecting-IP') || 'unknown'; + const recent = await env.DB.prepare( + "SELECT COUNT(*) as cnt FROM comments WHERE video_id = ? AND client_ip = ? AND datetime(created_at) > datetime('now', '-5 minutes')" + ).bind(video.id, clientIP).first(); + if (recent && recent.cnt >= 5) return errorResponse('Rate limit exceeded', 429); + + await env.DB.prepare( + 'INSERT INTO comments (video_id, timestamp, author_name, text, client_ip) VALUES (?, ?, ?, ?, ?)' + ).bind(video.id, timestamp, authorName.trim(), text.trim().substring(0, 2000), clientIP).run(); + + return jsonResponse({ ok: true }); +} + +async function handleGetComments(request, env, shareCode) { + const video = await env.DB.prepare( + "SELECT id, password_hash, expires_at FROM videos WHERE share_code = ? AND upload_completed = 1 AND datetime(expires_at) > datetime('now')" + ).bind(shareCode).first(); + + if (!video) return errorResponse('Not found', 404); + + // Same gate as POST /comment — viewer comments can be sensitive. + const authed = await verifyPasswordAuth(request, env, shareCode, video); + if (!authed) return errorResponse('Password required', 401); + + const url = new URL(request.url); + const requestedPage = parseInt(url.searchParams.get('page') || '1', 10); + const requestedLimit = parseInt(url.searchParams.get('limit') || '50', 10); + const page = Number.isSafeInteger(requestedPage) ? Math.max(1, Math.min(requestedPage, Math.floor(Number.MAX_SAFE_INTEGER / 100))) : 1; + const limit = Number.isFinite(requestedLimit) ? Math.max(1, Math.min(requestedLimit, 100)) : 50; + const offset = (page - 1) * limit; + + const total = await env.DB.prepare( + 'SELECT COUNT(*) as cnt FROM comments WHERE video_id = ?' + ).bind(video.id).first(); + + const comments = await env.DB.prepare( + 'SELECT timestamp, author_name, text, created_at FROM comments WHERE video_id = ? ORDER BY timestamp ASC LIMIT ? OFFSET ?' + ).bind(video.id, limit, offset).all(); + + return jsonResponse({ + comments: comments.results || [], + total: total ? total.cnt : 0, + page, + limit, + }); +} + +// --- Check Views (authenticated) --- + +async function handleCheckViews(request, env) { + const body = await request.json(); + const { shareCodes } = body; + if (!Array.isArray(shareCodes) || shareCodes.length === 0) return errorResponse('shareCodes required'); + if (shareCodes.length > 90) return errorResponse('Too many shareCodes (max 90)'); + + const placeholders = shareCodes.map(() => '?').join(','); + const results = await env.DB.prepare( + `SELECT share_code, view_count FROM videos WHERE share_code IN (${placeholders})` + ).bind(...shareCodes).all(); + + const views = {}; + for (const row of results.results || []) { + views[row.share_code] = row.view_count || 0; + } + + return jsonResponse({ views }); +} + +// --- Library: list all shared videos (dashboard) --- + +async function handleListVideos(env) { + const rows = await env.DB.prepare( + `SELECT share_code, title, duration, width, height, file_size, created_at, expires_at, + view_count, is_meeting, summary, (password_hash IS NOT NULL) AS is_protected + FROM videos + WHERE upload_completed = 1 + ORDER BY datetime(created_at) DESC` + ).all(); + return jsonResponse({ videos: rows.results || [] }); +} + +// --- OG Image --- + +async function handleOGImage(env, shareCode) { + const video = await env.DB.prepare( + "SELECT * FROM videos WHERE share_code = ? AND upload_completed = 1 AND datetime(expires_at) > datetime('now')" + ) + .bind(shareCode) + .first(); + + if (!video) return new Response('Not found', { status: 404 }); + + // Serve uploaded thumbnail if available \u2014 but never for password-protected + // videos, whose poster frame may itself be sensitive. + if (!video.password_hash) { + const thumb = await env.VIDEOS_BUCKET.get(`thumbnails/${shareCode}.jpg`); + if (thumb) { + return new Response(thumb.body, { + status: 200, + headers: { + 'Content-Type': 'image/jpeg', + 'Cache-Control': 'public, max-age=86400', + }, + }); + } + } + + // Fallback SVG + const locked = !!video.password_hash; + const duration = formatDuration(video.duration); + const date = formatDate(video.created_at); + const rawTitle = locked ? 'Protected video' : video.title; + const title = rawTitle.length > 60 ? rawTitle.substring(0, 57) + '...' : rawTitle; + const res = !locked && video.width > 0 ? `${finiteNonnegative(video.width)}\u00d7${finiteNonnegative(video.height)}` : ''; + + const svg = ` + + + + + ${escapeHTML(title)} + ${duration} \u00b7 ${date}${res ? ' \u00b7 ' + res : ''} + RECORDLY +`; + + return new Response(svg, { + status: 200, + headers: { + 'Content-Type': 'image/svg+xml', + 'Cache-Control': 'public, max-age=86400', + 'X-Content-Type-Options': 'nosniff', + }, + }); +} + +// Exported for unit tests only — the worker runtime uses none of these exports. +export { generateShareCode, escapeHTML, parseCookies, timingSafeEqual, sha256Hex, generateSalt, formatVTTTime, expectedSessionToken, dashboardPassword }; diff --git a/services/recordly-share/worker/test/api.test.js b/services/recordly-share/worker/test/api.test.js new file mode 100644 index 000000000..aee4d6ad9 --- /dev/null +++ b/services/recordly-share/worker/test/api.test.js @@ -0,0 +1,506 @@ +import { describe, it, expect, beforeAll, vi } from 'vitest'; +import { env, SELF } from 'cloudflare:test'; +import worker, { sha256Hex } from '../src/index.js'; + +const AUTH = { Authorization: 'Bearer test-secret' }; +const BASE = 'https://share.test'; + +async function createShare(extra = {}) { + const res = await SELF.fetch(`${BASE}/api/upload`, { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({ title: 'Test Recording', duration: 12.5, width: 1920, height: 1080, fileSize: 1000, ...extra }), + }); + expect(res.status).toBe(200); + return res.json(); +} + +async function completeUpload(shareCode, bytes = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7])) { + const put = await SELF.fetch(`${BASE}/api/upload-data/${shareCode}`, { + method: 'PUT', + headers: { ...AUTH, 'Content-Type': 'video/mp4' }, + body: bytes, + }); + expect(put.status).toBe(200); + const meta = await SELF.fetch(`${BASE}/api/metadata/${shareCode}`, { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({ segments: [{ startTime: 0, endTime: 1, text: 'hello world' }] }), + }); + expect(meta.status).toBe(200); +} + +describe('auth', () => { + it('rejects /api/* without a token', async () => { + const res = await SELF.fetch(`${BASE}/api/health`); + expect(res.status).toBe(401); + }); + + it('rejects a wrong token', async () => { + const res = await SELF.fetch(`${BASE}/api/health`, { headers: { Authorization: 'Bearer wrong' } }); + expect(res.status).toBe(401); + }); + + it('rejects a Bearer header with no token', async () => { + const res = await SELF.fetch(`${BASE}/api/health`, { headers: { Authorization: 'Bearer' } }); + expect(res.status).toBe(401); + }); + + it('accepts the correct token', async () => { + const res = await SELF.fetch(`${BASE}/api/health`, { headers: AUTH }); + expect(res.status).toBe(200); + expect(await res.json()).toEqual({ ok: true, app: 'recordly' }); + }); +}); + +describe('comment accounts', () => { + it('allows comments without signing in and uses the supplied display name', async () => { + const { shareCode } = await createShare(); + await completeUpload(shareCode); + + const anonymous = await SELF.fetch(`${BASE}/s/${shareCode}/comment`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + timestamp: 2, + author_name: 'Link Reviewer', + text: 'No account required', + }), + }); + expect(anonymous.status).toBe(200); + + const comments = await SELF.fetch(`${BASE}/s/${shareCode}/comments`); + const data = await comments.json(); + expect(data.comments).toEqual(expect.arrayContaining([ + expect.objectContaining({ + author_name: 'Link Reviewer', + text: 'No account required', + }), + ])); + }); + + it('supports signing back in and invalidates a logged-out session', async () => { + const register = await SELF.fetch(`${BASE}/auth/register`, { + method: 'POST', + headers: { 'Content-Type': 'application/json', 'CF-Connecting-IP': '203.0.113.80' }, + body: JSON.stringify({ + displayName: 'Signed-in Reviewer', + email: 'reviewer@example.com', + password: 'correct-horse-battery-staple', + }), + }); + expect(register.status).toBe(200); + + const login = await SELF.fetch(`${BASE}/auth/login`, { + method: 'POST', + headers: { 'Content-Type': 'application/json', 'CF-Connecting-IP': '203.0.113.81' }, + body: JSON.stringify({ + email: 'reviewer@example.com', + password: 'correct-horse-battery-staple', + }), + }); + expect(login.status).toBe(200); + const cookie = login.headers.get('Set-Cookie').split(';')[0]; + + const logout = await SELF.fetch(`${BASE}/auth/logout`, { + method: 'POST', + headers: { Cookie: cookie }, + }); + expect(logout.status).toBe(200); + + const session = await SELF.fetch(`${BASE}/auth/session`, { headers: { Cookie: cookie } }); + expect(await session.json()).toEqual({ user: null }); + }); +}); + +describe('upload validation', () => { + it('requires a title', async () => { + const res = await SELF.fetch(`${BASE}/api/upload`, { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({}), + }); + expect(res.status).toBe(400); + }); + + it('rejects javascript: CTA URLs', async () => { + const res = await SELF.fetch(`${BASE}/api/upload`, { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({ title: 'x', cta_url: 'javascript:alert(1)' }), + }); + expect(res.status).toBe(400); + }); + + it('accepts https CTA URLs and returns a well-formed share code', async () => { + const data = await createShare({ cta_url: 'https://example.com', cta_text: 'Visit' }); + expect(data.shareCode).toMatch(/^[a-z0-9]{10}$/); + expect(data.shareURL).toContain(`/s/${data.shareCode}`); + }); + + it('uploads and completes a video through the multipart API', async () => { + const { shareCode } = await createShare({ fileSize: 6 }); + const start = await SELF.fetch(`${BASE}/api/upload-multipart/${shareCode}`, { + method: 'POST', + headers: AUTH, + }); + expect(start.status).toBe(200); + const { uploadId } = await start.json(); + + const part = await SELF.fetch( + `${BASE}/api/upload-part/${shareCode}/${encodeURIComponent(uploadId)}/1`, + { + method: 'PUT', + headers: { ...AUTH, 'Content-Type': 'video/mp4' }, + body: new Uint8Array([10, 20, 30, 40, 50, 60]), + }, + ); + expect(part.status).toBe(200); + const uploadedPart = await part.json(); + + const complete = await SELF.fetch( + `${BASE}/api/upload-complete/${shareCode}/${encodeURIComponent(uploadId)}`, + { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({ parts: [uploadedPart] }), + }, + ); + expect(complete.status).toBe(200); + + const meta = await SELF.fetch(`${BASE}/api/metadata/${shareCode}`, { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({}), + }); + expect(meta.status).toBe(200); + + const video = await SELF.fetch(`${BASE}/v/${shareCode}`); + expect(video.status).toBe(200); + expect(Array.from(new Uint8Array(await video.arrayBuffer()))).toEqual([10, 20, 30, 40, 50, 60]); + }); +}); + +describe('share data + view counts', () => { + it('serves data for a completed upload and increments views', async () => { + const { shareCode } = await createShare(); + await completeUpload(shareCode); + + const res1 = await SELF.fetch(`${BASE}/s/${shareCode}/data`); + expect(res1.status).toBe(200); + const d1 = await res1.json(); + expect(d1.video.title).toBe('Test Recording'); + expect(d1.video.view_count).toBe(1); + expect(d1.segments).toHaveLength(1); + + const res2 = await SELF.fetch(`${BASE}/s/${shareCode}/data`); + const d2 = await res2.json(); + expect(d2.video.view_count).toBe(2); + }); + + it('404s for incomplete uploads', async () => { + const { shareCode } = await createShare(); + const res = await SELF.fetch(`${BASE}/s/${shareCode}/data`); + expect(res.status).toBe(404); + }); +}); + +describe('video streaming + ranges', () => { + let shareCode; + const bytes = new Uint8Array(100).map((_, i) => i); + + beforeAll(async () => { + ({ shareCode } = await createShare()); + await completeUpload(shareCode, bytes); + }); + + it('serves the full object without a Range header', async () => { + const res = await SELF.fetch(`${BASE}/v/${shareCode}`); + expect(res.status).toBe(200); + expect(res.headers.get('Content-Length')).toBe('100'); + expect(res.headers.get('Accept-Ranges')).toBe('bytes'); + }); + + it('serves a bounded range with the full size in Content-Range', async () => { + const res = await SELF.fetch(`${BASE}/v/${shareCode}`, { headers: { Range: 'bytes=10-19' } }); + expect(res.status).toBe(206); + expect(res.headers.get('Content-Range')).toBe('bytes 10-19/100'); + expect(res.headers.get('Content-Length')).toBe('10'); + const body = new Uint8Array(await res.arrayBuffer()); + expect(Array.from(body)).toEqual([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]); + }); + + it('serves an open-ended range', async () => { + const res = await SELF.fetch(`${BASE}/v/${shareCode}`, { headers: { Range: 'bytes=90-' } }); + expect(res.status).toBe(206); + expect(res.headers.get('Content-Range')).toBe('bytes 90-99/100'); + expect(res.headers.get('Content-Length')).toBe('10'); + }); + + it('serves a suffix range (bytes=-N)', async () => { + const res = await SELF.fetch(`${BASE}/v/${shareCode}`, { headers: { Range: 'bytes=-5' } }); + expect(res.status).toBe(206); + expect(res.headers.get('Content-Range')).toBe('bytes 95-99/100'); + const body = new Uint8Array(await res.arrayBuffer()); + expect(Array.from(body)).toEqual([95, 96, 97, 98, 99]); + }); + + it('returns 416 for an unsatisfiable range', async () => { + const res = await SELF.fetch(`${BASE}/v/${shareCode}`, { headers: { Range: 'bytes=5000-' } }); + expect(res.status).toBe(416); + }); +}); + +describe('password protection', () => { + const password = 'hunter2'; + let clientHash; + + beforeAll(async () => { + clientHash = await sha256Hex(password); // what the desktop app sends at share time + }); + + async function protectedShare() { + const share = await createShare({ password_hash: clientHash }); + await completeUpload(share.shareCode); + return share.shareCode; + } + + it('gates /data behind the password', async () => { + const shareCode = await protectedShare(); + const res = await SELF.fetch(`${BASE}/s/${shareCode}/data`); + expect(res.status).toBe(401); + expect((await res.json()).password_protected).toBe(true); + }); + + it('gates reactions, comments, and the thumbnail behind the password', async () => { + const shareCode = await protectedShare(); + + expect((await SELF.fetch(`${BASE}/s/${shareCode}/reactions`)).status).toBe(401); + expect((await SELF.fetch(`${BASE}/s/${shareCode}/comments`)).status).toBe(401); + expect((await SELF.fetch(`${BASE}/thumb/${shareCode}`)).status).toBe(404); + + // …and unlocks them all with the auth cookie. + const good = await SELF.fetch(`${BASE}/s/${shareCode}/verify-password`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password }), + }); + expect(good.status).toBe(200); + const cookie = good.headers.get('Set-Cookie').split(';')[0]; + + expect((await SELF.fetch(`${BASE}/s/${shareCode}/reactions`, { headers: { Cookie: cookie } })).status).toBe(200); + expect((await SELF.fetch(`${BASE}/s/${shareCode}/comments`, { headers: { Cookie: cookie } })).status).toBe(200); + }); + + it('rejects password attempts on expired videos', async () => { + const shareCode = await protectedShare(); + await env.DB.prepare( + "UPDATE videos SET expires_at = datetime('now', '-1 day') WHERE share_code = ?" + ).bind(shareCode).run(); + + const res = await SELF.fetch(`${BASE}/s/${shareCode}/verify-password`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password }), + }); + expect(res.status).toBe(404); + }); + + it('rejects a wrong password, accepts the right one, sets an HttpOnly cookie', async () => { + const shareCode = await protectedShare(); + + const bad = await SELF.fetch(`${BASE}/s/${shareCode}/verify-password`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password: 'wrong' }), + }); + expect(bad.status).toBe(403); + + const good = await SELF.fetch(`${BASE}/s/${shareCode}/verify-password`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password }), + }); + expect(good.status).toBe(200); + const cookie = good.headers.get('Set-Cookie'); + expect(cookie).toContain(`voom_auth_${shareCode}=`); + expect(cookie).toContain('HttpOnly'); + expect(cookie).toContain('Secure'); + + const authed = await SELF.fetch(`${BASE}/s/${shareCode}/data`, { + headers: { Cookie: cookie.split(';')[0] }, + }); + expect(authed.status).toBe(200); + }); + + it('stores passwords salted — never the bare client hash', async () => { + const shareCode = await protectedShare(); + const row = await env.DB.prepare('SELECT password_hash, password_salt FROM videos WHERE share_code = ?') + .bind(shareCode).first(); + expect(row.password_salt).toMatch(/^[0-9a-f]{32}$/); + expect(row.password_hash).not.toBe(clientHash); + }); + + it('lazily upgrades legacy unsalted rows on successful verify', async () => { + const shareCode = await protectedShare(); + // Regress the row to the legacy (pre-salt) format. + await env.DB.prepare('UPDATE videos SET password_hash = ?, password_salt = NULL WHERE share_code = ?') + .bind(clientHash, shareCode).run(); + + const res = await SELF.fetch(`${BASE}/s/${shareCode}/verify-password`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password }), + }); + expect(res.status).toBe(200); + + const row = await env.DB.prepare('SELECT password_hash, password_salt FROM videos WHERE share_code = ?') + .bind(shareCode).first(); + expect(row.password_salt).toMatch(/^[0-9a-f]{32}$/); + expect(row.password_hash).not.toBe(clientHash); // re-stored salted + }); + + it('rate-limits brute-force attempts (429 after 10 failures)', async () => { + const shareCode = await protectedShare(); + for (let i = 0; i < 10; i++) { + const res = await SELF.fetch(`${BASE}/s/${shareCode}/verify-password`, { + method: 'POST', + headers: { 'Content-Type': 'application/json', 'CF-Connecting-IP': '203.0.113.7' }, + body: JSON.stringify({ password: `wrong-${i}` }), + }); + expect(res.status).toBe(403); + } + const blocked = await SELF.fetch(`${BASE}/s/${shareCode}/verify-password`, { + method: 'POST', + headers: { 'Content-Type': 'application/json', 'CF-Connecting-IP': '203.0.113.7' }, + body: JSON.stringify({ password }), + }); + expect(blocked.status).toBe(429); + }); + + it('hides title and thumbnail from the OG page and image', async () => { + const shareCode = await protectedShare(); + const og = await SELF.fetch(`${BASE}/s/${shareCode}`, { headers: { 'User-Agent': 'Twitterbot/1.0' } }); + expect(og.status).toBe(200); + const html = await og.text(); + expect(html).toContain('Protected video'); + expect(html).not.toContain('Test Recording'); + + const img = await SELF.fetch(`${BASE}/og/${shareCode}`); + expect(img.status).toBe(200); + expect(img.headers.get('Content-Type')).toContain('svg'); + const svg = await img.text(); + expect(svg).toContain('Protected video'); + expect(svg).not.toContain('Test Recording'); + }); +}); + +describe('OG page (public video)', () => { + it('escapes the title in meta tags', async () => { + const { shareCode } = await createShare({ title: '' }); + await completeUpload(shareCode); + const res = await SELF.fetch(`${BASE}/s/${shareCode}`, { headers: { 'User-Agent': 'Slackbot 1.0' } }); + const html = await res.text(); + expect(html).not.toContain(''; + const { shareCode } = await createShare({ width: payload, height: payload, duration: 'invalid', fileSize: -1 }); + const row = await env.DB.prepare('SELECT width, height, duration, file_size FROM videos WHERE share_code = ?').bind(shareCode).first(); + expect(row).toMatchObject({ width: 0, height: 0, duration: 0, file_size: 0 }); + await completeUpload(shareCode); + await env.DB.prepare('UPDATE videos SET width = ?, height = ? WHERE share_code = ?').bind(payload, payload, shareCode).run(); + const response = await SELF.fetch(`${BASE}/s/${shareCode}`, { headers: { 'User-Agent': 'Twitterbot/1.0' } }); + expect(await response.text()).not.toContain(''); + }); +}); + + +it('normalizes invalid comment pagination and clamps zero limits', async () => { + const { shareCode } = await createShare(); + await completeUpload(shareCode); + for (const query of ['page=invalid&limit=invalid', 'page=-5&limit=0', 'page=1&limit=-1']) { + const response = await SELF.fetch(`${BASE}/s/${shareCode}/comments?${query}`); + expect(response.status).toBe(200); + const body = await response.json(); + expect(body.comments).toEqual([]); + } +}); diff --git a/services/recordly-share/worker/test/helpers.test.js b/services/recordly-share/worker/test/helpers.test.js new file mode 100644 index 000000000..b3cadfc0a --- /dev/null +++ b/services/recordly-share/worker/test/helpers.test.js @@ -0,0 +1,96 @@ +import { describe, it, expect } from 'vitest'; +import { + generateShareCode, + escapeHTML, + parseCookies, + timingSafeEqual, + sha256Hex, + generateSalt, + formatVTTTime, +} from '../src/index.js'; + +const SHARE_CODE_CHARS = 'abcdefghjkmnpqrstuvwxyz23456789'; +const SHARE_CODE_LENGTH = 10; + +describe('generateShareCode', () => { + it('produces codes of the documented length and charset', () => { + for (let i = 0; i < 50; i++) { + const code = generateShareCode(); + expect(code).toHaveLength(SHARE_CODE_LENGTH); + expect(code).toMatch(/^[a-z0-9]+$/); // must satisfy every route regex + for (const ch of code) expect(SHARE_CODE_CHARS).toContain(ch); + } + }); + + it('excludes ambiguous characters (i, l, o, 0, 1)', () => { + for (const ch of 'ilo01') expect(SHARE_CODE_CHARS).not.toContain(ch); + }); +}); + +describe('escapeHTML', () => { + it('escapes the four double-quote-context metacharacters', () => { + expect(escapeHTML(`&`)).toBe( + '<img src=x onerror="alert(1)">&' + ); + }); + + it('leaves plain text untouched', () => { + expect(escapeHTML('My recording 2024')).toBe('My recording 2024'); + }); + + // Documented limitation: single quotes pass through, so escaped values are + // only safe in double-quoted attributes and element content. + it("does not escape single quotes — keep attributes double-quoted", () => { + expect(escapeHTML("it's")).toBe("it's"); + }); +}); + +describe('parseCookies', () => { + it('parses multiple cookies and preserves = inside values', () => { + const cookies = parseCookies('a=1; voom_auth_abc=dGVzdA==; b=x=y'); + expect(cookies.a).toBe('1'); + expect(cookies.voom_auth_abc).toBe('dGVzdA=='); + expect(cookies.b).toBe('x=y'); + }); + + it('returns empty object for empty string', () => { + expect(parseCookies('')).toEqual({}); + }); +}); + +describe('timingSafeEqual', () => { + it('matches equal strings', () => { + expect(timingSafeEqual('secret-token', 'secret-token')).toBe(true); + }); + it('rejects unequal strings of same and different length', () => { + expect(timingSafeEqual('secret-token', 'secret-tokeX')).toBe(false); + expect(timingSafeEqual('secret', 'secret-token')).toBe(false); + expect(timingSafeEqual('', 'x')).toBe(false); + }); + it('rejects non-strings', () => { + expect(timingSafeEqual(undefined, 'x')).toBe(false); + expect(timingSafeEqual('x', null)).toBe(false); + }); +}); + +describe('sha256Hex / generateSalt', () => { + it('produces the known SHA-256 of "hunter2"', async () => { + expect(await sha256Hex('hunter2')).toBe( + 'f52fbd32b2b3b86ff88ef6c490628285f482af15ddcb29541f94bcf526a3f6c7' + ); + }); + it('salt is 32 hex chars and unique', () => { + const a = generateSalt(); + const b = generateSalt(); + expect(a).toMatch(/^[0-9a-f]{32}$/); + expect(a).not.toBe(b); + }); +}); + +describe('formatVTTTime', () => { + it('formats with millisecond precision', () => { + expect(formatVTTTime(0)).toBe('00:00:00.000'); + expect(formatVTTTime(61.5)).toBe('00:01:01.500'); + expect(formatVTTTime(3661.25)).toBe('01:01:01.250'); + }); +}); diff --git a/services/recordly-share/worker/test/library.test.js b/services/recordly-share/worker/test/library.test.js new file mode 100644 index 000000000..b92e55715 --- /dev/null +++ b/services/recordly-share/worker/test/library.test.js @@ -0,0 +1,155 @@ +import { describe, it, expect, beforeAll } from 'vitest'; +import { env, SELF } from 'cloudflare:test'; +import { expectedSessionToken } from '../src/index.js'; + +const AUTH = { Authorization: 'Bearer test-secret' }; +const BASE = 'https://share.test'; + +async function createAndCompleteShare(extra = {}) { + const res = await SELF.fetch(`${BASE}/api/upload`, { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({ title: 'Library Test', duration: 30, width: 1920, height: 1080, fileSize: 5000, ...extra }), + }); + expect(res.status).toBe(200); + const { shareCode } = await res.json(); + + await SELF.fetch(`${BASE}/api/upload-data/${shareCode}`, { + method: 'PUT', + headers: { ...AUTH, 'Content-Type': 'video/mp4' }, + body: new Uint8Array([0, 1, 2, 3, 4]), + }); + await SELF.fetch(`${BASE}/api/metadata/${shareCode}`, { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({ segments: [] }), + }); + return shareCode; +} + +describe('GET /api/videos', () => { + it('rejects with no auth -> 401', async () => { + const res = await SELF.fetch(`${BASE}/api/videos`); + expect(res.status).toBe(401); + }); + + it('returns 200 and a videos array with valid bearer token', async () => { + const res = await SELF.fetch(`${BASE}/api/videos`, { headers: AUTH }); + expect(res.status).toBe(200); + const data = await res.json(); + expect(Array.isArray(data.videos)).toBe(true); + }); + + it('returns completed videos newest-first and omits sensitive fields', async () => { + const code1 = await createAndCompleteShare({ title: 'Older Video' }); + const code2 = await createAndCompleteShare({ title: 'Newer Video' }); + + // Force distinct timestamps so ordering is deterministic in the test env + // (SQLite datetime('now') has second precision; both rows may land the same second) + await env.DB.prepare("UPDATE videos SET created_at = datetime('now', '-10 seconds') WHERE share_code = ?") + .bind(code1).run(); + + const res = await SELF.fetch(`${BASE}/api/videos`, { headers: AUTH }); + expect(res.status).toBe(200); + const { videos } = await res.json(); + + // Both videos should appear + const codes = videos.map(v => v.share_code); + expect(codes).toContain(code1); + expect(codes).toContain(code2); + + // Newer should be first + const idx1 = codes.indexOf(code1); + const idx2 = codes.indexOf(code2); + expect(idx2).toBeLessThan(idx1); + + // Sensitive fields must not be present on any row + for (const v of videos) { + expect(v).not.toHaveProperty('password_hash'); + expect(v).not.toHaveProperty('password_salt'); + expect(v).not.toHaveProperty('id'); + } + + // Required fields present + const video = videos.find(v => v.share_code === code2); + expect(video).toBeDefined(); + expect(typeof video.title).toBe('string'); + expect(typeof video.duration).toBe('number'); + expect(typeof video.view_count).toBe('number'); + expect(typeof video.is_protected).toBe('number'); + }); + + it('marks password-protected videos with is_protected=1', async () => { + const { sha256Hex } = await import('../src/index.js'); + const clientHash = await sha256Hex('secret123'); + const code = await createAndCompleteShare({ password_hash: clientHash }); + + const res = await SELF.fetch(`${BASE}/api/videos`, { headers: AUTH }); + const { videos } = await res.json(); + const video = videos.find(v => v.share_code === code); + expect(video).toBeDefined(); + expect(video.is_protected).toBe(1); + expect(video).not.toHaveProperty('password_hash'); + }); +}); + +describe('Dashboard login/logout', () => { + it('POST /library/login with wrong password -> 302 to /library/login?error=1 (no session cookie)', async () => { + const form = new FormData(); + form.set('password', 'wrong-password'); + const res = await SELF.fetch(`${BASE}/library/login`, { + method: 'POST', + body: form, + redirect: 'manual', + }); + expect(res.status).toBe(302); + expect(res.headers.get('Location')).toBe('/library/login?error=1'); + const setCookie = res.headers.get('Set-Cookie') || ''; + expect(setCookie).not.toContain('voom_session='); + }); + + it('POST /library/login with correct password (API_SECRET) -> 302 to /library with HttpOnly session cookie', async () => { + const form = new FormData(); + form.set('password', 'test-secret'); // matches API_SECRET in test env + const res = await SELF.fetch(`${BASE}/library/login`, { + method: 'POST', + body: form, + redirect: 'manual', + }); + expect(res.status).toBe(302); + expect(res.headers.get('Location')).toBe('/library'); + const setCookie = res.headers.get('Set-Cookie') || ''; + expect(setCookie).toContain('voom_session='); + expect(setCookie).toContain('HttpOnly'); + }); + + it('GET /api/videos with session cookie (no bearer) -> 200', async () => { + // Get a valid session token + const token = await expectedSessionToken(env); + const res = await SELF.fetch(`${BASE}/api/videos`, { + headers: { Cookie: `voom_session=${token}` }, + }); + expect(res.status).toBe(200); + const data = await res.json(); + expect(Array.isArray(data.videos)).toBe(true); + }); +}); + +describe('GET /library (dashboard gate)', () => { + it('redirects to /library/login with no cookie', async () => { + const res = await SELF.fetch(`${BASE}/library`, { redirect: 'manual' }); + expect(res.status).toBe(302); + expect(res.headers.get('Location')).toBe('/library/login'); + }); + + it('serves the dashboard page with a valid session cookie', async () => { + const token = await expectedSessionToken(env); + // ASSETS serve library.html for /library — this exercises the auth gate passing + const res = await SELF.fetch(`${BASE}/library`, { + headers: { Cookie: `voom_session=${token}` }, + redirect: 'manual', + }); + // In the test environment ASSETS returns the static HTML; status 200 + expect([200, 304]).toContain(res.status); + }); +}); diff --git a/services/recordly-share/worker/test/migration.test.js b/services/recordly-share/worker/test/migration.test.js new file mode 100644 index 000000000..d8b34113a --- /dev/null +++ b/services/recordly-share/worker/test/migration.test.js @@ -0,0 +1,179 @@ +// Regression tests for ensureSchema against databases that predate schema +// versioning. The v4.1.0 bug: a production DB with tables but no _meta row +// was treated as "fresh", so CREATE TABLE IF NOT EXISTS no-opped, the v2 +// ALTER never ran, and every INSERT touching password_salt threw a 500. +// These tests rebuild the database into each historical shape and verify +// uploads work afterward. +import { describe, it, expect, beforeEach, afterAll } from 'vitest'; +import { env, SELF } from 'cloudflare:test'; +import { __resetSchemaCacheForTests } from '../src/index.js'; + +const AUTH = { Authorization: 'Bearer test-secret' }; +const BASE = 'https://share.test'; + +// The videos table exactly as production had it before migration 0006 +// (base schema + migrations 0002–0005): no password_salt column. +const V1_STATEMENTS = [ + `CREATE TABLE videos ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + share_code TEXT UNIQUE NOT NULL, + title TEXT NOT NULL, + duration REAL NOT NULL DEFAULT 0, + width INTEGER NOT NULL DEFAULT 0, + height INTEGER NOT NULL DEFAULT 0, + has_webcam INTEGER NOT NULL DEFAULT 0, + file_size INTEGER NOT NULL DEFAULT 0, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + expires_at TEXT NOT NULL, + upload_completed INTEGER NOT NULL DEFAULT 0, + view_count INTEGER NOT NULL DEFAULT 0, + password_hash TEXT, + cta_url TEXT, + cta_text TEXT, + last_notified_view_count INTEGER NOT NULL DEFAULT 0, + is_meeting INTEGER NOT NULL DEFAULT 0, + summary TEXT + )`, + `CREATE TABLE transcript_segments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + start_time REAL NOT NULL, + end_time REAL NOT NULL, + text TEXT NOT NULL, + speaker TEXT + )`, + `CREATE TABLE reactions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + emoji TEXT NOT NULL, + client_ip TEXT NOT NULL DEFAULT '', + created_at TEXT NOT NULL DEFAULT (datetime('now')) + )`, + `CREATE TABLE comments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + author_name TEXT NOT NULL DEFAULT 'Anonymous', + text TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + client_ip TEXT NOT NULL DEFAULT '' + )`, + `CREATE TABLE chapters ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + video_id INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE, + timestamp REAL NOT NULL, + title TEXT NOT NULL + )`, +]; + +async function dropAllTables() { + const { results } = await env.DB.prepare( + `SELECT name FROM sqlite_master WHERE type = 'table' + AND name NOT LIKE 'sqlite\\_%' ESCAPE '\\' AND name NOT LIKE '\\_cf\\_%' ESCAPE '\\'` + ).all(); + for (const { name } of results) { + await env.DB.prepare(`DROP TABLE IF EXISTS "${name}"`).run(); + } +} + +async function createV1Schema() { + for (const sql of V1_STATEMENTS) { + await env.DB.prepare(sql).run(); + } +} + +async function videoColumns() { + const { results } = await env.DB.prepare(`PRAGMA table_info(videos)`).all(); + return results.map(c => c.name); +} + +async function upload() { + return SELF.fetch(`${BASE}/api/upload`, { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({ title: 'Migration Test', duration: 3 }), + }); +} + +describe('schema migration paths', () => { + beforeEach(async () => { + await dropAllTables(); + __resetSchemaCacheForTests(); + }); + + // Leave a clean, fully-migrated database for any test file that runs after. + afterAll(async () => { + await dropAllTables(); + __resetSchemaCacheForTests(); + }); + + it('migrates a pre-versioning database (tables exist, no _meta)', async () => { + await createV1Schema(); + + const res = await upload(); + expect(res.status).toBe(200); + const body = await res.json(); + expect(body.shareCode).toBeTruthy(); + + expect(await videoColumns()).toContain('password_salt'); + const meta = await env.DB.prepare(`SELECT value FROM _meta WHERE key = 'schema_version'`).first(); + expect(meta.value).toBe('3'); + }); + + it('repairs a database mis-stamped as current without the v2 columns', async () => { + // The exact state v4.1.0 left production in: v1 tables, _meta says 2. + await createV1Schema(); + await env.DB.prepare(`CREATE TABLE _meta (key TEXT PRIMARY KEY, value TEXT)`).run(); + await env.DB.prepare(`INSERT INTO _meta (key, value) VALUES ('schema_version', '2')`).run(); + + const res = await upload(); + expect(res.status).toBe(200); + + expect(await videoColumns()).toContain('password_salt'); + }); + + it('re-running migrations on an already-migrated database is a no-op', async () => { + await createV1Schema(); + expect((await upload()).status).toBe(200); // migrates + + __resetSchemaCacheForTests(); // simulate a new isolate cold start + expect((await upload()).status).toBe(200); // must not throw duplicate-column + }); + + it('bootstraps a truly fresh database with the consolidated schema', async () => { + const res = await upload(); + expect(res.status).toBe(200); + + const cols = await videoColumns(); + expect(cols).toContain('password_salt'); + const tables = await env.DB.prepare( + `SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'password_attempts'` + ).first(); + expect(tables).toBeTruthy(); + expect(await env.DB.prepare( + `SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'comment_users'` + ).first()).toBeTruthy(); + }); + + it('password flow works end-to-end on a migrated pre-versioning database', async () => { + await createV1Schema(); + + const hash = '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'; // sha256("hello") + const res = await SELF.fetch(`${BASE}/api/upload`, { + method: 'POST', + headers: { ...AUTH, 'Content-Type': 'application/json' }, + body: JSON.stringify({ title: 'Protected', duration: 3, password_hash: hash }), + }); + expect(res.status).toBe(200); + const { shareCode } = await res.json(); + await env.DB.prepare(`UPDATE videos SET upload_completed = 1 WHERE share_code = ?`).bind(shareCode).run(); + + const verify = await SELF.fetch(`${BASE}/s/${shareCode}/verify-password`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password: 'hello' }), + }); + expect(verify.status).toBe(200); + }); +}); diff --git a/services/recordly-share/worker/vitest.config.js b/services/recordly-share/worker/vitest.config.js new file mode 100644 index 000000000..d5ce03d0a --- /dev/null +++ b/services/recordly-share/worker/vitest.config.js @@ -0,0 +1,22 @@ +import { defineWorkersConfig } from '@cloudflare/vitest-pool-workers/config'; + +export default defineWorkersConfig({ + test: { + poolOptions: { + workers: { + // The worker caches `schemaReady` at module level, so per-test storage + // rollback would leave the flag true with the tables gone. Tests create + // their own rows and don't depend on a clean DB. + isolatedStorage: false, + singleWorker: true, + wrangler: { configPath: './wrangler.test.jsonc' }, + miniflare: { + bindings: { + API_SECRET: 'test-secret', + ALLOW_API_SECRET_UPLOADS: 'true', + }, + }, + }, + }, + }, +}); diff --git a/services/recordly-share/worker/web/astro.config.mjs b/services/recordly-share/worker/web/astro.config.mjs new file mode 100644 index 000000000..0c90c7a01 --- /dev/null +++ b/services/recordly-share/worker/web/astro.config.mjs @@ -0,0 +1,12 @@ +import { defineConfig } from 'astro/config'; +import react from '@astrojs/react'; +import tailwindcss from '@tailwindcss/vite'; + +export default defineConfig({ + output: 'static', + integrations: [react()], + vite: { plugins: [tailwindcss()] }, + build: { + format: 'file', + }, +}); diff --git a/services/recordly-share/worker/web/dist/_astro/LibraryPage.fMpkKWnY.js b/services/recordly-share/worker/web/dist/_astro/LibraryPage.fMpkKWnY.js new file mode 100644 index 000000000..9d39604f0 --- /dev/null +++ b/services/recordly-share/worker/web/dist/_astro/LibraryPage.fMpkKWnY.js @@ -0,0 +1 @@ +import{p as j,j as a,N as A,H as S,B as o,r as D,a as p,S as L,C as i,b as y,e as E,L as _,c as F,d as $,T as P,f as T,I as C,t as u}from"./ShareUI.BflDJKuK.js";import{r as e}from"./index.DeQQz02V.js";const z=new Map([["bold",e.createElement(e.Fragment,null,e.createElement("path",{d:"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z"}))],["duotone",e.createElement(e.Fragment,null,e.createElement("path",{d:"M184,80V208a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H176A8,8,0,0,1,184,80Z",opacity:"0.2"}),e.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["fill",e.createElement(e.Fragment,null,e.createElement("path",{d:"M192,136v72a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V80A16,16,0,0,1,48,64h72a8,8,0,0,1,0,16H48V208H176V136a8,8,0,0,1,16,0Zm32-96a8,8,0,0,0-8-8H152a8,8,0,0,0-5.66,13.66L172.69,72l-42.35,42.34a8,8,0,0,0,11.32,11.32L184,83.31l26.34,26.35A8,8,0,0,0,224,104Z"}))],["light",e.createElement(e.Fragment,null,e.createElement("path",{d:"M222,104a6,6,0,0,1-12,0V54.49l-69.75,69.75a6,6,0,0,1-8.48-8.48L201.51,46H152a6,6,0,0,1,0-12h64a6,6,0,0,1,6,6Zm-38,26a6,6,0,0,0-6,6v72a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V80a2,2,0,0,1,2-2h72a6,6,0,0,0,0-12H48A14,14,0,0,0,34,80V208a14,14,0,0,0,14,14H176a14,14,0,0,0,14-14V136A6,6,0,0,0,184,130Z"}))],["regular",e.createElement(e.Fragment,null,e.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["thin",e.createElement(e.Fragment,null,e.createElement("path",{d:"M220,104a4,4,0,0,1-8,0V49.66l-73.16,73.17a4,4,0,0,1-5.66-5.66L206.34,44H152a4,4,0,0,1,0-8h64a4,4,0,0,1,4,4Zm-36,28a4,4,0,0,0-4,4v72a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V80a4,4,0,0,1,4-4h72a4,4,0,0,0,0-8H48A12,12,0,0,0,36,80V208a12,12,0,0,0,12,12H176a12,12,0,0,0,12-12V136A4,4,0,0,0,184,132Z"}))]]),k=new Map([["bold",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,48H180V36A28,28,0,0,0,152,8H104A28,28,0,0,0,76,36V48H40a12,12,0,0,0,0,24h4V208a20,20,0,0,0,20,20H192a20,20,0,0,0,20-20V72h4a12,12,0,0,0,0-24ZM100,36a4,4,0,0,1,4-4h48a4,4,0,0,1,4,4V48H100Zm88,168H68V72H188ZM116,104v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Zm48,0v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Z"}))],["duotone",e.createElement(e.Fragment,null,e.createElement("path",{d:"M200,56V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V56Z",opacity:"0.2"}),e.createElement("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"}))],["fill",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM112,168a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm0-120H96V40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8Z"}))],["light",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,50H174V40a22,22,0,0,0-22-22H104A22,22,0,0,0,82,40V50H40a6,6,0,0,0,0,12H50V208a14,14,0,0,0,14,14H192a14,14,0,0,0,14-14V62h10a6,6,0,0,0,0-12ZM94,40a10,10,0,0,1,10-10h48a10,10,0,0,1,10,10V50H94ZM194,208a2,2,0,0,1-2,2H64a2,2,0,0,1-2-2V62H194ZM110,104v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Zm48,0v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Z"}))],["regular",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"}))],["thin",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,52H172V40a20,20,0,0,0-20-20H104A20,20,0,0,0,84,40V52H40a4,4,0,0,0,0,8H52V208a12,12,0,0,0,12,12H192a12,12,0,0,0,12-12V60h12a4,4,0,0,0,0-8ZM92,40a12,12,0,0,1,12-12h48a12,12,0,0,1,12,12V52H92ZM196,208a4,4,0,0,1-4,4H64a4,4,0,0,1-4-4V60H196ZM108,104v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Zm48,0v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Z"}))]]),Z=e.forwardRef((r,n)=>e.createElement(j,{ref:n,...r,weights:z}));Z.displayName="ArrowSquareOutIcon";const w=e.forwardRef((r,n)=>e.createElement(j,{ref:n,...r,weights:k}));w.displayName="TrashIcon";async function R(){const r=await fetch("/api/videos",{credentials:"include"});if(r.status===401)return window.location.href="/library/login",[];if(!r.ok)throw new Error(`Failed to load videos (${r.status})`);return(await r.json()).videos||[]}async function I(r){const n=await fetch(`/api/renew/${r}`,{method:"POST",credentials:"include"});return n.ok&&(await n.json()).expiresAt||null}async function O(r){return(await fetch(`/api/delete/${r}`,{method:"DELETE",credentials:"include"})).ok}function U(r){const n=Math.floor(r/3600),l=Math.floor(r%3600/60),c=Math.floor(r%60);return n>0?`${n}:${String(l).padStart(2,"0")}:${String(c).padStart(2,"0")}`:`${l}:${String(c).padStart(2,"0")}`}function b(r){const n=/[Zz]$|[+-]\d{2}:?\d{2}$/.test(r);return new Date(n?r:r.replace(" ","T")+"Z")}function B(r){const n=b(r);return Number.isNaN(n.getTime())?"—":n.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function q(r){const n=b(r).getTime();return Number.isNaN(n)?NaN:Math.max(0,Math.round((n-Date.now())/(1440*60*1e3)))}function J(){const[r,n]=e.useState(!1);return e.useEffect(()=>n(new URLSearchParams(location.search).has("error")),[]),a.jsxs($,{children:[a.jsx(E,{size:28}),a.jsx("h1",{children:"Your library"}),a.jsx("p",{children:"Enter your dashboard password to manage shared recordings."}),a.jsxs("form",{method:"POST",action:"/library/login",className:"gate-form",children:[a.jsxs(P,{name:"password",isRequired:!0,children:[a.jsx(T,{children:"Password"}),a.jsx(C,{type:"password",autoComplete:"current-password",autoFocus:!0})]}),r&&a.jsx(p,{children:"Incorrect password. Please try again."}),a.jsx(o,{type:"submit",children:"Unlock library"})]})]})}function K(){const[r,n]=e.useState([]),[l,c]=e.useState(!0),[V,f]=e.useState(""),[d,m]=e.useState(null),[M,H]=e.useState(null);async function x(){c(!0),f("");try{n(await R())}catch{f("Could not load your recordings. Please try again.")}finally{c(!1)}}e.useEffect(()=>{x()},[]);async function N(t){m(t);try{const s=await I(t);if(!s)throw new Error;n(h=>h.map(g=>g.share_code===t?{...g,expires_at:s}:g)),u.success("Share link renewed")}catch{u.danger("Could not renew this link. Try again.")}finally{m(null)}}async function v(t){m(t);try{if(!await O(t))throw new Error;n(s=>s.filter(h=>h.share_code!==t)),u.success("Recording deleted"),H(null)}catch{u.danger("Could not delete this recording. Try again.")}finally{m(null)}}return a.jsxs(a.Fragment,{children:[a.jsx(A,{}),a.jsx(S,{title:"Library",library:!0}),a.jsxs("main",{className:"library-main",children:[a.jsxs("div",{className:"recording-heading",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"recording-title",children:"Your recordings"}),a.jsx("p",{className:"recording-meta",children:"Manage your shared videos and links."})]}),a.jsxs(o,{variant:"ghost",size:"sm",onPress:()=>{x()},isDisabled:l,children:[a.jsx(D,{size:16}),"Refresh"]})]}),V&&a.jsx(p,{children:V}),a.jsx("div",{className:"library-grid",children:l?[0,1,2].map(t=>a.jsx(L,{className:"loading-sidebar"},t)):r.map(t=>{const s=q(t.expires_at);return a.jsxs(i,{children:[a.jsx("img",{className:"library-thumb",src:`/thumb/${t.share_code}`,alt:"",loading:"lazy",onError:h=>{h.currentTarget.style.visibility="hidden"}}),a.jsxs(i.Header,{children:[a.jsx(i.Title,{children:t.title}),a.jsxs(i.Description,{children:[U(t.duration)," · ",B(t.created_at)," ·"," ",t.view_count," ",t.view_count===1?"view":"views"]})]}),a.jsxs(i.Content,{children:[a.jsx(y,{size:"sm",variant:"soft",color:s<=3?"warning":"default",children:Number.isNaN(s)?"Expiry unknown":s===0?"Expires today":s===1?"Expires tomorrow":`Expires in ${s} days`}),!!t.is_protected&&a.jsxs(y,{size:"sm",variant:"soft",children:[a.jsx(E,{size:12}),"Protected"]})]}),a.jsxs(i.Footer,{className:"library-actions",children:[a.jsxs(_,{className:"button button--sm button--ghost",href:`/s/${t.share_code}`,target:"_blank",rel:"noopener noreferrer",children:[a.jsx(Z,{size:16}),"Open"]}),a.jsx(F,{code:t.share_code}),a.jsx(o,{size:"sm",variant:"ghost",isDisabled:d!==null,onPress:()=>{N(t.share_code)},children:"Renew"}),a.jsx(o,{size:"sm",variant:"danger-soft",isIconOnly:!0,"aria-label":`Delete ${t.title}`,isDisabled:d!==null,onPress:()=>H(t.share_code),children:a.jsx(w,{size:16})})]}),M===t.share_code&&a.jsxs(i.Content,{className:"gate-content",children:[a.jsxs(p,{children:["Delete “",t.title,"”? This permanently removes the recording and its share link."]}),a.jsxs("div",{className:"library-actions",children:[a.jsx(o,{size:"sm",variant:"secondary",onPress:()=>H(null),isDisabled:d!==null,children:"Cancel"}),a.jsx(o,{size:"sm",variant:"danger",isPending:d===t.share_code,isDisabled:d!==null,onPress:()=>{v(t.share_code)},children:"Delete recording"})]})]})]},t.share_code)})}),!l&&!V&&r.length===0&&a.jsxs(i,{className:"empty-feedback",children:[a.jsx(i.Title,{children:"No shared recordings yet"}),a.jsx(i.Description,{children:"Publish a recording from Recordly to see it here."})]})]})]})}export{J as LibraryLogin,K as default}; diff --git a/services/recordly-share/worker/web/dist/_astro/SharePage.DPtG8Fwa.js b/services/recordly-share/worker/web/dist/_astro/SharePage.DPtG8Fwa.js new file mode 100644 index 000000000..53158f69f --- /dev/null +++ b/services/recordly-share/worker/web/dist/_astro/SharePage.DPtG8Fwa.js @@ -0,0 +1,6 @@ +import{$ as Je,g as re,h as Y,i as Fe,k as Nt,l as et,m as kr,n as Lr,o as rt,q as Ae,s as Se,u as fe,v as se,w as ae,x as nt,y as Xi,z as ce,A as lt,D as rl,E as z,F as Ne,G as Ze,J as le,K as Ji,M as Qi,O as Fr,P as es,Q as bt,R as yt,U as De,V as Dr,W as Lt,X as ts,Y as Nr,Z as B,_ as nl,a0 as Ir,a1 as fr,a2 as We,a3 as rs,a4 as zt,a5 as ll,a6 as hr,a7 as al,a8 as Et,a9 as il,aa as ns,ab as ls,ac as Ut,ad as Vr,ae as xe,af as Re,ag as as,ah as Hr,ai as is,aj as tr,ak as qe,al as mr,am as Ft,an as St,ao as sl,ap as ss,aq as os,ar as Ke,as as Wt,at as cs,au as us,av as on,aw as ds,ax as jr,j as h,ay as ue,az as fs,aA as hs,aB as ol,aC as ms,aD as ut,aE as ps,aF as cl,aG as qt,aH as gs,aI as bs,aJ as Te,aK as de,aL as ul,aM as ys,aN as vs,aO as $s,aP as xs,aQ as Es,aR as Qe,aS as Ss,aT as ws,aU as Ps,aV as Cs,aW as Ms,aX as As,aY as cn,p as he,C as dl,B as W,aZ as fl,L as hl,f as It,t as Be,b as Ks,a_ as Ts,a$ as Rs,a as ml,T as pr,I as pl,N as ks,H as gl,S as Mt,d as Ls,e as Fs,r as Ds,c as Ns}from"./ShareUI.BflDJKuK.js";import{r as a,$ as x,R as Is}from"./index.DeQQz02V.js";const Vs="react-aria-clear-focus",Hs="react-aria-focus";class js{constructor(e,t,n,l){this._walkerStack=[],this._currentSetFor=new Set,this._acceptNode=s=>{if(s.nodeType===Node.ELEMENT_NODE){const o=s.shadowRoot;if(o){const c=this._doc.createTreeWalker(o,this.whatToShow,{acceptNode:this._acceptNode});return this._walkerStack.unshift(c),NodeFilter.FILTER_ACCEPT}else{if(typeof this.filter=="function")return this.filter(s);if(this.filter?.acceptNode)return this.filter.acceptNode(s);if(this.filter===null)return NodeFilter.FILTER_ACCEPT}}return NodeFilter.FILTER_SKIP},this._doc=e,this.root=t,this.filter=l??null,this.whatToShow=n??NodeFilter.SHOW_ALL,this._currentNode=t,this._walkerStack.unshift(e.createTreeWalker(t,n,this._acceptNode));const i=t.shadowRoot;if(i){const s=this._doc.createTreeWalker(i,this.whatToShow,{acceptNode:this._acceptNode});this._walkerStack.unshift(s)}}get currentNode(){return this._currentNode}set currentNode(e){if(!re(this.root,e))throw new Error("Cannot set currentNode to a node that is not contained by the root node.");const t=[];let n=e,l=e;for(this._currentNode=e;n&&n!==this.root;)if(n.nodeType===Node.DOCUMENT_FRAGMENT_NODE){const s=n,o=this._doc.createTreeWalker(s,this.whatToShow,{acceptNode:this._acceptNode});t.push(o),o.currentNode=l,this._currentSetFor.add(o),n=l=s.host}else n=n.parentNode;const i=this._doc.createTreeWalker(this.root,this.whatToShow,{acceptNode:this._acceptNode});t.push(i),i.currentNode=l,this._currentSetFor.add(i),this._walkerStack=t}get doc(){return this._doc}firstChild(){let e=this.currentNode,t=this.nextNode();return re(e,t)?(t&&(this.currentNode=t),t):(this.currentNode=e,null)}lastChild(){let t=this._walkerStack[0].lastChild();return t&&(this.currentNode=t),t}nextNode(){const e=this._walkerStack[0].nextNode();if(e){if(e.shadowRoot){let n;if(typeof this.filter=="function"?n=this.filter(e):this.filter?.acceptNode&&(n=this.filter.acceptNode(e)),n===NodeFilter.FILTER_ACCEPT)return this.currentNode=e,e;let l=this.nextNode();return l&&(this.currentNode=l),l}return e&&(this.currentNode=e),e}else if(this._walkerStack.length>1){this._walkerStack.shift();let t=this.nextNode();return t&&(this.currentNode=t),t}else return null}previousNode(){const e=this._walkerStack[0];if(e.currentNode===e.root){if(this._currentSetFor.has(e))if(this._currentSetFor.delete(e),this._walkerStack.length>1){this._walkerStack.shift();let n=this.previousNode();return n&&(this.currentNode=n),n}else return null;return null}const t=e.previousNode();if(t){if(t.shadowRoot){let l;if(typeof this.filter=="function"?l=this.filter(t):this.filter?.acceptNode&&(l=this.filter.acceptNode(t)),l===NodeFilter.FILTER_ACCEPT)return t&&(this.currentNode=t),t;let i=this.lastChild();return i&&(this.currentNode=i),i}return t&&(this.currentNode=t),t}else if(this._walkerStack.length>1){this._walkerStack.shift();let n=this.previousNode();return n&&(this.currentNode=n),n}else return null}nextSibling(){return null}previousSibling(){return null}parentNode(){return null}}function bl(r,e,t,n){return Je()?new js(r,e,t,n):r.createTreeWalker(e,t,n)}function un(r,e){const t=a.useRef(!0),n=a.useRef(null);Y(()=>(t.current=!0,()=>{t.current=!1}),[]),Y(()=>{t.current?t.current=!1:(!n.current||e.some((l,i)=>!Object.is(l,n[i])))&&r(),n.current=e},e)}function Os(){return typeof window.ResizeObserver<"u"}function Vt(r){const{ref:e,box:t,onResize:n}=r;let l=Fe(n);a.useEffect(()=>{let i=e?.current;if(i)if(Os()){const s=new window.ResizeObserver(o=>{o.length&&l()});return s.observe(i,{box:t}),()=>{i&&s.unobserve(i)}}else return window.addEventListener("resize",l,!1),()=>{window.removeEventListener("resize",l,!1)}},[e,t])}function at(r,e){if(!r)return!1;let t=window.getComputedStyle(r),n=document.scrollingElement||document.documentElement,l=/(auto|scroll)/.test(t.overflow+t.overflowX+t.overflowY);return r===n&&t.overflow!=="hidden"&&(l=!0),l&&e&&(l=r.scrollHeight!==r.clientHeight||r.scrollWidth!==r.clientWidth),l}function Or(r,e){let t=r;for(at(t,e)&&(t=t.parentElement);t&&!at(t,e);)t=t.parentElement;return t||document.scrollingElement||document.documentElement}function rr(r,e){let t=[],n=document.scrollingElement||document.documentElement;for(;r&&(at(r,e)&&t.push(r),r!==n);)r=r.parentElement;return t}function ht(r){return Nt()?r.metaKey:r.ctrlKey}const _s=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function nr(r){return r instanceof HTMLInputElement&&!_s.has(r.type)||r instanceof HTMLTextAreaElement||r instanceof HTMLElement&&r.isContentEditable}let Zs=0;const lr=new Map;function Bs(r){let[e,t]=a.useState();return Y(()=>{if(!r)return;let n=lr.get(r);if(n)t(n.element.id);else{let l=`react-aria-description-${Zs++}`;t(l);let i=document.createElement("div");i.id=l,i.style.display="none",i.textContent=r,document.body.appendChild(i),n={refCount:0,element:i},lr.set(r,n)}return n.refCount++,()=>{n&&--n.refCount===0&&(n.element.remove(),lr.delete(r))}},[r]),{"aria-describedby":r?e:void 0}}function mt(r,e,t,n){let l=Fe(t),i=t==null;a.useEffect(()=>{if(!(i||r.current==null))return et(r.current,e,l,n)},[r,e,n,i])}function Dt(r,e,t={}){if(r===e)return;let n=e.getBoundingClientRect();zs(r,e,n,t)}function zs(r,e,t,n={}){let{block:l="nearest",inline:i="nearest"}=n,s=r.scrollTop,o=r.scrollLeft,c=r.getBoundingClientRect(),u=window.getComputedStyle(e),f=window.getComputedStyle(r),d=document.scrollingElement||document.documentElement,p=r===d,g=r===d?0:c.top,b=r===d?r.clientHeight:c.bottom,y=r===d?0:c.left,m=r===d?r.clientWidth:c.right,v=parseFloat(u.scrollMarginTop)||0,$=parseFloat(u.scrollMarginBottom)||0,w=parseFloat(u.scrollMarginLeft)||0,S=parseFloat(u.scrollMarginRight)||0,K=parseFloat(f.scrollPaddingTop)||0,T=parseFloat(f.scrollPaddingBottom)||0,C=parseFloat(f.scrollPaddingLeft)||0,F=parseFloat(f.scrollPaddingRight)||0,_=parseFloat(f.borderTopWidth)||0,j=parseFloat(f.borderBottomWidth)||0,N=parseFloat(f.borderLeftWidth)||0,H=parseFloat(f.borderRightWidth)||0,D=t.top-v,M=t.bottom+$,L=t.left-w,O=t.right+S,I=r===d?0:N+H,X=r===d?0:_+j,ne=r===d?0:r.offsetWidth-r.clientWidth-I,te=r===d?0:r.offsetHeight-r.clientHeight-X,U=g+(p?0:_)+K,A=b-(p?0:j)-T-te,P=y+(p?0:N)+C,V=m-(p?0:H)-F;kr()&&Lr()||f.direction==="ltr"?V-=ne:f.direction==="rtl"&&(P+=ne);let E=DA,Z=LV;if(E&&l==="start")s+=D-U;else if(E&&l==="center")s+=(D+M)/2-(U+A)/2;else if(E&&l==="end")s+=M-A;else if(E&&l==="nearest"){let q=D-U,pe=M-A;s+=Math.abs(q)<=Math.abs(pe)?q:pe}if(Z&&i==="start")o+=L-P;else if(Z&&i==="center")o+=(L+O)/2-(P+V)/2;else if(Z&&i==="end")o+=O-V;else if(Z&&i==="nearest"){let q=L-P,pe=O-V;o+=Math.abs(q)<=Math.abs(pe)?q:pe}r.scrollTo({left:o,top:s})}function dn(r,e={}){let{containingElement:t}=e;if(r&&r.isConnected){let n=document.scrollingElement||document.documentElement;if(window.getComputedStyle(n).overflow==="hidden"){let{left:i,top:s}=r.getBoundingClientRect(),o=rr(r,!0);for(let f of o)Dt(f,r);let{left:c,top:u}=r.getBoundingClientRect();if(Math.abs(i-c)>1||Math.abs(s-u)>1){o=t?rr(t,!0):[];for(let f of o)Dt(f,t,{block:"center",inline:"center"});for(let f of rr(r,!0))Dt(f,r)}}else{let{left:i,top:s}=r.getBoundingClientRect();r?.scrollIntoView?.({block:"nearest"});let{left:o,top:c}=r.getBoundingClientRect();(Math.abs(i-o)>1||Math.abs(s-c)>1)&&(t?.scrollIntoView?.({block:"center",inline:"center"}),r.scrollIntoView?.({block:"nearest"}))}}}function Us(r,e){let{collection:t,onLoadMore:n,scrollOffset:l=1,direction:i="end"}=r,s=a.useRef(null),o=Fe(c=>{for(let u of c)u.isIntersecting&&n&&n()});Y(()=>{if(e.current){const c=100*l,u=i==="start"?`${c}% 0px 0px 0px`:`0px ${c}% ${c}% ${c}%`;s.current=new IntersectionObserver(o,{root:Or(e?.current),rootMargin:u}),s.current.observe(e.current)}return()=>{s.current&&s.current.disconnect()}},[t,e,l,i])}function gr(r){const e=a.version.split(".");return parseInt(e[0],10)>=19?r:r?"true":void 0}function _r(r,e=!0){let[t,n]=a.useState(!0),l=t&&e;return Y(()=>{if(l&&r.current&&"getAnimations"in r.current)for(let i of r.current.getAnimations())i instanceof CSSTransition&&i.cancel()},[r,l]),yl(r,l,a.useCallback(()=>n(!1),[])),l}function Zr(r,e){let[t,n]=a.useState(e?"open":"closed");switch(t){case"open":e||n("exiting");break;case"closed":case"exiting":e&&n("open");break}let l=t==="exiting";return yl(r,l,a.useCallback(()=>{n(i=>i==="exiting"?"closed":i)},[])),l}function yl(r,e,t){Y(()=>{if(e&&r.current){if(!("getAnimations"in r.current)){t();return}let n=r.current.getAnimations();if(n.length===0){t();return}let l=!1;return Promise.allSettled(n.map(i=>i.finished)).then(()=>{l||rt.flushSync(()=>{t()})}),()=>{l=!0}}},[r,e,t])}const Ws=a.createContext({}),qs="__avatar_group_child",Gs=Ae({defaultVariants:{color:"default",size:"md"},slots:{base:"avatar",fallback:"avatar__fallback",image:"avatar__image"},variants:{color:{accent:{fallback:"avatar__fallback--accent"},danger:{fallback:"avatar__fallback--danger"},default:{fallback:"avatar__fallback--default"},success:{fallback:"avatar__fallback--success"},warning:{fallback:"avatar__fallback--warning"}},size:{lg:{base:"avatar--lg"},md:{base:"avatar--md"},sm:{base:"avatar--sm"}},variant:{default:{},soft:{base:"avatar--soft"}}}}),Ys=Ae({slots:{menu:"dropdown__menu",popover:"dropdown__popover",root:"dropdown",trigger:"dropdown__trigger"}}),Xs=Ae({defaultVariants:{variant:"default"},slots:{indicator:"menu-item__indicator",item:"menu-item",submenuIndicator:"menu-item__indicator menu-item__indicator--submenu"},variants:{variant:{danger:{item:"menu-item--danger"},default:{item:"menu-item--default"}}}}),Js=Ae({base:"menu-section"}),Qs=Ae({defaultVariants:{color:"accent",size:"md"},slots:{base:"progress-bar",fill:"progress-bar__fill",output:"progress-bar__output",track:"progress-bar__track"},variants:{color:{accent:{base:"progress-bar--accent"},danger:{base:"progress-bar--danger"},default:{base:"progress-bar--default"},success:{base:"progress-bar--success"},warning:{base:"progress-bar--warning"}},size:{lg:{base:"progress-bar--lg"},md:{base:"progress-bar--md"},sm:{base:"progress-bar--sm"}}}}),eo=Ae({defaultVariants:{hideScrollBar:!1,orientation:"vertical",variant:"fade"},slots:{base:"scroll-shadow"},variants:{hideScrollBar:{false:{},true:{base:"scroll-shadow--hide-scrollbar"}},orientation:{horizontal:{base:"scroll-shadow--horizontal"},vertical:{base:"scroll-shadow--vertical"}},variant:{fade:{base:"scroll-shadow--fade"}}}}),to=Ae({slots:{base:"slider",fill:"slider__fill",marks:"slider__marks",output:"slider__output",thumb:"slider__thumb",track:"slider__track"}}),ro=Ae({defaultVariants:{align:"center",variant:"primary"},slots:{base:"tabs",scrollNext:"tabs__list-container__scroll-next",scrollPrev:"tabs__list-container__scroll-prev",scroller:"tabs__list-container__scroller",separator:"tabs__separator",tab:"tabs__tab",tabIndicator:"tabs__indicator",tabList:"tabs__list",tabListContainer:"tabs__list-container",tabPanel:"tabs__panel"},variants:{align:{center:{},end:{base:"tabs--align-end"},start:{base:"tabs--align-start"}},variant:{primary:{},secondary:{base:"tabs--secondary"}}}}),no=Ae({base:"textarea",defaultVariants:{fullWidth:!1,variant:"primary"},variants:{fullWidth:{false:"",true:"textarea--full-width"},variant:{primary:"textarea--primary",secondary:"textarea--secondary"}}}),lo=Ae({slots:{base:"tooltip",trigger:"tooltip__trigger"}}),Br=a.createContext({placement:"bottom"}),ao=a.forwardRef(function(e,t){[e,t]=Se(e,t,Br);let n=e.placement,l={position:"absolute",transform:n==="top"||n==="bottom"?"translateX(-50%)":"translateY(-50%)"};n!=null&&(l[n]="100%");let i=fe({...e,defaultClassName:"react-aria-OverlayArrow",values:{placement:n}});i.style&&Object.keys(i.style).forEach(o=>i.style[o]===void 0&&delete i.style[o]);let s=se(e);return x.createElement(ae.div,{...s,...i,style:{...l,...i.style},ref:t,"data-placement":n})}),io=typeof HTMLElement<"u"&&"inert"in HTMLElement.prototype;function fn(r){return r.dataset.liveAnnouncer==="true"||r.dataset.reactAriaTopLayer!==void 0}let dt=new WeakMap,me=[];function so(r,e){let t=nt(r?.[0]),n=e instanceof t.Element?{root:e}:e,l=n?.root??document.body,i=n?.shouldUseInert&&io,s=new Set(r),o=new Set,c=m=>i&&m instanceof t.HTMLElement?m.inert:m.getAttribute("aria-hidden")==="true",u=(m,v)=>{i&&m instanceof t.HTMLElement?m.inert=v:v?m.setAttribute("aria-hidden","true"):(m.removeAttribute("aria-hidden"),m instanceof t.HTMLElement&&(m.inert=!1))},f=new Set;if(Je()){let m=l.getRootNode();for(let v of r){let $=v.getRootNode();for(;Xi($)&&$!==m;)f.add($),$=$.host.getRootNode()}}let d=m=>{for(let S of m.querySelectorAll("[data-live-announcer], [data-react-aria-top-layer]"))s.add(S);let v=S=>{if(o.has(S)||s.has(S)||S.parentElement&&o.has(S.parentElement)&&S.parentElement.getAttribute("role")!=="row")return NodeFilter.FILTER_REJECT;for(let K of s)if(re(S,K))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_ACCEPT},$=bl(ce(m),m,NodeFilter.SHOW_ELEMENT,{acceptNode:v}),w=v(m);if(w===NodeFilter.FILTER_ACCEPT&&p(m),w!==NodeFilter.FILTER_REJECT){let S=$.nextNode();for(;S!=null;)p(S),S=$.nextNode()}},p=m=>{let v=dt.get(m)??0;c(m)&&v===0||(v===0&&u(m,!0),o.add(m),dt.set(m,v+1))};me.length&&me[me.length-1].disconnect(),d(l);let g=new MutationObserver(m=>{for(let v of m)if(v.type==="childList"){if(v.target.isConnected&&![...s,...o].some($=>re($,v.target)))for(let $ of v.addedNodes)($ instanceof HTMLElement||$ instanceof SVGElement)&&fn($)?s.add($):$ instanceof Element&&d($);if(Je()){for(let $ of f)if(!$.isConnected){g.disconnect();break}}}});g.observe(l,{childList:!0,subtree:!0});let b=new Set;if(Je())for(let m of f){let v=new MutationObserver($=>{for(let w of $)if(w.type==="childList"){if(w.target.isConnected&&![...s,...o].some(S=>re(S,w.target)))for(let S of w.addedNodes)(S instanceof HTMLElement||S instanceof SVGElement)&&fn(S)?s.add(S):S instanceof Element&&d(S);if(Je()){for(let S of f)if(!S.isConnected){g.disconnect();break}}}});v.observe(m,{childList:!0,subtree:!0}),b.add(v)}let y={visibleNodes:s,hiddenNodes:o,observe(){g.observe(l,{childList:!0,subtree:!0})},disconnect(){g.disconnect()}};return me.push(y),()=>{if(g.disconnect(),Je())for(let m of b)m.disconnect();for(let m of o){let v=dt.get(m);v!=null&&(v===1?(u(m,!1),dt.delete(m)):dt.set(m,v-1))}y===me[me.length-1]?(me.pop(),me.length&&me[me.length-1].observe()):me.splice(me.indexOf(y),1)}}function oo(r){let e=me[me.length-1];if(e&&!e.visibleNodes.has(r))return e.visibleNodes.add(r),()=>{e.visibleNodes.delete(r)}}const be={top:"top",bottom:"top",left:"left",right:"left"},Ht={top:"bottom",bottom:"top",left:"right",right:"left"},co={top:"left",left:"top"},br={top:"height",left:"width"},vl={width:"totalWidth",height:"totalHeight"},At={};let uo=()=>typeof document<"u"?window.visualViewport:null;function hn(r,e){let t=0,n=0,l=0,i=0,s=0,o=0,c={},u=(e?.scale??1)>1;if(r.tagName==="BODY"||r.tagName==="HTML"){let f=document.documentElement;l=f.clientWidth,i=f.clientHeight,t=e?.width??l,n=e?.height??i,c.top=f.scrollTop||r.scrollTop,c.left=f.scrollLeft||r.scrollLeft,e&&(s=Math.max(0,e.pageTop-(c.top??0)),o=Math.max(0,e.pageLeft-(c.left??0)))}else({width:t,height:n,top:s,left:o}=vt(r,!1)),c.top=r.scrollTop,c.left=r.scrollLeft,l=t,i=n;return Lr()&&(r.tagName==="BODY"||r.tagName==="HTML")&&u&&(c.top=0,c.left=0,s=e?.pageTop??0,o=e?.pageLeft??0),{width:t,height:n,totalWidth:l,totalHeight:i,scroll:c,top:s,left:o}}function fo(r){return{top:r.scrollTop,left:r.scrollLeft,width:r.scrollWidth,height:r.scrollHeight}}function mn(r,e,t,n,l,i,s){let o=l.scroll[r]??0,c=n[br[r]],u=s[r]+n.scroll[be[r]]+i,f=s[r]+n.scroll[be[r]]+c-i,d=e-o+n.scroll[be[r]]+s[r]-n[be[r]],p=e-o+t+n.scroll[be[r]]+s[r]-n[be[r]];return df?Math.max(f-p,u-d):0}function ho(r){let e=window.getComputedStyle(r);return{top:parseInt(e.marginTop,10)||0,bottom:parseInt(e.marginBottom,10)||0,left:parseInt(e.marginLeft,10)||0,right:parseInt(e.marginRight,10)||0}}function pn(r){if(At[r])return At[r];let[e,t]=r.split(" "),n=be[e]||"right",l=co[n];be[t]||(t="center");let i=br[n],s=br[l];return At[r]={placement:e,crossPlacement:t,axis:n,crossAxis:l,size:i,crossSize:s},At[r]}function ar(r,e,t,n,l,i,s,o,c,u,f){let{placement:d,crossPlacement:p,axis:g,crossAxis:b,size:y,crossSize:m}=n,v={};v[b]=r[b]??0,p==="center"?v[b]+=((r[m]??0)-(t[m]??0))/2:p!==b&&(v[b]+=(r[m]??0)-(t[m]??0)),v[b]+=i;const $=r[b]-t[m]+c+u,w=r[b]+r[m]-c-u;if(v[b]=lt(v[b],$,w),d===g){let S=o?f[y]:f[vl[y]];v[Ht[g]]=Math.floor(S-r[g]+l)}else v[g]=Math.floor(r[g]+r[y]+l);return v}function mo(r,e,t,n,l,i,s,o,c,u,f){let d=(r.top!=null?r.top:c[vl.height]-(r.bottom??0)-s)-(c.scroll.top??0),p=u?t.top:0,g={top:Math.max(e.top+p,(f?.offsetTop??e.top)+p),bottom:Math.min(e.top+e.height+p,(f?.offsetTop??0)+(f?.height??0))};return o!=="top"?Math.max(0,g.bottom-d-((l.top??0)+(l.bottom??0)+i)):Math.max(0,d+s-g.top-((l.top??0)+(l.bottom??0)+i))}function gn(r,e,t,n,l,i,s,o){let{placement:c,axis:u,size:f}=i;return c===u?Math.max(0,t[u]-(s.scroll[u]??0)-(r[u]+(o?e[u]:0))-(n[u]??0)-n[Ht[u]]-l):Math.max(0,r[f]+r[u]+(o?e[u]:0)-t[u]-t[f]+(s.scroll[u]??0)-(n[u]??0)-n[Ht[u]]-l)}function po(r,e,t,n,l,i,s,o,c,u,f,d,p,g,b,y,m,v){let $=pn(r),{size:w,crossAxis:S,crossSize:K,placement:T,crossPlacement:C}=$,F=ar(e,o,t,$,f,d,u,p,b,y,c),_=f,j=gn(o,u,e,l,i+f,$,c,m);if(s&&t[w]>j){let E=pn(`${Ht[T]} ${C}`),Z=ar(e,o,t,E,f,d,u,p,b,y,c);gn(o,u,e,l,i+f,E,c,m)>j&&($=E,F=Z,_=f)}let N="bottom";$.axis==="top"?$.placement==="top"?N="top":$.placement==="bottom"&&(N="bottom"):$.crossAxis==="top"&&($.crossPlacement==="top"?N="bottom":$.crossPlacement==="bottom"&&(N="top"));let H=mn(S,F[S],t[K],o,c,i,u);F[S]+=H;let D=mo(F,o,u,p,l,i,t.height,N,c,m,v);g&&g{if(!t||n===null)return;let l=i=>{let s=z(i);if(!e.current||s instanceof Node&&!re(s,e.current)||s instanceof HTMLInputElement||s instanceof HTMLTextAreaElement)return;let o=n||$l.get(e.current);o&&o()};return et(rl(e.current),"scroll",l,!0)},[t,n,e])}let He=typeof document<"u"?window.visualViewport:null;function xl(r){let{direction:e}=Ne(),{arrowSize:t,targetRef:n,overlayRef:l,arrowRef:i,scrollRef:s=l,placement:o="bottom",containerPadding:c=12,shouldFlip:u=!0,boundaryElement:f=typeof document<"u"?document.body:null,offset:d=0,crossOffset:p=0,shouldUpdatePosition:g=!0,isOpen:b=!0,onClose:y,maxHeight:m,arrowBoundaryOffset:v=0,getTargetRect:$}=r,[w,S]=a.useState(null),K=[g,o,l.current,n.current,i?.current,s.current,c,u,f,d,p,b,e,m,v,t],T=a.useRef(He?.scale);a.useEffect(()=>{b&&(T.current=He?.scale)},[b]);let C=a.useCallback(()=>{if(g===!1||!b||!l.current||!n.current||!f||He?.scale!==T.current)return;let j=null;if(s.current&&Ze(s.current)){let M=le()?.getBoundingClientRect(),L=s.current.getBoundingClientRect();j={type:"top",offset:(M?.top??0)-L.top},j.offset>L.height/2&&(j.type="bottom",j.offset=(M?.bottom??0)-L.bottom)}let N=l.current;!m&&l.current&&(N.style.top="0px",N.style.bottom="",N.style.maxHeight=(window.visualViewport?.height??window.innerHeight)+"px");let H=go({placement:$o(o,e),overlayNode:l.current,targetNode:n.current,scrollNode:s.current||l.current,padding:c,shouldFlip:u,boundaryElement:f,offset:d,crossOffset:p,maxHeight:m,arrowSize:t??(i?.current?Gt(i.current,!0).width:0),arrowBoundaryOffset:v,targetRect:$?.(n.current)});if(!H.position)return;N.style.top="",N.style.bottom="",N.style.left="",N.style.right="",Object.keys(H.position).forEach(M=>N.style[M]=H.position[M]+"px"),N.style.maxHeight=H.maxHeight!=null?H.maxHeight+"px":"";let D=le();if(j&&D&&s.current){let M=D.getBoundingClientRect(),L=s.current.getBoundingClientRect(),O=M[j.type]-L[j.type];s.current.scrollTop+=O-j.offset}S(H)},K);Y(C,K),vo(C),Vt({ref:l,onResize:C}),Vt({ref:n,onResize:C});let F=a.useRef(!1);Y(()=>{let j,N=()=>{F.current=!0,clearTimeout(j),j=setTimeout(()=>{F.current=!1},500),C()},H=()=>{F.current&&N()};He?.addEventListener("resize",N),He?.addEventListener("scroll",H);let D=et(rl(window),"scroll",H);return()=>{He?.removeEventListener("resize",N),He?.removeEventListener("scroll",H),D()}},[C]);let _=a.useCallback(()=>{F.current||y?.()},[y,F]);return yo({triggerRef:n,isOpen:b,onClose:y&&_}),{overlayProps:{style:{position:w?"absolute":"fixed",top:w?void 0:0,left:w?void 0:0,zIndex:1e5,...w?.position,maxHeight:w?.maxHeight??"100vh"}},placement:w?.placement??null,triggerAnchorPoint:w?.triggerAnchorPoint??null,arrowProps:{"aria-hidden":"true",role:"presentation",style:{left:w?.arrowOffsetLeft,top:w?.arrowOffsetTop}},updatePosition:C}}function vo(r){Y(()=>(window.addEventListener("resize",r,!1),()=>{window.removeEventListener("resize",r,!1)}),[r])}function $o(r,e){return e==="rtl"?r.replace("start","right").replace("end","left"):r.replace("start","left").replace("end","right")}const vn=x.createContext(null),yr="react-aria-focus-scope-restore";let G=null;function El(r){let{children:e,contain:t,restoreFocus:n,autoFocus:l}=r,i=a.useRef(null),s=a.useRef(null),o=a.useRef([]),{parentNode:c}=a.useContext(vn)||{},u=a.useMemo(()=>new $r({scopeRef:o}),[o]);Y(()=>{let p=c||ee.root;if(ee.getTreeNode(p.scopeRef)&&G&&!jt(G,p.scopeRef)){let g=ee.getTreeNode(G);g&&(p=g)}p.addChild(u),ee.addNode(u)},[u,c]),Y(()=>{let p=ee.getTreeNode(o);p&&(p.contain=!!t)},[t]),Y(()=>{let p=i.current?.nextSibling,g=[],b=y=>y.stopPropagation();for(;p&&p!==s.current;)g.push(p),p.addEventListener(yr,b),p=p.nextSibling;return o.current=g,()=>{for(let y of g)y.removeEventListener(yr,b)}},[e]),Mo(o,n,t),wo(o,t),Ao(o,n,t),Co(o,l),a.useEffect(()=>{const p=le(ce(o.current?o.current[0]:void 0));let g=null;if(ve(p,o.current)){for(let b of ee.traverse())b.scopeRef&&ve(p,b.scopeRef.current)&&(g=b);g===ee.getTreeNode(o)&&(G=g.scopeRef)}},[o]),Y(()=>()=>{let p=ee.getTreeNode(o)?.parent?.scopeRef??null;(o===G||jt(o,G))&&(!p||ee.getTreeNode(p))&&(G=p),ee.removeTreeNode(o)},[o]);let f=a.useMemo(()=>xo(o),[]),d=a.useMemo(()=>({focusManager:f,parentNode:u}),[u,f]);return x.createElement(vn.Provider,{value:d},x.createElement("span",{"data-focus-scope-start":!0,hidden:!0,ref:i}),e,x.createElement("span",{"data-focus-scope-end":!0,hidden:!0,ref:s}))}function xo(r){return{focusNext(e={}){let t=r.current,{from:n,tabbable:l,wrap:i,accept:s}=e,o=n||le(ce(t[0]??void 0)),c=t[0].previousElementSibling,u=_e(t),f=Me(u,{tabbable:l,accept:s},t);f.currentNode=ve(o,t)?o:c;let d=f.nextNode();return!d&&i&&(f.currentNode=c,d=f.nextNode()),d&&Ee(d,!0),d},focusPrevious(e={}){let t=r.current,{from:n,tabbable:l,wrap:i,accept:s}=e,o=n||le(ce(t[0]??void 0)),c=t[t.length-1].nextElementSibling,u=_e(t),f=Me(u,{tabbable:l,accept:s},t);f.currentNode=ve(o,t)?o:c;let d=f.previousNode();return!d&&i&&(f.currentNode=c,d=f.previousNode()),d&&Ee(d,!0),d},focusFirst(e={}){let t=r.current,{tabbable:n,accept:l}=e,i=_e(t),s=Me(i,{tabbable:n,accept:l},t);s.currentNode=t[0].previousElementSibling;let o=s.nextNode();return o&&Ee(o,!0),o},focusLast(e={}){let t=r.current,{tabbable:n,accept:l}=e,i=_e(t),s=Me(i,{tabbable:n,accept:l},t);s.currentNode=t[t.length-1].nextElementSibling;let o=s.previousNode();return o&&Ee(o,!0),o}}}function _e(r){return r[0].parentElement}function pt(r){let e=ee.getTreeNode(G);for(;e&&e.scopeRef!==r;){if(e.contain)return!1;e=e.parent}return!0}function Eo(r){if(!r.form)return Array.from(ce(r).querySelectorAll(`input[type="radio"][name="${CSS.escape(r.name)}"]`)).filter(n=>!n.form);const e=r.form.elements.namedItem(r.name);let t=nt(r);return e instanceof t.RadioNodeList?Array.from(e).filter(n=>n instanceof t.HTMLInputElement):e instanceof t.HTMLInputElement?[e]:[]}function So(r){if(r.checked)return!0;const e=Eo(r);return e.length>0&&!e.some(t=>t.checked)}function wo(r,e){let t=a.useRef(void 0),n=a.useRef(void 0);Y(()=>{let l=r.current;if(!e){n.current&&(cancelAnimationFrame(n.current),n.current=void 0);return}const i=ce(l?l[0]:void 0);let s=u=>{if(u.key!=="Tab"||u.altKey||u.ctrlKey||u.metaKey||!pt(r)||u.isComposing)return;let f=le(i),d=r.current;if(!d||!ve(f,d))return;let p=_e(d),g=Me(p,{tabbable:!0},d);if(!f)return;g.currentNode=f;let b=u.shiftKey?g.previousNode():g.nextNode();b||(g.currentNode=u.shiftKey?d[d.length-1].nextElementSibling:d[0].previousElementSibling,b=u.shiftKey?g.previousNode():g.nextNode()),u.preventDefault(),b&&(Ee(b,!0),b instanceof nt(b).HTMLInputElement&&b.select())},o=u=>{(!G||jt(G,r))&&ve(z(u),r.current)?(G=r,t.current=z(u)):pt(r)&&!Le(z(u),r)?t.current?Ee(t.current):G&&G.current&&vr(G.current):pt(r)&&(t.current=z(u))},c=u=>{n.current&&cancelAnimationFrame(n.current),n.current=requestAnimationFrame(()=>{let f=yt(),d=(f==="virtual"||f===null)&&Ji()&&Qi(),p=le(i);if(!d&&p&&pt(r)&&!Le(p,r)){G=r;let g=z(u);g&&g.isConnected?(t.current=g,Ee(t.current)):G.current&&vr(G.current)}})};return i.addEventListener("keydown",s,!1),i.addEventListener("focusin",o,!1),l?.forEach(u=>u.addEventListener("focusin",o,!1)),l?.forEach(u=>u.addEventListener("focusout",c,!1)),()=>{i.removeEventListener("keydown",s,!1),i.removeEventListener("focusin",o,!1),l?.forEach(u=>u.removeEventListener("focusin",o,!1)),l?.forEach(u=>u.removeEventListener("focusout",c,!1))}},[r,e]),Y(()=>()=>{n.current&&cancelAnimationFrame(n.current)},[n])}function Sl(r){return Le(r)}function ve(r,e){return!r||!e?!1:e.some(t=>re(t,r))}function Le(r,e=null){if(r instanceof Element&&r.closest("[data-react-aria-top-layer]"))return!0;for(let{scopeRef:t}of ee.traverse(ee.getTreeNode(e)))if(t&&ve(r,t.current))return!0;return!1}function Po(r){return Le(r,G)}function jt(r,e){let t=ee.getTreeNode(e)?.parent;for(;t;){if(t.scopeRef===r)return!0;t=t.parent}return!1}function Ee(r,e=!1){if(r!=null&&!e)try{bt(r)}catch{}else if(r!=null)try{r.focus()}catch{}}function wl(r,e=!0){let t=r[0].previousElementSibling,n=_e(r),l=Me(n,{tabbable:e},r);l.currentNode=t;let i=l.nextNode();return e&&!i&&(n=_e(r),l=Me(n,{tabbable:!1},r),l.currentNode=t,i=l.nextNode()),i}function vr(r,e=!0){Ee(wl(r,e))}function Co(r,e){const t=x.useRef(e);a.useEffect(()=>{if(t.current){G=r;const n=ce(r.current?r.current[0]:void 0);!ve(le(n),G.current)&&r.current&&vr(r.current)}t.current=!1},[r])}function Mo(r,e,t){Y(()=>{if(e||t)return;let n=r.current;const l=ce(n?n[0]:void 0);let i=s=>{let o=z(s);ve(o,r.current)?G=r:Sl(o)||(G=null)};return l.addEventListener("focusin",i,!1),n?.forEach(s=>s.addEventListener("focusin",i,!1)),()=>{l.removeEventListener("focusin",i,!1),n?.forEach(s=>s.removeEventListener("focusin",i,!1))}},[r,e,t])}function $n(r){let e=ee.getTreeNode(G);for(;e&&e.scopeRef!==r;){if(e.nodeToRestore)return!1;e=e.parent}return e?.scopeRef===r}function Ao(r,e,t){const n=a.useRef(typeof document<"u"?le(ce(r.current?r.current[0]:void 0)):null);Y(()=>{let l=r.current;const i=ce(l?l[0]:void 0);if(!e||t)return;let s=()=>{(!G||jt(G,r))&&ve(le(i),r.current)&&(G=r)};return i.addEventListener("focusin",s,!1),l?.forEach(o=>o.addEventListener("focusin",s,!1)),()=>{i.removeEventListener("focusin",s,!1),l?.forEach(o=>o.removeEventListener("focusin",s,!1))}},[r,t]),Y(()=>{const l=ce(r.current?r.current[0]:void 0);if(!e)return;let i=s=>{if(s.key!=="Tab"||s.altKey||s.ctrlKey||s.metaKey||!pt(r)||s.isComposing)return;let o=l.activeElement;if(!Le(o,r)||!$n(r))return;let c=ee.getTreeNode(r);if(!c)return;let u=c.nodeToRestore,f=Me(l.body,{tabbable:!0});f.currentNode=o;let d=s.shiftKey?f.previousNode():f.nextNode();if((!u||!u.isConnected||u===l.body)&&(u=void 0,c.nodeToRestore=void 0),(!d||!Le(d,r))&&u){f.currentNode=u;do d=s.shiftKey?f.previousNode():f.nextNode();while(Le(d,r));s.preventDefault(),s.stopPropagation(),d?Ee(d,!0):Sl(u)?Ee(u,!0):o.blur()}};return t||l.addEventListener("keydown",i,!0),()=>{t||l.removeEventListener("keydown",i,!0)}},[r,e,t]),Y(()=>{const l=ce(r.current?r.current[0]:void 0);if(!e)return;let i=ee.getTreeNode(r);if(i)return i.nodeToRestore=n.current??void 0,()=>{let s=ee.getTreeNode(r);if(!s)return;let o=s.nodeToRestore,c=le(l);if(e&&o&&(c&&Le(c,r)||c===l.body&&$n(r))){let u=ee.clone();requestAnimationFrame(()=>{if(l.activeElement===l.body){let f=u.getTreeNode(r);for(;f;){if(f.nodeToRestore&&f.nodeToRestore.isConnected){xn(f.nodeToRestore);return}f=f.parent}for(f=u.getTreeNode(r);f;){if(f.scopeRef&&f.scopeRef.current&&ee.getTreeNode(f.scopeRef)){let d=wl(f.scopeRef.current,!0);if(d){xn(d);return}}f=f.parent}}})}}},[r,e])}function xn(r){r.dispatchEvent(new CustomEvent(yr,{bubbles:!0,cancelable:!0}))&&Ee(r)}function Me(r,e,t){let n=e?.tabbable?Fr:es,l=r?.nodeType===Node.ELEMENT_NODE?r:null,i=ce(l),s=bl(i,r||i,NodeFilter.SHOW_ELEMENT,{acceptNode(o){return re(e?.from,o)||e?.tabbable&&o.tagName==="INPUT"&&o.getAttribute("type")==="radio"&&(!So(o)||s.currentNode.tagName==="INPUT"&&s.currentNode.type==="radio"&&s.currentNode.name===o.name)?NodeFilter.FILTER_REJECT:n(o)&&(!t||ve(o,t))&&(!e?.accept||e.accept(o))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});return e?.from&&(s.currentNode=e.from),s}class zr{constructor(){this.fastMap=new Map,this.root=new $r({scopeRef:null}),this.fastMap.set(null,this.root)}get size(){return this.fastMap.size}getTreeNode(e){return this.fastMap.get(e)}addTreeNode(e,t,n){let l=this.fastMap.get(t??null);if(!l)return;let i=new $r({scopeRef:e});l.addChild(i),i.parent=l,this.fastMap.set(e,i),n&&(i.nodeToRestore=n)}addNode(e){this.fastMap.set(e.scopeRef,e)}removeTreeNode(e){if(e===null)return;let t=this.fastMap.get(e);if(!t)return;let n=t.parent;for(let i of this.traverse())i!==t&&t.nodeToRestore&&i.nodeToRestore&&t.scopeRef&&t.scopeRef.current&&ve(i.nodeToRestore,t.scopeRef.current)&&(i.nodeToRestore=t.nodeToRestore);let l=t.children;n&&(n.removeChild(t),l.size>0&&l.forEach(i=>n&&n.addChild(i))),this.fastMap.delete(t.scopeRef)}*traverse(e=this.root){if(e.scopeRef!=null&&(yield e),e.children.size>0)for(let t of e.children)yield*this.traverse(t)}clone(){let e=new zr;for(let t of this.traverse())e.addTreeNode(t.scopeRef,t.parent?.scopeRef??null,t.nodeToRestore);return e}}class $r{constructor(e){this.children=new Set,this.contain=!1,this.scopeRef=e.scopeRef}addChild(e){this.children.add(e),e.parent=this}removeChild(e){this.children.delete(e),e.parent=void 0}}let ee=new zr;function Ko(r){let{ref:e,onInteractOutside:t,isDisabled:n,onInteractOutsideStart:l}=r,i=a.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}),s=Fe(c=>{t&&En(c,e)&&(l&&l(c),i.current.isPointerDown=!0)}),o=Fe(c=>{t&&t(c)});a.useEffect(()=>{let c=i.current;if(n)return;const u=e.current,f=ce(u);if(typeof PointerEvent<"u"){let d=p=>{c.isPointerDown&&En(p,e)&&o(p),c.isPointerDown=!1};return f.addEventListener("pointerdown",s,!0),f.addEventListener("click",d,!0),()=>{f.removeEventListener("pointerdown",s,!0),f.removeEventListener("click",d,!0)}}},[e,n])}function En(r,e){if(r.button>0)return!1;let t=z(r);if(t){const n=t.ownerDocument;if(!n||!re(n.documentElement,t)||t.closest("[data-react-aria-top-layer]"))return!1}return e.current?!r.composedPath().includes(e.current):!1}const Pe=[];function To(r,e){let{onClose:t,shouldCloseOnBlur:n,isOpen:l,isDismissable:i=!1,isKeyboardDismissDisabled:s=!1,shouldCloseOnInteractOutside:o}=r,c=a.useRef(void 0);a.useEffect(()=>{if(l&&!Pe.includes(e))return Pe.push(e),()=>{let b=Pe.indexOf(e);b>=0&&Pe.splice(b,1)}},[l,e]);let u=()=>{Pe[Pe.length-1]===e&&t&&t()},f=b=>{const y=Pe[Pe.length-1];c.current=y,(!o||o(z(b)))&&y===e&&b.stopPropagation()},d=b=>{(!o||o(z(b)))&&(Pe[Pe.length-1]===e&&b.stopPropagation(),c.current===e&&u()),c.current=void 0},{keyboardProps:p}=De({shortcuts:{Escape:()=>{if(!s){u();return}return!1}}});Ko({ref:e,onInteractOutside:i&&l?d:void 0,onInteractOutsideStart:f});let{focusWithinProps:g}=Dr({isDisabled:!n,onBlurWithin:b=>{!b.relatedTarget||Po(b.relatedTarget)||(!o||o(b.relatedTarget))&&t?.()}});return{overlayProps:{...p,...g},underlayProps:{}}}const gt=typeof document<"u"&&window.visualViewport;let Kt=0,ir;function Ro(r={}){let{isDisabled:e}=r;Y(()=>{if(!e)return Kt++,Kt===1&&(kr()&&Lr()?ir=Lo():ir=ko()),()=>{Kt--,Kt===0&&ir()}},[e])}function ko(){let r=window.innerWidth-document.documentElement.clientWidth;return Nr(r>0&&("scrollbarGutter"in document.documentElement.style?Lt(document.documentElement,"scrollbar-gutter","stable"):Lt(document.documentElement,"padding-right",`${r}px`)),Lt(document.documentElement,"overflow","hidden"))}function Lo(){let r=Lt(document.documentElement,"overflow","hidden"),e,t=!1,n=f=>{let d=z(f);e=at(d)?d:Or(d,!0),t=!1;let p=d.ownerDocument.defaultView.getSelection();p&&!p.isCollapsed&&p.containsNode(d,!0)&&(t=!0),f.composedPath().some(g=>g instanceof HTMLInputElement&&g.type==="range")&&(t=!0),"selectionStart"in d&&"selectionEnd"in d&&d.selectionStart{if(!(f.touches.length===2||t)){if(!e||e===document.documentElement||e===document.body){f.preventDefault();return}e.scrollHeight===e.clientHeight&&e.scrollWidth===e.clientWidth&&f.preventDefault()}},o=f=>{let d=z(f),p=f.relatedTarget;p&&nr(p)?(p.focus({preventScroll:!0}),Sn(p,nr(d))):p||d.parentElement?.closest("[tabindex]")?.focus({preventScroll:!0})},c=HTMLElement.prototype.focus;Reflect.defineProperty(HTMLElement.prototype,"focus",{configurable:!0,writable:!0,value:function(f){let d=le(),p=d!=null&&nr(d);c.call(this,{...f,preventScroll:!0}),(!f||!f.preventScroll)&&Sn(this,p)}});let u=Nr(et(document,"touchstart",n,{passive:!1,capture:!0}),et(document,"touchmove",s,{passive:!1,capture:!0}),et(document,"blur",o,!0));return()=>{r(),u(),l.remove(),Reflect.defineProperty(HTMLElement.prototype,"focus",{configurable:!0,writable:!0,value:c})}}function Sn(r,e){e||!gt?wn(r):gt.addEventListener("resize",()=>wn(r),{once:!0})}function wn(r){let e=document.scrollingElement||document.documentElement,t=r;for(;t&&t!==e;){let n=Or(t);if(n!==document.documentElement&&n!==document.body&&n!==t){let l=n.getBoundingClientRect(),i=t.getBoundingClientRect();if(i.topl.top+t.clientHeight){let s=l.bottom;gt&&(s=Math.min(s,gt.offsetTop+gt.height));let o=i.top-l.top-((s-l.top)/2-i.height/2);n.scrollTo({top:Math.max(0,Math.min(n.scrollHeight-n.clientHeight,n.scrollTop+o)),behavior:"smooth"})}}t=n.parentElement}}function Fo(r,e){let{triggerRef:t,popoverRef:n,groupRef:l,isNonModal:i,isKeyboardDismissDisabled:s,shouldCloseOnInteractOutside:o,...c}=r,u=c.trigger==="SubmenuTrigger",{overlayProps:f,underlayProps:d}=To({isOpen:e.isOpen,onClose:e.close,shouldCloseOnBlur:!0,isDismissable:!i||u,isKeyboardDismissDisabled:s,shouldCloseOnInteractOutside:o},l??n),{overlayProps:p,arrowProps:g,placement:b,triggerAnchorPoint:y}=xl({...c,targetRef:t,overlayRef:n,isOpen:e.isOpen,onClose:i&&!u?e.close:null,getTargetRect:c.getTargetRect??(e.point?()=>new DOMRect(e.point.x,e.point.y,0,0):void 0)});Ro({isDisabled:i||!e.isOpen}),a.useEffect(()=>{if(e.isOpen&&n.current)return i?oo(l?.current??n.current):so([l?.current??n.current],{shouldUseInert:!0})},[i,e.isOpen,n,l]);let{focusWithinProps:m}=Dr(r);return{popoverProps:B(f,p,m),arrowProps:g,underlayProps:d,placement:b,triggerAnchorPoint:y}}var Pl={};Pl={dismiss:"تجاهل"};var Cl={};Cl={dismiss:"Отхвърляне"};var Ml={};Ml={dismiss:"Odstranit"};var Al={};Al={dismiss:"Luk"};var Kl={};Kl={dismiss:"Schließen"};var Tl={};Tl={dismiss:"Απόρριψη"};var Rl={};Rl={dismiss:"Dismiss"};var kl={};kl={dismiss:"Descartar"};var Ll={};Ll={dismiss:"Lõpeta"};var Fl={};Fl={dismiss:"Hylkää"};var Dl={};Dl={dismiss:"Rejeter"};var Nl={};Nl={dismiss:"התעלם"};var Il={};Il={dismiss:"Odbaci"};var Vl={};Vl={dismiss:"Elutasítás"};var Hl={};Hl={dismiss:"Ignora"};var jl={};jl={dismiss:"閉じる"};var Ol={};Ol={dismiss:"무시"};var _l={};_l={dismiss:"Atmesti"};var Zl={};Zl={dismiss:"Nerādīt"};var Bl={};Bl={dismiss:"Lukk"};var zl={};zl={dismiss:"Negeren"};var Ul={};Ul={dismiss:"Zignoruj"};var Wl={};Wl={dismiss:"Descartar"};var ql={};ql={dismiss:"Dispensar"};var Gl={};Gl={dismiss:"Revocare"};var Yl={};Yl={dismiss:"Пропустить"};var Xl={};Xl={dismiss:"Zrušiť"};var Jl={};Jl={dismiss:"Opusti"};var Ql={};Ql={dismiss:"Odbaci"};var ea={};ea={dismiss:"Avvisa"};var ta={};ta={dismiss:"Kapat"};var ra={};ra={dismiss:"Скасувати"};var na={};na={dismiss:"取消"};var la={};la={dismiss:"關閉"};var aa={};aa={"ar-AE":Pl,"bg-BG":Cl,"cs-CZ":Ml,"da-DK":Al,"de-DE":Kl,"el-GR":Tl,"en-US":Rl,"es-ES":kl,"et-EE":Ll,"fi-FI":Fl,"fr-FR":Dl,"he-IL":Nl,"hr-HR":Il,"hu-HU":Vl,"it-IT":Hl,"ja-JP":jl,"ko-KR":Ol,"lt-LT":_l,"lv-LV":Zl,"nb-NO":Bl,"nl-NL":zl,"pl-PL":Ul,"pt-BR":Wl,"pt-PT":ql,"ro-RO":Gl,"ru-RU":Yl,"sk-SK":Xl,"sl-SI":Jl,"sr-SP":Ql,"sv-SE":ea,"tr-TR":ta,"uk-UA":ra,"zh-CN":na,"zh-TW":la};const Pn={border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"};function Do(r={}){let{style:e,isFocusable:t}=r,[n,l]=a.useState(!1),{focusWithinProps:i}=Dr({isDisabled:!t,onFocusWithinChange:o=>l(o)}),s=a.useMemo(()=>n?e:e?{...Pn,...e}:Pn,[n]);return{visuallyHiddenProps:{...i,style:s}}}function ia(r){let{children:e,elementType:t="div",isFocusable:n,style:l,...i}=r,{visuallyHiddenProps:s}=Do(r);return x.createElement(t,B(i,s),e)}function No(r){return r&&r.__esModule?r.default:r}function Cn(r){let{onDismiss:e,...t}=r,n=nl(No(aa),"@react-aria/overlays"),l=Ir(t,n.format("dismiss")),i=()=>{e&&e()};return x.createElement(ia,null,x.createElement("button",{...l,tabIndex:-1,onClick:i,style:{width:1,height:1}}))}const Io=x.forwardRef(({children:r,...e},t)=>{let n=a.useRef(!1),l=a.useContext(fr),i=B(l||{},{...e,register(){n.current=!0,l&&l.register()}});return i.ref=We(t||l?.ref),rs(l,i.ref),a.useEffect(()=>{n.current||(n.current=!0)},[]),x.createElement(fr.Provider,{value:i},r)});function Vo({children:r}){let e=a.useMemo(()=>({register:()=>{}}),[]);return x.createElement(fr.Provider,{value:e},r)}const Ho=x.createContext(null);function Mn(r){let e=zt(),{portalContainer:t=e?null:document.body,isExiting:n}=r,[l,i]=a.useState(!1),s=a.useMemo(()=>({contain:l,setContain:i}),[l,i]),{getContainer:o}=ll();if(!r.portalContainer&&o&&(t=o()),!t)return null;let c=r.children;return r.disableFocusManagement||(c=x.createElement(El,{restoreFocus:!0,contain:(r.shouldContainFocus||l)&&!n},c)),c=x.createElement(Ho.Provider,{value:s},x.createElement(Vo,null,x.createElement(hr.Provider,{value:null},c))),al.createPortal(c,t)}function Ur(r){let[e,t]=Et(r.isOpen,r.defaultOpen||!1,r.onOpenChange),[n,l]=a.useState(null);const i=a.useCallback(()=>{t(!0)},[t]),s=a.useCallback(()=>{t(!1)},[t]),o=a.useCallback(()=>{t(!e)},[t,e]);return{isOpen:e,setOpen:t,open:i,close:s,toggle:o,point:n,setPoint:l}}const Wr=a.createContext(null),An=a.createContext(null),jo=a.forwardRef(function(e,t){[e,t]=Se(e,t,Wr);let n=a.useContext(Qr),l=Ur(e),i=e.isOpen!=null||e.defaultOpen!=null||!n?l:n,s=Zr(t,i.isOpen),o=e.isExiting||!e.shouldSkipAnimation&&s||!1,c=il(),{direction:u}=Ne();if(c){let f=e.children;return typeof f=="function"&&(f=f({trigger:e.trigger||null,placement:"bottom",isEntering:!1,isExiting:!1,defaultChildren:null})),x.createElement(x.Fragment,null,f)}return i&&!i.isOpen&&!o?null:x.createElement(Oo,{...e,triggerRef:e.triggerRef,state:i,popoverRef:t,isExiting:o,dir:u})});function Oo({state:r,isExiting:e,UNSTABLE_portalContainer:t,clearContexts:n,...l}){let i=a.useRef(null),s=a.useRef(null),o=a.useContext(An),c=o&&l.trigger==="SubmenuTrigger",{popoverProps:u,underlayProps:f,arrowProps:d,placement:p,triggerAnchorPoint:g}=Fo({...l,offset:l.offset??8,arrowRef:i,groupRef:c?o:s},r),b=l.popoverRef,y=_r(b,!!p),m=l.isEntering||!l.shouldSkipAnimation&&y||!1,v=fe({...l,defaultClassName:"react-aria-Popover",values:{trigger:l.trigger||null,placement:p,isEntering:m,isExiting:e}}),$=!l.isNonModal||l.trigger==="SubmenuTrigger"||l.trigger==="PreviewTrigger",[w,S]=a.useState(l.trigger==="PreviewTrigger");Y(()=>{b.current&&S($&&!b.current.querySelector("[role=dialog]"))},[b,$]),a.useEffect(()=>{w&&l.trigger!=="PreviewTrigger"&&(l.trigger!=="SubmenuTrigger"||yt()!=="pointer")&&b.current&&!Ze(b.current)&&bt(b.current)},[w,b,l.trigger]);let K=a.useMemo(()=>{let N=v.children;if(n)for(let H of n)N=x.createElement(H.Provider,{value:null},N);return N},[v.children,n]),[T,C]=a.useState(null),F=a.useCallback(()=>{l.triggerRef.current&&C(l.triggerRef.current.getBoundingClientRect().width+"px")},[l.triggerRef]);Y(F,[F]),Vt({ref:v.style?.["--trigger-width"]?void 0:l.triggerRef,onResize:F});let _={...u.style,"--trigger-anchor-point":g?`${g.x}px ${g.y}px`:void 0,...v.style,"--trigger-width":v.style?.["--trigger-width"]||T},j=x.createElement(ae.div,{...B(se(l,{global:!0}),u),...v,id:w?l.id:void 0,role:w?"dialog":void 0,tabIndex:w?-1:void 0,"aria-label":l["aria-label"],"aria-labelledby":l["aria-labelledby"],ref:b,slot:l.slot||void 0,style:_,dir:l.dir,"data-trigger":l.trigger,"data-placement":p,"data-entering":m||void 0,"data-exiting":e||void 0},!l.isNonModal&&x.createElement(Cn,{onDismiss:r.close}),x.createElement(Br.Provider,{value:{...d,placement:p,ref:i}},K),x.createElement(Cn,{onDismiss:r.close}));return c?x.createElement(Mn,{...l,shouldContainFocus:w&&l.trigger!=="PreviewTrigger",isExiting:e,portalContainer:t??o?.current??void 0},j):x.createElement(Mn,{...l,shouldContainFocus:w&&l.trigger!=="PreviewTrigger",isExiting:e,portalContainer:t},!l.isNonModal&&r.isOpen&&x.createElement("div",{"data-testid":"underlay",...f,style:{position:"fixed",inset:0}}),x.createElement("div",{ref:s,style:{display:"contents"}},x.createElement(An.Provider,{value:s},j)))}class Ge{constructor(e){this.value=null,this.level=0,this.hasChildNodes=!1,this.rendered=null,this.textValue="",this["aria-label"]=void 0,this.index=0,this.parentKey=null,this.prevKey=null,this.nextKey=null,this.firstChildKey=null,this.lastChildKey=null,this.props={},this.colSpan=null,this.colIndex=null,this.type=this.constructor.type,this.key=e}get childNodes(){throw new Error("childNodes is not supported")}clone(){let e=new this.constructor(this.key);return e.value=this.value,e.level=this.level,e.hasChildNodes=this.hasChildNodes,e.rendered=this.rendered,e.textValue=this.textValue,e["aria-label"]=this["aria-label"],e.index=this.index,e.parentKey=this.parentKey,e.prevKey=this.prevKey,e.nextKey=this.nextKey,e.firstChildKey=this.firstChildKey,e.lastChildKey=this.lastChildKey,e.props=this.props,e.render=this.render,e.colSpan=this.colSpan,e.colIndex=this.colIndex,e}filter(e,t,n){let l=this.clone();return t.addDescendants(l,e),l}}class sa extends Ge{filter(e,t,n){let[l,i]=oa(e,t,this.firstChildKey,n),s=this.clone();return s.firstChildKey=l,s.lastChildKey=i,s}}class f0 extends Ge{static{this.type="header"}}class _o extends Ge{static{this.type="loader"}}class Zo extends sa{static{this.type="item"}filter(e,t,n){if(n(this.textValue,this)){let l=this.clone();return t.addDescendants(l,e),l}return null}}class Bo extends sa{static{this.type="section"}filter(e,t,n){let l=super.filter(e,t,n);if(l&&l.lastChildKey!==null){let i=e.getItem(l.lastChildKey);if(i&&i.type!=="header")return l}return null}}class zo{get size(){return this.itemCount}getKeys(){return this.keyMap.keys()}*[Symbol.iterator](){let e=this.firstKey!=null?this.keyMap.get(this.firstKey):void 0;for(;e;)yield e,e=e.nextKey!=null?this.keyMap.get(e.nextKey):void 0}getChildren(e){let t=this.keyMap;return{*[Symbol.iterator](){let n=t.get(e),l=n?.firstChildKey!=null?t.get(n.firstChildKey):null;for(;l;)yield l,l=l.nextKey!=null?t.get(l.nextKey):void 0}}}getKeyBefore(e){let t=this.keyMap.get(e);if(!t)return null;if(t.prevKey!=null){for(t=this.keyMap.get(t.prevKey);t&&t.type!=="item"&&t.lastChildKey!=null;)t=this.keyMap.get(t.lastChildKey);return t?.key??null}return t.parentKey}getKeyAfter(e){let t=this.keyMap.get(e);if(!t)return null;if(t.type!=="item"&&t.firstChildKey!=null)return t.firstChildKey;for(;t;){if(t.nextKey!=null)return t.nextKey;if(t.parentKey!=null)t=this.keyMap.get(t.parentKey);else return null}return null}getFirstKey(){return this.firstKey}getLastKey(){let e=this.lastKey!=null?this.keyMap.get(this.lastKey):null;for(;e?.lastChildKey!=null;)e=this.keyMap.get(e.lastChildKey);return e?.key??null}getItem(e){return this.keyMap.get(e)??null}at(){throw new Error("Not implemented")}clone(){let e=this.constructor,t=new e;return t.keyMap=new Map(this.keyMap),t.firstKey=this.firstKey,t.lastKey=this.lastKey,t.itemCount=this.itemCount,t}addNode(e){if(this.frozen)throw new Error("Cannot add a node to a frozen collection");e.type==="item"&&this.keyMap.get(e.key)==null&&this.itemCount++,this.keyMap.set(e.key,e)}addDescendants(e,t){this.addNode(e);let n=t.getChildren(e.key);for(let l of n)this.addDescendants(l,t)}removeNode(e){if(this.frozen)throw new Error("Cannot remove a node to a frozen collection");let t=this.keyMap.get(e);t!=null&&t.type==="item"&&this.itemCount--,this.keyMap.delete(e)}commit(e,t,n=!1){if(this.frozen)throw new Error("Cannot commit a frozen collection");this.firstKey=e,this.lastKey=t,this.frozen=!n}filter(e){let t=new this.constructor,[n,l]=oa(this,t,this.firstKey,e);return t?.commit(n,l),t}constructor(){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.frozen=!1,this.itemCount=0}}function oa(r,e,t,n){if(t==null)return[null,null];let l=null,i=null,s=r.getItem(t);for(;s!=null;){let o=s.filter(r,e,n);o!=null&&(o.nextKey=null,i&&(o.prevKey=i.key,i.nextKey=o.key),l==null&&(l=o),e.addNode(o),i=o),s=s.nextKey!=null?r.getItem(s.nextKey):null}if(i&&i.type==="separator"){let o=i.prevKey;e.removeNode(i.key),o!=null?(i=e.getItem(o),i.nextKey=null):i=null}return[l?.key??null,i?.key??null]}class ca{constructor(e){this._firstChild=null,this._lastChild=null,this._previousSibling=null,this._nextSibling=null,this._parentNode=null,this._minInvalidChildIndex=null,this.ownerDocument=e}*[Symbol.iterator](){let e=this.firstChild;for(;e;)yield e,e=e.nextSibling}get firstChild(){return this._firstChild}set firstChild(e){this._firstChild=e,this.ownerDocument.markDirty(this)}get lastChild(){return this._lastChild}set lastChild(e){this._lastChild=e,this.ownerDocument.markDirty(this)}get previousSibling(){return this._previousSibling}set previousSibling(e){this._previousSibling=e,this.ownerDocument.markDirty(this)}get nextSibling(){return this._nextSibling}set nextSibling(e){this._nextSibling=e,this.ownerDocument.markDirty(this)}get parentNode(){return this._parentNode}set parentNode(e){this._parentNode=e,this.ownerDocument.markDirty(this)}get isConnected(){return this.parentNode?.isConnected||!1}invalidateChildIndices(e){(this._minInvalidChildIndex==null||!this._minInvalidChildIndex.isConnected||e.indexthis.subscriptions.delete(e)}resetAfterSSR(){this.isSSR&&(this.isSSR=!1,this.firstChild=null,this.lastChild=null,this.nodeId=0)}}function ua(r){let{children:e,items:t,idScope:n,addIdAndValue:l,dependencies:i=[]}=r,s=a.useMemo(()=>{},[e]),o=a.useMemo(()=>new WeakMap,[...i,s]);return a.useMemo(()=>{if(t&&typeof e=="function"){let c=[];for(let u of t){let f=Wo(u)?u:null,d=f?o.get(f):null;if(!d){d=e(u);let p=d.props.id??u?.key??u?.id;n!=null&&d.props.id==null&&p!=null&&(p=n+":"+p);let g=p??c.length;d=a.cloneElement(d,l?{key:g,id:p,value:u}:{key:g}),f&&o.set(f,d)}c.push(d)}return c}else if(typeof e!="function")return e},[e,t,o,n,l])}function Wo(r){switch(typeof r){case"object":return r!=null;case"function":case"symbol":return!0;default:return!1}}const da=a.createContext(!1),$t=a.createContext(null);function fa(r){if(a.useContext($t))return r.content;let{collection:t,document:n}=Xo(r.createCollection);return x.createElement(x.Fragment,null,x.createElement(ns,null,x.createElement($t.Provider,{value:n},r.content)),x.createElement(qo,{render:r.children,collection:t}))}function qo({collection:r,render:e}){return e(r)}function Go(r,e,t){let n=zt(),l=a.useRef(n);l.current=n;let i=a.useCallback(()=>l.current?t():e(),[e,t]);return ls.useSyncExternalStore(r,i)}const Yo=typeof x.useSyncExternalStore=="function"?x.useSyncExternalStore:Go;function Xo(r){let[e]=a.useState(()=>new Uo(r?.()||new zo)),t=a.useCallback(s=>e.subscribe(s),[e]),n=a.useCallback(()=>{let s=e.getCollection();return e.isSSR&&e.resetAfterSSR(),s},[e]),l=a.useCallback(()=>(e.isSSR=!0,e.getCollection()),[e]);return{collection:Yo(t,n,l),document:e}}const xr=a.createContext(null);function Jo(r){return class extends Ge{static{this.type=r}}}function ha(r,e,t,n,l,i){typeof r=="string"&&(r=Jo(r));let s=a.useCallback(c=>{c?.setProps(e,t,r,n,i)},[e,t,n,i,r]),o=a.useContext(xr);if(o){let c=o.ownerDocument.nodesByProps.get(e);return c||(c=o.ownerDocument.createElement(r.type),c.setProps(e,t,r,n,i),o.appendChild(c),o.ownerDocument.updateCollection(),o.ownerDocument.nodesByProps.set(e,c)),l?x.createElement(xr.Provider,{value:c},l):null}return x.createElement(r.type,{ref:s},l)}function qr(r,e){let t=({node:l})=>e(l.props,l.props.ref,l),n=a.forwardRef((l,i)=>{let s=a.useContext(hr);if(!a.useContext(da)){if(e.length>=3)throw new Error(e.name+" cannot be rendered outside a collection.");return e(l,i)}return ha(r,l,i,"children"in l?l.children:null,null,c=>x.createElement(hr.Provider,{value:s},x.createElement(t,{node:c})))});return n.displayName=e.name,n}function ma(r,e,t=pa){let n=({node:i})=>e(i.props,i.props.ref,i),l=a.forwardRef((i,s)=>{let o=t(i);return ha(r,i,s,null,o,c=>x.createElement(n,{node:c}))??x.createElement(x.Fragment,null)});return l.displayName=e.name,l}function pa(r){return ua({...r,addIdAndValue:!0})}const Kn=a.createContext(null);function ga(r){let e=a.useContext(Kn),t=(e?.dependencies||[]).concat(r.dependencies),n=r.idScope??e?.idScope,l=pa({...r,idScope:n,dependencies:t});return a.useContext($t)&&(l=x.createElement(Qo,null,l)),e=a.useMemo(()=>({dependencies:t,idScope:n}),[n,...t]),x.createElement(Kn.Provider,{value:e},l)}function Qo({children:r}){let e=a.useContext($t),t=a.useMemo(()=>x.createElement($t.Provider,{value:null},x.createElement(da.Provider,{value:!0},r)),[r]);return zt()?x.createElement(xr.Provider,{value:e},t):rt.createPortal(t,e)}const ec=a.createContext(null),ba={CollectionRoot({collection:r,renderDropIndicator:e}){return Tn(r,null,e)},CollectionBranch({collection:r,parent:e,renderDropIndicator:t}){return Tn(r,e,t)}};function Tn(r,e,t){return ua({items:e?r.getChildren(e.key):r,dependencies:[t],children(n){if(n.type==="content")return x.createElement(x.Fragment,null);let l=n.render(n);return!t||n.type!=="item"?l:x.createElement(x.Fragment,null,t({type:"item",key:n.key,dropPosition:"before"}),l,tc(r,n,t))}})}function tc(r,e,t){let n=e.key,l=r.getKeyAfter(n),i=l!=null?r.getItem(l):null;for(;i!=null&&i.type!=="item";)l=r.getKeyAfter(i.key),i=l!=null?r.getItem(l):null;let s=e.nextKey!=null?r.getItem(e.nextKey):null;for(;s!=null&&s.type!=="item";)s=s.nextKey!=null?r.getItem(s.nextKey):null;let o=[];if(s==null){let c=e;for(;c?.type==="item"&&(!i||c.parentKey!==i.parentKey&&i.levelr!=null?new Set([r]):null,[r])}function va(r){let e=nc(ce(r));e!==r&&(e&&rc(e,r),r&&$a(r,e))}function rc(r,e){r.dispatchEvent(new FocusEvent("blur",{relatedTarget:e})),r.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:e}))}function $a(r,e){r.dispatchEvent(new FocusEvent("focus",{relatedTarget:e})),r.dispatchEvent(new FocusEvent("focusin",{bubbles:!0,relatedTarget:e}))}function nc(r){let e=le(r),t=e?.getAttribute("aria-activedescendant");return t&&r.getElementById(t)||e}const lc=a.createContext({}),ac=a.createContext({}),xa=a.createContext(null);function Ea(r){let e=a.useRef({});return x.createElement(xa.Provider,{value:e},r.children)}const ic=a.forwardRef(function(e,t){let{name:n,isVisible:l=!0,children:i,className:s,style:o,render:c,...u}=e,[f,d]=a.useState(l?"visible":"hidden"),p=a.useContext(xa);if(!p)throw new Error(" must be rendered inside a ");l&&f==="hidden"&&d("visible"),t=We(t),Y(()=>{let b=t.current,y=p.current,m=y[n],v=null;if(b&&l&&m){d("visible");let $=b.getAnimations(),w=m.style.map(([S,K])=>{let T=b.style[S];if(S==="translate"){let C=m.rect,F=b.getBoundingClientRect(),_=C.left-F?.left,j=C.top-F?.top;b.style.translate=`${_}px ${j}px`}else b.style[S]=K;return[S,T]});for(let S of b.getAnimations())$.includes(S)||S.cancel();v=requestAnimationFrame(()=>{v=null;for(let[S,K]of w)b.style[S]=K}),delete y[n]}else b&&l&&!m?(queueMicrotask(()=>rt.flushSync(()=>d("entering"))),v=requestAnimationFrame(()=>{v=null,d("visible")})):b&&!l&&queueMicrotask(()=>{y[n]?(delete y[n],rt.flushSync(()=>d("exiting")),Promise.all(b.getAnimations().map($=>$.finished)).then(()=>d("hidden")).catch(()=>{})):d("hidden")});return()=>{if(v!=null&&cancelAnimationFrame(v),b&&b.isConnected&&!b.hasAttribute("data-exiting")){let $=window.getComputedStyle(b);if($.transitionProperty!=="none"){let w=$.transitionProperty.split(/\s*,\s*/);y[n]={rect:b.getBoundingClientRect(),style:w.map(S=>[S,$[S]])}}}}},[t,p,n,l]);let g=fe({children:i,className:s,style:o,render:c,values:{isEntering:f==="entering",isExiting:f==="exiting"}});return f==="hidden"?null:x.createElement(ae.div,{...u,...g,ref:t,"data-entering":f==="entering"||void 0,"data-exiting":f==="exiting"||void 0})}),Gr=a.createContext({isSelected:!1}),sc=a.forwardRef(function(e,t){[e,t]=Se(e,t,Gr);let{isSelected:n,...l}=e;return x.createElement(ic,{...l,ref:t,className:e.className||"react-aria-SelectionIndicator",name:"SelectionIndicator",isVisible:n})}),oc=a.createContext({});class h0 extends Ge{static{this.type="separator"}filter(e,t){let n=t.getItem(this.prevKey);if(n&&n.type!=="separator"){let l=this.clone();return t.addDescendants(l,e),l}return null}}var Sa={};Sa={longPressMessage:"اضغط مطولاً أو اضغط على Alt + السهم لأسفل لفتح القائمة"};var wa={};wa={longPressMessage:"Натиснете продължително или натиснете Alt+ стрелка надолу, за да отворите менюто"};var Pa={};Pa={longPressMessage:"Dlouhým stiskem nebo stisknutím kláves Alt + šipka dolů otevřete nabídku"};var Ca={};Ca={longPressMessage:"Langt tryk eller tryk på Alt + pil ned for at åbne menuen"};var Ma={};Ma={longPressMessage:"Drücken Sie lange oder drücken Sie Alt + Nach-unten, um das Menü zu öffnen"};var Aa={};Aa={longPressMessage:"Πιέστε παρατεταμένα ή πατήστε Alt + κάτω βέλος για να ανοίξετε το μενού"};var Ka={};Ka={longPressMessage:"Long press or press Alt + ArrowDown to open menu"};var Ta={};Ta={longPressMessage:"Mantenga pulsado o pulse Alt + flecha abajo para abrir el menú"};var Ra={};Ra={longPressMessage:"Menüü avamiseks vajutage pikalt või vajutage klahve Alt + allanool"};var ka={};ka={longPressMessage:"Avaa valikko painamalla pohjassa tai näppäinyhdistelmällä Alt + Alanuoli"};var La={};La={longPressMessage:"Appuyez de manière prolongée ou appuyez sur Alt + Flèche vers le bas pour ouvrir le menu."};var Fa={};Fa={longPressMessage:"לחץ לחיצה ארוכה או הקש Alt + ArrowDown כדי לפתוח את התפריט"};var Da={};Da={longPressMessage:"Dugo pritisnite ili pritisnite Alt + strelicu prema dolje za otvaranje izbornika"};var Na={};Na={longPressMessage:"Nyomja meg hosszan, vagy nyomja meg az Alt + lefele nyíl gombot a menü megnyitásához"};var Ia={};Ia={longPressMessage:"Premi a lungo o premi Alt + Freccia giù per aprire il menu"};var Va={};Va={longPressMessage:"長押しまたは Alt+下矢印キーでメニューを開く"};var Ha={};Ha={longPressMessage:"길게 누르거나 Alt + 아래쪽 화살표를 눌러 메뉴 열기"};var ja={};ja={longPressMessage:"Norėdami atidaryti meniu, nuspaudę palaikykite arba paspauskite „Alt + ArrowDown“."};var Oa={};Oa={longPressMessage:"Lai atvērtu izvēlni, turiet nospiestu vai nospiediet taustiņu kombināciju Alt + lejupvērstā bultiņa"};var _a={};_a={longPressMessage:"Langt trykk eller trykk Alt + PilNed for å åpne menyen"};var Za={};Za={longPressMessage:"Druk lang op Alt + pijl-omlaag of druk op Alt om het menu te openen"};var Ba={};Ba={longPressMessage:"Naciśnij i przytrzymaj lub naciśnij klawisze Alt + Strzałka w dół, aby otworzyć menu"};var za={};za={longPressMessage:"Pressione e segure ou pressione Alt + Seta para baixo para abrir o menu"};var Ua={};Ua={longPressMessage:"Prima continuamente ou prima Alt + Seta Para Baixo para abrir o menu"};var Wa={};Wa={longPressMessage:"Apăsați lung sau apăsați pe Alt + săgeată în jos pentru a deschide meniul"};var qa={};qa={longPressMessage:"Нажмите и удерживайте или нажмите Alt + Стрелка вниз, чтобы открыть меню"};var Ga={};Ga={longPressMessage:"Ponuku otvoríte dlhým stlačením alebo stlačením klávesu Alt + klávesu so šípkou nadol"};var Ya={};Ya={longPressMessage:"Za odprtje menija pritisnite in držite gumb ali pritisnite Alt+puščica navzdol"};var Xa={};Xa={longPressMessage:"Dugo pritisnite ili pritisnite Alt + strelicu prema dole da otvorite meni"};var Ja={};Ja={longPressMessage:"Håll nedtryckt eller tryck på Alt + pil nedåt för att öppna menyn"};var Qa={};Qa={longPressMessage:"Menüyü açmak için uzun basın veya Alt + Aşağı Ok tuşuna basın"};var ei={};ei={longPressMessage:"Довго або звичайно натисніть комбінацію клавіш Alt і стрілка вниз, щоб відкрити меню"};var ti={};ti={longPressMessage:"长按或按 Alt + 向下方向键以打开菜单"};var ri={};ri={longPressMessage:"長按或按 Alt+向下鍵以開啟功能表"};var ni={};ni={"ar-AE":Sa,"bg-BG":wa,"cs-CZ":Pa,"da-DK":Ca,"de-DE":Ma,"el-GR":Aa,"en-US":Ka,"es-ES":Ta,"et-EE":Ra,"fi-FI":ka,"fr-FR":La,"he-IL":Fa,"hr-HR":Da,"hu-HU":Na,"it-IT":Ia,"ja-JP":Va,"ko-KR":Ha,"lt-LT":ja,"lv-LV":Oa,"nb-NO":_a,"nl-NL":Za,"pl-PL":Ba,"pt-BR":za,"pt-PT":Ua,"ro-RO":Wa,"ru-RU":qa,"sk-SK":Ga,"sl-SI":Ya,"sr-SP":Xa,"sv-SE":Ja,"tr-TR":Qa,"uk-UA":ei,"zh-CN":ti,"zh-TW":ri};const cc=500;function Yr(r){let{isDisabled:e,pointerType:t,onLongPressStart:n,onLongPressEnd:l,onLongPress:i,threshold:s=cc,accessibilityDescription:o}=r;const c=a.useRef(void 0);let{addGlobalListener:u,removeAllGlobalListeners:f}=Ut(),d=b=>t?b.pointerType===t:b.pointerType==="mouse"||b.pointerType==="touch",{pressProps:p}=Vr({isDisabled:e,onPressStart(b){if(b.continuePropagation(),d(b)){n&&n({...b,type:"longpressstart"}),c.current=setTimeout(()=>{b.target.dispatchEvent(new PointerEvent("pointercancel",{bubbles:!0})),u(b.target,"click",m=>m.preventDefault(),{once:!0}),ce(b.target).activeElement!==b.target&&xe(b.target),i&&i({...b,type:"longpress"}),c.current=void 0},s),b.pointerType==="touch"&&u(b.target,"contextmenu",m=>m.preventDefault(),{once:!0});let y=nt(b.target);u(y,"pointerup",()=>{setTimeout(()=>{f()},100)},{once:!0})}},onPressEnd(b){c.current&&clearTimeout(c.current),l&&d(b)&&l({...b,type:"longpressend"})}}),g=Bs(i&&!e?o:void 0);return{longPressProps:B(p,g)}}function uc(r){let{onContextMenu:e}=r,t=a.useRef(!1),{longPressProps:n}=Yr({onLongPressStart(){t.current=!1},onLongPress(l){t.current?t.current=!1:e?.({target:l.target,x:l.x,y:l.y})}});return e?{contextMenuProps:B(kr()?n:{},{onContextMenu(l){l.stopPropagation(),l.preventDefault(),t.current=!0;let i=l.currentTarget.getBoundingClientRect();e({target:l.currentTarget,x:l.clientX-i.x,y:l.clientY-i.y})},onKeyDown(l){if(Nt()&&l.ctrlKey&&l.key==="Enter"){t.current=!1;let i=l.currentTarget;l.stopPropagation(),setTimeout(()=>{if(t.current)t.current=!1;else{let s=i.getBoundingClientRect();e({target:i,x:s.width/2,y:s.height/2})}},10)}}})}:{contextMenuProps:{}}}function dc(r,e,t){let{type:n}=r,{isOpen:l}=e;a.useEffect(()=>{t&&t.current&&$l.set(t.current,e.close)});let i;n==="menu"?i=!0:n==="listbox"&&(i="listbox");let s=Re();return{triggerProps:{"aria-haspopup":i,"aria-expanded":l,"aria-controls":l?s:void 0,onPress:e.toggle},overlayProps:{id:s}}}function fc(r){return r&&r.__esModule?r.default:r}function hc(r,e,t){let{type:n="menu",isDisabled:l,trigger:i="press"}=r,s=Re(),{triggerProps:o,overlayProps:c}=dc({type:n},e,t),u=(m,v,$="first")=>{if(!m||v.isDefaultPrevented())return!1;e.toggle($)},{keyboardProps:f}=De({isDisabled:l,shortcuts:{Enter:m=>u(i!=="longPress",m,"first")," ":m=>u(i!=="longPress",m,"first"),ArrowDown:m=>u(i!=="longPress",m,"first"),ArrowUp:m=>u(i!=="longPress",m,"last"),"Alt+Enter":m=>u(i==="longPress",m,"first"),"Alt+ ":m=>u(i==="longPress",m,"first"),"Alt+ArrowDown":m=>u(!0,m,"first"),"Alt+ArrowUp":m=>u(!0,m,"last")}}),d=nl(fc(ni),"@react-aria/menu"),{longPressProps:p}=Yr({isDisabled:l||i!=="longPress",accessibilityDescription:d.format("longPressMessage"),onLongPressStart(){e.close()},onLongPress(){e.open("first")}}),g={preventFocusOnPress:!0,onPressStart(m){m.pointerType!=="touch"&&m.pointerType!=="keyboard"&&!l&&(xe(m.target),e.open(m.pointerType==="virtual"?"first":null))},onPress(m){m.pointerType==="touch"&&!l&&(xe(m.target),e.toggle())}};delete o.onPress;let{contextMenuProps:b}=uc({onContextMenu(m){let v=m.target.getBoundingClientRect();e.setPoint({x:v.x+m.x,y:v.y+m.y}),e.open()}});a.useEffect(()=>{if(e.isOpen&&i==="contextMenu"){let m=v=>{(v.button===2||v.button===0&&v.ctrlKey===!0)&&z(v)===document.body&&e.close()};return document.addEventListener("mousedown",m),()=>document.removeEventListener("mousedown",m)}},[e,i]);let y;if(i==="press")y={...g,...f};else if(i==="longPress")y={...p,...f};else if(i==="contextMenu"){y=b;let{"aria-haspopup":m,"aria-expanded":v,"aria-controls":$,...w}=o;o=w}return{menuTriggerProps:{...o,...y,id:s},menuProps:{...c,"aria-labelledby":s,autoFocus:e.focusStrategy||!0,onClose:e.close}}}const li=new WeakMap;function Er(r){return as()?r.altKey:r.ctrlKey}function ze(r,e){let t=`[data-key="${CSS.escape(String(e))}"]`,n=r.current?.dataset.collection;return n&&(t=`[data-collection="${CSS.escape(n)}"]${t}`),r.current?.querySelector(t)}const ai=new WeakMap;function mc(r){let e=Re();return ai.set(r,e),e}function pc(r){return ai.get(r)}const Rn=1e3;function gc(r){let{keyboardDelegate:e,selectionManager:t,onTypeSelect:n}=r,l=a.useRef({search:"",timeout:void 0}),i=o=>{if(l.current.search.length>0&&o.key===" "){if(o.preventDefault(),(!("continuePropagation"in o)||"continuePropagation"in o&&!o.isPropagationStopped())&&o.stopPropagation(),l.current.search+=" ",e.getKeyForSearch!=null){let c=e.getKeyForSearch(l.current.search,t.focusedKey);c==null&&(c=e.getKeyForSearch(l.current.search)),c!=null&&(t.setFocusedKey(c),n&&n(c))}clearTimeout(l.current.timeout),l.current.timeout=setTimeout(()=>{l.current.search=""},Rn)}},s=o=>{let c=bc(o.key);if(!(!c||o.ctrlKey||o.metaKey||o.altKey||!re(o.currentTarget,z(o))||l.current.search.length===0&&c===" ")){if(l.current.search+=c,e.getKeyForSearch!=null){let u=e.getKeyForSearch(l.current.search,t.focusedKey);if(u==null&&(u=e.getKeyForSearch(l.current.search)),u!=null)t.setFocusedKey(u),n&&n(u),o.preventDefault(),"continuePropagation"in o||o.stopPropagation();else{l.current.search="",clearTimeout(l.current.timeout),l.current.timeout=void 0;return}}clearTimeout(l.current.timeout),l.current.timeout=setTimeout(()=>{l.current.search=""},Rn)}};return a.useEffect(()=>{let o=l.current.timeout;return()=>{clearTimeout(o)}},[l]),{typeSelectProps:{onKeyDownCapture:e.getKeyForSearch?i:void 0,onKeyDown:e.getKeyForSearch?s:void 0}}}function bc(r){return r.length===1||!/^[A-Z]/i.test(r)?r:""}function ii(r){let{selectionManager:e,keyboardDelegate:t,ref:n,autoFocus:l=!1,shouldFocusWrap:i=!1,disallowEmptySelection:s=!1,disallowSelectAll:o=!1,escapeKeyBehavior:c="clearSelection",selectOnFocus:u=e.selectionBehavior==="replace",disallowTypeAhead:f=!1,shouldUseVirtualFocus:d,allowsTabNavigation:p=!1,scrollRef:g=n,linkBehavior:b="action",UNSTABLE_focusOnEntry:y}=r,{direction:m}=Ne(),v=Hr();const $=(R,k,oe)=>{if(k!=null){if(e.isLink(k)&&b==="selection"&&u&&!Er(R)){rt.flushSync(()=>{e.setFocusedKey(k,oe)});let Q=ze(n,k),Ct=e.getItemProps(k);if(Q){v.open(Q,R,Ct.href,Ct.routerOptions);return}return!1}if(e.setFocusedKey(k,oe),e.isLink(k)&&b==="override")return!1;if(R.shiftKey&&e.selectionMode==="multiple"){e.extendSelection(k);return}else if(u&&!Er(R)){e.replaceSelection(k);return}}return!1};let w=R=>{if(t.getKeyBelow){let k=e.focusedKey!=null?t.getKeyBelow?.(e.focusedKey):t.getFirstKey?.();if(k==null&&i&&(k=t.getFirstKey?.(e.focusedKey)),k!=null){$(R,k);return}}return!1},S=R=>{if(t.getKeyAbove){let k=e.focusedKey!=null?t.getKeyAbove?.(e.focusedKey):t.getLastKey?.();if(k==null&&i&&(k=t.getLastKey?.(e.focusedKey)),k!=null){$(R,k);return}}return!1},K=R=>{if(t.getFirstKey){if(e.focusedKey===null&&R.shiftKey)return!1;let k=t.getFirstKey(e.focusedKey,ht(R));if(e.setFocusedKey(k),k!=null){if(ht(R)&&R.shiftKey&&e.selectionMode==="multiple"){e.extendSelection(k);return}else if(u){e.replaceSelection(k);return}}}return!1},T=R=>{if(t.getKeyLeftOf){let k=e.focusedKey!=null?t.getKeyLeftOf?.(e.focusedKey):t.getFirstKey?.();if(k==null&&i&&(k=m==="rtl"?t.getFirstKey?.(e.focusedKey):t.getLastKey?.(e.focusedKey)),k!=null){$(R,k,m==="rtl"?"first":"last");return}}return!1},C=R=>{if(t.getKeyRightOf){let k=e.focusedKey!=null?t.getKeyRightOf?.(e.focusedKey):t.getFirstKey?.();if(k==null&&i&&(k=m==="rtl"?t.getLastKey?.(e.focusedKey):t.getFirstKey?.(e.focusedKey)),k!=null){$(R,k,m==="rtl"?"last":"first");return}}return!1},F=R=>{if(t.getLastKey){if(e.focusedKey===null&&R.shiftKey)return!1;let k=t.getLastKey(e.focusedKey,ht(R));if(e.setFocusedKey(k),k!=null){if(ht(R)&&R.shiftKey&&e.selectionMode==="multiple"){e.extendSelection(k);return}else if(u){e.replaceSelection(k);return}}}return!1},_=R=>{if(t.getKeyPageBelow&&e.focusedKey!=null){let k=t.getKeyPageBelow(e.focusedKey);if(k!=null)return $(R,k)}return!1},j=R=>{if(t.getKeyPageAbove&&e.focusedKey!=null){let k=t.getKeyPageAbove(e.focusedKey);if(k!=null)return $(R,k)}return!1},N=()=>{if(e.selectionMode==="multiple"&&o!==!0){e.selectAll();return}return!1},H=()=>{if(c==="clearSelection"&&!s&&e.selectedKeys.size!==0){e.clearSelection();return}return!1},D=()=>{if(!p&&n.current){let R=Me(n.current,{tabbable:!0}),k,oe;do oe=R.lastChild(),oe&&(k=oe);while(oe);let Q=le();k&&(!Ze(k)||Q&&!Fr(Q))&&xe(k)}return{shouldContinuePropagation:!0,shouldPreventDefault:!1}},M=()=>(!p&&n.current&&n.current.focus(),{shouldContinuePropagation:!0,shouldPreventDefault:!1}),L=(R,k)=>({[Nt()?R+"+Shift+Alt":R+"+Shift+Control"]:k,[R+"+Shift"]:k,[Nt()?R+"+Alt":R+"+Control"]:k,[R]:k}),{keyboardProps:O}=De({shortcuts:{...L("ArrowDown",w),...L("ArrowUp",S),...L("ArrowLeft",T),...L("ArrowRight",C),...L("PageDown",_),...L("PageUp",j)},allowRepeats:!0}),{keyboardProps:I}=De({shortcuts:{...L("Home",K),...L("End",F),"Mod+A":N,Escape:H,Tab:D,"Tab+Shift":M}}),X=a.useRef({top:0,left:0});mt(g,"scroll",()=>{X.current={top:g.current?.scrollTop??0,left:g.current?.scrollLeft??0}});let ne=R=>{if(e.isFocused){re(R.currentTarget,z(R))||e.setFocused(!1);return}if(!re(R.currentTarget,z(R)))return;let k=yt();e.setFocused(!0);let oe=Q=>{Q!=null&&(e.setFocusedKey(Q),u&&!e.isSelected(Q)&&e.replaceSelection(Q))};if(y&&(k==="keyboard"||k==="virtual"))oe(y==="first"?t.getFirstKey?.():t.getLastKey?.());else if(e.focusedKey==null){let Q=R.relatedTarget;Q&&R.currentTarget.compareDocumentPosition(Q)&Node.DOCUMENT_POSITION_FOLLOWING?oe(e.lastSelectedKey??t.getLastKey?.()):oe(e.firstSelectedKey??t.getFirstKey?.())}else g.current&&(g.current.scrollTop=X.current.top,g.current.scrollLeft=X.current.left);if(e.focusedKey!=null&&g.current){let Q=ze(n,e.focusedKey);Q instanceof HTMLElement&&(!Ze(Q)&&!d&&xe(Q),(k==="keyboard"||y&&k==="virtual")&&dn(Q,{containingElement:n.current}))}},te=R=>{re(R.currentTarget,R.relatedTarget)||e.setFocused(!1)},U=a.useRef(!1);mt(n,Hs,d?R=>{let{detail:k}=R;R.stopPropagation(),e.setFocused(!0),k?.focusStrategy==="first"&&(U.current=!0)}:void 0);let A=t.getFirstKey?.()??null;un(()=>{if(U.current)if(A==null){let R=le();va(n.current),$a(R,null),e.collection.size>0&&(U.current=!1)}else e.setFocusedKey(A),U.current=!1},[A,e.collection.size]),un(()=>{e.collection.size>0&&(U.current=!1)},[e.focusedKey]),mt(n,Vs,d?R=>{R.stopPropagation(),e.setFocused(!1),R.detail?.clearFocusKey&&e.setFocusedKey(null)}:void 0);const P=a.useRef(l),V=a.useRef(!1);a.useEffect(()=>{if(P.current){let R=null;l==="first"&&(R=t.getFirstKey?.()??null),l==="last"&&(R=t.getLastKey?.()??null);let k=e.selectedKeys;if(k.size){for(let oe of k)if(e.canSelectItem(oe)){R=oe;break}}e.setFocused(!0),e.setFocusedKey(R),R!=null&&u&&!k.size&&e.canSelectItem(R)&&e.replaceSelection(R),R==null&&!d&&n.current&&bt(n.current),e.collection.size>0&&(P.current=!1,V.current=!0)}});let E=a.useRef(e.focusedKey),Z=a.useRef(null);a.useEffect(()=>{if(e.isFocused&&e.focusedKey!=null&&(e.focusedKey!==E.current||V.current)&&g.current&&n.current){let R=yt(),k=ze(n,e.focusedKey);if(!(k instanceof HTMLElement))return;(R==="keyboard"||V.current)&&(Z.current&&cancelAnimationFrame(Z.current),Z.current=requestAnimationFrame(()=>{g.current&&(Dt(g.current,k),R!=="virtual"&&dn(k,{containingElement:n.current}))}))}!d&&e.isFocused&&e.focusedKey==null&&E.current!=null&&n.current&&bt(n.current),E.current=e.focusedKey,V.current=!1}),a.useEffect(()=>()=>{Z.current&&cancelAnimationFrame(Z.current)},[]),mt(n,"react-aria-focus-scope-restore",R=>{R.preventDefault(),e.setFocused(!0)});let q={...B(I,O),onFocus:ne,onBlur:te,onMouseDown(R){g.current===z(R)&&R.preventDefault()}},{typeSelectProps:pe}=gc({keyboardDelegate:t,selectionManager:e});f||(q=B(pe,q));let Ie;d||(Ie=e.focusedKey==null?0:-1);let Ve=mc(e.collection);return{collectionProps:B(q,{tabIndex:Ie,"data-collection":Ve})}}class kn{constructor(e){this.ref=e}getItemRect(e){let t=this.ref.current;if(!t)return null;let n=e!=null?ze(this.ref,e):null;if(!n)return null;let l=t.getBoundingClientRect(),i=n.getBoundingClientRect();return{x:i.left-l.left-t.clientLeft+t.scrollLeft,y:i.top-l.top-t.clientTop+t.scrollTop,width:i.width,height:i.height}}getContentSize(){let e=this.ref.current;return{width:e?.scrollWidth??0,height:e?.scrollHeight??0}}getVisibleRect(){let e=this.ref.current;return{x:e?.scrollLeft??0,y:e?.scrollTop??0,width:e?.clientWidth??0,height:e?.clientHeight??0}}}class yc{constructor(...e){if(e.length===1){let t=e[0];this.collection=t.collection,this.ref=t.ref,this.collator=t.collator,this.disabledKeys=t.disabledKeys||new Set,this.disabledBehavior=t.disabledBehavior||"all",this.orientation=t.orientation||"vertical",this.direction=t.direction,this.layout=t.layout||"stack",this.layoutDelegate=t.layoutDelegate||new kn(t.ref)}else this.collection=e[0],this.disabledKeys=e[1],this.ref=e[2],this.collator=e[3],this.layout="stack",this.orientation="vertical",this.disabledBehavior="all",this.layoutDelegate=new kn(this.ref);this.layout==="stack"&&this.orientation==="vertical"&&(this.getKeyLeftOf=void 0,this.getKeyRightOf=void 0)}isDisabled(e){return this.disabledBehavior==="all"&&(e.props?.isDisabled||this.disabledKeys.has(e.key))&&e.props?.disabledBehavior!=="selection"}findNextNonDisabled(e,t,n=!1){let l=e;for(;l!=null;){let i=this.collection.getItem(l);if(i?.type==="item"&&(n||!this.isDisabled(i)))return l;l=t(l)}return null}getNextKey(e,t){let n=e;return n=this.collection.getKeyAfter(n),this.findNextNonDisabled(n,l=>this.collection.getKeyAfter(l),t?.includeDisabled)}getPreviousKey(e,t){let n=e;return n=this.collection.getKeyBefore(n),this.findNextNonDisabled(n,l=>this.collection.getKeyBefore(l),t?.includeDisabled)}findKey(e,t,n){let l=e,i=this.layoutDelegate.getItemRect(l);if(!i||l==null)return null;let s=i;do{if(l=t(l),l==null)break;i=this.layoutDelegate.getItemRect(l)}while(i&&n(s,i)&&l!=null);return l}isSameRow(e,t){return e.y===t.y||e.x!==t.x}isSameColumn(e,t){return e.x===t.x||e.y!==t.y}isReversed(e){let t=this.getNextKey(e),n=ze(this.ref,e);if(t!=null){let i=ze(this.ref,t);return!n||!i?!1:n.getBoundingClientRect().top>i.getBoundingClientRect().top}let l=this.getPreviousKey(e);if(l!=null){let i=ze(this.ref,l);return!n||!i?!1:i.getBoundingClientRect().top>n.getBoundingClientRect().top}return!1}getKeyBelow(e,t){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(e,n=>this.getNextKey(n,t),this.isSameRow):this.orientation==="vertical"?this.isReversed(e)?this.getPreviousKey(e,t):this.getNextKey(e,t):this.getNextKey(e,t)}getKeyAbove(e,t){return this.layout==="grid"&&this.orientation==="vertical"?this.findKey(e,n=>this.getPreviousKey(n,t),this.isSameRow):this.orientation==="vertical"?this.isReversed(e)?this.getNextKey(e,t):this.getPreviousKey(e,t):this.getPreviousKey(e,t)}getNextColumn(e,t,n){return t?this.getPreviousKey(e,n):this.getNextKey(e,n)}getKeyRightOf(e,t){let n=this.direction==="ltr"?"getKeyRightOf":"getKeyLeftOf";return this.layoutDelegate[n]?(e=this.layoutDelegate[n](e),this.findNextNonDisabled(e,l=>this.layoutDelegate[n](l),t?.includeDisabled)):this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(e,this.direction==="rtl",t):this.findKey(e,l=>this.getNextColumn(l,this.direction==="rtl",t),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(e,this.direction==="rtl",t):null}getKeyLeftOf(e,t){let n=this.direction==="ltr"?"getKeyLeftOf":"getKeyRightOf";return this.layoutDelegate[n]?(e=this.layoutDelegate[n](e),this.findNextNonDisabled(e,l=>this.layoutDelegate[n](l),t?.includeDisabled)):this.layout==="grid"?this.orientation==="vertical"?this.getNextColumn(e,this.direction==="ltr",t):this.findKey(e,l=>this.getNextColumn(l,this.direction==="ltr",t),this.isSameColumn):this.orientation==="horizontal"?this.getNextColumn(e,this.direction==="ltr",t):null}getFirstKey(){let e=this.collection.getFirstKey();return this.findNextNonDisabled(e,t=>this.collection.getKeyAfter(t))}getLastKey(){let e=this.collection.getLastKey();return this.findNextNonDisabled(e,t=>this.collection.getKeyBefore(t))}getKeyPageAbove(e){let t=this.ref.current,n=this.layoutDelegate.getItemRect(e);if(!n)return null;let l=this.isReversed(e);if(t&&!at(t))return this.getFirstKey();let i=e;if(this.orientation==="horizontal"){let s=Math.max(0,n.x+n.width-this.layoutDelegate.getVisibleRect().width);for(;n&&n.x>s&&i!=null;)i=this.getKeyAbove(i),n=i==null?null:this.layoutDelegate.getItemRect(i)}else{let s=this.layoutDelegate.getVisibleRect(),o=l?n.y-s.height:Math.max(0,n.y+n.height-s.height);for(;n&&n.y>o&&i!=null;)i=this.getKeyAbove(i),n=i==null?null:this.layoutDelegate.getItemRect(i)}return i??(l?this.getLastKey():this.getFirstKey())}getKeyPageBelow(e){let t=this.ref.current,n=this.layoutDelegate.getItemRect(e);if(!n)return null;let l=this.isReversed(e);if(t&&!at(t))return this.getLastKey();let i=e;if(this.orientation==="horizontal"){let s=Math.min(this.layoutDelegate.getContentSize().width,n.x-n.width+this.layoutDelegate.getVisibleRect().width);for(;n&&n.xl[0]i||new yc({collection:t,disabledKeys:n,disabledBehavior:u,ref:l,collator:c,layoutDelegate:s,orientation:o}),[i,s,t,n,l,c,u,o]),{collectionProps:d}=ii({...r,ref:l,selectionManager:e,keyboardDelegate:f});return{listProps:d}}function xc(r,e,t){let{shouldFocusWrap:n=!0,onKeyDown:l,onKeyUp:i,...s}=r;!r["aria-label"]&&r["aria-labelledby"];let o=se(r,{labelable:!0}),{listProps:c}=$c({...s,ref:t,selectionManager:e.selectionManager,collection:e.collection,disabledKeys:e.disabledKeys,shouldFocusWrap:n,linkBehavior:"override"});return li.set(e,{onClose:r.onClose,onAction:r.onAction,shouldUseVirtualFocus:r.shouldUseVirtualFocus}),{menuProps:B(o,{onKeyDown:l,onKeyUp:i},{role:"menu",...c,onKeyDown:u=>{(u.key!=="Escape"||r.shouldUseVirtualFocus)&&c.onKeyDown?.(u)}})}}function si(r){let{id:e,selectionManager:t,key:n,ref:l,shouldSelectOnPressUp:i,shouldUseVirtualFocus:s,focus:o,isDisabled:c,onAction:u,allowsDifferentPressOrigin:f,linkBehavior:d="action"}=r,p=Hr();e=Re(e);let g=E=>{if(E.pointerType==="keyboard"&&Er(E))t.toggleSelection(n);else{if(t.selectionMode==="none")return;if(t.isLink(n)){if(d==="selection"&&l.current){let Z=t.getItemProps(n);p.open(l.current,E,Z.href,Z.routerOptions),t.setSelectedKeys(t.selectedKeys);return}else if(d==="override"||d==="none")return}t.selectionMode==="single"?t.isSelected(n)&&!t.disallowEmptySelection?t.toggleSelection(n):t.replaceSelection(n):E&&E.shiftKey?t.extendSelection(n):t.selectionBehavior==="toggle"||E&&(ht(E)||E.pointerType==="touch"||E.pointerType==="virtual")?t.toggleSelection(n):t.replaceSelection(n)}};a.useEffect(()=>{n===t.focusedKey&&t.isFocused&&(s?va(l.current):o?o():le()!==l.current&&l.current&&bt(l.current))},[l,n,t.focusedKey,t.childFocusStrategy,t.isFocused,s]),c=c||t.isDisabled(n);let b={};!s&&!c?b={tabIndex:n===t.focusedKey?0:-1,onFocus(E){z(E)===l.current&&t.setFocusedKey(n)}}:c&&(b.onMouseDown=E=>{E.preventDefault()}),a.useEffect(()=>{c&&t.focusedKey===n&&t.setFocusedKey(null)},[t,c,n]);let y=t.isLink(n)&&d==="override",m=u&&r.UNSTABLE_itemBehavior==="action",v=t.isLink(n)&&d!=="selection"&&d!=="none",$=!c&&t.canSelectItem(n)&&!y&&!m,w=(u||v)&&!c,S=w&&(t.selectionBehavior==="replace"?!$:!$||t.isEmpty),K=w&&$&&t.selectionBehavior==="replace",T=S||K,C=a.useRef(null),F=T&&$,_=a.useRef(!1),j=a.useRef(!1),N=t.getItemProps(n),H=E=>{u&&(u(),l.current?.dispatchEvent(new CustomEvent("react-aria-item-action",{bubbles:!0}))),v&&l.current&&p.open(l.current,E,N.href,N.routerOptions)},D={ref:l};i?(D.onPressStart=E=>{C.current=E.pointerType,_.current=F,E.pointerType==="keyboard"&&(!T||Fn(E.key))&&g(E)},f?(D.onPressUp=S?void 0:E=>{E.pointerType==="mouse"&&$&&g(E)},D.onPress=S?H:E=>{E.pointerType!=="keyboard"&&E.pointerType!=="mouse"&&$&&g(E)}):D.onPress=E=>{if(S||K&&E.pointerType!=="mouse"){if(E.pointerType==="keyboard"&&!Ln(E.key))return;H(E)}else E.pointerType!=="keyboard"&&$&&g(E)}):(D.onPressStart=E=>{C.current=E.pointerType,_.current=F,j.current=S,$&&(E.pointerType==="mouse"&&!S||E.pointerType==="keyboard"&&(!w||Fn(E.key)))&&g(E)},D.onPress=E=>{(E.pointerType==="touch"||E.pointerType==="pen"||E.pointerType==="virtual"||E.pointerType==="keyboard"&&T&&Ln(E.key)||E.pointerType==="mouse"&&j.current)&&(T?H(E):$&&g(E))});let M=pc(t.collection);if(b["data-collection"]=M,b["data-key"]=n,D.preventFocusOnPress=s,s&&(D=B(D,{onPressStart(E){E.pointerType!=="touch"&&(t.setFocused(!0),t.setFocusedKey(n))},onPress(E){E.pointerType==="touch"&&(t.setFocused(!0),t.setFocusedKey(n))}})),N)for(let E of["onPressStart","onPressEnd","onPressChange","onPress","onPressUp","onClick"])N[E]&&(D[E]=Nr(D[E],N[E]));let{pressProps:L,isPressed:O}=Vr(D),I=K?E=>{C.current==="mouse"&&(E.stopPropagation(),E.preventDefault(),H(E))}:void 0,{longPressProps:X}=Yr({isDisabled:!F,onLongPress(E){E.pointerType==="touch"&&(g(E),t.setSelectionBehavior("toggle"))}}),ne=E=>{C.current==="touch"&&_.current&&E.preventDefault()},te=d!=="none"&&t.isLink(n)?E=>{is.isOpening||E.preventDefault()}:void 0,U=B(b,$||S||s&&!c?L:{},F?X:{},{onDoubleClick:I,onDragStartCapture:ne,onClick:te,id:e},s?{onMouseDown:E=>E.preventDefault()}:void 0),A=E=>{let Z=E;for(;Z&&Z!==l.current;){let q=Z.getAttribute("data-collection");if(q!=null)return q!==M;Z=Z.parentElement}return Fr(E)},P=U.onPointerDown;U.onPointerDown=E=>{let Z=z(E);if(Z&&Z!==l.current&&A(Z)){E.stopPropagation();return}P?.(E)};let V=U.onMouseDown;return U.onMouseDown=E=>{let Z=z(E);if(Z&&Z!==l.current&&A(Z)){E.stopPropagation();return}V?.(E)},{itemProps:U,isPressed:O,isSelected:t.isSelected(n),isFocused:t.isFocused&&t.focusedKey===n,isDisabled:c,allowsSelection:$,hasAction:T}}function Ln(r){return r==="Enter"}function Fn(r){return r===" "}function oi(r,e){return typeof e.getChildren=="function"?e.getChildren(r.key):r.childNodes}function Ec(r){return Sc(r)}function Sc(r,e){for(let t of r)return t}function or(r,e,t){if(e.parentKey===t.parentKey)return e.index-t.index;let n=[...Dn(r,e),e],l=[...Dn(r,t),t],i=n.slice(0,l.length).findIndex((s,o)=>s!==l[o]);return i!==-1?(e=n[i],t=l[i],e.index-t.index):n.findIndex(s=>s===t)>=0?1:(l.findIndex(s=>s===e)>=0,-1)}function Dn(r,e){let t=[],n=e;for(;n?.parentKey!=null;)n=r.getItem(n.parentKey),n&&t.unshift(n);return t}const Nn=new WeakMap;function wc(r){let e=Nn.get(r);if(e!=null)return e;let t=0,n=l=>{for(let i of l)i.type==="section"?n(oi(i,r)):i.type==="item"&&t++};return n(r),Nn.set(r,t),t}function Pc(r,e,t){let{id:n,key:l,closeOnSelect:i,shouldCloseOnSelect:s,isVirtualized:o,"aria-haspopup":c,onPressStart:u,onPressUp:f,onPress:d,onPressChange:p,onPressEnd:g,onClick:b,onHoverStart:y,onHoverChange:m,onHoverEnd:v,onKeyDown:$,onKeyUp:w,onFocus:S,onFocusChange:K,onBlur:T,selectionManager:C=e.selectionManager}=r,F=!!c,_=F&&r["aria-expanded"]==="true",j=r.isDisabled??C.isDisabled(l),N=r.isSelected??C.isSelected(l),H=li.get(e),D=e.collection.getItem(l),M=r.onClose||H.onClose,L=Hr(),O=()=>{if(!F&&(D?.props?.onAction?D.props.onAction():r.onAction&&r.onAction(l),H.onAction)){let J=H.onAction;J(l,D?.value)}},I="menuitem";F||(C.selectionMode==="single"?I="menuitemradio":C.selectionMode==="multiple"&&(I="menuitemcheckbox"));let X=tr(),ne=tr(),te=tr(),U={id:n,"aria-disabled":j||void 0,role:I,"aria-label":r["aria-label"],"aria-labelledby":X,"aria-describedby":[r["aria-describedby"],ne,te].filter(Boolean).join(" ")||void 0,"aria-controls":r["aria-controls"],"aria-haspopup":c,"aria-expanded":r["aria-expanded"]};if(C.selectionMode!=="none"&&!F&&(U["aria-checked"]=N),o){let J=Number(D?.index);U["aria-posinset"]=Number.isNaN(J)?void 0:J+1,U["aria-setsize"]=wc(e.collection)}let A=a.useRef(!1),P=J=>{p?.(J),A.current=J},V=a.useRef(null),E=J=>{J.pointerType!=="keyboard"&&(V.current={pointerType:J.pointerType}),J.pointerType==="mouse"&&(A.current||J.target.click()),f?.(J)},Z=J=>{b?.(J),O(),ss(J,L,D.props.href,D?.props.routerOptions);let Ye=V.current?.pointerType==="keyboard"?V.current?.key==="Enter"||C.selectionMode==="none"||C.isLink(l):C.selectionMode!=="multiple"||C.isLink(l);Ye=s??i??Ye,M&&!F&&Ye&&M(),V.current=null},{itemProps:q,isFocused:pe}=si({id:n,selectionManager:C,key:l,ref:t,shouldSelectOnPressUp:!0,allowsDifferentPressOrigin:!0,linkBehavior:"none",shouldUseVirtualFocus:H.shouldUseVirtualFocus}),{pressProps:Ie,isPressed:Ve}=Vr({onPressStart:u,onPress:d,onPressUp:E,onPressChange:P,onPressEnd:g,isDisabled:j}),{hoverProps:R}=qe({isDisabled:j,onHoverStart(J){!mr()&&!(_&&c)&&(C.setFocused(!0),C.setFocusedKey(l)),y?.(J)},onHoverChange:m,onHoverEnd:v}),{keyboardProps:k}=De({shortcuts:{" ":J=>{V.current={pointerType:"keyboard",key:" "},z(J).click(),Ft("keyboard")},Enter:J=>{V.current={pointerType:"keyboard",key:"Enter"};let Ye=z(J);if(Ye.tagName!=="A"){Ye.click(),Ft("keyboard");return}return Ft("keyboard"),{shouldPreventDefault:!1,shouldContinuePropagation:!1}}},onKeyDown:$,onKeyUp:w}),{focusableProps:oe}=St({onBlur:T,onFocus:S,onFocusChange:K},t),Q=se(D?.props);delete Q.id;let Ct=sl(D?.props);return{menuItemProps:{...U,...B(Q,Ct,F?{onFocus:q.onFocus,"data-collection":q["data-collection"],"data-key":q["data-key"]}:q,Ie,R,k,oe,H.shouldUseVirtualFocus||F?{onMouseDown:J=>J.preventDefault()}:void 0,j?void 0:{onClick:Z}),tabIndex:q.tabIndex!=null&&_&&!H.shouldUseVirtualFocus?-1:q.tabIndex},labelProps:{id:X},descriptionProps:{id:ne},keyboardShortcutProps:{id:te},isFocused:pe,isFocusVisible:pe&&C.isFocused&&mr()&&!_,isSelected:N,isPressed:Ve,isDisabled:j}}function Cc(r){let{heading:e,"aria-label":t}=r,n=Re();return{itemProps:{role:"presentation"},headingProps:e?{id:n,role:"presentation"}:{},groupProps:{role:"group","aria-label":t,"aria-labelledby":e?n:void 0}}}const Tt=2,Mc=50,Ac=1e3,In=Math.PI/12;function Kc(r){let{menuRef:e,submenuRef:t,isOpen:n,isDisabled:l}=r,i=a.useRef(void 0),s=a.useRef(void 0),o=a.useRef(0),c=a.useRef(void 0),u=a.useRef(void 0),f=a.useRef(void 0),d=a.useRef(2),[p,g]=a.useState(!1);Vt({ref:n?t:void 0,onResize:()=>{t.current&&(s.current=t.current.getBoundingClientRect(),f.current=void 0)}});let y=()=>{g(!1),d.current=Tt,i.current=void 0},m=os(),v=Fe($=>{p&&$.preventDefault()});a.useEffect(()=>{p&&e.current?e.current.style.pointerEvents="none":e.current.style.pointerEvents=""},[e,p]),Y(()=>{let $=t.current,w=e.current;if(l||!$||!n||m!=="pointer"||!w){y();return}s.current=$.getBoundingClientRect();let S=K=>{if(K.pointerType==="touch"||K.pointerType==="pen")return;let T=Date.now();if(T-o.currents.current.right?"left":"right"),Cw.getBoundingClientRect().right||Fw.getBoundingClientRect().bottom){y();return}let _=i.current.x,j=i.current.y,N=f.current==="right"?s.current.left-_:_-s.current.right,H=Math.atan2(j-s.current.top,N)+In,D=Math.atan2(j-s.current.bottom,N)-In,M=Math.atan2(j-F,f.current==="left"?-(C-_):C-_),L=MD;d.current=L?Math.min(d.current+1,Tt):Math.max(d.current-1,0),d.current>=Tt?g(!0):g(!1),o.current=T,i.current={x:C,y:F},L&&(c.current=setTimeout(()=>{y(),u.current=setTimeout(()=>{let O=document.elementFromPoint(C,F);O&&re(w,O)&&O.dispatchEvent(new PointerEvent("pointerover",{bubbles:!0,cancelable:!0}))},100)},Ac))};return window.addEventListener("pointermove",S),window.addEventListener("pointerdown",v,!0),()=>{window.removeEventListener("pointermove",S),window.removeEventListener("pointerdown",v,!0),clearTimeout(c.current),clearTimeout(u.current),d.current=Tt}},[l,n,e,m,g,t])}function Tc(r,e,t){let{parentMenuRef:n,submenuRef:l,type:i="menu",isDisabled:s,delay:o=200,shouldUseVirtualFocus:c}=r,u=Re(),f=Re(),{direction:d}=Ne(),p=a.useRef(void 0),g=a.useCallback(()=>{p.current&&(clearTimeout(p.current),p.current=void 0)},[p]),b=a.useCallback(C=>{g(),e.open(C)},[e,g]),y=a.useCallback(()=>{g(),e.close()},[e,g]);Y(()=>()=>{g()},[g]);let{keyboardProps:m}=De({shortcuts:{ArrowLeft:C=>{if(!Ze(C.currentTarget))return!1;if(d==="ltr"&&re(C.currentTarget,z(C))){y(),!c&&t.current&&xe(t.current);return}return!1},ArrowRight:C=>{if(!Ze(C.currentTarget))return!1;if(d==="rtl"&&re(C.currentTarget,z(C))){y(),!c&&t.current&&xe(t.current);return}return!1},Escape:C=>{if(!Ze(C.currentTarget))return!1;if(re(l.current,z(C))){y(),!c&&t.current&&xe(t.current);return}return!1}}}),v={id:f,"aria-labelledby":u,submenuLevel:e.submenuLevel,...i==="menu"&&{onClose:e.closeAll,autoFocus:e.focusStrategy??void 0,...m}},{keyboardProps:$}=De({shortcuts:{ArrowRight:()=>{if(!s)if(d==="ltr"){e.isOpen||b("first"),i==="menu"&&l?.current&&le()===t?.current&&xe(l.current);return}else if(e.isOpen){y();return}else return!1;return!1},ArrowLeft:()=>{if(!s)if(d==="rtl"){e.isOpen||b("first"),i==="menu"&&l?.current&&le()===t?.current&&xe(l.current);return}else if(e.isOpen){y();return}else return!1;return!1}}}),w=C=>{!s&&(C.pointerType==="virtual"||C.pointerType==="keyboard")&&b("first")},S=C=>{!s&&(C.pointerType==="touch"||C.pointerType==="mouse")&&b()},K=C=>{s||(C&&!e.isOpen?p.current||(p.current=setTimeout(()=>{b()},o)):C||g())};mt(n,"focusin",C=>{e.isOpen&&re(n.current,z(C))&&z(C)!==t.current&&y()});let T=C=>C!==t.current;return Kc({menuRef:n,submenuRef:l,isOpen:e.isOpen,isDisabled:s}),{submenuTriggerProps:{onKeyDown:$.onKeyDown,onKeyUp:$.onKeyUp,id:u,"aria-controls":e.isOpen?f:void 0,"aria-haspopup":s?void 0:i,"aria-expanded":e.isOpen?"true":"false",onPressStart:w,onPress:S,onHoverChange:K,isOpen:e.isOpen},submenuProps:v,popoverProps:{isNonModal:!0,shouldCloseOnInteractOutside:T}}}function ci(r){let e=Ur(r),[t,n]=a.useState(null),[l,i]=a.useState([]),s=()=>{i([]),e.close()};return{focusStrategy:t,...e,open(u=null){n(u),e.open()},toggle(u=null){n(u),e.toggle()},close(){s()},expandedKeysStack:l,openSubmenu:(u,f)=>{i(d=>f>d.length?d:[...d.slice(0,f),u])},closeSubmenu:(u,f)=>{i(d=>d[f]===u?d.slice(0,f):d)}}}function Rc(r,e){let{triggerKey:t}=r,{expandedKeysStack:n,openSubmenu:l,closeSubmenu:i,close:s}=e,[o]=a.useState(n?.length),c=a.useMemo(()=>n[o]===t,[n,t,o]),[u,f]=a.useState(null),d=a.useCallback(b=>{f(b??null),l(t,o)},[l,o,t]),p=a.useCallback(()=>{f(null),i(t,o)},[i,o,t]),g=a.useCallback(b=>{f(b??null),c?p():d(b)},[p,d,c]);return a.useMemo(()=>({focusStrategy:u,isOpen:c,open:d,close:p,closeAll:s,submenuLevel:o,setOpen:()=>{},toggle:g,point:null,setPoint:()=>{}}),[c,d,p,s,u,g,o])}class $e extends Set{constructor(e,t,n){super(e),e instanceof $e?(this.anchorKey=t??e.anchorKey,this.currentKey=n??e.currentKey):(this.anchorKey=t??null,this.currentKey=n??null)}}class wt{constructor(e,t,n){this.collection=e,this.state=t,this.allowsCellSelection=n?.allowsCellSelection??!1,this._isSelectAll=null,this.layoutDelegate=n?.layoutDelegate||null,this.fullCollection=n?.fullCollection||null}get selectionMode(){return this.state.selectionMode}get disallowEmptySelection(){return this.state.disallowEmptySelection}get selectionBehavior(){return this.state.selectionBehavior}setSelectionBehavior(e){this.state.setSelectionBehavior(e)}get isFocused(){return this.state.isFocused}setFocused(e){this.state.setFocused(e)}get focusedKey(){return this.state.focusedKey}get childFocusStrategy(){return this.state.childFocusStrategy}setFocusedKey(e,t){(e==null||this.collection.getItem(e))&&this.state.setFocusedKey(e,t)}get selectedKeys(){return this.state.selectedKeys==="all"?new Set(this.getSelectAllKeys()):this.state.selectedKeys}get rawSelection(){return this.state.selectedKeys}isSelected(e){if(this.state.selectionMode==="none")return!1;let t=this.getKey(e);return t==null?!1:this.state.selectedKeys==="all"?this.canSelectItem(t):this.state.selectedKeys.has(t)}get isEmpty(){return this.state.selectedKeys!=="all"&&this.state.selectedKeys.size===0}get isSelectAll(){if(this.isEmpty)return!1;if(this.state.selectedKeys==="all")return!0;if(this._isSelectAll!=null)return this._isSelectAll;let e=this.getSelectAllKeys(),t=this.state.selectedKeys;return this._isSelectAll=e.every(n=>t.has(n)),this._isSelectAll}get firstSelectedKey(){let e=null;for(let t of this.state.selectedKeys){let n=this.collection.getItem(t);(!e||n&&or(this.collection,n,e)<0)&&(e=n)}return e?.key??null}get lastSelectedKey(){let e=null;for(let t of this.state.selectedKeys){let n=this.collection.getItem(t);(!e||n&&or(this.collection,n,e)>0)&&(e=n)}return e?.key??null}get disabledKeys(){return this.state.disabledKeys}get disabledBehavior(){return this.state.disabledBehavior}extendSelection(e){if(this.selectionMode==="none")return;if(this.selectionMode==="single"){this.replaceSelection(e);return}let t=this.getKey(e);if(t==null)return;let n;if(this.state.selectedKeys==="all")n=new $e([t],t,t);else{let l=this.state.selectedKeys,i=l.anchorKey??t;n=new $e(l,i,t);for(let s of this.getKeyRange(i,l.currentKey??t))n.delete(s);for(let s of this.getKeyRange(t,i))this.canSelectItem(s)&&n.add(s)}this.state.setSelectedKeys(n)}getKeyRange(e,t){let n=this.collection.getItem(e),l=this.collection.getItem(t);return n&&l?or(this.collection,n,l)<=0?this.getKeyRangeInternal(e,t):this.getKeyRangeInternal(t,e):[]}getKeyRangeInternal(e,t){if(this.layoutDelegate?.getKeyRange)return this.layoutDelegate.getKeyRange(e,t);let n=[],l=e;for(;l!=null;){let i=this.collection.getItem(l);if(i&&(i.type==="item"||i.type==="cell"&&this.allowsCellSelection)&&n.push(l),l===t)return n;l=this.collection.getKeyAfter(l)}return[]}getKey(e){let t=this.collection.getItem(e);if(!t||t.type==="cell"&&this.allowsCellSelection)return e;for(;t&&t.type!=="item"&&t.parentKey!=null;)t=this.collection.getItem(t.parentKey);return!t||t.type!=="item"?null:t.key}toggleSelection(e){if(this.selectionMode==="none")return;if(this.selectionMode==="single"&&!this.isSelected(e)){this.replaceSelection(e);return}let t=this.getKey(e);if(t==null)return;let n=new $e(this.state.selectedKeys==="all"?this.getSelectAllKeys():this.state.selectedKeys);n.has(t)?n.delete(t):this.canSelectItem(t)&&(n.add(t),n.anchorKey=t,n.currentKey=t),!(this.disallowEmptySelection&&n.size===0)&&this.state.setSelectedKeys(n)}replaceSelection(e){if(this.selectionMode==="none")return;let t=this.getKey(e);if(t==null)return;let n=this.canSelectItem(t)?new $e([t],t,t):new $e;this.state.setSelectedKeys(n)}setSelectedKeys(e){if(this.selectionMode==="none")return;let t=new $e;for(let n of e){let l=this.getKey(n);if(l!=null&&(t.add(l),this.selectionMode==="single"))break}this.state.setSelectedKeys(t)}getSelectAllKeys(){let e=this.fullCollection??this.collection,t=[],n=l=>{for(;l!=null;){if(this.canSelectItemIn(l,e)){let i=e.getItem(l);i?.type==="item"&&t.push(l),i?.hasChildNodes&&(this.allowsCellSelection||i.type!=="item")&&n(Ec(oi(i,e))?.key??null)}l=e.getKeyAfter(l)}};return n(e.getFirstKey()),t}selectAll(){!this.isSelectAll&&this.selectionMode==="multiple"&&this.state.setSelectedKeys("all")}clearSelection(){!this.disallowEmptySelection&&(this.state.selectedKeys==="all"||this.state.selectedKeys.size>0)&&this.state.setSelectedKeys(new $e)}toggleSelectAll(){this.isSelectAll?this.clearSelection():this.selectAll()}select(e,t){this.selectionMode!=="none"&&(this.selectionMode==="single"?this.isSelected(e)&&!this.disallowEmptySelection?this.toggleSelection(e):this.replaceSelection(e):this.selectionBehavior==="toggle"||t&&(t.pointerType==="touch"||t.pointerType==="virtual")?this.toggleSelection(e):this.replaceSelection(e))}isSelectionEqual(e){if(e===this.state.selectedKeys)return!0;let t=this.selectedKeys;if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;for(let n of t)if(!e.has(n))return!1;return!0}canSelectItem(e){return this.canSelectItemIn(e,this.collection)}canSelectItemIn(e,t){if(this.state.selectionMode==="none"||this.state.disabledKeys.has(e))return!1;let n=t.getItem(e);return!(!n||n?.props?.isDisabled||n.type==="cell"&&!this.allowsCellSelection)}isDisabled(e){let t=this.collection.getItem(e);return this.state.disabledBehavior==="all"&&(this.state.disabledKeys.has(e)||!!t?.props?.isDisabled)&&t?.props?.disabledBehavior!=="selection"}isLink(e){return!!this.collection.getItem(e)?.props?.href}getItemProps(e){return this.collection.getItem(e)?.props}withCollection(e){return new wt(e,this.state,{allowsCellSelection:this.allowsCellSelection,layoutDelegate:this.layoutDelegate||void 0,fullCollection:this.fullCollection??this.collection})}}class kc{constructor(e,{expandedKeys:t}={}){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.iterable=e,t=t||new Set;let n=s=>{if(this.keyMap.set(s.key,s),s.childNodes&&(s.type==="section"||t.has(s.key)))for(let o of s.childNodes)n(o)};for(let s of e)n(s);let l=null,i=0;for(let[s,o]of this.keyMap)l?(l.nextKey=s,o.prevKey=l.key):(this.firstKey=s,o.prevKey=void 0),o.type==="item"&&(o.index=i++),l=o,l.nextKey=void 0;this.lastKey=l?.key??null}*[Symbol.iterator](){yield*this.iterable}get size(){return this.keyMap.size}getKeys(){return this.keyMap.keys()}getKeyBefore(e){let t=this.keyMap.get(e);return t?t.prevKey??null:null}getKeyAfter(e){let t=this.keyMap.get(e);return t?t.nextKey??null:null}getFirstKey(){return this.firstKey}getLastKey(){return this.lastKey}getItem(e){return this.keyMap.get(e)??null}at(e){const t=[...this.getKeys()];return this.getItem(t[e])}}class Lc{build(e,t){return this.context=t,Vn(()=>this.iterateCollection(e))}*iterateCollection(e){let{children:t,items:n}=e;if(x.isValidElement(t)&&t.type===x.Fragment)yield*this.iterateCollection({children:t.props.children,items:n});else if(typeof t=="function"){if(!n)throw new Error("props.children was a function but props.items is missing");let l=0;for(let i of n)yield*this.getFullNode({value:i,index:l},{renderer:t}),l++}else{let l=[];x.Children.forEach(t,s=>{s&&l.push(s)});let i=0;for(let s of l){let o=this.getFullNode({element:s,index:i},{});for(let c of o)i++,yield c}}}getKey(e,t,n,l){if(e.key!=null)return e.key;if(t.type==="cell"&&t.key!=null)return`${l}${t.key}`;let i=t.value;if(i!=null){let s=i.key??i.id;if(s==null)throw new Error("No key found for item");return s}return l?`${l}.${t.index}`:`$.${t.index}`}getChildState(e,t){return{renderer:t.renderer||e.renderer}}*getFullNode(e,t,n,l){if(x.isValidElement(e.element)&&e.element.type===x.Fragment){let c=[];x.Children.forEach(e.element.props.children,f=>{c.push(f)});let u=e.index??0;for(const f of c)yield*this.getFullNode({element:f,index:u++},t,n,l);return}let i=e.element;if(!i&&e.value&&t&&t.renderer){let c=this.cache.get(e.value);if(c&&(!c.shouldInvalidate||!c.shouldInvalidate(this.context))){c.index=e.index,c.parentKey=l?l.key:null,yield c;return}i=t.renderer(e.value)}if(x.isValidElement(i)){let c=i.type;if(typeof c!="function"&&typeof c.getCollectionNode!="function"){let p=i.type;throw new Error(`Unknown element <${p}> in collection.`)}let u=c.getCollectionNode(i.props,this.context),f=e.index??0,d=u.next();for(;!d.done&&d.value;){let p=d.value;e.index=f;let g=p.key??null;g==null&&(g=p.element?null:this.getKey(i,e,t,n));let y=[...this.getFullNode({...p,key:g,index:f,wrapper:Fc(e.wrapper,p.wrapper)},this.getChildState(t,p),n?`${n}${i.key}`:i.key,l)];for(let m of y){if(m.value=p.value??e.value??null,m.value&&this.cache.set(m.value,m),e.type&&m.type!==e.type)throw new Error(`Unsupported type <${cr(m.type)}> in <${cr(l?.type??"unknown parent type")}>. Only <${cr(e.type)}> is supported.`);f++,yield m}d=u.next(y)}return}if(e.key==null||e.type==null)return;let s=this,o={type:e.type,props:e.props,key:e.key,parentKey:l?l.key:null,value:e.value??null,level:(l?.level??0)+(l?.type==="item"?1:0),index:e.index,rendered:e.rendered,textValue:e.textValue??"","aria-label":e["aria-label"],wrapper:e.wrapper,shouldInvalidate:e.shouldInvalidate,hasChildNodes:e.hasChildNodes||!1,childNodes:Vn(function*(){if(!e.hasChildNodes||!e.childNodes)return;let c=0;for(let u of e.childNodes()){u.key!=null&&(u.key=`${o.key}${u.key}`);let f=s.getFullNode({...u,index:c},s.getChildState(t,u),o.key,o);for(let d of f)c++,yield d}})};yield o}constructor(){this.cache=new WeakMap}}function Vn(r){let e=[],t=null;return{*[Symbol.iterator](){for(let n of e)yield n;t||(t=r());for(let n of t)e.push(n),yield n}}}function Fc(r,e){if(r&&e)return t=>r(e(t));if(r)return r;if(e)return e}function cr(r){return r[0].toUpperCase()+r.slice(1)}function ui(r,e,t){let n=a.useMemo(()=>new Lc,[]),{children:l,items:i,collection:s}=r;return a.useMemo(()=>{if(s)return s;let c=n.build({children:l,items:i},t);return e(c)},[n,l,i,s,t,e])}function Dc(r,e){if(r.size!==e.size)return!1;for(let t of r)if(!e.has(t))return!1;return!0}function Xr(r){let{selectionMode:e="none",disallowEmptySelection:t=!1,allowDuplicateSelectionEvents:n,selectionBehavior:l="toggle",disabledBehavior:i="all"}=r,s=a.useRef(!1),[,o]=a.useState(!1),c=a.useRef(null),u=a.useRef(null),[,f]=a.useState(null),d=a.useMemo(()=>Hn(r.selectedKeys),[r.selectedKeys]),p=a.useMemo(()=>Hn(r.defaultSelectedKeys,new $e),[r.defaultSelectedKeys]),[g,b]=Et(d,p,r.onSelectionChange),y=a.useMemo(()=>r.disabledKeys?new Set(r.disabledKeys):new Set,[r.disabledKeys]),[m,v]=a.useState(l);l==="replace"&&m==="toggle"&&typeof g=="object"&&g.size===0&&v("replace");let $=a.useRef(l);return a.useEffect(()=>{l!==$.current&&(v(l),$.current=l)},[l]),{selectionMode:e,disallowEmptySelection:t,selectionBehavior:m,setSelectionBehavior:v,get isFocused(){return s.current},setFocused(w){s.current=w,o(w)},get focusedKey(){return c.current},get childFocusStrategy(){return u.current},setFocusedKey(w,S="first"){c.current=w,u.current=S,f(w)},selectedKeys:g,setSelectedKeys(w){(n||!Dc(w,g))&&b(w)},disabledKeys:y,disabledBehavior:i}}function Hn(r,e){return r?r==="all"?"all":new $e(r):e}function Nc(r){let{onExpandedChange:e}=r,[t,n]=Et(r.expandedKeys?new Set(r.expandedKeys):void 0,r.defaultExpandedKeys?new Set(r.defaultExpandedKeys):new Set,e),l=Xr(r),i=a.useMemo(()=>r.disabledKeys?new Set(r.disabledKeys):new Set,[r.disabledKeys]),s=ui(r,a.useCallback(c=>new kc(c,{expandedKeys:t}),[t]),null);return a.useEffect(()=>{l.focusedKey!=null&&!s.getItem(l.focusedKey)&&l.setFocusedKey(null)},[s,l.focusedKey]),{collection:s,expandedKeys:t,disabledKeys:i,toggleKey:c=>{n(Ic(t,c))},setExpandedKeys:n,selectionManager:new wt(s,l)}}function Ic(r,e){let t=new Set(r);return t.has(e)?t.delete(e):t.add(e),t}const Jr=a.createContext(null),Pt=a.createContext(null),Ot=a.createContext(null),_t=a.createContext(null);function Vc(r){let e=ci(r),t=a.useRef(null),{menuTriggerProps:n,menuProps:l}=hc({...r,type:"menu"},e,t),i=a.useRef(null);return il()?null:x.createElement(Ke,{values:[[Jr,{...l,ref:i}],[Qr,e],[Ot,e],[Wr,{trigger:"MenuTrigger",triggerRef:t,scrollRef:i,placement:"bottom start","aria-labelledby":l["aria-labelledby"],offset:r.trigger==="contextMenu"?0:void 0}]]},x.createElement(Io,{...n,ref:t,isPressed:e.isOpen},r.children))}const di=a.createContext(null);class Hc extends Ge{static{this.type="submenutrigger"}filter(e,t,n){let l=e.getItem(this.firstChildKey);if(l&&n(l.textValue,this)){let i=this.clone();return t.addDescendants(i,e),i}return null}}const jc=ma(Hc,(r,e,t)=>{let{CollectionBranch:n}=a.useContext(st),l=a.useContext(Pt),i=a.useContext(Ot),s=Rc({triggerKey:t.key},i),o=a.useRef(null),c=We(e),{parentMenuRef:u,shouldUseVirtualFocus:f}=a.useContext(di),{submenuTriggerProps:d,submenuProps:p,popoverProps:g}=Tc({parentMenuRef:u,submenuRef:o,delay:r.delay,shouldUseVirtualFocus:f},s,c);return x.createElement(Ke,{values:[[it,{...d,onAction:void 0,ref:c}],[Jr,{ref:o,...p}],[Qr,s],[Wr,{trigger:"SubmenuTrigger",triggerRef:c,placement:"end top","aria-labelledby":p["aria-labelledby"],...g}]]},x.createElement(n,{collection:l.collection,parent:t}),r.children[1])},r=>r.children[0]),Oc=a.forwardRef(function(e,t){return[e,t]=Se(e,t,Jr),x.createElement(fa,{content:x.createElement(ga,e)},n=>x.createElement(_c,{props:e,collection:n,menuRef:t}))});function _c({props:r,collection:e,menuRef:t}){[r,t]=Se(r,t,on);let{filter:n,...l}=r,i=a.useMemo(()=>n?e.filter(n):e,[e,n]),s=Nc({...r,collection:i,children:void 0}),o=a.useContext(Ot),{isVirtualized:c,CollectionRoot:u}=a.useContext(st),{menuProps:f}=xc({...r,isVirtualized:c,onClose:r.onClose||o?.close},s,t),d=fe({...r,children:void 0,defaultClassName:"react-aria-Menu",values:{isEmpty:s.collection.size===0}}),p=null;s.collection.size===0&&r.renderEmptyState&&(p=x.createElement("div",{role:"menuitem",style:{display:"contents"}},r.renderEmptyState()));let g=se(r,{global:!0});return x.createElement(El,null,x.createElement(ae.div,{...B(g,d,f),ref:t,slot:r.slot||void 0,"data-empty":s.collection.size===0||void 0,onScroll:r.onScroll},x.createElement(Ke,{values:[[Pt,s],[oc,{elementType:"div"}],[ec,{name:"MenuSection",render:fi}],[di,{parentMenuRef:t,shouldUseVirtualFocus:l?.shouldUseVirtualFocus}],[it,{shouldCloseOnSelect:r.shouldCloseOnSelect}],[on,null],[ds,null],[_t,s.selectionManager],[Ot,o??ci({})]]},x.createElement(Ea,null,x.createElement(u,{collection:s.collection,persistedKeys:ya(s.selectionManager.focusedKey),scrollRef:t}))),p))}class Zc extends wt{constructor(e,t){super(e.collection,t),this.parent=e}get focusedKey(){return this.parent.focusedKey}get isFocused(){return this.parent.isFocused}setFocusedKey(e,t){return this.parent.setFocusedKey(e,t)}setFocused(e){this.parent.setFocused(e)}get childFocusStrategy(){return this.parent.childFocusStrategy}}function fi(r,e,t,n="react-aria-MenuSection"){let l=a.useContext(Pt),{CollectionBranch:i}=a.useContext(st),[s,o]=jr(),{headingProps:c,groupProps:u}=Cc({heading:o,"aria-label":t.props["aria-label"]??void 0}),f=fe({...r,id:void 0,children:void 0,defaultClassName:n,className:t.props?.className,style:t.props?.style,values:void 0}),d=a.useContext(_t),p=Xr(r),g=r.selectionMode!=null?new Zc(d,p):d,b=Wt(it)?.shouldCloseOnSelect,y=se(r,{global:!0});return delete y.id,x.createElement(ae.section,{...B(y,f,u),ref:e},x.createElement(Ke,{values:[[lc,{...c,ref:s}],[_t,g],[it,{shouldCloseOnSelect:r.shouldCloseOnSelect??b}]]},x.createElement(i,{collection:l.collection,parent:t})))}const Bc=ma(Bo,fi),it=a.createContext(null),zc=qr(Zo,function(e,t,n){[e,t]=Se(e,t,it);let l=Wt(it)?.id,i=a.useContext(Pt),s=We(t),o=a.useContext(_t),{isVirtualized:c}=a.useContext(st),{menuItemProps:u,labelProps:f,descriptionProps:d,keyboardShortcutProps:p,...g}=Pc({...e,id:l,key:n.key,selectionManager:o,isVirtualized:c},i,s),{hoverProps:b,isHovered:y}=qe({isDisabled:g.isDisabled}),m=fe({...e,id:void 0,children:n.rendered,defaultClassName:"react-aria-MenuItem",values:{...g,isHovered:y,isFocusVisible:g.isFocusVisible,selectionMode:o.selectionMode,selectionBehavior:o.selectionBehavior,hasSubmenu:!!e["aria-haspopup"],isOpen:e["aria-expanded"]==="true"}}),v=e.href?ae.a:ae.div,$=se(e,{global:!0});return delete $.id,delete $.onClick,x.createElement(v,{...B($,m,u,b),ref:s,"data-disabled":g.isDisabled||void 0,"data-hovered":y||void 0,"data-focused":g.isFocused||void 0,"data-focus-visible":g.isFocusVisible||void 0,"data-pressed":g.isPressed||void 0,"data-selected":g.isSelected||void 0,"data-selection-mode":o.selectionMode==="none"?void 0:o.selectionMode,"data-has-submenu":!!e["aria-haspopup"]||void 0,"data-open":e["aria-expanded"]==="true"||void 0},x.createElement(Ke,{values:[[cs,{slots:{[us]:f,label:f,description:d}}],[ac,p],[Gr,{isSelected:g.isSelected}]]},m.children))});qr(_o,function(e,t,n){let l=a.useContext(Pt),{isLoading:i,onLoadMore:s,scrollOffset:o,...c}=e,u=a.useRef(null),f=a.useMemo(()=>({onLoadMore:s,collection:l?.collection,sentinelRef:u,scrollOffset:o}),[s,o,l?.collection]);Us(f,u);let d=fe({...c,id:void 0,children:n.rendered,defaultClassName:"react-aria-MenuLoadingIndicator",values:void 0}),p={tabIndex:-1};return x.createElement(x.Fragment,null,x.createElement("div",{style:{position:"relative",width:0,height:0},inert:gr(!0)},x.createElement("div",{"data-testid":"loadMoreSentinel",ref:u,style:{position:"absolute",height:1,width:1}})),i&&d.children&&x.createElement(x.Fragment,null,x.createElement(ae.div,{...B(se(e,{global:!0}),p),...d,role:"menuitem",ref:t},d.children)))});const Qr=a.createContext(null);class jn{constructor(e){this.keyMap=new Map,this.firstKey=null,this.lastKey=null,this.iterable=e;let t=s=>{if(this.keyMap.set(s.key,s),s.childNodes&&s.type==="section")for(let o of s.childNodes)t(o)};for(let s of e)t(s);let n=null,l=0,i=0;for(let[s,o]of this.keyMap)n?(n.nextKey=s,o.prevKey=n.key):(this.firstKey=s,o.prevKey=void 0),o.type==="item"&&(o.index=l++),(o.type==="section"||o.type==="item")&&i++,n=o,n.nextKey=void 0;this._size=i,this.lastKey=n?.key??null}*[Symbol.iterator](){yield*this.iterable}get size(){return this._size}getKeys(){return this.keyMap.keys()}getKeyBefore(e){let t=this.keyMap.get(e);return t?t.prevKey??null:null}getKeyAfter(e){let t=this.keyMap.get(e);return t?t.nextKey??null:null}getFirstKey(){return this.firstKey}getLastKey(){return this.lastKey}getItem(e){return this.keyMap.get(e)??null}at(e){const t=[...this.getKeys()];return this.getItem(t[e])}getChildren(e){return this.keyMap.get(e)?.childNodes||[]}}function Uc(r){let{filter:e,layoutDelegate:t}=r,n=Xr(r),l=a.useMemo(()=>r.disabledKeys?new Set(r.disabledKeys):new Set,[r.disabledKeys]),i=a.useCallback(u=>e?new jn(e(u)):new jn(u),[e]),s=a.useMemo(()=>({suppressTextValueWarning:r.suppressTextValueWarning}),[r.suppressTextValueWarning]),o=ui(r,i,s),c=a.useMemo(()=>new wt(o,n,{layoutDelegate:t}),[o,n,t]);return Wc(o,c),{collection:o,disabledKeys:l,selectionManager:c}}function Wc(r,e){const t=a.useRef(null);a.useEffect(()=>{if(e.focusedKey!=null&&!r.getItem(e.focusedKey)&&t.current){let n=t.current.getKeyAfter(e.focusedKey),l=null;for(;n!=null;){let i=r.getItem(n);if(i&&i.type==="item"&&!e.isDisabled(n)){l=n;break}n=t.current.getKeyAfter(n)}if(l==null)for(n=t.current.getKeyBefore(e.focusedKey);n!=null;){let i=r.getItem(n);if(i&&i.type==="item"&&!e.isDisabled(n)){l=n;break}n=t.current.getKeyBefore(n)}e.setFocusedKey(l)}t.current=r},[r,e])}var qc=Object.defineProperty,ye=(r,e)=>qc(r,"name",{value:e,configurable:!0});function Gc(r,e){const t=a.createContext(e);t.displayName=r+"Context";const n=ye(i=>{const{children:s,...o}=i,c=a.useMemo(()=>o,Object.values(o));return h.jsx(t.Provider,{value:c,children:s})},"Provider");n.displayName=r+"Provider";function l(i,s={}){const{optional:o=!1}=s,c=a.useContext(t);if(c)return c;if(e!==void 0)return e;if(!o)throw new Error(`\`${i}\` must be used within \`${r}\``)}return ye(l,"useContext"),[n,l]}ye(Gc,"createContext");function hi(r,e=[]){let t=[];function n(i,s){const o=a.createContext(s);o.displayName=i+"Context";const c=t.length;t=[...t,s];const u=ye(d=>{const{scope:p,children:g,...b}=d,y=p?.[r]?.[c]||o,m=a.useMemo(()=>b,Object.values(b));return h.jsx(y.Provider,{value:m,children:g})},"Provider");u.displayName=i+"Provider";function f(d,p,g={}){const{optional:b=!1}=g,y=p?.[r]?.[c]||o,m=a.useContext(y);if(m)return m;if(s!==void 0)return s;if(!b)throw new Error(`\`${d}\` must be used within \`${i}\``)}return ye(f,"useContext"),[u,f]}ye(n,"createContext");const l=ye(()=>{const i=t.map(s=>a.createContext(s));return ye(function(o){const c=o?.[r]||i;return a.useMemo(()=>({[`__scope${r}`]:{...o,[r]:c}}),[o,c])},"useScope")},"createScope");return l.scopeName=r,[n,mi(l,...e)]}ye(hi,"createContextScope");function mi(...r){const e=r[0];if(r.length===1)return e;const t=ye(()=>{const n=r.map(l=>({useScope:l(),scopeName:l.scopeName}));return ye(function(i){const s=n.reduce((o,{useScope:c,scopeName:u})=>{const d=c(i)[`__scope${u}`];return{...o,...d}},{});return a.useMemo(()=>({[`__scope${e.scopeName}`]:s}),[s])},"useComposedScopes")},"createScope");return t.scopeName=e.scopeName,t}ye(mi,"composeContextScopes");var Yc=Object.defineProperty,Xc=(r,e)=>Yc(r,"name",{value:e,configurable:!0});function pi(r){const e=a.useRef(r);return a.useEffect(()=>{e.current=r}),a.useMemo(()=>((...t)=>e.current?.(...t)),[])}Xc(pi,"useCallbackRef");var gi=globalThis?.document?a.useLayoutEffect:()=>{},Jc=Object.defineProperty,en=(r,e)=>Jc(r,"name",{value:e,configurable:!0});function Sr(r,e){if(typeof r=="function")return r(e);r!=null&&(r.current=e)}en(Sr,"setRef");function bi(...r){return e=>{let t=!1;const n=r.map(l=>{const i=Sr(l,e);return!t&&typeof i=="function"&&(t=!0),i});if(t)return()=>{for(let l=0;lQc(r,"name",{value:e,configurable:!0});function vi(r){const e=a.forwardRef((t,n)=>{let{children:l,...i}=t,s=null,o=!1;const c=[];wr(l)&&typeof Rt=="function"&&(l=Rt(l._payload)),a.Children.forEach(l,p=>{if(Si(p)){o=!0;const g=p;let b="child"in g.props?g.props.child:g.props.children;wr(b)&&typeof Rt=="function"&&(b=Rt(b._payload)),s=tu(g,b),c.push(s?.props?.children)}else c.push(p)}),s?s=a.cloneElement(s,void 0,c):!o&&a.Children.count(l)===1&&a.isValidElement(l)&&(s=l);const u=s?Ei(s):void 0,f=yi(n,u);if(!s){if(l||l===0)throw new Error(o?lu(r):nu(r));return l}const d=xi(i,s.props??{});return s.type!==a.Fragment&&(d.ref=n?f:u),a.cloneElement(s,d)});return e.displayName=`${r}.Slot`,e}we(vi,"createSlot");var $i=Symbol.for("radix.slottable");function eu(r){const e=we(t=>"child"in t?t.children(t.child):t.children,"Slottable");return e.displayName=`${r}.Slottable`,e.__radixId=$i,e}we(eu,"createSlottable");var tu=we((r,e)=>{if("child"in r.props){const t=r.props.child;return a.isValidElement(t)?a.cloneElement(t,void 0,r.props.children(t.props.children)):null}return a.isValidElement(e)?e:null},"getSlottableElementFromSlottable");function xi(r,e){const t={...e};for(const n in e){const l=r[n],i=e[n];/^on[A-Z]/.test(n)?l&&i?t[n]=(...o)=>{const c=i(...o);return l(...o),c}:l&&(t[n]=l):n==="style"?t[n]={...l,...i}:n==="className"&&(t[n]=[l,i].filter(Boolean).join(" "))}return{...r,...t}}we(xi,"mergeProps");function Ei(r){let e=Object.getOwnPropertyDescriptor(r.props,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?r.ref:(e=Object.getOwnPropertyDescriptor(r,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?r.props.ref:r.props.ref||r.ref)}we(Ei,"getElementRef");function Si(r){return a.isValidElement(r)&&typeof r.type=="function"&&"__radixId"in r.type&&r.type.__radixId===$i}we(Si,"isSlottable");var ru=Symbol.for("react.lazy");function wr(r){return r!=null&&typeof r=="object"&&"$$typeof"in r&&r.$$typeof===ru&&"_payload"in r&&wi(r._payload)}we(wr,"isLazyComponent");function wi(r){return typeof r=="object"&&r!==null&&"then"in r}we(wi,"isPromiseLike");var nu=we(r=>`${r} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,"createSlotError"),lu=we(r=>`${r} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,"createSlottableError"),Rt=Is[" use ".trim().toString()],au=Object.defineProperty,iu=(r,e)=>au(r,"name",{value:e,configurable:!0}),su=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],tn=su.reduce((r,e)=>{const t=vi(`Primitive.${e}`),n=a.forwardRef((l,i)=>{const{asChild:s,...o}=l,c=s?t:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),h.jsx(c,{...o,ref:i})});return n.displayName=`Primitive.${e}`,{...r,[e]:n}},{});function ou(r,e){r&&rt.flushSync(()=>r.dispatchEvent(e))}iu(ou,"dispatchDiscreteCustomEvent");var cu=Object.defineProperty,ke=(r,e)=>cu(r,"name",{value:e,configurable:!0}),Pi="Avatar",[uu,m0]=hi(Pi),du=[0,()=>{}],[fu,Ci]=uu(Pi),hu=a.forwardRef(ke(function(e,t){const{__scopeAvatar:n,...l}=e,[i,s]=a.useState("idle"),[o,c]=Ai();return h.jsx(fu,{scope:n,imageLoadingStatus:i,setImageLoadingStatus:s,imageCount:o,setImageCount:c,children:h.jsx(tn.span,{...l,ref:t})})},"Avatar")),mu="AvatarImage",pu=a.forwardRef(ke(function(e,t){const{__scopeAvatar:n,src:l,onLoadingStatusChange:i,...s}=e,o=Ci(mu,n);o.setImageCount;const c=Mi(l,{referrerPolicy:s.referrerPolicy,crossOrigin:s.crossOrigin,loadingStatus:o.imageLoadingStatus,setLoadingStatus:o.setImageLoadingStatus}),u=pi(d=>{i?.(d)}),f=a.useRef(c);return gi(()=>{const d=f.current;f.current=c,c!==d&&u(c)},[c,u]),c==="loaded"?h.jsx(tn.img,{...s,ref:t,src:l}):null},"AvatarImage")),gu="AvatarFallback",bu=a.forwardRef(ke(function(e,t){const{__scopeAvatar:n,delayMs:l,...i}=e,s=Ci(gu,n),[o,c]=a.useState(l===void 0);return a.useEffect(()=>{if(l!==void 0){const u=window.setTimeout(()=>c(!0),l);return()=>window.clearTimeout(u)}},[l]),o&&s.imageLoadingStatus!=="loaded"?h.jsx(tn.span,{...i,ref:t}):null},"AvatarFallback"));function Mi(r,{loadingStatus:e,setLoadingStatus:t,referrerPolicy:n,crossOrigin:l}){return gi(()=>{if(!r){t("error");return}const i=new window.Image,s=ke(c=>{const u=c.currentTarget;t(Pr(u))},"handleLoad"),o=ke(()=>t("error"),"handleError");return i.addEventListener("load",s),i.addEventListener("error",o),n&&(i.referrerPolicy=n),i.crossOrigin=l??null,i.src=r,t(Pr(i)),()=>{i.removeEventListener("load",s),i.removeEventListener("error",o),t("idle")}},[r,l,n,t]),e}ke(Mi,"useImageLoadingStatus");function Pr(r){return r.complete?r.naturalWidth>0?"loaded":"error":"loading"}ke(Pr,"getImageLoadingStatus");function Ai(){return du}ke(Ai,"useImageCount");function yu(r){}ke(yu,"useUpdateImageCount");const rn=a.createContext({}),On=({children:r,className:e,color:t,size:n,variant:l,[qs]:i,...s})=>{const o=a.use(Ws),c=i===!0,u=n??(c?o?.size:void 0),f=t??(c?o?.color:void 0),d=l??(c?o?.variant:void 0),p=x.useMemo(()=>Gs({color:f,size:u,variant:d}),[f,u,d]),g=x.useMemo(()=>({slots:p}),[p]);return h.jsx(rn,{value:g,children:h.jsx(hu,{className:p.base({className:e}),...s,children:r})})},vu=({className:r,crossOrigin:e,loading:t,onError:n,onLoad:l,sizes:i,src:s,srcSet:o,...c})=>{const{slots:u}=x.use(rn);return h.jsx(pu,{className:ue(u?.image,r),crossOrigin:e,loading:t,sizes:i,src:s,srcSet:o,onError:n,onLoad:l,...c})},$u=({className:r,color:e,...t})=>{const{slots:n}=x.use(rn);return h.jsx(bu,{className:ue(n?.fallback,r,{color:e}),"data-slot":"avatar-fallback",...t})},Zt=Object.assign(On,{Root:On,Image:vu,Fallback:$u});function Ki(r){let{onMoveStart:e,onMove:t,onMoveEnd:n}=r,l=a.useRef({didMove:!1,lastPosition:null,id:null}),{addGlobalListener:i,removeGlobalListener:s}=Ut(),o=a.useCallback((p,g,b,y)=>{b===0&&y===0||(l.current.didMove||(l.current.didMove=!0,e?.({type:"movestart",pointerType:g,shiftKey:p.shiftKey,metaKey:p.metaKey,ctrlKey:p.ctrlKey,altKey:p.altKey})),t?.({type:"move",pointerType:g,deltaX:b,deltaY:y,shiftKey:p.shiftKey,metaKey:p.metaKey,ctrlKey:p.ctrlKey,altKey:p.altKey}))},[e,t,l]),c=Fe(o),u=a.useCallback((p,g)=>{fs(),l.current.didMove&&n?.({type:"moveend",pointerType:g,shiftKey:p.shiftKey,metaKey:p.metaKey,ctrlKey:p.ctrlKey,altKey:p.altKey})},[n,l]),f=Fe(u);return{moveProps:a.useMemo(()=>{let p={},g=()=>{hs(),l.current.didMove=!1};{let y=v=>{if(v.pointerId===l.current.id){let $=v.pointerType||"mouse";c(v,$,v.pageX-(l.current.lastPosition?.pageX??0),v.pageY-(l.current.lastPosition?.pageY??0)),l.current.lastPosition={pageX:v.pageX,pageY:v.pageY}}},m=v=>{if(v.pointerId===l.current.id){let $=v.pointerType||"mouse";f(v,$),l.current.id=null;let w=nt(z(v));s(w,"pointermove",y,!1),s(w,"pointerup",m,!1),s(w,"pointercancel",m,!1)}};p.onPointerDown=v=>{if(v.button===0&&l.current.id==null){g(),v.stopPropagation(),v.preventDefault(),l.current.lastPosition={pageX:v.pageX,pageY:v.pageY},l.current.id=v.pointerId;let $=nt(z(v));i($,"pointermove",y,!1),i($,"pointerup",m,!1),i($,"pointercancel",m,!1)}}}let b=(y,m,v)=>{g(),c(y,"keyboard",m,v),f(y,"keyboard")};return p.onKeyDown=y=>{switch(y.key){case"Left":case"ArrowLeft":y.preventDefault(),y.stopPropagation(),b(y,-1,0);break;case"Right":case"ArrowRight":y.preventDefault(),y.stopPropagation(),b(y,1,0);break;case"Up":case"ArrowUp":y.preventDefault(),y.stopPropagation(),b(y,0,-1);break;case"Down":case"ArrowDown":y.preventDefault(),y.stopPropagation(),b(y,0,1);break}},p},[i,s,l])}}const nn=new WeakMap;function Cr(r,e){let t=nn.get(r);if(!t)throw new Error("Unknown slider state");return`${t.id}-${e}`}function xu(r,e,t){let{labelProps:n,fieldProps:l}=ol(r),i=r.orientation==="vertical";nn.set(e,{id:n.id??l.id,"aria-describedby":r["aria-describedby"],"aria-details":r["aria-details"]});let{direction:s}=Ne(),{addGlobalListener:o,removeGlobalListener:c}=Ut();const u=a.useRef(null),f=s==="rtl",d=a.useRef(null),{moveProps:p}=Ki({onMoveStart(){d.current=null},onMove({deltaX:m,deltaY:v}){if(!t.current)return;let{height:$,width:w}=t.current.getBoundingClientRect(),S=i?$:w;d.current==null&&u.current!=null&&(d.current=e.getThumbPercent(u.current)*S);let K=i?v:m;if((i||f)&&(K=-K),d.current+=K,u.current!=null&&t.current){const T=lt(d.current/S,0,1);e.setThumbPercent(u.current,T)}},onMoveEnd(){u.current!=null&&(e.setThumbDragging(u.current,!1),u.current=null)}});let g=a.useRef(void 0),b=(m,v,$,w)=>{if(t.current&&!r.isDisabled&&e.values.every((S,K)=>!e.isThumbDragging(K))){let{height:S,width:K,top:T,left:C}=t.current.getBoundingClientRect(),F=i?S:K,H=((i?w:$)-(i?T:C))/F;(s==="rtl"||i)&&(H=1-H);let D=e.getPercentValue(H),M,L=e.values.findIndex(O=>D-O<0);if(L===0)M=L;else if(L===-1)M=e.values.length-1;else{let O=e.values[L-1],I=e.values[L];Math.abs(O-D)=0&&e.isThumbEditable(M)?(m.preventDefault(),u.current=M,e.setFocusedThumb(M),g.current=v,e.setThumbDragging(u.current,!0),e.setThumbValue(M,D),o(window,"mouseup",y,!1),o(window,"touchend",y,!1),o(window,"pointerup",y,!1)):u.current=null}},y=m=>{(m.pointerId??m.changedTouches?.[0].identifier)===g.current&&(u.current!=null&&(e.setThumbDragging(u.current,!1),u.current=null),c(window,"mouseup",y,!1),c(window,"touchend",y,!1),c(window,"pointerup",y,!1))};return"htmlFor"in n&&n.htmlFor&&(delete n.htmlFor,n.onClick=()=>{document.getElementById(Cr(e,0))?.focus(),Ft("keyboard")}),{labelProps:n,groupProps:{role:"group",...l},trackProps:B({onMouseDown(m){m.button!==0||m.altKey||m.ctrlKey||m.metaKey||b(m,void 0,m.clientX,m.clientY)},onPointerDown(m){m.pointerType==="mouse"&&(m.button!==0||m.altKey||m.ctrlKey||m.metaKey)||b(m,m.pointerId,m.clientX,m.clientY)},onTouchStart(m){b(m,m.changedTouches[0].identifier,m.changedTouches[0].clientX,m.changedTouches[0].clientY)},style:{position:"relative",touchAction:"none"}},p),outputProps:{htmlFor:e.values.map((m,v)=>Cr(e,v)).join(" "),"aria-live":"off"}}}function Eu(r,e){let{index:t=0,isRequired:n,validationState:l,isInvalid:i,trackRef:s,inputRef:o,orientation:c=e.orientation,name:u,form:f}=r,d=r.isDisabled||e.isDisabled,p=c==="vertical",{direction:g}=Ne(),{addGlobalListener:b,removeGlobalListener:y}=Ut(),m=nn.get(e);const{labelProps:v,fieldProps:$}=ol({...r,id:Cr(e,t),"aria-labelledby":`${m.id} ${r["aria-labelledby"]??""}`.trim()}),w=e.values[t],S=a.useCallback(()=>{o.current&&xe(o.current)},[o]),K=e.focusedThumb===t;a.useEffect(()=>{K&&S()},[K,S]);let T=g==="rtl",C=a.useRef(null),F=I=>{e.setThumbDragging(t,!0),I(),e.setThumbDragging(t,!1)},{keyboardProps:_}=De({shortcuts:{PageUp:()=>F(()=>{e.incrementThumb(t,e.pageSize)}),PageDown:()=>F(()=>{e.decrementThumb(t,e.pageSize)}),Home:()=>F(()=>{e.setThumbValue(t,e.getThumbMinValue(t))}),End:()=>F(()=>{e.setThumbValue(t,e.getThumbMaxValue(t))})},allowRepeats:!0}),{moveProps:j}=Ki({onMoveStart(){C.current=null,e.setThumbDragging(t,!0)},onMove({deltaX:I,deltaY:X,pointerType:ne,shiftKey:te}){const{getThumbPercent:U,setThumbPercent:A,decrementThumb:P,incrementThumb:V,step:E,pageSize:Z}=e;if(!s.current)return;let{width:q,height:pe}=s.current.getBoundingClientRect(),Ie=p?pe:q;if(C.current==null&&(C.current=U(t)*Ie),ne==="keyboard")I>0&&T||I<0&&!T||X>0?P(t,te?Z:E):V(t,te?Z:E);else{let Ve=p?X:I;(p||T)&&(Ve=-Ve),C.current+=Ve,A(t,lt(C.current/Ie,0,1))}},onMoveEnd(){e.setThumbDragging(t,!1)}});e.setThumbEditable(t,!d);const{focusableProps:N}=St(B(r,{onFocus:()=>e.setFocusedThumb(t),onBlur:()=>e.setFocusedThumb(void 0)}),o);let H=a.useRef(void 0),D=I=>{S(),H.current=I,e.setThumbDragging(t,!0),b(window,"mouseup",M,!1),b(window,"touchend",M,!1),b(window,"pointerup",M,!1)},M=I=>{(I.pointerId??I.changedTouches?.[0].identifier)===H.current&&(S(),e.setThumbDragging(t,!1),y(window,"mouseup",M,!1),y(window,"touchend",M,!1),y(window,"pointerup",M,!1))},L=e.getThumbPercent(t);(p||g==="rtl")&&(L=1-L);let O=d?{}:B(_,j,{onMouseDown:I=>{I.button!==0||I.altKey||I.ctrlKey||I.metaKey||D()},onPointerDown:I=>{I.button!==0||I.altKey||I.ctrlKey||I.metaKey||D(I.pointerId)},onTouchStart:I=>{D(I.changedTouches[0].identifier)}});return ms(o,e.defaultValues[t],I=>{e.setThumbValue(t,I)}),{inputProps:B(N,$,{type:"range",tabIndex:d?void 0:0,min:e.getThumbMinValue(t),max:e.getThumbMaxValue(t),step:e.step,value:w,name:u,form:f,disabled:d,"aria-orientation":c,"aria-valuetext":e.getThumbValueLabel(t),"aria-required":n||void 0,"aria-invalid":i||l==="invalid"||void 0,"aria-errormessage":r["aria-errormessage"],"aria-describedby":[m["aria-describedby"],r["aria-describedby"]].filter(Boolean).join(" "),"aria-details":[m["aria-details"],r["aria-details"]].filter(Boolean).join(" "),onChange:I=>{e.setThumbValue(t,parseFloat(z(I).value))}}),thumbProps:{...O,style:{position:"absolute",[p?"top":"left"]:`${L*100}%`,transform:"translate(-50%, -50%)",touchAction:"none"}},labelProps:v,isDragging:e.isThumbDragging(t),isDisabled:d,isFocused:K}}const Su=0,wu=100,Pu=1;function Cu(r){const{isDisabled:e=!1,minValue:t=Su,maxValue:n=wu,numberFormatter:l,step:i=Pu,orientation:s="horizontal"}=r;let o=a.useMemo(()=>{let P=(n-t)/10;return P=ut(P,0,P+i,i),Math.max(P,i)},[i,n,t]),c=a.useCallback(P=>P?.map((V,E)=>{let Z=E===0?t:P[E-1],q=E===P.length-1?n:P[E+1];return ut(V,Z,q,i)}),[t,n,i]),u=a.useMemo(()=>c(Zn(r.value)),[r.value,c]),f=a.useMemo(()=>c(Zn(r.defaultValue)??[t]),[r.defaultValue,t,c]),d=Bn(r.value,r.defaultValue,r.onChange),p=Bn(r.value,r.defaultValue,r.onChangeEnd);const[g,b]=Et(u,f,d);let[y]=a.useState(g);const[m,v]=a.useState(new Array(g.length).fill(!1)),$=a.useRef(new Array(g.length).fill(!0)),[w,S]=a.useState(void 0),K=a.useRef(g),T=a.useRef(m);let C=P=>{K.current=P,b(P)},F=P=>{T.current=P,v(P)};function _(P){return(P-t)/(n-t)}function j(P){return P===0?t:g[P-1]}function N(P){return P===g.length-1?n:g[P+1]}function H(P){return $.current[P]}function D(P,V){$.current[P]=V}function M(P,V){if(e||!H(P))return;const E=j(P),Z=N(P);V=ut(V,E,Z,i);let q=_n(K.current,P,V);C(q)}function L(P,V){if(e||!H(P))return;V&&(K.current=g);const E=T.current[P];T.current=_n(T.current,P,V),F(T.current),p&&E&&!T.current.some(Boolean)&&p(K.current)}let O=a.useRef(null);function I(P=g){switch(typeof P=="number"&&(P=[P]),P.length){case 0:return"";case 1:return l.format(P[0]);case 2:return l.formatRange(P[0],P[1]);default:{let V=P.map(Z=>l.format(Z)),E=O.current;return(!E||E.resolvedOptions().locale!==l.resolvedOptions().locale)&&(E=O.current=new Intl.ListFormat(l.resolvedOptions().locale,{type:"unit"})),E.format(V)}}}function X(P,V){M(P,te(V))}function ne(P){return Math.round((P-t)/i)*i+t}function te(P){const V=P*(n-t)+t;return lt(ne(V),t,n)}function U(P,V=1){let E=Math.max(V,i);M(P,ut(g[P]+E,t,n,i))}function A(P,V=1){let E=Math.max(V,i);M(P,ut(g[P]-E,t,n,i))}return{values:g,defaultValues:r.defaultValue!==void 0?f:y,getThumbValue:P=>g[P],setThumbValue:M,setThumbPercent:X,isThumbDragging:P=>m[P],setThumbDragging:L,focusedThumb:w,setFocusedThumb:S,getThumbPercent:P=>_(g[P]),getValuePercent:_,getThumbValueLabel:P=>I(g[P]),getFormattedValue:I,getThumbMinValue:j,getThumbMaxValue:N,getPercentValue:te,isThumbEditable:H,setThumbEditable:D,incrementThumb:U,decrementThumb:A,step:i,pageSize:o,orientation:s,isDisabled:e}}function _n(r,e,t){return r[e]===t?r:[...r.slice(0,e),t,...r.slice(e+1)]}function Zn(r){if(r!=null)return Array.isArray(r)?r:[r]}function Bn(r,e,t){return n=>{t?.(typeof r=="number"||typeof e=="number"?n[0]:n)}}const Mu=a.createContext(null),Yt=a.createContext(null),ln=a.createContext(null),Ti=a.createContext(null),Au=a.forwardRef(function(e,t){[e,t]=Se(e,t,Mu);let n=a.useRef(null),l=ps(e.formatOptions),i=Cu({...e,numberFormatter:l}),[s,o]=jr(!e["aria-label"]&&!e["aria-labelledby"]),{groupProps:c,trackProps:u,labelProps:f,outputProps:d}=xu({...e,label:o},i,n),p=fe({...e,values:{orientation:i.orientation,isDisabled:i.isDisabled,state:i},defaultClassName:"react-aria-Slider"}),g=se(e,{global:!0});return delete g.id,x.createElement(Ke,{values:[[Yt,i],[ln,{...u,ref:n}],[Ti,d],[cl,{...f,ref:s}]]},x.createElement(ae.div,{...B(g,p,c),ref:t,slot:e.slot||void 0,"data-orientation":i.orientation,"data-disabled":i.isDisabled||void 0}))}),Ku=a.forwardRef(function(e,t){[e,t]=Se(e,t,Ti);let{children:n,style:l,className:i,render:s,...o}=e,c=a.useContext(Yt),u=fe({className:i,style:l,children:n,render:s,defaultChildren:c.getFormattedValue(),defaultClassName:"react-aria-SliderOutput",values:{orientation:c.orientation,isDisabled:c.isDisabled,state:c}});return x.createElement(ae.output,{...o,...u,ref:t,"data-orientation":c.orientation||void 0,"data-disabled":c.isDisabled||void 0})}),Tu=a.forwardRef(function(e,t){[e,t]=Se(e,t,ln);let n=a.useContext(Yt),{onHoverStart:l,onHoverEnd:i,onHoverChange:s,...o}=e,{hoverProps:c,isHovered:u}=qe({onHoverStart:l,onHoverEnd:i,onHoverChange:s}),f=fe({...e,defaultClassName:"react-aria-SliderTrack",values:{orientation:n.orientation,isDisabled:n.isDisabled,isHovered:u,state:n}});return x.createElement(ae.div,{...B(o,c),...f,ref:t,"data-hovered":u||void 0,"data-orientation":n.orientation||void 0,"data-disabled":n.isDisabled||void 0})}),Ru=a.forwardRef(function(e,t){let{inputRef:n=null}=e,l=a.useContext(Yt),{ref:i}=Wt(ln),{index:s=0}=e,o=a.useRef(null),c=n||o,[u,f]=jr(!e["aria-label"]&&!e["aria-labelledby"]),{thumbProps:d,inputProps:p,labelProps:g,isDragging:b,isFocused:y,isDisabled:m}=Eu({...e,index:s,trackRef:i,inputRef:c,label:f},l),{focusProps:v,isFocusVisible:$}=qt(),{hoverProps:w,isHovered:S}=qe(e),K=fe({...e,defaultClassName:"react-aria-SliderThumb",values:{state:l,isHovered:S,isDragging:b,isFocused:y,isFocusVisible:$,isDisabled:m}}),T=se(e,{global:!0});return delete T.id,x.createElement(ae.div,{...B(T,d,w),...K,ref:t,style:{...d.style,...K.style},"data-hovered":S||void 0,"data-dragging":b||void 0,"data-focused":y||void 0,"data-focus-visible":$||void 0,"data-disabled":m||void 0},x.createElement(ia,null,x.createElement("input",{ref:c,...B(p,v)})),x.createElement(Ke,{values:[[cl,{...g,ref:u}]]},K.children))});function ku(r,e){let t=e?.isDisabled,[n,l]=a.useState(!1);return Y(()=>{if(r?.current&&!t){let i=()=>{if(r.current){let o=Me(r.current,{tabbable:!0});l(!!o.nextNode())}};i();let s=new MutationObserver(i);return s.observe(r.current,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["tabIndex","disabled"]}),()=>{s.disconnect()}}}),t?!1:n}const Lu=1500,zn=500;let je={},Fu=0,Xe=!1,Ce=null,Oe=null;function Ri(r={}){let{delay:e=Lu,closeDelay:t=zn}=r,{isOpen:n,open:l,close:i}=Ur(r),[s,o]=a.useState(!1),c=a.useMemo(()=>`${++Fu}`,[]),u=a.useRef(null),f=a.useRef(i),d=()=>{je[c]=b},p=()=>{for(let m in je)m!==c&&(je[m](!0,!0),delete je[m])},g=m=>{u.current&&clearTimeout(u.current),u.current=null,p(),d(),o(!!m),Xe=!0,l(),Ce&&(clearTimeout(Ce),Ce=null),Oe&&(clearTimeout(Oe),Oe=null)},b=(m,v)=>{o(!!v),m||t<=0?(u.current&&clearTimeout(u.current),u.current=null,f.current()):u.current||(u.current=setTimeout(()=>{u.current=null,f.current()},t)),Ce&&(clearTimeout(Ce),Ce=null),Xe&&(Oe&&clearTimeout(Oe),Oe=setTimeout(()=>{delete je[c],Oe=null,Xe=!1},Math.max(zn,t)))},y=()=>{p(),d(),!n&&!Xe?(Ce&&clearTimeout(Ce),Ce=setTimeout(()=>{Ce=null,Xe=!0,g(!1)},e)):n||g(!0)};return a.useEffect(()=>{f.current=i},[i]),a.useEffect(()=>()=>{u.current&&clearTimeout(u.current),je[c]&&delete je[c]},[c]),{isOpen:n,shouldSkipAnimation:s,open:m=>{!m&&e>0&&!u.current?y():g(Xe)},close:b}}const ki=new WeakMap;function Bt(r,e,t){return r?(typeof e=="string"&&(e=e.replace(/\s+/g,"")),`${ki.get(r)}-${t}-${e}`):""}function Du(r,e,t){let{key:n,isDisabled:l,shouldSelectOnPressUp:i}=r,{selectionManager:s,selectedKey:o}=e,c=n===o,u=l||e.isDisabled||e.selectionManager.isDisabled(n),f=e.collection.getItem(n),{itemProps:d,isPressed:p}=si({selectionManager:s,key:n,ref:t,isDisabled:u,shouldSelectOnPressUp:i??f?.props.href!=null,linkBehavior:"selection"}),g=Bt(e,n,"tab"),b=Bt(e,n,"tabpanel"),{tabIndex:y}=d,m=se(f?.props,{labelable:!0});delete m.id;let v=sl(f?.props),{focusableProps:$}=St({...f?.props,isDisabled:u},t);return{tabProps:B(m,$,v,d,{id:g,"aria-selected":c,"aria-disabled":u||void 0,"aria-controls":c?b:void 0,tabIndex:u?void 0:y,role:"tab"}),isSelected:c,isDisabled:u,isPressed:p}}function Nu(r,e,t){let n=ku(t)?void 0:0;const l=Bt(e,r.id??e?.selectedKey,"tabpanel"),i=Ir({...r,id:l,"aria-labelledby":Bt(e,e?.selectedKey,"tab")});return{tabPanelProps:B(i,{tabIndex:n,role:"tabpanel","aria-describedby":r["aria-describedby"],"aria-details":r["aria-details"]})}}class Iu{constructor(e,t,n,l=new Set){this.collection=e,this.flipDirection=t==="rtl",this.disabledKeys=l,this.tabDirection=n==="horizontal"}getKeyLeftOf(e){return this.flipDirection?this.getNextKey(e):this.getPreviousKey(e)}getKeyRightOf(e){return this.flipDirection?this.getPreviousKey(e):this.getNextKey(e)}isDisabled(e){return this.disabledKeys.has(e)||!!this.collection.getItem(e)?.props?.isDisabled}getFirstKey(){let e=this.collection.getFirstKey();return e!=null&&this.isDisabled(e)&&(e=this.getNextKey(e)),e}getLastKey(){let e=this.collection.getLastKey();return e!=null&&this.isDisabled(e)&&(e=this.getPreviousKey(e)),e}getKeyAbove(e){return this.tabDirection?null:this.getPreviousKey(e)}getKeyBelow(e){return this.tabDirection?null:this.getNextKey(e)}getNextKey(e){let t=e;do t=this.collection.getKeyAfter(t),t==null&&(t=this.collection.getFirstKey());while(t!=null&&this.isDisabled(t)&&t!==e);return t}getPreviousKey(e){let t=e;do t=this.collection.getKeyBefore(t),t==null&&(t=this.collection.getLastKey());while(t!=null&&this.isDisabled(t)&&t!==e);return t}}function Vu(r,e,t){let{orientation:n="horizontal",keyboardActivation:l="automatic"}=r,{collection:i,selectionManager:s,disabledKeys:o}=e,{direction:c}=Ne(),u=a.useMemo(()=>new Iu(i,c,n,o),[i,o,n,c]),{collectionProps:f}=ii({ref:t,selectionManager:s,keyboardDelegate:u,selectOnFocus:l==="automatic",disallowEmptySelection:!0,scrollRef:t,linkBehavior:"selection"}),d=Re();ki.set(e,d);let p=Ir({...r,id:d});return{tabListProps:{...B(f,p),role:"tablist","aria-orientation":n,tabIndex:void 0}}}function Hu(r){let[e,t]=Et(r.selectedKey,r.defaultSelectedKey??null,r.onSelectionChange),n=a.useMemo(()=>e!=null?[e]:[],[e]),{collection:l,disabledKeys:i,selectionManager:s}=Uc({...r,selectionMode:"single",disallowEmptySelection:!0,allowDuplicateSelectionEvents:!0,selectedKeys:n,onSelectionChange:c=>{if(c==="all")return;let u=c.values().next().value??null;u===e&&r.onSelectionChange&&r.onSelectionChange(u),t(u)}}),o=e!=null?l.getItem(e):null;return{collection:l,disabledKeys:i,selectionManager:s,selectedKey:e,setSelectedKey:t,selectedItem:o}}function ju(r){let e=Hu({...r,onSelectionChange:r.onSelectionChange?s=>{s!=null&&r.onSelectionChange?.(s)}:void 0,suppressTextValueWarning:!0,defaultSelectedKey:r.defaultSelectedKey??Un(r.collection,r.disabledKeys?new Set(r.disabledKeys):new Set)??void 0}),{selectionManager:t,collection:n,selectedKey:l}=e,i=a.useRef(l);return a.useEffect(()=>{let s=l;r.selectedKey==null&&(t.isEmpty||s==null||!n.getItem(s))&&(s=Un(n,e.disabledKeys),s!=null&&t.setSelectedKeys([s])),(s!=null&&t.focusedKey==null||!t.isFocused&&s!==i.current)&&t.setFocusedKey(s),i.current=s}),{...e,isDisabled:r.isDisabled||!1}}function Un(r,e){let t=null;if(r){for(t=r.getFirstKey();t!=null&&(e.has(t)||r.getItem(t)?.props?.isDisabled)&&t!==r.getLastKey();)t=r.getKeyAfter(t);t!=null&&(e.has(t)||r.getItem(t)?.props?.isDisabled)&&t===r.getLastKey()&&(t=r.getFirstKey())}return t}const Xt=a.createContext(null),Ue=a.createContext(null),Ou=a.forwardRef(function(e,t){[e,t]=Se(e,t,Xt);let{children:n,orientation:l="horizontal"}=e;return n=a.useMemo(()=>typeof n=="function"?n({orientation:l,defaultChildren:null}):n,[n,l]),x.createElement(fa,{content:n},i=>x.createElement(_u,{props:e,collection:i,tabsRef:t}))});function _u({props:r,tabsRef:e,collection:t}){let{orientation:n="horizontal"}=r,l=ju({...r,collection:t,children:void 0}),{focusProps:i,isFocused:s,isFocusVisible:o}=qt({within:!0}),c=a.useMemo(()=>({orientation:n,isFocusWithin:s,isFocusVisible:o}),[n,s,o]),u=fe({...r,defaultClassName:"react-aria-Tabs",values:c}),f=se(r,{global:!0});return x.createElement(ae.div,{...B(f,u,i),ref:e,slot:r.slot||void 0,"data-focused":s||void 0,"data-orientation":n,"data-focus-visible":o||void 0,"data-disabled":l.isDisabled||void 0},x.createElement(Ke,{values:[[Xt,r],[Ue,l]]},u.children))}const Wn=a.forwardRef(function(e,t){return a.useContext(Ue)?x.createElement(Zu,{props:e,forwardedRef:t}):x.createElement(ga,e)});function Zu({props:r,forwardedRef:e}){let t=a.useContext(Ue),{CollectionRoot:n}=a.useContext(st),{orientation:l="horizontal",keyboardActivation:i="automatic"}=Wt(Xt),s=We(e),{tabListProps:o}=Vu({...r,orientation:l,keyboardActivation:i},t,s),c=fe({...r,children:null,defaultClassName:"react-aria-TabList",values:{orientation:l,state:t}}),u=se(r,{global:!0});return delete u.id,x.createElement(ae.div,{...B(u,c,o),ref:s,"data-orientation":l||void 0},x.createElement(Ea,null,x.createElement(n,{collection:t.collection,persistedKeys:ya(t.selectionManager.focusedKey)})))}class Bu extends Ge{static{this.type="item"}}const zu=qr(Bu,(r,e,t)=>{let n=a.useContext(Ue),l=We(e),{tabProps:i,isSelected:s,isDisabled:o,isPressed:c}=Du({key:t.key,...r},n,l),{focusProps:u,isFocused:f,isFocusVisible:d}=qt(),{hoverProps:p,isHovered:g}=qe({isDisabled:o,onHoverStart:r.onHoverStart,onHoverEnd:r.onHoverEnd,onHoverChange:r.onHoverChange}),b=fe({...r,id:void 0,children:t.rendered,defaultClassName:"react-aria-Tab",values:{isSelected:s,isDisabled:o,isFocused:f,isFocusVisible:d,isPressed:c,isHovered:g}}),y=t.props.href?ae.a:ae.div,m=se(r,{global:!0});return delete m.id,delete m.onClick,x.createElement(y,{...B(m,b,i,u,p),ref:l,"data-selected":s||void 0,"data-disabled":o||void 0,"data-focused":f||void 0,"data-focus-visible":d||void 0,"data-pressed":c||void 0,"data-hovered":g||void 0},x.createElement(Gr.Provider,{value:{isSelected:s}},b.children))}),Uu=gs(function(e,t){const n=a.useContext(Ue);let l=We(t),i=n.selectedKey===e.id,[s,o]=a.useState(n.selectedKey!=null?i:null);s==null&&n.selectedKey!=null?o(i):!i&&s&&o(!1);let c=Zr(l,i);return!i&&!e.shouldForceMount&&!c?null:x.createElement(Wu,{...e,tabPanelRef:l,isInitiallySelected:s||!1,isExiting:c})});function Wu(r){let e=a.useContext(Ue),{id:t,tabPanelRef:n,isInitiallySelected:l,isExiting:i,...s}=r,{tabPanelProps:o}=Nu(r,e,n),{focusProps:c,isFocused:u,isFocusVisible:f}=qt(),d=e.selectedKey===r.id,p=_r(n)&&!l,g=fe({...r,defaultClassName:"react-aria-TabPanel",values:{isFocused:u,isFocusVisible:f,isInert:gr(!d),isEntering:p,isExiting:i,state:e}}),b=se(s,{global:!0});delete b.id;let y=d?B(b,o,c,g):B(b,g);return x.createElement(ae.div,{...y,ref:n,"data-focused":u||void 0,"data-focus-visible":f||void 0,inert:gr(!d||r.inert),"data-inert":d?void 0:"true","data-entering":p||void 0,"data-exiting":i||void 0},x.createElement(Ke,{values:[[Xt,null],[Ue,null]]},x.createElement(st.Provider,{value:ba},g.children)))}const Mr=x.createContext(null);function qu(r){let{children:e}=r,t=a.useContext(Mr),[n,l]=a.useState(0),i=a.useMemo(()=>({parent:t,modalCount:n,addModal(){l(s=>s+1),t&&t.addModal()},removeModal(){l(s=>s-1),t&&t.removeModal()}}),[t,n]);return x.createElement(Mr.Provider,{value:i},e)}function Gu(){let r=a.useContext(Mr);return{modalProviderProps:{"aria-hidden":r&&r.modalCount>0?!0:void 0}}}function Yu(r){let{modalProviderProps:e}=Gu();return x.createElement("div",{"data-overlay-container":!0,...r,...e})}function Xu(r){return x.createElement(qu,null,x.createElement(Yu,r))}function Ju(r){let e=zt(),{portalContainer:t=e?null:document.body,...n}=r,{getContainer:l}=ll();if(!r.portalContainer&&l&&(t=l()),x.useEffect(()=>{if(t?.closest("[data-overlay-container]"))throw new Error("An OverlayContainer must not be inside another container. Please change the portalContainer prop.")},[t]),!t)return null;let i=x.createElement(Xu,n);return al.createPortal(i,t)}function Qu(r,e){let t=se(r,{labelable:!0}),{hoverProps:n}=qe({onHoverStart:()=>e?.open(!0),onHoverEnd:()=>e?.close()});return{tooltipProps:B(t,n,{role:"tooltip"})}}function ed(r,e,t){let{isDisabled:n,trigger:l,shouldCloseOnPress:i=!0}=r,s=Re(),o=a.useRef(!1),c=a.useRef(!1),u=()=>{(o.current||c.current)&&e.open(c.current)},f=$=>{!o.current&&!c.current&&e.close($)};a.useEffect(()=>{let $=w=>{t&&t.current&&w.key==="Escape"&&(w.stopPropagation(),e.close(!0))};if(e.isOpen)return document.addEventListener("keydown",$,!0),()=>{document.removeEventListener("keydown",$,!0)}},[t,e]);let d=()=>{l!=="focus"&&(yt()==="pointer"?o.current=!0:o.current=!1,u())},p=()=>{l!=="focus"&&(c.current=!1,o.current=!1,f())},g=()=>{i&&(c.current=!1,o.current=!1,f(!0))},b=()=>{mr()&&(c.current=!0,u())},y=()=>{c.current=!1,o.current=!1,f(!0)},{hoverProps:m}=qe({isDisabled:n,onHoverStart:d,onHoverEnd:p}),{focusableProps:v}=St({isDisabled:n,onFocus:b,onBlur:y},t);return{triggerProps:{"aria-describedby":e.isOpen?s:void 0,...B(v,m,{onPointerDown:g,onKeyDown:g}),tabIndex:void 0},tooltipProps:{id:s}}}const xt=a.createContext(null),Li=a.createContext(null);function td(r){let e=Ri(r),t=a.useRef(null),{triggerProps:n,tooltipProps:l}=ed(r,e,t);return x.createElement(Ke,{values:[[xt,e],[Li,{...l,triggerRef:t}]]},x.createElement(bs,{...n,ref:t},r.children))}const rd=a.forwardRef(function({UNSTABLE_portalContainer:e,...t},n){[t,n]=Se(t,n,Li);let l=a.useContext(xt),i=Ri(t),s=t.isOpen!=null||t.defaultOpen!=null||!l?i:l,o=Zr(n,s.isOpen),c=t.isExiting||!s.shouldSkipAnimation&&o||!1;return!s.isOpen&&!c?null:x.createElement(Ju,{portalContainer:e},x.createElement(nd,{...t,tooltipRef:n,isExiting:c}))});function nd(r){let e=a.useContext(xt),t=a.useRef(null),{overlayProps:n,arrowProps:l,placement:i,triggerAnchorPoint:s}=xl({placement:r.placement||"top",targetRef:r.triggerRef,overlayRef:r.tooltipRef,arrowRef:t,offset:r.offset,crossOffset:r.crossOffset,isOpen:e.isOpen,arrowBoundaryOffset:r.arrowBoundaryOffset,shouldFlip:r.shouldFlip,containerPadding:r.containerPadding,onClose:()=>e.close(!0)}),o=_r(r.tooltipRef,!!i),c=r.isEntering||!e.shouldSkipAnimation&&o||!1,u=fe({...r,defaultClassName:"react-aria-Tooltip",values:{placement:i,isEntering:c,isExiting:r.isExiting,state:e}});r=B(r,n);let{tooltipProps:f}=Qu(r,e),d=se(r,{global:!0});return x.createElement(ae.div,{...B(d,u,f),ref:r.tooltipRef,style:{...n.style,"--trigger-anchor-point":s?`${s.x}px ${s.y}px`:void 0,...u.style},"data-placement":i??void 0,"data-entering":c||void 0,"data-exiting":r.isExiting||void 0},x.createElement(Br.Provider,{value:{...l,placement:i,ref:t}},u.children))}const an=a.createContext({}),ld=({children:r,className:e,variant:t,...n})=>{const l=x.useMemo(()=>Xs({variant:t}),[t]);return h.jsx(zc,{className:de(e,l.item()),"data-slot":"menu-item",...n,children:i=>h.jsx(an,{value:{slots:l,state:i},children:typeof r=="function"?r(i):r})})},ad=({children:r,className:e,type:t="checkmark",...n})=>{const{slots:l,state:i}=a.use(an),s=i?.isSelected,o=typeof r=="function"?r(i??{}):r||(t==="dot"?h.jsx("svg",{"aria-hidden":"true","data-slot":"menu-item-indicator--dot",fill:"currentColor",fillRule:"evenodd",role:"presentation",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",children:h.jsx("path",{clipRule:"evenodd",d:"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14",fillRule:"evenodd"})}):h.jsx("svg",{"aria-hidden":"true","data-slot":"menu-item-indicator--checkmark",fill:"none",role:"presentation",stroke:"currentColor",strokeDasharray:22,strokeDashoffset:s?44:66,strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,viewBox:"0 0 17 18",children:h.jsx("polyline",{points:"1 9 7 14 15 4"})}));return h.jsx(Te.span,{"aria-hidden":"true",className:ue(l?.indicator,e),"data-slot":"menu-item-indicator","data-type":t,"data-visible":s||void 0,...n,children:o})},id=({children:r,className:e,...t})=>{const{slots:n,state:l}=a.use(an);if(!l?.hasSubmenu)return null;const o=r??h.jsx(ul,{});return h.jsx(Te.span,{"aria-hidden":"true",className:ue(n?.submenuIndicator,e),"data-slot":"submenu-indicator",...t,children:o})},sd=({children:r,className:e,...t})=>{const n=x.useMemo(()=>Js({class:typeof e=="string"?e:void 0}),[e]);return h.jsx(Bc,{className:n,...t,children:r})},Jt=a.createContext({}),qn=({children:r,...e})=>{const t=x.useMemo(()=>Ys(),[]),n=x.useMemo(()=>({slots:t}),[t]);return h.jsx(Jt,{value:n,children:h.jsx(Vc,{...e,children:r})})},od=({children:r,className:e,...t})=>{const{slots:n}=a.use(Jt);return h.jsx(vs,{className:de(e,n?.trigger()),"data-slot":"dropdown-trigger",...t,children:l=>h.jsx(h.Fragment,{children:typeof r=="function"?r(l):r})})},cd=({children:r,className:e,placement:t,...n})=>{const{slots:l}=a.use(Jt);return h.jsx(ys,{value:{variant:"default"},children:h.jsx(jo,{...n,className:de(e,l?.popover()),"data-slot":"dropdown-popover",placement:t,children:r})})};function ud({className:r,...e}){const{slots:t}=a.use(Jt);return h.jsx(Oc,{className:de(r,t?.menu()),"data-selection-mode":e.selectionMode,"data-slot":"dropdown-menu",...e})}const dd=r=>h.jsx(ld,{...r}),fd=r=>h.jsx(id,{...r}),hd=({children:r,...e})=>h.jsx(jc,{"data-slot":"dropdown-submenu-trigger",...e,children:r}),md=r=>h.jsx(ad,{...r}),pd=r=>h.jsx(sd,{...r}),ft=Object.assign(qn,{Root:qn,Trigger:od,Popover:cd,Menu:ud,Section:pd,Item:dd,ItemIndicator:md,SubmenuIndicator:fd,SubmenuTrigger:hd}),Qt=a.createContext({}),Ar=({children:r,className:e,color:t,size:n,...l})=>{const i=x.useMemo(()=>Qs({color:t,size:n}),[t,n]);return h.jsx($s,{"data-slot":"progress-bar",...l,className:de(e,i.base()),children:s=>h.jsx(Qt,{value:{slots:i,state:s},children:typeof r=="function"?r(s):r})})};Ar.displayName="HeroUI.ProgressBar";const Fi=({children:r,className:e,...t})=>{const{slots:n,state:l}=a.use(Qt);return h.jsx(Te.span,{className:ue(n?.output,e),"data-slot":"progress-bar-output",...t,children:r??l?.valueText})};Fi.displayName="HeroUI.ProgressBar.Output";const Di=({children:r,className:e,...t})=>{const{slots:n}=a.use(Qt);return h.jsx(Te.div,{className:ue(n?.track,e),"data-slot":"progress-bar-track",...t,children:r})};Di.displayName="HeroUI.ProgressBar.Track";const Ni=({className:r,style:e,...t})=>{const{slots:n,state:l}=a.use(Qt);return h.jsx(Te.div,{className:ue(n?.fill,r),"data-slot":"progress-bar-fill",style:{...e,width:l?.isIndeterminate?void 0:`${l?.percentage??0}%`},...t})};Ni.displayName="HeroUI.ProgressBar.Fill";const ur=Object.assign(Ar,{Root:Ar,Output:Fi,Track:Di,Fill:Ni}),gd=r=>{const{containerRef:e,isEnabled:t,offset:n,onVisibilityChange:l,orientation:i,visibility:s}=r,o=a.useRef(l);a.useEffect(()=>{o.current=l},[l]);const c=a.useRef(null),u=a.useRef(null),f=a.useCallback(()=>{const d=e.current;if(!d)return;const p=i==="vertical",g=p?d.scrollTop:Math.abs(d.scrollLeft),b=p?d.scrollHeight:d.scrollWidth,y=p?d.clientHeight:d.clientWidth,m=g>n,v=g+y+n{u.current=null;const w=o.current;p?m&&v?(d.dataset.topBottomScroll="true",delete d.dataset.topScroll,delete d.dataset.bottomScroll,w?.("both")):(d.dataset.topScroll=String(m),d.dataset.bottomScroll=String(v),delete d.dataset.topBottomScroll,w&&w(m?"top":v?"bottom":"none")):m&&v?(d.dataset.leftRightScroll="true",delete d.dataset.leftScroll,delete d.dataset.rightScroll,w?.("both")):(d.dataset.leftScroll=String(m),d.dataset.rightScroll=String(v),delete d.dataset.leftRightScroll,w&&w(m?"left":v?"right":"none"))}))},[e,i,n]);a.useEffect(()=>{const d=e.current;if(!d||!t||s!=="auto")return;f(),d.addEventListener("scroll",f,{passive:!0});const p=new ResizeObserver(f);p.observe(d);const g=new MutationObserver(f);return g.observe(d,{attributeFilter:["class","style"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),()=>{d.removeEventListener("scroll",f),p.disconnect(),g.disconnect(),u.current!==null&&(cancelAnimationFrame(u.current),u.current=null),c.current=null}},[e,s,t,f])},Kr=({children:r,className:e,hideScrollBar:t=!1,isEnabled:n=!0,offset:l=0,onVisibilityChange:i,orientation:s="vertical",ref:o,size:c=40,style:u,variant:f="fade",visibility:d="auto",...p})=>{const g=a.useRef(null);gd({containerRef:g,isEnabled:n,offset:l,onVisibilityChange:i,orientation:s,visibility:d}),xs(()=>{const v=g.current;!v||d==="auto"||(delete v.dataset.topScroll,delete v.dataset.bottomScroll,delete v.dataset.topBottomScroll,delete v.dataset.leftScroll,delete v.dataset.rightScroll,delete v.dataset.leftRightScroll,d==="both"?v.dataset[s==="vertical"?"topBottomScroll":"leftRightScroll"]="true":d!=="none"&&(v.dataset[`${d}Scroll`]="true"))},[d,s]);const b=a.useMemo(()=>eo({hideScrollBar:t,orientation:s,variant:f}),[s,t,f]),y={"--scroll-shadow-size":`${c}px`,"--scroll-shadow-offset":`${l}px`,...u},m=a.useMemo(()=>Es(g,o),[g,o]);return h.jsx("div",{ref:m,className:b.base({className:e}),"data-orientation":s,"data-scroll-shadow-mode":n&&d==="auto"?"auto":"manual","data-scroll-shadow-size":c,"data-slot":"scroll-shadow",style:y,...p,children:r})};Kr.displayName="HeroUI.ScrollShadow";const bd=Object.assign(Kr,{Root:Kr}),ot=a.createContext({}),Gn=({children:r,className:e,orientation:t="horizontal",...n})=>{const l=x.useMemo(()=>to({}),[]);return h.jsx(Au,{"data-slot":"slider",orientation:t,...n,className:de(e,l.base()),children:i=>h.jsx(ot,{value:{slots:l,state:i},children:typeof r=="function"?r(i):r})})},yd=({children:r,className:e,...t})=>{const{slots:n}=a.use(ot);return h.jsx(Ku,{className:de(e,n?.output()),"data-slot":"slider-output",...t,children:r?l=>h.jsx(h.Fragment,{children:typeof r=="function"?r(l):r}):({state:l})=>l.values.map((i,s)=>l.getThumbValueLabel(s)).join(" – ")})},vd=({children:r,className:e,...t})=>{const{slots:n,state:l}=a.use(ot),{getThumbPercent:i,values:s}=l?.state||{},o=s?.length&&s.length===1,[c,u]=[s?.length&&s.length>1?i?.(0):0,i?.(s?.length?s.length-1:0)].sort(),f=(u-c)*100;return h.jsx(Tu,{className:de(e,n?.track()),"data-disabled":Qe(l?.isDisabled),"data-slot":"slider-track",...o?{"data-fill-start":Qe(f>0),"data-fill-end":Qe(f==100)}:{"data-fill-start":Qe(c==0),"data-fill-end":Qe(c*100+f==100)},...t,children:d=>h.jsx(h.Fragment,{children:typeof r=="function"?r(d):r})})},$d=({className:r,style:e,...t})=>{const{slots:n,state:l}=a.use(ot),{getThumbPercent:i,orientation:s,values:o}=l?.state||{},[c,u]=[o?.length&&o.length>1?i?.(0):0,i?.(o?.length?o.length-1:0)].sort(),f=s==="vertical";return h.jsx(Te.div,{className:ue(n?.fill,r),"data-disabled":Qe(l?.isDisabled),"data-slot":"slider-fill",style:{...e,[f?"bottom":"left"]:`${c*100}%`,...f?{height:`${(u-c)*100}%`}:{width:`${(u-c)*100}%`}},...t})},xd=({children:r,className:e,...t})=>{const{slots:n}=a.use(ot);return h.jsx(Ru,{className:de(e,n?.thumb()),"data-slot":"slider-thumb",...t,children:l=>h.jsx(h.Fragment,{children:typeof r=="function"?r(l):r})})},Ed=({className:r,...e})=>{const{slots:t}=a.use(ot);return h.jsx(Te.div,{className:ue(t?.marks,r),"data-slot":"slider-marks",...e})},kt=Object.assign(Gn,{Root:Gn,Output:yd,Track:vd,Fill:$d,Thumb:xd,Marks:Ed}),ct=a.createContext({}),Ii=Cs("tabs.listContainer"),Yn=({align:r,children:e,className:t,orientation:n="horizontal",variant:l,...i})=>{const s=x.useMemo(()=>ro({align:r,variant:l}),[r,l]),o=x.useMemo(()=>({orientation:n,slots:s}),[n,s]);return h.jsx(ct,{value:o,children:h.jsx(Ou,{...i,className:de(t,s.base()),"data-slot":"tabs",orientation:n,children:e})})},Sd=({children:r,className:e,render:t,...n})=>h.jsx(Ii.Injector,{...n,className:e,render:t,children:r}),wd=({children:r,className:e,...t})=>{const{orientation:n="horizontal",slots:l}=a.use(ct),i=a.useRef(null),s=n==="vertical",[o,c]=Ii.useSlot(t),u=a.useCallback(g=>{const b=i.current;if(!b)return;const y=s?b.clientHeight:b.clientWidth,m=s?b.scrollHeight:b.scrollWidth,v=Math.max(0,m-y),$=!s&&getComputedStyle(b).direction==="rtl",w=g*y*.8*($?-1:1),S=s?b.scrollTop:b.scrollLeft,K=Math.min($?0:v,Math.max($?-v:0,S+w));K!==S&&b.scrollTo({behavior:"smooth",[s?"top":"left"]:K})},[s]);if(!o)return h.jsx(Wn,{...c,className:de(e,l?.tabList()),"data-slot":"tabs-list",children:r});const{className:f,render:d,...p}=o;return h.jsx(Wn,{...c,className:de(e,l?.tabList()),"data-slot":"tabs-list",render:g=>{const{children:b,className:y,ref:m,...v}=g;return h.jsxs(Te.div,{className:ue(l?.tabListContainer,f),"data-slot":"tabs-list-container",render:d,...p,children:[h.jsx(bd,{ref:i,hideScrollBar:!0,className:ue(l?.scroller),orientation:n,size:64,children:h.jsx("div",{...v,ref:m,className:y,children:b})}),h.jsx("button",{"aria-label":s?"Scroll tabs up":"Scroll tabs left",className:ue(l?.scrollPrev),tabIndex:-1,type:"button",onClick:()=>u(-1),children:s?h.jsx(Ss,{}):h.jsx(ws,{})}),h.jsx("button",{"aria-label":s?"Scroll tabs down":"Scroll tabs right",className:ue(l?.scrollNext),tabIndex:-1,type:"button",onClick:()=>u(1),children:s?h.jsx(Ps,{}):h.jsx(ul,{})})]})},children:r})},Pd=({children:r,className:e,...t})=>{const{slots:n}=a.use(ct);return h.jsx(zu,{...t,className:de(e,n?.tab()),"data-slot":"tabs-tab",children:r})},Cd=({className:r,...e})=>{const{slots:t}=a.use(ct);return h.jsx(sc,{className:ue(t?.tabIndicator,r),"data-slot":"tabs-indicator",...e})},Md=({children:r,className:e,...t})=>{const{slots:n}=a.use(ct);return h.jsx(Uu,{...t,className:de(e,n?.tabPanel()),"data-slot":"tabs-panel",children:r})},Ad=({className:r,...e})=>{const{slots:t}=a.use(ct);return h.jsx(Te.span,{"aria-hidden":"true",className:ue(t?.separator,r),"data-slot":"tabs-separator",...e})},ge=Object.assign(Yn,{Root:Yn,ListContainer:Sd,List:wd,Tab:Pd,Indicator:Cd,Separator:Ad,Panel:Md}),Xn=({className:r,fullWidth:e,variant:t,...n})=>{const l=a.use(Ms),i=t??l?.variant;return h.jsx(As,{"data-slot":"textarea",className:de(r,no({fullWidth:e,variant:i})),...n})},Kd=Object.assign(Xn,{Root:Xn}),Jn=r=>{if(!r)return;const e=r.trim(),t=parseFloat(e);if(!Number.isNaN(t))return e.endsWith("ms")?t:e.endsWith("s")?t*1e3:t},sn=a.createContext({}),Td=({children:r,shouldSkipAnimation:e})=>{const t=a.use(xt);return!t||e?r:h.jsx(xt,{value:{...t,shouldSkipAnimation:!1},children:r})},Qn=({children:r,closeDelay:e,delay:t,shouldSkipAnimation:n=!1,...l})=>{const i=x.useMemo(()=>lo(),[]),s=cn("--tooltip-delay"),o=cn("--tooltip-close-delay"),c=t??Jn(s),u=e??Jn(o),f=x.useMemo(()=>({slots:i}),[i]);return h.jsx(sn,{value:f,children:h.jsx(td,{closeDelay:u,"data-slot":"tooltip-root",delay:c,...l,children:h.jsx(Td,{shouldSkipAnimation:n,children:r})})})},Rd=({children:r,className:e,offset:t,showArrow:n=!1,...l})=>{const{slots:i}=a.use(sn),s=t||(n?7:3);return h.jsx(rd,{...l,className:de(e,i?.base()),offset:s,children:r})},kd=({children:r,className:e,...t})=>{const n=h.jsx("svg",{"data-slot":"overlay-arrow",fill:"none",height:"12",viewBox:"0 0 12 12",width:"12",xmlns:"http://www.w3.org/2000/svg",children:h.jsx("path",{d:"M0 0C5.48483 8 6.5 8 12 0Z"})}),l=x.isValidElement(r)?x.cloneElement(r,{"data-slot":"overlay-arrow"}):n;return h.jsx(ao,{"data-slot":"tooltip-arrow",...t,className:e,children:l})},Ld=({children:r,className:e,...t})=>{const{slots:n}=a.use(sn),l=a.useRef(null),{focusableProps:i}=St({},l);return h.jsx(Te.div,{ref:l,className:ue(n?.trigger,e),"data-slot":"tooltip-trigger",role:"button",...B(i,t),children:r})},el=Object.assign(Qn,{Root:Qn,Trigger:Ld,Content:Rd,Arrow:kd}),Fd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M228,128a100,100,0,0,1-98.66,100H128a99.39,99.39,0,0,1-68.62-27.29,12,12,0,0,1,16.48-17.45,76,76,0,1,0-1.57-109c-.13.13-.25.25-.39.37L54.89,92H72a12,12,0,0,1,0,24H24a12,12,0,0,1-12-12V56a12,12,0,0,1,24,0V76.72L57.48,57.06A100,100,0,0,1,228,128Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z",opacity:"0.2"}),a.createElement("path",{d:"M224,128a96,96,0,0,1-94.71,96H128A95.38,95.38,0,0,1,62.1,197.8a8,8,0,0,1,11-11.63A80,80,0,1,0,71.43,71.39a3.07,3.07,0,0,1-.26.25L44.59,96H72a8,8,0,0,1,0,16H24a8,8,0,0,1-8-8V56a8,8,0,0,1,16,0V85.8L60.25,60A96,96,0,0,1,224,128Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,128a96,96,0,0,1-94.71,96H128A95.38,95.38,0,0,1,62.1,197.8a8,8,0,0,1,11-11.63A80,80,0,1,0,71.43,71.39a3.07,3.07,0,0,1-.26.25L60.63,81.29l17,17A8,8,0,0,1,72,112H24a8,8,0,0,1-8-8V56A8,8,0,0,1,29.66,50.3L49.31,70,60.25,60A96,96,0,0,1,224,128Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M222,128a94,94,0,0,1-92.74,94H128a93.43,93.43,0,0,1-64.5-25.65,6,6,0,1,1,8.24-8.72A82,82,0,1,0,70,70l-.19.19L39.44,98H72a6,6,0,0,1,0,12H24a6,6,0,0,1-6-6V56a6,6,0,0,1,12,0V90.34L61.63,61.4A94,94,0,0,1,222,128Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,128a96,96,0,0,1-94.71,96H128A95.38,95.38,0,0,1,62.1,197.8a8,8,0,0,1,11-11.63A80,80,0,1,0,71.43,71.39a3.07,3.07,0,0,1-.26.25L44.59,96H72a8,8,0,0,1,0,16H24a8,8,0,0,1-8-8V56a8,8,0,0,1,16,0V85.8L60.25,60A96,96,0,0,1,224,128Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M220,128a92,92,0,0,1-90.77,92H128a91.47,91.47,0,0,1-63.13-25.1,4,4,0,1,1,5.5-5.82A84,84,0,1,0,68.6,68.57l-.13.12L34.3,100H72a4,4,0,0,1,0,8H24a4,4,0,0,1-4-4V56a4,4,0,0,1,8,0V94.89l35-32A92,92,0,0,1,220,128Z"}))]]),Dd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M220,48V96a12,12,0,0,1-24,0V77l-35.51,35.52a12,12,0,0,1-17-17L179,60H160a12,12,0,0,1,0-24h48A12,12,0,0,1,220,48ZM95.51,143.51,60,179V160a12,12,0,0,0-24,0v48a12,12,0,0,0,12,12H96a12,12,0,0,0,0-24H77l35.52-35.51a12,12,0,0,0-17-17ZM208,148a12,12,0,0,0-12,12v19l-35.51-35.52a12,12,0,0,0-17,17L179,196H160a12,12,0,0,0,0,24h48a12,12,0,0,0,12-12V160A12,12,0,0,0,208,148ZM77,60H96a12,12,0,0,0,0-24H48A12,12,0,0,0,36,48V96a12,12,0,0,0,24,0V77l35.51,35.52a12,12,0,0,0,17-17Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M208,48V208H48V48Z",opacity:"0.2"}),a.createElement("path",{d:"M216,48V96a8,8,0,0,1-16,0V67.31l-42.34,42.35a8,8,0,0,1-11.32-11.32L188.69,56H160a8,8,0,0,1,0-16h48A8,8,0,0,1,216,48ZM98.34,146.34,56,188.69V160a8,8,0,0,0-16,0v48a8,8,0,0,0,8,8H96a8,8,0,0,0,0-16H67.31l42.35-42.34a8,8,0,0,0-11.32-11.32ZM208,152a8,8,0,0,0-8,8v28.69l-42.34-42.35a8,8,0,0,0-11.32,11.32L188.69,200H160a8,8,0,0,0,0,16h48a8,8,0,0,0,8-8V160A8,8,0,0,0,208,152ZM67.31,56H96a8,8,0,0,0,0-16H48a8,8,0,0,0-8,8V96a8,8,0,0,0,16,0V67.31l42.34,42.35a8,8,0,0,0,11.32-11.32Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M109.66,146.34a8,8,0,0,1,0,11.32L83.31,184l18.35,18.34A8,8,0,0,1,96,216H48a8,8,0,0,1-8-8V160a8,8,0,0,1,13.66-5.66L72,172.69l26.34-26.35A8,8,0,0,1,109.66,146.34ZM83.31,72l18.35-18.34A8,8,0,0,0,96,40H48a8,8,0,0,0-8,8V96a8,8,0,0,0,13.66,5.66L72,83.31l26.34,26.35a8,8,0,0,0,11.32-11.32ZM208,40H160a8,8,0,0,0-5.66,13.66L172.69,72,146.34,98.34a8,8,0,0,0,11.32,11.32L184,83.31l18.34,18.35A8,8,0,0,0,216,96V48A8,8,0,0,0,208,40Zm3.06,112.61a8,8,0,0,0-8.72,1.73L184,172.69l-26.34-26.35a8,8,0,0,0-11.32,11.32L172.69,184l-18.35,18.34A8,8,0,0,0,160,216h48a8,8,0,0,0,8-8V160A8,8,0,0,0,211.06,152.61Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M214,48V96a6,6,0,0,1-12,0V62.48l-45.76,45.76a6,6,0,0,1-8.48-8.48L193.52,54H160a6,6,0,0,1,0-12h48A6,6,0,0,1,214,48ZM99.76,147.76,54,193.52V160a6,6,0,0,0-12,0v48a6,6,0,0,0,6,6H96a6,6,0,0,0,0-12H62.48l45.76-45.76a6,6,0,0,0-8.48-8.48ZM208,154a6,6,0,0,0-6,6v33.52l-45.76-45.76a6,6,0,0,0-8.48,8.48L193.52,202H160a6,6,0,0,0,0,12h48a6,6,0,0,0,6-6V160A6,6,0,0,0,208,154ZM62.48,54H96a6,6,0,0,0,0-12H48a6,6,0,0,0-6,6V96a6,6,0,0,0,12,0V62.48l45.76,45.76a6,6,0,0,0,8.48-8.48Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M216,48V96a8,8,0,0,1-16,0V67.31l-42.34,42.35a8,8,0,0,1-11.32-11.32L188.69,56H160a8,8,0,0,1,0-16h48A8,8,0,0,1,216,48ZM98.34,146.34,56,188.69V160a8,8,0,0,0-16,0v48a8,8,0,0,0,8,8H96a8,8,0,0,0,0-16H67.31l42.35-42.34a8,8,0,0,0-11.32-11.32ZM208,152a8,8,0,0,0-8,8v28.69l-42.34-42.35a8,8,0,0,0-11.32,11.32L188.69,200H160a8,8,0,0,0,0,16h48a8,8,0,0,0,8-8V160A8,8,0,0,0,208,152ZM67.31,56H96a8,8,0,0,0,0-16H48a8,8,0,0,0-8,8V96a8,8,0,0,0,16,0V67.31l42.34,42.35a8,8,0,0,0,11.32-11.32Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M212,48V96a4,4,0,0,1-8,0V57.66l-49.17,49.17a4,4,0,0,1-5.66-5.66L198.34,52H160a4,4,0,0,1,0-8h48A4,4,0,0,1,212,48ZM101.17,149.17,52,198.34V160a4,4,0,0,0-8,0v48a4,4,0,0,0,4,4H96a4,4,0,0,0,0-8H57.66l49.17-49.17a4,4,0,0,0-5.66-5.66ZM208,156a4,4,0,0,0-4,4v38.34l-49.17-49.17a4,4,0,0,0-5.66,5.66L198.34,204H160a4,4,0,0,0,0,8h48a4,4,0,0,0,4-4V160A4,4,0,0,0,208,156ZM57.66,52H96a4,4,0,0,0,0-8H48a4,4,0,0,0-4,4V96a4,4,0,0,0,8,0V57.66l49.17,49.17a4,4,0,0,0,5.66-5.66Z"}))]]),Nd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M168.49,199.51a12,12,0,0,1-17,17l-80-80a12,12,0,0,1,0-17l80-80a12,12,0,0,1,17,17L97,128Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M160,48V208L80,128Z",opacity:"0.2"}),a.createElement("path",{d:"M163.06,40.61a8,8,0,0,0-8.72,1.73l-80,80a8,8,0,0,0,0,11.32l80,80A8,8,0,0,0,168,208V48A8,8,0,0,0,163.06,40.61ZM152,188.69,91.31,128,152,67.31Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M168,48V208a8,8,0,0,1-13.66,5.66l-80-80a8,8,0,0,1,0-11.32l80-80A8,8,0,0,1,168,48Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M164.24,203.76a6,6,0,1,1-8.48,8.48l-80-80a6,6,0,0,1,0-8.48l80-80a6,6,0,0,1,8.48,8.48L88.49,128Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M165.66,202.34a8,8,0,0,1-11.32,11.32l-80-80a8,8,0,0,1,0-11.32l80-80a8,8,0,0,1,11.32,11.32L91.31,128Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M162.83,205.17a4,4,0,0,1-5.66,5.66l-80-80a4,4,0,0,1,0-5.66l80-80a4,4,0,1,1,5.66,5.66L85.66,128Z"}))]]),Id=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M184.49,136.49l-80,80a12,12,0,0,1-17-17L159,128,87.51,56.49a12,12,0,1,1,17-17l80,80A12,12,0,0,1,184.49,136.49Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M176,128,96,208V48Z",opacity:"0.2"}),a.createElement("path",{d:"M181.66,122.34l-80-80A8,8,0,0,0,88,48V208a8,8,0,0,0,13.66,5.66l80-80A8,8,0,0,0,181.66,122.34ZM104,188.69V67.31L164.69,128Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M181.66,133.66l-80,80A8,8,0,0,1,88,208V48a8,8,0,0,1,13.66-5.66l80,80A8,8,0,0,1,181.66,133.66Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M180.24,132.24l-80,80a6,6,0,0,1-8.48-8.48L167.51,128,91.76,52.24a6,6,0,0,1,8.48-8.48l80,80A6,6,0,0,1,180.24,132.24Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M178.83,130.83l-80,80a4,4,0,0,1-5.66-5.66L170.34,128,93.17,50.83a4,4,0,0,1,5.66-5.66l80,80A4,4,0,0,1,178.83,130.83Z"}))]]),Vd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M128,20A108,108,0,0,0,31.85,177.23L21,209.66A20,20,0,0,0,46.34,235l32.43-10.81A108,108,0,1,0,128,20Zm0,192a84,84,0,0,1-42.06-11.27,12,12,0,0,0-6-1.62,12.1,12.1,0,0,0-3.8.62l-29.79,9.93,9.93-29.79a12,12,0,0,0-1-9.81A84,84,0,1,1,128,212Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,128A96,96,0,0,1,79.93,211.11h0L42.54,223.58a8,8,0,0,1-10.12-10.12l12.47-37.39h0A96,96,0,1,1,224,128Z",opacity:"0.2"}),a.createElement("path",{d:"M128,24A104,104,0,0,0,36.18,176.88L24.83,210.93a16,16,0,0,0,20.24,20.24l34.05-11.35A104,104,0,1,0,128,24Zm0,192a87.87,87.87,0,0,1-44.06-11.81,8,8,0,0,0-6.54-.67L40,216,52.47,178.6a8,8,0,0,0-.66-6.54A88,88,0,1,1,128,216Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M232,128A104,104,0,0,1,79.12,219.82L45.07,231.17a16,16,0,0,1-20.24-20.24l11.35-34.05A104,104,0,1,1,232,128Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M128,26A102,102,0,0,0,38.35,176.69L26.73,211.56a14,14,0,0,0,17.71,17.71l34.87-11.62A102,102,0,1,0,128,26Zm0,192a90,90,0,0,1-45.06-12.08,6.09,6.09,0,0,0-3-.81,6.2,6.2,0,0,0-1.9.31L40.65,217.88a2,2,0,0,1-2.53-2.53L50.58,178a6,6,0,0,0-.5-4.91A90,90,0,1,1,128,218Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M128,24A104,104,0,0,0,36.18,176.88L24.83,210.93a16,16,0,0,0,20.24,20.24l34.05-11.35A104,104,0,1,0,128,24Zm0,192a87.87,87.87,0,0,1-44.06-11.81,8,8,0,0,0-6.54-.67L40,216,52.47,178.6a8,8,0,0,0-.66-6.54A88,88,0,1,1,128,216Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M128,28A100,100,0,0,0,40.53,176.5l-11.9,35.69a12,12,0,0,0,15.18,15.18l35.69-11.9A100,100,0,1,0,128,28Zm0,192a92,92,0,0,1-46.07-12.35,4.05,4.05,0,0,0-2-.54,3.93,3.93,0,0,0-1.27.21L41.28,219.78a4,4,0,0,1-5.06-5.06l12.46-37.38a4,4,0,0,0-.33-3.27A92,92,0,1,1,128,220Z"}))]]),Hd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm0,192a84,84,0,1,1,84-84A84.09,84.09,0,0,1,128,212Zm68-84a12,12,0,0,1-12,12H128a12,12,0,0,1-12-12V72a12,12,0,0,1,24,0v44h44A12,12,0,0,1,196,128Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),a.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm64-88a8,8,0,0,1-8,8H128a8,8,0,0,1-8-8V72a8,8,0,0,1,16,0v48h48A8,8,0,0,1,192,128Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm56,112H128a8,8,0,0,1-8-8V72a8,8,0,0,1,16,0v48h48a8,8,0,0,1,0,16Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M128,26A102,102,0,1,0,230,128,102.12,102.12,0,0,0,128,26Zm0,192a90,90,0,1,1,90-90A90.1,90.1,0,0,1,128,218Zm62-90a6,6,0,0,1-6,6H128a6,6,0,0,1-6-6V72a6,6,0,0,1,12,0v50h50A6,6,0,0,1,190,128Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm64-88a8,8,0,0,1-8,8H128a8,8,0,0,1-8-8V72a8,8,0,0,1,16,0v48h48A8,8,0,0,1,192,128Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M128,28A100,100,0,1,0,228,128,100.11,100.11,0,0,0,128,28Zm0,192a92,92,0,1,1,92-92A92.1,92.1,0,0,1,128,220Zm60-92a4,4,0,0,1-4,4H128a4,4,0,0,1-4-4V72a4,4,0,0,1,8,0v52h52A4,4,0,0,1,188,128Z"}))]]),jd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,44H32A20,20,0,0,0,12,64V192a20,20,0,0,0,20,20H224a20,20,0,0,0,20-20V64A20,20,0,0,0,224,44Zm-4,144H36V68H220ZM52,128a44,44,0,0,1,66-38.11,12,12,0,0,1-12,20.78,20,20,0,1,0,0,34.66,12,12,0,1,1,12,20.77A44,44,0,0,1,52,128Zm80,0a44,44,0,0,1,66-38.11,12,12,0,0,1-12,20.78,20,20,0,1,0,0,34.66,12,12,0,1,1,12,20.77A44,44,0,0,1,132,128Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M232,64V192a8,8,0,0,1-8,8H32a8,8,0,0,1-8-8V64a8,8,0,0,1,8-8H224A8,8,0,0,1,232,64Z",opacity:"0.2"}),a.createElement("path",{d:"M224,48H32A16,16,0,0,0,16,64V192a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48Zm0,144H32V64H224V192ZM118.93,151.71A8,8,0,0,1,116,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,118.93,151.71Zm80,0A8,8,0,0,1,196,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,198.93,151.71Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,48H32A16,16,0,0,0,16,64V192a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48ZM116,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58,8,8,0,0,1,8,13.85Zm80,0a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58,8,8,0,0,1,8,13.85Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,50H32A14,14,0,0,0,18,64V192a14,14,0,0,0,14,14H224a14,14,0,0,0,14-14V64A14,14,0,0,0,224,50Zm2,142a2,2,0,0,1-2,2H32a2,2,0,0,1-2-2V64a2,2,0,0,1,2-2H224a2,2,0,0,1,2,2ZM117.19,152.71a6,6,0,0,1-2.19,8.2,38,38,0,1,1,0-65.82,6,6,0,1,1-6,10.38,26,26,0,1,0,0,45.05A6,6,0,0,1,117.19,152.71Zm80,0a6,6,0,0,1-2.19,8.2,38,38,0,1,1,0-65.82,6,6,0,1,1-6,10.38,26,26,0,1,0,0,45.05A6,6,0,0,1,197.19,152.71Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,48H32A16,16,0,0,0,16,64V192a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48Zm0,144H32V64H224V192ZM118.92,151.71A8,8,0,0,1,116,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,118.92,151.71Zm80,0A8,8,0,0,1,196,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,198.92,151.71Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,52H32A12,12,0,0,0,20,64V192a12,12,0,0,0,12,12H224a12,12,0,0,0,12-12V64A12,12,0,0,0,224,52Zm4,140a4,4,0,0,1-4,4H32a4,4,0,0,1-4-4V64a4,4,0,0,1,4-4H224a4,4,0,0,1,4,4ZM115.46,153.71a4,4,0,0,1-1.46,5.47,36,36,0,1,1,0-62.36,4,4,0,0,1-4,6.92,28,28,0,1,0,0,48.52A4,4,0,0,1,115.46,153.71Zm80,0a4,4,0,0,1-1.46,5.47,36,36,0,1,1,0-62.36,4,4,0,0,1-4,6.92,28,28,0,1,0,0,48.52A4,4,0,0,1,195.46,153.71Z"}))]]),Od=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M246.81,111.29,158.63,55.12A19.91,19.91,0,0,0,128,71.84v30L54.63,55.12A19.91,19.91,0,0,0,24,71.84V184.16a19.93,19.93,0,0,0,30.63,16.72L128,154.15v30a19.93,19.93,0,0,0,30.63,16.72l88.18-56.17a19.79,19.79,0,0,0,0-33.42ZM48,176.64V79.36L124.38,128Zm104,0V79.36L228.38,128Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M144,128a7.76,7.76,0,0,1-3.63,6.59L52.18,190.74A7.91,7.91,0,0,1,40,184.15V71.85a7.91,7.91,0,0,1,12.18-6.59l88.19,56.15A7.76,7.76,0,0,1,144,128Zm100.37-6.59L156.18,65.26A7.91,7.91,0,0,0,144,71.85v112.3a7.91,7.91,0,0,0,12.18,6.59l88.19-56.15A7.8,7.8,0,0,0,244.37,121.41Z",opacity:"0.2"}),a.createElement("path",{d:"M248.67,114.66,160.48,58.5A15.91,15.91,0,0,0,136,71.84v37.3L56.48,58.5A15.91,15.91,0,0,0,32,71.84V184.16A15.92,15.92,0,0,0,56.48,197.5L136,146.86v37.3a15.92,15.92,0,0,0,24.48,13.34l88.19-56.16a15.8,15.8,0,0,0,0-26.68ZM48,183.94V72.07L135.82,128Zm104,0V72.07L239.82,128Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M256,128a15.76,15.76,0,0,1-7.33,13.34L160.48,197.5A15.91,15.91,0,0,1,136,184.16v-37.3L56.48,197.5A15.91,15.91,0,0,1,32,184.16V71.84A15.91,15.91,0,0,1,56.48,58.5L136,109.14V71.84A15.91,15.91,0,0,1,160.48,58.5l88.19,56.16A15.76,15.76,0,0,1,256,128Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M247.59,116.35,159.41,60.18a14,14,0,0,0-14.22-.46A13.83,13.83,0,0,0,138,71.84v41L55.41,60.18a14,14,0,0,0-14.22-.46A13.83,13.83,0,0,0,34,71.84V184.16a13.83,13.83,0,0,0,7.19,12.12,14,14,0,0,0,14.22-.46L138,143.21v40.95a13.83,13.83,0,0,0,7.19,12.12,14,14,0,0,0,14.22-.46l88.18-56.17a13.79,13.79,0,0,0,0-23.3ZM137.15,129.53,49,185.69a1.9,1.9,0,0,1-2,.06,1.73,1.73,0,0,1-1-1.59V71.84a1.73,1.73,0,0,1,1-1.59,2,2,0,0,1,1-.26,1.87,1.87,0,0,1,1,.32l88.19,56.16a1.8,1.8,0,0,1,0,3.06Zm104,0L153,185.69a1.9,1.9,0,0,1-2,.06,1.73,1.73,0,0,1-1-1.59V71.84a1.73,1.73,0,0,1,1-1.59,2,2,0,0,1,1-.26,1.87,1.87,0,0,1,1,.32l88.19,56.16a1.8,1.8,0,0,1,0,3.06Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M248.67,114.66,160.48,58.5A15.91,15.91,0,0,0,136,71.84v37.3L56.48,58.5A15.91,15.91,0,0,0,32,71.84V184.16A15.92,15.92,0,0,0,56.48,197.5L136,146.86v37.3a15.92,15.92,0,0,0,24.48,13.34l88.19-56.16a15.8,15.8,0,0,0,0-26.68ZM48,183.94V72.07L135.82,128Zm104,0V72.07L239.82,128Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M246.52,118,158.33,61.87a12,12,0,0,0-12.18-.39A11.66,11.66,0,0,0,140,71.84v44.59L54.33,61.87a12,12,0,0,0-12.18-.39A11.66,11.66,0,0,0,36,71.84V184.16a11.66,11.66,0,0,0,6.15,10.36,12,12,0,0,0,12.18-.39L140,139.57v44.59a11.66,11.66,0,0,0,6.15,10.36,12,12,0,0,0,12.18-.39L246.52,138a11.81,11.81,0,0,0,0-19.94Zm-108.3,13.19L50,187.38a3.91,3.91,0,0,1-4,.13,3.76,3.76,0,0,1-2-3.35V71.84a3.76,3.76,0,0,1,2-3.35,4,4,0,0,1,1.91-.5,3.94,3.94,0,0,1,2.13.63l88.18,56.16a3.8,3.8,0,0,1,0,6.44Zm104,0L154,187.38a3.91,3.91,0,0,1-4,.13,3.76,3.76,0,0,1-2-3.35V71.84a3.76,3.76,0,0,1,2-3.35,4,4,0,0,1,1.91-.5,3.94,3.94,0,0,1,2.13.63l88.18,56.16a3.8,3.8,0,0,1,0,6.44Z"}))]]),_d=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M230.14,25.86a20,20,0,0,0-19.57-5.11l-.22.07L18.44,79a20,20,0,0,0-3.06,37.25L99,157l40.71,83.65a19.81,19.81,0,0,0,18,11.38c.57,0,1.15,0,1.73-.07A19.82,19.82,0,0,0,177,237.56L235.18,45.65a1.42,1.42,0,0,0,.07-.22A20,20,0,0,0,230.14,25.86ZM156.91,221.07l-34.37-70.64,46-45.95a12,12,0,0,0-17-17l-46,46L34.93,99.09,210,46Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M223.69,42.18l-58.22,192a8,8,0,0,1-14.92,1.25L108,148,20.58,105.45a8,8,0,0,1,1.25-14.92l192-58.22A8,8,0,0,1,223.69,42.18Z",opacity:"0.2"}),a.createElement("path",{d:"M227.32,28.68a16,16,0,0,0-15.66-4.08l-.15,0L19.57,82.84a16,16,0,0,0-2.49,29.8L102,154l41.3,84.87A15.86,15.86,0,0,0,157.74,248q.69,0,1.38-.06a15.88,15.88,0,0,0,14-11.51l58.2-191.94c0-.05,0-.1,0-.15A16,16,0,0,0,227.32,28.68ZM157.83,231.85l-.05.14,0-.07-40.06-82.3,48-48a8,8,0,0,0-11.31-11.31l-48,48L24.08,98.25l-.07,0,.14,0L216,40Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M231.4,44.34s0,.1,0,.15l-58.2,191.94a15.88,15.88,0,0,1-14,11.51q-.69.06-1.38.06a15.86,15.86,0,0,1-14.42-9.15L107,164.15a4,4,0,0,1,.77-4.58l57.92-57.92a8,8,0,0,0-11.31-11.31L96.43,148.26a4,4,0,0,1-4.58.77L17.08,112.64a16,16,0,0,1,2.49-29.8l191.94-58.2.15,0A16,16,0,0,1,231.4,44.34Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M225.88,30.12a13.83,13.83,0,0,0-13.7-3.58l-.11,0L20.14,84.77A14,14,0,0,0,18,110.85l85.56,41.64L145.12,238a13.87,13.87,0,0,0,12.61,8c.4,0,.81,0,1.21-.05a13.9,13.9,0,0,0,12.29-10.09l58.2-191.93,0-.11A13.83,13.83,0,0,0,225.88,30.12Zm-8,10.4L159.73,232.43l0,.11a2,2,0,0,1-3.76.26l-40.68-83.58,49-49a6,6,0,1,0-8.49-8.49l-49,49L23.15,100a2,2,0,0,1,.31-3.74l.11,0L215.48,38.08a1.94,1.94,0,0,1,1.92.52A2,2,0,0,1,217.92,40.52Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M227.32,28.68a16,16,0,0,0-15.66-4.08l-.15,0L19.57,82.84a16,16,0,0,0-2.49,29.8L102,154l41.3,84.87A15.86,15.86,0,0,0,157.74,248q.69,0,1.38-.06a15.88,15.88,0,0,0,14-11.51l58.2-191.94c0-.05,0-.1,0-.15A16,16,0,0,0,227.32,28.68ZM157.83,231.85l-.05.14,0-.07-40.06-82.3,48-48a8,8,0,0,0-11.31-11.31l-48,48L24.08,98.25l-.07,0,.14,0L216,40Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224.47,31.52a11.87,11.87,0,0,0-11.82-3L20.74,86.67a12,12,0,0,0-1.91,22.38L105,151l41.92,86.15A11.88,11.88,0,0,0,157.74,244c.34,0,.69,0,1,0a11.89,11.89,0,0,0,10.52-8.63l58.21-192,0-.08A11.85,11.85,0,0,0,224.47,31.52Zm-4.62,9.54-58.23,192a4,4,0,0,1-7.48.59l-41.3-84.86,50-50a4,4,0,1,0-5.66-5.66l-50,50-84.9-41.31a3.88,3.88,0,0,1-2.27-4,3.93,3.93,0,0,1,3-3.54L214.9,36.16A3.93,3.93,0,0,1,216,36a4,4,0,0,1,2.79,1.19A3.93,3.93,0,0,1,219.85,41.06Z"}))]]),Zd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M200,28H160a20,20,0,0,0-20,20V208a20,20,0,0,0,20,20h40a20,20,0,0,0,20-20V48A20,20,0,0,0,200,28Zm-4,176H164V52h32ZM96,28H56A20,20,0,0,0,36,48V208a20,20,0,0,0,20,20H96a20,20,0,0,0,20-20V48A20,20,0,0,0,96,28ZM92,204H60V52H92Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M208,48V208a8,8,0,0,1-8,8H160a8,8,0,0,1-8-8V48a8,8,0,0,1,8-8h40A8,8,0,0,1,208,48ZM96,40H56a8,8,0,0,0-8,8V208a8,8,0,0,0,8,8H96a8,8,0,0,0,8-8V48A8,8,0,0,0,96,40Z",opacity:"0.2"}),a.createElement("path",{d:"M200,32H160a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16h40a16,16,0,0,0,16-16V48A16,16,0,0,0,200,32Zm0,176H160V48h40ZM96,32H56A16,16,0,0,0,40,48V208a16,16,0,0,0,16,16H96a16,16,0,0,0,16-16V48A16,16,0,0,0,96,32Zm0,176H56V48H96Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M216,48V208a16,16,0,0,1-16,16H160a16,16,0,0,1-16-16V48a16,16,0,0,1,16-16h40A16,16,0,0,1,216,48ZM96,32H56A16,16,0,0,0,40,48V208a16,16,0,0,0,16,16H96a16,16,0,0,0,16-16V48A16,16,0,0,0,96,32Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M200,34H160a14,14,0,0,0-14,14V208a14,14,0,0,0,14,14h40a14,14,0,0,0,14-14V48A14,14,0,0,0,200,34Zm2,174a2,2,0,0,1-2,2H160a2,2,0,0,1-2-2V48a2,2,0,0,1,2-2h40a2,2,0,0,1,2,2ZM96,34H56A14,14,0,0,0,42,48V208a14,14,0,0,0,14,14H96a14,14,0,0,0,14-14V48A14,14,0,0,0,96,34Zm2,174a2,2,0,0,1-2,2H56a2,2,0,0,1-2-2V48a2,2,0,0,1,2-2H96a2,2,0,0,1,2,2Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M200,32H160a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16h40a16,16,0,0,0,16-16V48A16,16,0,0,0,200,32Zm0,176H160V48h40ZM96,32H56A16,16,0,0,0,40,48V208a16,16,0,0,0,16,16H96a16,16,0,0,0,16-16V48A16,16,0,0,0,96,32Zm0,176H56V48H96Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M200,36H160a12,12,0,0,0-12,12V208a12,12,0,0,0,12,12h40a12,12,0,0,0,12-12V48A12,12,0,0,0,200,36Zm4,172a4,4,0,0,1-4,4H160a4,4,0,0,1-4-4V48a4,4,0,0,1,4-4h40a4,4,0,0,1,4,4ZM96,36H56A12,12,0,0,0,44,48V208a12,12,0,0,0,12,12H96a12,12,0,0,0,12-12V48A12,12,0,0,0,96,36Zm4,172a4,4,0,0,1-4,4H56a4,4,0,0,1-4-4V48a4,4,0,0,1,4-4H96a4,4,0,0,1,4,4Z"}))]]),Bd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M216,44H40A20,20,0,0,0,20,64V192a20,20,0,0,0,20,20H216a20,20,0,0,0,20-20V64A20,20,0,0,0,216,44ZM44,68H212v48H136a12,12,0,0,0-12,12v60H44ZM148,188V140h64v48Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,64v64H136v72H40a8,8,0,0,1-8-8V64a8,8,0,0,1,8-8H216A8,8,0,0,1,224,64Z",opacity:"0.2"}),a.createElement("path",{d:"M216,48H40A16,16,0,0,0,24,64V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V64A16,16,0,0,0,216,48ZM40,64H216v56H136a8,8,0,0,0-8,8v64H40ZM216,192H144V136h72v56Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M216,48H40A16,16,0,0,0,24,64V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V64A16,16,0,0,0,216,48Zm0,144H136V128h80v64Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M216,50H40A14,14,0,0,0,26,64V192a14,14,0,0,0,14,14H216a14,14,0,0,0,14-14V64A14,14,0,0,0,216,50ZM38,192V64a2,2,0,0,1,2-2H216a2,2,0,0,1,2,2v58H136a6,6,0,0,0-6,6v66H40A2,2,0,0,1,38,192Zm178,2H142V134h76v58A2,2,0,0,1,216,194Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M216,48H40A16,16,0,0,0,24,64V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V64A16,16,0,0,0,216,48ZM40,64H216v56H136a8,8,0,0,0-8,8v64H40ZM216,192H144V136h72v56Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M216,52H40A12,12,0,0,0,28,64V192a12,12,0,0,0,12,12H216a12,12,0,0,0,12-12V64A12,12,0,0,0,216,52ZM36,192V64a4,4,0,0,1,4-4H216a4,4,0,0,1,4,4v60H136a4,4,0,0,0-4,4v68H40A4,4,0,0,1,36,192Zm180,4H140V132h80v60A4,4,0,0,1,216,196Z"}))]]),zd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M234.49,111.07,90.41,22.94A20,20,0,0,0,60,39.87V216.13a20,20,0,0,0,30.41,16.93l144.08-88.13a19.82,19.82,0,0,0,0-33.86ZM84,208.85V47.15L216.16,128Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M228.23,134.69,84.15,222.81A8,8,0,0,1,72,216.12V39.88a8,8,0,0,1,12.15-6.69l144.08,88.12A7.82,7.82,0,0,1,228.23,134.69Z",opacity:"0.2"}),a.createElement("path",{d:"M232.4,114.49,88.32,26.35a16,16,0,0,0-16.2-.3A15.86,15.86,0,0,0,64,39.87V216.13A15.94,15.94,0,0,0,80,232a16.07,16.07,0,0,0,8.36-2.35L232.4,141.51a15.81,15.81,0,0,0,0-27ZM80,215.94V40l143.83,88Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M240,128a15.74,15.74,0,0,1-7.6,13.51L88.32,229.65a16,16,0,0,1-16.2.3A15.86,15.86,0,0,1,64,216.13V39.87a15.86,15.86,0,0,1,8.12-13.82,16,16,0,0,1,16.2.3L232.4,114.49A15.74,15.74,0,0,1,240,128Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M231.36,116.19,87.28,28.06a14,14,0,0,0-14.18-.27A13.69,13.69,0,0,0,66,39.87V216.13a13.69,13.69,0,0,0,7.1,12.08,14,14,0,0,0,14.18-.27l144.08-88.13a13.82,13.82,0,0,0,0-23.62Zm-6.26,13.38L81,217.7a2,2,0,0,1-2.06,0,1.78,1.78,0,0,1-1-1.61V39.87a1.78,1.78,0,0,1,1-1.61A2.06,2.06,0,0,1,80,38a2,2,0,0,1,1,.31L225.1,126.43a1.82,1.82,0,0,1,0,3.14Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M232.4,114.49,88.32,26.35a16,16,0,0,0-16.2-.3A15.86,15.86,0,0,0,64,39.87V216.13A15.94,15.94,0,0,0,80,232a16.07,16.07,0,0,0,8.36-2.35L232.4,141.51a15.81,15.81,0,0,0,0-27ZM80,215.94V40l143.83,88Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M230.32,117.9,86.24,29.79a11.91,11.91,0,0,0-12.17-.23A11.71,11.71,0,0,0,68,39.89V216.11a11.71,11.71,0,0,0,6.07,10.33,11.91,11.91,0,0,0,12.17-.23L230.32,138.1a11.82,11.82,0,0,0,0-20.2Zm-4.18,13.37L82.06,219.39a4,4,0,0,1-4.07.07,3.77,3.77,0,0,1-2-3.35V39.89a3.77,3.77,0,0,1,2-3.35,4,4,0,0,1,4.07.07l144.08,88.12a3.8,3.8,0,0,1,0,6.54Z"}))]]),Ud=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M225.7,54.46a20,20,0,0,0-20.33.66L132,101.85v-30a19.91,19.91,0,0,0-30.63-16.72L13.19,111.29a19.79,19.79,0,0,0,0,33.42l88.18,56.17A19.91,19.91,0,0,0,132,184.16v-30l73.37,46.73A19.91,19.91,0,0,0,236,184.16V71.84A19.84,19.84,0,0,0,225.7,54.46ZM108,176.64,31.63,128,108,79.36Zm104,0L135.63,128,212,79.36Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M224,71.85v112.3a7.91,7.91,0,0,1-12.18,6.59l-88.19-56.15a7.8,7.8,0,0,1,0-13.18l88.19-56.15A7.91,7.91,0,0,1,224,71.85ZM107.82,65.26,19.63,121.41a7.8,7.8,0,0,0,0,13.18l88.19,56.15A7.91,7.91,0,0,0,120,184.15V71.85A7.91,7.91,0,0,0,107.82,65.26Z",opacity:"0.2"}),a.createElement("path",{d:"M223.77,58a16,16,0,0,0-16.25.53L128,109.14V71.84A15.91,15.91,0,0,0,103.52,58.5L15.33,114.66a15.8,15.8,0,0,0,0,26.68l88.19,56.16A15.91,15.91,0,0,0,128,184.16v-37.3l79.52,50.64A15.91,15.91,0,0,0,232,184.16V71.84A15.83,15.83,0,0,0,223.77,58ZM112,183.93,24.18,128,112,72.06Zm104,0L128.18,128,216,72.06Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M232,71.84V184.16a15.92,15.92,0,0,1-24.48,13.34L128,146.86v37.3a15.92,15.92,0,0,1-24.48,13.34L15.33,141.34a15.8,15.8,0,0,1,0-26.68L103.52,58.5A15.91,15.91,0,0,1,128,71.84v37.3L207.52,58.5A15.91,15.91,0,0,1,232,71.84Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M222.81,59.72a14,14,0,0,0-14.22.46L126,112.79V71.84a13.83,13.83,0,0,0-7.19-12.12,14,14,0,0,0-14.22.46L16.41,116.35a13.79,13.79,0,0,0,0,23.3l88.18,56.17a14,14,0,0,0,14.22.46A13.83,13.83,0,0,0,126,184.16V143.21l82.59,52.61a14,14,0,0,0,14.22.46A13.83,13.83,0,0,0,230,184.16V71.84A13.83,13.83,0,0,0,222.81,59.72ZM114,184.16a1.73,1.73,0,0,1-1,1.59,1.9,1.9,0,0,1-2-.06L22.85,129.53a1.8,1.8,0,0,1,0-3.06L111,70.31a1.87,1.87,0,0,1,1-.32,2,2,0,0,1,1,.26,1.73,1.73,0,0,1,1,1.59Zm104,0a1.73,1.73,0,0,1-1,1.59,1.9,1.9,0,0,1-2-.06l-88.19-56.16a1.8,1.8,0,0,1,0-3.06L215,70.31a1.87,1.87,0,0,1,1-.32,2,2,0,0,1,1,.26,1.73,1.73,0,0,1,1,1.59Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M223.77,58a16,16,0,0,0-16.25.53L128,109.14V71.84A15.91,15.91,0,0,0,103.52,58.5L15.33,114.66a15.8,15.8,0,0,0,0,26.68l88.19,56.16A15.91,15.91,0,0,0,128,184.16v-37.3l79.52,50.64A15.91,15.91,0,0,0,232,184.16V71.84A15.83,15.83,0,0,0,223.77,58ZM112,183.93,24.18,128,112,72.06Zm104,0L128.18,128,216,72.06Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M221.85,61.48a12,12,0,0,0-12.18.39L124,116.43V71.84a11.66,11.66,0,0,0-6.15-10.36,12,12,0,0,0-12.18.39L17.48,118a11.81,11.81,0,0,0,0,19.94l88.19,56.16a12,12,0,0,0,12.18.39A11.66,11.66,0,0,0,124,184.16V139.57l85.67,54.56a12,12,0,0,0,12.18.39A11.66,11.66,0,0,0,228,184.16V71.84A11.66,11.66,0,0,0,221.85,61.48ZM116,184.16a3.76,3.76,0,0,1-2,3.35,3.91,3.91,0,0,1-4-.13L21.78,131.22a3.8,3.8,0,0,1,0-6.44L110,68.62a3.94,3.94,0,0,1,2.13-.63,4,4,0,0,1,1.91.5,3.76,3.76,0,0,1,2,3.35Zm104,0a3.76,3.76,0,0,1-2,3.35,3.91,3.91,0,0,1-4-.13l-88.18-56.16a3.8,3.8,0,0,1,0-6.44L214,68.62a3.94,3.94,0,0,1,2.13-.63,4,4,0,0,1,1.91.5,3.76,3.76,0,0,1,2,3.35Z"}))]]),Wd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M157.27,21.22a12,12,0,0,0-12.64,1.31L75.88,76H32A20,20,0,0,0,12,96v64a20,20,0,0,0,20,20H75.88l68.75,53.47A12,12,0,0,0,164,224V32A12,12,0,0,0,157.27,21.22ZM36,100H68v56H36Zm104,99.46L92,162.13V93.87l48-37.33ZM212,128a44,44,0,0,1-11,29.11,12,12,0,1,1-18-15.88,20,20,0,0,0,0-26.43,12,12,0,0,1,18-15.86A43.94,43.94,0,0,1,212,128Zm40,0a83.87,83.87,0,0,1-21.39,56,12,12,0,0,1-17.89-16,60,60,0,0,0,0-80,12,12,0,1,1,17.88-16A83.87,83.87,0,0,1,252,128Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M80,88v80H32a8,8,0,0,1-8-8V96a8,8,0,0,1,8-8Z",opacity:"0.2"}),a.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm54-106.08a40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,0,1,12-10.58ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M160,32.25V223.69a8.29,8.29,0,0,1-3.91,7.18,8,8,0,0,1-9-.56l-65.57-51A4,4,0,0,1,80,176.16V79.84a4,4,0,0,1,1.55-3.15l65.57-51a8,8,0,0,1,10,.16A8.27,8.27,0,0,1,160,32.25ZM60,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H60a4,4,0,0,0,4-4V84A4,4,0,0,0,60,80Zm126.77,20.84a8,8,0,0,0-.72,11.3,24,24,0,0,1,0,31.72,8,8,0,1,0,12,10.58,40,40,0,0,0,0-52.88A8,8,0,0,0,186.74,100.84Zm40.89-26.17a8,8,0,1,0-11.92,10.66,64,64,0,0,1,0,85.34,8,8,0,1,0,11.92,10.66,80,80,0,0,0,0-106.66Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M154.64,26.61a6,6,0,0,0-6.32.65L77.94,82H32A14,14,0,0,0,18,96v64a14,14,0,0,0,14,14H77.94l70.38,54.74A6,6,0,0,0,158,224V32A6,6,0,0,0,154.64,26.61ZM30,160V96a2,2,0,0,1,2-2H74v68H32A2,2,0,0,1,30,160Zm116,51.73L86,165.07V90.93l60-46.66Zm50.53-108.85a38,38,0,0,1,0,50.24,6,6,0,1,1-9-7.94,26,26,0,0,0,0-34.37,6,6,0,0,1,9-7.93ZM246,128a77.86,77.86,0,0,1-19.86,52,6,6,0,1,1-8.94-8,66,66,0,0,0,0-88,6,6,0,1,1,8.94-8A77.86,77.86,0,0,1,246,128Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm54-106.08a40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,0,1,12-10.58ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M153.76,28.41a4,4,0,0,0-4.22.43L78.63,84H32A12,12,0,0,0,20,96v64a12,12,0,0,0,12,12H78.63l70.91,55.16A4.07,4.07,0,0,0,152,228a3.92,3.92,0,0,0,1.76-.41A4,4,0,0,0,156,224V32A4,4,0,0,0,153.76,28.41ZM28,160V96a4,4,0,0,1,4-4H76v72H32A4,4,0,0,1,28,160Zm120,55.82L84,166V90l64-49.78Zm47-111.61a36,36,0,0,1,0,47.59,4,4,0,1,1-6-5.3,28,28,0,0,0,0-37,4,4,0,0,1,6-5.28ZM244,128a75.88,75.88,0,0,1-19.35,50.67,4,4,0,0,1-6-5.34,68,68,0,0,0,0-90.66,4,4,0,0,1,6-5.34A75.88,75.88,0,0,1,244,128Z"}))]]),qd=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M56.88,31.93A12,12,0,1,0,39.12,48.07L64.51,76H32A20,20,0,0,0,12,96v64a20,20,0,0,0,20,20H75.88l68.75,53.47A12,12,0,0,0,164,224V185.44l35.12,38.63a12,12,0,0,0,17.76-16.14ZM36,100H68v56H36Zm104,99.46L92,162.13V106.24L140,159Zm-31-134a12,12,0,0,1,2.11-16.84l33.51-26.07A12,12,0,0,1,164,32V94.94a12,12,0,0,1-24,0V56.54l-14.15,11A12,12,0,0,1,109,65.44Zm74,49.35a12,12,0,0,1,18-15.85,44,44,0,0,1,5.55,50.21,12,12,0,0,1-21-11.55A19.67,19.67,0,0,0,188,128,20,20,0,0,0,183,114.79ZM252,128a84.18,84.18,0,0,1-19.11,53.35,12,12,0,1,1-18.53-15.25A60,60,0,0,0,212.73,88a12,12,0,1,1,17.88-16A83.87,83.87,0,0,1,252,128Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M80,88v80H32a8,8,0,0,1-8-8V96a8,8,0,0,1,8-8Z",opacity:"0.2"}),a.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L73.55,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V175.09l42.08,46.29a8,8,0,1,0,11.84-10.76ZM32,96H72v64H32ZM144,207.64,88,164.09V95.89l56,61.6Zm42-63.77a24,24,0,0,0,0-31.72,8,8,0,1,1,12-10.57,40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.59Zm-80.16-76a8,8,0,0,1,1.4-11.23l39.85-31A8,8,0,0,1,160,32v74.83a8,8,0,0,1-16,0V48.36l-26.94,21A8,8,0,0,1,105.84,67.91ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M213.92,210.62a8,8,0,1,1-11.84,10.76L160,175.09v48.6a8.29,8.29,0,0,1-3.91,7.18,8,8,0,0,1-9-.56l-65.55-51A4,4,0,0,1,80,176.18V87.09L42.08,45.38A8,8,0,1,1,53.92,34.62Zm-27.21-55.46a8,8,0,0,0,11.29-.7,40,40,0,0,0,0-52.88,8,8,0,1,0-12,10.57,24,24,0,0,1,0,31.72A8,8,0,0,0,186.71,155.16Zm40.92-80.49a8,8,0,1,0-11.92,10.66,64,64,0,0,1,0,85.34,8,8,0,1,0,11.92,10.66,80,80,0,0,0,0-106.66ZM153,119.87a4,4,0,0,0,7-2.7V32.25a8.27,8.27,0,0,0-2.88-6.4,8,8,0,0,0-10-.16L103.83,59.33a4,4,0,0,0-.5,5.85ZM60,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H60a4,4,0,0,0,4-4V84A4,4,0,0,0,60,80Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M52.44,36A6,6,0,0,0,43.56,44L78,81.94l-.08.06H32A14,14,0,0,0,18,96v64a14,14,0,0,0,14,14H77.94l70.38,54.74A6,6,0,0,0,158,224V169.92L203.56,220a6,6,0,0,0,8.88-8.08ZM30,160V96a2,2,0,0,1,2-2H74v68H32A2,2,0,0,1,30,160Zm116,51.73L86,165.07V90.93l.11-.08L146,156.72Zm41.5-66.53a26,26,0,0,0,0-34.37,6,6,0,1,1,9-7.93,38,38,0,0,1,0,50.24,6,6,0,0,1-9-7.94ZM107.41,66.68a6,6,0,0,1,1.06-8.42l39.85-31A6,6,0,0,1,158,32v74.83a6,6,0,0,1-12,0V44.27L115.83,67.73A6,6,0,0,1,107.41,66.68ZM246,128a77.86,77.86,0,0,1-19.86,52,6,6,0,1,1-8.94-8,66,66,0,0,0,0-88,6,6,0,1,1,8.94-8A77.86,77.86,0,0,1,246,128Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L73.55,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V175.09l42.08,46.29a8,8,0,1,0,11.84-10.76ZM32,96H72v64H32ZM144,207.64,88,164.09V95.89l56,61.6Zm42-63.77a24,24,0,0,0,0-31.72,8,8,0,1,1,12-10.57,40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.59Zm-80.16-76a8,8,0,0,1,1.4-11.23l39.85-31A8,8,0,0,1,160,32v74.83a8,8,0,0,1-16,0V48.36l-26.94,21A8,8,0,0,1,105.84,67.91ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M51,37.31A4,4,0,0,0,45,42.69L81,82.19,78.63,84H32A12,12,0,0,0,20,96v64a12,12,0,0,0,12,12H78.63l70.91,55.16A4.07,4.07,0,0,0,152,228a3.92,3.92,0,0,0,1.76-.41A4,4,0,0,0,156,224V164.75l49,53.94a4,4,0,1,0,5.92-5.38ZM28,160V96a4,4,0,0,1,4-4H76v72H32A4,4,0,0,1,28,160Zm120,55.82L84,166V90l2.35-1.83L148,156Zm41-69.3a28,28,0,0,0,0-37,4,4,0,1,1,6-5.29,36,36,0,0,1,0,47.59,4,4,0,1,1-6-5.29ZM109,65.45a4,4,0,0,1,.7-5.61l39.85-31A4,4,0,0,1,156,32v74.83a4,4,0,0,1-8,0V40.18l-33.39,26A4,4,0,0,1,109,65.45ZM244,128a75.88,75.88,0,0,1-19.35,50.67,4,4,0,0,1-6-5.34,68,68,0,0,0,0-90.66,4,4,0,0,1,6-5.34A75.88,75.88,0,0,1,244,128Z"}))]]),Tr=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Fd}));Tr.displayName="ArrowCounterClockwiseIcon";const Vi=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Dd}));Vi.displayName="ArrowsOutIcon";const Hi=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Nd}));Hi.displayName="CaretLeftIcon";const ji=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Id}));ji.displayName="CaretRightIcon";const er=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Vd}));er.displayName="ChatCircleIcon";const Oi=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Hd}));Oi.displayName="ClockIcon";const _i=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:jd}));_i.displayName="ClosedCaptioningIcon";const Zi=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Od}));Zi.displayName="FastForwardIcon";const Bi=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:_d}));Bi.displayName="PaperPlaneTiltIcon";const zi=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Zd}));zi.displayName="PauseIcon";const Ui=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Bd}));Ui.displayName="PictureInPictureIcon";const Rr=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:zd}));Rr.displayName="PlayIcon";const Wi=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Ud}));Wi.displayName="RewindIcon";const qi=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:Wd}));qi.displayName="SpeakerHighIcon";const Gi=a.forwardRef((r,e)=>a.createElement(he,{ref:e,...r,weights:qd}));Gi.displayName="SpeakerSlashIcon";function Gd(r){return"video"in r}function Yd(r){return"password_protected"in r}function Xd(r){return"expired"in r}async function Jd(r){return(await fetch(`/s/${r}/data`,{credentials:"include"})).json()}async function Qd(r,e){return(await fetch(`/s/${r}/verify-password`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({password:e})})).ok}async function e0(r){return(await(await fetch(`/s/${r}/reactions`)).json()).reactions||[]}async function t0(r,e,t){return(await fetch(`/s/${r}/react`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({timestamp:e,emoji:t})})).ok}async function tl(r,e=1,t=50){return(await fetch(`/s/${r}/comments?page=${e}&limit=${t}`)).json()}async function r0(r,e,t,n){return(await fetch(`/s/${r}/comment`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({timestamp:e,author_name:t,text:n})})).ok}function ie(r){const e=Math.max(0,Math.floor(r)),t=Math.floor(e/3600),n=Math.floor(e%3600/60),l=e%60;return t>0?`${t}:${String(n).padStart(2,"0")}:${String(l).padStart(2,"0")}`:`${n}:${String(l).padStart(2,"0")}`}function Yi(r){return new Date(r+"Z").toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function n0(r,e,t,n=18){const l=t>0?n/t*e:e*.02,i=[];for(const s of[...r].sort((o,c)=>o.timestamp-c.timestamp)){const o=i.at(-1);o&&s.timestamp-o.members.at(-1).timestampc+u.timestamp,0)/o.members.length):i.push({time:s.timestamp,members:[s]})}return i}function l0(r,e){const t=/(?l&&n.push({text:r.slice(l,s)});const o=Number(i[1]||0)*3600+Number(i[2])*60+Number(i[3]);n.push({text:i[0],...e>0&&o<=e?{time:o}:{}}),l=s+i[0].length}return ln0(r,e,t,28);function i0({data:r,videoRef:e,comments:t,reactions:n,time:l,duration:i,onTime:s,onDuration:o,seek:c}){const u=a.useRef(null),f=a.useRef(null),[d,p]=a.useState(500),[g,b]=a.useState(!1),[y,m]=a.useState(!1),[v,$]=a.useState(!1),[w,S]=a.useState(1),[K,T]=a.useState(!1),[C,F]=a.useState(1),[_,j]=a.useState(!0),[N,H]=a.useState(!1),[D,M]=a.useState(!1),L=a.useRef(1),O=r.segments.find(A=>l>=A.start_time&&l{if(H(!!document.pictureInPictureEnabled),!f.current)return;const A=new ResizeObserver(([P])=>p(P.contentRect.width));return A.observe(f.current),()=>A.disconnect()},[]),a.useEffect(()=>{function A(P){const V=P.target;if(P.defaultPrevented||P.metaKey||P.ctrlKey||P.altKey||V.closest('input, textarea, select, button, a, [role="slider"], [role="tab"], [role="menuitem"], [contenteditable="true"]'))return;const E=e.current;if(E)switch(P.key.toLowerCase()){case" ":case"k":P.preventDefault(),X();break;case"arrowleft":P.preventDefault(),c(E.currentTime-5);break;case"arrowright":P.preventDefault(),c(E.currentTime+5);break;case"m":ne();break;case"f":te();break;case"c":j(Z=>!Z);break}}return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[c]),h.jsxs(dl,{ref:u,className:"video-shell",children:[h.jsxs("div",{className:"video-stage",children:[h.jsx("video",{ref:e,src:`/v/${r.shareCode}`,poster:`/thumb/${r.shareCode}`,preload:"metadata",playsInline:!0,onClick:()=>{X()},onPlay:()=>{b(!0),$(!1)},onPause:()=>b(!1),onWaiting:()=>m(!0),onPlaying:()=>m(!1),onCanPlay:()=>m(!1),onError:()=>{M(!0),m(!1)},onTimeUpdate:A=>s(A.currentTarget.currentTime),onVolumeChange:A=>{S(A.currentTarget.volume),T(A.currentTarget.muted)},onRateChange:A=>F(A.currentTarget.playbackRate),onEnded:()=>{$(!0),b(!1)},onSeeking:()=>$(!1),onLoadedMetadata:A=>{const P=A.currentTarget;o(Number.isFinite(P.duration)?P.duration:0);const V=Number(new URLSearchParams(location.search).get("t"));Number.isFinite(V)&&V>0&&V0&&h.jsx("track",{kind:"captions",src:`/vtt/${r.shareCode}`,srcLang:"en",label:"English"})}),!g&&!D&&!(v&&I)&&h.jsx("div",{className:"video-play-overlay",children:h.jsx(W,{isIconOnly:!0,size:"lg","aria-label":v?"Replay recording":"Play recording",onPress:()=>{X()},children:v?h.jsx(Tr,{size:24}):h.jsx(Rr,{size:24,weight:"fill"})})}),y&&g&&h.jsx("div",{className:"video-play-overlay",children:h.jsx(fl,{"aria-label":"Buffering video"})}),D&&h.jsxs("div",{className:"video-end-card",children:[h.jsx("p",{children:"We couldn’t load this video."}),h.jsx(W,{variant:"secondary",onPress:()=>{M(!1),e.current?.load()},children:"Try again"})]}),_&&O&&h.jsx("div",{className:"video-caption",children:h.jsxs("span",{children:[O.speaker&&`${O.speaker}: `,O.text]})}),h.jsx("div",{className:"timestamp-reactions","aria-hidden":"true",children:n.filter(A=>l>=A.timestamp&&lh.jsx("span",{className:"timestamp-reaction",style:{left:`${15+P*19%70}%`},children:A.emoji},`${A.created_at}-${A.timestamp}-${P}`))}),v&&I&&h.jsxs("div",{className:"video-end-card",children:[h.jsx(hl,{className:"button button--primary",href:I,target:"_blank",rel:"noopener noreferrer",children:r.video.cta_text||"Learn more"}),h.jsxs(W,{variant:"secondary",onPress:()=>{c(0),X()},children:[h.jsx(Tr,{size:16}),"Replay"]})]})]}),h.jsxs("div",{className:"video-toolbar",children:[h.jsx("div",{ref:f,className:"timeline-markers","aria-label":"Comments and reactions on the timeline",children:a0([...t.map(A=>({timestamp:A.timestamp,kind:"comment",label:`${A.author_name}: ${A.text}`})),...n.map(A=>({timestamp:A.timestamp,kind:"reaction",emoji:A.emoji,label:`${A.emoji} reaction`})),...r.chapters.map(A=>({timestamp:A.timestamp,kind:"chapter",label:`Chapter: ${A.title}`}))],i,d).map((A,P)=>h.jsxs(el,{children:[h.jsx(W,{size:"sm",variant:A.members.length>1?"primary":"ghost",className:"timeline-marker",style:{left:`${i?Math.max(2,Math.min(98,A.time/i*100)):2}%`},"aria-label":`${A.members.length>1?`${A.members.length} items`:A.members[0].label} at ${ie(A.time)}`,onPress:()=>c(A.members[0].timestamp),children:A.members.length>1?A.members.length:A.members[0].kind==="reaction"?h.jsx("span",{"aria-hidden":"true",children:A.members[0].emoji}):A.members[0].kind==="comment"?h.jsx(er,{size:12}):"•"}),h.jsx(el.Content,{children:A.members.map(V=>`${ie(V.timestamp)} ${V.label}`).join(" · ")})]},`timeline-${P}`))}),h.jsxs("div",{className:"video-progress",children:[h.jsx(ur,{"aria-label":"Video progress",value:Math.min(l,i||0),minValue:0,maxValue:i||1,size:"sm",valueLabel:`${ie(l)} of ${ie(i)}`,children:h.jsx(ur.Track,{children:h.jsx(ur.Fill,{})})}),h.jsx("input",{className:"video-seek-input",type:"range","aria-label":"Seek video","aria-valuetext":`${ie(l)} of ${ie(i)}`,min:0,max:i||1,step:.1,value:Math.min(l,i||0),disabled:!i,onChange:A=>c(Number(A.currentTarget.value))})]}),h.jsxs("div",{className:"video-controls",children:[h.jsx(W,{isIconOnly:!0,size:"sm",variant:"ghost","aria-label":g?"Pause":"Play",onPress:()=>{X()},children:g?h.jsx(zi,{size:18,weight:"fill"}):h.jsx(Rr,{size:18,weight:"fill"})}),h.jsx(W,{isIconOnly:!0,size:"sm",variant:"ghost",className:"skip-control","aria-label":"Back 5 seconds",onPress:()=>c(l-5),children:h.jsx(Wi,{size:18})}),h.jsx(W,{isIconOnly:!0,size:"sm",variant:"ghost",className:"skip-control","aria-label":"Forward 5 seconds",onPress:()=>c(l+5),children:h.jsx(Zi,{size:18})}),h.jsx(W,{isIconOnly:!0,size:"sm",variant:"ghost","aria-label":K||w===0?"Unmute":"Mute",onPress:ne,children:K||w===0?h.jsx(Gi,{size:18}):h.jsx(qi,{size:18})}),h.jsx(kt,{className:"volume-control","aria-label":"Volume",minValue:0,maxValue:1,step:.05,value:K?0:w,onChange:A=>{e.current&&(e.current.volume=Number(A),e.current.muted=Number(A)===0,Number(A)&&(L.current=Number(A)))},children:h.jsxs(kt.Track,{children:[h.jsx(kt.Fill,{}),h.jsx(kt.Thumb,{})]})}),h.jsxs("span",{className:"video-time",children:[ie(l)," / ",ie(i)]}),h.jsx("span",{className:"control-spacer"}),r.segments.length>0&&h.jsx(W,{isIconOnly:!0,size:"sm",variant:_?"secondary":"ghost","aria-label":"Captions","aria-pressed":_,onPress:()=>j(!_),children:h.jsx(_i,{size:18})}),h.jsxs(ft,{children:[h.jsxs(W,{size:"sm",variant:"ghost","aria-label":`Playback speed: ${C}×`,children:[C,"×"]}),h.jsx(ft.Popover,{children:h.jsx(ft.Menu,{"aria-label":"Playback speed",selectionMode:"single",selectedKeys:new Set([String(C)]),onAction:A=>{e.current&&(e.current.playbackRate=Number(A))},children:[.5,1,1.25,1.5,2].map(A=>h.jsxs(ft.Item,{id:String(A),textValue:`${A}×`,children:[h.jsxs(It,{children:[A,"×"]}),h.jsx(ft.ItemIndicator,{})]},A))})})]}),N&&h.jsx(W,{isIconOnly:!0,size:"sm",variant:"ghost",className:"pip-control","aria-label":"Picture in picture",onPress:()=>{U()},children:h.jsx(Ui,{size:18})}),h.jsx(W,{isIconOnly:!0,size:"sm",variant:"ghost","aria-label":"Fullscreen",onPress:()=>{te()},children:h.jsx(Vi,{size:18})})]})]})]})}function dr({children:r,label:e}){const t=a.useRef(null),n=a.useRef(null),[l,i]=a.useState(0),[s,o]=a.useState(1),[c,u]=a.useState(0);return a.useLayoutEffect(()=>{const f=t.current,d=n.current;if(!f||!d)return;const p=()=>{const y=f.clientWidth;if(!y)return;const m=y+24,v=Math.max(1,Math.ceil((d.scrollWidth+24-1)/m));u(m),o(v),i($=>Math.min($,v-1))},g=new ResizeObserver(p),b=new MutationObserver(p);return g.observe(f),b.observe(d,{childList:!0,subtree:!0,characterData:!0}),p(),()=>{g.disconnect(),b.disconnect()}},[]),h.jsxs("div",{className:"paged-panel","aria-label":e,children:[h.jsx("div",{ref:t,className:"page-viewport",onFocusCapture:f=>{if(!c||!t.current)return;const d=t.current,p=f.target.getBoundingClientRect().left-d.getBoundingClientRect().left+l*c+d.scrollLeft;i(Math.max(0,Math.min(s-1,Math.floor((p+1)/c)))),d.scrollLeft=0},children:h.jsx("div",{ref:n,className:"page-flow",style:{transform:`translateX(-${l*c}px)`},children:r})}),h.jsxs("nav",{hidden:s===1,className:"page-navigation","aria-label":`${e} pages`,children:[h.jsx(W,{size:"sm",variant:"ghost",isIconOnly:!0,"aria-label":`Previous ${e.toLowerCase()} page`,isDisabled:l===0,onPress:()=>i(l-1),children:h.jsx(Hi,{size:16})}),h.jsxs("span",{"aria-live":"polite",children:[l+1," / ",s]}),h.jsx(W,{size:"sm",variant:"ghost",isIconOnly:!0,"aria-label":`Next ${e.toLowerCase()} page`,isDisabled:l>=s-1,onPress:()=>i(l+1),children:h.jsx(ji,{size:16})})]})]})}function s0({data:r,time:e,duration:t,comments:n,setComments:l,seek:i,composerRef:s,selectedTab:o,setSelectedTab:c}){const[u,f]=a.useState(""),[d,p]=a.useState(""),[g,b]=a.useState(null),[y,m]=a.useState(!1),[v,$]=a.useState(!0),[w,S]=a.useState(""),[K,T]=a.useState(1),[C,F]=a.useState(0),[_,j]=a.useState(!1),N=n.reduce((M,L,O)=>L.timestamp<=e+.3?O:M,-1);a.useEffect(()=>{try{f(localStorage.getItem("recordly-comment-name")||"")}catch{}let M=!1;return tl(r.shareCode).then(L=>{M||(l([...L.comments].sort((O,I)=>O.timestamp-I.timestamp)),F(L.total),$(!1))}).catch(()=>{M||(S("Comments could not be loaded. Reload the page to try again."),$(!1))}),()=>{M=!0}},[r.shareCode]);async function H(){j(!0);try{const M=await tl(r.shareCode,K+1);l([...n,...M.comments].sort((L,O)=>L.timestamp-O.timestamp)),F(M.total),T(K+1)}catch{Be.danger("Could not load more comments. Try again.")}finally{j(!1)}}async function D(){if(y||!u.trim()||!d.trim())return;const M=g??e;m(!0),S("");try{if(!await r0(r.shareCode,M,u.trim(),d.trim()))throw new Error("Could not post your comment. Please try again.");l([...n,{timestamp:M,author_name:u.trim(),text:d.trim(),created_at:new Date().toISOString().slice(0,19)}].sort((O,I)=>O.timestamp-I.timestamp)),F(C+1),p(""),b(null);try{localStorage.setItem("recordly-comment-name",u.trim())}catch{}Be.success(`Comment posted at ${ie(M)}`)}catch{S("Could not post your comment. Your draft is saved here—please try again.")}finally{m(!1)}}return h.jsxs(dl,{className:"feedback-card",children:[h.jsxs(ge,{selectedKey:o,onSelectionChange:M=>c(String(M)),className:"feedback-tabs",children:[h.jsx(ge.ListContainer,{children:h.jsxs(ge.List,{"aria-label":"Recording feedback",children:[h.jsxs(ge.Tab,{id:"comments",children:["Comments",C>0&&h.jsx(Ks,{size:"sm",variant:"soft",children:C}),h.jsx(ge.Indicator,{})]}),r.segments.length>0&&h.jsxs(ge.Tab,{id:"transcript",children:["Transcript",h.jsx(ge.Indicator,{})]}),(r.video.summary||r.chapters.length>0)&&h.jsxs(ge.Tab,{id:"details",children:["Details",h.jsx(ge.Indicator,{})]})]})}),h.jsx(ge.Panel,{id:"comments",children:h.jsxs(dr,{label:"Comments",children:[v?h.jsx("div",{className:"empty-feedback",children:h.jsx(fl,{"aria-label":"Loading comments"})}):n.length?n.map((M,L)=>h.jsxs("article",{className:"comment-item","data-active":L===N,children:[h.jsxs("div",{className:"comment-heading",children:[h.jsx(Zt,{size:"sm",children:h.jsx(Zt.Fallback,{children:M.author_name.slice(0,2).toUpperCase()})}),h.jsx("strong",{children:M.author_name}),h.jsx(W,{size:"sm",variant:"ghost","aria-label":`Jump to ${ie(M.timestamp)}`,onPress:()=>i(M.timestamp),children:h.jsx("span",{className:"timestamp",children:ie(M.timestamp)})})]}),h.jsx("p",{children:l0(M.text,t).map((O,I)=>O.time===void 0?O.text:h.jsx(W,{size:"sm",variant:"ghost",className:"inline-timestamp timestamp",onPress:()=>i(O.time),children:O.text},I))}),h.jsx("span",{className:"comment-date",children:Yi(M.created_at)})]},`${M.created_at}-${L}`)):h.jsxs("div",{className:"empty-feedback",children:[h.jsx(er,{size:28}),h.jsx("h2",{children:"Start the conversation"}),h.jsx("p",{children:"Leave feedback at the exact moment you’re watching."})]}),n.length{H()},children:"Load more comments"})]})}),r.segments.length>0&&h.jsx(ge.Panel,{id:"transcript",children:h.jsx(dr,{label:"Transcript",children:r.segments.map((M,L)=>h.jsxs("article",{className:"transcript-item","data-active":e>=M.start_time&&ei(M.start_time),children:h.jsx("span",{className:"timestamp",children:ie(M.start_time)})}),M.speaker&&h.jsx("span",{children:M.speaker}),h.jsx(W,{size:"sm",variant:"ghost",isIconOnly:!0,className:"copy-timestamp","aria-label":`Copy link to ${ie(M.start_time)}`,onPress:()=>{Rs(M.start_time)},children:h.jsx(Ts,{size:15})})]}),h.jsx(W,{variant:"ghost",className:"transcript-seek",onPress:()=>i(M.start_time),children:M.text})]},L))})}),(r.video.summary||r.chapters.length>0)&&h.jsx(ge.Panel,{id:"details",children:h.jsxs(dr,{label:"Details",children:[h.jsxs("section",{className:"recording-details",children:[h.jsx("h2",{children:"Recording"}),h.jsx("p",{children:r.video.title})]}),r.video.summary&&h.jsxs("section",{className:"recording-details",children:[h.jsx("h2",{children:"Summary"}),h.jsx("p",{children:r.video.summary})]}),r.chapters.length>0&&h.jsxs("section",{className:"recording-details",children:[h.jsx("h2",{children:"Chapters"}),h.jsx("div",{className:"chapter-list",children:r.chapters.map((M,L)=>h.jsxs(W,{size:"sm",variant:"ghost",onPress:()=>i(M.timestamp),children:[h.jsx("span",{className:"timestamp",children:ie(M.timestamp)}),M.title]},L))})]})]})})]}),h.jsxs("form",{className:"composer",hidden:o!=="comments",onSubmit:M=>{M.preventDefault(),D()},children:[w&&h.jsx(ml,{children:w}),h.jsxs(pr,{name:"author",value:u,onChange:f,isRequired:!0,isDisabled:y,children:[h.jsx(It,{children:"Name"}),h.jsx(pl,{maxLength:100,autoComplete:"name",placeholder:"Name"})]}),h.jsxs(pr,{name:"comment",value:d,onChange:M=>{p(M),b(M.trim()?g??e:null)},isRequired:!0,isDisabled:y,children:[h.jsx(It,{children:"Comment"}),h.jsx(Kd,{ref:s,maxLength:2e3,placeholder:"Share your thoughts…",onKeyDown:M=>{(M.metaKey||M.ctrlKey)&&M.key==="Enter"&&(M.preventDefault(),D())}})]}),h.jsxs("div",{className:"composer-footer",children:[h.jsxs(W,{type:"button",size:"sm",variant:"ghost","aria-label":`Comment timestamp ${ie(g??e)}. Use current video time`,onPress:()=>b(e),children:[h.jsx(Oi,{size:14}),h.jsx("span",{className:"timestamp",children:ie(g??e)})]}),h.jsxs(W,{type:"submit",size:"sm",isPending:y,isDisabled:!u.trim()||!d.trim()||y,children:[h.jsx(Bi,{size:15}),y?"Posting…":"Post"]})]})]})]})}const o0=[{emoji:"👍",label:"Like"},{emoji:"❤️",label:"Love"},{emoji:"😂",label:"Laugh"},{emoji:"😮",label:"Surprised"},{emoji:"🔥",label:"Fire"},{emoji:"👏",label:"Applause"}];function c0({data:r}){const e=a.useRef(null),t=a.useRef(null),[n,l]=a.useState(0),[i,s]=a.useState(r.video.duration),[o,c]=a.useState([]),[u,f]=a.useState([]),d=u.reduce((K,T)=>(K[T.emoji]=(K[T.emoji]||0)+1,K),{}),[p,g]=a.useState(null),[b,y]=a.useState("comments"),[m,v]=a.useState("watch"),$=a.useCallback(K=>{const T=e.current;T&&Number.isFinite(T.duration)&&(T.currentTime=Math.max(0,Math.min(T.duration,K)),l(T.currentTime))},[]);a.useEffect(()=>{let K=!1;return e0(r.shareCode).then(T=>{K||f(C=>[...T,...C])}).catch(()=>{}),()=>{K=!0}},[r.shareCode]);async function w(K){if(p)return;g(K);const T=e.current?.currentTime||0;try{if(!await t0(r.shareCode,T,K))throw new Error;f(C=>[...C,{timestamp:T,emoji:K,created_at:new Date().toISOString()}]),Be.success(`${K} Reaction at ${ie(T)}`)}catch{Be.danger("Could not add your reaction. Try again.")}finally{g(null)}}const{video:S}=r;return h.jsxs("div",{className:"recording-app","data-mobile-view":m,children:[h.jsx(gl,{}),m==="feedback"&&h.jsx("div",{className:"mobile-feedback-back",children:h.jsx(W,{size:"sm",variant:"secondary",onPress:()=>v("watch"),children:"Back to video"})}),h.jsxs("div",{className:"share-workspace",children:[h.jsxs("main",{className:"recording-column",children:[h.jsxs("div",{className:"recording-heading",children:[h.jsxs("div",{children:[h.jsx("h1",{className:"recording-title",children:S.title}),h.jsxs("div",{className:"creator-info","aria-label":"Recording creator",children:[h.jsx(Zt,{size:"sm",children:h.jsx(Zt.Fallback,{children:r.creator?.name.slice(0,2).toUpperCase()||"?"})}),h.jsxs("div",{children:[h.jsx("div",{className:"creator-name",children:r.creator?.website&&/^https?:\/\//i.test(r.creator.website)?h.jsx(hl,{href:r.creator.website,target:"_blank",rel:"noopener noreferrer",children:r.creator.name}):r.creator?.name||"Creator not provided"}),r.creator?.bio&&h.jsx("div",{className:"creator-bio",title:r.creator.bio,children:r.creator.bio})]})]}),h.jsxs("div",{className:"recording-meta",children:[h.jsx("span",{children:Yi(S.created_at)}),h.jsxs("span",{children:[S.view_count.toLocaleString()," ",S.view_count===1?"view":"views"]}),S.width>0&&h.jsxs("span",{children:[S.width," × ",S.height]})]})]}),h.jsx(Ns,{time:n})]}),h.jsx(i0,{data:r,videoRef:e,comments:o,reactions:u,time:n,duration:i,onTime:l,onDuration:s,seek:$}),h.jsxs("div",{className:"reaction-rail",children:[h.jsx("div",{className:"reaction-buttons","aria-label":"Reactions",children:o0.map(({emoji:K,label:T})=>h.jsxs(W,{size:"sm",variant:"ghost","aria-label":`${T}${d[K]?`, ${d[K]} ${d[K]===1?"reaction":"reactions"}`:""}`,isDisabled:p!==null,onPress:()=>{w(K)},children:[h.jsx("span",{"aria-hidden":"true",children:K}),d[K]>0&&h.jsx("span",{children:d[K]})]},K))}),h.jsxs(W,{className:"mobile-comment-button",size:"sm",variant:"primary",onPress:()=>{y("comments"),v("feedback"),requestAnimationFrame(()=>t.current?.focus({preventScroll:!0}))},children:[h.jsx(er,{size:17}),"Comment"]})]})]}),h.jsx("aside",{"aria-label":"Recording feedback",children:h.jsx(s0,{data:r,time:n,duration:i,comments:o,setComments:c,seek:$,composerRef:t,selectedTab:b,setSelectedTab:y})})]})]})}function p0(){const[r,e]=a.useState(null),[t,n]=a.useState("loading"),[l,i]=a.useState("Protected recording"),[s,o]=a.useState(""),[c,u]=a.useState(!1),[f,d]=a.useState("");async function p(){n("loading");try{const b=location.pathname.split("/").filter(Boolean).pop()||"",y=await Jd(b);Xd(y)?(n("expired"),document.title="Recording unavailable — Recordly"):Yd(y)?(n("password"),i(y.title),document.title=`${y.title} — Recordly`):Gd(y)?(e(y),n("recording"),document.title=`${y.video.title} — Recordly`):n("error")}catch{n("error")}}a.useEffect(()=>{p()},[]);async function g(){if(!c){u(!0),d("");try{const b=location.pathname.split("/").filter(Boolean).pop()||"";await Qd(b,s)?await p():d("That password didn’t match. Please try again.")}catch{d("Could not unlock the recording. Please try again.")}finally{u(!1)}}}return h.jsxs(h.Fragment,{children:[h.jsx(ks,{}),t==="loading"?h.jsxs("div",{className:"recording-app",children:[h.jsx(gl,{}),h.jsxs("div",{className:"share-workspace","aria-label":"Loading recording","aria-busy":"true",children:[h.jsxs("div",{className:"recording-column",children:[h.jsxs("div",{children:[h.jsx(Mt,{className:"loading-title"}),h.jsx(Mt,{className:"loading-meta"})]}),h.jsx(Mt,{className:"loading-video"})]}),h.jsx(Mt,{className:"loading-sidebar"})]})]}):t==="recording"&&r?h.jsx(c0,{data:r}):h.jsx(Ls,{children:t==="password"?h.jsxs(h.Fragment,{children:[h.jsx(Fs,{size:28}),h.jsx("h1",{children:l}),h.jsx("p",{children:"This recording is password protected."}),h.jsxs("form",{className:"gate-form",onSubmit:b=>{b.preventDefault(),g()},children:[h.jsxs(pr,{value:s,onChange:o,isRequired:!0,isDisabled:c,children:[h.jsx(It,{children:"Password"}),h.jsx(pl,{type:"password",autoComplete:"current-password",autoFocus:!0})]}),f&&h.jsx(ml,{children:f}),h.jsx(W,{type:"submit",isPending:c,isDisabled:!s||c,children:c?"Unlocking…":"Unlock recording"})]})]}):t==="expired"?h.jsxs(h.Fragment,{children:[h.jsx("h1",{children:"Recording unavailable"}),h.jsx("p",{children:"This link has expired or the recording has been removed. Ask the creator for a new link."})]}):h.jsxs(h.Fragment,{children:[h.jsx("h1",{children:"Couldn’t load the recording"}),h.jsx("p",{children:"Check your connection and try again."}),h.jsxs(W,{onPress:()=>{p()},children:[h.jsx(Ds,{size:16}),"Try again"]})]})})]})}export{p0 as default}; diff --git a/services/recordly-share/worker/web/dist/_astro/ShareUI.BflDJKuK.js b/services/recordly-share/worker/web/dist/_astro/ShareUI.BflDJKuK.js new file mode 100644 index 000000000..09a4fe5a2 --- /dev/null +++ b/services/recordly-share/worker/web/dist/_astro/ShareUI.BflDJKuK.js @@ -0,0 +1,7 @@ +import{r as i,$ as I,a as ss,g as is,b as ls}from"./index.DeQQz02V.js";var Gt={exports:{}},Ye={};var Zn;function cs(){if(Zn)return Ye;Zn=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(r,a,o){var s=null;if(o!==void 0&&(s=""+o),a.key!==void 0&&(s=""+a.key),"key"in a){o={};for(var l in a)l!=="key"&&(o[l]=a[l])}else o=a;return a=o.ref,{$$typeof:e,type:r,key:s,ref:a!==void 0?a:null,props:o}}return Ye.Fragment=t,Ye.jsx=n,Ye.jsxs=n,Ye}var Gn;function us(){return Gn||(Gn=1,Gt.exports=cs()),Gt.exports}var m=us();function Nt(e){if(typeof window>"u"||window.navigator==null)return!1;let t=window.navigator.userAgentData?.brands;return Array.isArray(t)&&t.some(n=>e.test(n.brand))||e.test(window.navigator.userAgent)}function Cn(e){return typeof window<"u"&&window.navigator!=null?e.test(window.navigator.userAgentData?.platform||window.navigator.platform):!1}function ve(e){let t=null;return()=>(t==null&&(t=e()),t)}const Ee=ve(function(){return Cn(/^Mac/i)}),ds=ve(function(){return Cn(/^iPhone/i)}),Nr=ve(function(){return Cn(/^iPad/i)||Ee()&&navigator.maxTouchPoints>1}),Ot=ve(function(){return ds()||Nr()}),jd=ve(function(){return Ee()||Ot()}),kt=ve(function(){return Nt(/AppleWebKit/i)&&(Ot()||!fs())}),fs=ve(function(){return Nt(/Chrome|CriOS|CrMo/i)}),cn=ve(function(){return Nt(/Android/i)}),ms=ve(function(){return Nt(/(Firefox|FxiOS)/i)});function ce(e){if(bs())e.focus({preventScroll:!0});else{let t=ps(e);e.focus(),hs(t)}}let ct=null;function bs(){if(ct==null){ct=!1;try{document.createElement("div").focus({get preventScroll(){return ct=!0,!0}})}catch{}}return ct}function ps(e){let t=e.parentNode,n=[],r=document.scrollingElement||document.documentElement;for(;t instanceof HTMLElement&&t!==r;)(t.offsetHeighte});function Or(){return i.useContext(vs)}function gs(e,t){let n=e.getAttribute("target");return(!n||n==="_self")&&e.origin===location.origin&&!e.hasAttribute("download")&&!t.metaKey&&!t.ctrlKey&&!t.altKey&&!t.shiftKey}function Ce(e,t,n=!0){let{metaKey:r,ctrlKey:a,altKey:o,shiftKey:s}=t;!kt()&&ms()&&window.event?.type?.startsWith("key")&&e.target==="_blank"&&(Ee()?r=!0:a=!0);let l=kt()&&Ee()&&!Nr()?new KeyboardEvent("keydown",{keyIdentifier:"Enter",metaKey:r,ctrlKey:a,altKey:o,shiftKey:s}):new MouseEvent("click",{metaKey:r,ctrlKey:a,altKey:o,shiftKey:s,detail:1,bubbles:!0,cancelable:!0});Ce.isOpening=n,ce(e),e.dispatchEvent(l),Ce.isOpening=!1}Ce.isOpening=!1;function $s(e,t){if(e instanceof HTMLAnchorElement)t(e);else if(e.hasAttribute("data-href")){let n=document.createElement("a");n.href=e.getAttribute("data-href"),e.hasAttribute("data-target")&&(n.target=e.getAttribute("data-target")),e.hasAttribute("data-rel")&&(n.rel=e.getAttribute("data-rel")),e.hasAttribute("data-download")&&(n.download=e.getAttribute("data-download")),e.hasAttribute("data-ping")&&(n.ping=e.getAttribute("data-ping")),e.hasAttribute("data-referrer-policy")&&(n.referrerPolicy=e.getAttribute("data-referrer-policy")),e.appendChild(n),t(n),e.removeChild(n)}}function ys(e,t){$s(e,n=>Ce(n,t))}function xs(e){const n=Or().useHref(e?.href??"");let r={};if(e)for(let a of["href","target","rel","download","ping","referrerPolicy"])a in e&&e[a]!==void 0&&(r[a]=a==="href"?n:e[a]);return r}function ws(e,t,n,r){!t.isNative&&e.currentTarget instanceof HTMLAnchorElement&&e.currentTarget.href&&!e.isDefaultPrevented()&&gs(e.currentTarget,e)&&n&&(e.preventDefault(),t.open(e.currentTarget,e,n,r))}const ae=typeof document<"u"?I.useLayoutEffect:()=>{},_r={prefix:String(Math.round(Math.random()*1e10)),current:0},Br=I.createContext(_r),Es=I.createContext(!1);let Wt=new WeakMap;function Cs(e=!1){let t=i.useContext(Br),n=i.useRef(null);if(n.current===null&&!e){let r=I.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;if(r){let a=Wt.get(r);a==null?Wt.set(r,{id:t.current,state:r.memoizedState}):r.memoizedState!==a.state&&(t.current=a.id,Wt.delete(r))}n.current=++t.current}return n.current}function Ts(e){let t=i.useContext(Br),n=Cs(!!e),r=`react-aria${t.prefix}`;return e||`${r}-${n}`}function ks(e){let t=I.useId(),[n]=i.useState(at()),r=n?"react-aria":`react-aria${_r.prefix}`;return e||`${r}-${t}`}const Ss=typeof I.useId=="function"?ks:Ts;function Ps(){return!1}function Ls(){return!0}function Ms(e){return()=>{}}function at(){return typeof I.useSyncExternalStore=="function"?I.useSyncExternalStore(Ms,Ps,Ls):i.useContext(Es)}function As(e){let[t,n]=i.useState(e),r=i.useRef(t),a=i.useRef(null),o=i.useRef(()=>{if(!a.current)return;let l=a.current.next();if(l.done){a.current=null;return}r.current===l.value?o.current():n(l.value)});ae(()=>{r.current=t,a.current&&o.current()});let s=i.useCallback(l=>{a.current=l(r.current),o.current()},[o]);return[t,s]}let Is=!!(typeof window<"u"&&window.document&&window.document.createElement),Ke=new Map,_e;typeof FinalizationRegistry<"u"&&(_e=new FinalizationRegistry(e=>{Ke.delete(e)}));let qt=new WeakMap;function Ae(e){let[t,n]=i.useState(e),r=i.useRef(null),a=Ss(t),o=i.useRef(null),s=qt.get(o);if(_e&&s!==a&&(s!=null&&_e.unregister(o),_e.register(o,a,o),qt.set(o,a)),Is){const l=Ke.get(a);l&&!l.includes(r)?l.push(r):Ke.set(a,[r])}return ae(()=>{let l=a;return()=>{_e&&(_e.unregister(o),qt.delete(o)),Ke.delete(l)}},[a]),i.useEffect(()=>{let l=r.current;return l&&n(l),()=>{l&&(r.current=null)}}),a}function Rs(e,t){if(e===t)return e;let n=Ke.get(e);if(n)return n.forEach(a=>a.current=t),t;let r=Ke.get(t);return r?(r.forEach(a=>a.current=e),e):t}function un(e=[]){let t=Ae(),[n,r]=As(t),a=i.useCallback(()=>{r(function*(){yield t,yield document.getElementById(t)?t:void 0})},[t,r]);return ae(a,[t,a,...e]),n}function St(...e){return(...t)=>{for(let n of e)typeof n=="function"&&n(...t)}}const X=e=>Vs(e)?e.document:Fs(e)?e:e?.ownerDocument??(typeof document<"u"?document:void 0),re=e=>X(e)?.defaultView??(typeof window<"u"?window:void 0);function zr(e){return e!==null&&typeof e=="object"&&"nodeType"in e&&typeof e.nodeType=="number"}function Vs(e){return typeof e=="object"&&e!=null&&"window"in e&&e.window===e}function Fs(e){return zr(e)&&e.nodeType===9}function Tn(e){return zr(e)&&e.nodeType===11&&"host"in e}function Hd(e,t,n,r){if(n==null||e==null)return()=>{};let a=Array.isArray(e)?e:[e];for(let o of a)o.addEventListener(t,n,r);return()=>{for(let o of a)o.removeEventListener(t,n,r)}}function Dd(e,t,n,r){if(e==null)return()=>{};let a=new Array,o=Array.isArray(e)?e:[e];for(let s of o){let l=s.style.getPropertyValue(t),c=s.style.getPropertyPriority(t);s.style.setProperty(t,n,r),a.unshift(()=>{l?s.style.setProperty(t,l,c):s.style.removeProperty(t)})}return()=>{for(let s of a)s()}}let js=!1;function _t(){return js}function G(e,t){if(!_t())return t&&e?e.contains(t):!1;if(!e||!t)return!1;let n=t;for(;n!==null;){if(n===e)return!0;typeof n.assignedElements!="function"&&n.assignedSlot?.parentNode?n=n.assignedSlot.parentNode:Tn(n)?n=n.host:n=n.parentNode}return!1}const pe=(e=document)=>{if(!_t())return e.activeElement;let t=e.activeElement;for(;t&&"shadowRoot"in t&&t.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t};function D(e){if(_t()&&e.target instanceof Element&&e.target.shadowRoot){if("composedPath"in e)return e.composedPath()[0]??null;if("composedPath"in e.nativeEvent)return e.nativeEvent.composedPath()[0]??null}return e.target}function Nd(e,t){if(t===null)return[];t=t??re(e);let n=[t];if(!_t()||!e||e===t)return n;let r="getRootNode"in t?t.getRootNode():null,a=e.getRootNode()??null;for(;Tn(a)&&a!==r;)n.push(a),a=a.host.getRootNode();return n}function Od(e){if(!e)return!1;let t=e.getRootNode(),n=re(e);if(!(t instanceof n.Document||t instanceof n.ShadowRoot))return!1;let r=t.activeElement;return r!=null&&e.contains(r)}function ot(...e){return e.length===1&&e[0]?e[0]:t=>{let n=!1;const r=e.map(a=>{const o=Wn(a,t);return n||=typeof o=="function",o});if(n)return()=>{r.forEach((a,o)=>{typeof a=="function"?a():Wn(e[o],null)})}}}function Wn(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Kr(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t=65&&a.charCodeAt(2)<=90?t[a]=St(o,s):(a==="className"||a==="UNSAFE_className")&&typeof o=="string"&&typeof s=="string"?t[a]=Hs(o,s):a==="id"&&o&&s?t.id=Rs(o,s):a==="ref"&&o&&s?t.ref=ot(o,s):t[a]=s!==void 0?s:o}}return t}const Ds=new Set(["id"]),Ns=new Set(["aria-label","aria-labelledby","aria-describedby","aria-details"]),Os=new Set(["href","hrefLang","target","rel","download","ping","referrerPolicy"]),_s=new Set(["dir","lang","hidden","inert","translate"]),qn=new Set(["onClick","onAuxClick","onContextMenu","onDoubleClick","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onTouchCancel","onTouchEnd","onTouchMove","onTouchStart","onPointerDown","onPointerMove","onPointerUp","onPointerCancel","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onGotPointerCapture","onLostPointerCapture","onScroll","onWheel","onAnimationStart","onAnimationEnd","onAnimationIteration","onTransitionCancel","onTransitionEnd","onTransitionRun","onTransitionStart"]),Bs=/^(data-.*)$/;function ue(e,t={}){let{labelable:n,isLink:r,global:a,events:o=a,propNames:s}=t,l={};for(const c in e)Object.prototype.hasOwnProperty.call(e,c)&&(Ds.has(c)||n&&Ns.has(c)||r&&Os.has(c)||a&&_s.has(c)||o&&(qn.has(c)||c.endsWith("Capture")&&qn.has(c.slice(0,-7)))||s?.has(c)||Bs.test(c))&&(l[c]=e[c]);return l}let xe=new Map,dn=new Set;function Yn(){if(typeof window>"u")return;function e(r){return"propertyName"in r}let t=r=>{let a=D(r);if(!e(r)||!a)return;let o=xe.get(a);o||(o=new Set,xe.set(a,o),a.addEventListener("transitioncancel",n,{once:!0})),o.add(r.propertyName)},n=r=>{let a=D(r);if(!e(r)||!a)return;let o=xe.get(a);if(o&&(o.delete(r.propertyName),o.size===0&&(a.removeEventListener("transitioncancel",n),xe.delete(a)),xe.size===0)){for(let s of dn)s();dn.clear()}};document.body.addEventListener("transitionrun",t),document.body.addEventListener("transitionend",n)}typeof document<"u"&&(document.readyState!=="loading"?Yn():document.addEventListener("DOMContentLoaded",Yn));function zs(){for(const[e]of xe)"isConnected"in e&&!e.isConnected&&xe.delete(e)}function Ur(e){requestAnimationFrame(()=>{zs(),xe.size===0?e():dn.add(e)})}function kn(){let e=i.useRef(new Map),t=i.useCallback((a,o,s,l)=>{let c=l?.once?(...u)=>{e.current.delete(s),s(...u)}:s;e.current.set(s,{type:o,eventTarget:a,fn:c,options:l}),a.addEventListener(o,c,l)},[]),n=i.useCallback((a,o,s,l)=>{let c=e.current.get(s)?.fn||s;a.removeEventListener(o,c,l),e.current.delete(s)},[]),r=i.useCallback(()=>{e.current.forEach((a,o)=>{n(a.eventTarget,a.type,o,a.options)})},[n]);return i.useEffect(()=>r,[r]),{addGlobalListener:t,removeGlobalListener:n,removeAllGlobalListeners:r}}function Ks(e,t){let{id:n,"aria-label":r,"aria-labelledby":a}=e;return n=Ae(n),a&&r?a=[...new Set([n,...a.trim().split(/\s+/)])].join(" "):a&&(a=a.trim().split(/\s+/).join(" ")),!r&&!a&&t&&(r=t),{id:n,"aria-label":r,"aria-labelledby":a}}function Bt(e){const t=i.useRef(null),n=i.useRef(void 0),r=i.useCallback(a=>{if(typeof e=="function"){const o=e,s=o(a);return()=>{typeof s=="function"?s():o(null)}}else if(e)return e.current=a,()=>{e.current=null}},[e]);return i.useMemo(()=>({get current(){return t.current},set current(a){t.current=a,n.current&&(n.current(),n.current=void 0),a!=null&&(n.current=r(a))}}),[r])}const Us=I.useInsertionEffect??ae;function Me(e){const t=i.useRef(null);return Us(()=>{t.current=e},[e]),i.useCallback((...n)=>{const r=t.current;return r?.(...n)},[])}function Zr(e,t){ae(()=>{if(e&&e.ref&&t)return e.ref.current=t.current,()=>{e.ref&&(e.ref.current=null)}})}function Gr(e){return e.pointerType===""&&e.isTrusted?!0:cn()&&e.pointerType?e.type==="click"&&e.buttons===1:e.detail===0&&!e.pointerType}function Zs(e){return!cn()&&e.width===0&&e.height===0||cn()&&e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType==="mouse"}function Gs(e,t,n){let r=Me(a=>{n&&!a.defaultPrevented&&n(t)});i.useEffect(()=>{let a=e?.current?.form;return a?.addEventListener("reset",r),()=>{a?.removeEventListener("reset",r)}},[e])}var Wr=ss();const _d=is(Wr),Ws=typeof Element<"u"&&"checkVisibility"in Element.prototype;function qs(e){const t=re(e);if(!(e instanceof t.HTMLElement)&&!(e instanceof t.SVGElement))return!1;let{display:n,visibility:r}=e.style,a=n!=="none"&&r!=="hidden"&&r!=="collapse";if(a){const{getComputedStyle:o}=re(e);let{display:s,visibility:l}=o(e);a=s!=="none"&&l!=="hidden"&&l!=="collapse"}return a}function Ys(e,t){return!e.hasAttribute("hidden")&&!e.hasAttribute("data-react-aria-prevent-focus")&&(e.nodeName==="DETAILS"&&t&&t.nodeName!=="SUMMARY"?e.hasAttribute("open"):!0)}function Sn(e,t){return Ws?e.checkVisibility({visibilityProperty:!0})&&!e.closest("[data-react-aria-prevent-focus]"):e.nodeName!=="#comment"&&qs(e)&&Ys(e,t)&&(!e.parentElement||Sn(e.parentElement,e))}const Pn=["input:not([disabled]):not([type=hidden])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable^="false"])',"permission"],Xs=Pn.join(":not([hidden]),")+",[tabindex]:not([disabled]):not([hidden])";Pn.push('[tabindex]:not([tabindex="-1"]):not([disabled])');const Qs=Pn.join(':not([hidden]):not([tabindex="-1"]),');function Js(e,t){return e.matches(Xs)&&!qr(e)&&(t?.skipVisibilityCheck||Sn(e))}function Bd(e){return e.matches(Qs)&&Sn(e)&&!qr(e)}function qr(e){let t=e;for(;t!=null;){if(t instanceof re(t).HTMLElement&&t.inert)return!0;t=t.parentElement}return!1}function ei(e,t){let n=re(t),r=X(t);if(r==null||n==null)return;let a,o=`meta[name="${CSS.escape(e)}"], meta[property="${CSS.escape(e)}"]`,s=r.querySelector(o);return s&&s instanceof n.HTMLMetaElement&&(e==="csp-nonce"&&s.nonce&&(a??=s.nonce||void 0),s.content&&(a??=s.content||void 0)),e==="csp-nonce"&&(a??=n.__webpack_nonce__||globalThis.__webpack_nonce__||void 0),a}let Xn=new WeakMap;function ti(e){let t=X(e),n=Xn.get(t);return n??=ei("csp-nonce",t),n!==void 0&&Xn.set(t,n),n}function Yr(e,t=-1/0,n=1/0){return Math.min(Math.max(e,t),n)}function ut(e,t){let n=e,r=0,a=t.toString(),o=a.toLowerCase().indexOf("e-");if(o>0)r=Math.abs(Math.floor(Math.log10(Math.abs(t))))+o;else{let s=a.indexOf(".");s>=0&&(r=a.length-s)}if(r>0){let s=Math.pow(10,r);n=Math.round(n*s)/s}return n}function zd(e,t,n,r){t=Number(t),n=Number(n);let a=(e-(isNaN(t)?0:t))%r,o=ut(Math.abs(a)*2>=r?e+Math.sign(a)*(r-Math.abs(a)):e-a,r);return isNaN(t)?!isNaN(n)&&o>n&&(o=Math.floor(ut(n/r,r))*r):on&&(o=t+Math.floor(ut((n-t)/r,r))*r),o=ut(o,r),o}function ni(e,t){const{ref:n,render:r,...a}=t,o=i.useRef(null),s=i.useMemo(()=>ot(n,o),[n,o]);ae(()=>{},[e,r]);const l={...a,ref:s};return r?r(l,void 0):m.jsx(e,{...l})}const Qn={},J=new Proxy({},{get(e,t){if(typeof t!="string")return;let n=Qn[t];return n||(n=ni.bind(null,t),Qn[t]=n),n}});var ri=Array.isArray,zt=e=>{if(!e&&e!==0&&e!==0n)return"";if(typeof e=="string")return e;if(typeof e=="number")return e!==e?"":""+e;if(typeof e=="bigint")return""+e;let t="";if(ri(e)){const n=e.length;for(let r=0;rtypeof e!="string"||!e?e:e.replace(ai," ").trim(),si=e=>{const t=e.length;if(t===0)return!1;const n=e.charCodeAt(0),r=e.charCodeAt(t-1);if(n===32||r===32||n>=9&&n<=13||n===160||r>=9&&r<=13||r===160)return!0;for(let a=0;a=9&&o<=13||o===160||o===32&&a+1{const t=zt(e);if(t)return si(t)?oi(t):t},mn=e=>e===!1?"false":e===!0?"true":e===0?"0":e,se=e=>{if(!e||typeof e!="object")return!0;for(const t in e)return!1;return!0},Xr=(e,t)=>{if(e===t)return!0;if(!e||!t)return!1;const n=e,r=t,a=Object.keys(n),o=Object.keys(r);if(a.length!==o.length)return!1;for(let s=0;s{const n=e;for(const r in t)if(Object.hasOwn(t,r)){const a=t[r];r in n?n[r]=et(n[r],a):n[r]=a}return e},Qr=(e,t)=>{for(let n=0;n{const t=[];Qr(e,t);const n=[];for(let r=0;r{const n=e,r=t,a={};for(const o in n){const s=n[o];if(o in r){const l=r[o];fn(s)||fn(l)?a[o]=bn(l,s):typeof s=="object"&&typeof l=="object"&&s&&l?a[o]=Ln(s,l):a[o]=l+" "+s}else a[o]=s}for(const o in r)o in n||(a[o]=r[o]);return a},li={twMerge:!0,twMergeConfig:{}},Jr=256,ci=128,Ie=Symbol("tv-cache-miss"),ui=e=>e?.class!=null&&e.class!==""||e?.className!=null&&e.className!=="",Jn=e=>{if(e===void 0)return"";if(e===null)return"null";if(typeof e=="string")return e;if(typeof e=="boolean")return e?"true":"false";if(typeof e=="number")return e===0?"0":String(e);if(typeof e=="bigint")return String(e);const t=mn(e),n=typeof t;if(n==="string"||n==="number"||n==="boolean"||n==="bigint")return String(t);if(n==="object")try{return JSON.stringify(t)}catch{return null}return null},Ne=(e,t)=>{if(t===void 0)return e;if(t===null)return e+"null";const n=typeof t;if(n==="string"||n==="number"||n==="boolean"||n==="bigint")return e+String(t);if(Array.isArray(t))return e+t.join("\0");try{return e+JSON.stringify(t)}catch{return e+"?"}},ea=(e,t,n,r)=>{let a="";const o=Object.create(null);for(let l=0;l1&&s.sort();for(let l=0;l{let n="";for(let r=0;r{let t=new Map,n=null;return{get(r){if(t.has(r))return t.get(r);if(n?.has(r)){const a=n.get(r);return t.set(r,a),a}return Ie},set(r,a){t.size>=e&&(n=t,t=new Map),t.set(r,a)}}},di=(e=Jr)=>{const t=na(e);return{get(n){return t.get(n)},set(n,r){t.set(n,r)}}},fi=(e=ci)=>{let t=new Map,n=null,r=0;return{get(a,o){const s=t.get(a);if(s){const l=s.get(o);if(l!==void 0||s.has(o))return l}if(n){const l=n.get(a);if(l){const c=l.get(o);if(c!==void 0||l.has(o)){let u=t.get(a);return u||(u=new Map,t.set(a,u)),u.has(o)||r++,u.set(o,c),c}}}return Ie},set(a,o,s){r>=e&&(n=t,t=new Map,r=0);let l=t.get(a);l||(l=new Map,t.set(a,l)),l.has(o)||r++,l.set(o,s)}}},Mn=(e,t)=>{let n=null;return(r,a)=>{if(!ui(a))return r;const o=a.class,s=a.className;if(o!=null&&o!==""&&typeof o!="string"||s!=null&&s!==""&&typeof s!="string")return e(t,r,o,s);n??=fi();const l=r??"",c=(typeof o=="string"?o:"")+"\0"+(typeof s=="string"?s:""),u=n.get(l,c);if(u!==Ie)return u;const d=e(t,r,o,s);return n.set(l,c,d),d}};function mi(){let e=null,t={},n=!1;return{get cachedTwMerge(){return e},set cachedTwMerge(r){e=r},get cachedTwMergeConfig(){return t},set cachedTwMergeConfig(r){t=r},get didTwMergeConfigChange(){return n},set didTwMergeConfigChange(r){n=r},reset(){e=null,t={},n=!1}}}var te=mi(),bi=e=>{!se(e.twMergeConfig)&&!Xr(e.twMergeConfig,te.cachedTwMergeConfig)&&(te.didTwMergeConfigChange=!0,te.cachedTwMergeConfig=e.twMergeConfig)},pi=(e,t)=>{const n=[];for(let r=0;r{if(!Array.isArray(e)||e.length===0)return[];const t=[];for(let n=0;n{if(!Array.isArray(e)||e.length===0)return[];const t=[];for(let n=0;n{const t={};for(let n=0;n{const{extend:n=null,slots:r={},variants:a={},compoundVariants:o=[],compoundSlots:s=[],defaultVariants:l={}}=e,c={...li,...t},u=e.slots!==void 0,d=n?.base?et(n.base,e?.base):e?.base,f=n?.variants&&!se(n.variants)?Ln(a,n.variants):a,h=n?.defaultVariants&&!se(n.defaultVariants)?{...n.defaultVariants,...l}:l;bi(c);const g=!n?.slots||se(n.slots),v=u?g&&n?.base?et(e?.base,n.base):typeof e?.base=="string"||e?.base==null?e.base:et(e.base):void 0,w=u?{base:v,...r}:{},$=g?w:ii({...n?.slots},se(w)?{base:e?.base}:w),C=!n?.compoundVariants||se(n.compoundVariants)?o:bn(n?.compoundVariants,o),k=!n?.compoundSlots||se(n.compoundSlots)?s:bn(n?.compoundSlots,s),T=Object.keys(f),L=C&&!Array.isArray(C)?new TypeError(`The "compoundVariants" prop must be an array. Received: ${typeof C}`):k&&!Array.isArray(k)?new TypeError(`The "compoundSlots" prop must be an array. Received: ${typeof k}`):null,F=u||!g?"slots":T.length===0?"plain":"variants";return{config:c,extend:n,base:d,variants:f,defaultVariants:h,slots:$,compoundVariants:C,compoundSlots:k,compiledVariants:null,compiledCompoundVariants:null,compiledCompoundSlots:null,compiledCompoundSlotsBySlot:null,deferredError:L,mode:F,slotKeys:null,variantKeys:T}},ra=e=>(e.compiledVariants!==null||(e.compiledVariants=pi(e.variants,e.variantKeys),e.compiledCompoundVariants=hi(e.compoundVariants),e.compiledCompoundSlots=vi(e.compoundSlots),e.compiledCompoundSlotsBySlot=gi(e.compiledCompoundSlots),e.slotKeys=e.slots&&typeof e.slots=="object"?Object.keys(e.slots):[]),e),pn=[],aa=[],yi=[],xi=[],wi=[],oa=(e,t,n)=>{const r={};for(const a in e)r[a]=e[a];if(t)for(const a in t)t[a]!==void 0&&(r[a]=t[a]);if(n)for(const a in n)n[a]!==void 0&&(r[a]=n[a]);return r},dt=e=>e==null||e===!1,Ei=(e,t)=>{if(!Array.isArray(e))return e===t||dt(e)&&dt(t);for(let n=0;n{if(e.isEmpty)return null;const a=r?.[e.key]??n?.[e.key];if(a===null)return null;const o=mn(a);if(typeof o=="object")return null;const s=t?.[e.key],l=o??mn(s);return e.values[l||"false"]},An=(e,t)=>{const{conditionKeys:n,source:r}=e;for(let a=0;a{typeof n=="string"?t==="base"&&e.push(n):n&&typeof n=="object"&&n[t]&&e.push(n[t])},Ci=(e,t,n)=>{const r=aa;r.length=0;for(let a=0;a{const o=aa;o.length=0;for(let s=0;s{const n=yi;n.length=0;for(let r=0;r{const r=xi;r.length=0;for(let a=0;a{const n=wi;n.length=0;for(let r=0;r{const{base:n,config:r}=e;let a=Ie;const o=Mn(t,r);return(s=>(a===Ie&&(a=t(r,n)),o(a,s)))},Mi=(e,t)=>{const{base:n,config:r,defaultVariants:a,deferredError:o,variantKeys:s}=e;let l=e.compiledCompoundVariants,c=e.compiledVariants,u=pn,d=null;const f=Mn(t,r);let h=1;const g=v=>{const w=l.length>0?ki(l,oa(a,v)):void 0;return t(r,n,Ci(c,a,v),w)};return(v=>{if(o)throw o;(c===null||l===null)&&(ra(e),c=e.compiledVariants,l=e.compiledCompoundVariants,u=e.compiledCompoundSlots??pn);let w;if(h>0)h--,w=g(v);else{d??=di();const $=ea(s,a,v);if($!==null){const C=l.length>0||u.length>0?ta(l,u):"",k=$+"#"+C,T=d.get(k);T!==Ie?w=T:(w=g(v),d.set(k,w))}else w=g(v)}return f(w,v)})},Ai=(e,t)=>{const{config:n,defaultVariants:r,deferredError:a,slots:o,variantKeys:s}=e;let l=null,c=null,u=null,d=null,f=!1,h=null,g=null,v=1;const w=()=>{if(u!==null)return;(e.compiledVariants===null||e.compiledCompoundVariants===null||e.compiledCompoundSlots===null||e.compiledCompoundSlotsBySlot===null||e.slotKeys===null)&&ra(e);const C=e.compiledVariants;l=e.compiledCompoundVariants,c=e.compiledCompoundSlots;const k=e.compiledCompoundSlotsBySlot;u=e.slotKeys,f=l.length>0||c.length>0,h=Mn(t,n);const T=new Array(u.length);for(let L=0;L{const R=f?oa(r,V,x):void 0,M=R?Si(F,l,R):void 0,z=R?Pi(j,R):void 0;return t(n,o[F],Ti(F,C,r,V,x),M,z)}}d=T},$=C=>{const k=u,T=d,L=h,F={};for(let j=0;j{if(R==null)return x;let M=!1;for(const z in R)if(!(z==="class"||z==="className")&&R[z]!==void 0){M=!0;break}return L(M?V(C,R):x,R)}}return F};return(C=>{if(a)throw a;if(w(),v>0)return v--,$(C);const k=ea(s,r,C);if(k===null)return $(C);const T=f?ta(l,c):"",L=k+"#"+T;g??=na();const F=g.get(L);if(F!==Ie)return F;const j=$(C);return g.set(L,j),j})},Ii=(e,t)=>{if(e.mode==="plain")return Li(e,t);let n;return(r=>(n??=e.mode==="slots"?Ai(e,t):Mi(e,t),n(r)))},Ri=(e,t)=>{e.variantKeys=t.variantKeys,e.extend=t.extend,e.base=t.base,e.slots=t.slots,e.variants=t.variants,e.defaultVariants=t.defaultVariants,e.compoundSlots=t.compoundSlots,e.compoundVariants=t.compoundVariants},Vi=e=>{const t=(r,a)=>{const o=$i(r,a),s=Ii(o,e);return Ri(s,o),s};return{tv:t,createTV:r=>(a,o)=>t(a,o?Ln(r,o):r)}},Fi=(e,t)=>{const n=e.length,r=t.length,a=new Array(n+r);for(let o=0;o({classGroupId:e,validator:t}),ia=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),Pt="-",tr=[],Hi="arbitrary..",Di=e=>{const t=Oi(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:s=>{if(s[0]==="["&&s[s.length-1]==="]")return Ni(s);const l=s.split(Pt),c=l[0]===""&&l.length>1?1:0;return la(l,c,t)},getConflictingClassGroupIds:(s,l)=>{if(l){const c=r[s],u=n[s];return c?u?Fi(u,c):c:u||tr}return n[s]||tr}}},la=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;const a=e[t],o=n.nextPart.get(a);if(o){const u=la(e,t+1,o);if(u)return u}const s=n.validators;if(s===null)return;const l=t===0?e.join(Pt):e.slice(t).join(Pt),c=s.length;for(let u=0;u{const t=e.slice(1,-1),n=t.indexOf(":");if(n===-1)return;const r=t.slice(0,n);return r?Hi+r:void 0},Oi=e=>{const{theme:t,classGroups:n}=e;return _i(n,t)},_i=(e,t)=>{const n=ia();for(const r in e){const a=e[r];In(a,n,r,t)}return n},In=(e,t,n,r)=>{const a=e.length;for(let o=0;o{if(typeof e=="string"){zi(e,t,n);return}if(typeof e=="function"){Ki(e,t,n,r);return}Ui(e,t,n,r)},zi=(e,t,n)=>{const r=e===""?t:ca(t,e);r.classGroupId=n},Ki=(e,t,n,r)=>{if(Zi(e)){In(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(ji(n,e))},Ui=(e,t,n,r)=>{const a=Object.entries(e),o=a.length;for(let s=0;s{let n=e;const r=t.split(Pt),a=r.length;for(let o=0;o"isThemeGetter"in e&&e.isThemeGetter===!0,Gi="!",Wi=58,qi=47,Yi=91,Xi=93,Qi=40,Ji=41,nr=33,el=(e,t,n,r)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:void 0}),rr=e=>{const t=[];let n=0,r=0,a=0,o;const s=e.length;for(let h=0;ha?o-a:void 0;return el(t,u,c,f)},tl=e=>{const t=new Set(e.orderSensitiveModifiers);return n=>{const r=[];let a=[];for(let o=0;o0){a.sort();for(let u=0;u0){a.sort();for(let o=0;o{const t=tl(e),n=ol(e),{getClassGroupId:r,getConflictingClassGroupIds:a}=Di(e);let o=Object.create(null),s=Object.create(null),l=0,c=new Int32Array(256),u=0,d=new Uint8Array(64),f=!1;const h=T=>{const L=[],F=T.length;let j=-1;f=!1;for(let V=0;V=9&&x<=13?(f=!0,j!==-1&&(L.push(T.slice(j,V)),j=-1)):j===-1&&(j=V)}return j!==-1&&L.push(T.slice(j)),L},g=new Map;let v=0;const w=T=>{let L=g.get(T);if(L===void 0&&(L=v++,g.set(T,L),L>=c.length)){const F=new Int32Array(c.length*2);F.set(c),c=F}return L},$=T=>{const{isExternal:L,modifiers:F,hasImportantModifier:j,baseClassName:V,maybePostfixModifierPosition:x}=rr(T);if(L)return Yt;let R=!!x,M;if(R){const A=V.substring(0,x);M=r(A);const H=M&&n[M]?r(V):void 0;H&&H!==M&&(M=H,R=!1)}else M=r(V);if(!M){if(!R||(M=r(V),!M))return Yt;R=!1}const z=F.length===0?"":F.length===1?F[0]:t(F).join(":"),Z=j?z+Gi:z,Q=a(M,R),p=[];for(let A=0;A{let L=o[T];return L!==void 0||(L=s[T],L===void 0&&(L=$(T)),o[T]=L,++l>nl&&(l=0,s=o,o=Object.create(null))),L};return{parseClassName:rr,sortModifiers:t,postfixLookupClassGroupIds:n,getClassGroupId:r,getConflictingClassGroupIds:a,getClassDescriptor:C,mergeClassList:T=>{const L=h(T),F=L.length;if(F===1)return L[0];v>rl&&(g.clear(),v=0,o=Object.create(null),s=Object.create(null),l=0),u=u+1|0,u===0&&(u=1);const j=u;if(F>d.length){let M=d.length;for(;M=0;M-=1){const z=L[M];x+=z.length;const Z=C(z);if(Z.isExternal){d[M]=1;continue}const Q=Z.classId;if(c[Q]===j){d[M]=0,V=!0;continue}c[Q]=j;const p=Z.conflictIds;for(let A=0;A{const t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let r=0;r{let t,n,r=Object.create(null),a=Object.create(null),o=0;const s=u=>(t=al(e()),n=t.mergeClassList,c.mergeString=l,l(u)),l=u=>{let d=r[u];return d!==void 0||(d=a[u],d===void 0&&(d=n(u)),r[u]=d,++o>sl&&(o=0,a=r,r=Object.create(null))),d},c=(...u)=>c.mergeString(zt(u));return c.mergeString=s,c},il=[],Y=e=>{const t=n=>n[e]||il;return t.isThemeGetter=!0,t},ua=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,da=/^\((?:(\w[\w-]*):)?(.+)\)$/i,ll=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,cl=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,ul=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,dl=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,fl=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,ml=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,fa=Number,bl=Number.isNaN,pl=Number.isInteger,ye=e=>ll.test(e),N=e=>!!e&&!bl(fa(e)),de=e=>!!e&&pl(fa(e)),Xt=e=>e.endsWith("%")&&N(e.slice(0,-1)),be=e=>cl.test(e),ma=()=>!0,hl=e=>ul.test(e)&&!dl.test(e),Rn=()=>!1,vl=e=>fl.test(e),gl=e=>ml.test(e),$l=e=>!S(e)&&!P(e),yl=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),xl=e=>Te(e,ha,Rn),S=e=>ua.test(e),Pe=e=>Te(e,va,hl),or=e=>Te(e,Ll,N),wl=e=>Te(e,$a,ma),El=e=>Te(e,ga,Rn),sr=e=>Te(e,ba,Rn),Cl=e=>Te(e,pa,gl),ft=e=>Te(e,ya,vl),P=e=>da.test(e),Xe=e=>Ve(e,va),Tl=e=>Ve(e,ga),ir=e=>Ve(e,ba),kl=e=>Ve(e,ha),Sl=e=>Ve(e,pa),mt=e=>Ve(e,ya,!0),Pl=e=>Ve(e,$a,!0),Te=(e,t,n)=>{const r=ua.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},Ve=(e,t,n=!1)=>{const r=da.exec(e);return r?r[1]?t(r[1]):n:!1},ba=e=>e==="position"||e==="percentage",pa=e=>e==="image"||e==="url",ha=e=>e==="length"||e==="size"||e==="bg-size",va=e=>e==="length",Ll=e=>e==="number",ga=e=>e==="family-name",$a=e=>e==="number"||e==="weight",ya=e=>e==="shadow",Qt=()=>{const e=Y("color"),t=Y("font"),n=Y("text"),r=Y("font-weight"),a=Y("tracking"),o=Y("leading"),s=Y("breakpoint"),l=Y("container"),c=Y("spacing"),u=Y("radius"),d=Y("shadow"),f=Y("inset-shadow"),h=Y("text-shadow"),g=Y("drop-shadow"),v=Y("blur"),w=Y("perspective"),$=Y("aspect"),C=Y("ease"),k=Y("animate"),T=()=>["auto","avoid","all","avoid-page","page","left","right","column"],L=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],F=()=>[...L(),P,S],j=()=>["auto","hidden","clip","visible","scroll"],V=()=>["auto","contain","none"],x=()=>[P,S,c],R=()=>[ye,"full","auto",...x()],M=()=>[de,"none","subgrid",P,S],z=()=>["auto",{span:["full",de,P,S]},de,P,S],Z=()=>[de,"auto",P,S],Q=()=>["auto","min","max","fr",P,S],p=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],A=()=>["start","end","center","stretch","center-safe","end-safe"],H=()=>["auto",...x()],E=()=>[ye,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...x()],K=()=>[ye,"screen","full","dvw","lvw","svw","min","max","fit",...x()],b=()=>[ye,"screen","full","lh","dvh","lvh","svh","min","max","fit",...x()],y=()=>[e,P,S],O=()=>[...L(),ir,sr,{position:[P,S]}],B=()=>["no-repeat",{repeat:["","x","y","space","round"]}],ne=()=>["auto","cover","contain",kl,xl,{size:[P,S]}],oe=()=>[Xt,Xe,Pe],U=()=>["","none","full",u,P,S],W=()=>["",N,Xe,Pe],Se=()=>["solid","dashed","dotted","double"],qe=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],_=()=>[N,Xt,ir,sr],je=()=>["","none",v,P,S],He=()=>["none",N,P,S],De=()=>["none",N,P,S],me=()=>[N,P,S],lt=()=>[ye,"full",...x()];return{theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[be],breakpoint:[be],color:[ma],container:[be],"drop-shadow":[be],ease:["in","out","in-out"],font:[$l],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[be],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[be],shadow:[be],spacing:["px",N],text:[be],"text-shadow":[be],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",ye,S,P,$]}],container:["container"],"container-type":[{"@container":["","normal","size",P,S]}],"container-named":[yl],columns:[{columns:[N,S,P,l]}],"break-after":[{"break-after":T()}],"break-before":[{"break-before":T()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:F()}],overflow:[{overflow:j()}],"overflow-x":[{"overflow-x":j()}],"overflow-y":[{"overflow-y":j()}],overscroll:[{overscroll:V()}],"overscroll-x":[{"overscroll-x":V()}],"overscroll-y":[{"overscroll-y":V()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:R()}],"inset-x":[{"inset-x":R()}],"inset-y":[{"inset-y":R()}],start:[{"inset-s":R(),start:R()}],end:[{"inset-e":R(),end:R()}],"inset-bs":[{"inset-bs":R()}],"inset-be":[{"inset-be":R()}],top:[{top:R()}],right:[{right:R()}],bottom:[{bottom:R()}],left:[{left:R()}],visibility:["visible","invisible","collapse"],z:[{z:[de,"auto",P,S]}],basis:[{basis:[ye,"full","auto",l,...x()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[N,ye,"auto","initial","none",S]}],grow:[{grow:["",N,P,S]}],shrink:[{shrink:["",N,P,S]}],order:[{order:[de,"first","last","none",P,S]}],"grid-cols":[{"grid-cols":M()}],"col-start-end":[{col:z()}],"col-start":[{"col-start":Z()}],"col-end":[{"col-end":Z()}],"grid-rows":[{"grid-rows":M()}],"row-start-end":[{row:z()}],"row-start":[{"row-start":Z()}],"row-end":[{"row-end":Z()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":Q()}],"auto-rows":[{"auto-rows":Q()}],gap:[{gap:x()}],"gap-x":[{"gap-x":x()}],"gap-y":[{"gap-y":x()}],"justify-content":[{justify:[...p(),"normal"]}],"justify-items":[{"justify-items":[...A(),"normal"]}],"justify-self":[{"justify-self":["auto",...A()]}],"align-content":[{content:["normal",...p()]}],"align-items":[{items:[...A(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...A(),{baseline:["","last"]}]}],"place-content":[{"place-content":p()}],"place-items":[{"place-items":[...A(),"baseline"]}],"place-self":[{"place-self":["auto",...A()]}],p:[{p:x()}],px:[{px:x()}],py:[{py:x()}],ps:[{ps:x()}],pe:[{pe:x()}],pbs:[{pbs:x()}],pbe:[{pbe:x()}],pt:[{pt:x()}],pr:[{pr:x()}],pb:[{pb:x()}],pl:[{pl:x()}],m:[{m:H()}],mx:[{mx:H()}],my:[{my:H()}],ms:[{ms:H()}],me:[{me:H()}],mbs:[{mbs:H()}],mbe:[{mbe:H()}],mt:[{mt:H()}],mr:[{mr:H()}],mb:[{mb:H()}],ml:[{ml:H()}],"space-x":[{"space-x":x()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":x()}],"space-y-reverse":["space-y-reverse"],size:[{size:E()}],"inline-size":[{inline:["auto",...K()]}],"min-inline-size":[{"min-inline":["auto",...K()]}],"max-inline-size":[{"max-inline":["none",...K()]}],"block-size":[{block:["auto",...b()]}],"min-block-size":[{"min-block":["auto",...b()]}],"max-block-size":[{"max-block":["none",...b()]}],w:[{w:[l,"screen",...E()]}],"min-w":[{"min-w":[l,"screen","none",...E()]}],"max-w":[{"max-w":[l,"screen","none","prose",{screen:[s]},...E()]}],h:[{h:["screen","lh",...E()]}],"min-h":[{"min-h":["screen","lh","none",...E()]}],"max-h":[{"max-h":["screen","lh",...E()]}],"font-size":[{text:["base",n,Xe,Pe]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,Pl,wl]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Xt,S]}],"font-family":[{font:[Tl,El,t]}],"font-features":[{"font-features":[S]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[a,P,S]}],"line-clamp":[{"line-clamp":[N,"none",P,or]}],leading:[{leading:[o,...x()]}],"list-image":[{"list-image":["none",P,S]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",P,S]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:y()}],"text-color":[{text:y()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Se(),"wavy"]}],"text-decoration-thickness":[{decoration:[N,"from-font","auto",P,Pe]}],"text-decoration-color":[{decoration:y()}],"underline-offset":[{"underline-offset":[N,"auto",P,S]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:x()}],"tab-size":[{tab:[de,P,S]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",P,S]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",P,S]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:O()}],"bg-repeat":[{bg:B()}],"bg-size":[{bg:ne()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},de,P,S],radial:["",P,S],conic:[de,P,S]},Sl,Cl]}],"bg-color":[{bg:y()}],"gradient-from-pos":[{from:oe()}],"gradient-via-pos":[{via:oe()}],"gradient-to-pos":[{to:oe()}],"gradient-from":[{from:y()}],"gradient-via":[{via:y()}],"gradient-to":[{to:y()}],rounded:[{rounded:U()}],"rounded-s":[{"rounded-s":U()}],"rounded-e":[{"rounded-e":U()}],"rounded-t":[{"rounded-t":U()}],"rounded-r":[{"rounded-r":U()}],"rounded-b":[{"rounded-b":U()}],"rounded-l":[{"rounded-l":U()}],"rounded-ss":[{"rounded-ss":U()}],"rounded-se":[{"rounded-se":U()}],"rounded-ee":[{"rounded-ee":U()}],"rounded-es":[{"rounded-es":U()}],"rounded-tl":[{"rounded-tl":U()}],"rounded-tr":[{"rounded-tr":U()}],"rounded-br":[{"rounded-br":U()}],"rounded-bl":[{"rounded-bl":U()}],"border-w":[{border:W()}],"border-w-x":[{"border-x":W()}],"border-w-y":[{"border-y":W()}],"border-w-s":[{"border-s":W()}],"border-w-e":[{"border-e":W()}],"border-w-bs":[{"border-bs":W()}],"border-w-be":[{"border-be":W()}],"border-w-t":[{"border-t":W()}],"border-w-r":[{"border-r":W()}],"border-w-b":[{"border-b":W()}],"border-w-l":[{"border-l":W()}],"divide-x":[{"divide-x":W()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":W()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...Se(),"hidden","none"]}],"divide-style":[{divide:[...Se(),"hidden","none"]}],"border-color":[{border:y()}],"border-color-x":[{"border-x":y()}],"border-color-y":[{"border-y":y()}],"border-color-s":[{"border-s":y()}],"border-color-e":[{"border-e":y()}],"border-color-bs":[{"border-bs":y()}],"border-color-be":[{"border-be":y()}],"border-color-t":[{"border-t":y()}],"border-color-r":[{"border-r":y()}],"border-color-b":[{"border-b":y()}],"border-color-l":[{"border-l":y()}],"divide-color":[{divide:y()}],"outline-style":[{outline:[...Se(),"none","hidden"]}],"outline-offset":[{"outline-offset":[N,P,S]}],"outline-w":[{outline:["",N,Xe,Pe]}],"outline-color":[{outline:y()}],shadow:[{shadow:["","none",d,mt,ft]}],"shadow-color":[{shadow:y()}],"inset-shadow":[{"inset-shadow":["none",f,mt,ft]}],"inset-shadow-color":[{"inset-shadow":y()}],"ring-w":[{ring:W()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:y()}],"ring-offset-w":[{"ring-offset":[N,Pe]}],"ring-offset-color":[{"ring-offset":y()}],"inset-ring-w":[{"inset-ring":W()}],"inset-ring-color":[{"inset-ring":y()}],"text-shadow":[{"text-shadow":["none",h,mt,ft]}],"text-shadow-color":[{"text-shadow":y()}],opacity:[{opacity:[N,P,S]}],"mix-blend":[{"mix-blend":[...qe(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":qe()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[N]}],"mask-image-linear-from-pos":[{"mask-linear-from":_()}],"mask-image-linear-to-pos":[{"mask-linear-to":_()}],"mask-image-linear-from-color":[{"mask-linear-from":y()}],"mask-image-linear-to-color":[{"mask-linear-to":y()}],"mask-image-t-from-pos":[{"mask-t-from":_()}],"mask-image-t-to-pos":[{"mask-t-to":_()}],"mask-image-t-from-color":[{"mask-t-from":y()}],"mask-image-t-to-color":[{"mask-t-to":y()}],"mask-image-r-from-pos":[{"mask-r-from":_()}],"mask-image-r-to-pos":[{"mask-r-to":_()}],"mask-image-r-from-color":[{"mask-r-from":y()}],"mask-image-r-to-color":[{"mask-r-to":y()}],"mask-image-b-from-pos":[{"mask-b-from":_()}],"mask-image-b-to-pos":[{"mask-b-to":_()}],"mask-image-b-from-color":[{"mask-b-from":y()}],"mask-image-b-to-color":[{"mask-b-to":y()}],"mask-image-l-from-pos":[{"mask-l-from":_()}],"mask-image-l-to-pos":[{"mask-l-to":_()}],"mask-image-l-from-color":[{"mask-l-from":y()}],"mask-image-l-to-color":[{"mask-l-to":y()}],"mask-image-x-from-pos":[{"mask-x-from":_()}],"mask-image-x-to-pos":[{"mask-x-to":_()}],"mask-image-x-from-color":[{"mask-x-from":y()}],"mask-image-x-to-color":[{"mask-x-to":y()}],"mask-image-y-from-pos":[{"mask-y-from":_()}],"mask-image-y-to-pos":[{"mask-y-to":_()}],"mask-image-y-from-color":[{"mask-y-from":y()}],"mask-image-y-to-color":[{"mask-y-to":y()}],"mask-image-radial":[{"mask-radial":[P,S]}],"mask-image-radial-from-pos":[{"mask-radial-from":_()}],"mask-image-radial-to-pos":[{"mask-radial-to":_()}],"mask-image-radial-from-color":[{"mask-radial-from":y()}],"mask-image-radial-to-color":[{"mask-radial-to":y()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":L()}],"mask-image-conic-pos":[{"mask-conic":[N]}],"mask-image-conic-from-pos":[{"mask-conic-from":_()}],"mask-image-conic-to-pos":[{"mask-conic-to":_()}],"mask-image-conic-from-color":[{"mask-conic-from":y()}],"mask-image-conic-to-color":[{"mask-conic-to":y()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:O()}],"mask-repeat":[{mask:B()}],"mask-size":[{mask:ne()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",P,S]}],filter:[{filter:["","none",P,S]}],blur:[{blur:je()}],brightness:[{brightness:[N,P,S]}],contrast:[{contrast:[N,P,S]}],"drop-shadow":[{"drop-shadow":["","none",g,mt,ft]}],"drop-shadow-color":[{"drop-shadow":y()}],grayscale:[{grayscale:["",N,P,S]}],"hue-rotate":[{"hue-rotate":[N,P,S]}],invert:[{invert:["",N,P,S]}],saturate:[{saturate:[N,P,S]}],sepia:[{sepia:["",N,P,S]}],"backdrop-filter":[{"backdrop-filter":["","none",P,S]}],"backdrop-blur":[{"backdrop-blur":je()}],"backdrop-brightness":[{"backdrop-brightness":[N,P,S]}],"backdrop-contrast":[{"backdrop-contrast":[N,P,S]}],"backdrop-grayscale":[{"backdrop-grayscale":["",N,P,S]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[N,P,S]}],"backdrop-invert":[{"backdrop-invert":["",N,P,S]}],"backdrop-opacity":[{"backdrop-opacity":[N,P,S]}],"backdrop-saturate":[{"backdrop-saturate":[N,P,S]}],"backdrop-sepia":[{"backdrop-sepia":["",N,P,S]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":x()}],"border-spacing-x":[{"border-spacing-x":x()}],"border-spacing-y":[{"border-spacing-y":x()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",P,S]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[N,"initial",P,S]}],ease:[{ease:["linear","initial",C,P,S]}],delay:[{delay:[N,P,S]}],animate:[{animate:["none",k,P,S]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[w,P,S]}],"perspective-origin":[{"perspective-origin":F()}],rotate:[{rotate:He()}],"rotate-x":[{"rotate-x":He()}],"rotate-y":[{"rotate-y":He()}],"rotate-z":[{"rotate-z":He()}],scale:[{scale:De()}],"scale-x":[{"scale-x":De()}],"scale-y":[{"scale-y":De()}],"scale-z":[{"scale-z":De()}],"scale-3d":["scale-3d"],skew:[{skew:me()}],"skew-x":[{"skew-x":me()}],"skew-y":[{"skew-y":me()}],transform:[{transform:[P,S,"","none","gpu","cpu"]}],"transform-origin":[{origin:F()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:lt()}],"translate-x":[{"translate-x":lt()}],"translate-y":[{"translate-y":lt()}],"translate-z":[{"translate-z":lt()}],"translate-none":["translate-none"],zoom:[{zoom:[de,P,S]}],accent:[{accent:y()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:y()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",P,S]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":y()}],"scrollbar-track-color":[{"scrollbar-track":y()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":x()}],"scroll-mx":[{"scroll-mx":x()}],"scroll-my":[{"scroll-my":x()}],"scroll-ms":[{"scroll-ms":x()}],"scroll-me":[{"scroll-me":x()}],"scroll-mbs":[{"scroll-mbs":x()}],"scroll-mbe":[{"scroll-mbe":x()}],"scroll-mt":[{"scroll-mt":x()}],"scroll-mr":[{"scroll-mr":x()}],"scroll-mb":[{"scroll-mb":x()}],"scroll-ml":[{"scroll-ml":x()}],"scroll-p":[{"scroll-p":x()}],"scroll-px":[{"scroll-px":x()}],"scroll-py":[{"scroll-py":x()}],"scroll-ps":[{"scroll-ps":x()}],"scroll-pe":[{"scroll-pe":x()}],"scroll-pbs":[{"scroll-pbs":x()}],"scroll-pbe":[{"scroll-pbe":x()}],"scroll-pt":[{"scroll-pt":x()}],"scroll-pr":[{"scroll-pr":x()}],"scroll-pb":[{"scroll-pb":x()}],"scroll-pl":[{"scroll-pl":x()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",P,S]}],fill:[{fill:["none",...y()]}],"stroke-w":[{stroke:[N,Xe,Pe,or]}],stroke:[{stroke:["none",...y()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},Ml=(e,{extend:t={},override:n={}})=>(bt(e.theme,n.theme),bt(e.classGroups,n.classGroups),bt(e.conflictingClassGroups,n.conflictingClassGroups),bt(e.conflictingClassGroupModifiers,n.conflictingClassGroupModifiers),hn(e,"postfixLookupClassGroups",n.postfixLookupClassGroups),hn(e,"orderSensitiveModifiers",n.orderSensitiveModifiers),pt(e.theme,t.theme),pt(e.classGroups,t.classGroups),pt(e.conflictingClassGroups,t.conflictingClassGroups),pt(e.conflictingClassGroupModifiers,t.conflictingClassGroupModifiers),vn(e,t,"postfixLookupClassGroups"),vn(e,t,"orderSensitiveModifiers"),e),hn=(e,t,n)=>{n!==void 0&&(e[t]=n)},bt=(e,t)=>{if(t)for(const n in t)hn(e,n,t[n])},pt=(e,t)=>{if(t)for(const n in t)vn(e,t,n)},vn=(e,t,n)=>{const r=t[n];r!==void 0&&(e[n]=e[n]?e[n].concat(r):r)},xa=e=>ar(e?typeof e=="function"?()=>e(Qt()):()=>Ml(Qt(),e):Qt),Al=e=>{if(se(e))return;const t=e,n={...t.extend??{}};for(const a of["theme","classGroups","conflictingClassGroups","conflictingClassGroupModifiers","postfixLookupClassGroups","orderSensitiveModifiers","cacheSize","prefix","separator","experimentalParseClassName"])t[a]!==void 0&&n[a]===void 0&&(n[a]=t[a]);const r={};if(Object.keys(n).length>0&&(r.extend=n),t.override!=null&&!se(t.override)&&(r.override=t.override),!(!r.extend&&!r.override))return r},Il=e=>{const t=Al(e),n=xa(t);return r=>n.mergeString(r)},xt,Rl=()=>(xt||(xt=xa()),xt),Vl=()=>((!te.cachedTwMerge||te.didTwMergeConfigChange)&&(te.didTwMergeConfigChange=!1,te.cachedTwMerge=Il(te.cachedTwMergeConfig)),te.cachedTwMerge),Fl=e=>{const t=e?.twMergeConfig;!t||se(t)||Xr(t,te.cachedTwMergeConfig)||(te.cachedTwMergeConfig=t,te.didTwMergeConfigChange=!0)},jl=e=>zt(e),Hl=te.reset.bind(te);te.reset=()=>{xt=void 0,Hl()};var Dl=(e,t)=>{const n=jl(e);return!n||!(t?.twMerge??!0)?n||void 0:n.indexOf(" ")===-1?n:(Fl(t),(!!(t?.twMergeConfig&&!se(t.twMergeConfig))?Vl():Rl().mergeString)(n)||void 0)},Nl=(e,...t)=>Dl(t,e),Ol=Vi(Nl),ie=Ol.tv,_l=et;const Bl=ie({defaultVariants:{status:"default"},slots:{base:"alert",content:"alert__content",description:"alert__description",indicator:"alert__indicator",title:"alert__title"},variants:{status:{accent:{base:"alert--accent"},danger:{base:"alert--danger"},default:{base:"alert--default"},success:{base:"alert--success"},warning:{base:"alert--warning"}}}}),zl=ie({base:"button",defaultVariants:{fullWidth:!1,isIconOnly:!1,size:"md",variant:"primary"},variants:{fullWidth:{false:"",true:"button--full-width"},isIconOnly:{true:"button--icon-only"},size:{lg:"button--lg",md:"button--md",sm:"button--sm"},variant:{danger:"button--danger","danger-soft":"button--danger-soft",ghost:"button--ghost",outline:"button--outline",primary:"button--primary",secondary:"button--secondary",tertiary:"button--tertiary"}}}),Kl=ie({defaultVariants:{variant:"default"},slots:{base:"card",content:"card__content",description:"card__description",footer:"card__footer",header:"card__header",title:"card__title"},variants:{variant:{default:{base:"card--default"},secondary:{base:"card--secondary"},tertiary:{base:"card--tertiary"},transparent:{base:"card--transparent"}}}}),Ul=ie({defaultVariants:{color:"default",variant:"secondary"},slots:{base:"chip",label:"chip__label"},variants:{color:{accent:{base:"chip--accent"},danger:{base:"chip--danger"},default:{base:"chip--default"},success:{base:"chip--success"},warning:{base:"chip--warning"}},size:{lg:{base:"chip--lg"},md:{base:"chip--md"},sm:{base:"chip--sm"}},variant:{primary:{base:"chip--primary"},secondary:{base:"chip--secondary"},soft:{base:"chip--soft"},tertiary:{base:"chip--tertiary"}}}}),Zl=ie({base:"close-button",defaultVariants:{variant:"default"},variants:{variant:{default:"close-button--default"}}}),Gl=ie({base:"input",defaultVariants:{fullWidth:!1,variant:"primary"},variants:{fullWidth:{false:"",true:"input--full-width"},variant:{primary:"input--primary",secondary:"input--secondary"}}}),Wl=ie({base:"label",defaultVariants:{isDisabled:!1,isInvalid:!1,isRequired:!1},variants:{isDisabled:{true:"label--disabled"},isInvalid:{true:"label--invalid"},isRequired:{true:"label--required"}}}),ql=ie({slots:{base:"link",icon:"link__icon"}}),Yl=ie({defaultVariants:{animationType:"shimmer"},slots:{base:"skeleton"},variants:{animationType:{none:"skeleton--none",pulse:"skeleton--pulse",shimmer:"skeleton--shimmer"}}}),Xl=ie({base:"spinner",defaultVariants:{color:"accent",size:"md"},variants:{color:{accent:"spinner--accent",current:"spinner--current",danger:"spinner--danger",success:"spinner--success",warning:"spinner--warning"},size:{lg:"spinner--lg",md:"spinner--md",sm:"spinner--sm",xl:"spinner--xl"}}}),Ql=ie({base:"textfield",defaultVariants:{fullWidth:!1},variants:{fullWidth:{false:"",true:"textfield--full-width"}}}),Jl=ie({defaultVariants:{placement:"bottom",variant:"default"},slots:{action:"toast__action",close:"toast__close-button",content:"toast__content",description:"toast__description",indicator:"toast__indicator",region:"toast-region",title:"toast__title",toast:"toast"},variants:{placement:{bottom:{region:"toast-region--bottom",toast:"toast--bottom"},"bottom end":{region:"toast-region--bottom-end",toast:"toast--bottom-end"},"bottom start":{region:"toast-region--bottom-start",toast:"toast--bottom-start"},top:{region:"toast-region--top",toast:"toast--top"},"top end":{region:"toast-region--top-end",toast:"toast--top-end"},"top start":{region:"toast-region--top-start",toast:"toast--top-start"}},variant:{accent:{toast:"toast--accent"},danger:{toast:"toast--danger"},default:{toast:"toast--default"},success:{toast:"toast--success"},warning:{toast:"toast--warning"}}}}),gn=Symbol("default");function wa({values:e,children:t}){for(let[n,r]of e)t=I.createElement(n.Provider,{value:r},t);return t}function ge(e){let{className:t,style:n,children:r,defaultClassName:a,defaultChildren:o,defaultStyle:s,values:l,render:c}=e;return i.useMemo(()=>{let u,d,f;return typeof t=="function"?u=t({...l,defaultClassName:a}):u=t,typeof n=="function"?d=n({...l,defaultStyle:s||{}}):d=n,typeof r=="function"?f=r({...l,defaultChildren:o}):r==null?f=o:f=r,{className:u??a,style:d||s?{...s,...d}:void 0,children:f??o,"data-rac":"",render:c?h=>c(h,l):void 0}},[t,n,r,a,o,s,l,c])}function Vn(e,t){return n=>t(typeof e=="function"?e(n):e,n)}function Ea(e,t){let n=i.useContext(e);if(t===null)return null;if(n&&typeof n=="object"&&"slots"in n&&n.slots){let r=t||gn;if(!n.slots[r]){let a=new Intl.ListFormat().format(Object.keys(n.slots).map(s=>`"${s}"`)),o=t?`Invalid slot "${t}".`:"A slot prop is required.";throw new Error(`${o} Valid slot names are ${a}.`)}return n.slots[r]}return n}function fe(e,t,n){let r=Ea(n,e.slot)||{},{ref:a,...o}=r,s=Bt(i.useMemo(()=>ot(t,a),[t,a])),l=q(o,e);return"style"in o&&o.style&&"style"in e&&e.style&&(typeof o.style=="function"||typeof e.style=="function"?l.style=c=>{let u=typeof o.style=="function"?o.style(c):o.style,d={...c.defaultStyle,...u},f=typeof e.style=="function"?e.style({...c,defaultStyle:d}):e.style;return{...d,...f}}:l.style={...o.style,...e.style}),[l,s]}function Ca(e=!0){let[t,n]=i.useState(e),r=i.useRef(!1),a=i.useCallback(o=>{r.current=!0,n(!!o)},[]);return ae(()=>{r.current||n(!1)},[]),[a,t]}function ec(e){const t=/^(data-.*)$/;let n={};for(const r in e)t.test(r)||(n[r]=e[r]);return n}function tc(e,t,n){let{render:r,...a}=t,o=i.useRef(null),s=i.useMemo(()=>ot(n,o),[n,o]);ae(()=>{},[e,r]);let l={...a,ref:s};return r?r(l,void 0):I.createElement(e,l)}const lr={},le=new Proxy({},{get(e,t){if(typeof t!="string")return;let n=lr[t];return n||(n=i.forwardRef(tc.bind(null,t)),lr[t]=n),n}});typeof HTMLTemplateElement<"u"&&(Object.defineProperty(HTMLTemplateElement.prototype,"firstChild",{configurable:!0,enumerable:!0,get:function(){return this.content.firstChild}}),Object.defineProperty(HTMLTemplateElement.prototype,"appendChild",{configurable:!0,enumerable:!0,value:function(e){return this.content.appendChild(e)}}),Object.defineProperty(HTMLTemplateElement.prototype,"removeChild",{configurable:!0,enumerable:!0,value:function(e){return this.content.removeChild(e)}}),Object.defineProperty(HTMLTemplateElement.prototype,"insertBefore",{configurable:!0,enumerable:!0,value:function(e,t){return this.content.insertBefore(e,t)}}));const Lt=i.createContext(!1);function Kd(e){if(i.useContext(Lt))return I.createElement(I.Fragment,null,e.children);let n=I.createElement(Lt.Provider,{value:!0},e.children);return I.createElement("template",null,n)}function st(e){let t=(n,r)=>i.useContext(Lt)?null:e(n,r);return t.displayName=e.displayName||e.name,i.forwardRef(t)}function Ud(){return i.useContext(Lt)}const Fn=i.createContext({}),nc=st(function(t,n){[t,n]=fe(t,n,Fn);let{elementType:r="label",...a}=t,o=le[r];return I.createElement(o,{className:"react-aria-Label",...a,ref:n})});function Ta(e){let{id:t,label:n,"aria-labelledby":r,"aria-label":a,labelElementType:o="label"}=e;t=Ae(t);let s=Ae(),l={};n&&(r=r?`${s} ${r}`:s,l={id:s,htmlFor:o==="label"?t:void 0});let c=Ks({id:t,"aria-label":a,"aria-labelledby":r});return{labelProps:l,fieldProps:c}}const rc=new Set(["Arab","Syrc","Samr","Mand","Thaa","Mend","Nkoo","Adlm","Rohg","Hebr"]),ac=new Set(["ae","ar","arc","bcc","bqi","ckb","dv","fa","glk","he","ku","mzn","nqo","pnb","ps","sd","ug","ur","yi"]);function oc(e){if(Intl.Locale){let n=new Intl.Locale(e).maximize(),r=typeof n.getTextInfo=="function"?n.getTextInfo():n.textInfo;if(r)return r.direction==="rtl";if(n.script)return rc.has(n.script)}let t=e.split("-")[0];return ac.has(t)}const ka=Symbol.for("react-aria.i18n.locale");function Sa(){let e=typeof window<"u"&&window[ka]||typeof navigator<"u"&&(navigator.language||navigator.userLanguage)||"en-US";try{Intl.DateTimeFormat.supportedLocalesOf([e])}catch{e="en-US"}return{locale:e,direction:oc(e)?"rtl":"ltr"}}let $n=Sa(),Je=new Set;function cr(){$n=Sa();for(let e of Je)e($n)}function sc(){let e=at(),[t,n]=i.useState($n);return i.useEffect(()=>(Je.size===0&&window.addEventListener("languagechange",cr),Je.add(n),()=>{Je.delete(n),Je.size===0&&window.removeEventListener("languagechange",cr)}),[]),e?{locale:typeof window<"u"&&window[ka]||"en-US",direction:"ltr"}:t}const ic=I.createContext(null);function jn(){let e=sc();return i.useContext(ic)||e}let Jt=new Map,yn=!1;try{yn=new Intl.NumberFormat("de-DE",{signDisplay:"exceptZero"}).resolvedOptions().signDisplay==="exceptZero"}catch{}let Mt=!1;try{Mt=new Intl.NumberFormat("de-DE",{style:"unit",unit:"degree"}).resolvedOptions().style==="unit"}catch{}const Pa={degree:{narrow:{default:"°","ja-JP":" 度","zh-TW":"度","sl-SI":" °"}}};class lc{constructor(t,n={}){this.numberFormatter=cc(t,n),this.options=n}format(t){let n="";if(!yn&&this.options.signDisplay!=null?n=uc(this.numberFormatter,this.options.signDisplay,t):n=this.numberFormatter.format(t),this.options.style==="unit"&&!Mt){let{unit:r,unitDisplay:a="short",locale:o}=this.resolvedOptions();if(!r)return n;let s=Pa[r]?.[a];n+=s[o]||s.default}return n}formatToParts(t){return this.numberFormatter.formatToParts(t)}formatRange(t,n){if(typeof this.numberFormatter.formatRange=="function")return this.numberFormatter.formatRange(t,n);if(n= start date");return`${this.format(t)} – ${this.format(n)}`}formatRangeToParts(t,n){if(typeof this.numberFormatter.formatRangeToParts=="function")return this.numberFormatter.formatRangeToParts(t,n);if(n= start date");let r=this.numberFormatter.formatToParts(t),a=this.numberFormatter.formatToParts(n);return[...r.map(o=>({...o,source:"startRange"})),{type:"literal",value:" – ",source:"shared"},...a.map(o=>({...o,source:"endRange"}))]}resolvedOptions(){let t=this.numberFormatter.resolvedOptions();return!yn&&this.options.signDisplay!=null&&(t={...t,signDisplay:this.options.signDisplay}),!Mt&&this.options.style==="unit"&&(t={...t,style:"unit",unit:this.options.unit,unitDisplay:this.options.unitDisplay}),t}}function cc(e,t={}){let{numberingSystem:n}=t;if(n&&e.includes("-nu-")&&(e.includes("-u-")||(e+="-u-"),e+=`-nu-${n}`),t.style==="unit"&&!Mt){let{unit:o,unitDisplay:s="short"}=t;if(!o)throw new Error('unit option must be provided with style: "unit"');if(!Pa[o]?.[s])throw new Error(`Unsupported unit ${o} with unitDisplay = ${s}`);t={...t,style:"decimal"}}let r=e+(t?Object.entries(t).sort((o,s)=>o[0]0||Object.is(n,0):t==="exceptZero"&&(Object.is(n,-0)||Object.is(n,0)?n=Math.abs(n):r=n>0),r){let a=e.format(-n),o=e.format(n),s=a.replace(o,"").replace(/\u200e|\u061C/,"");return[...s].length!==1&&console.warn("@react-aria/i18n polyfill for NumberFormat signDisplay: Unsupported case"),a.replace(o,"!!!").replace(s,"+").replace("!!!",o)}else return e.format(n)}}function dc(e={}){let{locale:t}=jn();return i.useMemo(()=>new lc(t,e),[t,e])}function fc(e){let{value:t=0,minValue:n=0,maxValue:r=100,valueLabel:a,isIndeterminate:o,formatOptions:s={style:"percent"}}=e,l=ue(e,{labelable:!0}),{labelProps:c,fieldProps:u}=Ta({...e,labelElementType:"span"});t=Yr(t,n,r);let d=r-n,f=d===0?0:(t-n)/d,h=dc(s);if(!o&&!a){let g=s.style==="percent"?f:t;a=h.format(g)}return{progressBarProps:q(l,{...u,"aria-valuenow":o?void 0:t,"aria-valuemin":n,"aria-valuemax":r,"aria-valuetext":o?void 0:a,role:"progressbar"}),labelProps:c}}const La=i.createContext(null),Zd=i.forwardRef(function(t,n){[t,n]=fe(t,n,La);let{value:r=0,minValue:a=0,maxValue:o=100,isIndeterminate:s=!1}=t;r=Yr(r,a,o);let[l,c]=Ca(!t["aria-label"]&&!t["aria-labelledby"]),{progressBarProps:u,labelProps:d}=fc({...t,label:c}),f=o-a,h;s||(f===0?h=0:h=(r-a)/f*100);let g=ge({...t,defaultClassName:"react-aria-ProgressBar",values:{percentage:h,valueText:u["aria-valuetext"],isIndeterminate:s}}),v=ue(t,{global:!0});return I.createElement(le.div,{...q(v,g,u),ref:n,slot:t.slot||void 0},I.createElement(Fn.Provider,{value:{...d,ref:l,elementType:"span"}},g.children))}),Ma=7e3;let Oe=null;function ur(e,t="assertive",n=Ma){Oe?Oe.announce(e,t,n):(Oe=new mc,(typeof IS_REACT_ACT_ENVIRONMENT=="boolean"?IS_REACT_ACT_ENVIRONMENT:typeof jest<"u")?Oe.announce(e,t,n):setTimeout(()=>{Oe?.isAttached()&&Oe?.announce(e,t,n)},100))}class mc{constructor(){this.node=null,this.assertiveLog=null,this.politeLog=null,typeof document<"u"&&(this.node=document.createElement("div"),this.node.dataset.liveAnnouncer="true",Object.assign(this.node.style,{border:0,clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap"}),this.assertiveLog=this.createLog("assertive"),this.node.appendChild(this.assertiveLog),this.politeLog=this.createLog("polite"),this.node.appendChild(this.politeLog),document.body.prepend(this.node))}isAttached(){return this.node?.isConnected}createLog(t){let n=document.createElement("div");return n.setAttribute("role","log"),n.setAttribute("aria-live",t),n.setAttribute("aria-relevant","additions"),n}destroy(){this.node&&(document.body.removeChild(this.node),this.node=null)}announce(t,n="assertive",r=Ma){if(!this.node)return;let a=document.createElement("div");typeof t=="object"?(a.setAttribute("role","img"),a.setAttribute("aria-labelledby",t["aria-labelledby"])):a.textContent=t,n==="assertive"?this.assertiveLog?.appendChild(a):this.politeLog?.appendChild(a),t!==""&&setTimeout(()=>{a.remove()},r)}clear(t){this.node&&((!t||t==="assertive")&&this.assertiveLog&&(this.assertiveLog.innerHTML=""),(!t||t==="polite")&&this.politeLog&&(this.politeLog.innerHTML=""))}}function Hn(e){let t=e;return t.nativeEvent=e,t.isDefaultPrevented=()=>t.defaultPrevented,t.isPropagationStopped=()=>t.cancelBubble,t.persist=()=>{},t}function Aa(e,t){Object.defineProperty(e,"target",{value:t}),Object.defineProperty(e,"currentTarget",{value:t})}function Ia(e){let t=i.useRef({isFocused:!1,observer:null});return ae(()=>{const n=t.current;return()=>{n.observer&&(n.observer.disconnect(),n.observer=null)}},[]),i.useCallback(n=>{let r=D(n);if(r instanceof HTMLButtonElement||r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement||r instanceof HTMLSelectElement){t.current.isFocused=!0;let a=r,o=s=>{if(t.current.isFocused=!1,a.disabled){let l=Hn(s);e?.(l)}t.current.observer&&(t.current.observer.disconnect(),t.current.observer=null)};a.addEventListener("focusout",o,{once:!0}),t.current.observer=new MutationObserver(()=>{if(t.current.isFocused&&a.disabled){t.current.observer?.disconnect();let s=a===pe()?null:pe();a.dispatchEvent(new FocusEvent("blur",{relatedTarget:s})),a.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:s}))}}),t.current.observer.observe(a,{attributes:!0,attributeFilter:["disabled"]})}},[e])}let At=!1;function bc(e){for(;e&&!Js(e,{skipVisibilityCheck:!0});)e=e.parentElement;let t=re(e),n=pe(t.document);if(!n||n===e)return;let r=e?.getRootNode(),a=r!=null&&Tn(r)?r:re(e),o=v=>v===e||v!=null&&G(e,v),s=v=>v===n||n!=null&&v!=null&&G(n,v);At=!0;let l=!1,c=v=>{(s(D(v))||l)&&v.stopImmediatePropagation()},u=v=>{(s(D(v))||l)&&(v.stopImmediatePropagation(),!e&&!l&&(l=!0,ce(n),h()))},d=v=>{(o(D(v))||l)&&v.stopImmediatePropagation()},f=v=>{(o(D(v))||l)&&(v.stopImmediatePropagation(),l||(l=!0,ce(n),h()))};a.addEventListener("blur",c,!0),a.addEventListener("focusout",u,!0),a.addEventListener("focusin",f,!0),a.addEventListener("focus",d,!0);let h=()=>{cancelAnimationFrame(g),a.removeEventListener("blur",c,!0),a.removeEventListener("focusout",u,!0),a.removeEventListener("focusin",f,!0),a.removeEventListener("focus",d,!0),At=!1,l=!1},g=requestAnimationFrame(h);return h}let he=null;const nt=new Set;let tt=new Map,Re=!1,wt=!1;const pc={Tab:!0,Escape:!0};function Kt(e,t){for(let n of nt)n(e,t)}function hc(e){return!(e.metaKey||!Ee()&&e.altKey||e.ctrlKey||e.key==="Control"||e.key==="Shift"||e.key==="Meta")}function It(e){Re=!0,!Ce.isOpening&&hc(e)&&(he="keyboard",Kt("keyboard",e))}function Ue(e){he="pointer","pointerType"in e&&e.pointerType,(e.type==="mousedown"||e.type==="pointerdown")&&(Re=!0,Kt("pointer",e))}function Ra(e){!Ce.isOpening&&Gr(e)&&(Re=!0,he="virtual")}function Va(e){if(At)return;let t=D(e),n=re(t),r=X(t);if(t===n){wt=!0;return}t===r||!e.isTrusted||(!Re&&!wt&&(he="virtual",Kt("virtual",e)),Re=!1,wt=!1)}function Fa(){At||(Re=!1,wt=!0)}function Rt(e){if(typeof window>"u"||typeof document>"u")return;const t=re(e),n=X(e);if(tt.get(t))return;let r=t.HTMLElement.prototype.focus;Reflect.defineProperty(t.HTMLElement.prototype,"focus",{configurable:!0,writable:!0,value:function(){Re=!0,r.apply(this,arguments)}}),n.addEventListener("keydown",It,!0),n.addEventListener("keyup",It,!0),n.addEventListener("click",Ra,!0),t.addEventListener("focus",Va,!0),t.addEventListener("blur",Fa,!1),typeof PointerEvent<"u"&&(n.addEventListener("pointerdown",Ue,!0),n.addEventListener("pointermove",Ue,!0),n.addEventListener("pointerup",Ue,!0)),t.addEventListener("beforeunload",()=>{ja(e)},{once:!0}),tt.set(t,{focus:r})}const ja=(e,t)=>{const n=re(e),r=X(e);t&&r.removeEventListener("DOMContentLoaded",t),tt.has(n)&&(Reflect.defineProperty(n.HTMLElement.prototype,"focus",{configurable:!0,writable:!0,value:tt.get(n).focus}),r.removeEventListener("keydown",It,!0),r.removeEventListener("keyup",It,!0),r.removeEventListener("click",Ra,!0),n.removeEventListener("focus",Va,!0),n.removeEventListener("blur",Fa,!1),typeof PointerEvent<"u"&&(r.removeEventListener("pointerdown",Ue,!0),r.removeEventListener("pointermove",Ue,!0),r.removeEventListener("pointerup",Ue,!0)),tt.delete(n))};function vc(e){const t=X(e);let n;return t.readyState!=="loading"?Rt(e):(n=()=>{Rt(e)},t.addEventListener("DOMContentLoaded",n)),()=>ja(e,n)}typeof document<"u"&&vc();function Vt(){return he!=="pointer"}function Et(){return he}function gc(e){he=e,Kt(e,null)}function Gd(){Rt();let[e,t]=i.useState(he);return i.useEffect(()=>{let n=()=>{t(he)};return nt.add(n),()=>{nt.delete(n)}},[]),at()?null:e}const $c=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function yc(e,t,n){let r=n?D(n):void 0,a=X(r),o=re(r);const s=typeof o<"u"?o.HTMLInputElement:HTMLInputElement,l=typeof o<"u"?o.HTMLTextAreaElement:HTMLTextAreaElement,c=typeof o<"u"?o.HTMLElement:HTMLElement,u=typeof o<"u"?o.KeyboardEvent:KeyboardEvent;let d=pe(a);return e=e||d instanceof s&&!$c.has(d.type)||d instanceof l||d instanceof c&&d.isContentEditable,!(e&&t==="keyboard"&&n instanceof u&&!pc[n.key])}function xc(e={}){let{isTextInput:t,autoFocus:n}=e,[r,a]=i.useState(n||Vt());return Ha(o=>{a(o)},[t],{isTextInput:t}),{isFocusVisible:r}}function Ha(e,t,n){Rt(),i.useEffect(()=>{if(n?.enabled===!1)return;let r=(a,o)=>{yc(!!n?.isTextInput,a,o)&&e(Vt())};return nt.add(r),()=>{nt.delete(r)}},t)}function wc(e){if(!e.isConnected)return;const t=X(e);if(Et()==="virtual"){let n=pe(t);Ur(()=>{const r=pe(t);(r===n||r===t.body)&&e.isConnected&&ce(e)})}else ce(e)}function Da(e){let{isDisabled:t,onFocus:n,onBlur:r,onFocusChange:a}=e;const o=i.useCallback(c=>{if(D(c)===c.currentTarget)return r&&r(c),a&&a(!1),!0},[r,a]),s=Ia(o),l=i.useCallback(c=>{let u=D(c);const d=X(u),f=d?pe(d):pe();u===c.currentTarget&&u===f&&(n&&n(c),a&&a(!0),s(c))},[a,n,s]);return{focusProps:{onFocus:!t&&(n||a||r)?l:void 0,onBlur:!t&&(r||a)?o:void 0}}}function ht(e){if(e)return t=>{let n=!0,r={...t,preventDefault(){t.preventDefault()},isDefaultPrevented(){return t.isDefaultPrevented()},stopPropagation(){n=!0},continuePropagation(){n=!1,typeof t.continuePropagation=="function"&&t.continuePropagation()},isPropagationStopped(){return n}};e(r),n&&!(typeof t.isPropagationStopped=="function"&&t.isPropagationStopped())&&t.stopPropagation()}}const Ec=new Set(["shift","alt","control","meta","mod"]),Cc=["Alt","Control","Meta","Shift"];function Tc(e){let t=new Set;return e.alt&&t.add("Alt"),e.shift&&t.add("Shift"),e.ctrl&&t.add("Control"),e.meta&&t.add("Meta"),e.mod&&t.add(Ee()?"Meta":"Control"),t}function kc(e){let t=new Set;return e.altKey&&t.add("Alt"),e.ctrlKey&&t.add("Control"),e.metaKey&&t.add("Meta"),e.shiftKey&&t.add("Shift"),t}function Na(e){return Cc.filter(t=>e.has(t))}function Sc(e){let t=e.split("+").reduce((n,r)=>{let a=r.toLowerCase();return Ec.has(a)?a==="shift"?n.shift=!0:a==="alt"?n.alt=!0:a==="control"?n.ctrl=!0:a==="meta"?n.meta=!0:a==="mod"&&(n.mod=!0):n.key=r,n},{shift:!1,alt:!1,ctrl:!1,meta:!1,mod:!1,key:""});if(t.key==="")throw new Error(`Invalid keyboard shortcut: "${e}". Must include exactly one non-modifier key (e.g. "a", "Enter", "ArrowDown"). Combine any of Shift, Alt, Ctrl, Meta, and Mod.`);return t}function Oa(e){return e.toLowerCase()}const Pc={space:" ",esc:"escape",del:"delete",ins:"insert",left:"arrowleft",right:"arrowright",up:"arrowup",down:"arrowdown",pageup:"pageup",pagedown:"pagedown"};function Lc(e){let t=Oa(e),n=Pc[t];return n??t}function Mc(e){let t=Na(Tc(e)),n=Lc(e.key);return t.length>0?`${t.join("+")}+${n}`:n}function Ac(e){let t=Na(kc(e)),n=Oa(e.key);return(t.length>0?`${t.join("+")}+`:"")+n}function Ic(e){let t=new Map;for(let[n,r]of Object.entries(e)){let a=Sc(n);t.set(Mc(a),r)}return n=>{let r=Ac(n),a=t.get(r),o=a?.(n);o===void 0&&a!==void 0?o={shouldContinuePropagation:!1,shouldPreventDefault:!0}:typeof o=="boolean"&&(o={shouldContinuePropagation:!o,shouldPreventDefault:o}),o?.shouldPreventDefault&&n.preventDefault(),(!a||o?.shouldContinuePropagation)&&n.continuePropagation()}}function Rc(e){let{shortcuts:t,allowRepeats:n=!1,allowComposing:r=!1}=e,a,o;if(t){let s=Ic(t),l=ht(u=>{if(!G(u.currentTarget,D(u))){u.continuePropagation();return}if(u.nativeEvent?.repeat&&!n||u.nativeEvent?.isComposing&&!r){u.continuePropagation();return}s(u)}),c=ht(u=>{if(!G(u.currentTarget,D(u))){u.continuePropagation();return}if(u.nativeEvent?.repeat&&!n||u.nativeEvent?.isComposing&&!r){u.continuePropagation();return}u.continuePropagation()});a=e.onKeyDown?St(e.onKeyDown,l):l,o=e.onKeyUp?St(e.onKeyUp,c):c}else a=ht(e.onKeyDown),o=ht(e.onKeyUp);return{keyboardProps:e.isDisabled?{}:{onKeyDown:a,onKeyUp:o}}}let _a=I.createContext(null);function Vc(e){let t=i.useContext(_a)||{};Zr(t,e);let{ref:n,...r}=t;return r}const Wd=I.forwardRef(function(t,n){let{children:r,...a}=t,o=Bt(n),s={...a,ref:o};return I.createElement(_a.Provider,{value:s},r)});function Dn(e,t){let{focusProps:n}=Da(e),{keyboardProps:r}=Rc(e),a=q(n,r),o=Vc(t),s=e.isDisabled?{}:o,l=i.useRef(e.autoFocus);i.useEffect(()=>{l.current&&t.current&&wc(t.current),l.current=!1},[t]);let c=e.excludeFromTabOrder?-1:0;return e.isDisabled&&(c=void 0),{focusableProps:q({...a,tabIndex:c},s)}}let ze="default",xn="",Ct=new WeakMap;function Fc(e){if(Ot()&&kt()){if(ze==="default"){const t=X(e);xn=t.documentElement.style.webkitUserSelect,t.documentElement.style.webkitUserSelect="none"}ze="disabled"}else if(e instanceof HTMLElement||e instanceof SVGElement){let t="userSelect"in e.style?"userSelect":"webkitUserSelect";Ct.set(e,e.style[t]),e.style[t]="none"}}function dr(e){if(Ot()&&kt()){if(ze!=="disabled")return;ze="restoring",setTimeout(()=>{Ur(()=>{if(ze==="restoring"){const t=X(e);t.documentElement.style.webkitUserSelect==="none"&&(t.documentElement.style.webkitUserSelect=xn||""),xn="",ze="default"}})},300)}else if((e instanceof HTMLElement||e instanceof SVGElement)&&e&&Ct.has(e)){let t=Ct.get(e),n="userSelect"in e.style?"userSelect":"webkitUserSelect";e.style[n]==="none"&&(e.style[n]=t),e.getAttribute("style")===""&&e.removeAttribute("style"),Ct.delete(e)}}const Ba=I.createContext({register:()=>{}});Ba.displayName="PressResponderContext";function jc(e){let t=i.useContext(Ba);if(t){let{register:n,ref:r,...a}=t;e=q(a,e),n()}return Zr(t,e.ref),e}class vt{#e;constructor(t,n,r,a){this.#e=!0;const s=(a?.target??r.currentTarget)?.getBoundingClientRect();let l,c=0,u,d=null;r.clientX!=null&&r.clientY!=null&&(u=r.clientX,d=r.clientY),s&&(u!=null&&d!=null?(l=u-s.left,c=d-s.top):(l=s.width/2,c=s.height/2)),this.type=t,this.pointerType=n,this.target=r.currentTarget,this.shiftKey=r.shiftKey,this.metaKey=r.metaKey,this.ctrlKey=r.ctrlKey,this.altKey=r.altKey,this.x=l,this.y=c,this.key=r.key}continuePropagation(){this.#e=!1}get shouldStopPropagation(){return this.#e}}const fr=Symbol("linkClicked"),mr="react-aria-pressable-style",br="data-react-aria-pressable";function za(e){let{onPress:t,onPressChange:n,onPressStart:r,onPressEnd:a,onPressUp:o,onClick:s,isDisabled:l,isPressed:c,preventFocusOnPress:u,shouldCancelOnPointerExit:d,allowTextSelectionOnPress:f,ref:h,...g}=jc(e),[v,w]=i.useState(!1),$=i.useRef({isPressed:!1,ignoreEmulatedMouseEvents:!1,didFirePressStart:!1,isTriggeringEvent:!1,activePointerId:null,target:null,isOverTarget:!1,pointerType:null,disposables:[]}),{addGlobalListener:C,removeAllGlobalListeners:k}=kn(),T=i.useCallback((p,A)=>{let H=$.current;if(l||H.didFirePressStart)return!1;let E=!0;if(H.isTriggeringEvent=!0,r){let K=new vt("pressstart",A,p);r(K),E=K.shouldStopPropagation}return n&&n(!0),H.isTriggeringEvent=!1,H.didFirePressStart=!0,w(!0),E},[l,r,n]),L=i.useCallback((p,A,H=!0)=>{let E=$.current;if(!E.didFirePressStart)return!1;E.didFirePressStart=!1,E.isTriggeringEvent=!0;let K=!0;if(a){let b=new vt("pressend",A,p);a(b),K=b.shouldStopPropagation}if(n&&n(!1),w(!1),t&&H&&!l){let b=new vt("press",A,p);t(b),K&&=b.shouldStopPropagation}return E.isTriggeringEvent=!1,K},[l,a,n,t]),F=Me(L),j=i.useCallback((p,A)=>{let H=$.current;if(l)return!1;if(o){H.isTriggeringEvent=!0;let E=new vt("pressup",A,p);return o(E),H.isTriggeringEvent=!1,E.shouldStopPropagation}return!0},[l,o]),V=Me(j),x=i.useCallback(p=>{let A=$.current;if(A.isPressed&&A.target){A.didFirePressStart&&A.pointerType!=null&&L(Le(A.target,p),A.pointerType,!1),A.isPressed=!1,A.isOverTarget=!1,A.activePointerId=null,A.pointerType=null,k(),f||dr(A.target);for(let H of A.disposables)H();A.disposables=[]}},[f,k,L]),R=Me(x);i.useEffect(()=>{l&&$.current.isPressed&&R({currentTarget:$.current.target,shiftKey:!1,ctrlKey:!1,metaKey:!1,altKey:!1})},[l]);let M=i.useCallback(p=>{d&&x(p)},[d,x]),z=i.useCallback(p=>{l||s?.(p)},[l,s]),Z=i.useCallback((p,A)=>{if(!l&&s){let H=new MouseEvent("click",p);Aa(H,A),s(Hn(H))}},[l,s]),Q=i.useMemo(()=>{let p=$.current,A={onKeyDown(E){if(en(E.nativeEvent,E.currentTarget)&&G(E.currentTarget,D(E))){pr(D(E),E.key)&&E.preventDefault();let K=!0;!p.isPressed&&!E.repeat&&(p.target=E.currentTarget,p.isPressed=!0,p.pointerType="keyboard",K=T(E,"keyboard"));let b=E.currentTarget,y=O=>{en(O,b)&&!O.repeat&&G(b,D(O))&&p.target&&V(Le(p.target,O),"keyboard")};C(X(E.currentTarget),"keyup",St(y,H),!0),K&&E.stopPropagation(),E.metaKey&&Ee()&&p.metaKeyEvents?.set(E.key,E.nativeEvent)}else E.key==="Meta"&&(p.metaKeyEvents=new Map)},onClick(E){if(!(E&&!G(E.currentTarget,D(E)))&&E&&E.button===0&&!p.isTriggeringEvent&&!Ce.isOpening){let K=!0;if(l&&E.preventDefault(),!p.ignoreEmulatedMouseEvents&&!p.isPressed&&(p.pointerType==="virtual"||Gr(E.nativeEvent))){let b=T(E,"virtual"),y=V(E,"virtual"),O=F(E,"virtual");z(E),K=b&&y&&O}else if(p.isPressed&&p.pointerType!=="keyboard"){let b=p.pointerType||E.nativeEvent.pointerType||"virtual",y=V(Le(E.currentTarget,E),b),O=F(Le(E.currentTarget,E),b,!0);K=y&&O,p.isOverTarget=!1,z(E),R(E)}p.ignoreEmulatedMouseEvents=!1,K&&E.stopPropagation()}}},H=E=>{if(p.isPressed&&p.target&&en(E,p.target)){pr(D(E),E.key)&&E.preventDefault();let K=D(E),b=G(p.target,K);F(Le(p.target,E),"keyboard",b),b&&Z(E,p.target),k(),E.key!=="Enter"&&Nn(p.target)&&G(p.target,K)&&!E[fr]&&(E[fr]=!0,Ce(p.target,E,!1)),p.isPressed=!1,p.metaKeyEvents?.delete(E.key)}else if(E.key==="Meta"&&p.metaKeyEvents?.size){let K=p.metaKeyEvents;p.metaKeyEvents=void 0;for(let b of K.values())p.target?.dispatchEvent(new KeyboardEvent("keyup",b))}};if(typeof PointerEvent<"u"){A.onPointerDown=b=>{if(b.button!==0||!G(b.currentTarget,D(b)))return;if(Zs(b.nativeEvent)){p.pointerType="virtual";return}p.pointerType=b.pointerType;let y=!0;if(!p.isPressed){p.isPressed=!0,p.isOverTarget=!0,p.activePointerId=b.pointerId,p.target=b.currentTarget,f||Fc(p.target),y=T(b,p.pointerType);let O=D(b);"releasePointerCapture"in O&&("hasPointerCapture"in O?O.hasPointerCapture(b.pointerId)&&O.releasePointerCapture(b.pointerId):O.releasePointerCapture(b.pointerId)),C(X(b.currentTarget),"pointerup",E,!1),C(X(b.currentTarget),"pointercancel",K,!1)}y&&b.stopPropagation()},A.onMouseDown=b=>{if(G(b.currentTarget,D(b))&&b.button===0){if(u){let y=bc(b.target);y&&p.disposables.push(y)}b.stopPropagation()}},A.onPointerUp=b=>{!G(b.currentTarget,D(b))||p.pointerType==="virtual"||b.button===0&&!p.isPressed&&V(b,p.pointerType||b.pointerType)},A.onPointerEnter=b=>{b.pointerId===p.activePointerId&&p.target&&!p.isOverTarget&&p.pointerType!=null&&(p.isOverTarget=!0,T(Le(p.target,b),p.pointerType))},A.onPointerLeave=b=>{b.pointerId===p.activePointerId&&p.target&&p.isOverTarget&&p.pointerType!=null&&(p.isOverTarget=!1,F(Le(p.target,b),p.pointerType,!1),M(b))};let E=b=>{if(b.pointerId===p.activePointerId&&p.isPressed&&b.button===0&&p.target){if(G(p.target,D(b))&&p.pointerType!=null){let y=!1,O=setTimeout(()=>{p.isPressed&&p.target instanceof HTMLElement&&(y?R(b):(ce(p.target),p.target.click()))},80);C(b.currentTarget,"click",()=>y=!0,!0),p.disposables.push(()=>clearTimeout(O))}else R(b);p.isOverTarget=!1}},K=b=>{R(b)};A.onDragStart=b=>{G(b.currentTarget,D(b))&&R(b)}}return A},[C,l,u,k,f,M,T,z,Z]);return i.useEffect(()=>{if(!h)return;const p=X(h.current);if(!p||!p.head||p.getElementById(mr))return;const A=p.createElement("style");A.id=mr;let H=ti(p);H&&(A.nonce=H),A.textContent=` +@layer { + [${br}] { + touch-action: pan-x pan-y pinch-zoom; + } +} + `.trim(),p.head.prepend(A)},[h]),i.useEffect(()=>{let p=$.current;return()=>{f||dr(p.target??void 0);for(let A of p.disposables)A();p.disposables=[]}},[f]),{isPressed:c||v,pressProps:q(g,Q,{[br]:!0})}}function Nn(e){return e.tagName==="A"&&e.hasAttribute("href")}function en(e,t){const{key:n,code:r}=e,a=t,o=a.getAttribute("role");return(n==="Enter"||n===" "||n==="Spacebar"||r==="Space")&&!(a instanceof re(a).HTMLInputElement&&!Ka(a,n)||a instanceof re(a).HTMLTextAreaElement||a.isContentEditable)&&!((o==="link"||!o&&Nn(a))&&n!=="Enter")}function Le(e,t){let n=t.clientX,r=t.clientY;return{currentTarget:e,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,metaKey:t.metaKey,altKey:t.altKey,clientX:n,clientY:r,key:t.key}}function Hc(e){return e instanceof HTMLInputElement?!1:e instanceof HTMLButtonElement?e.type!=="submit"&&e.type!=="reset":!Nn(e)}function pr(e,t){return Ee()&&t==="Enter"?!1:e instanceof HTMLInputElement?t==="Enter"&&(e.type==="checkbox"||e.type==="radio")?!1:!Ka(e,t):Hc(e)}const Dc=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function Ka(e,t){return e.type==="checkbox"||e.type==="radio"?t===" ":Dc.has(e.type)}function Nc(e,t){let{elementType:n="button",isDisabled:r,onPress:a,onPressStart:o,onPressEnd:s,onPressUp:l,onPressChange:c,preventFocusOnPress:u,allowFocusWhenDisabled:d,onClick:f,href:h,target:g,rel:v,type:w="button"}=e,$;n==="button"?$={type:w,disabled:r,form:e.form,formAction:e.formAction,formEncType:e.formEncType,formMethod:e.formMethod,formNoValidate:e.formNoValidate,formTarget:e.formTarget,name:e.name,value:e.value}:$={role:"button",href:n==="a"&&!r?h:void 0,target:n==="a"?g:void 0,type:n==="input"?w:void 0,disabled:n==="input"?r:void 0,"aria-disabled":!r||n==="input"?void 0:r,rel:n==="a"?v:void 0};let{pressProps:C,isPressed:k}=za({onPressStart:o,onPressEnd:s,onPressChange:c,onPress:a,onPressUp:l,onClick:f,isDisabled:r,preventFocusOnPress:u,ref:t}),{focusableProps:T}=Dn(e,t);d&&(T.tabIndex=r?-1:T.tabIndex);let L=q(T,C,ue(e,{labelable:!0}));return{isPressed:k,buttonProps:q($,L,{"aria-haspopup":e["aria-haspopup"],"aria-expanded":e["aria-expanded"],"aria-controls":e["aria-controls"],"aria-pressed":e["aria-pressed"],"aria-current":e["aria-current"],"aria-disabled":e["aria-disabled"]})}}function Ua(e){let{isDisabled:t,onBlurWithin:n,onFocusWithin:r,onFocusWithinChange:a}=e,o=i.useRef({isFocusWithin:!1}),{addGlobalListener:s,removeAllGlobalListeners:l}=kn(),c=i.useCallback(f=>{G(f.currentTarget,D(f))&&o.current.isFocusWithin&&!G(f.currentTarget,f.relatedTarget)&&(o.current.isFocusWithin=!1,l(),n&&n(f),a&&a(!1))},[n,a,o,l]),u=Ia(c),d=i.useCallback(f=>{if(!G(f.currentTarget,D(f)))return;let h=D(f);const g=X(h),v=pe(g);if(!o.current.isFocusWithin&&v===h){r&&r(f),a&&a(!0),o.current.isFocusWithin=!0,u(f);let w=f.currentTarget;s(g,"focus",$=>{let C=D($);if(o.current.isFocusWithin&&!G(w,C)){let k=new g.defaultView.FocusEvent("blur",{relatedTarget:C});Aa(k,w);let T=Hn(k);c(T)}},{capture:!0})}},[r,a,u,s,c]);return t?{focusWithinProps:{onFocus:void 0,onBlur:void 0}}:{focusWithinProps:{onFocus:d,onBlur:c}}}function Ze(e={}){let{autoFocus:t=!1,isTextInput:n,within:r}=e,a=i.useRef({isFocused:!1,isFocusVisible:t||Vt()}),[o,s]=i.useState(!1),[l,c]=i.useState(()=>a.current.isFocused&&a.current.isFocusVisible),u=i.useCallback(()=>c(a.current.isFocused&&a.current.isFocusVisible),[]),d=i.useCallback(g=>{a.current.isFocused=g,a.current.isFocusVisible=Vt(),s(g),u()},[u]);Ha(g=>{a.current.isFocusVisible=g,u()},[n,o],{enabled:o,isTextInput:n});let{focusProps:f}=Da({isDisabled:r,onFocusChange:d}),{focusWithinProps:h}=Ua({isDisabled:!r,onFocusWithinChange:d});return{isFocused:o,isFocusVisible:l,focusProps:r?h:f}}let wn=!1,gt=0;function Oc(){wn=!0,setTimeout(()=>{wn=!1},500)}function hr(e){e.pointerType==="touch"&&Oc()}function _c(){let e=X(null);if(!(typeof e>"u"))return gt===0&&typeof PointerEvent<"u"&&e.addEventListener("pointerup",hr),gt++,()=>{gt--,!(gt>0)&&typeof PointerEvent<"u"&&e.removeEventListener("pointerup",hr)}}function Fe(e){let{onHoverStart:t,onHoverChange:n,onHoverEnd:r,isDisabled:a}=e,[o,s]=i.useState(!1),l=i.useRef({isHovered:!1,ignoreEmulatedMouseEvents:!1,pointerType:"",target:null}).current;i.useEffect(_c,[]);let{addGlobalListener:c,removeAllGlobalListeners:u}=kn(),{hoverProps:d,triggerHoverEnd:f}=i.useMemo(()=>{let h=(w,$)=>{if(l.pointerType=$,a||$==="touch"||l.isHovered||!G(w.currentTarget,D(w)))return;l.isHovered=!0;let C=w.currentTarget;l.target=C,c(X(D(w)),"pointerover",k=>{l.isHovered&&l.target&&!G(l.target,D(k))&&g(k,k.pointerType)},{capture:!0}),t&&t({type:"hoverstart",target:C,pointerType:$}),n&&n(!0),s(!0)},g=(w,$)=>{let C=l.target;l.pointerType="",l.target=null,!($==="touch"||!l.isHovered||!C)&&(l.isHovered=!1,u(),r&&r({type:"hoverend",target:C,pointerType:$}),n&&n(!1),s(!1))},v={};return typeof PointerEvent<"u"&&(v.onPointerEnter=w=>{wn&&w.pointerType==="mouse"||h(w,w.pointerType)},v.onPointerLeave=w=>{!a&&G(w.currentTarget,D(w))&&g(w,w.pointerType)}),{hoverProps:v,triggerHoverEnd:g}},[t,n,r,a,l,c,u]);return i.useEffect(()=>{a&&f({currentTarget:l.target},l.pointerType)},[a]),{hoverProps:d,isHovered:o}}const Za=i.createContext({}),Ga=st(function(t,n){[t,n]=fe(t,n,Za);let r=t,{isPending:a}=r,{buttonProps:o,isPressed:s}=Nc(t,n);o=zc(o,a);let{focusProps:l,isFocused:c,isFocusVisible:u}=Ze(t),{hoverProps:d,isHovered:f}=Fe({...t,isDisabled:t.isDisabled||a}),h={isHovered:f,isPressed:(r.isPressed||s)&&!a,isFocused:c,isFocusVisible:u,isDisabled:t.isDisabled||!1,isPending:a??!1},g=ge({...t,values:h,defaultClassName:"react-aria-Button"}),v=Ae(o.id),w=Ae(),$=o["aria-labelledby"];a&&($?$=`${$} ${w}`:o["aria-label"]&&($=`${v} ${w}`));let C=i.useRef(a);i.useEffect(()=>{let T={"aria-labelledby":$||v};(!C.current&&c&&a||C.current&&c&&!a)&&ur(T,"assertive"),C.current=a},[a,c,$,v]);let k=ue(t,{global:!0});return delete k.onClick,I.createElement(le.button,{...q(k,g,o,l,d),type:o.type==="submit"&&a?"button":o.type,id:v,ref:n,"aria-labelledby":$,slot:t.slot||void 0,"aria-disabled":a?"true":o["aria-disabled"],"data-disabled":t.isDisabled||void 0,"data-pressed":h.isPressed||void 0,"data-hovered":f||void 0,"data-focused":c||void 0,"data-pending":a||void 0,"data-focus-visible":u||void 0},I.createElement(La.Provider,{value:{id:w}},g.children))}),Bc=/Focus|Blur|Hover|Pointer(Enter|Leave|Over|Out)|Mouse(Enter|Leave|Over|Out)/;function zc(e,t){if(t){for(const n in e)n.startsWith("on")&&!Bc.test(n)&&(e[n]=void 0);e.href=void 0,e.target=void 0}return e}const Kc=typeof document<"u"?I.useInsertionEffect??I.useLayoutEffect:()=>{};function Uc(e,t,n){let[r,a]=i.useState(e||t),o=i.useRef(r),s=i.useRef(e!==void 0),l=e!==void 0;i.useEffect(()=>{s.current,s.current=l},[l]);let c=l?e:r;Kc(()=>{o.current=c});let[,u]=i.useReducer(()=>({}),{}),d=i.useCallback((f,...h)=>{let g=typeof f=="function"?f(o.current):f;Object.is(o.current,g)||(o.current=g,a(g),u(),n?.(g,...h))},[n]);return[c,d]}const we=e=>e?"true":void 0;function $e(e,t){return Vn(e,(n,r)=>{const a=typeof t=="function"?t(r)??"":t??"";return _l(a,n??"")??""})}const ee=(e,t,n)=>typeof e=="function"?e({...n??{},className:t}):t,qd=e=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...e,children:m.jsx("path",{clipRule:"evenodd",d:"M2.97 5.47a.75.75 0 0 1 1.06 0L8 9.44l3.97-3.97a.75.75 0 1 1 1.06 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0l-4.5-4.5a.75.75 0 0 1 0-1.06",fill:"currentColor",fillRule:"evenodd"})}),Yd=e=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...e,children:m.jsx("path",{clipRule:"evenodd",d:"M13.03 10.53a.75.75 0 0 1-1.06 0L8 6.56l-3.97 3.97a.75.75 0 0 1-1.06-1.06l4.5-4.5a.75.75 0 0 1 1.06 0l4.5 4.5a.75.75 0 0 1 0 1.06",fill:"currentColor",fillRule:"evenodd"})}),Xd=e=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...e,children:m.jsx("path",{clipRule:"evenodd",d:"M10.53 2.97a.75.75 0 0 1 0 1.06L6.56 8l3.97 3.97a.75.75 0 1 1-1.06 1.06l-4.5-4.5a.75.75 0 0 1 0-1.06l4.5-4.5a.75.75 0 0 1 1.06 0",fill:"currentColor",fillRule:"evenodd"})}),Qd=e=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...e,children:m.jsx("path",{clipRule:"evenodd",d:"M5.47 2.97a.75.75 0 0 1 1.06 0l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 1 1-1.06-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 0-1.06Z",fill:"currentColor",fillRule:"evenodd"})}),Zc=({height:e=9,width:t=9,...n})=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:e,role:"presentation",viewBox:"0 0 7 7",width:t,xmlns:"http://www.w3.org/2000/svg",...n,children:m.jsx("path",{d:"M1.20592 6.84333L0.379822 6.01723L4.52594 1.8672H1.37819L1.38601 0.731812H6.48742V5.83714H5.34421L5.35203 2.6933L1.20592 6.84333Z",fill:"currentColor"})}),Gc=e=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...e,children:m.jsx("path",{clipRule:"evenodd",d:"M3.47 3.47a.75.75 0 0 1 1.06 0L8 6.94l3.47-3.47a.75.75 0 1 1 1.06 1.06L9.06 8l3.47 3.47a.75.75 0 1 1-1.06 1.06L8 9.06l-3.47 3.47a.75.75 0 0 1-1.06-1.06L6.94 8 3.47 4.53a.75.75 0 0 1 0-1.06Z",fill:"currentColor",fillRule:"evenodd"})}),Ft=e=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...e,children:m.jsx("path",{clipRule:"evenodd",d:"M8 13.5a5.5 5.5 0 1 0 0-11a5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-9.5a1 1 0 1 1-2 0a1 1 0 0 1 2 0m-.25 3a.75.75 0 0 0-1.5 0V11a.75.75 0 0 0 1.5 0z",fill:"currentColor",fillRule:"evenodd"})}),Wa=e=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...e,children:m.jsx("path",{clipRule:"evenodd",d:"M7.134 2.994L2.217 11.5a1 1 0 0 0 .866 1.5h9.834a1 1 0 0 0 .866-1.5L8.866 2.993a1 1 0 0 0-1.732 0m3.03-.75c-.962-1.665-3.366-1.665-4.329 0L.918 10.749c-.963 1.666.24 3.751 2.165 3.751h9.834c1.925 0 3.128-2.085 2.164-3.751zM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 0 1-1.5 0v-2A.75.75 0 0 1 8 5m1 5.75a1 1 0 1 1-2 0a1 1 0 0 1 2 0",fill:"currentColor",fillRule:"evenodd"})}),qa=e=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...e,children:m.jsx("path",{clipRule:"evenodd",d:"M8 13.5a5.5 5.5 0 1 0 0-11a5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-4.5a1 1 0 1 1-2 0a1 1 0 0 1 2 0M8.75 5a.75.75 0 0 0-1.5 0v2.5a.75.75 0 0 0 1.5 0z",fill:"currentColor",fillRule:"evenodd"})}),Ya=e=>m.jsx("svg",{"aria-hidden":"true",fill:"none",height:16,role:"presentation",viewBox:"0 0 16 16",width:16,xmlns:"http://www.w3.org/2000/svg",...e,children:m.jsx("path",{clipRule:"evenodd",d:"M13.5 8a5.5 5.5 0 1 1-11 0a5.5 5.5 0 0 1 11 0M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0m-3.9-1.55a.75.75 0 1 0-1.2-.9L7.419 8.858L6.03 7.47a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.13-.08z",fill:"currentColor",fillRule:"evenodd"})}),Xa=i.createContext({}),it=i.createContext({}),Wc={variant:"default"},vr=({children:e,className:t,status:n,...r})=>{const a=I.useMemo(()=>Bl({status:n}),[n]),o=I.useMemo(()=>({slots:a,status:n}),[a,n]);return m.jsx(it,{value:o,children:m.jsx(Xa,{value:Wc,children:m.jsx(J.div,{className:a?.base({className:t}),"data-slot":"alert-root",...r,children:e})})})},qc=({children:e,className:t,...n})=>{const{slots:r,status:a}=i.use(it),o=()=>{switch(a){case"accent":return m.jsx(Ft,{"data-slot":"alert-default-icon"});case"success":return m.jsx(Ya,{"data-slot":"alert-default-icon"});case"warning":return m.jsx(Wa,{"data-slot":"alert-default-icon"});case"danger":return m.jsx(qa,{"data-slot":"alert-default-icon"});default:return m.jsx(Ft,{"data-slot":"alert-default-icon"})}};return m.jsx(J.div,{className:ee(r?.indicator,t),"data-slot":"alert-indicator",...n,children:e??o()})},Yc=({children:e,className:t,...n})=>{const{slots:r}=i.use(it);return m.jsx(J.div,{className:ee(r?.content,t),"data-slot":"alert-content",...n,children:e})},Xc=({children:e,className:t,...n})=>{const{slots:r}=i.use(it);return m.jsx(J.p,{className:ee(r?.title,t),"data-slot":"alert-title",...n,children:e})},Qc=({children:e,className:t,...n})=>{const{slots:r}=i.use(it);return m.jsx(J.span,{className:ee(r?.description,t),"data-slot":"alert-description",...n,children:e})},$t=Object.assign(vr,{Root:vr,Indicator:qc,Content:Yc,Title:Xc,Description:Qc}),Jc=Symbol.for("react-aria.i18n.locale"),eu=Symbol.for("react-aria.i18n.strings");let yt;class Ut{constructor(t,n="en-US"){this.strings=Object.fromEntries(Object.entries(t).filter(([,r])=>r)),this.defaultLocale=n}getStringForLocale(t,n){let a=this.getStringsForLocale(n)[t];if(!a)throw new Error(`Could not find intl message ${t} in ${n} locale`);return a}getStringsForLocale(t){let n=this.strings[t];return n||(n=tu(t,this.strings,this.defaultLocale),this.strings[t]=n),n}static getGlobalDictionaryForPackage(t){if(typeof window>"u")return null;let n=window[Jc];if(yt===void 0){let a=window[eu];if(!a)return null;yt={};for(let o in a)yt[o]=new Ut({[n]:a[o]},n)}let r=yt?.[t];if(!r)throw new Error(`Strings for package "${t}" were not included by LocalizedStringProvider. Please add it to the list passed to createLocalizedStringDictionary.`);return r}}function tu(e,t,n="en-US"){if(t[e])return t[e];let r=nu(e),a=ru(e);if(a&&t[`${r}-${a}`])return t[`${r}-${a}`];if(t[r])return t[r];for(let o in t)if(o.startsWith(r+"-"))return t[o];return t[n]}function nu(e){return Intl.Locale?new Intl.Locale(e).language:e.split("-")[0]}function ru(e){if(Intl.Locale)return new Intl.Locale(e).script}const gr=new Map,$r=new Map;class au{constructor(t,n){this.locale=t,this.strings=n}format(t,n){let r=this.strings.getStringForLocale(t,this.locale);return typeof r=="function"?r(n,this):r}plural(t,n,r="cardinal"){let a=n["="+t];if(a)return typeof a=="function"?a():a;let o=this.locale+":"+r,s=gr.get(o);s||(s=new Intl.PluralRules(this.locale,{type:r}),gr.set(o,s));let l=s.select(t);return a=n[l]||n.other,typeof a=="function"?a():a}number(t){let n=$r.get(this.locale);return n||(n=new Intl.NumberFormat(this.locale),$r.set(this.locale,n)),n.format(t)}select(t,n){let r=t[n]||t.other;return typeof r=="function"?r():r}}const yr=new WeakMap;function ou(e){let t=yr.get(e);return t||(t=new Ut(e),yr.set(e,t)),t}function su(e,t){return t&&Ut.getGlobalDictionaryForPackage(t)||ou(e)}function Qa(e,t){let{locale:n}=jn(),r=su(e,t);return i.useMemo(()=>new au(n,r),[n,r])}const iu=i.createContext({});function lu(){return i.useContext(iu)??{}}var tn={exports:{}},nn={};var xr;function cu(){if(xr)return nn;xr=1;var e=ls();function t(f,h){return f===h&&(f!==0||1/f===1/h)||f!==f&&h!==h}var n=typeof Object.is=="function"?Object.is:t,r=e.useState,a=e.useEffect,o=e.useLayoutEffect,s=e.useDebugValue;function l(f,h){var g=h(),v=r({inst:{value:g,getSnapshot:h}}),w=v[0].inst,$=v[1];return o(function(){w.value=g,w.getSnapshot=h,c(w)&&$({inst:w})},[f,g,h]),a(function(){return c(w)&&$({inst:w}),f(function(){c(w)&&$({inst:w})})},[f]),s(g),g}function c(f){var h=f.getSnapshot;f=f.value;try{var g=h();return!n(f,g)}catch{return!0}}function u(f,h){return h()}var d=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?u:l;return nn.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:d,nn}var wr;function uu(){return wr||(wr=1,tn.exports=cu()),tn.exports}var Ja=uu();const Jd=i.createContext(null),du=i.createContext(null),On=i.createContext({}),eo=st(function(t,n){[t,n]=fe(t,n,On);let{elementType:r="span",...a}=t,o=le[r];return I.createElement(o,{className:"react-aria-Text",...a,ref:n})}),Er=({children:e,className:t,slot:n,style:r,variant:a,...o})=>{const s=i.useMemo(()=>Zl({variant:a}),[a]);return m.jsx(Ga,{"aria-label":"Close",className:$e(t,s),"data-slot":"close-button",slot:n,style:r,type:"button",...o,children:l=>typeof e=="function"?e(l):e??m.jsx(Gc,{"data-slot":"close-button-icon"})})},fu=Object.assign(Er,{Root:Er}),mu=i.createContext({}),bu=i.createContext(null),to={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valueMissing:!1,valid:!0},no={...to,customError:!0,valid:!1},Qe={isInvalid:!1,validationDetails:to,validationErrors:[]},pu=i.createContext({}),Cr="__reactAriaFormValidationState";function hu(e){if(e[Cr]){let{realtimeValidation:t,displayValidation:n,updateValidation:r,resetValidation:a,commitValidation:o}=e[Cr];return{realtimeValidation:t,displayValidation:n,updateValidation:r,resetValidation:a,commitValidation:o}}return vu(e)}function vu(e){let{isInvalid:t,validationState:n,name:r,value:a,builtinValidation:o,validate:s,validationBehavior:l="aria"}=e;n&&(t||=n==="invalid");let c=t!==void 0?{isInvalid:t,validationErrors:[],validationDetails:no}:null,u=i.useMemo(()=>{if(!s||a==null)return null;let M=gu(s,a);return Tr(M)},[s,a]);o?.validationDetails.valid&&(o=void 0);let d=i.useContext(pu),f=i.useMemo(()=>r?Array.isArray(r)?r.flatMap(M=>En(d[M])):En(d[r]):[],[d,r]),[h,g]=i.useState(d),[v,w]=i.useState(!1);d!==h&&(g(d),w(!1));let $=i.useMemo(()=>Tr(v?[]:f),[v,f]),C=i.useRef(Qe),[k,T]=i.useState(Qe),L=i.useRef(Qe),F=()=>{if(!j)return;V(!1);let M=u||o||C.current;rn(M,L.current)||(L.current=M,T(M))},[j,V]=i.useState(!1);return i.useEffect(F),{realtimeValidation:c||$||u||o||Qe,displayValidation:l==="native"?c||$||k:c||$||u||o||k,updateValidation(M){l==="aria"&&!rn(k,M)?T(M):C.current=M},resetValidation(){let M=Qe;rn(M,L.current)||(L.current=M,T(M)),l==="native"&&V(!1),w(!0)},commitValidation(){l==="native"&&V(!0),w(!0)}}}function En(e){return e?Array.isArray(e)?e:[e]:[]}function gu(e,t){if(typeof e=="function"){let n=e(t);if(n&&typeof n!="boolean")return En(n)}return[]}function Tr(e){return e.length?{isInvalid:!0,validationErrors:e,validationDetails:no}:null}function rn(e,t){return e===t?!0:!!e&&!!t&&e.isInvalid===t.isInvalid&&e.validationErrors.length===t.validationErrors.length&&e.validationErrors.every((n,r)=>n===t.validationErrors[r])&&Object.entries(e.validationDetails).every(([n,r])=>t.validationDetails[n]===r)}const $u=i.createContext(null);function yu(e){let{description:t,errorMessage:n,isInvalid:r,validationState:a}=e,{labelProps:o,fieldProps:s}=Ta(e),l=un([!!t,!!n,r,a]),c=un([!!t,!!n,r,a]);return s=q(s,{"aria-describedby":[l,c,e["aria-describedby"]].filter(Boolean).join(" ")||void 0}),{labelProps:o,fieldProps:s,descriptionProps:{id:l},errorMessageProps:{id:c}}}function xu(e,t,n){let{validationBehavior:r,focus:a}=e;ae(()=>{if(r==="native"&&n?.current&&"setCustomValidity"in n.current&&!n.current.disabled){let u=t.realtimeValidation.isInvalid?t.realtimeValidation.validationErrors.join(" ")||"Invalid value.":"";n.current.setCustomValidity(u),n.current.hasAttribute("title")||(n.current.title=""),t.realtimeValidation.isInvalid||t.updateValidation(Eu(n.current))}});let o=i.useRef(!1),s=Me(()=>{o.current||t.resetValidation()}),l=Me(u=>{t.displayValidation.isInvalid||t.commitValidation();let d=n?.current?.form;!u.defaultPrevented&&n&&d&&Cu(d)===n.current&&(a?a():n.current?.focus(),gc("keyboard")),u.preventDefault()}),c=Me(()=>{t.commitValidation()});i.useEffect(()=>{let u=n?.current;if(!u)return;let d=u.form,f=d?.reset;return d&&(d.reset=()=>{o.current=!window.event||window.event.type==="message"&&D(window.event)instanceof MessagePort,f?.call(d),o.current=!1}),u.addEventListener("invalid",l),u.addEventListener("change",c),d?.addEventListener("reset",s),()=>{u.removeEventListener("invalid",l),u.removeEventListener("change",c),d?.removeEventListener("reset",s),d&&(d.reset=f)}},[n,r])}function wu(e){let t=e.validity;return{badInput:t.badInput,customError:t.customError,patternMismatch:t.patternMismatch,rangeOverflow:t.rangeOverflow,rangeUnderflow:t.rangeUnderflow,stepMismatch:t.stepMismatch,tooLong:t.tooLong,tooShort:t.tooShort,typeMismatch:t.typeMismatch,valueMissing:t.valueMissing,valid:t.valid}}function Eu(e){return{isInvalid:!e.validity.valid,validationDetails:wu(e),validationErrors:e.validationMessage?[e.validationMessage]:[]}}function Cu(e){for(let t=0;t{h.onClick?.(k),ws(k,$,e.href,e.routerOptions)}})}}const Pu=i.createContext(null),Lu=i.forwardRef(function(t,n){[t,n]=fe(t,n,Pu);let r=t.href&&!t.isDisabled?"a":"span",{linkProps:a,isPressed:o}=Su({...t,elementType:r},n),s=le[r],{hoverProps:l,isHovered:c}=Fe(t),{focusProps:u,isFocused:d,isFocusVisible:f}=Ze(),h=ge({...t,defaultClassName:"react-aria-Link",values:{isCurrent:!!t["aria-current"],isDisabled:t.isDisabled||!1,isPressed:o,isHovered:c,isFocused:d,isFocusVisible:f}}),g=ue(t,{global:!0});return delete g.onClick,I.createElement(s,{ref:n,slot:t.slot||void 0,...q(g,h,a,l,u),"data-focused":d||void 0,"data-hovered":c||void 0,"data-pressed":o||void 0,"data-focus-visible":f||void 0,"data-current":!!t["aria-current"]||void 0,"data-disabled":t.isDisabled||void 0},h.children)}),ro=i.createContext({}),kr=({children:e,className:t,...n})=>{const r=I.useMemo(()=>ql(),[]),a=I.useMemo(()=>({slots:r}),[r]);return m.jsx(ro,{value:a,children:m.jsx(Lu,{"data-slot":"link",...n,className:$e(t,r?.base()),children:o=>m.jsx(m.Fragment,{children:typeof e=="function"?e(o):e})})})},Mu=({children:e,className:t,...n})=>{const{slots:r}=i.use(ro);return m.jsx(J.span,{className:ee(r?.icon,t),"data-default-icon":we(!e),"data-slot":"link-icon",...n,children:e??m.jsx(Zc,{"data-slot":"link-default-icon"})})},ao=Object.assign(kr,{Root:kr,Icon:Mu}),Sr=({children:e,className:t,fullWidth:n,isDisabled:r,isIconOnly:a,size:o,slot:s,style:l,variant:c,[ku]:u,...d})=>{const f=i.use(Tu),h=u===!0,g=o??(h?f?.size:void 0),v=c??(h?f?.variant:void 0),w=r??(h?f?.isDisabled:void 0),$=n??(h?f?.fullWidth:void 0),C=zl({fullWidth:$,isIconOnly:a,size:g,variant:v});return m.jsx(Ga,{className:$e(t,C),"data-slot":"button",isDisabled:w,slot:s,style:l,...d,children:k=>typeof e=="function"?e(k):e})},oo=Object.assign(Sr,{Root:Sr}),Ge=i.createContext({}),Pr=({children:e,className:t,variant:n="default",...r})=>{const a=I.useMemo(()=>Kl({variant:n}),[n]),o=I.useMemo(()=>({slots:a}),[a]),s=I.useMemo(()=>({variant:n}),[n]),l=m.jsx(J.div,{className:a.base({className:t}),"data-slot":"card",...r,children:e});return m.jsx(Ge,{value:o,children:n==="transparent"?l:m.jsx(Xa,{value:s,children:l})})},Au=({className:e,...t})=>{const{slots:n}=i.use(Ge);return m.jsx(J.div,{className:ee(n?.header,e),"data-slot":"card-header",...t})},Iu=({children:e,className:t,...n})=>{const{slots:r}=i.use(Ge);return m.jsx(J.h3,{className:ee(r?.title,t),"data-slot":"card-title",...n,children:e})},Ru=({children:e,className:t,...n})=>{const{slots:r}=i.use(Ge);return m.jsx(J.p,{className:ee(r?.description,t),"data-slot":"card-description",...n,children:e})},Vu=({className:e,...t})=>{const{slots:n}=i.use(Ge);return m.jsx(J.div,{className:ee(n?.content,e),"data-slot":"card-content",...t})},Fu=({className:e,...t})=>{const{slots:n}=i.use(Ge);return m.jsx(J.div,{className:ee(n?.footer,e),"data-slot":"card-footer",...t})},an=Object.assign(Pr,{Root:Pr,Header:Au,Title:Iu,Description:Ru,Content:Vu,Footer:Fu}),so=i.createContext({}),Lr=({children:e,className:t,color:n,size:r,variant:a,...o})=>{const s=I.useMemo(()=>Ul({color:n,size:r,variant:a}),[n,r,a]),l=I.useMemo(()=>typeof e=="string"||typeof e=="number"?m.jsx(io,{children:e}):e,[e]),c=I.useMemo(()=>({slots:s}),[s]);return m.jsx(so,{value:c,children:m.jsx(J.span,{...o,className:ee(s.base,t),"data-slot":"chip",children:l})})},io=({children:e,className:t,...n})=>{const{slots:r}=i.use(so);return m.jsx(J.span,{className:ee(r?.label,t),"data-slot":"chip-label",...n,children:e})},ef=Object.assign(Lr,{Root:Lr,Label:io}),lo=i.createContext({});let ju=e=>{let{onHoverStart:t,onHoverChange:n,onHoverEnd:r,...a}=e;return a};const Hu=st(function(t,n){[t,n]=fe(t,n,lo);let{hoverProps:r,isHovered:a}=Fe({...t,isDisabled:t.disabled}),{isFocused:o,isFocusVisible:s,focusProps:l}=Ze({isTextInput:!0,autoFocus:t.autoFocus}),c=!!t["aria-invalid"]&&t["aria-invalid"]!=="false",u=ge({...t,values:{isHovered:a,isFocused:o,isFocusVisible:s,isDisabled:t.disabled||!1,isInvalid:c},defaultClassName:"react-aria-Input"});return I.createElement(le.input,{...q(ju(t),l,r),...u,ref:n,"data-focused":o||void 0,"data-disabled":t.disabled||void 0,"data-hovered":a||void 0,"data-focus-visible":s||void 0,"data-invalid":c||void 0})});function Du(e,t){let{inputElementType:n="input",isDisabled:r=!1,isRequired:a=!1,isReadOnly:o=!1,type:s="text",validationBehavior:l="aria"}=e,[c,u]=Uc(e.value,e.defaultValue||"",e.onChange),{focusableProps:d}=Dn(e,t),f=hu({...e,value:c}),{isInvalid:h,validationErrors:g,validationDetails:v}=f.displayValidation,{labelProps:w,fieldProps:$,descriptionProps:C,errorMessageProps:k}=yu({...e,isInvalid:h,errorMessage:e.errorMessage||g}),T=ue(e,{labelable:!0});const L={type:s,pattern:e.pattern};let[F]=i.useState(c);return Gs(t,e.defaultValue??F,u),xu(e,f,t),{labelProps:w,inputProps:q(T,n==="input"?L:void 0,{disabled:r,readOnly:o,required:a&&l==="native","aria-required":a&&l==="aria"||void 0,"aria-invalid":h||void 0,"aria-errormessage":e["aria-errormessage"],"aria-activedescendant":e["aria-activedescendant"],"aria-autocomplete":e["aria-autocomplete"],"aria-haspopup":e["aria-haspopup"],"aria-controls":e["aria-controls"],value:c,onChange:j=>u(D(j).value),autoComplete:e.autoComplete,autoCapitalize:e.autoCapitalize,maxLength:e.maxLength,minLength:e.minLength,name:e.name,form:e.form,placeholder:e.placeholder,inputMode:e.inputMode,autoCorrect:e.autoCorrect,spellCheck:e.spellCheck,[parseInt(I.version,10)>=17?"enterKeyHint":"enterkeyhint"]:e.enterKeyHint,onCopy:e.onCopy,onCut:e.onCut,onPaste:e.onPaste,onCompositionEnd:e.onCompositionEnd,onCompositionStart:e.onCompositionStart,onCompositionUpdate:e.onCompositionUpdate,onSelect:e.onSelect,onBeforeInput:e.onBeforeInput,onInput:e.onInput,...d,...$}),descriptionProps:C,errorMessageProps:k,isInvalid:h,validationErrors:g,validationDetails:v}}const co=i.createContext({});let Nu=e=>{let{onHoverStart:t,onHoverChange:n,onHoverEnd:r,...a}=e;return a};const tf=i.forwardRef(function(t,n){[t,n]=fe(t,n,co);let{hoverProps:r,isHovered:a}=Fe(t),{isFocused:o,isFocusVisible:s,focusProps:l}=Ze({isTextInput:!0,autoFocus:t.autoFocus}),c=!!t["aria-invalid"]&&t["aria-invalid"]!=="false",u=ge({...t,values:{isHovered:a,isFocused:o,isFocusVisible:s,isDisabled:t.disabled||!1,isInvalid:c},defaultClassName:"react-aria-TextArea"});return I.createElement(le.textarea,{...q(Nu(t),l,r),...u,ref:n,"data-focused":o||void 0,"data-disabled":t.disabled||void 0,"data-hovered":a||void 0,"data-focus-visible":s||void 0,"data-invalid":c||void 0})}),Ou=i.createContext(null),_u=st(function(t,n){[t,n]=fe(t,n,Ou);let{validationBehavior:r}=Ea($u)||{},a=t.validationBehavior??r??"native",o=i.useRef(null);[t,o]=fe(t,o,du);let[s,l]=Ca(!t["aria-label"]&&!t["aria-labelledby"]),[c,u]=i.useState("input"),{labelProps:d,inputProps:f,descriptionProps:h,errorMessageProps:g,...v}=Du({...ec(t),inputElementType:c,label:l,validationBehavior:a},o),w=i.useCallback(k=>{o.current=k,k&&u(k instanceof HTMLTextAreaElement?"textarea":"input")},[o]),$=ge({...t,values:{isDisabled:t.isDisabled||!1,isInvalid:v.isInvalid,isReadOnly:t.isReadOnly||!1,isRequired:t.isRequired||!1},defaultClassName:"react-aria-TextField"}),C=ue(t,{global:!0});return delete C.id,I.createElement(le.div,{...C,...$,ref:n,slot:t.slot||void 0,"data-disabled":t.isDisabled||void 0,"data-invalid":v.isInvalid||void 0,"data-readonly":t.isReadOnly||void 0,"data-required":t.isRequired||void 0},I.createElement(wa,{values:[[Fn,{...d,ref:s}],[lo,{...f,ref:w}],[co,{...f,ref:w}],[mu,{role:"presentation",isInvalid:v.isInvalid,isDisabled:t.isDisabled||!1}],[On,{slots:{description:h,errorMessage:g}}],[bu,v]]},$.children))});var uo={};uo={close:"إغلاق",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} إشعار`,other:()=>`${t.number(e.count)} إشعارات`})}.`};var fo={};fo={close:"Затвори",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} известие`,other:()=>`${t.number(e.count)} известия`})}.`};var mo={};mo={close:"Zavřít",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} oznámení`,other:()=>`${t.number(e.count)} oznámení`})}.`};var bo={};bo={close:"Luk",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} besked`,other:()=>`${t.number(e.count)} beskeder`})}.`};var po={};po={close:"Schließen",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} Benachrichtigung`,other:()=>`${t.number(e.count)} Benachrichtigungen`})}.`};var ho={};ho={close:"Κλείσιμο",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} ειδοποίηση`,other:()=>`${t.number(e.count)} ειδοποιήσεις`})}.`};var vo={};vo={close:"Close",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} notification`,other:()=>`${t.number(e.count)} notifications`})}.`};var go={};go={close:"Cerrar",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} notificación`,other:()=>`${t.number(e.count)} notificaciones`})}.`};var $o={};$o={close:"Sule",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} teatis`,other:()=>`${t.number(e.count)} teatist`})}.`};var yo={};yo={close:"Sulje",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} ilmoitus`,other:()=>`${t.number(e.count)} ilmoitusta`})}.`};var xo={};xo={close:"Fermer",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} notification`,other:()=>`${t.number(e.count)} notifications`})}.`};var wo={};wo={close:"סגור",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} התראה`,other:()=>`${t.number(e.count)} התראות`})}.`};var Eo={};Eo={close:"Zatvori",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} obavijest`,other:()=>`${t.number(e.count)} obavijesti`})}.`};var Co={};Co={close:"Bezárás",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} értesítés`,other:()=>`${t.number(e.count)} értesítés`})}.`};var To={};To={close:"Chiudi",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} notifica`,other:()=>`${t.number(e.count)} notifiche`})}.`};var ko={};ko={close:"閉じる",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} 個の通知`,other:()=>`${t.number(e.count)} 個の通知`})}。`};var So={};So={close:"닫기",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)}개 알림`,other:()=>`${t.number(e.count)}개 알림`})}.`};var Po={};Po={close:"Uždaryti",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} pranešimas`,other:()=>`${t.number(e.count)} pranešimai`})}.`};var Lo={};Lo={close:"Aizvērt",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} paziņojums`,other:()=>`${t.number(e.count)} paziņojumi`})}.`};var Mo={};Mo={close:"Lukk",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} varsling`,other:()=>`${t.number(e.count)} varsler`})}.`};var Ao={};Ao={close:"Sluiten",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} melding`,other:()=>`${t.number(e.count)} meldingen`})}.`};var Io={};Io={close:"Zamknij",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} powiadomienie`,few:()=>`${t.number(e.count)} powiadomienia`,many:()=>`${t.number(e.count)} powiadomień`,other:()=>`${t.number(e.count)} powiadomienia`})}.`};var Ro={};Ro={close:"Fechar",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} notificação`,other:()=>`${t.number(e.count)} notificações`})}.`};var Vo={};Vo={close:"Fechar",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} notificação`,other:()=>`${t.number(e.count)} notificações`})}.`};var Fo={};Fo={close:"Închideţi",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} notificare`,other:()=>`${t.number(e.count)} notificări`})}.`};var jo={};jo={close:"Закрыть",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} уведомление`,other:()=>`${t.number(e.count)} уведомления`})}.`};var Ho={};Ho={close:"Zatvoriť",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} oznámenie`,few:()=>`${t.number(e.count)} oznámenia`,other:()=>`${t.number(e.count)} oznámení`})}.`};var Do={};Do={close:"Zapri",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} obvestilo`,two:()=>`${t.number(e.count)} obvestili`,few:()=>`${t.number(e.count)} obvestila`,other:()=>`${t.number(e.count)} obvestil`})}.`};var No={};No={close:"Zatvori",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} obaveštenje`,other:()=>`${t.number(e.count)} obaveštenja`})}.`};var Oo={};Oo={close:"Stäng",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} meddelande`,other:()=>`${t.number(e.count)} meddelanden`})}.`};var _o={};_o={close:"Kapat",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} bildirim`,other:()=>`${t.number(e.count)} bildirim`})}.`};var Bo={};Bo={close:"Закрити",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} сповіщення`,other:()=>`${t.number(e.count)} сповіщення`})}.`};var zo={};zo={close:"关闭",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} 个通知`,other:()=>`${t.number(e.count)} 个通知`})}。`};var Ko={};Ko={close:"關閉",notifications:(e,t)=>`${t.plural(e.count,{one:()=>`${t.number(e.count)} 個通知`,other:()=>`${t.number(e.count)} 個通知`})}。`};var _n={};_n={"ar-AE":uo,"bg-BG":fo,"cs-CZ":mo,"da-DK":bo,"de-DE":po,"el-GR":ho,"en-US":vo,"es-ES":go,"et-EE":$o,"fi-FI":yo,"fr-FR":xo,"he-IL":wo,"hr-HR":Eo,"hu-HU":Co,"it-IT":To,"ja-JP":ko,"ko-KR":So,"lt-LT":Po,"lv-LV":Lo,"nb-NO":Mo,"nl-NL":Ao,"pl-PL":Io,"pt-BR":Ro,"pt-PT":Vo,"ro-RO":Fo,"ru-RU":jo,"sk-SK":Ho,"sl-SI":Do,"sr-SP":No,"sv-SE":Oo,"tr-TR":_o,"uk-UA":Bo,"zh-CN":zo,"zh-TW":Ko};function Bu(e){return e&&e.__esModule?e.default:e}function zu(e,t,n){let{key:r,timer:a,timeout:o}=e.toast;i.useEffect(()=>{if(!(a==null||o==null))return a.reset(o),()=>{a.pause()}},[a,o]);let s=Ae(),l=un(),c=Qa(Bu(_n),"@react-aria/toast"),[u,d]=i.useState(!1);return ae(()=>{d(!0)},[]),{toastProps:{...ue(e,{labelable:!0}),role:"alertdialog","aria-modal":"false","aria-labelledby":e["aria-labelledby"]||s,"aria-describedby":e["aria-describedby"]||l,tabIndex:0},contentProps:{role:"alert","aria-atomic":"true","aria-hidden":u?void 0:"true"},titleProps:{id:s},descriptionProps:{id:l},closeButtonProps:{"aria-label":c.format("close"),onPress:()=>t.close(r)}}}const Uo=1,on=Symbol.for("react-aria-landmark-manager");function Ku(e){return document.addEventListener("react-aria-landmark-manager-change",e),()=>document.removeEventListener("react-aria-landmark-manager-change",e)}function Mr(){if(typeof document>"u")return null;let e=document[on];return e&&e.version>=Uo?e:(document[on]=new Zu,document.dispatchEvent(new CustomEvent("react-aria-landmark-manager-change")),document[on])}function Uu(){return Ja.useSyncExternalStore(Ku,Mr,Mr)}class Zu{constructor(){this.landmarks=[],this.isListening=!1,this.refCount=0,this.version=Uo,this.f6Handler=this.f6Handler.bind(this),this.focusinHandler=this.focusinHandler.bind(this),this.focusoutHandler=this.focusoutHandler.bind(this)}setupIfNeeded(){this.isListening||(document.addEventListener("keydown",this.f6Handler,{capture:!0}),document.addEventListener("focusin",this.focusinHandler,{capture:!0}),document.addEventListener("focusout",this.focusoutHandler,{capture:!0}),this.isListening=!0)}teardownIfNeeded(){!this.isListening||this.landmarks.length>0||this.refCount>0||(document.removeEventListener("keydown",this.f6Handler,{capture:!0}),document.removeEventListener("focusin",this.focusinHandler,{capture:!0}),document.removeEventListener("focusout",this.focusoutHandler,{capture:!0}),this.isListening=!1)}focusLandmark(t,n){this.landmarks.find(r=>r.ref.current===t)?.focus?.(n)}getLandmarksByRole(t){return new Set(this.landmarks.filter(n=>n.role===t))}getLandmarkByRole(t){return this.landmarks.find(n=>n.role===t)}addLandmark(t){if(this.setupIfNeeded(),this.landmarks.find(a=>a.ref===t.ref)||!t.ref.current)return;if(this.landmarks.filter(a=>a.role==="main").length>1,this.landmarks.length===0){this.landmarks=[t],this.checkLabels(t.role);return}let n=0,r=this.landmarks.length-1;for(;n<=r;){let a=Math.floor((n+r)/2),o=t.ref.current.compareDocumentPosition(this.landmarks[a].ref.current);!!(o&Node.DOCUMENT_POSITION_PRECEDING||o&Node.DOCUMENT_POSITION_CONTAINS)?n=a+1:r=a-1}this.landmarks.splice(n,0,t),this.checkLabels(t.role)}updateLandmark(t){let n=this.landmarks.findIndex(r=>r.ref===t.ref);n>=0&&(this.landmarks[n]={...this.landmarks[n],...t},this.checkLabels(this.landmarks[n].role))}removeLandmark(t){this.landmarks=this.landmarks.filter(n=>n.ref!==t),this.teardownIfNeeded()}checkLabels(t){let n=this.getLandmarksByRole(t);n.size>1&&[...n].filter(r=>!r.label)}closestLandmark(t){let n=new Map(this.landmarks.map(a=>[a.ref.current,a])),r=t;for(;r&&!n.has(r)&&r!==document.body&&r.parentElement;)r=r.parentElement;return n.get(r)}getNextLandmark(t,{backward:n}){let r=this.closestLandmark(t),a=n?this.landmarks.length-1:0;r&&(a=this.landmarks.indexOf(r)+(n?-1:1));let o=()=>{if(a<0){if(!t.dispatchEvent(new CustomEvent("react-aria-landmark-navigation",{detail:{direction:"backward"},bubbles:!0,cancelable:!0})))return!0;a=this.landmarks.length-1}else if(a>=this.landmarks.length){if(!t.dispatchEvent(new CustomEvent("react-aria-landmark-navigation",{detail:{direction:"forward"},bubbles:!0,cancelable:!0})))return!0;a=0}return a<0||a>=this.landmarks.length};if(o())return;let s=a;for(;this.landmarks[a].ref.current?.closest("[aria-hidden=true]");){if(a+=n?-1:1,o())return;if(a===s)break}return this.landmarks[a]}f6Handler(t){t.key==="F6"&&(t.altKey?this.focusMain():this.navigate(D(t),t.shiftKey))&&(t.preventDefault(),t.stopPropagation())}focusMain(){let t=this.getLandmarkByRole("main");return t&&t.ref.current&&t.ref.current.isConnected?(this.focusLandmark(t.ref.current,"forward"),!0):!1}navigate(t,n){let r=this.getNextLandmark(t,{backward:n});if(!r)return!1;if(r.lastFocused){let a=r.lastFocused;if(G(document.body,a))return a.focus(),!0}return r.ref.current&&r.ref.current.isConnected?(this.focusLandmark(r.ref.current,n?"backward":"forward"),!0):!1}focusinHandler(t){let n=this.closestLandmark(D(t));n&&n.ref.current!==D(t)&&this.updateLandmark({ref:n.ref,lastFocused:D(t)});let r=t.relatedTarget;if(r){let a=this.closestLandmark(r);a&&a.ref.current===r&&a.blur()}}focusoutHandler(t){let n=D(t),r=t.relatedTarget;if(!r||r===document){let a=this.closestLandmark(n);a&&a.ref.current===n&&a.blur()}}createLandmarkController(){let t=this;return t.refCount++,t.setupIfNeeded(),{navigate(n,r){let a=r?.from||document.activeElement;return t.navigate(a,n==="backward")},focusNext(n){let r=n?.from||document.activeElement;return t.navigate(r,!1)},focusPrevious(n){let r=n?.from||document.activeElement;return t.navigate(r,!0)},focusMain(){return t.focusMain()},dispose(){t&&(t.refCount--,t.teardownIfNeeded(),t=null)}}}registerLandmark(t){return this.landmarks.find(n=>n.ref===t.ref)?this.updateLandmark(t):this.addLandmark(t),()=>this.removeLandmark(t.ref)}}function Gu(e,t){const{role:n,"aria-label":r,"aria-labelledby":a,focus:o}=e;let s=Uu(),l=r||a,[c,u]=i.useState(!1),d=i.useCallback(()=>{u(!0)},[u]),f=i.useCallback(()=>{u(!1)},[u]);return ae(()=>{if(s)return s.registerLandmark({ref:t,label:l,role:n,focus:o||d,blur:f})},[s,l,t,n,o,d,f]),i.useEffect(()=>{c&&t.current?.focus()},[c,t]),{landmarkProps:{role:n,tabIndex:c?-1:void 0,"aria-label":r,"aria-labelledby":a}}}function Wu(e){return e&&e.__esModule?e.default:e}function qu(e,t,n){let r=Qa(Wu(_n),"@react-aria/toast"),{landmarkProps:a}=Gu({role:"region","aria-label":e["aria-label"]||r.format("notifications",{count:t.visibleToasts.length})},n),o=i.useRef(!1),s=i.useRef(!1),l=i.useCallback(()=>{o.current||s.current?t.pauseAll():t.resumeAll()},[t]),{hoverProps:c}=Fe({onHoverStart:()=>{o.current=!0,l()},onHoverEnd:()=>{o.current=!1,l()}}),u=i.useRef([]),d=i.useRef(t.visibleToasts),f=i.useRef(null);ae(()=>{if(f.current===-1||t.visibleToasts.length===0||!n.current){u.current=[],d.current=t.visibleToasts;return}if(u.current=[...n.current.querySelectorAll('[role="alertdialog"]')],d.current.length===t.visibleToasts.length&&t.visibleToasts.every(($,C)=>$.key===d.current[C].key)){d.current=t.visibleToasts;return}let v=d.current.map(($,C)=>({...$,i:C,isRemoved:!t.visibleToasts.some(k=>$.key===k.key)})),w=v.findIndex($=>$.i===f.current&&$.isRemoved);if(w>-1)if(Et()==="pointer"&&h.current?.isConnected)ce(h.current);else{let $=0,C,k;for(;$<=w;)v[$].isRemoved||(k=Math.max(0,$-1)),$++;for(;$=0&&k=0&&C{s.current=!0,h.current=v.relatedTarget,l()},onBlurWithin:()=>{s.current=!1,h.current=null,l()}});return i.useEffect(()=>{t.visibleToasts.length===0&&h.current?.isConnected&&(Et()==="pointer"?ce(h.current):h.current.focus(),h.current=null)},[n,t.visibleToasts.length]),i.useEffect(()=>()=>{h.current?.isConnected&&(Et()==="pointer"?ce(h.current):h.current.focus(),h.current=null)},[n]),{regionProps:q(a,c,g,{tabIndex:-1,"data-react-aria-top-layer":!0,onFocus:v=>{let w=D(v).closest('[role="alertdialog"]');f.current=u.current.findIndex($=>$===w)},onBlur:()=>{f.current=-1}})}}function Yu(e){let t=i.useCallback(a=>e.subscribe(a),[e]),n=i.useCallback(()=>e.visibleToasts,[e]);return{visibleToasts:Ja.useSyncExternalStore(t,n,n),add:(a,o)=>e.add(a,o),close:a=>e.close(a),pauseAll:()=>e.pauseAll(),resumeAll:()=>e.resumeAll()}}class Xu{constructor(t){this.queue=[],this.subscriptions=new Set,this.visibleToasts=[],this.maxVisibleToasts=t?.maxVisibleToasts??1/0,this.wrapUpdate=t?.wrapUpdate}runWithWrapUpdate(t,n){this.wrapUpdate?this.wrapUpdate(t,n):t()}subscribe(t){return this.subscriptions.add(t),()=>this.subscriptions.delete(t)}add(t,n={}){let r="_"+Math.random().toString(36).slice(2),a={...n,content:t,key:r,timer:n.timeout?new Qu(()=>this.close(r),n.timeout):void 0};return this.queue.unshift(a),this.updateVisibleToasts("add"),r}close(t){let n=this.queue.findIndex(r=>r.key===t);n>=0&&(this.queue[n].onClose?.(),this.queue.splice(n,1)),this.updateVisibleToasts("remove")}updateVisibleToasts(t){this.visibleToasts=this.queue.slice(0,this.maxVisibleToasts),this.runWithWrapUpdate(()=>{for(let n of this.subscriptions)n()},t)}pauseAll(){for(let t of this.visibleToasts)t.timer&&t.timer.pause()}resumeAll(){for(let t of this.visibleToasts)t.timer&&t.timer.resume()}clear(){this.queue=[],this.updateVisibleToasts("clear")}}class Qu{constructor(t,n){this.startTime=null,this.remaining=n,this.callback=t}reset(t){this.remaining=t,this.resume()}pause(){this.timerId!=null&&(clearTimeout(this.timerId),this.timerId=null,this.remaining-=Date.now()-this.startTime)}resume(){this.remaining<=0||(this.startTime=Date.now(),this.timerId=setTimeout(()=>{this.timerId=null,this.remaining=0,this.callback()},this.remaining))}}const Zt=i.createContext(null),Ju=i.forwardRef(function(t,n){let r=at(),a=Yu(t.queue),o=Bt(n),{regionProps:s}=qu(t,a,o),{focusProps:l,isFocused:c,isFocusVisible:u}=Ze(),{hoverProps:d,isHovered:f}=Fe({}),h=ge({...t,children:void 0,defaultClassName:"react-aria-ToastRegion",values:{visibleToasts:a.visibleToasts,isHovered:f,isFocused:c,isFocusVisible:u}}),{direction:g}=jn(),v,{getContainer:w}=lu();r||(v=document.body,w&&(v=w()));let $=ue(t,{global:!0}),C=I.createElement(Zt.Provider,{value:a},I.createElement(le.div,{...q($,h,s,l,d),dir:g,ref:o,"data-hovered":f||void 0,"data-focused":c||void 0,"data-focus-visible":u||void 0},typeof t.children=="function"?I.createElement(ed,{...t,render:void 0,className:void 0,style:{display:"contents"}},t.children):t.children));return a.visibleToasts.length>0&&v?Wr.createPortal(C,v):null}),ed=i.forwardRef(function(t,n){let r=i.useContext(Zt),{hoverProps:a,isHovered:o}=Fe({}),s=ge({...t,children:void 0,defaultClassName:"react-aria-ToastList",values:{visibleToasts:r.visibleToasts,isFocused:!1,isFocusVisible:!1,isHovered:o}});return I.createElement(le.ol,{...a,...s,ref:n},r.visibleToasts.map(l=>I.createElement("li",{key:l.key,style:{display:"contents"}},t.children({toast:l}))))}),td=i.forwardRef(function(t,n){let r=i.useContext(Zt),a=Bt(n),{toastProps:o,contentProps:s,titleProps:l,descriptionProps:c,closeButtonProps:u}=zu(t,r,a),{focusProps:d,isFocused:f,isFocusVisible:h}=Ze(),g=ge({...t,defaultClassName:"react-aria-Toast",values:{toast:t.toast,isFocused:f,isFocusVisible:h}}),v=ue(t,{global:!0});return I.createElement(le.div,{...q(v,g,o,d),ref:a,"data-focused":f||void 0,"data-focus-visible":h||void 0},I.createElement(wa,{values:[[Zo,s],[On,{slots:{[gn]:{},title:l,description:c}}],[Za,{slots:{[gn]:{},close:u}}]]},g.children))}),Zo=i.createContext({}),nd=i.forwardRef(function(t,n){return[t,n]=fe(t,n,Zo),I.createElement(le.div,{render:t.render,className:"react-aria-ToastContent",...t,ref:n},t.children)}),Be={blue:"\x1B[34m",green:"\x1B[32m",magenta:"\x1B[35m",red:"\x1B[31m",reset:"\x1B[0m",yellow:"\x1B[33m"},rd={debug:Be.magenta,error:Be.red,info:Be.blue,success:Be.green,warn:Be.yellow},ad={debug:"🔍",error:"❌",info:"ℹ️",success:"✅",warn:"⚠️"};class od{constructor(t={}){this.enabled=t.enabled??!0,this.prefix=t.prefix??"HeroUI"}formatMessage(t,n){const r=rd[t],a=ad[t];return`${r}[${this.prefix}]${Be.reset} ${a} ${n}`}log(t,n,...r){if(!this.enabled)return;const a=this.formatMessage(t,n);switch(t){case"error":console.error(a,...r);break;case"warn":console.warn(a,...r);break;default:console.log(a,...r)}}info(t,...n){this.log("info",t,...n)}success(t,...n){this.log("success",t,...n)}warn(t,...n){this.log("warn",t,...n)}error(t,...n){this.log("error",t,...n)}debug(t,...n){this.log("debug",t,...n)}divider(t="=",n=80){this.enabled&&console.log(t.repeat(n))}newline(){this.enabled&&console.log()}}new od({prefix:"HeroUI"});const sd=e=>{const t=`$$heroui.collection.${e}`,n=i.createContext(void 0),r=(c,u)=>i.Children.map(c,d=>i.isValidElement(d)?I.cloneElement(d,{[t]:u}):d),a=c=>{const{[t]:u,...d}=c;return[u,d]},o=c=>{const[u,d]=a(c),f=i.useContext(n);return[u??f,d]},s=({children:c,...u})=>m.jsx(n.Provider,{value:u,children:r(c,u)});return s.displayName=`HeroUI.CollectionSlot(${e})`,{key:t,inject:r,consume:a,useSlot:o,Injector:s,withSlot:(c,u)=>{const d=i.forwardRef(function(h,g){const[v,w]=o(h),{children:$,...C}=w;if(!v)return m.jsx(c,{...C,ref:g,children:$});if(u)return u({...C,children:$},v,g);const{className:k,render:T,...L}=v;return m.jsx(c,{...C,ref:g,children:T?T({children:$,className:k,...L}):m.jsx("div",{className:k,"data-slot":`${e}-container`,...L,children:$})})});return d.displayName=`HeroUI.withCollectionSlot(${c.displayName||c.name||e})`,d},Context:n}},id=i.createContext({});sd("combo-box.inputGroup");const Go=12,Wo=3,ld=Number.MAX_SAFE_INTEGER,qo=.05,cd=460,Tt=4e3,Yo=300,ud=["altKey","KeyT"],Xo=i.createContext({}),Ar=({children:e,className:t,fullWidth:n,variant:r,...a})=>{const o=I.useMemo(()=>Ql({fullWidth:n}),[n]),s=I.useMemo(()=>({variant:r}),[r]);return m.jsx(_u,{"data-slot":"textfield",...a,className:$e(t,o),children:l=>m.jsx(Xo,{value:s,children:m.jsx(m.Fragment,{children:typeof e=="function"?e(l):e})})})},Ir=({className:e,fullWidth:t,variant:n,...r})=>{const a=i.use(Xo),o=i.use(id),s=n??a.variant??o.variant;return m.jsx(Hu,{className:$e(e,Gl({fullWidth:t,variant:s})),"data-slot":"input",...r})},nf=Object.assign(Ir,{Root:Ir}),Rr=({children:e,className:t,isDisabled:n,isInvalid:r,isRequired:a,...o})=>m.jsx(nc,{className:Wl({isRequired:a,isDisabled:n,isInvalid:r,className:t}),"data-slot":"label",...o,children:e}),rf=Object.assign(Rr,{Root:Rr}),Qo=globalThis?.document?i.useLayoutEffect:i.useEffect,sn=new Map;function dd(e,t,n=!0){const r=at();return i.useMemo(()=>{if(t!==void 0)return t;if(!r){if(n&&sn.has(e))return sn.get(e);try{const a=document.documentElement,o=getComputedStyle(a).getPropertyValue(e).trim()||void 0;return n&&sn.set(e,o),o}catch{return}}},[e,t,r,n])}const Vr=({animationType:e,className:t,...n})=>{const r=dd("--skeleton-animation",e),a=I.useMemo(()=>Yl({animationType:r}),[r]);return m.jsx(J.div,{className:a.base({className:t}),...n})},af=Object.assign(Vr,{Root:Vr}),fd=({...e})=>{const t=i.useId();return m.jsxs("svg",{"data-slot":"spinner-icon",viewBox:"0 0 24 24",...e,children:[m.jsxs("defs",{children:[m.jsxs("linearGradient",{id:`«data-slot-icon-def-1»-${t}`,x1:"50%",x2:"50%",y1:"5.271%",y2:"91.793%",children:[m.jsx("stop",{offset:"0%",stopColor:"currentColor"}),m.jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:.55})]}),m.jsxs("linearGradient",{id:`«data-slot-icon-def-2»-${t}`,x1:"50%",x2:"50%",y1:"15.24%",y2:"87.15%",children:[m.jsx("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:0}),m.jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:.55})]})]}),m.jsxs("g",{fill:"none",children:[m.jsx("path",{d:"m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"}),m.jsx("path",{d:"M8.749.021a1.5 1.5 0 0 1 .497 2.958A7.5 7.5 0 0 0 3 10.375a7.5 7.5 0 0 0 7.5 7.5v3c-5.799 0-10.5-4.7-10.5-10.5C0 5.23 3.726.865 8.749.021",fill:`url(#«data-slot-icon-def-1»-${t})`,transform:"translate(1.5 1.625)"}),m.jsx("path",{d:"M15.392 2.673a1.5 1.5 0 0 1 2.119-.115A10.48 10.48 0 0 1 21 10.375c0 5.8-4.701 10.5-10.5 10.5v-3a7.5 7.5 0 0 0 5.007-13.084a1.5 1.5 0 0 1-.115-2.118",fill:`url(#«data-slot-icon-def-2»-${t})`,transform:"translate(1.5 1.625)"})]})]})},Fr=({className:e,color:t,size:n,...r})=>m.jsx(J.span,{"aria-label":"Loading","data-slot":"spinner",role:"status",...r,className:Xl({className:e,color:t,size:n}),children:m.jsx(fd,{"aria-hidden":!0})}),md=Object.assign(Fr,{Root:Fr}),of=Object.assign(Ar,{Root:Ar}),bd=e=>{const[t,n]=i.useState(void 0),r=i.useCallback(()=>{const a=e.current;if(!a)return;const o=a.style.height;a.style.height="auto";const s=a.scrollHeight;a.style.height=o,n(l=>l!==s?s:l)},[e]);return Qo(()=>{r()},[r]),i.useEffect(()=>{const a=e.current;if(!a)return;let o=0;const s=()=>{o||(o=requestAnimationFrame(()=>{o=0,r()}))},l=new MutationObserver(s);l.observe(a,{attributeFilter:["class"],attributes:!0,characterData:!0,childList:!0,subtree:!0});let c=a.getBoundingClientRect().width;const u=new ResizeObserver(d=>{const f=d[0]?.contentRect.width;f===void 0||Math.abs(f-c)<.5||(c=f,s())});return u.observe(a),()=>{l.disconnect(),u.disconnect(),cancelAnimationFrame(o)}},[e,r]),{height:t}},pd=typeof window<"u"?i.useLayoutEffect:i.useEffect,hd=typeof window>"u";function vd(e,{defaultValue:t=!1,initializeWithValue:n=!0}={}){const r=l=>hd?t:window.matchMedia(l).matches,[a,o]=i.useState(()=>n?r(e):t);function s(){o(r(e))}return pd(()=>{const l=window.matchMedia(e);return s(),l.addListener?l.addListener(s):l.addEventListener("change",s),()=>{l.removeListener?l.removeListener(s):l.removeEventListener("change",s)}},[e]),a}const ln=typeof performance<"u"&&typeof performance.now=="function"?()=>performance.now():()=>Date.now(),jr=new WeakSet;class gd{startTime=null;constructor(t,n){this.remaining=n,this.callback=t}reset(t){this.remaining=t,this.resume()}pause(){this.timerId!=null&&(clearTimeout(this.timerId),this.timerId=null,this.remaining-=ln()-(this.startTime??ln()))}resume(){this.remaining<=0||(this.startTime=ln(),this.timerId=setTimeout(()=>{this.timerId=null,this.remaining=0,this.callback()},this.remaining))}}class rt extends Xu{static didWarnMissingNotify=!1;exitTimers=new Map;exitingSnapshot=new Set;exitSubscriptions=new Set;suspensions=new Set;isBatchingExits=!1;constructor(t,n=Yo){super(t),this.exitDuration=n}suspendTimers(t){const n=this.suspensions.size===0;this.suspensions.add(t),n&&super.pauseAll()}resumeTimers(t){this.suspensions.delete(t),this.suspensions.size===0&&super.resumeAll()}pauseAll(){this.suspendTimers("external")}resumeAll(){this.resumeTimers("external")}guardTimer(t){if(jr.has(t))return;jr.add(t);const n=t.resume.bind(t),r=t.reset.bind(t);t.resume=()=>{this.suspensions.size>0||t.timerId!=null||n()},t.reset=a=>{t.pause(),r(a)}}add(t,n){const r=super.add(t,n),a=this.visibleToasts.find(o=>o.key===r)?.timer;return a&&this.guardTimer(a),r}updateToast(t,n,r){if(this.exitTimers.has(t))return!1;const a=this.visibleToasts.find(s=>s.key===t);if(!a)return!1;if(a.content=n,r&&"onClose"in r&&(a.onClose=r.onClose),r?.timeout!==void 0)if(a.timer?.pause(),a.timeout=r.timeout,r.timeout>0){const s=new gd(()=>this.close(t),r.timeout);this.guardTimer(s),a.timer=s}else a.timer=void 0;const o=this.updateVisibleToasts;return typeof o=="function"?o.call(this,"add"):(rt.didWarnMissingNotify||(rt.didWarnMissingNotify=!0,console.warn("[HeroUI Toast] react-stately no longer exposes updateVisibleToasts; toast updates fall back to a partial re-render.")),this.exitingSnapshot=new Set(this.exitTimers.keys()),this.notifyExitSubscribers()),!0}getExitingKeys=()=>this.exitingSnapshot;subscribeExiting=t=>(this.exitSubscriptions.add(t),()=>{this.exitSubscriptions.delete(t)});notifyExitSubscribers(){for(const t of this.exitSubscriptions)t()}close(t){const n=this.visibleToasts.find(o=>o.key===t);if(this.exitTimers.has(t)||!n)return;if(!(this.exitDuration>0&&typeof window<"u"&&!window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches)){super.close(t);return}const a=n.onClose;n.onClose=void 0,this.exitTimers.set(t,setTimeout(()=>{this.exitTimers.delete(t),this.exitingSnapshot=new Set(this.exitTimers.keys()),super.close(t),this.isBatchingExits||this.notifyExitSubscribers()},this.exitDuration)),this.isBatchingExits||(this.exitingSnapshot=new Set(this.exitTimers.keys()),this.notifyExitSubscribers()),a?.()}clear(){this.isBatchingExits=!0;try{for(const t of[...this.visibleToasts])this.close(t.key)}finally{this.isBatchingExits=!1,this.exitingSnapshot=new Set(this.exitTimers.keys()),this.notifyExitSubscribers()}}destroy(){for(const t of this.exitTimers.values())clearTimeout(t);this.exitTimers.clear(),this.exitingSnapshot=new Set,this.exitSubscriptions.clear(),this.suspensions.clear();for(const t of this.visibleToasts)t.timer?.pause()}}const $d=e=>e instanceof rt;class Jo{constructor(t){this.maxVisibleToasts=t?.maxVisibleToasts,this.queue=new rt({maxVisibleToasts:ld,wrapUpdate:t?.wrapUpdate},t?.exitDuration??Yo)}add(t,n){return this.queue.add(t,{...n,timeout:n?.timeout??Tt})}close(t){this.queue.close(t)}update(t,n,r){return this.queue.updateToast(t,n,r)}pauseAll(){this.queue.pauseAll()}resumeAll(){this.queue.resumeAll()}clear(){this.queue.clear()}subscribe(t){return this.queue.subscribe(t)}get visibleToasts(){return this.queue.visibleToasts}getQueue(){return this.queue}destroy(){this.queue.destroy()}}function yd(e){const t=(o,s)=>({title:o,description:s?.description,indicator:s?.indicator,variant:s?.variant||"default",actionProps:s?.actionProps,isLoading:s?.isLoading}),n=o=>({timeout:o?.timeout??Tt,onClose:o?.onClose}),r=o=>({...o&&"timeout"in o?{timeout:o.timeout}:null,...o&&"onClose"in o?{onClose:o.onClose}:null}),a=(o,s)=>e.add(t(o,s),n(s));return a.success=(o,s)=>a(o,{...s,variant:"success"}),a.danger=(o,s)=>a(o,{...s,variant:"danger"}),a.info=(o,s)=>a(o,{...s,variant:"accent"}),a.warning=(o,s)=>a(o,{...s,variant:"warning"}),a.update=(o,s,l)=>{const c=t(s,l);return e.update(o,c,r(l))?o:e.add(c,n(l))},a.promise=(o,s)=>{const l=typeof o=="function"?o():o,c=e.add(t(s.loading,{isLoading:!0}),{timeout:0});return l.then(u=>{const d=typeof s.success=="function"?s.success(u):s.success;return a.update(c,d,{isLoading:!1,timeout:Tt,variant:"success"})}).catch(u=>{const d=typeof s.error=="function"?s.error(u):s.error;return a.update(c,d,{isLoading:!1,timeout:Tt,variant:"danger"})}),c},a.getQueue=()=>e.getQueue(),a.close=o=>e.close(o),a.pauseAll=()=>e.pauseAll(),a.resumeAll=()=>e.resumeAll(),a.clear=()=>e.clear(),a}const xd=new Jo,jt=yd(xd),ke=i.createContext({}),Hr=["altKey","ctrlKey","metaKey","shiftKey"],wd=new Set,Dr=()=>wd,Ed=()=>()=>{},Cd=(e,t)=>{if(!t){document.activeElement?.blur();return}const n=o=>o instanceof HTMLElement&&o.matches('[data-slot="toast"]:not([data-exiting="true"]):not([data-hidden="true"])');let r=null,a=e.previousElementSibling;for(;a;){if(n(a)){r=a;break}a=a.previousElementSibling}if(!r)for(a=e.nextElementSibling;a;){if(n(a)){r=a;break}a=a.nextElementSibling}if(!r){const o=e.closest('[data-slot="toast-region"]');if(o){for(const s of o.querySelectorAll('[data-slot="toast"]:not([data-exiting="true"]):not([data-hidden="true"])'))if(s!==e){r=s;break}}}r?r.focus():document.activeElement?.blur()},Bn=({children:e,className:t,placement:n,ref:r,scaleFactor:a,style:o,toast:s,variant:l,...c})=>{const{exitingKeys:u,gap:d=Go,heightsByKey:f,isExpanded:h=!1,maxVisibleToasts:g=Wo,onToastHeightChange:v,onToastHeightRemove:w,placement:$,scaleFactor:C,slots:k}=i.use(ke),T=n??$,L=a??C??qo,j=i.use(Zt).visibleToasts,V=s?.key,x=V!=null&&(u?.has(V)??!1),R=i.useMemo(()=>!u||u.size===0?j:j.filter(B=>!u.has(B.key)||B.key===V),[u,V,j]),M=j.indexOf(s),z=R.indexOf(s),Z=z<=0,Q=!x&&z>=g,p=i.useRef(null),A=i.useMemo(()=>ot(p,r),[r]),{height:H}=bd(p),{isFocusVisible:E}=xc(),[K,b]=i.useState(!0);i.useEffect(()=>{let B=0;const ne=requestAnimationFrame(()=>{B=requestAnimationFrame(()=>{b(!1)})});return()=>{cancelAnimationFrame(ne),cancelAnimationFrame(B)}},[]),i.useLayoutEffect(()=>{V&&typeof H=="number"&&v?.(V,H)},[V,H,v]),i.useEffect(()=>{if(V)return()=>{w?.(V)}},[V,w]),i.useLayoutEffect(()=>{const B=p.current;if(B)if(B.tabIndex=Z||h&&!Q&&!x?0:-1,Q||x)if(B.contains(document.activeElement)&&Cd(B,E),B.setAttribute("aria-hidden","true"),x)for(const ne of B.querySelectorAll("button, a"))ne.tabIndex=-1;else B.setAttribute("inert","");else B.removeAttribute("aria-hidden"),B.removeAttribute("inert")},[Z,h,Q,x,E]);const y=i.useMemo(()=>{const B=R[0]?.key,ne=(B?f?.[B]:void 0)??H??0;let oe=0;for(let U=0;U({...y,...B}));return m.jsx(td,{...c,ref:A,className:$e(t,k?.toast({variant:l})),"data-entering":we(K),"data-exiting":we(x),"data-expanded":we(h),"data-frontmost":we(Z),"data-hidden":we(Q),"data-index":z,"data-placement":T,"data-slot":"toast",style:O,toast:s,children:e})};Bn.displayName="HeroUI.Toast";const es=({children:e,className:t,...n})=>{const{slots:r}=i.use(ke);return m.jsx(nd,{...n,className:ee(r?.content,t),"data-slot":"toast-content",children:e})},Ht=({children:e,className:t,variant:n,...r})=>{const{slots:a}=i.use(ke),o=I.isValidElement(e)?e.type:e??"default",s=i.useRef(o),[l,c]=i.useState(!1);Qo(()=>{s.current!==o&&(s.current=o,c(!0))},[o]);const u=i.useCallback(()=>{switch(n){case"accent":return m.jsx(Ft,{"data-slot":"toast-default-icon"});case"success":return m.jsx(Ya,{"data-slot":"toast-default-icon"});case"warning":return m.jsx(Wa,{"data-slot":"toast-default-icon"});case"danger":return m.jsx(qa,{"data-slot":"toast-default-icon"});default:return m.jsx(Ft,{"data-slot":"toast-default-icon"})}},[n]);return m.jsx(J.div,{...r,className:ee(a?.indicator,t),"data-slot":"toast-indicator","data-swapped":we(l),children:e??u()})};Ht.displayName="HeroUI.ToastIndicator";const zn=({children:e,className:t,...n})=>{const{slots:r}=i.use(ke);return m.jsx(eo,{...n,className:ee(r?.title,t),"data-slot":"toast-title",slot:"title",children:e})};zn.displayName="HeroUI.ToastTitle";const Kn=({children:e,className:t,...n})=>{const{slots:r}=i.use(ke);return m.jsx(eo,{...n,className:ee(r?.description,t),"data-slot":"toast-description",slot:"description",children:e})};Kn.displayName="HeroUI.ToastDescription";const Un=({className:e,...t})=>{const{slots:n}=i.use(ke);return m.jsx(fu,{...t,className:$e(e,n?.close()),"data-slot":"toast-close",slot:"close"})};Un.displayName="HeroUI.ToastCloseButton";const Dt=({children:e,className:t,...n})=>{const{slots:r}=i.use(ke);return m.jsx(oo,{...n,className:$e(t,r?.action?.()),"data-slot":"toast-action-button",children:e})};Dt.displayName="HeroUI.ToastActionButton";const ts=({children:e,className:t,gap:n=Go,hotkey:r=ud,isExpanded:a=!1,maxVisibleToasts:o,placement:s="bottom",queue:l,ref:c,scaleFactor:u=qo,style:d,width:f=cd,...h})=>{const g=i.useMemo(()=>Jl({placement:s}),[s]),v=vd("(max-width: 768px)"),[w,$]=i.useState({}),C=i.useRef(r);i.useEffect(()=>{C.current=r},[r]);const k=i.useMemo(()=>l?l.getQueue():jt.getQueue(),[l]),T=$d(k)?k:null,L=i.useSyncExternalStore(T?T.subscribeExiting:Ed,T?T.getExitingKeys:Dr,Dr),F=i.useCallback(b=>k.subscribe(b),[k]),j=i.useSyncExternalStore(F,()=>k.visibleToasts.length,()=>0),[V,x]=i.useState(!1),R=i.useRef(!1),M=i.useCallback(b=>{const y=_=>{typeof c=="function"?c(_):c&&typeof c=="object"&&(c.current=_)};if(y(b),!b)return;const O=()=>{!R.current&&!b.contains(document.activeElement)&&x(!1)},B=_=>{_.pointerType!=="touch"&&(R.current=!0,x(!0))},ne=_=>{_.pointerType!=="touch"&&(R.current=!1,O())},oe=()=>{x(!0)},U=_=>{_.relatedTarget instanceof Node&&b.contains(_.relatedTarget)||O()},W=_=>{_.pointerType==="touch"||b.contains(_.target)||(R.current=!1,O())},Se=_=>{_.key==="Escape"&&(b.contains(document.activeElement)&&document.activeElement.blur(),R.current=!1,x(!1))},qe=_=>{const je=C.current;if(je.length===0)return;const He=Hr.every(me=>_[me]===je.includes(me)),De=je.every(me=>Hr.includes(me)||_.code===me);!He||!De||(_.preventDefault(),b.focus())};return b.addEventListener("pointerenter",B),b.addEventListener("pointermove",B),b.addEventListener("pointerleave",ne),b.addEventListener("focusin",oe),b.addEventListener("focusout",U),b.addEventListener("keydown",Se),document.addEventListener("pointerover",W,!0),document.addEventListener("keydown",qe),()=>{b.removeEventListener("pointerenter",B),b.removeEventListener("pointermove",B),b.removeEventListener("pointerleave",ne),b.removeEventListener("focusin",oe),b.removeEventListener("focusout",U),b.removeEventListener("keydown",Se),document.removeEventListener("pointerover",W,!0),document.removeEventListener("keydown",qe),R.current=!1,x(!1),y(null)}},[c]);i.useEffect(()=>{if(!(!T||!V))return T.suspendTimers("interaction"),()=>{T.resumeTimers("interaction")}},[T,V]),i.useEffect(()=>{if(typeof document>"u"||!T)return;const b=()=>{document.hidden?T.suspendTimers("visibility"):T.resumeTimers("visibility")};return document.addEventListener("visibilitychange",b),()=>{document.removeEventListener("visibilitychange",b),T.resumeTimers("visibility")}},[T]);const z=j-L.size,Z=(a||V)&&z>1,Q=i.useMemo(()=>{const b=l&&"maxVisibleToasts"in l?l.maxVisibleToasts:void 0;return o??b??Wo},[o,l]),p=i.useCallback((b,y)=>{$(O=>O[b]===y?O:{...O,[b]:y})},[]),A=i.useCallback(b=>{$(y=>{if(!(b in y))return y;const O={...y};return delete O[b],O})},[]),H=i.useCallback(b=>{const{actionProps:y,description:O,indicator:B,isLoading:ne,title:oe,variant:U}=b.toast.content??{};return m.jsxs(Bn,{placement:s,scaleFactor:u,toast:b.toast,variant:U,children:[B===null?null:ne?m.jsx(Ht,{variant:U,children:m.jsx(md,{color:"current",size:"sm"})}):m.jsx(Ht,{variant:U,children:B}),m.jsxs(es,{children:[!!oe&&m.jsx(zn,{children:oe}),!!O&&m.jsx(Kn,{children:O}),v&&y?.children?m.jsx(Dt,{...y,children:y.children}):null]}),!v&&y?.children?m.jsx(Dt,{...y,children:y.children}):null,m.jsx(Un,{})]})},[v,s,u]),E=i.useMemo(()=>({exitingKeys:L,gap:n,heightsByKey:w,isExpanded:Z,maxVisibleToasts:Q,onToastHeightChange:p,onToastHeightRemove:A,placement:s,scaleFactor:u,slots:g}),[L,n,p,A,Z,s,Q,u,g,w]),K=Vn(d,b=>({"--gap":`${n}px`,"--placement":s,"--scale-factor":u,"--toast-width":typeof f=="number"?`${f}px`:f,...b}));return m.jsx(Ju,{...h,ref:M,className:$e(t,g?.region()),"data-expanded":we(Z),"data-slot":"toast-region",queue:k,style:K,children:b=>{const y=b.toast.content,O={...b,isLoading:y?.isLoading??!1};return m.jsx(ke,{value:E,children:typeof e>"u"?H(b):typeof e=="function"?e(O):e})}})};ts.displayName="HeroUI.ToastProvider";const Td=Object.assign(Bn,{Provider:ts,Content:es,Indicator:Ht,Title:zn,Description:Kn,ActionButton:Dt,CloseButton:Un,Queue:Jo,toast:jt}),kd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M244,56v48a12,12,0,0,1-12,12H184a12,12,0,1,1,0-24H201.1l-19-17.38c-.13-.12-.26-.24-.38-.37A76,76,0,1,0,127,204h1a75.53,75.53,0,0,0,52.15-20.72,12,12,0,0,1,16.49,17.45A99.45,99.45,0,0,1,128,228h-1.37A100,100,0,1,1,198.51,57.06L220,76.72V56a12,12,0,0,1,24,0Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z",opacity:"0.2"}),i.createElement("path",{d:"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1-5.66-13.66l17-17-10.55-9.65-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,1,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60l10.93,10L226.34,50.3A8,8,0,0,1,240,56Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M238,56v48a6,6,0,0,1-6,6H184a6,6,0,0,1,0-12h32.55l-30.38-27.8c-.06-.06-.12-.13-.19-.19a82,82,0,1,0-1.7,117.65,6,6,0,0,1,8.24,8.73A93.46,93.46,0,0,1,128,222h-1.28A94,94,0,1,1,194.37,61.4L226,90.35V56a6,6,0,1,1,12,0Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M236,56v48a4,4,0,0,1-4,4H184a4,4,0,0,1,0-8h37.7L187.53,68.69l-.13-.12a84,84,0,1,0-1.75,120.51,4,4,0,0,1,5.5,5.82A91.43,91.43,0,0,1,128,220h-1.26A92,92,0,1,1,193,62.84l35,32.05V56a4,4,0,1,1,8,0Z"}))]]),Sd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M204,64V168a12,12,0,0,1-24,0V93L72.49,200.49a12,12,0,0,1-17-17L163,76H88a12,12,0,0,1,0-24H192A12,12,0,0,1,204,64Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M192,64V168L88,64Z",opacity:"0.2"}),i.createElement("path",{d:"M192,56H88a8,8,0,0,0-5.66,13.66L128.69,116,58.34,186.34a8,8,0,0,0,11.32,11.32L140,127.31l46.34,46.35A8,8,0,0,0,200,168V64A8,8,0,0,0,192,56Zm-8,92.69-38.34-38.34h0L107.31,72H184Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,64V168a8,8,0,0,1-13.66,5.66L140,127.31,69.66,197.66a8,8,0,0,1-11.32-11.32L128.69,116,82.34,69.66A8,8,0,0,1,88,56H192A8,8,0,0,1,200,64Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M198,64V168a6,6,0,0,1-12,0V78.48L68.24,196.24a6,6,0,0,1-8.48-8.48L177.52,70H88a6,6,0,0,1,0-12H192A6,6,0,0,1,198,64Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M200,64V168a8,8,0,0,1-16,0V83.31L69.66,197.66a8,8,0,0,1-11.32-11.32L172.69,72H88a8,8,0,0,1,0-16H192A8,8,0,0,1,200,64Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M196,64V168a4,4,0,0,1-8,0V73.66L66.83,194.83a4,4,0,0,1-5.66-5.66L182.34,68H88a4,4,0,0,1,0-8H192A4,4,0,0,1,196,64Z"}))]]),Pd=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M87.5,151.52l64-64a12,12,0,0,1,17,17l-64,64a12,12,0,0,1-17-17Zm131-114a60.08,60.08,0,0,0-84.87,0L103.51,67.61a12,12,0,0,0,17,17l30.07-30.06a36,36,0,0,1,50.93,50.92L171.4,135.52a12,12,0,1,0,17,17l30.08-30.06A60.09,60.09,0,0,0,218.45,37.55ZM135.52,171.4l-30.07,30.08a36,36,0,0,1-50.92-50.93l30.06-30.07a12,12,0,0,0-17-17L37.55,133.58a60,60,0,0,0,84.88,84.87l30.06-30.07a12,12,0,0,0-17-17Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M209.94,113.94l-96,96a48,48,0,0,1-67.88-67.88l96-96a48,48,0,0,1,67.88,67.88Z",opacity:"0.2"}),i.createElement("path",{d:"M165.66,90.34a8,8,0,0,1,0,11.32l-64,64a8,8,0,0,1-11.32-11.32l64-64A8,8,0,0,1,165.66,90.34ZM215.6,40.4a56,56,0,0,0-79.2,0L106.34,70.45a8,8,0,0,0,11.32,11.32l30.06-30a40,40,0,0,1,56.57,56.56l-30.07,30.06a8,8,0,0,0,11.31,11.32L215.6,119.6a56,56,0,0,0,0-79.2ZM138.34,174.22l-30.06,30.06a40,40,0,1,1-56.56-56.57l30.05-30.05a8,8,0,0,0-11.32-11.32L40.4,136.4a56,56,0,0,0,79.2,79.2l30.06-30.07a8,8,0,0,0-11.32-11.31Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM144.56,173.66l-21.45,21.45a44,44,0,0,1-62.22-62.22l21.45-21.46a8,8,0,0,1,11.32,11.31L72.2,144.2a28,28,0,0,0,39.6,39.6l21.45-21.46a8,8,0,0,1,11.31,11.32Zm-34.9-16a8,8,0,0,1-11.32-11.32l48-48a8,8,0,0,1,11.32,11.32Zm85.45-34.55-21.45,21.45a8,8,0,0,1-11.32-11.31L183.8,111.8a28,28,0,0,0-39.6-39.6L122.74,93.66a8,8,0,0,1-11.31-11.32l21.46-21.45a44,44,0,0,1,62.22,62.22Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M164.25,91.75a6,6,0,0,1,0,8.49l-64,64a6,6,0,0,1-8.49-8.48l64-64A6,6,0,0,1,164.25,91.75ZM214.2,41.8a54.07,54.07,0,0,0-76.38,0L107.75,71.85a6,6,0,0,0,8.49,8.49l30.07-30.06a42,42,0,0,1,59.41,59.41l-30.08,30.07a6,6,0,1,0,8.49,8.49l30.07-30.07A54,54,0,0,0,214.2,41.8ZM139.76,175.64l-30.07,30.08a42,42,0,0,1-59.41-59.41l30.06-30.07a6,6,0,0,0-8.49-8.49l-30,30.07a54,54,0,0,0,76.38,76.39l30.07-30.08a6,6,0,0,0-8.49-8.49Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M165.66,90.34a8,8,0,0,1,0,11.32l-64,64a8,8,0,0,1-11.32-11.32l64-64A8,8,0,0,1,165.66,90.34ZM215.6,40.4a56,56,0,0,0-79.2,0L106.34,70.45a8,8,0,0,0,11.32,11.32l30.06-30a40,40,0,0,1,56.57,56.56l-30.07,30.06a8,8,0,0,0,11.31,11.32L215.6,119.6a56,56,0,0,0,0-79.2ZM138.34,174.22l-30.06,30.06a40,40,0,1,1-56.56-56.57l30.05-30.05a8,8,0,0,0-11.32-11.32L40.4,136.4a56,56,0,0,0,79.2,79.2l30.06-30.07a8,8,0,0,0-11.32-11.31Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M162.84,93.16a4,4,0,0,1,0,5.66l-64,64a4,4,0,0,1-5.66-5.66l64-64A4,4,0,0,1,162.84,93.16Zm49.95-49.95a52.07,52.07,0,0,0-73.56,0L109.17,73.27a4,4,0,0,0,5.65,5.66l30.07-30.06a44,44,0,0,1,62.24,62.24l-30.07,30.06a4,4,0,0,0,5.66,5.66l30.07-30.06A52.07,52.07,0,0,0,212.79,43.21ZM141.17,177.06l-30.06,30.07a44,44,0,0,1-62.24-62.24l30.06-30.06a4,4,0,0,0-5.66-5.66L43.21,139.23a52,52,0,0,0,73.56,73.56l30.06-30.07a4,4,0,1,0-5.66-5.66Z"}))]]),Ld=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,76H180V56A52,52,0,0,0,76,56V76H48A20,20,0,0,0,28,96V208a20,20,0,0,0,20,20H208a20,20,0,0,0,20-20V96A20,20,0,0,0,208,76ZM100,56a28,28,0,0,1,56,0V76H100ZM204,204H52V100H204Zm-76-92a32,32,0,0,0-12,61.66V180a12,12,0,0,0,24,0v-6.34A32,32,0,0,0,128,112Zm0,24a8,8,0,1,1-8,8A8,8,0,0,1,128,136Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,88H48a8,8,0,0,0-8,8V208a8,8,0,0,0,8,8H208a8,8,0,0,0,8-8V96A8,8,0,0,0,208,88Zm-80,72a20,20,0,1,1,20-20A20,20,0,0,1,128,160Z",opacity:"0.2"}),i.createElement("path",{d:"M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96ZM208,208H48V96H208V208Zm-80-96a28,28,0,0,0-8,54.83V184a8,8,0,0,0,16,0V166.83A28,28,0,0,0,128,112Zm0,40a12,12,0,1,1,12-12A12,12,0,0,1,128,152Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80Zm-72,78.63V184a8,8,0,0,1-16,0V158.63a24,24,0,1,1,16,0ZM160,80H96V56a32,32,0,0,1,64,0Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,82H174V56a46,46,0,0,0-92,0V82H48A14,14,0,0,0,34,96V208a14,14,0,0,0,14,14H208a14,14,0,0,0,14-14V96A14,14,0,0,0,208,82ZM94,56a34,34,0,0,1,68,0V82H94ZM210,208a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V96a2,2,0,0,1,2-2H208a2,2,0,0,1,2,2Zm-82-94a26,26,0,0,0-6,51.29V184a6,6,0,0,0,12,0V165.29A26,26,0,0,0,128,114Zm0,40a14,14,0,1,1,14-14A14,14,0,0,1,128,154Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,112a28,28,0,0,0-8,54.83V184a8,8,0,0,0,16,0V166.83A28,28,0,0,0,128,112Zm0,40a12,12,0,1,1,12-12A12,12,0,0,1,128,152Zm80-72H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96ZM208,208H48V96H208V208Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M208,84H172V56a44,44,0,0,0-88,0V84H48A12,12,0,0,0,36,96V208a12,12,0,0,0,12,12H208a12,12,0,0,0,12-12V96A12,12,0,0,0,208,84ZM92,56a36,36,0,0,1,72,0V84H92ZM212,208a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V96a4,4,0,0,1,4-4H208a4,4,0,0,1,4,4Zm-84-92a24,24,0,0,0-4,47.66V184a4,4,0,0,0,8,0V163.66A24,24,0,0,0,128,116Zm0,40a16,16,0,1,1,16-16A16,16,0,0,1,128,156Z"}))]]),Md=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm0,192a84,84,0,1,1,84-84A84.09,84.09,0,0,1,128,212Zm-12-80V80a12,12,0,0,1,24,0v52a12,12,0,0,1-24,0Zm28,40a16,16,0,1,1-16-16A16,16,0,0,1,144,172Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,56a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm8,104a12,12,0,1,1,12-12A12,12,0,0,1,128,184Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,26A102,102,0,1,0,230,128,102.12,102.12,0,0,0,128,26Zm0,192a90,90,0,1,1,90-90A90.1,90.1,0,0,1,128,218Zm-6-82V80a6,6,0,0,1,12,0v56a6,6,0,0,1-12,0Zm16,36a10,10,0,1,1-10-10A10,10,0,0,1,138,172Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M128,28A100,100,0,1,0,228,128,100.11,100.11,0,0,0,128,28Zm0,192a92,92,0,1,1,92-92A92.1,92.1,0,0,1,128,220Zm-4-84V80a4,4,0,0,1,8,0v56a4,4,0,0,1-8,0Zm12,36a8,8,0,1,1-8-8A8,8,0,0,1,136,172Z"}))]]),Ad=i.createContext({color:"currentColor",size:"1em",weight:"regular",mirrored:!1}),We=i.forwardRef((e,t)=>{const{alt:n,color:r,size:a,weight:o,mirrored:s,children:l,weights:c,...u}=e,{color:d="currentColor",size:f,weight:h="regular",mirrored:g=!1,...v}=i.useContext(Ad);return i.createElement("svg",{ref:t,xmlns:"http://www.w3.org/2000/svg",width:a??f,height:a??f,fill:r??d,viewBox:"0 0 256 256",transform:s||g?"scale(-1, 1)":void 0,...v,...u},!!n&&i.createElement("title",null,n),l,c.get(o??h))});We.displayName="IconBase";const Id=i.forwardRef((e,t)=>i.createElement(We,{ref:t,...e,weights:kd}));Id.displayName="ArrowClockwiseIcon";const ns=i.forwardRef((e,t)=>i.createElement(We,{ref:t,...e,weights:Sd}));ns.displayName="ArrowUpRightIcon";const rs=i.forwardRef((e,t)=>i.createElement(We,{ref:t,...e,weights:Pd}));rs.displayName="LinkSimpleIcon";const Rd=i.forwardRef((e,t)=>i.createElement(We,{ref:t,...e,weights:Ld}));Rd.displayName="LockKeyIcon";const as=i.forwardRef((e,t)=>i.createElement(We,{ref:t,...e,weights:Md}));as.displayName="WarningCircleIcon";function os(){return m.jsxs(ao,{href:"https://github.com/webadderallorg/Recordly",target:"_blank",rel:"noopener noreferrer",className:"brand",children:[m.jsx("img",{src:"/icon-64.png",alt:"",width:"28",height:"28"}),m.jsx("span",{children:"Recordly"})]})}function sf({title:e,library:t=!1}){return m.jsxs("header",{className:"share-header",children:[m.jsxs("div",{className:"header-start",children:[m.jsx(os,{}),m.jsx("span",{className:"header-divider"}),m.jsx("span",{className:"header-context",children:e||"Shared recording"})]}),m.jsxs(ao,{className:"button button--sm button--secondary",href:t?"/library/logout":"https://github.com/webadderallorg/Recordly",target:t?void 0:"_blank",rel:t?void 0:"noopener noreferrer",children:[t?"Log out":"Get Recordly",!t&&m.jsx(ns,{size:16})]})]})}function lf({children:e}){return m.jsxs($t,{status:"danger",role:"alert",children:[m.jsx($t.Indicator,{children:m.jsx(as,{})}),m.jsx($t.Content,{children:m.jsx($t.Description,{children:e})})]})}function cf({children:e}){return m.jsx("main",{className:"gate-page",children:m.jsxs(an,{className:"gate-card",children:[m.jsx(an.Header,{children:m.jsx(os,{})}),m.jsx(an.Content,{className:"gate-content",children:e})]})})}async function Vd(e=0,t){const n=new URL(t?`/s/${t}`:window.location.pathname,window.location.origin);e>0&&n.searchParams.set("t",String(Math.floor(e)));try{await navigator.clipboard.writeText(n.href),jt.success("Link copied")}catch{jt.danger("Could not copy the link. Copy the address from your browser.")}}function uf({time:e=0,code:t}){return m.jsxs(oo,{size:"sm",variant:"secondary",onPress:()=>{Vd(e,t)},children:[m.jsx(rs,{size:16}),"Copy link"]})}function df(){return m.jsx(Td.Provider,{placement:"bottom"})}export{_t as $,Yr as A,oo as B,an as C,Nd as D,D as E,jn as F,Od as G,sf as H,nf as I,pe as J,cn as K,ao as L,fs as M,df as N,Bd as O,Js as P,wc as Q,Et as R,af as S,of as T,Rc as U,Ua as V,Dd as W,ti as X,St as Y,q as Z,Qa as _,lf as a,Vd as a$,Ks as a0,Ba as a1,Bt as a2,Zr as a3,at as a4,lu as a5,_a as a6,_d as a7,Uc as a8,Ud as a9,Fc as aA,Ta as aB,Gs as aC,zd as aD,dc as aE,Fn as aF,Ze as aG,st as aH,Wd as aI,J as aJ,$e as aK,Qd as aL,Xa as aM,Ga as aN,Zd as aO,Qo as aP,ot as aQ,we as aR,Yd as aS,Xd as aT,qd as aU,sd as aV,Xo as aW,tf as aX,dd as aY,md as aZ,rs as a_,Kd as aa,Ja as ab,kn as ac,za as ad,ce as ae,Ae as af,jd as ag,Or as ah,Ce as ai,un as aj,Fe as ak,Vt as al,gc as am,Dn as an,xs as ao,ws as ap,Gd as aq,wa as ar,Ea as as,On as at,gn as au,Jd as av,du as aw,Ca as ax,ee as ay,dr as az,ef as b,uf as c,cf as d,Rd as e,rf as f,G as g,ae as h,Me as i,m as j,Ee as k,Hd as l,Ot as m,kt as n,Wr as o,We as p,ie as q,Id as r,fe as s,jt as t,ge as u,ue as v,le as w,re as x,Tn as y,X as z}; diff --git a/services/recordly-share/worker/web/dist/_astro/ShareUI.C55A6XGF.css b/services/recordly-share/worker/web/dist/_astro/ShareUI.C55A6XGF.css new file mode 100644 index 000000000..fe806831a --- /dev/null +++ b/services/recordly-share/worker/web/dist/_astro/ShareUI.C55A6XGF.css @@ -0,0 +1 @@ +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-content:"";--tw-duration:initial;--tw-leading:initial;--tw-border-style:solid;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-outline-style:solid;--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-space-y-reverse:0;--tw-tracking:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-space-x-reverse:0}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-xl:calc(var(--radius) * 1.5);--radius-2xl:calc(var(--radius) * 2);--radius-3xl:calc(var(--radius) * 3);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--border-width-field:var(--field-border-width,var(--border-width));--ease-smooth:ease;--ease-out-quad:cubic-bezier(.25, .46, .45, .94);--ease-out-quart:cubic-bezier(.165, .84, .44, 1);--ease-out-fluid:cubic-bezier(.32, .72, 0, 1);--ease-linear:linear}@layer theme.base{:root,:host{--white:oklch(100% 0 0);--black:oklch(0% 0 0);--snow:oklch(99.11% 0 0);--eclipse:oklch(21.03% .0059 285.89);--spacing:.25rem;--border-width:1px;--field-border-width:0px;--disabled-opacity:.5;--ring-offset-width:2px;--cursor-interactive:pointer;--cursor-disabled:not-allowed;--radius:.5rem;--field-radius:calc(var(--radius) * 1.5);--accent:oklch(62.04% .195 253.83);--accent-foreground:var(--snow);--success:oklch(73.29% .1935 150.81);--success-foreground:var(--eclipse);--field-border:transparent;--skeleton-animation:shimmer;--tooltip-delay:1.5s;--tooltip-close-delay:.5s}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){color-scheme:light;--background:oklch(97.02% 0 0);--foreground:var(--eclipse);--surface:var(--white);--surface-foreground:var(--foreground);--surface-secondary:oklch(95.24% .0013 286.37);--surface-secondary-foreground:var(--foreground);--surface-tertiary:oklch(93.73% .0013 286.37);--surface-tertiary-foreground:var(--foreground);--overlay:var(--white);--overlay-foreground:var(--foreground);--muted:oklch(55.17% .0138 285.94);--scrollbar:var(--scrollbar-thumb);--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--scrollbar-thumb:color-mix(in oklch, var(--foreground) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--scrollbar-track:transparent;--scrollbar-gutter:auto;--scrollbar-width:thin;--scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);--default:oklch(94% .001 286.375);--default-foreground:var(--eclipse);--field-background:var(--white);--field-foreground:oklch(21.03% .0059 285.89);--field-placeholder:var(--muted);--warning:oklch(78.19% .1585 72.33);--warning-foreground:var(--eclipse);--danger:oklch(65.32% .2328 25.74);--danger-foreground:var(--snow);--segment:var(--white);--segment-foreground:var(--eclipse);--border:oklch(90% .004 286.32);--separator:oklch(92% .004 286.32);--focus:var(--accent);--link:var(--foreground);--backdrop:#00000080;--surface-hover:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--surface-hover:color-mix(in oklab, var(--surface) 92%, var(--surface-foreground) 8%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--background-secondary:var(--background)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--background-secondary:color-mix(in oklab, var(--background) 96%, var(--foreground) 4%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--background-tertiary:var(--background)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--background-tertiary:color-mix(in oklab, var(--background) 92%, var(--foreground) 8%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--background-inverse:var(--foreground);--default-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--default-hover:color-mix(in oklab, var(--default) 96%, var(--default-foreground) 4%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--accent-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--accent-hover:color-mix(in oklab, var(--accent) 90%, var(--accent-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--success-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--success-hover:color-mix(in oklab, var(--success) 90%, var(--success-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--warning-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--warning-hover:color-mix(in oklab, var(--warning) 90%, var(--warning-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--danger-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--danger-hover:color-mix(in oklab, var(--danger) 90%, var(--danger-foreground) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--field-hover:var(--field-background,var(--default))}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--field-hover:color-mix(in oklab, var(--field-background,var(--default)) 90%, var(--field-foreground,var(--foreground)) 2%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--field-focus:var(--field-background,var(--default));--field-border-hover:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--field-border-hover:color-mix(in oklab, var(--field-border,var(--border)) 88%, var(--field-foreground,var(--foreground)) 10%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--field-border-focus:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--field-border-focus:color-mix(in oklab, var(--field-border,var(--border)) 74%, var(--field-foreground,var(--foreground)) 22%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--default-soft:var(--default)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--default-soft:color-mix(in oklab, var(--default) 50%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--default-soft-foreground:var(--default-foreground);--default-soft-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--default-soft-hover:color-mix(in oklab, var(--default) 60%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--accent-soft:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--accent-soft:color-mix(in oklab, var(--accent) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--accent-soft-foreground:color-mix(in oklab, var(--accent) 70%, var(--foreground) 30%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--accent-soft-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--accent-soft-hover:color-mix(in oklab, var(--accent) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--danger-soft:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--danger-soft:color-mix(in oklab, var(--danger) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--danger-soft-foreground:color-mix(in oklab, var(--danger) 70%, var(--foreground) 40%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--danger-soft-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--danger-soft-hover:color-mix(in oklab, var(--danger) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--warning-soft:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--warning-soft:color-mix(in oklab, var(--warning) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--warning-soft-foreground:color-mix(in oklab, var(--warning) 80%, var(--foreground) 70%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--warning-soft-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--warning-soft-hover:color-mix(in oklab, var(--warning) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--success-soft:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--success-soft:color-mix(in oklab, var(--success) 15%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--success-soft-foreground:color-mix(in oklab, var(--success) 80%, var(--foreground) 60%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--success-soft-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--success-soft-hover:color-mix(in oklab, var(--success) 20%, transparent)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--separator-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--separator-secondary:color-mix(in oklab, var(--surface) 85%, var(--surface-foreground) 15%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--separator-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--separator-tertiary:color-mix(in oklab, var(--surface) 81%, var(--surface-foreground) 19%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--border-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--border-secondary:color-mix(in oklab, var(--surface) 78%, var(--surface-foreground) 22%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--border-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--border-tertiary:color-mix(in oklab, var(--surface) 66%, var(--surface-foreground) 34%)}}:root,.light,.default,[data-theme=light],[data-theme=default],:host(.light),:host(.default),:host([data-theme=light]),:host([data-theme=default]){--surface-shadow:0 2px 4px 0 #0000000a, 0 1px 2px 0 #0000000f, 0 0 1px 0 #0000000f;--overlay-shadow:0 2px 8px 0 #0000000f, 0 -6px 12px 0 #00000008, 0 14px 28px 0 #00000014;--field-shadow:0 2px 4px 0 #0000000a, 0 1px 2px 0 #0000000f, 0 0 1px 0 #0000000f}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){color-scheme:dark;--background:oklch(12% .005 285.823);--foreground:var(--snow);--surface:oklch(21.03% .0059 285.89);--surface-foreground:var(--foreground);--surface-secondary:oklch(25.7% .0037 286.14);--surface-secondary-foreground:var(--foreground);--surface-tertiary:oklch(27.21% .0024 247.91);--surface-tertiary-foreground:var(--foreground);--overlay:oklch(21.03% .0059 285.89);--overlay-foreground:var(--foreground);--muted:oklch(70.5% .015 286.067);--scrollbar:var(--scrollbar-thumb);--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--scrollbar-thumb:color-mix(in oklch, var(--foreground) 15%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--scrollbar-track:transparent;--scrollbar-gutter:auto;--scrollbar-width:thin;--scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);--default:oklch(27.4% .006 286.033);--default-foreground:var(--snow);--field-background:oklch(21.03% .0059 285.89);--field-foreground:var(--foreground);--field-placeholder:var(--muted);--warning:oklch(82.03% .1388 76.34);--warning-foreground:var(--eclipse);--danger:oklch(59.4% .1967 24.63);--danger-foreground:var(--snow);--segment:oklch(39.64% .01 285.93);--segment-foreground:var(--foreground);--border:oklch(28% .006 286.033);--separator:oklch(25% .006 286.033);--focus:var(--accent);--link:var(--foreground);--backdrop:#0009;--surface-shadow:0 0 0 0 transparent inset;--overlay-shadow:0 0 1px 0 #ffffff4d inset;--field-shadow:0 0 0 0 transparent inset;--surface-hover:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--surface-hover:color-mix(in oklab, var(--surface) 92%, var(--surface-foreground) 8%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--background-secondary:var(--background)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--background-secondary:color-mix(in oklab, var(--background) 96%, var(--foreground) 4%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--background-tertiary:var(--background)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--background-tertiary:color-mix(in oklab, var(--background) 92%, var(--foreground) 8%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--background-inverse:var(--foreground);--default-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--default-hover:color-mix(in oklab, var(--default) 96%, var(--default-foreground) 4%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--accent-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--accent-hover:color-mix(in oklab, var(--accent) 90%, var(--accent-foreground) 10%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--success-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--success-hover:color-mix(in oklab, var(--success) 90%, var(--success-foreground) 10%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--warning-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--warning-hover:color-mix(in oklab, var(--warning) 90%, var(--warning-foreground) 10%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--danger-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--danger-hover:color-mix(in oklab, var(--danger) 90%, var(--danger-foreground) 10%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--field-hover:var(--field-background,var(--default))}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--field-hover:color-mix(in oklab, var(--field-background,var(--default)) 90%, var(--field-foreground,var(--foreground)) 2%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--field-focus:var(--field-background,var(--default));--field-border-hover:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--field-border-hover:color-mix(in oklab, var(--field-border,var(--border)) 88%, var(--field-foreground,var(--foreground)) 10%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--field-border-focus:var(--field-border,var(--border))}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--field-border-focus:color-mix(in oklab, var(--field-border,var(--border)) 74%, var(--field-foreground,var(--foreground)) 22%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--default-soft:var(--default)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--default-soft:color-mix(in oklab, var(--default) 50%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--default-soft-foreground:var(--default-foreground);--default-soft-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--default-soft-hover:color-mix(in oklab, var(--default) 60%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--accent-soft:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--accent-soft:color-mix(in oklab, var(--accent) 12%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--accent-soft-foreground:color-mix(in oklab, var(--accent) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--accent-soft-hover:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--accent-soft-hover:color-mix(in oklab, var(--accent) 16%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--danger-soft:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--danger-soft:color-mix(in oklab, var(--danger) 15%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--danger-soft-foreground:color-mix(in oklab, var(--danger) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--danger-soft-hover:var(--danger)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--danger-soft-hover:color-mix(in oklab, var(--danger) 20%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--warning-soft:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--warning-soft:color-mix(in oklab, var(--warning) 12%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--warning-soft-foreground:color-mix(in oklab, var(--warning) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--warning-soft-hover:var(--warning)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--warning-soft-hover:color-mix(in oklab, var(--warning) 16%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--success-soft:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--success-soft:color-mix(in oklab, var(--success) 12%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--success-soft-foreground:color-mix(in oklab, var(--success) 80%, var(--foreground) 30%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--success-soft-hover:var(--success)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--success-soft-hover:color-mix(in oklab, var(--success) 16%, transparent)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--separator-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--separator-secondary:color-mix(in oklab, var(--surface) 85%, var(--surface-foreground) 15%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--separator-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--separator-tertiary:color-mix(in oklab, var(--surface) 81%, var(--surface-foreground) 19%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--border-secondary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--border-secondary:color-mix(in oklab, var(--surface) 78%, var(--surface-foreground) 22%)}}.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--border-tertiary:var(--surface)}@supports (color:color-mix(in lab,red,red)){.dark,[data-theme=dark],:host(.dark),:host([data-theme=dark]){--border-tertiary:color-mix(in oklab, var(--surface) 66%, var(--surface-foreground) 34%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--accent-soft-foreground:color-mix(in oklab, var(--accent) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--danger-soft-foreground:color-mix(in oklab, var(--danger) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--warning-soft-foreground:color-mix(in oklab, var(--warning) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true]:not(.dark):not([data-theme=dark]){--success-soft-foreground:color-mix(in oklab, var(--success) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--accent-soft-foreground:var(--accent)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--accent-soft-foreground:color-mix(in oklab, var(--accent) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--danger-soft-foreground:var(--danger)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--danger-soft-foreground:color-mix(in oklab, var(--danger) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--warning-soft-foreground:var(--warning)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--warning-soft-foreground:color-mix(in oklab, var(--warning) 92%, var(--foreground) 8%)}}[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--success-soft-foreground:var(--success)}@supports (color:color-mix(in lab,red,red)){[data-vibrant-palette=true].dark,[data-vibrant-palette=true][data-theme=dark]{--success-soft-foreground:color-mix(in oklab, var(--success) 92%, var(--foreground) 8%)}}}@layer components;}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*,:after,:before,::backdrop{border-color:var(--border,currentColor)}::file-selector-button{border-color:var(--border,currentColor)}:root{view-transition-name:none;--z-index-overlay:100000;--z-index-toast:calc(var(--z-index-overlay) + 1)}::view-transition{pointer-events:none}[data-scrollbar=thin]{--scrollbar-width:thin;--scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);--scrollbar-gutter:auto}[data-scrollbar=default]{--scrollbar-width:auto;--scrollbar-color:auto;--scrollbar-gutter:auto}[data-scrollbar=none]{--scrollbar-width:none;--scrollbar-color:auto;--scrollbar-gutter:auto}:root{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}html{background:var(--background);color:var(--foreground);color-scheme:dark}body{min-width:320px;margin:0}button,input,textarea{font:inherit}svg{flex-shrink:0}::selection{background:var(--accent-soft);color:var(--accent-soft-foreground)}}@layer components{.close-button{isolation:isolate;height:calc(var(--spacing) * 6);width:calc(var(--spacing) * 6);transform-origin:50%;border-radius:calc(var(--radius) * 1.5);padding:var(--spacing);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),color .15s var(--ease-out),background-color .1s var(--ease-out),box-shadow .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.close-button:focus-visible:not([data-focused]),.close-button[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.close-button:disabled,.close-button[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.close-button[data-pending=true]{pointer-events:none}.close-button svg{pointer-events:none;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);margin-inline:calc(var(--spacing) * -.5);margin-block:calc(var(--spacing) * .5);flex-shrink:0;align-self:center}.close-button--default{background-color:var(--default);color:var(--muted)}@media(hover:hover){.close-button--default:hover,.close-button--default[data-hovered=true]{background-color:var(--default-hover)}}.close-button--default:active,.close-button--default[data-pressed=true]{transform:scale(.93)}.description{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-wrap:wrap;overflow-wrap:break-word;color:var(--muted)}.error-message{height:auto;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));overflow-wrap:break-word;color:var(--danger);transition:opacity .15s var(--ease-out),height .35s var(--ease-smooth)}.error-message:is([data-reduce-motion=true],[data-reduce-motion=true] *),.error-message:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.error-message:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.error-message:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.error-message:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.error-message:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.field-error{height:0;padding-inline:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));overflow-wrap:break-word;color:var(--danger);opacity:0}.field-error[data-visible]{opacity:1;height:auto}.field-error{transition:opacity .15s var(--ease-out),height .35s var(--ease-smooth)}.field-error:is([data-reduce-motion=true],[data-reduce-motion=true] *),.field-error:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.field-error:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.field-error:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.field-error:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.field-error:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.checkbox>.field-error,.checkbox>[data-slot=field-error],.switch>.field-error,.switch>[data-slot=field-error],.radio>.field-error,.radio>[data-slot=field-error]{height:auto;min-height:0;color:var(--muted);opacity:1;margin:0;padding:0;transition:none}.label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}:is(.label--required,[data-required=true]:not([role=group]):not([role=radiogroup]):not([role=checkboxgroup])>.label,[data-required=true]:not([data-slot=radio]):not([data-slot=checkbox])>.label):after{color:var(--danger);--tw-content:"*";content:var(--tw-content);margin-inline-start:calc(var(--spacing) * .5)}.label--disabled,[data-disabled=true] .label{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.label--invalid,[data-invalid=true] .label,[aria-invalid=true] .label{color:var(--danger)}.accordion{contain:layout style;width:100%}.accordion__body{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.accordion__body-inner{padding-inline:calc(var(--spacing) * 4);padding-top:0;padding-bottom:calc(var(--spacing) * 4);color:var(--muted)}.accordion__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:var(--muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;flex-shrink:0;margin-inline-start:auto;transition-duration:.25s}.accordion__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.accordion__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.accordion__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.accordion__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.accordion__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.accordion__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.accordion__indicator[data-expanded=true]{rotate:-180deg}.accordion__item{--tw-border-style:none;border-style:none;position:relative}.accordion__item:after{content:"";border-radius:calc(var(--radius) * .25);background-color:var(--separator);inset-inline-start:calc(var(--spacing) * 0);width:100%;height:1px;position:absolute;bottom:0}.accordion__item:last-child:after{content:none}.accordion__item[data-hide-separator=true]:after{display:none}.accordion__trigger{cursor:var(--cursor-interactive);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 4);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);-webkit-tap-highlight-color:transparent;transition:opacity .15s var(--ease-out),box-shadow .15s var(--ease-out);flex:1;justify-content:space-between;align-items:center;display:flex}.accordion__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.accordion__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.accordion__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.accordion__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.accordion__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.accordion__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.accordion__trigger:hover:not([aria-expanded=true]){background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.accordion__trigger:hover:not([aria-expanded=true]){background-color:color-mix(in oklab,var(--foreground) 3%,transparent 90%)}}}.accordion__trigger:focus-visible:not([data-focused]),.accordion__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.accordion__trigger:disabled,.accordion__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.accordion__panel{opacity:0;height:var(--disclosure-panel-height);transition:height .2s var(--ease-out-quad),opacity .2s var(--ease-out);overflow:clip}.accordion__panel:is([data-reduce-motion=true],[data-reduce-motion=true] *),.accordion__panel:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.accordion__panel:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.accordion__panel:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.accordion__panel:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.accordion__panel:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.accordion__panel[data-expanded=true]{will-change:height,opacity;opacity:1}.accordion--surface{background-color:var(--surface);border-radius:min(32px,var(--radius-3xl))}@media(hover:hover){.accordion--surface .accordion__trigger:hover:not([aria-expanded=true]){background-color:var(--default)}}.accordion--surface .accordion__item:after{background-color:var(--surface-foreground)}@supports (color:color-mix(in lab,red,red)){.accordion--surface .accordion__item:after{background-color:color-mix(in oklab,var(--surface-foreground) 6%,transparent)}}.accordion--surface .accordion__item:after{width:94%;inset-inline-start:3%}.accordion--surface .accordion__item:first-child [data-slot=accordion-trigger]{border-start-start-radius:min(32px,var(--radius-3xl));border-start-end-radius:min(32px,var(--radius-3xl))}.accordion--surface .accordion__item:last-child:not(:has([data-slot=accordion-trigger][aria-expanded=true])) [data-slot=accordion-trigger]{border-end-end-radius:min(32px,var(--radius-3xl));border-end-start-radius:min(32px,var(--radius-3xl))}.breadcrumbs{align-items:center;gap:calc(var(--spacing) * 1.5);display:flex}.breadcrumbs .breadcrumbs__link{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);opacity:1;text-decoration-line:none;position:relative}.breadcrumbs .breadcrumbs__link:hover,.breadcrumbs .breadcrumbs__link[data-hovered=true]{text-decoration-line:underline}.breadcrumbs .breadcrumbs__link[data-current=true]{color:var(--link);opacity:1}.breadcrumbs .breadcrumbs__item{justify-content:center;align-items:center;gap:var(--spacing);flex-shrink:0;display:flex}.breadcrumbs .breadcrumbs__separator{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);color:var(--muted)}.breadcrumbs .breadcrumbs__separator:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.disclosure-group{contain:layout style;width:100%}.disclosure{position:relative}.accordion__heading{display:flex}.disclosure__trigger{cursor:var(--cursor-interactive);-webkit-tap-highlight-color:transparent;display:inline-block}.disclosure__trigger:focus-visible:not([data-focused]),.disclosure__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.disclosure__trigger:disabled,.disclosure__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.disclosure__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:inherit;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;flex-shrink:0;margin-inline-start:auto;transition-duration:.25s}.disclosure__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.disclosure__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.disclosure__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.disclosure__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.disclosure__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.disclosure__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.disclosure__indicator[data-expanded=true]{rotate:-180deg}.disclosure__content{opacity:0;height:var(--disclosure-panel-height);transition:height .2s var(--ease-out-quad),opacity .2s var(--ease-out);overflow:clip}.disclosure__content:is([data-reduce-motion=true],[data-reduce-motion=true] *),.disclosure__content:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.disclosure__content:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.disclosure__content:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.disclosure__content:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.disclosure__content:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.disclosure__content[data-expanded=true]{will-change:height,opacity;opacity:1}.disclosure__body{padding:calc(var(--spacing) * 2)}.link{border-radius:calc(var(--radius) * 1.5);--tw-font-weight:var(--font-weight-medium);width:fit-content;height:fit-content;font-weight:var(--font-weight-medium);color:var(--link);text-decoration-line:none;-webkit-text-decoration-color:var(--separator-tertiary);text-decoration-color:var(--separator-tertiary);text-underline-offset:4px;-webkit-tap-highlight-color:transparent;transition:color .1s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out),opacity .1s var(--ease-out);align-items:center;text-decoration-thickness:1.5px;display:inline-flex;position:relative}.link:is([data-reduce-motion=true],[data-reduce-motion=true] *),.link:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.link:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.link{cursor:var(--cursor-interactive)}@media(hover:hover){.link:hover,.link[data-hovered=true]{text-decoration-line:underline;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.link:hover,.link[data-hovered=true]{-webkit-text-decoration-color:color-mix(in oklab,var(--muted) 50%,transparent);text-decoration-color:color-mix(in oklab,var(--muted) 50%,transparent)}}:is(.link:hover,.link[data-hovered=true]) .link__icon{opacity:1}}.link:active,.link[data-pressed=true]{text-decoration-line:underline;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}:is(.link:active,.link[data-pressed=true]) .link__icon{opacity:1}.link:focus-visible:not([data-focused]),.link[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}:is(.link:focus-visible:not([data-focused]),.link[data-focus-visible=true]) .link__icon{opacity:1}.link[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.link .link__icon{pointer-events:none;color:currentColor;opacity:.6;width:.75em;height:.75em;transition:opacity .15s var(--ease-out);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.link .link__icon:is([data-reduce-motion=true],[data-reduce-motion=true] *),.link .link__icon:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.link .link__icon:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.link .link__icon:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.link .link__icon:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.link .link__icon:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.link .link__icon svg{transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.link .link__icon[data-default-icon=true]{padding-bottom:calc(var(--spacing) * 1.5);margin-inline-start:var(--spacing)}.link.button{gap:0;text-decoration-line:none}.pagination{justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 4);flex-direction:column;width:100%;display:flex}@media(min-width:40rem){.pagination{flex-direction:row}}.pagination__summary{align-items:center;gap:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted);align-self:flex-start;display:flex}@media(min-width:40rem){.pagination__summary{align-self:center}}.pagination__content{align-items:center;gap:var(--spacing);align-self:flex-start;display:flex}@media(min-width:40rem){.pagination__content{align-self:center}}.pagination__item{display:inline-flex}.pagination__link{isolation:isolate;width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);transform-origin:50%;border-radius:calc(var(--radius) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;justify-content:center;align-items:center;display:inline-flex;position:relative}@media(min-width:48rem){.pagination__link{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}}.pagination__link{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-smooth),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.pagination__link:is([data-reduce-motion=true],[data-reduce-motion=true] *),.pagination__link:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.pagination__link:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.pagination__link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.pagination__link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.pagination__link:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.pagination__link{--pagination-link-bg:transparent;--pagination-link-bg-hover:var(--default-hover);--pagination-link-bg-pressed:var(--default-hover);--pagination-link-fg:var(--default-foreground);background-color:var(--pagination-link-bg);color:var(--pagination-link-fg)}.pagination__link:focus-visible,.pagination__link[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.pagination__link:disabled,.pagination__link[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@media(hover:hover){.pagination__link:hover,.pagination__link[data-hovered=true]{background-color:var(--pagination-link-bg-hover)}}.pagination__link:active,.pagination__link[data-pressed=true]{background-color:var(--pagination-link-bg-pressed);transform:scale(.97)}.pagination__link[data-active=true]{--pagination-link-bg:var(--default);--pagination-link-bg-hover:var(--default-hover);--pagination-link-bg-pressed:var(--default-hover)}.pagination__ellipsis{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:inline-flex}@media(min-width:48rem){.pagination__ellipsis{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}}.pagination__link--nav{gap:calc(var(--spacing) * 1.5);width:auto;padding-inline:calc(var(--spacing) * 2.5)}:is(.pagination__link--nav [data-slot=pagination-previous-icon],.pagination__link--nav [data-slot=pagination-next-icon]):where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.pagination--sm .pagination__link{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}@media(min-width:48rem){.pagination--sm .pagination__link{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}}.pagination--sm .pagination__link:active,.pagination--sm .pagination__link[data-pressed=true]{transform:scale(.98)}.pagination--sm .pagination__link--nav{width:auto;padding-inline:calc(var(--spacing) * 2)}.pagination--sm .pagination__ellipsis{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}@media(min-width:48rem){.pagination--sm .pagination__ellipsis{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}}.pagination--sm .pagination__summary{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.pagination--lg .pagination__link{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.pagination--lg .pagination__link{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}}.pagination--lg .pagination__link:active,.pagination--lg .pagination__link[data-pressed=true]{transform:scale(.96)}.pagination--lg .pagination__link--nav{width:auto;padding-inline:calc(var(--spacing) * 3)}.pagination--lg .pagination__ellipsis{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.pagination--lg .pagination__ellipsis{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}}.pagination--lg .pagination__summary{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.tabs{gap:calc(var(--spacing) * 2);display:flex}.tabs[data-orientation=horizontal]{flex-direction:column}.tabs[data-orientation=vertical]{flex-direction:row}.tabs__list-container{background-color:var(--default);border-radius:calc(var(--radius) * 2.5);position:relative}.tabs__list-container>.tabs__list-container__scroller[data-orientation=vertical]{height:100%}.tabs__list-container>.tabs__list-container__scroll-prev,.tabs__list-container>.tabs__list-container__scroll-next{z-index:2;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);cursor:var(--cursor-interactive);border-style:var(--tw-border-style);color:var(--foreground);--tw-outline-style:none;transition:opacity .15s var(--ease-smooth);background-color:#0000;border-width:0;border-radius:3.40282e38px;outline-style:none;justify-content:center;align-items:center;padding:0;display:none;position:absolute}:is(.tabs__list-container>.tabs__list-container__scroll-prev,.tabs__list-container>.tabs__list-container__scroll-next):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.tabs__list-container>.tabs__list-container__scroll-prev,.tabs__list-container>.tabs__list-container__scroll-next):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.tabs__list-container>.tabs__list-container__scroll-prev,.tabs__list-container>.tabs__list-container__scroll-next):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.tabs__list-container>.tabs__list-container__scroll-prev,.tabs__list-container>.tabs__list-container__scroll-next):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.tabs__list-container>.tabs__list-container__scroll-prev,.tabs__list-container>.tabs__list-container__scroll-next):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.tabs__list-container>.tabs__list-container__scroll-prev,.tabs__list-container>.tabs__list-container__scroll-next):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){:is(.tabs__list-container>.tabs__list-container__scroll-prev,.tabs__list-container>.tabs__list-container__scroll-next):hover{opacity:.7}}:is(.tabs__list-container>.tabs__list-container__scroll-prev,.tabs__list-container>.tabs__list-container__scroll-next):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.tabs__list-container:has([data-orientation=horizontal])>.tabs__list-container__scroll-prev{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);inset-inline-start:calc(var(--spacing) * 1);top:50%}.tabs__list-container:has([data-orientation=horizontal])>.tabs__list-container__scroll-next{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);inset-inline-end:calc(var(--spacing) * 1);top:50%}:is(.tabs__list-container:has([data-orientation=horizontal])>.tabs__list-container__scroll-prev,.tabs__list-container:has([data-orientation=horizontal])>.tabs__list-container__scroll-next):where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.tabs__list-container:has([data-orientation=vertical])>.tabs__list-container__scroll-prev{top:var(--spacing);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);left:50%}.tabs__list-container:has([data-orientation=vertical])>.tabs__list-container__scroll-next{bottom:var(--spacing);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);left:50%}.tabs__list-container:has(>:is([data-left-scroll=true],[data-left-right-scroll=true],[data-top-scroll=true],[data-top-bottom-scroll=true]))>.tabs__list-container__scroll-prev,.tabs__list-container:has(>:is([data-right-scroll=true],[data-left-right-scroll=true],[data-bottom-scroll=true],[data-top-bottom-scroll=true]))>.tabs__list-container__scroll-next{display:inline-flex}.tabs__list{padding:var(--spacing);display:inline-flex}.tabs__list[data-orientation=horizontal]{flex-direction:row;width:max-content;min-width:100%}.tabs__list[data-orientation=vertical]{gap:var(--spacing);flex-direction:column}.tabs__list[data-orientation=vertical] .tabs__tab{min-width:calc(var(--spacing) * 20)}.tabs__tab{height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 3);width:100%;padding-inline:calc(var(--spacing) * 4);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;z-index:1;cursor:var(--cursor-interactive);transition:color .15s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out),opacity .15s var(--ease-smooth);outline-style:none;justify-content:center;align-items:center;display:flex;position:relative}.tabs__tab:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tabs__tab:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tabs__tab:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tabs__tab:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tabs__tab:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tabs__tab:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tabs__tab[data-selected=true]{color:var(--segment-foreground)}.tabs__tab[data-selected=true] .tabs__separator,.tabs__tab[data-selected=true]+.tabs__tab .tabs__separator{opacity:0}.tabs__tab:disabled,.tabs__tab[data-disabled=true],.tabs__tab[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@media(hover:hover){.tabs__tab:not([data-selected=true]):not([data-disabled=true]):hover,.tabs__tab[data-hovered=true]:not([data-selected=true]):not([data-disabled=true]){opacity:.7}}.tabs__tab:focus-visible:not([data-focused]),.tabs__tab[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.tabs--align-start>:is(.tabs__list-container,.tabs__list) .tabs__tab{text-align:start;justify-content:flex-start}.tabs--align-end>:is(.tabs__list-container,.tabs__list) .tabs__tab{text-align:end;justify-content:flex-end}.tabs__separator{pointer-events:none;border-radius:calc(var(--radius) * .5);background-color:var(--muted);position:absolute}@supports (color:color-mix(in lab,red,red)){.tabs__separator{background-color:color-mix(in oklab,var(--muted) 25%,transparent)}}.tabs__separator{transition:opacity .15s var(--ease-smooth)}.tabs__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tabs__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tabs__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tabs__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tabs__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tabs__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tabs__list[data-orientation=horizontal] .tabs__separator{inset-inline-start:calc(var(--spacing) * 0);width:1px;height:50%;top:25%}.tabs__list[data-orientation=vertical] .tabs__separator{inset-inline-start:5%;width:90%;height:1px;top:0}.tabs__panel{width:100%;padding:calc(var(--spacing) * 2);--tw-outline-style:none;outline-style:none}.tabs__panel[data-exiting=true]{inset-inline-start:calc(var(--spacing) * 0);width:100%;position:absolute;top:0}.tabs__panel[data-orientation=horizontal]{margin-top:calc(var(--spacing) * 4)}.tabs__panel[data-orientation=vertical]{margin-inline-start:calc(var(--spacing) * 4)}.tabs__indicator{border-radius:calc(var(--radius) * 3);background-color:var(--segment);--tw-shadow:var(--surface-shadow);width:100%;height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);z-index:-1;transition-property:translate,width,height;transition-duration:.25s;transition-timing-function:var(--ease-out-fluid);inset-inline-start:calc(var(--spacing) * 0);position:absolute;top:0}.tabs__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tabs__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tabs__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tabs__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tabs__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tabs__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tabs--secondary>.tabs__list-container{background-color:#0000;border-radius:0}.tabs--secondary>.tabs__list-container .tabs__list{padding:0}.tabs--secondary>.tabs__list-container .tabs__separator{display:none}.tabs--secondary>.tabs__list-container .tabs__tab{border-radius:0}.tabs--secondary>.tabs__list-container .tabs__tab[data-selected=true]{color:var(--foreground)}.tabs--secondary>.tabs__list-container .tabs__indicator{background-color:var(--accent);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:0}.tabs--secondary[data-orientation=horizontal]>.tabs__list-container{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border)}.tabs--secondary[data-orientation=horizontal]>.tabs__list-container .tabs__indicator{height:calc(var(--spacing) * .5);top:auto;bottom:0}.tabs--secondary[data-orientation=vertical]>.tabs__list-container{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-color:var(--border)}.tabs--secondary[data-orientation=vertical]>.tabs__list-container .tabs__indicator{height:100%;width:calc(var(--spacing) * .5);inset-inline-start:calc(var(--spacing) * 0);top:0}.button{isolation:isolate;height:calc(var(--spacing) * 10);transform-origin:50%;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);border-radius:calc(var(--radius) * 3);width:fit-content;padding-inline:calc(var(--spacing) * 4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex;position:relative}@media(min-width:48rem){.button{height:calc(var(--spacing) * 9)}}.button{transition:transform .25s var(--ease-smooth),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.button{cursor:var(--cursor-interactive);--button-bg:transparent;--button-bg-hover:var(--button-bg);--button-bg-pressed:var(--button-bg-hover);--button-fg:currentColor;background-color:var(--button-bg);color:var(--button-fg)}.button:focus-visible:not([data-focused]),.button[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.button:disabled,.button[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.button[data-pending=true]{pointer-events:none}.button:active,.button[data-pressed=true]{will-change:transform;background-color:var(--button-bg-pressed);transform:scale(.97)}@media(hover:hover){.button:hover,.button[data-hovered=true]{background-color:var(--button-bg-hover)}}.button svg:not([data-slot=spinner] svg,[data-slot=link-icon] svg){pointer-events:none;margin-inline:calc(var(--spacing) * -.5);margin-block:calc(var(--spacing) * .5);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0;align-self:center}@media(min-width:40rem){.button svg:not([data-slot=spinner] svg,[data-slot=link-icon] svg){margin-block:var(--spacing);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}.button--sm{height:calc(var(--spacing) * 9);padding-inline:calc(var(--spacing) * 3)}@media(min-width:48rem){.button--sm{height:calc(var(--spacing) * 8)}}.button--sm svg:not([data-slot=spinner] svg,[data-slot=link-icon] svg){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.button--sm:active,.button--sm[data-pressed=true]{transform:scale(.98)}.button--lg{height:calc(var(--spacing) * 11);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.button--lg{height:calc(var(--spacing) * 10)}}.button--lg:active,.button--lg[data-pressed=true]{transform:scale(.96)}.button--primary{--button-bg:var(--accent);--button-bg-hover:var(--accent-hover);--button-bg-pressed:var(--accent-hover);--button-fg:var(--accent-foreground)}.button--secondary{--button-bg:var(--default);--button-bg-hover:var(--default-hover);--button-bg-pressed:var(--default-hover);--button-fg:var(--accent-soft-foreground)}.button--tertiary{--button-bg:var(--default);--button-bg-hover:var(--default-hover);--button-bg-pressed:var(--default-hover)}.button--ghost,.button--outline{--button-bg:transparent;--button-bg-hover:var(--default);--button-bg-pressed:var(--default);--button-fg:var(--default-foreground)}.button--outline{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);--button-bg-hover:var(--default)}@supports (color:color-mix(in lab,red,red)){.button--outline{--button-bg-hover:color-mix(in srgb, var(--default) 60%, transparent)}}.button--danger{--button-bg:var(--danger);--button-bg-hover:var(--danger-hover);--button-bg-pressed:var(--danger-hover);--button-fg:var(--danger-foreground)}.button--danger-soft{--button-bg:var(--danger-soft);--button-bg-hover:var(--danger-soft-hover);--button-bg-pressed:var(--danger-soft-hover);--button-fg:var(--danger-soft-foreground)}.button--icon-only{width:calc(var(--spacing) * 10);padding:0}@media(min-width:48rem){.button--icon-only{width:calc(var(--spacing) * 9)}}.button--icon-only.button--sm{width:calc(var(--spacing) * 9)}@media(min-width:48rem){.button--icon-only.button--sm{width:calc(var(--spacing) * 8)}}.button--icon-only.button--lg{width:calc(var(--spacing) * 11)}@media(min-width:48rem){.button--icon-only.button--lg{width:calc(var(--spacing) * 10)}}.button--full-width{width:100%}.button-group{justify-content:center;align-items:center;gap:0;height:auto;display:inline-flex}.button-group--horizontal{flex-direction:row}.button-group--vertical{flex-direction:column}.button-group .button{border-radius:0}.button-group--horizontal .button:first-child{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.button-group--horizontal .button:last-child{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.button-group--horizontal .button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.button-group--vertical .button:first-child{border-top-left-radius:calc(var(--radius) * 3);border-top-right-radius:calc(var(--radius) * 3)}.button-group--vertical .button:last-child{border-bottom-right-radius:calc(var(--radius) * 3);border-bottom-left-radius:calc(var(--radius) * 3)}.button-group--vertical .button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.button-group .button:active,.button-group .button[data-pressed=true]{transform:none}.button-group .button:focus-visible:not([data-focused]),.button-group .button[data-focus-visible=true]{z-index:10}.button-group__separator{border-radius:calc(var(--radius) * .5);opacity:.15;pointer-events:none;transition:opacity .15s var(--ease-smooth);background-color:currentColor;position:absolute}.button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.button-group--horizontal .button-group__separator{inset-inline-start:-1px;width:1px;height:50%;top:25%}.button-group--vertical .button-group__separator{inset-inline-start:25%;width:50%;height:1px;top:-1px}.button-group--horizontal .button--outline:first-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.button-group--horizontal .button--outline:last-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.button-group--horizontal .button--outline:not(:first-child):not(:last-child){border-inline-style:var(--tw-border-style);border-inline-width:0}.button-group--vertical .button--outline:first-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.button-group--vertical .button--outline:last-child{border-top-style:var(--tw-border-style);border-top-width:0}.button-group--vertical .button--outline:not(:first-child):not(:last-child){border-block-style:var(--tw-border-style);border-block-width:0}.button-group--full-width{width:100%}.toggle-button{isolation:isolate;height:calc(var(--spacing) * 10);transform-origin:50%;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);border-radius:calc(var(--radius) * 3);width:fit-content;padding-inline:calc(var(--spacing) * 4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex;position:relative}@media(min-width:48rem){.toggle-button{height:calc(var(--spacing) * 9)}}.toggle-button{transition:transform .25s var(--ease-smooth),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.toggle-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toggle-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toggle-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toggle-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toggle-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toggle-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toggle-button{cursor:var(--cursor-interactive);--toggle-button-bg:var(--default);--toggle-button-bg-hover:var(--default-hover);--toggle-button-bg-pressed:var(--default-hover);--toggle-button-fg:currentColor;--toggle-button-bg-selected:var(--accent-soft);--toggle-button-bg-selected-hover:var(--accent-soft-hover);--toggle-button-bg-selected-pressed:var(--accent-soft-hover);--toggle-button-fg-selected:var(--accent-soft-foreground);background-color:var(--toggle-button-bg);color:var(--toggle-button-fg)}.toggle-button:focus-visible:not([data-focused]),.toggle-button[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.toggle-button:disabled,.toggle-button[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@media(hover:hover){.toggle-button:hover,.toggle-button[data-hovered=true]{background-color:var(--toggle-button-bg-hover)}}.toggle-button:active,.toggle-button[data-pressed=true]{background-color:var(--toggle-button-bg-pressed);transform:scale(.97)}.toggle-button[data-selected=true]{background-color:var(--toggle-button-bg-selected);color:var(--toggle-button-fg-selected)}@media(hover:hover){.toggle-button[data-selected=true]:hover,.toggle-button[data-selected=true][data-hovered=true]{background-color:var(--toggle-button-bg-selected-hover)}}.toggle-button[data-selected=true]:active,.toggle-button[data-selected=true][data-pressed=true]{background-color:var(--toggle-button-bg-selected-pressed)}.toggle-button svg{pointer-events:none;margin-inline:calc(var(--spacing) * -.5);margin-block:calc(var(--spacing) * .5);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0;align-self:center}@media(min-width:40rem){.toggle-button svg{margin-block:var(--spacing);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}.toggle-button--sm{height:calc(var(--spacing) * 9);padding-inline:calc(var(--spacing) * 3)}@media(min-width:48rem){.toggle-button--sm{height:calc(var(--spacing) * 8)}}.toggle-button--sm svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.toggle-button--sm:active,.toggle-button--sm[data-pressed=true]{transform:scale(.98)}.toggle-button--lg{height:calc(var(--spacing) * 11);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media(min-width:48rem){.toggle-button--lg{height:calc(var(--spacing) * 10)}}.toggle-button--lg:active,.toggle-button--lg[data-pressed=true]{transform:scale(.96)}.toggle-button--default{--toggle-button-bg:var(--default);--toggle-button-bg-hover:var(--default-hover);--toggle-button-bg-pressed:var(--default-hover)}.toggle-button--ghost{--toggle-button-bg:transparent;--toggle-button-bg-hover:var(--default);--toggle-button-bg-pressed:var(--default);--toggle-button-fg:var(--default-foreground)}.toggle-button--icon-only{width:calc(var(--spacing) * 10);padding:0}@media(min-width:48rem){.toggle-button--icon-only{width:calc(var(--spacing) * 9)}}.toggle-button--icon-only.toggle-button--sm{width:calc(var(--spacing) * 9)}@media(min-width:48rem){.toggle-button--icon-only.toggle-button--sm{width:calc(var(--spacing) * 8)}}.toggle-button--icon-only.toggle-button--lg{width:calc(var(--spacing) * 11)}@media(min-width:48rem){.toggle-button--icon-only.toggle-button--lg{width:calc(var(--spacing) * 10)}}.toggle-button-group{justify-content:center;align-items:center;gap:0;width:fit-content;height:auto;display:inline-flex}.toggle-button-group--horizontal{flex-direction:row}.toggle-button-group--vertical{flex-direction:column}.toggle-button-group--full-width{width:100%}.toggle-button-group .toggle-button{border-radius:0}.toggle-button-group--horizontal .toggle-button:first-child{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.toggle-button-group--horizontal .toggle-button:last-child{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.toggle-button-group--horizontal .toggle-button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.toggle-button-group--vertical .toggle-button:first-child{border-top-left-radius:calc(var(--radius) * 3);border-top-right-radius:calc(var(--radius) * 3)}.toggle-button-group--vertical .toggle-button:last-child{border-bottom-right-radius:calc(var(--radius) * 3);border-bottom-left-radius:calc(var(--radius) * 3)}.toggle-button-group--vertical .toggle-button:first-child:last-child{border-radius:calc(var(--radius) * 3)}.toggle-button-group .toggle-button:active,.toggle-button-group .toggle-button[data-pressed=true]{transform:none}.toggle-button-group .toggle-button:focus-visible:not([data-focused]),.toggle-button-group .toggle-button[data-focus-visible=true]{--tw-ring-offset-width:0px;--tw-ring-inset:inset}.toggle-button-group--full-width .toggle-button{flex:1}.toggle-button-group__separator{border-radius:calc(var(--radius) * .5);opacity:.15;pointer-events:none;transition:opacity .15s var(--ease-smooth);background-color:currentColor;position:absolute}.toggle-button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toggle-button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toggle-button-group__separator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toggle-button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toggle-button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toggle-button-group__separator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toggle-button-group--horizontal .toggle-button-group__separator{inset-inline-start:-1px;width:1px;height:50%;top:25%}.toggle-button-group--vertical .toggle-button-group__separator{inset-inline-start:25%;width:50%;height:1px;top:-1px}.toggle-button-group--detached{gap:var(--spacing)}.toggle-button-group--detached .toggle-button{border-radius:calc(var(--radius) * 3)}.toggle-button-group--detached .toggle-button-group__separator{display:none}.toolbar{align-items:center;gap:calc(var(--spacing) * 2);grid-auto-flow:column;width:fit-content;display:grid}.toolbar .separator--vertical{align-self:center;height:50%}.toolbar .separator--horizontal{justify-content:center;justify-self:center;width:50%}.toolbar--vertical{grid-auto-flow:row;justify-content:flex-start;align-items:flex-start}.toolbar--vertical .button-group{justify-content:flex-start}.toolbar--attached{border-radius:calc(var(--radius) * 3);background-color:var(--surface);padding:var(--spacing);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dropdown{gap:var(--spacing);flex-direction:column;display:flex}.dropdown__trigger{--tw-outline-style:none;transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;display:inline-block}.dropdown__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.dropdown__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.dropdown__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.dropdown__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.dropdown__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.dropdown__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.dropdown__trigger{cursor:var(--cursor-interactive)}.dropdown__trigger:focus-visible:not([data-focused]),.dropdown__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.dropdown__trigger:disabled,.dropdown__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.dropdown__trigger[data-pending=true]{pointer-events:none}.dropdown__trigger:active,.dropdown__trigger[data-pressed=true]{transform:scale(.97)}.dropdown__popover{max-width:48svw;transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding:0;overflow-y:auto}@media(min-width:48rem){.dropdown__popover{min-width:calc(var(--spacing) * 55)}}.dropdown__popover{border-radius:min(32px,var(--radius-3xl));box-shadow:var(--overlay-shadow)}.dropdown__popover:focus-visible:not([data-focused]),.dropdown__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.dropdown__popover[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.9;transition-duration:.15s;transition-timing-function:ease}.dropdown__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.dropdown__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.dropdown__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.dropdown__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.dropdown__popover[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;pointer-events:none;transition-duration:.1s;transition-timing-function:ease}.dropdown__popover[data-exiting=true],.dropdown__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.dropdown__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.dropdown__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.dropdown__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.dropdown__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.dropdown__popover [data-slot=dropdown-menu]{padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none}.dropdown__popover [data-slot=menu-item]{padding-inline:calc(var(--spacing) * 2.5)}.dropdown__menu{gap:calc(var(--spacing) * .5);width:100%;padding:var(--spacing);flex-direction:column;display:flex;position:relative;overflow:clip}.dropdown__menu [data-slot=separator]{width:94%;margin-inline-start:3%}.list-box-item{min-height:calc(var(--spacing) * 9);justify-content:flex-start;align-items:center;gap:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * 2);width:100%;padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:transform .25s var(--ease-out-quart),box-shadow .15s var(--ease-out);outline-style:none;display:flex;position:relative}.list-box-item:is([data-reduce-motion=true],[data-reduce-motion=true] *),.list-box-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.list-box-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.list-box-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.list-box-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.list-box-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item{cursor:var(--cursor-interactive)}.list-box-item [data-slot=label]{pointer-events:none;-webkit-user-select:none;user-select:none;width:fit-content}.list-box-item [data-slot=description]{pointer-events:none;text-wrap:wrap;-webkit-user-select:none;user-select:none}.list-box-item:has(.list-box-item__indicator){padding-inline-end:calc(var(--spacing) * 7)}.list-box-item:focus-visible:not([data-focused]),.list-box-item[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.list-box-item:active,.list-box-item[data-pressed=true]{transform:scale(.98)}@media(hover:hover){.list-box-item:hover,.list-box-item[data-hovered=true]{background-color:var(--default)}}.list-box-item[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.list-box-item__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);color:var(--default-foreground);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;inset-inline-end:calc(var(--spacing) * 2);flex-shrink:0;justify-content:center;align-items:center;transition-duration:.25s;display:flex;position:absolute;top:50%}.list-box-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.list-box-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.list-box-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.list-box-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.list-box-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.list-box-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.list-box-item__indicator [data-slot=list-box-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]{transition:stroke-dashoffset .25s linear}:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.list-box-item__indicator .list-box-item[aria-selected=true] [data-slot=list-box-item-indicator--checkmark],.list-box-item__indicator .list-box-item[data-selected=true] [data-slot=list-box-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.list-box-item--danger .list-box-item__indicator,.list-box-item--danger [data-slot=label]{color:var(--danger)}.list-box-section{flex-direction:column;align-items:flex-start;gap:0;display:flex}.list-box{width:100%;padding:var(--spacing);position:relative;overflow:clip}.list-box>*+*{margin-top:var(--spacing)}.list-box [data-slot=separator][data-orientation=horizontal]{width:94%;margin-inline-start:3%}.menu-item{min-height:calc(var(--spacing) * 9);justify-content:flex-start;align-items:center;gap:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * 2);width:100%;padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1.5);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:transform .25s var(--ease-out-quart),box-shadow .15s var(--ease-out);outline-style:none;display:flex;position:relative}.menu-item:is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item{cursor:var(--cursor-interactive)}.menu-item [data-slot=label]{pointer-events:none;-webkit-user-select:none;user-select:none;width:fit-content}.menu-item [data-slot=description]{pointer-events:none;text-wrap:wrap;-webkit-user-select:none;user-select:none}.menu-item [data-slot=submenu-indicator] svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.menu-item:has(.menu-item__indicator){padding-inline-start:calc(var(--spacing) * 7)}.menu-item[data-has-submenu=true]:has(.menu-item__indicator){padding-inline-start:calc(var(--spacing) * 2);padding-inline-end:calc(var(--spacing) * 7)}.menu-item:focus-visible:not([data-focused]),.menu-item[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.menu-item:active,.menu-item[data-pressed=true]{will-change:transform;transform:scale(.98)}@media(hover:hover){.menu-item:hover,.menu-item[data-hovered=true]{background-color:var(--default)}}:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]{transition:stroke-dashoffset .1s linear}:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}:is(.menu-item[aria-checked=true],.menu-item[aria-selected=true],.menu-item[data-selected=true]) [data-slot=menu-item-indicator--dot]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.menu-item[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.menu-item__indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);color:var(--muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;inset-inline-start:calc(var(--spacing) * 2);flex-shrink:0;justify-content:center;align-items:center;transition-duration:.25s;display:flex;position:absolute;top:50%}.menu-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item__indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item__indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item[data-has-submenu=true] .menu-item__indicator{inset-inline-start:auto;inset-inline-end:calc(var(--spacing) * 2)}.menu-item__indicator [data-slot=menu-item-indicator--checkmark]{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]){transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--checkmark]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item__indicator [data-slot=menu-item-indicator--dot]{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]){transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;transition-duration:.25s}.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.menu-item[data-selection-mode=multiple] :is(.menu-item__indicator [data-slot=menu-item-indicator--dot]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.menu-item__indicator [data-slot=menu-item-indicator--dot]{--tw-scale-x:70%;--tw-scale-y:70%;--tw-scale-z:70%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:0}.menu-item__indicator--submenu{color:var(--muted)}.menu-item__indicator--submenu svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.menu-item--danger .menu-item__indicator,.menu-item--danger [data-slot=label]{color:var(--danger)}.menu-section{flex-direction:column;align-items:flex-start;gap:0;display:flex}.menu{gap:var(--spacing);width:100%;padding:var(--spacing);flex-direction:column;display:flex;position:relative;overflow:clip}.menu [data-slot=separator]{width:94%;margin-inline-start:3%}.tag-group{gap:var(--spacing);flex-direction:column;display:flex;position:relative}.tag-group__list{gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;display:flex;position:relative}.tag-group [slot=description],.tag-group [data-slot=description],.tag-group [slot=errorMessage],.tag-group [data-slot=error-message]{padding:var(--spacing)}.tag{--optical-offset:.031em;align-items:center;gap:var(--spacing);border-radius:calc(var(--radius) * 1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;padding-inline:calc(var(--spacing) * 2);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));transition:color .1s var(--ease-smooth),scale .1s var(--ease-smooth),opacity .1s var(--ease-smooth),background-color .1s var(--ease-smooth),box-shadow .1s var(--ease-out);transform-origin:50%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);display:inline-flex;position:relative}.tag:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tag:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tag:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tag:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tag:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tag:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tag{cursor:var(--cursor-interactive)}.tag svg{pointer-events:none;width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);color:currentColor;flex-shrink:0;align-self:center}.tag:is([data-disabled=true],[aria-disabled=true]){opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.tag:is(:focus-visible,[data-focus-visible]){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.tag:is([data-selected=true],[aria-selected=true]){background-color:var(--accent-soft);color:var(--accent-soft-foreground)}@media(hover:hover){.tag:is([data-selected=true],[aria-selected=true]):is(:hover,[data-hovered=true]){background-color:var(--accent-soft-hover)}}.tag--sm{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.tag--lg{border-radius:calc(var(--radius) * 2);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.tag--default{background-color:var(--default);color:var(--default-foreground)}@media(hover:hover){.tag--default:is(:hover,[data-hovered=true]):not([data-selected=true]):not([data-disabled=true]){background-color:var(--default-hover)}}.tag--surface{background-color:var(--surface);color:var(--surface-foreground)}@media(hover:hover){.tag--surface:is(:hover,[data-hovered=true]):not([data-selected=true]):not([data-disabled=true]){background-color:var(--surface-hover)}}.tag__remove-button:after{content:"";width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);--tw-translate-x: -50% ;--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);position:absolute;top:50%;left:50%}.tag__remove-button{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);color:inherit}.tag__remove-button svg{width:inherit;height:inherit;color:currentColor;flex-shrink:0;align-self:center}.color-area{width:100%;max-width:calc(var(--spacing) * 56);border-radius:calc(var(--radius) * 2);-webkit-tap-highlight-color:transparent;aspect-ratio:1;background:var(--color-area-background);flex-shrink:0;position:relative;box-shadow:inset 0 0 0 1px #0000001a}.color-area[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-area--show-dots:after{content:"";pointer-events:none;border-radius:inherit;background-image:radial-gradient(circle,#fff3 1px,#0000 1px);background-size:8px 8px;position:absolute;inset:0}.color-area__thumb{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5);will-change:width,height;background-color:var(--color-area-thumb-color);transition:width .15s var(--ease-out),height .15s var(--ease-out);border:3px solid #fff;box-shadow:0 0 0 1px #0000001a,inset 0 0 0 1px #0000001a}.color-area__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-area__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-area__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-area__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-area__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-area__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-area__thumb[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-area__thumb[data-dragging=true]{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.color-area__thumb[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-picker{display:inline-flex}.color-picker__trigger{align-items:center;gap:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * .5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-flex}.color-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-picker__trigger [data-slot=label]{cursor:var(--cursor-interactive)}.color-picker__trigger:focus-visible:not([data-focused]),.color-picker__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-picker__trigger:disabled,.color-picker__trigger[data-disabled=true],.color-picker__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-picker__popover{min-width:calc(var(--spacing) * 62);transform-origin:var(--trigger-anchor-point);scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;overscroll-behavior:contain;background-color:var(--overlay);padding-inline:calc(var(--spacing) * 2);padding-top:calc(var(--spacing) * 2);padding-bottom:calc(var(--spacing) * 3);box-shadow:var(--overlay-shadow);border-radius:min(32px,calc(var(--radius) * 2.5));gap:calc(var(--spacing) * 3);flex-direction:column;display:flex;overflow:hidden auto}.color-picker__popover:focus-visible:not([data-focused]),.color-picker__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.color-picker__popover[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.color-picker__popover[data-entering=true][data-placement^=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.color-picker__popover[data-entering=true][data-placement^=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.color-picker__popover[data-entering=true][data-placement^=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.color-picker__popover[data-entering=true][data-placement^=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.color-picker__popover[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;pointer-events:none;transition-duration:.1s;transition-timing-function:ease}.color-picker__popover[data-exiting=true],.color-picker__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.color-slider{gap:var(--spacing);grid-template:"label output""track track"/1fr auto;width:100%;display:grid}.color-slider:not(:has([data-slot=label])):not(:has(.color-slider__output)){grid-template:"track"/1fr;gap:0}.color-slider:has([data-slot=label]):not(:has(.color-slider__output)){grid-template-columns:1fr;grid-template-areas:"label""track"}.color-slider:not(:has([data-slot=label])):has(.color-slider__output){grid-template-columns:1fr;grid-template-areas:"output""track"}.color-slider:not(:has([data-slot=label])):has(.color-slider__output) .color-slider__output{justify-self:end}.color-slider [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.color-slider .color-slider__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);grid-area:output}.color-slider .color-slider__track{border-radius:calc(var(--radius) * 2);grid-area:track;position:relative}.color-slider .color-slider__track:before,.color-slider .color-slider__track:after{content:"";z-index:0;pointer-events:none;position:absolute}.color-slider .color-slider__thumb{cursor:grab;border-radius:calc(var(--radius) * 2);-webkit-tap-highlight-color:transparent;border-style:var(--tw-border-style);border-width:3px;border-color:var(--color-white);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);z-index:1;transition:transform .25s var(--ease-out),box-shadow .15s var(--ease-out);justify-content:center;align-items:center;display:flex;position:absolute}.color-slider .color-slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-slider .color-slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-slider .color-slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-slider .color-slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-slider .color-slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-slider .color-slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-slider .color-slider__thumb[data-dragging=true]{cursor:grabbing}.color-slider .color-slider__thumb[data-focus-visible=true]{z-index:10;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-slider .color-slider__thumb[data-disabled=true]{cursor:default;background-color:var(--default)}.color-slider:disabled,.color-slider[data-disabled=true],.color-slider[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.color-slider:disabled,.color-slider[data-disabled=true],.color-slider[aria-disabled=true]) [data-slot=label]{opacity:1}.color-slider[data-orientation=horizontal]{flex-direction:column}.color-slider[data-orientation=horizontal] .color-slider__track{height:calc(var(--spacing) * 5);border-radius:0;justify-self:center;width:calc(100% - 1.25rem);box-shadow:inset 0 1px #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=horizontal] .color-slider__track:before,.color-slider[data-orientation=horizontal] .color-slider__track:after{width:.625rem;height:100%;top:0}.color-slider[data-orientation=horizontal] .color-slider__track:before{background:linear-gradient(var(--track-start-color,transparent)),repeating-conic-gradient(#efefef 0% 25%,#f7f7f7 0% 50%) 50% / 16px 16px;border-start-start-radius:calc(var(--radius) * 2);border-end-start-radius:calc(var(--radius) * 2);inset-inline-start:-.625rem;box-shadow:inset 1px 0 #0000001a,inset 0 1px #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=horizontal] .color-slider__track:after{background-color:var(--track-end-color,transparent);border-start-end-radius:calc(var(--radius) * 2);border-end-end-radius:calc(var(--radius) * 2);inset-inline-end:-.625rem;box-shadow:inset -1px 0 #0000001a,inset 0 1px #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=horizontal] .color-slider__thumb{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);top:50%}.color-slider[data-orientation=vertical]{gap:calc(var(--spacing) * 2);flex-direction:row;grid-template:"output""track"1fr"label"/1fr;place-items:center;height:100%}.color-slider[data-orientation=vertical]:not(:has([data-slot=label])):not(:has(.color-slider__output)){grid-template-rows:1fr;grid-template-areas:"track";gap:0}.color-slider[data-orientation=vertical]:has([data-slot=label]):not(:has(.color-slider__output)){grid-template-rows:1fr auto;grid-template-areas:"track""label"}.color-slider[data-orientation=vertical]:not(:has([data-slot=label])):has(.color-slider__output){grid-template-rows:auto 1fr;grid-template-areas:"output""track"}.color-slider[data-orientation=vertical] .color-slider__output,.color-slider[data-orientation=vertical] [data-slot=label]{text-align:center}.color-slider[data-orientation=vertical] .color-slider__track{width:calc(var(--spacing) * 5);border-radius:0;justify-self:center;height:calc(100% - 1.25rem);box-shadow:inset 1px 0 #0000001a,inset -1px 0 #0000001a}.color-slider[data-orientation=vertical] .color-slider__track:before,.color-slider[data-orientation=vertical] .color-slider__track:after{width:100%;height:.625rem;inset-inline-start:calc(var(--spacing) * 0)}.color-slider[data-orientation=vertical] .color-slider__track:before{background:linear-gradient(var(--track-start-color,transparent)),repeating-conic-gradient(#efefef 0% 25%,#f7f7f7 0% 50%) 50% / 16px 16px;border-end-end-radius:999px;border-end-start-radius:999px;bottom:-.625rem;box-shadow:inset 1px 0 #0000001a,inset -1px 0 #0000001a,inset 0 -1px #0000001a}.color-slider[data-orientation=vertical] .color-slider__track:after{background-color:var(--track-end-color,transparent);border-start-start-radius:999px;border-start-end-radius:999px;top:-.625rem;box-shadow:inset 1px 0 #0000001a,inset -1px 0 #0000001a,inset 0 1px #0000001a}.color-slider[data-orientation=vertical] .color-slider__thumb{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);left:50%}.color-swatch{box-sizing:border-box;width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);background:linear-gradient(var(--color-swatch-current),var(--color-swatch-current)),repeating-conic-gradient(#efefef 0% 25%,#f7f7f7 0% 50%) 50% / 16px 16px;flex-shrink:0;position:relative;box-shadow:inset 0 0 0 1px #0000001a}.color-swatch--circle{border-radius:calc(var(--radius) * 2)}.color-swatch--square{border-radius:calc(var(--radius) * .75)}.color-swatch--xs{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.color-swatch--xs.color-swatch--circle{border-radius:calc(var(--radius) * 1)}.color-swatch--sm{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.color-swatch--sm.color-swatch--circle{border-radius:calc(var(--radius) * 1.5)}.color-swatch--lg{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.color-swatch--lg.color-swatch--circle{border-radius:calc(var(--radius) * 3)}.color-swatch--xl{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.color-swatch--xl.color-swatch--circle{border-radius:calc(var(--radius) * 3)}.color-swatch-picker{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.color-swatch-picker__item{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 2);border-style:var(--tw-border-style);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:border-color .1s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);border-width:2px;border-color:#0000;outline-style:none;justify-content:center;align-items:center;display:flex;position:relative}.color-swatch-picker__item:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-swatch-picker__item:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-swatch-picker__item:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-swatch-picker__item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-swatch-picker__item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-swatch-picker__item:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-swatch-picker__item:focus-visible,.color-swatch-picker__item[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.color-swatch-picker__item[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-swatch-picker__item[data-selected=true]{border-color:var(--color-swatch-current);box-shadow:var(--field-shadow)}.color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{transform:scale(.77)}.color-swatch-picker__swatch{border-radius:inherit;width:100%;height:100%;transition:transform .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);display:block}.color-swatch-picker__swatch:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-swatch-picker__swatch:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-swatch-picker__swatch:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-swatch-picker__swatch:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-swatch-picker__swatch:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-swatch-picker__swatch:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.color-swatch-picker__swatch:hover{transform:scale(1.1)}}.color-swatch-picker__indicator{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.color-swatch-picker__indicator>*{width:33.3333%;height:33.3333%;color:var(--color-white);transition:transform .15s var(--ease-out);transform:scale(0)translateZ(0)}.color-swatch-picker__indicator>:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-swatch-picker__indicator>:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-swatch-picker__indicator>:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-swatch-picker__indicator>:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-swatch-picker__indicator>:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-swatch-picker__indicator>:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.color-swatch-picker__indicator[data-light-color=true] .color-swatch-picker__indicator>*{color:var(--color-black)}.color-swatch-picker__item[data-selected=true] .color-swatch-picker__indicator>*{transform:scale(1)translateZ(0)}.color-swatch-picker--stack{flex-direction:column}.color-swatch-picker--xs .color-swatch-picker__item{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1);border-style:var(--tw-border-style);border-width:1px}.color-swatch-picker--sm .color-swatch-picker__item{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);border-radius:calc(var(--radius) * 1.5);border-style:var(--tw-border-style);border-width:2px}.color-swatch-picker--lg .color-swatch-picker__item{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);border-radius:calc(var(--radius) * 3);border-style:var(--tw-border-style);border-width:3px}.color-swatch-picker--xl .color-swatch-picker__item{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);border-style:var(--tw-border-style);border-width:3px}.color-swatch-picker--square .color-swatch-picker__item{border-radius:calc(var(--radius) * 1.5)}.color-swatch-picker--square .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-swatch-picker--square.color-swatch-picker--xs .color-swatch-picker__item,.color-swatch-picker--square.color-swatch-picker--xs .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square.color-swatch-picker--xs .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * .75)}.color-swatch-picker--square.color-swatch-picker--sm .color-swatch-picker__item,.color-swatch-picker--square.color-swatch-picker--sm .color-swatch-picker__item .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-swatch-picker--square.color-swatch-picker--sm .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * .75)}.color-swatch-picker--square.color-swatch-picker--lg .color-swatch-picker__item{border-radius:calc(var(--radius) * 1.5)}.color-swatch-picker--square.color-swatch-picker--lg .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square.color-swatch-picker--lg .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-swatch-picker--square.color-swatch-picker--xl .color-swatch-picker__item{border-radius:calc(var(--radius) * 1.5)}.color-swatch-picker--square.color-swatch-picker--xl .color-swatch-picker__item .color-swatch-picker__swatch,.color-swatch-picker--square.color-swatch-picker--xl .color-swatch-picker__item[data-selected=true] .color-swatch-picker__swatch{border-radius:calc(var(--radius) * 1)}.color-input-group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;align-items:center;display:inline-flex;overflow:hidden}.color-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.color-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.color-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.color-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.color-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.color-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.color-input-group:hover:not(:focus-within),.color-input-group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.color-input-group[data-focus-within=true],.color-input-group:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.color-input-group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.color-input-group[data-invalid=true]:focus,.color-input-group[data-invalid=true]:focus-visible,.color-input-group[data-invalid=true][data-focused=true],.color-input-group[data-invalid=true][data-focus-visible=true],.color-input-group[data-invalid=true]:focus-within,.color-input-group[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.color-input-group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.color-input-group[data-disabled=true],.color-input-group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.color-input-group__input{cursor:text;border-style:var(--tw-border-style);height:100%;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1;align-items:center;display:flex}@media(min-width:40rem){.color-input-group__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.color-input-group__input::placeholder{color:var(--field-placeholder,var(--muted))}.color-input-group:has([data-slot=color-input-group-prefix]) .color-input-group__input{border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:calc(var(--spacing) * 2)}.color-input-group:has([data-slot=color-input-group-suffix]) .color-input-group__input{border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:calc(var(--spacing) * 2)}.color-input-group__input:focus,.color-input-group__input:focus-visible{--tw-outline-style:none;outline-style:none}.color-input-group__prefix{color:var(--field-placeholder,var(--muted));flex-shrink:0;align-items:center;margin-inline-start:calc(var(--spacing) * 3);margin-inline-end:0;display:flex}.color-input-group__suffix{color:var(--field-placeholder,var(--muted));flex-shrink:0;align-items:center;margin-inline-end:calc(var(--spacing) * 3);display:flex}.color-input-group--secondary{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--color-input-group-bg);--color-input-group-bg:var(--default);--color-input-group-bg-hover:var(--default-hover);--color-input-group-bg-focus:var(--default)}@media(hover:hover){.color-input-group--secondary:hover:not(:focus-within),.color-input-group--secondary[data-hovered=true]:not([data-focus-within=true]){background-color:var(--color-input-group-bg-hover)}}.color-input-group--secondary:focus-within,.color-input-group--secondary[data-focus-within=true]{background-color:var(--color-input-group-bg-focus)}.color-input-group--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.color-input-group--secondary[data-invalid=true]:focus,.color-input-group--secondary[data-invalid=true]:focus-visible,.color-input-group--secondary[data-invalid=true][data-focused=true],.color-input-group--secondary[data-invalid=true][data-focus-visible=true],.color-input-group--secondary[data-invalid=true]:focus-within,.color-input-group--secondary[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.color-input-group--secondary[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--color-input-group-bg-focus)}.color-input-group--secondary [data-slot=color-input-group-input]{background-color:#0000}.color-input-group--full-width{width:100%}.color-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.color-field[data-invalid=true],.color-field[aria-invalid=true]) [data-slot=description]{display:none}.color-field [data-slot=label]{width:fit-content}.color-field--full-width{width:100%}.slider{gap:var(--spacing);grid-template-columns:1fr auto;grid-template-areas:"label output""track track";width:100%;display:grid}.slider [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.slider .slider__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);grid-area:output}.slider .slider__track{border-radius:calc(var(--radius) * 1.5);background-color:var(--default);grid-area:track;position:relative}.slider .slider__fill{pointer-events:none;background-color:var(--accent);position:absolute}.slider .slider__thumb{cursor:grab;border-radius:calc(var(--radius) * 1.5);background-color:var(--accent);-webkit-tap-highlight-color:transparent;transition:background-color .25s var(--ease-smooth),transform .25s var(--ease-out),box-shadow .15s var(--ease-out);justify-content:center;align-items:center;display:flex;position:absolute}.slider .slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.slider .slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.slider .slider__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.slider .slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.slider .slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.slider .slider__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.slider .slider__thumb:after{z-index:10;border-radius:calc(var(--radius) * 1);background-color:var(--accent-foreground);color:var(--color-black);--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:"";transform-origin:50%;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:relative}@media(prefers-reduced-motion:reduce){.slider .slider__thumb:after:not(:is()){transition-property:none}}.slider .slider__thumb[data-dragging=true]{cursor:grabbing}.slider .slider__thumb[data-dragging=true]:after{scale:.9}@media(prefers-reduced-motion:reduce){.slider .slider__thumb[data-dragging=true]:after:not(:is()){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.slider .slider__thumb[data-focus-visible=true]{z-index:10;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.slider .slider__thumb[data-disabled=true]{cursor:default}.slider:disabled,.slider[data-disabled=true],.slider[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.slider:disabled,.slider[data-disabled=true],.slider[aria-disabled=true]) [data-slot=label]{opacity:1}.slider[data-orientation=horizontal]{flex-direction:column}.slider[data-orientation=horizontal] .slider__track{height:calc(var(--spacing) * 5);border-inline-style:var(--tw-border-style);border-inline-width:.75rem;border-inline-color:#0000;width:100%}.slider[data-orientation=horizontal] .slider__track[data-fill-start=true]{border-inline-start-color:var(--accent)}.slider[data-orientation=horizontal] .slider__track[data-fill-end=true]{border-inline-end-color:var(--accent)}.slider[data-orientation=horizontal] .slider__fill,.slider[data-orientation=horizontal] .slider__thumb{height:100%}.slider[data-orientation=horizontal] .slider__thumb{width:1.75rem;top:50%}.slider[data-orientation=horizontal] .slider__thumb:after{width:1.5rem;height:1rem}.slider[data-orientation=vertical]{gap:calc(var(--spacing) * 2);flex-direction:row;grid-template:"output""track"1fr"label"/1fr;height:100%}.slider[data-orientation=vertical] .slider__output,.slider[data-orientation=vertical] [data-slot=label]{text-align:center}.slider[data-orientation=vertical] .slider__track{height:100%;width:calc(var(--spacing) * 5);border-block-style:var(--tw-border-style);border-block-width:.75rem;border-block-color:#0000;justify-self:center}.slider[data-orientation=vertical] .slider__track[data-fill-start=true]{border-bottom-color:var(--accent)}.slider[data-orientation=vertical] .slider__track[data-fill-end=true]{border-top-color:var(--accent)}.slider[data-orientation=vertical] .slider__fill,.slider[data-orientation=vertical] .slider__thumb{width:100%}.slider[data-orientation=vertical] .slider__thumb{height:1.75rem;left:50%}.slider[data-orientation=vertical] .slider__thumb:after{width:1rem;height:1.5rem}.switch{align-items:flex-start;gap:var(--spacing);-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);--switch-control-bg:var(--default);--switch-control-bg-hover:var(--switch-control-bg);flex-direction:column;display:flex}@supports (color:color-mix(in lab,red,red)){.switch{--switch-control-bg-hover:color-mix(in oklab, var(--switch-control-bg), transparent 20%)}}.switch{--switch-control-bg-pressed:var(--switch-control-bg-hover);--switch-control-bg-checked:var(--accent);--switch-control-bg-checked-hover:var(--accent-hover)}.switch[data-disabled=true],.switch[data-disabled=true] [data-slot=description],.switch[data-disabled=true] [data-slot=field-error]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.switch[data-disabled=true] .switch__thumb{background-color:var(--default-foreground)}@supports (color:color-mix(in lab,red,red)){.switch[data-disabled=true] .switch__thumb{background-color:color-mix(in oklab,var(--default-foreground) 20%,transparent)}}.switch>[data-slot=description]{width:100%;min-width:0;padding-inline-start:3.25rem}.switch>[data-slot=field-error]{width:100%;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--muted);padding-inline-start:3.25rem}.switch.switch--sm>[data-slot=description],.switch.switch--sm>[data-slot=field-error]{padding-inline-start:2.75rem}.switch.switch--lg>[data-slot=description],.switch.switch--lg>[data-slot=field-error]{padding-inline-start:3.75rem}:is(.switch:disabled[aria-checked=true],.switch:disabled[data-selected=true],.switch[data-disabled=true][aria-checked=true],.switch[data-disabled=true][data-selected=true],.switch[aria-disabled=true][aria-checked=true],.switch[aria-disabled=true][data-selected=true]) .switch__thumb{opacity:.4}.switch__control{border-radius:calc(var(--radius) * 1.5);background-color:var(--switch-control-bg);width:2.5rem;height:1.25rem;transition:background-color .25s var(--ease-smooth),box-shadow .15s var(--ease-out);flex-shrink:0;align-items:center;display:flex;position:relative;overflow:hidden}.switch__control:is([data-reduce-motion=true],[data-reduce-motion=true] *),.switch__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.switch__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.switch__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.switch__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.switch__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.switch:focus-visible .switch__control,.switch:has([data-slot=switch-content][data-focus-visible=true]) .switch__control,.switch [data-slot=switch-content][data-focus-visible=true] .switch__control{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.switch:hover .switch__control,.switch:has([data-slot=switch-content][data-hovered=true]) .switch__control,.switch [data-slot=switch-content][data-hovered=true] .switch__control{background-color:var(--switch-control-bg-hover)}.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control{background-color:var(--switch-control-bg-pressed)}:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transform:none}@media(prefers-reduced-motion:reduce){:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.switch:active .switch__control,.switch:has([data-slot=switch-content][data-pressed=true]) .switch__control,.switch [data-slot=switch-content][data-pressed=true] .switch__control):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transform:none}}.switch[aria-checked=true] .switch__control,.switch[data-selected=true] .switch__control{background-color:var(--switch-control-bg-checked)}.switch[aria-checked=true]:hover .switch__control,.switch[data-selected=true]:hover .switch__control,.switch[aria-checked=true][data-hovered=true] .switch__control,.switch[data-selected=true][data-hovered=true] .switch__control,.switch:has([data-slot=switch-content][data-hovered=true])[data-selected=true] .switch__control,.switch[aria-checked=true]:active .switch__control,.switch[data-selected=true]:active .switch__control,.switch[aria-checked=true][data-pressed=true] .switch__control,.switch[data-selected=true][data-pressed=true] .switch__control,.switch:has([data-slot=switch-content][data-pressed=true])[data-selected=true] .switch__control{background-color:var(--switch-control-bg-checked-hover)}.switch__content{cursor:inherit;align-items:center;gap:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex;position:relative}.switch--sm .switch__control{border-radius:calc(var(--radius) * 1);width:2rem;height:1rem}.switch--lg .switch__control{width:3rem;height:1.5rem}.switch__thumb{transform-origin:50%;border-radius:calc(var(--radius) * 1);background-color:var(--color-white);color:var(--color-black);--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);width:1.375rem;height:1rem;transition:margin .3s var(--ease-out-fluid),background-color .2s var(--ease-out);margin-inline-start:calc(var(--spacing) * .5);display:flex}.switch__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *),.switch__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.switch__thumb:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.switch__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.switch__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.switch__thumb:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.switch[aria-checked=true] .switch__thumb,.switch[data-selected=true] .switch__thumb{background-color:var(--accent-foreground);color:var(--accent);margin-inline-start:calc(100% - 1.5rem);box-shadow:0 0 5px #00000005,0 2px 10px #0000000f,0 0 1px #0000004d}.switch--sm .switch__thumb{border-radius:calc(var(--radius) * .75);width:1.03125rem;height:.75rem}.switch[aria-checked=true] :is(.switch--sm .switch__thumb),.switch[data-selected=true] :is(.switch--sm .switch__thumb){margin-inline-start:calc(100% - 1.15625rem)}.switch--lg .switch__thumb{border-radius:calc(var(--radius) * 1.5);width:1.71875rem;height:1.25rem}.switch[aria-checked=true] :is(.switch--lg .switch__thumb),.switch[data-selected=true] :is(.switch--lg .switch__thumb){margin-inline-start:calc(100% - 1.84375rem)}.switch__thumb>*{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.switch [data-slot=label]{-webkit-user-select:none;user-select:none}.switch__content [data-slot=label]{cursor:var(--cursor-interactive)}.switch [data-slot=description]{cursor:default;-webkit-user-select:none;user-select:none}.switch-group{gap:calc(var(--spacing) * 6);flex-direction:column;display:flex}.switch-group__items{gap:calc(var(--spacing) * 4);display:flex}.switch-group--horizontal .switch-group__items{flex-direction:row}.switch-group--vertical .switch-group__items{flex-direction:column}.badge{justify-content:center;align-items:center;gap:calc(var(--spacing) * .5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);min-height:calc(var(--spacing) * 7);min-width:calc(var(--spacing) * 7);border-radius:calc(var(--radius) * 3);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1.34;--badge-bg:var(--default);--badge-fg:var(--default-foreground);--badge-border:var(--background);background-color:var(--badge-bg);color:var(--badge-fg);border:1px solid var(--badge-border);background-clip:padding-box;flex-shrink:0;line-height:1.34;display:inline-flex}.badge__label{padding-inline:calc(var(--spacing) * .5)}.badge-anchor{flex-shrink:0;display:inline-flex;position:relative}.badge--lg{min-height:calc(var(--spacing) * 8);min-width:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;line-height:1.43}.badge--sm{min-height:calc(var(--spacing) * 4);min-width:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5);--tw-leading:1.34;font-size:10px;line-height:1.34}.badge--accent{--badge-fg:var(--accent-soft-foreground)}.badge--default{--badge-fg:var(--default-foreground)}.badge--success{--badge-fg:var(--success-soft-foreground)}.badge--warning{--badge-fg:var(--warning-soft-foreground)}.badge--danger{--badge-fg:var(--danger-soft-foreground)}.badge--top-right{position:absolute;top:0;right:0;transform:translate(25%,-25%)}.badge--top-left{position:absolute;top:0;left:0;transform:translate(-25%,-25%)}.badge--bottom-right{position:absolute;bottom:0;right:0;transform:translate(25%,25%)}.badge--bottom-left{position:absolute;bottom:0;left:0;transform:translate(-25%,25%)}.badge--primary.badge--accent{--badge-bg:var(--accent);--badge-fg:var(--accent-foreground)}.badge--primary.badge--default{--badge-bg:var(--default);--badge-fg:var(--default-foreground)}.badge--primary.badge--success{--badge-bg:var(--success);--badge-fg:var(--success-foreground)}.badge--primary.badge--warning{--badge-bg:var(--warning);--badge-fg:var(--warning-foreground)}.badge--primary.badge--danger{--badge-bg:var(--danger);--badge-fg:var(--danger-foreground)}.badge--soft.badge--accent{--badge-bg:var(--accent-soft);--badge-fg:var(--accent-soft-foreground)}.badge--soft.badge--default{--badge-bg:var(--default-soft);--badge-fg:var(--default-soft-foreground)}.badge--soft.badge--success{--badge-bg:var(--success-soft);--badge-fg:var(--success-soft-foreground)}.badge--soft.badge--warning{--badge-bg:var(--warning-soft);--badge-fg:var(--warning-soft-foreground)}.badge--soft.badge--danger{--badge-bg:var(--danger-soft);--badge-fg:var(--danger-soft-foreground)}.chip{align-items:center;gap:calc(var(--spacing) * .5);border-radius:calc(var(--radius) * 2);width:fit-content;padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--chip-bg:var(--default);--chip-fg:currentColor;background-color:var(--chip-bg);color:var(--chip-fg);flex-shrink:0;display:inline-flex}.chip__label{padding-inline:calc(var(--spacing) * .5)}.chip--accent{--chip-fg:var(--accent-soft-foreground)}.chip--danger{--chip-fg:var(--danger-soft-foreground)}.chip--default{--chip-fg:var(--default-foreground)}.chip--success{--chip-fg:var(--success-soft-foreground)}.chip--warning{--chip-fg:var(--warning-soft-foreground)}.chip--tertiary{--chip-bg:transparent}.chip--sm{padding-inline:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:0}.chip--md{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.chip--lg{padding-inline:calc(var(--spacing) * 3);padding-block:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.chip--primary.chip--accent{--chip-bg:var(--accent);--chip-fg:var(--accent-foreground)}.chip--primary.chip--success{--chip-bg:var(--success);--chip-fg:var(--success-foreground)}.chip--primary.chip--warning{--chip-bg:var(--warning);--chip-fg:var(--warning-foreground)}.chip--primary.chip--danger{--chip-bg:var(--danger);--chip-fg:var(--danger-foreground)}.chip--accent.chip--soft{--chip-bg:var(--accent-soft);--chip-fg:var(--accent-soft-foreground)}.chip--success.chip--soft{--chip-bg:var(--success-soft);--chip-fg:var(--success-soft-foreground)}.chip--warning.chip--soft{--chip-bg:var(--warning-soft);--chip-fg:var(--warning-soft-foreground)}.chip--danger.chip--soft{--chip-bg:var(--danger-soft);--chip-fg:var(--danger-soft-foreground)}.chip--default.chip--soft{--chip-bg:var(--default-soft);--chip-fg:var(--default-soft-foreground)}.table-root{grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:clip}.table__scroll-container{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);scrollbar-gutter:auto;overflow-x:auto}.table-root--primary{background-color:var(--surface-secondary);padding-inline:var(--spacing);padding-bottom:var(--spacing);border-radius:min(32px,calc(var(--radius) * 2.5))}.table-root--secondary .table__header{border-bottom-style:var(--tw-border-style);background-color:#0000;border-bottom-width:0}.table-root--secondary .table__column{background-color:var(--surface-secondary)}.table-root--secondary :is(th.table__column:first-child,[role=row]>[role=presentation]:first-of-type>.table__column){border-start-start-radius:min(32px,var(--radius-2xl));border-end-start-radius:min(32px,var(--radius-2xl))}.table-root--secondary :is(th.table__column:last-child,[role=row]>[role=presentation]:last-of-type>.table__column){border-start-end-radius:min(32px,var(--radius-2xl));border-end-end-radius:min(32px,var(--radius-2xl))}.table-root--secondary .table__body{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.table-root--secondary .table__body tr:first-child td:first-child,.table-root--secondary .table__body tr:first-child td:last-child,.table-root--secondary .table__body tr:last-child td:first-child,.table-root--secondary .table__body tr:last-child td:last-child{border-radius:0}.table-root--secondary .table__body:not(tbody){border-radius:0;overflow:visible}.table-root--secondary .table__row .table__cell{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator-tertiary)}@supports (color:color-mix(in lab,red,red)){.table-root--secondary .table__row .table__cell{border-color:color-mix(in oklab,var(--separator-tertiary) 50%,transparent)}}.table-root--secondary .table__row .table__cell{background-color:#0000}@media(hover:hover){.table-root--secondary .table__row:hover .table__cell,.table-root--secondary .table__row[data-hovered=true] .table__cell{background-color:var(--default)}@supports (color:color-mix(in lab,red,red)){.table-root--secondary .table__row:hover .table__cell,.table-root--secondary .table__row[data-hovered=true] .table__cell{background-color:color-mix(in oklab,var(--default) 50%,transparent)}}}.table__content{border-collapse:separate;--tw-border-spacing-x:0px;--tw-border-spacing-y:0px;width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.table-root--primary .table__content{overflow:clip}.table__header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator)}@supports (color:color-mix(in lab,red,red)){.table__header{border-color:color-mix(in oklab,var(--separator) 50%,transparent)}}.table__header{background-color:var(--surface-secondary)}.table__column{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);text-align:start;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);position:relative}.table__column:after{content:"";pointer-events:none;height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;width:1px;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:calc(var(--radius) * .5);background-color:var(--separator);inset-inline-end:calc(var(--spacing) * 0);position:absolute;top:50%}.table__column:last-child:not(:only-child):after{content:none}.table__column[data-allows-sorting=true]{cursor:var(--cursor-interactive)}@media(hover:hover){.table__column[data-allows-sorting=true]:hover,.table__column[data-allows-sorting=true][data-hovered=true]{color:var(--foreground)}}.table__column:focus-visible,.table__column[data-focus-visible=true]{border-radius:calc(var(--radius) * 1);--tw-outline-style:none;box-shadow:inset 0 0 0 2px var(--focus);outline-style:none}[role=row]>[role=presentation]:last-of-type:not(:only-of-type)>.table__column:after{content:none}.table__sortable-column-header{justify-content:space-between;align-items:center;display:flex}.table__sortable-column-indicator{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out);place-content:center;display:inline-grid}.table__sortable-column-indicator[data-direction=descending]{rotate:180deg}.table__body tr:first-child td:first-child{border-start-start-radius:min(32px,var(--radius-2xl))}.table__body tr:first-child td:last-child{border-start-end-radius:min(32px,var(--radius-2xl))}.table__body tr:last-child td:first-child{border-end-start-radius:min(32px,var(--radius-2xl))}.table__body tr:last-child td:last-child{border-end-end-radius:min(32px,var(--radius-2xl))}.table__body:not(tbody){border-radius:min(32px,var(--radius-2xl));height:100%;position:relative;overflow:clip}.table__row{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator);height:100%;position:relative}@supports (color:color-mix(in lab,red,red)){.table__row{border-color:color-mix(in oklab,var(--separator) 50%,transparent)}}.table__row:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.table__row:hover .table__cell,.table__row[data-hovered=true] .table__cell{background-color:var(--surface)}@supports (color:color-mix(in lab,red,red)){.table__row:hover .table__cell,.table__row[data-hovered=true] .table__cell{background-color:color-mix(in oklab,var(--surface) 40%,transparent)}}}.table__row[data-selected=true] .table__cell{background-color:var(--surface)}@supports (color:color-mix(in lab,red,red)){.table__row[data-selected=true] .table__cell{background-color:color-mix(in oklab,var(--surface) 10%,transparent)}}.table__row[aria-disabled=true],.table__row[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.table__row:focus-visible,.table__row[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.table__row[data-dragging=true]{opacity:.5}.table__row[data-drop-target=true] .table__cell{background-color:var(--accent-soft)}.table__cell{background-color:var(--surface);height:100%;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);vertical-align:middle;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--foreground);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--separator-tertiary)}@supports (color:color-mix(in lab,red,red)){.table__cell{border-color:color-mix(in oklab,var(--separator-tertiary) 50%,transparent)}}.table__cell:focus-visible,.table__cell[data-focus-visible=true]{border-radius:calc(var(--radius) * 1);--tw-outline-style:none;box-shadow:inset 0 0 0 2px var(--focus);outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true]) :is(.table__cell,.table__column){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):only-child,.table__row:is(:focus-visible,[data-focus-visible=true])>:only-child :is(.table__cell,.table__column){border-radius:calc(var(--radius) * 1);--tw-shadow:inset 0 0 0 2px var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):first-child:not(:only-child),.table__row:is(:focus-visible,[data-focus-visible=true])>:first-child:not(:only-child) :is(.table__cell,.table__column){--tw-shadow:inset 2px 0 0 0 var(--tw-shadow-color,var(--focus)), inset 0 2px 0 0 var(--tw-shadow-color,var(--focus)), inset 0 -2px 0 0 var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-start-start-radius:calc(var(--radius) * 1);border-end-start-radius:calc(var(--radius) * 1);outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):last-child:not(:only-child),.table__row:is(:focus-visible,[data-focus-visible=true])>:last-child:not(:only-child) :is(.table__cell,.table__column){--tw-shadow:inset -2px 0 0 0 var(--tw-shadow-color,var(--focus)), inset 0 2px 0 0 var(--tw-shadow-color,var(--focus)), inset 0 -2px 0 0 var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-start-end-radius:calc(var(--radius) * 1);border-end-end-radius:calc(var(--radius) * 1);outline-style:none}.table__row:is(:focus-visible,[data-focus-visible=true])>:is(.table__cell,.table__column):not(:first-child):not(:last-child):not(:only-child),.table__row:is(:focus-visible,[data-focus-visible=true])>:not(:first-child):not(:last-child):not(:only-child) :is(.table__cell,.table__column){--tw-shadow:inset 0 2px 0 0 var(--tw-shadow-color,var(--focus)), inset 0 -2px 0 0 var(--tw-shadow-color,var(--focus));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.table__cell[data-tree-column]{padding-inline-start:calc(1rem * var(--table-row-level,1))}.table__footer{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);align-items:center;display:flex}.table__resizable-container{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);scrollbar-gutter:auto;position:relative;overflow:auto}.table__column-resizer{height:calc(var(--spacing) * 4);--tw-translate-y: -50% ;border-radius:calc(var(--radius) * .5);background-color:var(--separator);box-sizing:content-box;--tw-translate-x: 50% ;width:1px;translate:var(--tw-translate-x) var(--tw-translate-y);cursor:col-resize;touch-action:none;padding-inline:calc(var(--spacing) * 2);--tw-border-style:none;--tw-outline-style:none;inset-inline-end:calc(var(--spacing) * 0);background-clip:content-box;border-style:none;outline-style:none;position:absolute;top:50%}.table__column-resizer[data-hovered=true],.table__column-resizer:hover,.table__column-resizer[data-resizing=true]{height:100%;width:calc(var(--spacing) * .5);background-color:var(--accent)}.table__column-resizer[data-focus-visible=true],.table__column-resizer:focus-visible{height:100%;width:calc(var(--spacing) * .5);background-color:var(--focus)}.table__column:has(.table__column-resizer):after{content:none}.table__load-more td,.table__load-more [role=rowheader]{padding-block:calc(var(--spacing) * 3);text-align:center}:is(.table__load-more td,.table__load-more [role=rowheader])>*{margin-inline:auto}.table__load-more-content{justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 2);display:flex}.alert{justify-content:flex-start;align-items:flex-start;gap:calc(var(--spacing) * 4);background-color:var(--surface);width:100%;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);--tw-shadow:var(--surface-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:min(32px,var(--radius-3xl));flex-direction:row;display:flex}.alert__content{flex-direction:column;flex-grow:1;align-items:flex-start;height:100%;display:flex}.alert__indicator{padding:var(--spacing);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:flex}.alert__indicator [data-slot=alert-default-icon]{box-sizing:content-box;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.alert__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.alert__description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted)}.alert--default .alert__indicator,.alert--default .alert__title{color:var(--foreground)}.alert--accent .alert__indicator,.alert--accent .alert__title{color:var(--accent-soft-foreground)}.alert--success .alert__indicator,.alert--success .alert__title{color:var(--success-soft-foreground)}.alert--warning .alert__indicator,.alert--warning .alert__title{color:var(--warning-soft-foreground)}.alert--danger .alert__indicator,.alert--danger .alert__title{color:var(--danger-soft-foreground)}.empty-state{padding:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted)}.skeleton{pointer-events:none;border-radius:calc(var(--radius) * .5);background-color:var(--surface-tertiary);position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.skeleton{background-color:color-mix(in oklab,var(--surface-tertiary) 70%,transparent)}}.skeleton--shimmer:after{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-gradient-position:to right;animation:2s linear infinite skeleton;position:absolute;inset:0}@supports (background-image:linear-gradient(in lab,red,red)){.skeleton--shimmer:after{--tw-gradient-position:to right in oklab}}.skeleton--shimmer:after{background-image:linear-gradient(var(--tw-gradient-stops));--tw-gradient-from:transparent;--tw-gradient-via:var(--surface-tertiary);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));--tw-gradient-to:transparent;--tw-content:"";content:var(--tw-content)}.skeleton--shimmer:has(.skeleton):after{content:none}.skeleton--shimmer:has(.skeleton):before{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y);--tw-content:"";content:var(--tw-content);z-index:10;pointer-events:none;mix-blend-mode:overlay;background:linear-gradient(90deg,#0000,#ffffff80,#0000);animation:2s linear infinite skeleton;position:absolute;inset:0}.skeleton--shimmer:has(.skeleton) .skeleton:after{content:none}.skeleton--pulse{animation:var(--animate-pulse)}.meter{gap:var(--spacing);--meter-fill:var(--accent);grid-template-columns:1fr auto;grid-template-areas:"label output""track track";width:100%;display:grid}.meter [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.meter .meter__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);grid-area:output}.meter .meter__track{border-radius:calc(var(--radius) * .5);background-color:var(--default);height:calc(var(--spacing) * 2);grid-area:track;position:relative;overflow:hidden}.meter .meter__fill{border-radius:calc(var(--radius) * .5);background-color:var(--meter-fill);height:100%;transition:width .3s var(--ease-out);inset-inline-start:calc(var(--spacing) * 0);position:absolute;top:0}.meter .meter__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *),.meter .meter__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.meter .meter__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.meter .meter__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.meter .meter__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.meter .meter__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.meter:disabled,.meter[data-disabled=true],.meter[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.meter:disabled,.meter[data-disabled=true],.meter[aria-disabled=true]) [data-slot=label]{opacity:1}.meter--sm .meter__track{height:var(--spacing);border-radius:calc(var(--radius) * .25)}.meter--sm .meter__fill{border-radius:calc(var(--radius) * .25)}.meter--lg .meter__track{height:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * .75)}.meter--lg .meter__fill{border-radius:calc(var(--radius) * .75)}.meter--default{--meter-fill:var(--default-foreground)}.meter--accent{--meter-fill:var(--accent)}.meter--success{--meter-fill:var(--success)}.meter--warning{--meter-fill:var(--warning)}.meter--danger{--meter-fill:var(--danger)}.progress-bar{gap:var(--spacing);--progress-bar-fill:var(--accent);grid-template-columns:1fr auto;grid-template-areas:"label output""track track";width:100%;display:grid}.progress-bar [data-slot=label]{width:fit-content;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);grid-area:label}.progress-bar .progress-bar__output{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);grid-area:output}.progress-bar .progress-bar__track{border-radius:calc(var(--radius) * .5);background-color:var(--default);height:calc(var(--spacing) * 2);grid-area:track;position:relative;overflow:hidden}.progress-bar .progress-bar__fill{border-radius:calc(var(--radius) * .5);background-color:var(--progress-bar-fill);height:100%;transition:width .3s var(--ease-out);inset-inline-start:calc(var(--spacing) * 0);position:absolute;top:0}.progress-bar .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-bar .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-bar .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.progress-bar .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-bar .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-bar .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.progress-bar:not([aria-valuenow]) .progress-bar__fill{width:40%;animation:1.5s cubic-bezier(.65,0,.35,1) infinite progress-bar-indeterminate}.progress-bar:not([aria-valuenow]) .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-bar:not([aria-valuenow]) .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-bar:not([aria-valuenow]) .progress-bar__fill:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.progress-bar:not([aria-valuenow]) .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-bar:not([aria-valuenow]) .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-bar:not([aria-valuenow]) .progress-bar__fill:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.progress-bar:disabled,.progress-bar[data-disabled=true],.progress-bar[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.progress-bar:disabled,.progress-bar[data-disabled=true],.progress-bar[aria-disabled=true]) [data-slot=label]{opacity:1}@keyframes progress-bar-indeterminate{0%{transform:translate(-100%)}to{transform:translate(350%)}}.progress-bar--sm .progress-bar__track{height:var(--spacing);border-radius:calc(var(--radius) * .25)}.progress-bar--sm .progress-bar__fill{border-radius:calc(var(--radius) * .25)}.progress-bar--lg .progress-bar__track{height:calc(var(--spacing) * 3);border-radius:calc(var(--radius) * .75)}.progress-bar--lg .progress-bar__fill{border-radius:calc(var(--radius) * .75)}.progress-bar--default{--progress-bar-fill:var(--default-foreground)}.progress-bar--accent{--progress-bar-fill:var(--accent)}.progress-bar--success{--progress-bar-fill:var(--success)}.progress-bar--warning{--progress-bar-fill:var(--warning)}.progress-bar--danger{--progress-bar-fill:var(--danger)}.progress-circle{--progress-circle-stroke:var(--accent);--progress-circle-track-stroke:var(--default);justify-content:center;align-items:center;display:inline-flex}.progress-circle .progress-circle__track{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.progress-circle .progress-circle__track-circle{stroke:var(--progress-circle-track-stroke)}.progress-circle .progress-circle__fill-circle{stroke:var(--progress-circle-stroke);transition:stroke-dashoffset .3s var(--ease-out)}.progress-circle .progress-circle__fill-circle:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-circle .progress-circle__fill-circle:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-circle .progress-circle__fill-circle:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.progress-circle .progress-circle__fill-circle:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-circle .progress-circle__fill-circle:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-circle .progress-circle__fill-circle:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.progress-circle:not([aria-valuenow]) .progress-circle__track{animation:1s linear infinite progress-circle-spin}.progress-circle:not([aria-valuenow]) .progress-circle__track:is([data-reduce-motion=true],[data-reduce-motion=true] *),.progress-circle:not([aria-valuenow]) .progress-circle__track:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.progress-circle:not([aria-valuenow]) .progress-circle__track:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.progress-circle:not([aria-valuenow]) .progress-circle__track:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.progress-circle:not([aria-valuenow]) .progress-circle__track:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.progress-circle:not([aria-valuenow]) .progress-circle__track:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.progress-circle:disabled,.progress-circle[data-disabled=true],.progress-circle[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}@keyframes progress-circle-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.progress-circle--sm .progress-circle__track{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.progress-circle--lg .progress-circle__track{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.progress-circle--default{--progress-circle-stroke:var(--default-foreground)}.progress-circle--accent{--progress-circle-stroke:var(--accent)}.progress-circle--success{--progress-circle-stroke:var(--success)}.progress-circle--warning{--progress-circle-stroke:var(--warning)}.progress-circle--danger{--progress-circle-stroke:var(--danger)}.spinner{pointer-events:none;width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);flex-shrink:0;animation:.75s linear infinite spin;display:inline-flex}.spinner:is([data-reduce-motion=true],[data-reduce-motion=true] *),.spinner:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.spinner:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.spinner:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.spinner:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.spinner:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.spinner--sm{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.spinner--lg{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.spinner--xl{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.spinner--current{color:inherit}.spinner--accent{color:var(--accent)}.spinner--danger{color:var(--danger)}.spinner--success{color:var(--success)}.spinner--warning{color:var(--warning)}.toast-region{pointer-events:none;z-index:var(--z-index-toast);--tw-outline-style:none;outline-style:none;width:calc(100vw - 2rem);position:fixed}@media(min-width:40rem){.toast-region{width:auto;min-width:var(--toast-width)}}.toast-region{display:block}.toast-region--bottom{bottom:calc(var(--spacing) * 4);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);left:50%}.toast-region--bottom-start{inset-inline-start:calc(var(--spacing) * 4);bottom:calc(var(--spacing) * 4)}.toast-region--bottom-end{inset-inline-end:calc(var(--spacing) * 4);bottom:calc(var(--spacing) * 4)}.toast-region--top{top:calc(var(--spacing) * 4);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);left:50%}.toast-region--top-start{inset-inline-start:calc(var(--spacing) * 4);top:calc(var(--spacing) * 4)}.toast-region--top-end{inset-inline-end:calc(var(--spacing) * 4);top:calc(var(--spacing) * 4)}.toast-region:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--focus)}.toast{border-radius:min(32px,var(--radius-3xl));--toast-y:var(--offset-collapsed,0px);--toast-enter:0%;--toast-scale:var(--scale-collapsed,1);transform:translateY(calc(var(--dir,1) * (var(--toast-y) + var(--toast-enter)))) scale(var(--toast-scale));height:var(--toast-height,auto);pointer-events:auto;justify-content:flex-start;align-items:flex-start;gap:calc(var(--spacing) * 1.5);background-color:var(--surface);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--toast-ease:var(--ease-out-fluid);--toast-enter-duration:.35s;--toast-exit-duration:.25s;--toast-translate-duration:var(--toast-enter-duration);--toast-height-duration:var(--toast-enter-duration);--toast-opacity-duration:.15s;transition:transform var(--toast-translate-duration) var(--toast-ease),height var(--toast-height-duration) var(--toast-ease),opacity var(--toast-opacity-duration) var(--toast-ease);flex-direction:row;display:flex;position:absolute;inset-inline:0}.toast:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toast:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toast:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.toast:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toast:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toast:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.toast:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toast:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toast:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toast:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toast:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toast:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toast[data-entering=true]{--toast-enter:-100%}.toast--bottom,.toast--bottom-start,.toast--bottom-end{--dir:-1;transform-origin:bottom;bottom:0}:is(.toast--bottom,.toast--bottom-start,.toast--bottom-end)[data-expanded=true]:after{top:calc(-1 * var(--gap,12px) - 1px);bottom:0}.toast--top,.toast--top-start,.toast--top-end{--dir:1;transform-origin:top;top:0}:is(.toast--top,.toast--top-start,.toast--top-end)[data-expanded=true]:after{top:0;bottom:calc(-1 * var(--gap,12px) - 1px)}.toast>:not([data-slot=toast-close]){transition:opacity .2s var(--toast-ease)}.toast>:not([data-slot=toast-close]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.toast>:not([data-slot=toast-close]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toast>:not([data-slot=toast-close]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toast>:not([data-slot=toast-close]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toast>:not([data-slot=toast-close]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toast>:not([data-slot=toast-close]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toast:not([data-frontmost=true]):not([data-expanded=true]){--toast-y:var(--offset-collapsed,0px);height:var(--front-height,0px);overflow:hidden}.toast:not([data-frontmost=true]):not([data-expanded=true])>:not([data-slot=toast-close]){opacity:0}.toast:not([data-frontmost=true]):not([data-expanded=true]) .toast__close-button{pointer-events:none;opacity:0;outline:none}.toast[data-expanded=true]{--toast-y:var(--offset-expanded,0px);--toast-scale:1;height:var(--toast-height,auto)}.toast[data-expanded=true]:after{content:"";z-index:-1;position:absolute;inset-inline:0}.toast[data-exiting=true]{opacity:0}.toast[data-exiting=true][data-frontmost=true]{--toast-translate-duration:var(--toast-exit-duration);--toast-opacity-duration:.15s;--toast-enter:-100%;--toast-scale:1}.toast[data-exiting=true][data-expanded=true]:not([data-frontmost=true]){--toast-translate-duration:.2s;--toast-opacity-duration:.15s;--toast-scale:.96}.toast[data-exiting=true]:not([data-expanded=true]):not([data-frontmost=true]){--toast-translate-duration:.2s;--toast-opacity-duration:.15s;--toast-scale:calc(var(--scale-collapsed,1) * .96)}.toast[data-hidden=true]{pointer-events:none;opacity:0;display:flex}.toast:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--focus)}.toast__content{flex-direction:column;flex-grow:1;align-self:center;align-items:flex-start;display:flex}.toast__indicator{padding:var(--spacing);color:var(--overlay-foreground);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toast__indicator [data-slot=toast-default-icon]{box-sizing:content-box;width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.toast__indicator [data-slot=spinner],.toast__indicator [data-slot=spinner-icon]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.toast__indicator[data-swapped=true]>:not([data-slot=spinner]){animation:toast-indicator-fade .15s var(--toast-ease),toast-indicator-scale .2s var(--toast-ease)}.toast__indicator[data-swapped=true]>:not([data-slot=spinner]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.toast__indicator[data-swapped=true]>:not([data-slot=spinner]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toast__indicator[data-swapped=true]>:not([data-slot=spinner]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.toast__indicator[data-swapped=true]>:not([data-slot=spinner]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toast__indicator[data-swapped=true]>:not([data-slot=spinner]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toast__indicator[data-swapped=true]>:not([data-slot=spinner]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.toast__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--overlay-foreground)}.toast__description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted)}.toast__close-button{pointer-events:none;inset-inline-end:calc(var(--spacing) * -1);top:calc(var(--spacing) * -1);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);border-color:var(--border);background-color:var(--default);opacity:0;position:absolute}@media(min-width:40rem){.toast__close-button{border-style:var(--tw-border-style);background-color:var(--overlay);border-width:1px}}.toast__close-button{transition:opacity .15s var(--ease-smooth)}.toast__close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.toast__close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.toast__close-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.toast__close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.toast__close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.toast__close-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.toast__close-button [data-slot=close-button-icon]{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}@media(min-width:40rem){.toast__close-button [data-slot=close-button-icon]{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}}@media(hover:hover){.toast__close-button:hover,.toast__close-button[data-hovered=true]{background-color:var(--default)}}.toast[data-frontmost=true]:hover .toast__close-button,.toast[data-expanded=true]:hover .toast__close-button{pointer-events:auto;opacity:1}.toast[data-exiting=true] .toast__close-button{pointer-events:none;opacity:0}.toast__action{margin-top:calc(var(--spacing) * 2)}@media(min-width:40rem){.toast__action{margin-top:0}}.toast--accent .toast__title{color:var(--accent-soft-foreground)}.toast--success .toast__title,.toast--success .toast__indicator{color:var(--success-soft-foreground)}.toast--warning .toast__title,.toast--warning .toast__indicator{color:var(--warning-soft-foreground)}.toast--danger .toast__title,.toast--danger .toast__indicator{color:var(--danger-soft-foreground)}@keyframes toast-indicator-fade{0%{opacity:0}}@keyframes toast-indicator-scale{0%{scale:.92}}.checkbox-group{flex-direction:column;display:flex}.checkbox-group [data-slot=checkbox]{margin-top:calc(var(--spacing) * 4)}.checkbox{align-items:flex-start;gap:var(--spacing);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);outline-style:none;flex-direction:column;display:flex}.checkbox>[data-slot=description],.checkbox>[data-slot=field-error]{cursor:default;width:100%;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-wrap:wrap;overflow-wrap:break-word;color:var(--muted);-webkit-user-select:none;user-select:none;padding-inline-start:calc(var(--spacing) * 7)}.checkbox [data-slot=label]{-webkit-user-select:none;user-select:none}.checkbox .checkbox__content [data-slot=label]{cursor:var(--cursor-interactive)}.checkbox[data-disabled=true],.checkbox[data-disabled=true] [data-slot=description],.checkbox[data-disabled=true] [data-slot=field-error]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.checkbox[data-selected=true],.checkbox[data-indeterminate=true]) .checkbox__indicator{border-color:var(--accent-foreground)}.checkbox [data-slot=checkbox-default-indicator--checkmark]{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5);stroke-width:2.5px;color:var(--accent-foreground);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}.checkbox [data-slot=checkbox-default-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.checkbox [data-slot=checkbox-default-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.checkbox [data-slot=checkbox-default-indicator--checkmark]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.checkbox [data-slot=checkbox-default-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.checkbox [data-slot=checkbox-default-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.checkbox [data-slot=checkbox-default-indicator--checkmark]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.checkbox[data-selected=true] [data-slot=checkbox-default-indicator--checkmark]{transition:stroke-dashoffset .15s linear 15ms}.checkbox[data-invalid=true][data-selected=true] [data-slot=checkbox-default-indicator--checkmark],.checkbox[data-invalid=true][aria-checked=true] [data-slot=checkbox-default-indicator--checkmark],.checkbox[aria-invalid=true][data-selected=true] [data-slot=checkbox-default-indicator--checkmark],.checkbox[aria-invalid=true][aria-checked=true] [data-slot=checkbox-default-indicator--checkmark]{color:var(--danger-foreground)}.checkbox[data-indeterminate=true] [data-slot=checkbox-default-indicator--indeterminate]{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.checkbox[data-indeterminate=true][data-invalid=true] [data-slot=checkbox-default-indicator--indeterminate],.checkbox[data-indeterminate=true][aria-invalid=true] [data-slot=checkbox-default-indicator--indeterminate]{color:var(--danger-foreground)}.checkbox__control{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * .75);border-style:var(--tw-border-style);border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border,var(--border));background-color:var(--field-background,var(--default));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:background-color .2s var(--ease-out),border-color .2s var(--ease-out),transform .1s var(--ease-out);outline-style:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative;overflow:hidden}.checkbox__control:is([data-reduce-motion=true],[data-reduce-motion=true] *),.checkbox__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.checkbox__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.checkbox__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.checkbox__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.checkbox__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.checkbox__control{cursor:var(--cursor-interactive)}.checkbox__control:before{pointer-events:none;z-index:0;transform-origin:50%;--tw-scale-x:70%;--tw-scale-y:70%;--tw-scale-z:70%;scale:var(--tw-scale-x) var(--tw-scale-y);border-radius:calc(var(--radius) * .75);background-color:var(--accent);opacity:0;--tw-content:"";content:var(--tw-content);transition:scale .1s var(--ease-linear),opacity .2s var(--ease-linear),background-color .2s var(--ease-out);position:absolute;inset:0}@media(prefers-reduced-motion:reduce){.checkbox__control:before:not(:is()){transition-property:none}}.checkbox:focus-visible .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-focus-visible=true]) .checkbox__control,.checkbox [data-slot=checkbox-content][data-focus-visible=true] .checkbox__control{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.checkbox:hover .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-hovered=true]) .checkbox__control,.checkbox [data-slot=checkbox-content][data-hovered=true] .checkbox__control{border-color:var(--field-border-hover)}:is(.checkbox:hover .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-hovered=true]) .checkbox__control,.checkbox [data-slot=checkbox-content][data-hovered=true] .checkbox__control):before{background-color:var(--accent-hover)}.checkbox[aria-checked=true] .checkbox__control,.checkbox[data-selected=true] .checkbox__control{color:var(--accent-foreground);border-color:#0000}:is(.checkbox[aria-checked=true] .checkbox__control,.checkbox[data-selected=true] .checkbox__control):before{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.checkbox[data-indeterminate=true] .checkbox__control{background-color:var(--accent);color:var(--accent-foreground)}.checkbox:active[data-indeterminate=true] .checkbox__control,.checkbox[data-pressed=true][data-indeterminate=true] .checkbox__control,.checkbox:has([data-slot=checkbox-content][data-pressed=true])[data-indeterminate=true] .checkbox__control{background-color:var(--accent-hover)}.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control):focus,:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control):focus-visible,:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control)[data-focused=true],:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control)[data-focus-visible=true],:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control):focus-within,:is(.checkbox[data-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control,.checkbox[aria-invalid=true]:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control)[data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.checkbox[data-invalid=true][aria-checked=true] .checkbox__control,.checkbox[data-invalid=true][data-selected=true] .checkbox__control,.checkbox[aria-invalid=true][aria-checked=true] .checkbox__control,.checkbox[aria-invalid=true][data-selected=true] .checkbox__control{background-color:var(--danger);color:var(--danger-foreground);border-color:#0000}:is(.checkbox[data-invalid=true][aria-checked=true] .checkbox__control,.checkbox[data-invalid=true][data-selected=true] .checkbox__control,.checkbox[aria-invalid=true][aria-checked=true] .checkbox__control,.checkbox[aria-invalid=true][data-selected=true] .checkbox__control):before{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);background-color:var(--danger);opacity:1}.checkbox[data-indeterminate=true][aria-invalid=true] .checkbox__control,.checkbox[data-indeterminate=true][data-invalid=true] .checkbox__control{background-color:var(--danger);color:var(--danger-foreground)}.checkbox__indicator{z-index:10;width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3);justify-content:center;align-items:center;display:flex;position:relative}.checkbox__indicator svg{width:100%;height:100%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.checkbox--secondary .checkbox__control{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--checkbox-control-bg);--checkbox-control-bg:var(--default)}.checkbox:hover :is(.checkbox--secondary .checkbox__control),.checkbox:has([data-slot=checkbox-content][data-hovered=true]) :is(.checkbox--secondary .checkbox__control),.checkbox [data-slot=checkbox-content][data-hovered=true] :is(.checkbox--secondary .checkbox__control){border-color:var(--field-border-hover)}.checkbox__content{cursor:inherit;align-items:center;gap:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex;position:relative}.checkbox--secondary:not([aria-checked=true]):not([data-selected=true]):not([data-indeterminate=true]) .checkbox__control{background-color:var(--checkbox-control-bg)}:is(.checkbox--secondary[aria-checked=true] .checkbox__control,.checkbox--secondary[data-selected=true] .checkbox__control):before,.checkbox--secondary[data-indeterminate=true] .checkbox__control,.checkbox--secondary[data-indeterminate=true] .checkbox__control:before{background-color:var(--accent)}.fieldset{gap:calc(var(--spacing) * 6);flex-direction:column;flex:1 1 0;display:flex}.fieldset__legend{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.fieldset__field-group{width:100%}:where(.fieldset__field-group>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.fieldset__actions{align-items:center;gap:calc(var(--spacing) * 2);padding-top:var(--spacing);display:flex}.input-otp{align-items:center;gap:calc(var(--spacing) * 2);width:100%;display:flex;position:relative}.input-otp[data-disabled=true]{cursor:not-allowed;opacity:.5}.input-otp__group{align-items:center;gap:calc(var(--spacing) * 2);min-width:0;display:flex}.input-otp__slot{height:calc(var(--spacing) * 10);width:calc(var(--spacing) * 9.5);border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));min-width:0;color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:var(--field-radius,calc(var(--radius) * 1.5));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;flex:1;justify-content:center;align-items:center;display:flex;position:relative}.input-otp__slot:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-otp__slot:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-otp__slot:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-otp__slot:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-otp__slot:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-otp__slot:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.input-otp__slot:hover,.input-otp__slot[data-hovered=true]{background-color:var(--field-hover);border-color:var(--field-border-hover)}}.input-otp__slot[data-active=true]{z-index:10;background-color:var(--field-focus);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.input-otp__slot[data-filled=true]{background-color:var(--field-focus)}.input-otp__slot[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.input-otp__slot[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input-otp__slot[data-invalid=true]:focus,.input-otp__slot[data-invalid=true]:focus-visible,.input-otp__slot[data-invalid=true][data-focused=true],.input-otp__slot[data-invalid=true][data-focus-visible=true],.input-otp__slot[data-invalid=true]:focus-within,.input-otp__slot[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.input-otp__slot[data-invalid=true]{background-color:var(--field-focus)}.input-otp__slot-value{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);--tw-tracking:-.27px;letter-spacing:-.27px;animation:slot-value-in .25s var(--ease-smooth) both;transform-origin:bottom}.input-otp__slot-value:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-otp__slot-value:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-otp__slot-value:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){.input-otp__slot-value:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-otp__slot-value:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-otp__slot-value:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.input-otp__caret{height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * .5);background-color:var(--field-placeholder,var(--muted));width:2px;animation:1.2s ease-out infinite caret-blink;position:absolute}.input-otp__separator{border-radius:calc(var(--radius) * .5);background-color:var(--separator);flex-shrink:0;width:6px;height:2px}.input-otp--secondary .input-otp__slot{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--input-otp-slot-bg);--input-otp-slot-bg:var(--default);--input-otp-slot-bg-hover:var(--default-hover);--input-otp-slot-bg-focus:var(--default)}@media(hover:hover){.input-otp--secondary .input-otp__slot:hover,.input-otp--secondary .input-otp__slot[data-hovered=true]{background-color:var(--input-otp-slot-bg-hover)}}.input-otp--secondary .input-otp__slot[data-active=true],.input-otp--secondary .input-otp__slot[data-filled=true]{background-color:var(--input-otp-slot-bg-focus)}@keyframes slot-value-in{0%{opacity:0;transform:translateY(8px)scale(.8)}to{opacity:1;transform:translateY(0)scale(1)}}.input{border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;outline-style:none}.input::placeholder{color:var(--field-placeholder,var(--muted))}@media(min-width:40rem){.input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.input{border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.input:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.input:hover:not(:focus):not(:focus-visible),.input[data-hovered=true]:not([data-focused=true]):not([data-focus-visible=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.input:focus,.input[data-focused=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.input[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input[data-invalid=true]:focus,.input[data-invalid=true]:focus-visible,.input[data-invalid=true][data-focused=true],.input[data-invalid=true][data-focus-visible=true],.input[data-invalid=true]:focus-within,.input[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.input[data-invalid=true]{background-color:var(--field-focus)}.input:disabled,.input[data-disabled=true],.input[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.input--secondary{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--input-bg);--input-bg:var(--default);--input-bg-hover:var(--default-hover);--input-bg-focus:var(--default)}@media(hover:hover){.input--secondary:hover:not(:focus):not(:focus-visible),.input--secondary[data-hovered=true]:not([data-focus-visible=true]):not([data-focused=true]){background-color:var(--input-bg-hover)}}.input--secondary:focus,.input--secondary[data-focused=true]{background-color:var(--input-bg-focus)}.input--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input--secondary[data-invalid=true]:focus,.input--secondary[data-invalid=true]:focus-visible,.input--secondary[data-invalid=true][data-focused=true],.input--secondary[data-invalid=true][data-focus-visible=true],.input--secondary[data-invalid=true]:focus-within,.input--secondary[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.input--secondary[data-invalid=true]{background-color:var(--input-bg-focus)}.input--full-width{width:100%}.input-group{min-height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);outline-style:none;align-items:center;display:inline-flex}.input-group:has([data-slot=input-group-textarea]){align-items:flex-start;height:auto}.input-group{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.input-group:hover:not(:focus-within),.input-group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.input-group:has([data-slot=input-group-input]:focus),.input-group:has([data-slot=input-group-textarea]:focus){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.input-group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input-group[data-invalid=true]:focus,.input-group[data-invalid=true]:focus-visible,.input-group[data-invalid=true][data-focused=true],.input-group[data-invalid=true][data-focus-visible=true],.input-group[data-invalid=true]:focus-within,.input-group[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.input-group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.input-group[data-disabled=true],.input-group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:-webkit-any(.input-group:has([data-slot=input-group-input]:-webkit-autofill),.input-group:has([data-slot=input-group-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}:is(.input-group:has([data-slot=input-group-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}.input-group__input{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1}.input-group__input::placeholder{color:var(--field-placeholder,var(--muted))}@media(min-width:40rem){.input-group__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.input-group:has([data-slot=input-group-prefix]) .input-group__input{border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:0}.input-group:has([data-slot=input-group-suffix]) .input-group__input{border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:0}.input-group__input:focus,.input-group__input:focus-visible{--tw-outline-style:none;outline-style:none}.input-group__input:-webkit-autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:-webkit-autofill:hover{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:-webkit-autofill:focus{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:-webkit-autofill:active{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input:autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.input-group__input[data-slot=input-group-textarea]{resize:vertical;min-height:38px}.input-group__prefix{height:100%;padding-inline:calc(var(--spacing) * 3);color:var(--field-placeholder,var(--muted));border-width:var(--border-width-field);border-color:var(--field-border);border-style:solid;border-inline-end-color:var(--field-border);border-inline-start:none;background-color:#0000;border-top:none;border-bottom:none;border-start-start-radius:var(--field-radius,calc(var(--radius) * 1.5));border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--field-radius,calc(var(--radius) * 1.5));justify-content:center;align-items:center;display:flex}.input-group:has([data-slot=input-group-textarea]) .input-group__prefix{align-items:flex-start;padding-top:.5rem}.input-group__prefix{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth)}.input-group__prefix:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-group__prefix:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-group__prefix:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-group__prefix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-group__prefix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-group__prefix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.input-group__suffix{height:100%;padding-inline:calc(var(--spacing) * 3);color:var(--field-placeholder,var(--muted));border-width:var(--border-width-field);border-color:var(--field-border);border-style:solid;border-inline-start-color:var(--field-border);border-inline-end:none;background-color:#0000;border-top:none;border-bottom:none;border-start-start-radius:0;border-start-end-radius:var(--field-radius,calc(var(--radius) * 1.5));border-end-end-radius:var(--field-radius,calc(var(--radius) * 1.5));border-end-start-radius:0;justify-content:center;align-items:center;display:flex}.input-group:has([data-slot=input-group-textarea]) .input-group__suffix{align-items:flex-start;padding-top:.5rem}.input-group__suffix{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth)}.input-group__suffix:is([data-reduce-motion=true],[data-reduce-motion=true] *),.input-group__suffix:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.input-group__suffix:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.input-group__suffix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.input-group__suffix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.input-group__suffix:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.input-group--secondary{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--input-group-bg);--input-group-bg:var(--default);--input-group-bg-hover:var(--default-hover);--input-group-bg-focus:var(--default)}@media(hover:hover){.input-group--secondary:hover:not(:focus-within),.input-group--secondary[data-hovered=true]:not([data-focus-within=true]){background-color:var(--input-group-bg-hover)}}.input-group--secondary:has([data-slot=input-group-input]:focus),.input-group--secondary:has([data-slot=input-group-textarea]:focus){background-color:var(--input-group-bg-focus)}.input-group--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.input-group--secondary[data-invalid=true]:focus,.input-group--secondary[data-invalid=true]:focus-visible,.input-group--secondary[data-invalid=true][data-focused=true],.input-group--secondary[data-invalid=true][data-focus-visible=true],.input-group--secondary[data-invalid=true]:focus-within,.input-group--secondary[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.input-group--secondary[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--input-group-bg-focus)}.input-group--secondary [data-slot=input-group-input],.input-group--secondary [data-slot=input-group-textarea]{background-color:#0000}.input-group--full-width{width:100%}.number-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.number-field[data-invalid=true],.number-field[aria-invalid=true]) [data-slot=description]{display:none}.number-field [data-slot=label]{width:fit-content}.number-field__group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);outline-style:none;grid-template-columns:1fr;align-items:center;display:grid;overflow:hidden}.number-field__group:has([slot=decrement]){grid-template-columns:40px 1fr}.number-field__group:has([slot=increment]){grid-template-columns:1fr 40px}.number-field__group:has([slot=decrement]):has([slot=increment]){grid-template-columns:40px 1fr 40px}.number-field__group{transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.number-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.number-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.number-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.number-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.number-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.number-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.number-field__group:hover:not(:focus-within),.number-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.number-field__group[data-focus-within=true],.number-field__group:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.number-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.number-field__group[data-invalid=true]:focus,.number-field__group[data-invalid=true]:focus-visible,.number-field__group[data-invalid=true][data-focused=true],.number-field__group[data-invalid=true][data-focus-visible=true],.number-field__group[data-invalid=true]:focus-within,.number-field__group[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.number-field__group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.number-field__group[data-disabled=true],.number-field__group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:-webkit-any(.number-field__group:has([data-slot=number-field-input]:-webkit-autofill),.number-field__group:has([data-slot=number-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}:is(.number-field__group:has([data-slot=number-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}.number-field__input{border-style:var(--tw-border-style);min-width:0;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none}@media(min-width:40rem){.number-field__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.number-field__group:has([slot=decrement]) .number-field__input{border-start-start-radius:0;border-end-start-radius:0}.number-field__group:has([slot=increment]) .number-field__input{border-start-end-radius:0;border-end-end-radius:0}.number-field__input:focus,.number-field__input:focus-visible{--tw-outline-style:none;outline-style:none}.number-field__input:-webkit-autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:-webkit-autofill:hover{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:-webkit-autofill:focus{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:-webkit-autofill:active{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__input:autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.number-field__increment-button,.number-field__decrement-button{height:100%;width:calc(var(--spacing) * 10);color:var(--field-foreground,var(--foreground));--tw-outline-style:none;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth);background-color:#0000;border-style:solid;border-radius:0;outline-style:none;justify-content:center;align-items:center;display:flex}:is(.number-field__increment-button,.number-field__decrement-button):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.number-field__increment-button,.number-field__decrement-button):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.number-field__increment-button,.number-field__decrement-button):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.number-field__increment-button,.number-field__decrement-button):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.number-field__increment-button,.number-field__decrement-button):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.number-field__increment-button,.number-field__decrement-button):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.number-field__increment-button,.number-field__decrement-button{cursor:var(--cursor-interactive)}:is(.number-field__increment-button,.number-field__decrement-button):active,:is(.number-field__increment-button,.number-field__decrement-button)[data-pressed=true]{background-color:var(--field-foreground,var(--foreground))}@supports (color:color-mix(in lab,red,red)){:is(.number-field__increment-button,.number-field__decrement-button):active,:is(.number-field__increment-button,.number-field__decrement-button)[data-pressed=true]{background-color:color-mix(in oklab,var(--field-foreground,var(--foreground)) 10%,transparent)}}:is(.number-field__increment-button,.number-field__decrement-button):active,:is(.number-field__increment-button,.number-field__decrement-button)[data-pressed=true]{transform:scale(.97)}:is(.number-field__increment-button,.number-field__decrement-button):disabled,:is(.number-field__increment-button,.number-field__decrement-button)[data-disabled=true],:is(.number-field__increment-button,.number-field__decrement-button)[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:is(.number-field__increment-button,.number-field__decrement-button) [data-slot=number-field-increment-button-icon],:is(.number-field__increment-button,.number-field__decrement-button) [data-slot=number-field-decrement-button-icon]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.number-field__increment-button{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-color:var(--field-placeholder,var(--muted));border-start-start-radius:0;border-start-end-radius:var(--field-radius,calc(var(--radius) * 1.5));border-end-end-radius:var(--field-radius,calc(var(--radius) * 1.5));border-end-start-radius:0}@supports (color:color-mix(in lab,red,red)){.number-field__increment-button{border-color:color-mix(in oklab,var(--field-placeholder,var(--muted)) 15%,transparent)}}.number-field__decrement-button{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px;border-color:var(--field-placeholder,var(--muted));border-start-start-radius:var(--field-radius,calc(var(--radius) * 1.5));border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--field-radius,calc(var(--radius) * 1.5))}@supports (color:color-mix(in lab,red,red)){.number-field__decrement-button{border-color:color-mix(in oklab,var(--field-placeholder,var(--muted)) 15%,transparent)}}.number-field--secondary .number-field__group{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--number-field-group-bg);--number-field-group-bg:var(--default);--number-field-group-bg-hover:var(--default-hover);--number-field-group-bg-focus:var(--default)}@media(hover:hover){.number-field--secondary .number-field__group:hover:not(:focus-within),.number-field--secondary .number-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--number-field-group-bg-hover)}}.number-field--secondary .number-field__group:focus-within,.number-field--secondary .number-field__group[data-focus-within=true]{background-color:var(--number-field-group-bg-focus)}.number-field--secondary .number-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.number-field--secondary .number-field__group[data-invalid=true]:focus,.number-field--secondary .number-field__group[data-invalid=true]:focus-visible,.number-field--secondary .number-field__group[data-invalid=true][data-focused=true],.number-field--secondary .number-field__group[data-invalid=true][data-focus-visible=true],.number-field--secondary .number-field__group[data-invalid=true]:focus-within,.number-field--secondary .number-field__group[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.number-field--secondary .number-field__group[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--number-field-group-bg-focus)}.number-field--secondary .number-field__group [data-slot=number-field-input]{background-color:#0000}.number-field--full-width,.number-field__group--full-width{width:100%}.radio-group{flex-direction:column;display:flex}.radio-group[data-orientation=vertical] [data-slot=radio]{margin-top:calc(var(--spacing) * 4)}.radio-group[data-orientation=horizontal]{gap:calc(var(--spacing) * 4);flex-flow:wrap}.radio-group--secondary .radio__control{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--radio-control-bg);--radio-control-bg:var(--default);--radio-control-bg-hover:var(--default-hover)}.radio:has([data-slot=radio-content][data-hovered=true]) :is(.radio-group--secondary .radio__control),.radio [data-slot=radio-content][data-hovered=true] :is(.radio-group--secondary .radio__control){border-color:var(--field-border-hover)}.radio:not([data-selected]):not(:has(input:checked)) :is(.radio-group--secondary .radio__control) .radio__indicator:empty:before{background-color:var(--radio-control-bg)}.radio:has([data-slot=radio-content][data-hovered=true]):not([data-selected]):not(:has(input:checked)) :is(.radio-group--secondary .radio__control) .radio__indicator:empty:before{background-color:var(--radio-control-bg-hover)}.radio{align-items:flex-start;gap:var(--spacing);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);outline-style:none;flex-direction:column;display:flex}.radio [data-slot=label]{-webkit-user-select:none;user-select:none}.radio .radio__content [data-slot=label]{cursor:var(--cursor-interactive)}.radio>[data-slot=description],.radio>[data-slot=field-error]{cursor:default;width:100%;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-wrap:wrap;overflow-wrap:break-word;color:var(--muted);-webkit-user-select:none;user-select:none;padding-inline-start:calc(var(--spacing) * 7)}.radio:disabled,.radio[data-disabled=true],.radio[aria-disabled=true],:is(.radio:disabled,.radio[data-disabled=true],.radio[aria-disabled=true]) [data-slot=description],:is(.radio:disabled,.radio[data-disabled=true],.radio[aria-disabled=true]) [data-slot=field-error]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.radio__content{cursor:inherit;align-items:center;gap:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline-style:none;display:inline-flex;position:relative}.radio__control{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1);border-style:var(--tw-border-style);border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border,var(--border));background-color:var(--field-background,var(--default));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;transition:background-color .2s var(--ease-out),border-color .2s var(--ease-out),transform .1s var(--ease-out);outline-style:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.radio__control:is([data-reduce-motion=true],[data-reduce-motion=true] *),.radio__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.radio__control:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.radio__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.radio__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.radio__control:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.radio__control{cursor:var(--cursor-interactive)}.radio:has([data-slot=radio-content][data-focus-visible=true]) .radio__control,.radio [data-slot=radio-content][data-focus-visible=true] .radio__control{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.radio:has([data-slot=radio-content][data-hovered=true]) .radio__control,.radio [data-slot=radio-content][data-hovered=true] .radio__control{border-color:var(--field-border-hover)}.radio:has([data-slot=radio-content][data-hovered=true]):not([data-selected]):not(:has(input:checked)) .radio__control .radio__indicator:empty:before{background-color:var(--field-hover)}.radio:has([data-slot=radio-content][data-pressed=true]) .radio__control,.radio [data-slot=radio-content][data-pressed=true] .radio__control{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.radio[data-selected] .radio__control,.radio:has([data-slot=radio-content][aria-checked=true]) .radio__control,.radio:has(input:checked) .radio__control{background-color:var(--accent);border-color:#0000}.radio[data-selected]:has([data-slot=radio-content][data-pressed=true]) .radio__control,.radio:has([data-slot=radio-content][data-pressed=true][aria-checked=true]) .radio__control,.radio:has(input:checked):has([data-slot=radio-content][data-pressed=true]) .radio__control{background-color:var(--accent-hover)}.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control):focus,:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control):focus-visible,:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control)[data-focused=true],:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control)[data-focus-visible=true],:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control):focus-within,:is(.radio[data-invalid=true] .radio__control,.radio[aria-invalid=true] .radio__control)[data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control):focus,:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control):focus-visible,:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control)[data-focused=true],:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control)[data-focus-visible=true],:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control):focus-within,:is(.radio[data-invalid=true][data-selected] .radio__control,.radio[aria-invalid=true][data-selected] .radio__control,.radio[data-invalid=true]:has(input:checked) .radio__control,.radio[aria-invalid=true]:has(input:checked) .radio__control)[data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.radio__indicator{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.radio__indicator:empty:before{content:"";border-radius:calc(var(--radius) * 1);background-color:var(--field-background,var(--default));width:100%;height:100%;transition:scale .2s var(--ease-out),background-color .2s var(--ease-out);scale:1}@media(prefers-reduced-motion:reduce){.radio__indicator:empty:before:not(:is()){transition-property:none}}.radio[data-selected] .radio__indicator:empty:before,.radio:has([data-slot=radio-content][aria-checked=true]) .radio__indicator:empty:before,.radio:has(input:checked) .radio__indicator:empty:before{background-color:var(--accent-foreground);scale:.4286}.radio[data-selected]:has([data-slot=radio-content][data-pressed=true]) .radio__indicator:empty:before,.radio:has([data-slot=radio-content][data-pressed=true][aria-checked=true]) .radio__indicator:empty:before,.radio:has(input:checked):has([data-slot=radio-content][data-pressed=true]) .radio__indicator:empty:before{scale:.5714}.textfield{gap:var(--spacing);flex-direction:column;display:flex}:is(.textfield[data-invalid=true],.textfield[aria-invalid=true]) [data-slot=description]{display:none}.textfield--full-width,.textfield--full-width [data-slot=input],.textfield--full-width [data-slot=textarea]{width:100%}.search-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.search-field[data-invalid=true],.search-field[aria-invalid=true]) [data-slot=description]{display:none}.search-field [data-slot=label]{width:fit-content}.search-field[data-empty=true] [data-slot=search-field-clear-button]{pointer-events:none;opacity:0}.search-field__group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;align-items:center;display:inline-flex;position:relative;overflow:hidden}.search-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.search-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.search-field__group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.search-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.search-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.search-field__group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.search-field__group:hover:not(:focus-within),.search-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.search-field__group[data-focus-within=true],.search-field__group:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.search-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.search-field__group[data-invalid=true]:focus,.search-field__group[data-invalid=true]:focus-visible,.search-field__group[data-invalid=true][data-focused=true],.search-field__group[data-invalid=true][data-focus-visible=true],.search-field__group[data-invalid=true]:focus-within,.search-field__group[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.search-field__group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.search-field__group[data-disabled=true],.search-field__group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}:-webkit-any(.search-field__group:has([data-slot=search-field-input]:-webkit-autofill),.search-field__group:has([data-slot=search-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}:is(.search-field__group:has([data-slot=search-field-input]:autofill)){background-color:var(--field-focus);border-color:var(--field-border-focus)}.search-field__input{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1}@media(min-width:40rem){.search-field__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.search-field__input::-webkit-search-cancel-button{appearance:none}.search-field__input::-webkit-search-decoration{appearance:none}.search-field__group:has([data-slot=search-field-search-icon]) .search-field__input{border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:calc(var(--spacing) * 2)}.search-field__group:has([slot=clear]) .search-field__input{border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:calc(var(--spacing) * 2)}.search-field__input:focus,.search-field__input:focus-visible{--tw-outline-style:none;outline-style:none}.search-field__input:-webkit-autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:-webkit-autofill:hover{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:-webkit-autofill:focus{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:-webkit-autofill:active{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__input:autofill{-webkit-text-fill-color:var(--field-foreground);caret-color:var(--field-foreground);transition:background-color 9999s ease-in-out;box-shadow:inset 0 0 0 1000px #0000}.search-field__search-icon{pointer-events:none;color:var(--field-placeholder,var(--muted));width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);flex-shrink:0;margin-inline-start:calc(var(--spacing) * 3);margin-inline-end:0}.search-field__clear-button{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0;margin-inline-end:calc(var(--spacing) * 2)}.search-field__clear-button [data-slot=close-button-icon]{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.search-field--secondary .search-field__group{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--search-field-group-bg);--search-field-group-bg:var(--default);--search-field-group-bg-hover:var(--default-hover);--search-field-group-bg-focus:var(--default)}@media(hover:hover){.search-field--secondary .search-field__group:hover:not(:focus-within),.search-field--secondary .search-field__group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--search-field-group-bg-hover)}}.search-field--secondary .search-field__group:focus-within,.search-field--secondary .search-field__group[data-focus-within=true]{background-color:var(--search-field-group-bg-focus)}.search-field--secondary .search-field__group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.search-field--secondary .search-field__group[data-invalid=true]:focus,.search-field--secondary .search-field__group[data-invalid=true]:focus-visible,.search-field--secondary .search-field__group[data-invalid=true][data-focused=true],.search-field--secondary .search-field__group[data-invalid=true][data-focus-visible=true],.search-field--secondary .search-field__group[data-invalid=true]:focus-within,.search-field--secondary .search-field__group[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.search-field--secondary .search-field__group[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--search-field-group-bg-focus)}.search-field--secondary .search-field__group [data-slot=search-field-input]{background-color:#0000}.search-field--full-width,.search-field__group--full-width{width:100%}.textarea{border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;outline-style:none}.textarea::placeholder{color:var(--field-placeholder,var(--muted))}@media(min-width:40rem){.textarea{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.textarea{border-width:var(--border-width-field);border-color:var(--field-border);min-height:38px;transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out)}.textarea:is([data-reduce-motion=true],[data-reduce-motion=true] *),.textarea:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.textarea:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.textarea:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.textarea:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.textarea:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.textarea:hover:not(:focus):not(:focus-visible),.textarea[data-hovered=true]:not([data-focused=true]):not([data-focus-visible=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.textarea:focus,.textarea[data-focused=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.textarea[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.textarea[data-invalid=true]:focus,.textarea[data-invalid=true]:focus-visible,.textarea[data-invalid=true][data-focused=true],.textarea[data-invalid=true][data-focus-visible=true],.textarea[data-invalid=true]:focus-within,.textarea[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.textarea[data-invalid=true]{background-color:var(--field-focus)}.textarea:disabled,.textarea[data-disabled=true],.textarea[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.textarea--secondary{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--textarea-bg);--textarea-bg:var(--default);--textarea-bg-hover:var(--default-hover);--textarea-bg-focus:var(--default)}@media(hover:hover){.textarea--secondary:hover:not(:focus):not(:focus-visible),.textarea--secondary[data-hovered=true]:not([data-focused=true]):not([data-focus-visible=true]){background-color:var(--textarea-bg-hover)}}.textarea--secondary:focus,.textarea--secondary[data-focused=true]{background-color:var(--textarea-bg-focus)}.textarea--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.textarea--secondary[data-invalid=true]:focus,.textarea--secondary[data-invalid=true]:focus-visible,.textarea--secondary[data-invalid=true][data-focused=true],.textarea--secondary[data-invalid=true][data-focus-visible=true],.textarea--secondary[data-invalid=true]:focus-within,.textarea--secondary[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.textarea--secondary[data-invalid=true]{background-color:var(--textarea-bg-focus)}.textarea--full-width{width:100%}.calendar{width:calc(var(--spacing) * 63);max-width:calc(var(--spacing) * 63);container-type:inline-size}.calendar--week-view .calendar__cell,.calendar--day-view .calendar__cell{aspect-ratio:1;place-self:center;width:100%;height:auto}.calendar--day-view .calendar__grid{flex-direction:column;display:flex}.calendar--day-view .calendar__grid-header{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.calendar--day-view .calendar__grid-header>tr{display:contents}.calendar--day-view .calendar__grid-body{margin-top:var(--spacing);grid-template-columns:repeat(7,1fr);width:100%;display:grid}.calendar--day-view .calendar__grid-body>tr{display:contents}.calendar--day-view .calendar__grid-body>tr:first-child>td{margin-top:0}.calendar__header{padding-inline:calc(var(--spacing) * .5);padding-bottom:calc(var(--spacing) * 4);justify-content:space-between;align-items:center;display:flex}.calendar__header:has(.calendar-year-picker__trigger[data-open=true]) .calendar__nav-button{pointer-events:none;opacity:0}.calendar__heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);flex:1}.calendar__nav-button{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);border-radius:calc(var(--radius) * 2);color:var(--accent-soft-foreground);will-change:scale;transition:transform .25s var(--ease-out),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out),opacity .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);justify-content:center;align-items:center;display:flex}.calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar__nav-button{cursor:var(--cursor-interactive)}@media(hover:hover){.calendar__nav-button:hover,.calendar__nav-button[data-hovered=true]{background-color:var(--default);color:var(--accent-soft-foreground)}}.calendar__nav-button:active,.calendar__nav-button[data-pressed=true]{transform:scale(.95)}.calendar__nav-button:focus-visible,.calendar__nav-button[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.calendar__nav-button:disabled,.calendar__nav-button[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.calendar__nav-button-icon{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.calendar__nav-button-icon:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.calendar__grid{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.calendar__grid[aria-readonly=true] .calendar__cell{pointer-events:none}.calendar__grid-header,.calendar__grid-header>tr,.calendar__grid-body,.calendar__grid-body>tr{display:contents}.calendar__grid-body>tr:first-child>td{margin-top:var(--spacing)}.calendar__grid-row{display:contents}.calendar__header-cell{padding-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);justify-content:center;align-items:center;display:flex}.calendar__cell{aspect-ratio:1;border-radius:calc(var(--radius) * 3);text-align:center;width:100%;height:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;-webkit-tap-highlight-color:transparent;will-change:scale;transition:transform .25s var(--ease-out),box-shadow .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;justify-content:center;align-items:center;display:flex;position:relative}.calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar__cell{cursor:var(--cursor-interactive)}.calendar__cell:focus-visible:not([data-focused]),.calendar__cell[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.calendar__cell[data-today=true]{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}@media(hover:hover){.calendar__cell[data-today=true]:hover:not([data-selected=true]),.calendar__cell[data-today=true][data-hovered=true]:not([data-selected=true]){background-color:var(--accent-soft-hover)}}.calendar__cell[data-selected=true]{background-color:var(--accent);color:var(--accent-foreground)}.calendar__cell:active,.calendar__cell[data-pressed=true]{background-color:var(--default);transform:scale(.95)}:is(.calendar__cell:active,.calendar__cell[data-pressed=true])[data-selected=true]{background-color:var(--accent-hover)}@media(hover:hover){.calendar__cell:hover:not([data-selected=true]),.calendar__cell[data-hovered=true]:not([data-selected=true]){background-color:var(--default)}}.calendar__cell[data-outside-month=true]{color:var(--muted);opacity:.5}.calendar__cell[data-selected=true][data-outside-month=true]{background-color:var(--default)}.calendar__cell[data-unavailable=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.calendar__cell:disabled:not([data-outside-month=true]),.calendar__cell[data-disabled=true]:not([data-outside-month=true]){opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none;text-decoration:line-through}.calendar__cell-indicator{bottom:var(--spacing);--tw-translate-x: -50% ;width:3px;height:3px;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:calc(var(--radius) * .25);background-color:var(--muted);position:absolute;left:50%}[data-selected=true]>.calendar__cell-indicator{background-color:var(--accent-foreground)}.range-calendar{width:calc(var(--spacing) * 63);max-width:calc(var(--spacing) * 63);container-type:inline-size}.range-calendar--week-view .range-calendar__cell,.range-calendar--day-view .range-calendar__cell{aspect-ratio:1;place-self:center;width:100%;height:auto}.range-calendar--day-view .range-calendar__grid{flex-direction:column;display:flex}.range-calendar--day-view .range-calendar__grid-header{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.range-calendar--day-view .range-calendar__grid-header>tr{display:contents}.range-calendar--day-view .range-calendar__grid-body{margin-top:var(--spacing);grid-template-columns:repeat(7,1fr);width:100%;display:grid}.range-calendar--day-view .range-calendar__grid-body>tr{display:contents}.range-calendar--day-view .range-calendar__grid-body>tr:first-child>td{margin-top:0}.range-calendar__header{padding-inline:calc(var(--spacing) * .5);padding-bottom:calc(var(--spacing) * 4);justify-content:space-between;align-items:center;display:flex}.range-calendar__header:has(.calendar-year-picker__trigger[data-open=true]) .range-calendar__nav-button{pointer-events:none;opacity:0}.range-calendar__heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);flex:1}.range-calendar__nav-button{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);border-radius:calc(var(--radius) * 1.5);color:var(--accent-soft-foreground);will-change:scale;transition:transform .25s var(--ease-out),background-color .1s var(--ease-out),box-shadow .1s var(--ease-out),opacity .15s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);justify-content:center;align-items:center;display:flex}.range-calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.range-calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.range-calendar__nav-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.range-calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.range-calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.range-calendar__nav-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.range-calendar__nav-button{cursor:var(--cursor-interactive)}@media(hover:hover){.range-calendar__nav-button:hover,.range-calendar__nav-button[data-hovered=true]{background-color:var(--default);color:var(--accent-soft-foreground)}}.range-calendar__nav-button:active,.range-calendar__nav-button[data-pressed=true]{transform:scale(.95)}.range-calendar__nav-button:focus-visible,.range-calendar__nav-button[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.range-calendar__nav-button:disabled,.range-calendar__nav-button[data-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.range-calendar__nav-button-icon{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.range-calendar__nav-button-icon:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.range-calendar__grid{grid-template-columns:repeat(7,1fr);width:100%;display:grid}.range-calendar__grid[aria-readonly=true] .range-calendar__cell{pointer-events:none}.range-calendar__grid-header,.range-calendar__grid-header>tr,.range-calendar__grid-body,.range-calendar__grid-body>tr{display:contents}.range-calendar__grid-body>tr:first-child>td{margin-top:var(--spacing)}.range-calendar__grid-row{display:contents}.range-calendar__header-cell{padding-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted);justify-content:center;align-items:center;display:flex}.range-calendar__cell{z-index:1;border-radius:calc(var(--radius) * 3);--tw-outline-style:none;cursor:var(--cursor-interactive);will-change:background-color,border-color;transition:box-shadow .1s var(--ease-out),border-color .1s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;margin-block:2px;margin-inline:0;padding:0;position:relative}.range-calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *),.range-calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.range-calendar__cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.range-calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.range-calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.range-calendar__cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.range-calendar__cell .range-calendar__cell-button{aspect-ratio:1;border-radius:calc(var(--radius) * 3);width:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);-webkit-tap-highlight-color:transparent;will-change:scale;transition:scale .2s var(--ease-out);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);justify-content:center;align-items:center;display:flex}.range-calendar__cell .range-calendar__cell-button:is([data-reduce-motion=true],[data-reduce-motion=true] *),.range-calendar__cell .range-calendar__cell-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.range-calendar__cell .range-calendar__cell-button:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.range-calendar__cell .range-calendar__cell-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.range-calendar__cell .range-calendar__cell-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.range-calendar__cell .range-calendar__cell-button:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.range-calendar__cell:focus-visible:not([data-focused]),.range-calendar__cell[data-focus-visible=true]{z-index:2}:is(.range-calendar__cell:focus-visible:not([data-focused]),.range-calendar__cell[data-focus-visible=true]) .range-calendar__cell-button{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.range-calendar__cell[data-today=true] .range-calendar__cell-button{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}@media(hover:hover){:is(.range-calendar__cell[data-today=true]:hover:not([data-selected=true]),.range-calendar__cell[data-today=true][data-hovered=true]:not([data-selected=true])) .range-calendar__cell-button{background-color:var(--accent-soft-hover)}}.range-calendar__cell[data-selected=true]:not([data-outside-month=true]){background-color:var(--accent-soft);border-radius:0}.range-calendar__cell[data-selected=true]:is(td:first-child>*,[aria-disabled]+td>*){border-start-start-radius:calc(var(--radius) * 1);border-end-start-radius:calc(var(--radius) * 1)}.range-calendar__cell[data-selected=true]:is(td:first-child>*,[aria-disabled]+td>*)[data-selection-start=true]{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.range-calendar__cell[data-selected=true]:is(td:last-child>*,td:has(+[aria-disabled])>*){border-start-end-radius:calc(var(--radius) * 1);border-end-end-radius:calc(var(--radius) * 1)}.range-calendar__cell[data-selected=true]:is(td:last-child>*,td:has(+[aria-disabled])>*)[data-selection-end=true]{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.range-calendar__cell[data-selection-start=true]:not([data-outside-month=true]),.range-calendar__cell[data-selection-end=true]:not([data-outside-month=true]){z-index:2}:is(.range-calendar__cell[data-selection-start=true]:not([data-outside-month=true]),.range-calendar__cell[data-selection-end=true]:not([data-outside-month=true])) .range-calendar__cell-button{background-color:var(--accent);color:var(--accent-foreground)}.range-calendar__cell[data-selection-start=true]:not([data-outside-month=true]){border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.range-calendar__cell[data-selection-end=true]:not([data-outside-month=true]){border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}:is(.range-calendar__cell:active,.range-calendar__cell[data-pressed=true]) .range-calendar__cell-button{scale:.9}:is(:is(.range-calendar__cell:active,.range-calendar__cell[data-pressed=true])[data-selection-start=true],:is(.range-calendar__cell:active,.range-calendar__cell[data-pressed=true])[data-selection-end=true]) .range-calendar__cell-button{background-color:var(--accent-hover)}@media(hover:hover){:is(.range-calendar__cell:hover:not([data-selected=true]),.range-calendar__cell[data-hovered=true]:not([data-selected=true])) .range-calendar__cell-button{background-color:var(--default)}}.range-calendar__cell[data-outside-month=true]{color:var(--muted);opacity:.5}.range-calendar__cell[data-selected=true][data-outside-month=true]:not([data-selection-start=true],[data-selection-end=true]){background-color:var(--default)}@supports (color:color-mix(in lab,red,red)){.range-calendar__cell[data-selected=true][data-outside-month=true]:not([data-selection-start=true],[data-selection-end=true]){background-color:color-mix(in oklab,var(--default) 20%,transparent)}}.range-calendar__cell[data-unavailable=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.range-calendar__cell:disabled:not([data-outside-month=true]),.range-calendar__cell[data-disabled=true]:not([data-outside-month=true]){opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none;text-decoration:line-through}.range-calendar__grid-body td:has(>.range-calendar__cell[data-outside-month=true])+td>.range-calendar__cell[data-selected=true]{border-start-start-radius:calc(var(--radius) * 1);border-end-start-radius:calc(var(--radius) * 1)}.range-calendar__grid-body td:has(>.range-calendar__cell[data-outside-month=true])+td>.range-calendar__cell[data-selected=true][data-outside-month=true],.range-calendar__grid-body td:has(>.range-calendar__cell[data-outside-month=true])+td>.range-calendar__cell[data-selected=true][data-selection-start=true]{border-start-start-radius:calc(var(--radius) * 3);border-end-start-radius:calc(var(--radius) * 3)}.range-calendar__grid-body td:has(>.range-calendar__cell[data-selected=true]):has(+td>.range-calendar__cell[data-outside-month=true])>.range-calendar__cell[data-selected=true]{border-start-end-radius:calc(var(--radius) * 1);border-end-end-radius:calc(var(--radius) * 1)}.range-calendar__grid-body td:has(>.range-calendar__cell[data-selected=true]):has(+td>.range-calendar__cell[data-outside-month=true])>.range-calendar__cell[data-selected=true][data-outside-month=true],.range-calendar__grid-body td:has(>.range-calendar__cell[data-selected=true]):has(+td>.range-calendar__cell[data-outside-month=true])>.range-calendar__cell[data-selected=true][data-selection-end=true]{border-start-end-radius:calc(var(--radius) * 3);border-end-end-radius:calc(var(--radius) * 3)}.range-calendar__cell-indicator{bottom:var(--spacing);--tw-translate-x: -50% ;width:3px;height:3px;translate:var(--tw-translate-x) var(--tw-translate-y);border-radius:calc(var(--radius) * .25);background-color:var(--muted);position:absolute;left:50%}[data-selected=true]>.range-calendar__cell-indicator{background-color:var(--accent-foreground)}.calendar:has(.calendar-year-picker__year-grid),.range-calendar:has(.calendar-year-picker__year-grid){position:relative}.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]{will-change:opacity;transition:opacity .15s var(--ease-out),visibility 0s linear}:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.calendar:has(.calendar-year-picker__year-grid)>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid)>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]{pointer-events:none;opacity:0;visibility:hidden;transition:opacity .15s var(--ease-out),visibility 0s linear .15s}:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=calendar-grid],.range-calendar:has(.calendar-year-picker__year-grid[data-open=true])>[data-slot=range-calendar-grid]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__trigger{justify-content:flex-start;align-items:center;gap:var(--spacing);border-radius:calc(var(--radius) * 1);--tw-outline-style:none;cursor:var(--cursor-interactive);touch-action:manipulation;outline-style:none;flex:1;display:flex}.calendar-year-picker__trigger:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.calendar-year-picker__trigger-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition:color .15s var(--ease-out)}.calendar-year-picker__trigger-heading:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__trigger-heading:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__trigger-heading:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__trigger-heading:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__trigger-heading:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__trigger-heading:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__trigger-indicator{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--accent-soft-foreground)}.calendar-year-picker__trigger-indicator:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform:rotate(180deg)}.calendar-year-picker__trigger-indicator{transition:transform .15s var(--ease-out)}.calendar-year-picker__trigger-indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__trigger-indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__trigger-indicator:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__trigger-indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__trigger-indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__trigger-indicator:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__trigger[data-open=true] .calendar-year-picker__trigger-indicator{transform:rotate(90deg)}.calendar-year-picker__trigger[data-open=true] .calendar-year-picker__trigger-heading{color:var(--accent-soft-foreground)}.calendar-year-picker__year-grid{pointer-events:none;scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);align-content:flex-start;gap:var(--spacing);padding:var(--spacing);opacity:0;will-change:opacity;grid-template-columns:repeat(3,1fr);display:grid;position:absolute;inset-inline-start:calc(var(--spacing) * 0);inset-inline-end:calc(var(--spacing) * 0);overflow-y:auto}.calendar-year-picker__year-grid[data-open=true]{pointer-events:auto;opacity:1;transition:opacity .2s var(--ease-out) 50ms}.calendar-year-picker__year-grid[data-open=true]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__year-grid[data-open=true]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__year-grid[data-open=true]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__year-grid[data-open=true]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__year-grid[data-open=true]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__year-grid[data-open=true]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__year-cell{height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 3);padding-inline:calc(var(--spacing) * 2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;transition:color .1s var(--ease-smooth),scale .1s var(--ease-smooth),opacity .1s var(--ease-smooth),background-color .1s var(--ease-smooth),box-shadow .1s var(--ease-out);transform-origin:50%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);outline-style:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.calendar-year-picker__year-cell:is([data-reduce-motion=true],[data-reduce-motion=true] *),.calendar-year-picker__year-cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.calendar-year-picker__year-cell:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.calendar-year-picker__year-cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.calendar-year-picker__year-cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.calendar-year-picker__year-cell:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.calendar-year-picker__year-cell{cursor:var(--cursor-interactive)}@media(hover:hover)and (pointer:fine){.calendar-year-picker__year-cell:is(:hover,[data-hovered=true]):not([data-selected=true]){background-color:var(--default);color:var(--default-foreground)}}.calendar-year-picker__year-cell[data-selected=true],.calendar-year-picker__year-cell[aria-selected=true]{background-color:var(--accent);color:var(--accent-foreground)}@media(hover:hover)and (pointer:fine){:is(.calendar-year-picker__year-cell[data-selected=true],.calendar-year-picker__year-cell[aria-selected=true]):is(:hover,[data-hovered=true]){background-color:var(--accent-hover)}}.calendar-year-picker__year-cell:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.date-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.date-field[data-invalid=true],.date-field[aria-invalid=true]) [data-slot=description]{display:none}.date-field [data-slot=label]{width:fit-content}.date-field--full-width{width:100%}.time-field{gap:var(--spacing);flex-direction:column;display:flex}:is(.time-field[data-invalid=true],.time-field[aria-invalid=true]) [data-slot=description]{display:none}.time-field [data-slot=label]{width:fit-content}.time-field--full-width{width:100%}.date-input-group{height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-width:1px;border-width:var(--border-width-field);border-color:var(--field-border);transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);outline-style:none;align-items:center;display:inline-flex;overflow:hidden}.date-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-input-group:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-input-group:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}@media(hover:hover){.date-input-group:hover:not(:focus-within),.date-input-group[data-hovered=true]:not([data-focus-within=true]){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.date-input-group[data-focus-within=true]:not(:has([data-slot=date-picker-trigger]:focus,[data-slot=date-picker-trigger][data-focused=true],[data-slot=date-range-picker-trigger]:focus,[data-slot=date-range-picker-trigger][data-focused=true])),.date-input-group:focus-within:not(:has([data-slot=date-picker-trigger]:focus,[data-slot=date-picker-trigger][data-focused=true],[data-slot=date-range-picker-trigger]:focus,[data-slot=date-range-picker-trigger][data-focused=true])){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.date-input-group[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.date-input-group[data-invalid=true]:focus,.date-input-group[data-invalid=true]:focus-visible,.date-input-group[data-invalid=true][data-focused=true],.date-input-group[data-invalid=true][data-focus-visible=true],.date-input-group[data-invalid=true]:focus-within,.date-input-group[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.date-input-group[data-invalid=true]{background-color:var(--field-focus);border-color:var(--color-field-border-invalid)}.date-input-group[data-disabled=true],.date-input-group[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.date-input-group__input{cursor:text;border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;background-color:#0000;border-width:0;border-radius:0;outline-style:none;flex:1;align-items:center;gap:1px;display:flex}@media(min-width:40rem){.date-input-group__input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.date-input-group:has([data-slot=date-input-group-prefix]) .date-input-group__input{border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:calc(var(--spacing) * 2)}.date-input-group:has([data-slot=date-input-group-suffix]) .date-input-group__input{border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:calc(var(--spacing) * 2)}.date-input-group:has(.date-range-picker__range-separator) .date-input-group__input[slot=start]{flex:none;padding-inline-end:0}.date-input-group:has(.date-range-picker__range-separator) .date-input-group__input[slot=end]{padding-inline-start:0}.date-input-group__input:focus,.date-input-group__input:focus-visible{--tw-outline-style:none;outline-style:none}.date-input-group__input-container{scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;flex:1;align-items:center;width:fit-content;display:flex;overflow:auto clip}.date-input-group__segment{border-radius:calc(var(--radius) * .75);padding-inline:calc(var(--spacing) * .5);text-align:end;text-wrap:nowrap;--tw-outline-style:none;outline-style:none;display:inline-block}.date-input-group__segment[data-type=literal]{color:var(--muted);padding:0}.date-input-group__segment[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.date-input-group__segment:focus,.date-input-group__segment[data-focused=true]{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}.date-input-group__segment[data-disabled=true]{opacity:.5}.date-input-group__segment[data-invalid=true]{color:var(--danger)}.date-input-group__segment[data-invalid=true]:focus,.date-input-group__segment[data-invalid=true][data-focused=true]{background-color:var(--danger-soft);color:var(--danger-soft-foreground)}.date-input-group__prefix{pointer-events:none;color:var(--field-placeholder,var(--muted));flex-shrink:0;align-items:center;margin-inline-start:calc(var(--spacing) * 3);margin-inline-end:0;display:flex}.date-input-group__suffix{pointer-events:none;color:var(--field-placeholder,var(--muted));flex-shrink:0;align-items:center;margin-inline-end:calc(var(--spacing) * 3);display:flex}.date-input-group--secondary{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--date-input-group-bg);--date-input-group-bg:var(--default);--date-input-group-bg-hover:var(--default-hover);--date-input-group-bg-focus:var(--default)}@media(hover:hover){.date-input-group--secondary:hover:not(:focus-within),.date-input-group--secondary[data-hovered=true]:not([data-focus-within=true]){background-color:var(--date-input-group-bg-hover)}}.date-input-group--secondary:focus-within,.date-input-group--secondary[data-focus-within=true]{background-color:var(--date-input-group-bg-focus)}.date-input-group--secondary[data-invalid=true]{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}.date-input-group--secondary[data-invalid=true]:focus,.date-input-group--secondary[data-invalid=true]:focus-visible,.date-input-group--secondary[data-invalid=true][data-focused=true],.date-input-group--secondary[data-invalid=true][data-focus-visible=true],.date-input-group--secondary[data-invalid=true]:focus-within,.date-input-group--secondary[data-invalid=true][data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.date-input-group--secondary[data-invalid=true]{border-color:var(--color-field-border-invalid);background-color:var(--date-input-group-bg-focus)}.date-input-group--secondary [data-slot=date-input-group-input]{background-color:#0000}.date-input-group--full-width{width:100%}.date-picker{gap:var(--spacing);flex-direction:column;display:inline-flex}.date-picker .date-input-group__suffix,.date-picker .date-input-group__prefix{pointer-events:auto}.date-picker__trigger{border-radius:var(--field-radius,calc(var(--radius) * 1.5));width:100%;padding:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:box-shadow .15s var(--ease-out);align-items:center;display:inline-flex}.date-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-picker__trigger:focus-visible:not([data-focused]),.date-picker__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.date-picker__trigger:disabled,.date-picker__trigger[data-disabled=true],.date-picker__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.date-picker__trigger-indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:var(--field-placeholder,var(--muted));justify-content:center;align-items:center;display:inline-flex}.date-picker__popover{width:fit-content;transform-origin:var(--trigger-anchor-point);scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;overscroll-behavior:contain;background-color:var(--overlay);padding:calc(var(--spacing) * 3);overflow-y:auto}.date-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-picker__popover{box-shadow:var(--overlay-shadow);border-radius:min(32px,calc(var(--radius) * 2.5))}.date-picker__popover:focus-visible:not([data-focused]),.date-picker__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.date-picker__popover[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.date-picker__popover[data-entering=true][data-placement^=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.date-picker__popover[data-entering=true][data-placement^=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.date-picker__popover[data-entering=true][data-placement^=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.date-picker__popover[data-entering=true][data-placement^=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.date-picker__popover[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;pointer-events:none;transition-duration:.1s;transition-timing-function:ease}.date-picker__popover[data-exiting=true],.date-picker__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.date-picker__popover .calendar__nav-button-icon,.date-picker__popover .range-calendar__nav-button-icon{rotate:0deg}.date-range-picker{gap:var(--spacing);flex-direction:column;display:inline-flex}.date-range-picker .date-input-group__suffix,.date-range-picker .date-input-group__prefix{pointer-events:auto}.date-range-picker__trigger{border-radius:var(--field-radius,calc(var(--radius) * 1.5));width:100%;padding:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);transition:box-shadow .15s var(--ease-out);align-items:center;display:inline-flex}.date-range-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-range-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-range-picker__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-range-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-range-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-range-picker__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-range-picker__trigger:focus-visible:not([data-focused]),.date-range-picker__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.date-range-picker__trigger:disabled,.date-range-picker__trigger[data-disabled=true],.date-range-picker__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.date-range-picker__trigger-indicator{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);color:var(--field-placeholder,var(--muted));justify-content:center;align-items:center;display:inline-flex}.date-range-picker__range-separator{padding-inline:var(--spacing);color:var(--field-placeholder,var(--muted));-webkit-user-select:none;user-select:none}.date-range-picker__popover{width:fit-content;transform-origin:var(--trigger-anchor-point);scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;overscroll-behavior:contain;background-color:var(--overlay);padding:calc(var(--spacing) * 3);overflow-y:auto}.date-range-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *),.date-range-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.date-range-picker__popover:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.date-range-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.date-range-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.date-range-picker__popover:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.date-range-picker__popover{box-shadow:var(--overlay-shadow);border-radius:min(32px,calc(var(--radius) * 2.5))}.date-range-picker__popover:focus-visible:not([data-focused]),.date-range-picker__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.date-range-picker__popover[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.date-range-picker__popover[data-entering=true][data-placement^=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.date-range-picker__popover[data-entering=true][data-placement^=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.date-range-picker__popover[data-entering=true][data-placement^=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.date-range-picker__popover[data-entering=true][data-placement^=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.date-range-picker__popover[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;pointer-events:none;transition-duration:.1s;transition-timing-function:ease}.date-range-picker__popover[data-exiting=true],.date-range-picker__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.date-range-picker__popover .range-calendar__nav-button-icon,.date-range-picker__popover .calendar__nav-button-icon{rotate:0deg}.card{gap:calc(var(--spacing) * 3);padding:calc(var(--spacing) * 4);--tw-shadow:var(--surface-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:min(32px,var(--radius-3xl));flex-direction:column;display:flex;position:relative;overflow:visible}.card__header{flex-direction:column;display:flex}.card__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.card__description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);color:var(--muted)}.card__content{gap:var(--spacing);flex-direction:column;flex:1;display:flex}.card__footer{flex-direction:row;align-items:center;display:flex}.card--transparent{--tw-border-style:none;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#0000;border-style:none}.card--default{background-color:var(--surface)}.card--secondary{background-color:var(--surface-secondary)}.card--tertiary{background-color:var(--surface-tertiary)}.header{width:100%;padding-inline:calc(var(--spacing) * 2);padding-top:calc(var(--spacing) * 1.5);padding-bottom:var(--spacing);text-align:start;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted)}.separator{border-radius:calc(var(--radius) * .5);border-top-style:var(--tw-border-style);border-top-width:0;border-bottom-style:var(--tw-border-style);background-color:var(--separator);border-bottom-width:0;flex-shrink:0;width:100%;height:1px}.separator--horizontal{width:100%;height:1px}.separator--vertical{height:auto;min-height:calc(var(--spacing) * 2);align-self:stretch;width:1px}.separator--default{background-color:var(--separator)}.separator--secondary{background-color:var(--separator-secondary)}.separator--tertiary{background-color:var(--separator-tertiary)}.surface{color:var(--foreground);position:relative}.surface--transparent{background-color:#0000}.surface--default{background-color:var(--surface);color:var(--surface-foreground)}.surface--secondary{background-color:var(--surface-secondary);color:var(--surface-secondary-foreground)}.surface--tertiary{background-color:var(--surface-tertiary);color:var(--surface-tertiary-foreground)}.avatar{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);background-color:var(--default);flex-shrink:0;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.avatar__fallback{background-color:var(--default);width:100%;height:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);justify-content:center;align-items:center;display:flex}.avatar__image{aspect-ratio:1;width:100%;height:100%;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.25s;transition-duration:.25s;position:absolute;inset:0}.avatar__image:is([data-reduce-motion=true],[data-reduce-motion=true] *),.avatar__image:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.avatar__image:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.avatar__image:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.avatar__image:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.avatar__image:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.avatar--sm{--avatar-size:2rem;width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);border-radius:calc(var(--radius) * 2)}.avatar--sm .avatar__fallback{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.avatar--md{--avatar-size:2.5rem}.avatar--lg{--avatar-size:3rem;width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12);border-radius:calc(var(--radius) * 3)}.avatar--lg .avatar__fallback{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.avatar__fallback--accent{color:var(--accent-soft-foreground)}.avatar__fallback--default{color:var(--default-soft-foreground)}.avatar__fallback--success{color:var(--success-soft-foreground)}.avatar__fallback--warning{color:var(--warning-soft-foreground)}.avatar__fallback--danger{color:var(--danger-soft-foreground)}.avatar--soft{background-color:#0000}.avatar--soft .avatar__fallback--accent{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}.avatar--soft .avatar__fallback--success{background-color:var(--success-soft);color:var(--success-soft-foreground)}.avatar--soft .avatar__fallback--warning{background-color:var(--warning-soft);color:var(--warning-soft-foreground)}.avatar--soft .avatar__fallback--default{background-color:var(--default-soft);color:var(--default-soft-foreground)}.avatar--soft .avatar__fallback--danger{background-color:var(--danger-soft);color:var(--danger-soft-foreground)}.avatar-group{--avatar-group-overlap:.5rem;--avatar-group-seam:2px;align-items:center;display:inline-flex}.avatar-group--grid{gap:calc(var(--spacing) * 3);flex-wrap:wrap}.avatar-group:not(.avatar-group--grid)>.avatar+.avatar,.avatar-group:not(.avatar-group--grid)>.avatar+.avatar-group__count{margin-inline-start:calc(-1 * var(--avatar-group-overlap,.5rem))}.avatar-group__count{flex-shrink:0}.avatar-group--ring:not(.avatar-group--grid)>.avatar,.avatar-group--ring:not(.avatar-group--grid)>.avatar-group__count{box-shadow:0 0 0 var(--avatar-group-seam,2px) var(--background);position:relative}.avatar-group--clip:not(.avatar-group--grid)>.avatar:not(:last-child){--avatar-group-cut-center:calc(100% + (var(--avatar-size,2.5rem) / 2) - var(--avatar-group-overlap,.5rem));--avatar-group-cut-radius:calc((var(--avatar-size,2.5rem) / 2) + var(--avatar-group-seam,2px));-webkit-mask-image:radial-gradient(circle at var(--avatar-group-cut-center) 50%,transparent var(--avatar-group-cut-radius),#000 var(--avatar-group-cut-radius));mask-image:radial-gradient(circle at var(--avatar-group-cut-center) 50%,transparent var(--avatar-group-cut-radius),#000 var(--avatar-group-cut-radius))}:is(.avatar-group--clip:not(.avatar-group--grid):dir(rtl)>.avatar:not(:last-child),:dir(rtl) .avatar-group--clip:not(.avatar-group--grid)>.avatar:not(:last-child)){--avatar-group-cut-center:calc(0% - (var(--avatar-size,2.5rem) / 2) + var(--avatar-group-overlap,.5rem))}.avatar-group--clip:not(.avatar-group--grid)>.avatar:not(:last-child) .avatar__fallback{box-sizing:border-box;padding-inline-end:calc(var(--avatar-group-overlap,.5rem) * .35)}.alert-dialog__trigger{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.alert-dialog__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.alert-dialog__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.alert-dialog__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.alert-dialog__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.alert-dialog__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.alert-dialog__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.alert-dialog__trigger:focus-visible:not([data-focused]),.alert-dialog__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.alert-dialog__trigger:disabled,.alert-dialog__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.alert-dialog__trigger:active,.alert-dialog__trigger[data-pressed=true]{transform:scale(.97)}.alert-dialog__backdrop{z-index:var(--z-index-overlay);height:var(--visual-viewport-height);flex-direction:row;justify-content:center;align-items:center;width:100%;display:flex;position:fixed;inset:0}.alert-dialog__backdrop[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:var(--ease-out);transition-duration:.15s;transition-timing-function:var(--ease-out);--tw-enter-opacity:0}.alert-dialog__backdrop[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out);--tw-exit-opacity:0}.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]{will-change:opacity}:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.alert-dialog__backdrop[data-exiting=true],.alert-dialog__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.alert-dialog__backdrop--transparent{background-color:#0000}.alert-dialog__backdrop--opaque{background-color:var(--backdrop)}.alert-dialog__backdrop--blur{background-color:var(--backdrop);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.alert-dialog__container{height:var(--visual-viewport-height);width:100%;min-width:0;padding:calc(var(--spacing) * 4);flex-direction:column;flex:1;align-items:center;display:flex}@media(min-width:40rem){.alert-dialog__container{width:fit-content;padding:calc(var(--spacing) * 10)}}.alert-dialog__container{pointer-events:none}.alert-dialog__container[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.25s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-enter-opacity:0;--tw-enter-scale: 105% ;transition-duration:.25s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.alert-dialog__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y:calc(1*var(--spacing))}@media(min-width:40rem){.alert-dialog__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y: 0% }}.alert-dialog__container[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.alert-dialog__container[data-entering=true][data-placement=center]{--tw-enter-translate-y: -0% }.alert-dialog__container[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing))}.alert-dialog__container[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-exit-opacity:0;--tw-exit-scale:.95;transition-duration:.1s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]{will-change:opacity,transform}:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.alert-dialog__container[data-exiting=true],.alert-dialog__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.alert-dialog__dialog{background-color:var(--overlay);--tw-shadow:var(--overlay-shadow);width:100%;min-height:0;max-height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-radius:min(32px,var(--radius-3xl));padding:calc(var(--spacing) * 6);pointer-events:auto;outline-style:none;flex-direction:column;display:flex;position:relative;overflow:clip}.alert-dialog__dialog[data-placement=auto]{margin-top:auto}@media(min-width:40rem){.alert-dialog__dialog[data-placement=auto]{margin-block:auto}}.alert-dialog__dialog[data-placement=center]{margin-block:auto}.alert-dialog__dialog[data-placement=bottom]{margin-top:auto}.alert-dialog__dialog[data-placement=top]{margin-top:0}.alert-dialog__dialog--xs{max-width:var(--container-xs)}.alert-dialog__dialog--sm{max-width:var(--container-sm)}.alert-dialog__dialog--md{max-width:var(--container-md)}.alert-dialog__dialog--lg{max-width:var(--container-lg)}.alert-dialog__dialog--cover{width:100%;height:100%;min-height:100%}.alert-dialog__header{gap:calc(var(--spacing) * 3);flex-direction:column;margin-bottom:0;display:flex}.alert-dialog__header>.modal__icon{margin-bottom:0}.alert-dialog__heading{vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.alert-dialog__icon{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.alert-dialog__icon [data-slot=alert-dialog-default-icon]{box-sizing:content-box;width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.alert-dialog__icon--default{background-color:var(--default);color:var(--foreground)}.alert-dialog__icon--accent{background-color:var(--accent-soft);color:var(--accent-soft-foreground)}.alert-dialog__icon--success{background-color:var(--success-soft);color:var(--success-soft-foreground)}.alert-dialog__icon--warning{background-color:var(--warning-soft);color:var(--warning-soft-foreground)}.alert-dialog__icon--danger{background-color:var(--danger-soft);color:var(--danger-soft-foreground)}.alert-dialog__body{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;color:var(--muted);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;margin:-3px;flex:1;margin-block:0;padding:3px;line-height:1.43;overflow-y:auto}.alert-dialog__footer{justify-content:flex-end;align-items:center;gap:calc(var(--spacing) * 2);flex-direction:row;margin-top:0;display:flex}.alert-dialog__close-trigger{inset-inline-end:calc(var(--spacing) * 4);top:calc(var(--spacing) * 4);position:absolute}.alert-dialog__header+.alert-dialog__body{margin-top:calc(var(--spacing) * 2)}.alert-dialog__header+.alert-dialog__footer,.alert-dialog__body+.alert-dialog__footer{margin-top:calc(var(--spacing) * 5)}.drawer__trigger{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.drawer__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.drawer__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.drawer__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.drawer__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.drawer__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.drawer__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.drawer__trigger:focus-visible:not([data-focused]),.drawer__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.drawer__trigger:disabled,.drawer__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.drawer__trigger:active,.drawer__trigger[data-pressed=true]{transform:scale(.97)}.drawer__backdrop{z-index:var(--z-index-overlay);height:var(--visual-viewport-height);opacity:1;width:100%;transition:opacity .25s cubic-bezier(.32,.72,0,1);position:fixed;inset:0}.drawer__backdrop[data-entering=true]{opacity:0}.drawer__backdrop[data-exiting=true]{opacity:0;transition-duration:.2s;transition-timing-function:cubic-bezier(.32,.72,0,1)}.drawer__backdrop[data-exiting=true],.drawer__backdrop[data-entering=true]{will-change:opacity}@media(prefers-reduced-motion:reduce){.drawer__backdrop{transition:none}}.drawer__backdrop--transparent{background-color:#0000}.drawer__backdrop--opaque{background-color:var(--backdrop)}.drawer__backdrop--blur{background-color:var(--backdrop);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.drawer__content{pointer-events:none;z-index:var(--z-index-overlay);height:var(--visual-viewport-height);width:100%;min-width:0;display:flex;position:fixed;inset:0}.drawer__content--bottom{align-items:flex-end}.drawer__content--top{align-items:flex-start}.drawer__content--left{justify-content:flex-start}.drawer__content--right{justify-content:flex-end}.drawer__dialog{background-color:var(--overlay);--tw-shadow:var(--overlay-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;padding:calc(var(--spacing) * 6);pointer-events:auto;--drawer-enter-duration:.25s;--drawer-exit-duration:.2s;--drawer-enter-ease:cubic-bezier(.32, .72, 0, 1);--drawer-exit-ease:cubic-bezier(.32, .72, 0, 1);will-change:translate;transition:translate var(--drawer-enter-duration) var(--drawer-enter-ease);outline-style:none;flex-direction:column;display:flex;position:relative}@media(prefers-reduced-motion:reduce){.drawer__dialog{transition:none}}.drawer__dialog[data-placement=bottom]{border-start-start-radius:min(32px,var(--radius-2xl));border-start-end-radius:min(32px,var(--radius-2xl));width:100%;max-height:85vh}.drawer__dialog[data-placement=top]{border-end-end-radius:min(32px,var(--radius-2xl));border-end-start-radius:min(32px,var(--radius-2xl));width:100%;max-height:85vh}.drawer__dialog[data-placement=left]{height:100%;width:calc(var(--spacing) * 80);border-radius:0;max-width:85vw}@media(min-width:40rem){.drawer__dialog[data-placement=left]{width:calc(var(--spacing) * 96)}}.drawer__dialog[data-placement=right]{height:100%;width:calc(var(--spacing) * 80);border-radius:0;max-width:85vw}@media(min-width:40rem){.drawer__dialog[data-placement=right]{width:calc(var(--spacing) * 96)}}[data-exiting=true] .drawer__dialog{transition-duration:var(--drawer-exit-duration);transition-timing-function:var(--drawer-exit-ease)}.drawer__content--left .drawer__dialog,.drawer__content--right .drawer__dialog,.drawer__content--top .drawer__dialog,.drawer__content--bottom .drawer__dialog{translate:0}.drawer__content--left[data-entering=true] .drawer__dialog,.drawer__content--left[data-exiting=true] .drawer__dialog{translate:-100%}.drawer__content--right[data-entering=true] .drawer__dialog,.drawer__content--right[data-exiting=true] .drawer__dialog{translate:100%}.drawer__content--top[data-entering=true] .drawer__dialog,.drawer__content--top[data-exiting=true] .drawer__dialog{translate:0 -100%}.drawer__content--bottom[data-entering=true] .drawer__dialog,.drawer__content--bottom[data-exiting=true] .drawer__dialog{translate:0 100%}.drawer__dialog--top{padding-bottom:calc(var(--spacing) * 2)}.drawer__dialog--top .drawer__handle{padding-bottom:0}.drawer__header{gap:calc(var(--spacing) * 3);flex-direction:column;margin-bottom:0;display:flex}.drawer__heading{vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.drawer__body{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;color:var(--muted);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;margin:-3px;flex:1;margin-block:0;padding:3px;line-height:1.43;overflow-y:auto}.drawer__footer{justify-content:flex-end;align-items:center;gap:calc(var(--spacing) * 2);flex-direction:row;margin-top:0;display:flex}.drawer__handle{padding-bottom:calc(var(--spacing) * 2);justify-content:center;align-items:center;display:flex}.drawer__handle>[data-slot=drawer-handle-bar]{height:var(--spacing);width:calc(var(--spacing) * 9);border-radius:calc(var(--radius) * .25);background-color:var(--separator)}.drawer__close-trigger{inset-inline-end:calc(var(--spacing) * 4);top:calc(var(--spacing) * 4);position:absolute}.drawer__header+.drawer__body{margin-top:calc(var(--spacing) * 2)}.drawer__header+.drawer__footer,.drawer__body+.drawer__footer{margin-top:calc(var(--spacing) * 5)}.drawer__handle+.drawer__header,.drawer__handle+.drawer__body{margin-top:0}.modal__trigger{cursor:var(--cursor-interactive);transition:transform .25s var(--ease-out-quart),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.modal__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.modal__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.modal__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.modal__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.modal__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.modal__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.modal__trigger:focus-visible:not([data-focused]),.modal__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.modal__trigger:disabled,.modal__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.modal__trigger:active,.modal__trigger[data-pressed=true]{transform:scale(.97)}.modal__backdrop{z-index:var(--z-index-overlay);height:var(--visual-viewport-height);flex-direction:row;justify-content:center;align-items:center;width:100%;display:flex;position:fixed;inset:0}.modal__backdrop[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:var(--ease-out);transition-duration:.15s;transition-timing-function:var(--ease-out);--tw-enter-opacity:0}.modal__backdrop[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out);--tw-exit-opacity:0}.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]{will-change:opacity}:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.modal__backdrop[data-exiting=true],.modal__backdrop[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.modal__backdrop--transparent{background-color:#0000}.modal__backdrop--opaque{background-color:var(--backdrop)}.modal__backdrop--blur{background-color:var(--backdrop);--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.modal__container{height:var(--visual-viewport-height);width:100%;min-width:0;padding:calc(var(--spacing) * 4);flex-direction:column;flex:1;align-items:center;display:flex}@media(min-width:40rem){.modal__container{width:fit-content;padding:calc(var(--spacing) * 10)}}.modal__container{pointer-events:none}.modal__container[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.25s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-enter-opacity:0;--tw-enter-scale: 105% ;transition-duration:.25s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.modal__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y:calc(1*var(--spacing))}@media(min-width:40rem){.modal__container[data-entering=true][data-placement=auto]{--tw-enter-translate-y: 0% }}.modal__container[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.modal__container[data-entering=true][data-placement=center]{--tw-enter-translate-y: -0% }.modal__container[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing))}.modal__container[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-exit-opacity:0;--tw-exit-scale:.95;transition-duration:.1s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.modal__container[data-exiting=true],.modal__container[data-entering=true]{will-change:opacity,transform}:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{animation:none}@media(prefers-reduced-motion:reduce){:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,:is(.modal__container[data-exiting=true],.modal__container[data-entering=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{animation:none}}.modal__container--scroll-outside{height:auto;min-height:var(--visual-viewport-height);overflow-y:visible}.modal__backdrop:has(.modal__container--scroll-outside){scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);-webkit-overflow-scrolling:touch;align-items:flex-start;overflow-y:auto}.modal__container--full{padding:0}@media(min-width:40rem){.modal__container--full{padding:0}}.modal__container--full[data-entering=true]{--tw-enter-translate-y: 0% ;--tw-enter-scale:1}@media(min-width:40rem){.modal__container--full[data-entering=true]{--tw-enter-translate-y: 0% }}.modal__container--full[data-exiting=true]{--tw-exit-scale:1}.modal__dialog{background-color:var(--overlay);--tw-shadow:var(--overlay-shadow);width:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;border-radius:min(32px,var(--radius-3xl));padding:calc(var(--spacing) * 6);pointer-events:auto;outline-style:none;flex-direction:column;display:flex;position:relative}.modal__dialog[data-placement=auto]{margin-top:auto}@media(min-width:40rem){.modal__dialog[data-placement=auto]{margin-block:auto}}.modal__dialog[data-placement=center]{margin-block:auto}.modal__dialog[data-placement=bottom]{margin-top:auto}.modal__dialog[data-placement=top]{margin-top:0}.modal__dialog--scroll-inside{min-height:0;max-height:100%;overflow:clip}.modal__dialog--scroll-outside{flex-shrink:0;height:auto;min-height:0}.modal__dialog--xs{max-width:var(--container-xs)}.modal__dialog--sm{max-width:var(--container-sm)}.modal__dialog--md{max-width:var(--container-md)}.modal__dialog--lg{max-width:var(--container-lg)}.modal__dialog--cover{width:100%;height:100%;min-height:100%}.modal__dialog--full{--tw-shadow:0 0 #0000;width:100%;height:100%;min-height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:0}.modal__header{gap:calc(var(--spacing) * 3);flex-direction:column;margin-bottom:0;display:flex}.modal__header>.modal__icon{margin-bottom:0}.modal__heading{vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}.modal__icon{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10);border-radius:calc(var(--radius) * 3);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.modal__body{min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1.43;color:var(--muted);margin:-3px;flex:1;margin-block:0;padding:3px;line-height:1.43;overflow:visible}.modal__body--scroll-inside{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;-webkit-overflow-scrolling:touch;overflow-y:auto}.modal__body--scroll-outside{overflow-y:visible}.modal__footer{justify-content:flex-end;align-items:center;gap:calc(var(--spacing) * 2);flex-direction:row;margin-top:0;display:flex}.modal__close-trigger{inset-inline-end:calc(var(--spacing) * 4);top:calc(var(--spacing) * 4);position:absolute}.modal__header+.modal__body{margin-top:calc(var(--spacing) * 2)}.modal__header+.modal__footer,.modal__body+.modal__footer{margin-top:calc(var(--spacing) * 5)}.popover{transform-origin:var(--trigger-anchor-point);background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--overlay-shadow);padding:0}.popover[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.9;transition-duration:.15s;transition-timing-function:ease}.popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.popover[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;pointer-events:none;transition-duration:.1s;transition-timing-function:ease}.popover[data-exiting=true],.popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.popover__dialog{padding:calc(var(--spacing) * 4);--tw-outline-style:none;outline-style:none}.popover__heading{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.popover__trigger{transition:color .15s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.popover__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.popover__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.popover__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.popover__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.popover__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.popover__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.popover__trigger{cursor:var(--cursor-interactive)}.popover__trigger:focus-visible:not([data-focused]),.popover__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.popover__trigger:disabled,.popover__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.tooltip{max-width:var(--container-xs);transform-origin:var(--trigger-anchor-point);background-color:var(--overlay);padding:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));word-break:break-all;border-radius:min(32px,var(--radius-xl));box-shadow:var(--overlay-shadow)}.tooltip[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.9;transition-duration:.15s;transition-timing-function:ease}.tooltip[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.tooltip[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.tooltip[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.tooltip[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.tooltip[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;pointer-events:none;transition-duration:.1s;transition-timing-function:ease}.tooltip[data-exiting=true],.tooltip[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.tooltip [data-slot=overlay-arrow]{stroke:var(--border)}@supports (color:color-mix(in lab,red,red)){.tooltip [data-slot=overlay-arrow]{stroke:color-mix(in oklab,var(--border) 40%,transparent)}}.tooltip [data-slot=overlay-arrow]{fill:var(--overlay)}.tooltip[data-placement=bottom] [data-slot=overlay-arrow]{rotate:180deg}.tooltip[data-placement=left] [data-slot=overlay-arrow]{rotate:-90deg}.tooltip[data-placement=right] [data-slot=overlay-arrow]{rotate:90deg}.tooltip__trigger{transition:color .15s var(--ease-smooth),background-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);display:inline-block}.tooltip__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.tooltip__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.tooltip__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.tooltip__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.tooltip__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.tooltip__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.tooltip__trigger:focus-visible:not([data-focused]),.tooltip__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;outline-style:none}.combo-box{gap:var(--spacing);flex-direction:column;display:flex}:is(.combo-box[data-invalid=true],.combo-box[aria-invalid=true]) [data-slot=description]{display:none}.combo-box [data-slot=label]{width:fit-content}.combo-box [data-slot=input]{flex:1;min-width:0}.combo-box [data-slot=input]:has(+.combo-box__trigger){padding-inline-end:calc(var(--spacing) * 7)}.combo-box [data-slot=input]:focus,.combo-box [data-slot=input][data-focus]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.combo-box [data-slot=input]:disabled,.combo-box [data-slot=input][data-disabled],.combo-box [data-slot=input][aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.combo-box__input-group{isolation:isolate;align-items:center;display:inline-flex;position:relative}.combo-box__value{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:break-word;color:var(--field-foreground,var(--foreground))}.combo-box__value:empty{display:none}.combo-box__value[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.combo-box__value [data-slot=list-box-item-indicator]{display:none}.combo-box__trigger{--tw-translate-y: -50% ;height:100%;translate:var(--tw-translate-x) var(--tw-translate-y);cursor:pointer;color:var(--field-placeholder,var(--muted));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;-webkit-tap-highlight-color:transparent;--tw-border-style:none;--tw-outline-style:none;inset-inline-end:calc(var(--spacing) * 0);background-color:#0000;border-style:none;outline-style:none;flex-shrink:0;justify-content:center;align-items:center;padding-inline-end:calc(var(--spacing) * 2);transition-duration:.15s;display:flex;position:absolute;top:50%}@media(hover:hover){.combo-box__trigger:hover,.combo-box__trigger[data-hovered=true]{color:var(--field-foreground,var(--foreground))}}.combo-box__trigger:focus-visible:not([data-focused]),.combo-box__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;border-radius:.25rem;outline-style:none}.combo-box__trigger[data-pressed=true]{opacity:.7}.combo-box__trigger:disabled,.combo-box__trigger[data-disabled],.combo-box__trigger[aria-disabled=true]{cursor:not-allowed;opacity:.5}.combo-box__trigger [data-slot=combo-box-trigger-default-icon]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s}.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:is([data-reduce-motion=true],[data-reduce-motion=true] *),.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.combo-box__trigger [data-slot=combo-box-trigger-default-icon]:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.combo-box__trigger[data-open=true] [data-slot=combo-box-trigger-default-icon]{rotate:180deg}.combo-box__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--overlay-shadow);padding:0;overflow-y:auto}.combo-box__popover:focus-visible:not([data-focused]),.combo-box__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.combo-box__popover[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.combo-box__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.combo-box__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.combo-box__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.combo-box__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.combo-box__popover[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;pointer-events:none;transition-duration:.1s;transition-timing-function:ease}.combo-box__popover[data-exiting=true],.combo-box__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.combo-box__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.combo-box__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.combo-box__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.combo-box__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.combo-box__popover [data-slot=list-box]{padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none}.combo-box__popover [data-slot=list-box-item]{padding-inline:calc(var(--spacing) * 2.5)}.combo-box__popover [data-slot=list-box-item] [data-slot=list-box-item-indicator--checkmark]{transition-property:none}.combo-box--full-width,.combo-box__input-group--full-width{width:100%}.select{gap:var(--spacing);flex-direction:column;display:flex}:is(.select[data-invalid=true],.select[aria-invalid=true]) [data-slot=description]{display:none}.select [data-slot=label]{width:fit-content}.select__trigger{isolation:isolate;min-height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);border-width:1px;outline-style:none;display:inline-flex;position:relative}.select__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.select__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.select__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.select__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.select__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.select__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.select__trigger{cursor:var(--cursor-interactive);border-width:var(--border-width-field);border-color:var(--field-border)}.select__trigger:has(.select__indicator){padding-inline-end:calc(var(--spacing) * 7)}@media(hover:hover){.select__trigger:hover:not(:has(.select__clear-button:hover)),.select__trigger[data-hovered=true]:not(:has(.select__clear-button:hover)){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.select__trigger:focus-visible:not([data-focused]),.select__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger):focus,:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger):focus-visible,:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger)[data-focused=true],:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger)[data-focus-visible=true],:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger):focus-within,:is(.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger)[data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.select[data-invalid=true] .select__trigger,.select[aria-invalid=true] .select__trigger{background-color:var(--field-focus)}.select__trigger:disabled,.select__trigger[data-disabled=true],.select__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.select--secondary .select__trigger{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--select-trigger-bg);--select-trigger-bg:var(--default);--select-trigger-bg-hover:var(--default-hover);--select-trigger-bg-focus:var(--default)}@media(hover:hover){.select--secondary .select__trigger:hover:not(:has(.select__clear-button:hover)),.select--secondary .select__trigger[data-hovered=true]:not(:has(.select__clear-button:hover)){background-color:var(--select-trigger-bg-hover)}}.select--secondary .select__trigger:focus-visible:not([data-focused]),.select--secondary .select__trigger[data-focus-visible=true],.select[data-invalid=true] :is(.select--secondary .select__trigger),.select[aria-invalid=true] :is(.select--secondary .select__trigger){background-color:var(--select-trigger-bg-focus)}.select__value{text-align:start;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));overflow-wrap:break-word;color:currentColor;flex:1}@media(min-width:40rem){.select__value{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.select__value[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.select__value [data-slot=list-box-item-indicator]{display:none}.select__clear-button{isolation:isolate;width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);transform-origin:50%;transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);border-radius:calc(var(--radius) * 1.5);padding:var(--spacing);color:var(--muted);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;cursor:var(--cursor-interactive);background-color:#0000;flex-shrink:0;justify-content:center;align-self:center;align-items:center;display:inline-flex;position:relative}.select__clear-button:after{inset:calc(var(--spacing) * -.5);content:"";position:absolute}.select__clear-button:not([data-empty=true]){transition:opacity .15s var(--ease-smooth)}.select__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.select__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.select__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.select__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.select__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.select__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.select__clear-button[data-empty=true]{pointer-events:none;opacity:0}.select__clear-button [data-slot=select-clear-button-icon]{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}@media(hover:hover){.select__clear-button:hover,.select__clear-button[data-hovered=true]{background-color:var(--default-hover)}}.select__clear-button:active,.select__clear-button[data-pressed=true]{transform:scale(.93)}.select__indicator{color:var(--field-placeholder,var(--muted));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;flex-shrink:0;justify-content:center;align-items:center;margin-block:auto;transition-duration:.15s;display:flex;position:absolute;inset-block:0;inset-inline-end:calc(var(--spacing) * 2)}.select__indicator[data-open=true]{rotate:180deg}.select__indicator[data-slot=select-default-indicator]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.select__popover{min-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overscroll-behavior:contain;background-color:var(--overlay);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-radius:min(32px,var(--radius-3xl));box-shadow:var(--overlay-shadow);padding:0;overflow-y:auto}.select__popover:focus-visible:not([data-focused]),.select__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.select__popover[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.15s;--tw-ease:ease;--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.15s;transition-timing-function:ease}.select__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.select__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.select__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.select__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.select__popover[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:ease;--tw-exit-scale:.95;--tw-exit-opacity:0;pointer-events:none;transition-duration:.1s;transition-timing-function:ease}.select__popover[data-exiting=true],.select__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.select__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.select__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.select__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.select__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.select__popover [data-slot=list-box]{padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none}.select__popover [data-slot=list-box-item]{padding-inline:calc(var(--spacing) * 2.5)}.select__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator],.select__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator] [data-slot=list-box-item-indicator--checkmark]{transition-property:none}.select--full-width,.select__trigger--full-width{width:100%}.autocomplete{gap:var(--spacing);flex-direction:column;display:flex}.autocomplete__trigger{isolation:isolate;min-height:calc(var(--spacing) * 9);border-radius:var(--field-radius,calc(var(--radius) * 1.5));border-style:var(--tw-border-style);background-color:var(--field-background,var(--default));padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--field-foreground,var(--foreground));--tw-shadow:var(--field-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-out);border-width:1px;outline-style:none;display:inline-flex;position:relative}.autocomplete__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *),.autocomplete__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.autocomplete__trigger:is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.autocomplete__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.autocomplete__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.autocomplete__trigger:not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.autocomplete__trigger{cursor:var(--cursor-interactive);border-width:var(--border-width-field);border-color:var(--field-border)}.autocomplete__trigger:has(.autocomplete__indicator){padding-inline-end:calc(var(--spacing) * 7)}@media(hover:hover){.autocomplete__trigger:hover:not(:has(.autocomplete__clear-button:hover)),.autocomplete__trigger[data-hovered=true]:not(:has(.autocomplete__clear-button:hover)){background-color:var(--field-hover);border-color:var(--field-border-hover)}}.autocomplete__trigger:focus-visible:not([data-focused]),.autocomplete__trigger[data-focus-visible=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--focus);--tw-ring-offset-width:var(--ring-offset-width);--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-offset-color:var(--background);--tw-outline-style:none;border-color:var(--field-border-focus);background-color:var(--field-focus);outline-style:none}.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger{outline-style:var(--tw-outline-style);outline-width:1px;outline-color:var(--danger);--tw-outline-style:solid;--tw-ring-offset-width:3px;outline-style:solid}:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger):focus,:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger):focus-visible,:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger)[data-focused=true],:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger)[data-focus-visible=true],:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger):focus-within,:is(.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger)[data-focus-within=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--danger);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.autocomplete[data-invalid=true] .autocomplete__trigger,.autocomplete[aria-invalid=true] .autocomplete__trigger{background-color:var(--field-focus)}.autocomplete__trigger:disabled,.autocomplete__trigger[data-disabled=true],.autocomplete__trigger[aria-disabled=true]{opacity:var(--disabled-opacity);cursor:var(--cursor-disabled);pointer-events:none}.autocomplete--secondary .autocomplete__trigger{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:var(--autocomplete-trigger-bg);--autocomplete-trigger-bg:var(--default);--autocomplete-trigger-bg-hover:var(--default-hover);--autocomplete-trigger-bg-focus:var(--default)}@media(hover:hover){.autocomplete--secondary .autocomplete__trigger:hover:not(:has(.autocomplete__clear-button:hover)),.autocomplete--secondary .autocomplete__trigger[data-hovered=true]:not(:has(.autocomplete__clear-button:hover)){background-color:var(--autocomplete-trigger-bg-hover)}}.autocomplete--secondary .autocomplete__trigger:focus-visible:not([data-focused]),.autocomplete--secondary .autocomplete__trigger[data-focus-visible=true],.autocomplete[data-invalid=true] :is(.autocomplete--secondary .autocomplete__trigger),.autocomplete[aria-invalid=true] :is(.autocomplete--secondary .autocomplete__trigger){background-color:var(--autocomplete-trigger-bg-focus)}.autocomplete__value{text-align:start;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));overflow-wrap:break-word;color:currentColor;flex:1}@media(min-width:40rem){.autocomplete__value{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.autocomplete__value[data-placeholder=true]{color:var(--field-placeholder,var(--muted))}.autocomplete__value [data-slot=list-box-item-indicator]{display:none}.autocomplete__indicator{color:var(--field-placeholder,var(--muted));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;cursor:var(--cursor-interactive);flex-shrink:0;justify-content:center;align-items:center;margin-block:auto;transition-duration:.15s;display:flex;position:absolute;inset-block:0;inset-inline-end:calc(var(--spacing) * 2)}.autocomplete__indicator[data-open=true]{rotate:180deg}.autocomplete__indicator[data-slot=autocomplete-default-indicator]{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.autocomplete__popover{width:var(--trigger-width);max-width:var(--trigger-width);transform-origin:var(--trigger-anchor-point);scroll-padding-block:var(--spacing);overscroll-behavior:contain;background-color:var(--overlay);padding:0;padding-top:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;border-radius:min(32px,var(--radius-3xl));box-shadow:var(--overlay-shadow);outline-style:none;flex-direction:column;display:flex;overflow:hidden}.autocomplete__popover:focus,.autocomplete__popover:focus-visible:not([data-focused]),.autocomplete__popover[data-focus-visible=true]{--tw-outline-style:none;outline-style:none}.autocomplete__popover[data-entering=true]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.25s;--tw-ease:cubic-bezier(.32, .72, 0, 1);--tw-enter-opacity:0;--tw-enter-scale:.95;transition-duration:.25s;transition-timing-function:cubic-bezier(.32,.72,0,1)}.autocomplete__popover[data-entering=true][data-placement=top]{--tw-enter-translate-y:calc(1*var(--spacing))}.autocomplete__popover[data-entering=true][data-placement=bottom]{--tw-enter-translate-y:calc(1*var(--spacing)*-1)}.autocomplete__popover[data-entering=true][data-placement=left]{--tw-enter-translate-x:calc(1*var(--spacing))}.autocomplete__popover[data-entering=true][data-placement=right]{--tw-enter-translate-x:calc(1*var(--spacing)*-1)}.autocomplete__popover[data-exiting=true]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.1s;--tw-ease:cubic-bezier(.25, .46, .45, .94);--tw-exit-scale:.95;--tw-exit-opacity:0;pointer-events:none;transition-duration:.1s;transition-timing-function:cubic-bezier(.25,.46,.45,.94)}.autocomplete__popover[data-exiting=true],.autocomplete__popover[data-entering=true]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));will-change:opacity,transform}.autocomplete__popover [data-slot=popover-overlay-arrow]{fill:var(--overlay)}.autocomplete__popover[data-placement=bottom] [data-slot=popover-overlay-arrow]{rotate:180deg}.autocomplete__popover[data-placement=left] [data-slot=popover-overlay-arrow]{rotate:-90deg}.autocomplete__popover[data-placement=right] [data-slot=popover-overlay-arrow]{rotate:90deg}.autocomplete__popover [data-slot=list-box]{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);min-height:0;max-height:320px;padding:calc(var(--spacing) * 1.5);--tw-outline-style:none;outline-style:none;overflow-y:auto}.autocomplete__popover [data-slot=list-box-item]{padding-inline:calc(var(--spacing) * 2.5)}.autocomplete__popover [role=presentation]>[data-slot=list-box-item]{width:calc(100% - var(--spacing) * 3)}.autocomplete__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator],.autocomplete__popover [data-slot=list-box]:not([aria-multiselectable=true]) [data-slot=list-box-item-indicator] [data-slot=list-box-item-indicator--checkmark]{transition-property:none}.autocomplete__popover [data-slot=search-field]{padding-inline:calc(var(--spacing) * 3);padding-block:var(--spacing);--tw-outline-style:none;outline-style:none;flex-shrink:0}.autocomplete__popover [data-slot=empty-state]{text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--overlay-foreground)}@supports (color:color-mix(in lab,red,red)){.autocomplete__popover [data-slot=empty-state]{color:color-mix(in oklab,var(--overlay-foreground) 60%,transparent)}}.autocomplete--full-width,.autocomplete__trigger--full-width{width:100%}.autocomplete__clear-button{isolation:isolate;height:calc(var(--spacing) * 6);width:calc(var(--spacing) * 6);transform-origin:50%;border-radius:calc(var(--radius) * 1.5);padding:var(--spacing);color:var(--muted);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);cursor:var(--cursor-interactive);transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);background-color:#0000;flex-shrink:0;justify-content:center;align-self:center;align-items:center;margin-inline-end:0;display:inline-flex;position:relative}.autocomplete__clear-button:not([data-empty=true]){transition:opacity .15s var(--ease-smooth)}.autocomplete__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *),.autocomplete__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):before,.autocomplete__clear-button:not([data-empty=true]):is([data-reduce-motion=true],[data-reduce-motion=true] *):after{transition-property:none}@media(prefers-reduced-motion:reduce){.autocomplete__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)),.autocomplete__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):before,.autocomplete__clear-button:not([data-empty=true]):not(:is([data-reduce-motion=true],[data-reduce-motion=true] *)):after{transition-property:none}}.autocomplete__clear-button[data-empty=true]{pointer-events:none;opacity:0}.autocomplete__clear-button [data-slot=autocomplete-clear-button-icon]{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}@media(hover:hover){.autocomplete__clear-button:hover,.autocomplete__clear-button[data-hovered=true]{background-color:var(--default-hover)}}.autocomplete__clear-button:active,.autocomplete__clear-button[data-pressed=true]{transform:scale(.93)}.kbd{height:calc(var(--spacing) * 6);align-items:center;display:inline-flex}:where(.kbd>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * .5) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-x-reverse)))}.kbd{border-radius:calc(var(--radius) * 1);background-color:var(--default);padding-inline:calc(var(--spacing) * 2);text-align:center;font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--muted)}:where(.kbd:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}.kbd{word-spacing:-.25rem}.kbd__abbr{justify-content:center;align-items:center;width:100%;height:100%;text-decoration:none;display:flex}.kbd__content{justify-content:center;align-items:center;display:flex}.kbd--light{background-color:#0000}.typography,.typography-prose{color:var(--foreground)}.typography-prose h1{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h2{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h3{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h4{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h5{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose h6{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography-prose p{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.typography-prose code{border-radius:calc(var(--radius) * .75);background-color:var(--default);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--foreground)}.typography-prose a{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--link);text-underline-offset:4px;text-decoration-line:underline}.typography-prose blockquote{margin-top:calc(var(--spacing) * 4);border-inline-start-style:var(--tw-border-style);border-inline-start-width:4px;border-color:var(--border);color:var(--muted);padding-inline-start:calc(var(--spacing) * 4);font-style:italic}.typography-prose ul{margin-block:calc(var(--spacing) * 4);list-style-type:disc}:where(.typography-prose ul>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.typography-prose ul{padding-inline-start:calc(var(--spacing) * 6)}.typography-prose ol{margin-block:calc(var(--spacing) * 4);list-style-type:decimal}:where(.typography-prose ol>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.typography-prose ol{padding-inline-start:calc(var(--spacing) * 6)}.typography-prose li{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.typography-prose hr{margin-block:calc(var(--spacing) * 8);border-color:var(--separator)}.typography-prose pre{margin-block:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5);background-color:var(--default);padding:calc(var(--spacing) * 4);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);overflow-x:auto}.typography-prose strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--foreground)}.typography-prose em{font-style:italic}.typography-prose img{margin-block:calc(var(--spacing) * 4);border-radius:calc(var(--radius) * 1.5)}.typography--h1{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h2{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h3{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h4{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h5{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--h6{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.typography--body{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.typography--body-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.typography--body-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.typography--code{border-radius:calc(var(--radius) * .75);background-color:var(--default);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--foreground)}.typography--align-start{text-align:start}.typography--align-center{text-align:center}.typography--align-end{text-align:end}.typography--align-justify{text-align:justify}.typography--color-default{color:var(--foreground)}.typography--color-muted{color:var(--muted)}.typography--truncate{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.typography--weight-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.typography--weight-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.typography--weight-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.typography--weight-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.scroll-shadow{--scroll-shadow-size:40px;--scroll-shadow-scrollbar-size:10px;--scroll-shadow-offset:0px;position:relative}@property --scroll-shadow-start-fade{syntax:"";inherits:false;initial-value:0}@property --scroll-shadow-end-fade{syntax:"";inherits:false;initial-value:0}@keyframes scroll-shadow-start-fade{0%{--scroll-shadow-start-fade:0px}to{--scroll-shadow-start-fade:var(--scroll-shadow-size)}}@keyframes scroll-shadow-end-fade{0%{--scroll-shadow-end-fade:var(--scroll-shadow-size)}to{--scroll-shadow-end-fade:0px}}.scroll-shadow--vertical{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overflow-y:auto}.scroll-shadow--horizontal{scrollbar-width:var(--scrollbar-width);scrollbar-color:var(--scrollbar-color);scrollbar-gutter:var(--scrollbar-gutter);overflow-x:auto}.scroll-shadow--fade.scroll-shadow--vertical:where([data-top-scroll=true],[data-bottom-scroll=true],[data-top-bottom-scroll=true],[data-scroll-shadow-mode=auto]){mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);mask-position:0 0,100% 0;mask-repeat:no-repeat;mask-size:calc(100% - var(--scroll-shadow-scrollbar-size)) 100%,var(--scroll-shadow-scrollbar-size) 100%;-webkit-mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);-webkit-mask-position:0 0,100% 0;-webkit-mask-repeat:no-repeat;-webkit-mask-size:calc(100% - var(--scroll-shadow-scrollbar-size)) 100%,var(--scroll-shadow-scrollbar-size) 100%}.scroll-shadow--fade.scroll-shadow--vertical[data-top-scroll=true]{--scroll-linear-gradient:0deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--vertical[data-bottom-scroll=true]{--scroll-linear-gradient:180deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--vertical[data-top-bottom-scroll=true]{--scroll-linear-gradient:#000, #000, transparent 0, #000 var(--scroll-shadow-size), #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal:where([data-left-scroll=true],[data-right-scroll=true],[data-left-right-scroll=true],[data-scroll-shadow-mode=auto]){mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);mask-position:0 0,0 100%;mask-repeat:no-repeat;mask-size:100% calc(100% - var(--scroll-shadow-scrollbar-size)),100% var(--scroll-shadow-scrollbar-size);-webkit-mask-image:linear-gradient(var(--scroll-linear-gradient)),linear-gradient(#000,#000);-webkit-mask-position:0 0,0 100%;-webkit-mask-repeat:no-repeat;-webkit-mask-size:100% calc(100% - var(--scroll-shadow-scrollbar-size)),100% var(--scroll-shadow-scrollbar-size)}.scroll-shadow--fade.scroll-shadow--horizontal[data-left-scroll=true]{--scroll-linear-gradient:270deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal[data-left-scroll=true]:dir(rtl){--scroll-linear-gradient:90deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal[data-right-scroll=true]{--scroll-linear-gradient:90deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal[data-right-scroll=true]:dir(rtl){--scroll-linear-gradient:270deg, #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--fade.scroll-shadow--horizontal[data-left-right-scroll=true]{--scroll-linear-gradient:to right, #000, #000, transparent 0, #000 var(--scroll-shadow-size), #000 calc(100% - var(--scroll-shadow-size)), transparent}.scroll-shadow--hide-scrollbar{scrollbar-color:auto;scrollbar-gutter:auto;-ms-overflow-style:none;scrollbar-width:none;--scroll-shadow-scrollbar-size:0px}@supports (animation-timeline:scroll(self)){.scroll-shadow.scroll-shadow--fade[data-scroll-shadow-mode=auto]{animation:linear both scroll-shadow-start-fade,linear both scroll-shadow-end-fade;animation-range:var(--scroll-shadow-offset) calc(var(--scroll-shadow-offset) + var(--scroll-shadow-size)),calc(100% - var(--scroll-shadow-size) - var(--scroll-shadow-offset)) calc(100% - var(--scroll-shadow-offset))}.scroll-shadow.scroll-shadow--fade.scroll-shadow--vertical[data-scroll-shadow-mode=auto]{--scroll-linear-gradient:180deg, transparent 0, #000 var(--scroll-shadow-start-fade), #000 calc(100% - var(--scroll-shadow-end-fade)), transparent 100%;animation-timeline:scroll(self),scroll(self)}.scroll-shadow.scroll-shadow--fade.scroll-shadow--horizontal[data-scroll-shadow-mode=auto]{--scroll-linear-gradient:90deg, transparent 0, #000 var(--scroll-shadow-start-fade), #000 calc(100% - var(--scroll-shadow-end-fade)), transparent 100%;animation-timeline:scroll(self inline),scroll(self inline)}.scroll-shadow.scroll-shadow--fade.scroll-shadow--horizontal[data-scroll-shadow-mode=auto]:dir(rtl){--scroll-linear-gradient:270deg, transparent 0, #000 var(--scroll-shadow-start-fade), #000 calc(100% - var(--scroll-shadow-end-fade)), transparent 100%}}}@layer utilities{.static{position:static}.hidden{display:none}.inline{display:inline}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}.share-header{border-bottom:1px solid var(--separator);background:var(--surface);justify-content:space-between;align-items:center;gap:20px;min-height:64px;padding:12px 28px;display:flex}.header-start,.brand{align-items:center;gap:10px;min-width:0;display:flex}.brand{color:var(--foreground);flex-shrink:0;font-weight:600;text-decoration:none}.brand img{border-radius:8px}.header-divider{background:var(--separator);width:1px;height:20px;margin:0 8px}.header-context{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.share-workspace{flex:1;grid-template-columns:minmax(0,1fr) 350px;align-items:stretch;gap:16px;width:100%;min-height:0;padding:16px;display:grid}.recording-column{grid-template-rows:auto minmax(0,1fr) auto;gap:12px;min-width:0;min-height:0;display:grid}.recording-heading{justify-content:space-between;align-items:center;gap:16px;min-height:58px;display:flex}.recording-title{letter-spacing:-.025em;overflow-wrap:anywhere;font-size:22px;font-weight:600}.recording-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;font-size:12px;display:flex}.recording-meta span+span:before{content:"·";margin-right:8px}.reaction-rail{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.reaction-buttons{flex-wrap:wrap;gap:4px;display:flex}.reaction-buttons .button{min-width:40px}.chapter-list{flex-direction:column;gap:4px;display:flex}.chapter-list .button{white-space:normal;text-align:left;justify-content:flex-start;height:auto;min-height:40px}.timestamp{font-variant-numeric:tabular-nums;color:var(--accent)}.feedback-card{gap:0;min-width:0;height:100%;min-height:0;padding:16px;overflow:hidden}.feedback-tabs{flex-direction:column;flex:1;gap:12px;width:100%;min-height:0;display:flex}.feedback-tabs .tabs__list{width:100%}.feedback-tabs .tabs__tab{flex:1;gap:5px;min-width:0;padding-inline:8px;font-size:12px}.empty-feedback{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;height:100%;padding:12px;display:flex}.empty-feedback>svg{color:var(--muted)}.empty-feedback h2{font-size:14px;font-weight:500}.empty-feedback p{color:var(--muted);max-width:230px;font-size:13px;line-height:1.6}.composer{border-top:1px solid var(--separator);flex-direction:column;flex-shrink:0;gap:8px;margin-top:12px;padding-top:12px;display:flex}.composer textarea{resize:none;height:64px;min-height:56px}.composer-footer{justify-content:space-between;align-items:center;gap:8px;display:flex}.comment-item{border-bottom:1px solid var(--separator);border-radius:var(--radius);padding:14px 8px}.comment-item[data-active=true]{background:var(--accent-soft)}.comment-heading{align-items:center;gap:8px;font-size:13px;display:flex}.comment-heading .button{margin-left:auto}.comment-item p{white-space:pre-wrap;overflow-wrap:anywhere;margin:8px 0;font-size:13px;line-height:1.65}.comment-date{color:var(--muted);font-size:11px}.inline-timestamp{vertical-align:baseline;min-width:0;height:auto;padding:0 2px;display:inline}.transcript-item{border-bottom:1px solid var(--separator);padding:12px 4px}.transcript-item[data-active=true]{background:var(--accent-soft);border-radius:var(--radius)}.transcript-heading{color:var(--muted);align-items:center;gap:8px;font-size:12px;display:flex}.transcript-heading .copy-timestamp{margin-left:auto}.transcript-seek{text-align:left;white-space:normal;justify-content:flex-start;width:100%;height:auto;padding:8px;line-height:1.65}.gate-page{place-items:center;min-height:100svh;padding:24px;display:grid}.gate-card{gap:24px;width:100%;max-width:400px;padding:24px}.gate-content,.gate-form{flex-direction:column;gap:16px;display:flex}.gate-content h1{letter-spacing:-.025em;font-size:22px;font-weight:600}.gate-content p{color:var(--muted);font-size:14px;line-height:1.6}.loading-title{width:48%;height:26px}.loading-meta{width:35%;height:14px;margin-top:12px}.loading-video{aspect-ratio:16/9;width:100%}.loading-sidebar{height:440px}.video-shell{flex-direction:column;gap:0;min-height:0;padding:0;display:flex;overflow:hidden}.video-stage{background:#000;flex:1;width:100%;min-height:0;position:relative}.video-stage video{object-fit:contain;width:100%;height:100%;display:block;position:absolute;inset:0}.video-play-overlay{pointer-events:none;place-items:center;display:grid;position:absolute;inset:0}.video-play-overlay .button{pointer-events:auto}.video-caption{text-align:center;pointer-events:none;position:absolute;bottom:20px;left:8%;right:8%}.video-caption span{color:#fff;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:#000c;border-radius:6px;padding:5px 10px;line-height:1.8}.video-toolbar{background:var(--surface);flex-direction:column;flex-shrink:0;gap:4px;padding:8px 12px;display:flex}.video-controls{align-items:center;gap:4px;display:flex}.video-controls .volume-control{width:72px;margin:0 8px}.video-time{font-variant-numeric:tabular-nums;color:var(--muted);white-space:nowrap;margin:0 8px;font-size:12px}.control-spacer{flex:1}.video-shell:fullscreen{background:#000;border-radius:0;flex-direction:column;display:flex}.video-shell:fullscreen .video-stage{aspect-ratio:auto;flex:1;min-height:0}.video-shell:fullscreen .video-toolbar{flex-shrink:0}.video-end-card{background:#000000b3;flex-direction:column;justify-content:center;align-items:center;gap:16px;display:flex;position:absolute;inset:0}.timeline-markers{height:20px;margin:0 8px;position:relative}.timeline-marker{min-width:18px;height:18px;padding:0 3px;font-size:10px;position:absolute;transform:translate(-50%)}.library-main{max-width:1400px;margin:auto;padding:28px}.library-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));gap:20px;display:grid}.library-thumb{aspect-ratio:16/9;object-fit:cover;background:var(--surface-secondary);border-radius:var(--radius);width:100%}.library-actions{flex-wrap:wrap;gap:4px;display:flex}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important}}.library-main>.recording-heading{margin-bottom:24px}.share-header>.link,.library-actions>.link{gap:8px}.recording-app{flex-direction:column;height:100dvh;display:flex;overflow:hidden}.recording-app .share-header{flex-shrink:0;min-height:56px;padding:10px 20px}.recording-app .recording-heading{min-height:48px}.recording-heading>div{min-width:0}.recording-app .recording-title{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:20px;display:-webkit-box;overflow:hidden}.share-workspace>aside{min-width:0;min-height:0}.feedback-tabs .tabs__list-container{flex-shrink:0}.feedback-tabs .tabs__panel{flex:1;min-height:0;padding:0;overflow:hidden}.feedback-tabs .tabs__panel:not([hidden]){flex-direction:column;display:flex}.composer[hidden]{display:none}.paged-panel{flex-direction:column;flex:1;gap:8px;height:100%;min-height:0;display:flex}.page-viewport{flex:1;min-height:0;overflow:hidden}.page-flow{column-count:1;column-fill:auto;overflow-wrap:anywhere;column-gap:24px;height:100%}.page-flow .comment-item,.page-flow .transcript-item{break-inside:avoid-column}.page-navigation{color:var(--muted);flex-shrink:0;justify-content:space-between;align-items:center;font-size:12px;display:flex}.page-navigation[hidden]{display:none}.recording-details{margin-bottom:20px}.recording-details h2{margin-bottom:10px;font-size:14px;font-weight:600}.recording-details p{white-space:pre-wrap;color:var(--muted);font-size:14px;line-height:1.7}.video-progress{flex-shrink:0;padding:8px 0;position:relative}.video-seek-input{opacity:0;cursor:pointer;width:100%;height:100%;margin:0;position:absolute;inset:0}.video-progress:focus-within{outline:2px solid var(--focus);outline-offset:2px;border-radius:var(--radius)}.mobile-view-switch{display:none}@media(max-width:1100px){.share-workspace{grid-template-columns:minmax(0,1fr) 310px;gap:12px;padding:12px}.volume-control{display:none}}@media(max-width:760px){.mobile-view-switch{flex-shrink:0;justify-content:center;gap:8px;padding:8px 12px 0;display:flex}.share-workspace{grid-template-columns:minmax(0,1fr)}.recording-app[data-mobile-view=watch] .share-workspace>aside,.recording-app[data-mobile-view=feedback] .recording-column,.recording-app .header-context,.recording-app .header-divider{display:none}.recording-app .share-header{padding:8px 12px}.recording-app .recording-title{font-size:18px}.feedback-card{padding:12px}.reaction-buttons{gap:0}.reaction-buttons .button{min-width:32px;padding-inline:6px}.reaction-rail{flex-wrap:nowrap;gap:4px}.recording-app .recording-meta{gap:4px;font-size:11px}.video-time{margin:0 4px;font-size:11px}.skip-control,.pip-control{display:none}}@media(max-height:620px){.recording-app .share-header{min-height:44px;padding-block:6px}.recording-app .share-workspace{gap:8px;padding:8px}.feedback-card{padding:10px}.composer{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:6px;margin-top:8px;padding-top:8px;display:grid}.composer textarea{height:40px;min-height:40px}.composer-footer,.composer .alert{grid-column:1/-1}.empty-feedback{gap:4px;padding:4px}.empty-feedback>svg{display:none}.empty-feedback p{font-size:12px}}.mobile-comment-button,.mobile-feedback-back{display:none}.timestamp-reactions{pointer-events:none;position:absolute;inset:0;overflow:hidden}.timestamp-reaction{font-size:30px;animation:3s ease-out forwards reaction-float;position:absolute;bottom:12%}@keyframes reaction-float{0%{opacity:0;transform:translateY(12px)scale(.7)}15%{opacity:1}80%{opacity:1}to{opacity:0;transform:translateY(-100px)scale(1.1)}}@media(prefers-reduced-motion:reduce){.timestamp-reaction{animation:none}}@media(max-width:760px){.mobile-comment-button{flex-shrink:0;display:inline-flex}.mobile-feedback-back{padding:8px 12px 0;display:flex}}.creator-info{align-items:center;gap:8px;min-width:0;margin-top:6px;display:flex}.creator-info>div{min-width:0}.creator-name{text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600;overflow:hidden}.creator-bio{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.timeline-markers{flex-shrink:0;height:24px}.timeline-markers .timeline-marker{min-width:24px;height:24px;font-size:12px}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-duration{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}}@keyframes skeleton{to{transform:translate(200%)}} diff --git a/services/recordly-share/worker/web/dist/_astro/client.9mxnYheX.js b/services/recordly-share/worker/web/dist/_astro/client.9mxnYheX.js new file mode 100644 index 000000000..bf3b6639f --- /dev/null +++ b/services/recordly-share/worker/web/dist/_astro/client.9mxnYheX.js @@ -0,0 +1,9 @@ +import{b as Wo,a as Fo,r as Wt}from"./index.DeQQz02V.js";var d0={exports:{}},We={},h0={exports:{}},o0={};var jy;function $o(){return jy||(jy=1,(function(T){function tl(E,C){var M=E.length;E.push(C);l:for(;0>>1,F=E[ll];if(0>>1;llBl(Ia,M))itBl(na,Ia)?(E[ll]=na,E[it]=M,ll=it):(E[ll]=Ia,E[ea]=M,ll=ea);else if(itBl(na,M))E[ll]=na,E[it]=M,ll=it;else break l}}return C}function Bl(E,C){var M=E.sortIndex-C.sortIndex;return M!==0?M:E.id-C.id}if(T.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var il=performance;T.unstable_now=function(){return il.now()}}else{var gt=Date,Mu=gt.now();T.unstable_now=function(){return gt.now()-Mu}}var Ml=[],Il=[],Pu=1,V=null,W=3,ct=!1,_l=!1,Ft=!1,al=!1,Rt=typeof setTimeout=="function"?setTimeout:null,la=typeof clearTimeout=="function"?clearTimeout:null,Fe=typeof setImmediate<"u"?setImmediate:null;function ta(E){for(var C=p(Il);C!==null;){if(C.callback===null)S(Il);else if(C.startTime<=E)S(Il),C.sortIndex=C.expirationTime,tl(Ml,C);else break;C=p(Il)}}function ua(E){if(Ft=!1,ta(E),!_l)if(p(Ml)!==null)_l=!0,St||(St=!0,Bt());else{var C=p(Il);C!==null&&ql(ua,C.startTime-E)}}var St=!1,X=-1,$e=5,Uu=-1;function $t(){return al?!0:!(T.unstable_now()-Uu<$e)}function st(){if(al=!1,St){var E=T.unstable_now();Uu=E;var C=!0;try{l:{_l=!1,Ft&&(Ft=!1,la(X),X=-1),ct=!0;var M=W;try{t:{for(ta(E),V=p(Ml);V!==null&&!(V.expirationTime>E&&$t());){var ll=V.callback;if(typeof ll=="function"){V.callback=null,W=V.priorityLevel;var F=ll(V.expirationTime<=E);if(E=T.unstable_now(),typeof F=="function"){V.callback=F,ta(E),C=!0;break t}V===p(Ml)&&S(Ml),ta(E)}else S(Ml);V=p(Ml)}if(V!==null)C=!0;else{var It=p(Il);It!==null&&ql(ua,It.startTime-E),C=!1}}break l}finally{V=null,W=M,ct=!1}C=void 0}}finally{C?Bt():St=!1}}}var Bt;if(typeof Fe=="function")Bt=function(){Fe(st)};else if(typeof MessageChannel<"u"){var aa=new MessageChannel,Ie=aa.port2;aa.port1.onmessage=st,Bt=function(){Ie.postMessage(null)}}else Bt=function(){Rt(st,0)};function ql(E,C){X=Rt(function(){E(T.unstable_now())},C)}T.unstable_IdlePriority=5,T.unstable_ImmediatePriority=1,T.unstable_LowPriority=4,T.unstable_NormalPriority=3,T.unstable_Profiling=null,T.unstable_UserBlockingPriority=2,T.unstable_cancelCallback=function(E){E.callback=null},T.unstable_forceFrameRate=function(E){0>E||125ll?(E.sortIndex=M,tl(Il,E),p(Ml)===null&&E===p(Il)&&(Ft?(la(X),X=-1):Ft=!0,ql(ua,M-ll))):(E.sortIndex=F,tl(Ml,E),_l||ct||(_l=!0,St||(St=!0,Bt()))),E},T.unstable_shouldYield=$t,T.unstable_wrapCallback=function(E){var C=W;return function(){var M=W;W=C;try{return E.apply(this,arguments)}finally{W=M}}}})(o0)),o0}var ry;function Io(){return ry||(ry=1,h0.exports=$o()),h0.exports}var xy;function ko(){if(xy)return We;xy=1;var T=Io(),tl=Wo(),p=Fo();function S(l){var t="https://react.dev/errors/"+l;if(1fa||(l.current=Rf[fa],Rf[fa]=null,fa--)}function I(l,t){fa++,Rf[fa]=l.current,l.current=t}var Tt=zt(null),le=zt(null),kt=zt(null),ke=zt(null);function Pe(l,t){switch(I(kt,t),I(le,l),I(Tt,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?F1(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=F1(t),l=$1(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}zl(Tt),I(Tt,l)}function ca(){zl(Tt),zl(le),zl(kt)}function Bf(l){var t=l.memoizedState;t!==null&&(Wa._currentValue=t.memoizedState,I(ke,l)),t=Tt.current;var u=$1(t,l.type);t!==u&&(I(le,l),I(Tt,u))}function ln(l){le.current===l&&(zl(Tt),zl(le)),ke.current===l&&(zl(ke),Wa._currentValue=Hu)}var qf,S0;function Pt(l){if(qf===void 0)try{throw Error()}catch(u){var t=u.stack.trim().match(/\n( *(at )?)/);qf=t&&t[1]||"",S0=-1)":-1e||i[a]!==d[e]){var g=` +`+i[a].replace(" at new "," at ");return l.displayName&&g.includes("")&&(g=g.replace("",l.displayName)),g}while(1<=a&&0<=e);break}}}finally{Yf=!1,Error.prepareStackTrace=u}return(u=l?l.displayName||l.name:"")?Pt(u):""}function Iy(l,t){switch(l.tag){case 26:case 27:case 5:return Pt(l.type);case 16:return Pt("Lazy");case 13:return l.child!==t&&t!==null?Pt("Suspense Fallback"):Pt("Suspense");case 19:return Pt("SuspenseList");case 0:case 15:return Gf(l.type,!1);case 11:return Gf(l.type.render,!1);case 1:return Gf(l.type,!0);case 31:return Pt("Activity");case 30:return Pt("ViewTransition");default:return""}}function s0(l){try{var t="",u=null;do t+=Iy(l,u),u=l,l=l.return;while(l);return t}catch(a){return` +Error generating stack: `+a.message+` +`+a.stack}}var Qf=Object.prototype.hasOwnProperty,Xf=T.unstable_scheduleCallback,Zf=T.unstable_cancelCallback,ky=T.unstable_shouldYield,Py=T.unstable_requestPaint,jl=T.unstable_now,ld=T.unstable_getCurrentPriorityLevel,z0=T.unstable_ImmediatePriority,T0=T.unstable_UserBlockingPriority,tn=T.unstable_NormalPriority,td=T.unstable_LowPriority,b0=T.unstable_IdlePriority,ud=T.log,ad=T.unstable_setDisableYieldValue,te=null,rl=null;function lu(l){if(typeof ud=="function"&&ad(l),rl&&typeof rl.setStrictMode=="function")try{rl.setStrictMode(te,l)}catch{}}var xl=Math.clz32?Math.clz32:fd,ed=Math.log,nd=Math.LN2;function fd(l){return l>>>=0,l===0?32:31-(ed(l)/nd|0)|0}var un=256,an=262144,en=4194304;function Cu(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&-l;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function nn(l,t,u){var a=l.pendingLanes;if(a===0)return 0;var e=0,n=l.suspendedLanes,f=l.pingedLanes;l=l.warmLanes;var c=a&134217727;return c!==0?(a=c&~n,a!==0?e=Cu(a):(f&=c,f!==0?e=Cu(f):u||(u=c&~l,u!==0&&(e=Cu(u))))):(c=a&~n,c!==0?e=Cu(c):f!==0?e=Cu(f):u||(u=a&~l,u!==0&&(e=Cu(u)))),e===0?0:t!==0&&t!==e&&(t&n)===0&&(n=e&-e,u=t&-t,n>=u||n===32&&(u&4194048)!==0)?t:e}function ue(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function E0(l,t){(t&8)!==0&&(t|=t&32);var u=l.entangledLanes;if(u!==0)for(l=l.entanglements,u&=t;0u;u++)t.push(l);return t}function ae(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function id(l,t,u,a,e,n){var f=l.pendingLanes;l.pendingLanes=u,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=u,l.entangledLanes&=u,l.errorRecoveryDisabledLanes&=u,l.shellSuspendCounter=0;var c=l.entanglements,i=l.expirationTimes,d=l.hiddenUpdates;for(u=f&~u;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ff=!1;if(Gt)try{var ce={};Object.defineProperty(ce,"passive",{get:function(){Ff=!0}}),window.addEventListener("test",ce,ce),window.removeEventListener("test",ce,ce)}catch{Ff=!1}var tu=null,$f=null,dn=null;function J0(){if(dn)return dn;var l,t=$f,u=t.length,a,e="value"in tu?tu.value:tu.textContent,n=e.length;for(l=0;l=me),I0=" ",k0=!1;function P0(l,t){switch(l){case"keyup":return Ld.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function lv(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Sa=!1;function pd(l,t){switch(l){case"compositionend":return lv(t);case"keypress":return t.which!==32?null:(k0=!0,I0);case"textInput":return l=t.data,l===I0&&k0?null:l;default:return null}}function wd(l,t){if(Sa)return l==="compositionend"||!tc&&P0(l,t)?(l=J0(),dn=$f=tu=null,Sa=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1"u")return null;try{return l.activeElement||l.body}catch{return l.body}}function iv(l){for(;l&&l.firstChild;)l=l.firstChild;return l}function vv(l,t){var u=iv(l);l=0;for(var a;u;){if(u.nodeType===3){if(a=l+u.textContent.length,l<=t&&a>=t)return{node:u,offset:t-l};l=a}l:{for(;u;){if(u.nextSibling){u=u.nextSibling;break l}u=u.parentNode}u=void 0}u=iv(u)}}function mv(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?mv(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function yv(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=ec(l.document);t instanceof l.HTMLIFrameElement;){try{var u=typeof t.contentWindow.location.href=="string"}catch{u=!1}if(u)l=t.contentWindow;else break;t=ec(l.document)}return t}function nc(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var th=Gt&&"documentMode"in document&&11>=document.documentMode,sa=null,fc=null,oe=null,cc=!1;function dv(l,t,u){var a=u.window===u?u.document:u.nodeType===9?u:u.ownerDocument;cc||sa==null||sa!==ec(a)||(a=sa,"selectionStart"in a&&nc(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),oe&&he(oe,a)||(oe=a,a=zf(fc,"onSelect"),0>=f,e-=f,Et=1<<32-xl(t)+e|u<_?(dl=A,A=null):dl=A.sibling;var Q=m(y,A,h[_],s);if(Q===null){A===null&&(A=dl);break}l&&A&&Q.alternate===null&&t(y,A),v=n(Q,v,_),G===null?O=Q:G.sibling=Q,G=Q,A=dl}if(_===h.length)return u(y,A),R&&Vt(y,_),O;if(A===null){for(;__?(dl=A,A=null):dl=A.sibling;var Du=m(y,A,Q.value,s);if(Du===null){A===null&&(A=dl);break}l&&A&&Du.alternate===null&&t(y,A),v=n(Du,v,_),G===null?O=Du:G.sibling=Du,G=Du,A=dl}if(Q.done)return u(y,A),R&&Vt(y,_),O;if(A===null){for(;!Q.done;_++,Q=h.next())Q=z(y,Q.value,s),Q!==null&&(v=n(Q,v,_),G===null?O=Q:G.sibling=Q,G=Q);return R&&Vt(y,_),O}for(A=a(A);!Q.done;_++,Q=h.next())Q=o(A,y,_,Q.value,s),Q!==null&&(l&&(dl=Q.alternate,dl!==null&&A.delete(dl.key===null?_:dl.key)),v=n(Q,v,_),G===null?O=Q:G.sibling=Q,G=Q);return l&&A.forEach(function(wo){return t(y,wo)}),R&&Vt(y,_),O}function H(y,v,h,s){if(typeof h=="object"&&h!==null&&h.type===st&&h.key===null&&h.props.ref===void 0&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case Uu:l:{for(var O=h.key;v!==null;){if(v.key===O){if(O=h.type,O===st){if(v.tag===7){u(y,v.sibling),s=e(v,h.props.children),cu(s,h),s.return=y,y=s;break l}}else if(v.elementType===O||typeof O=="object"&&O!==null&&O.$$typeof===F&&Ku(O)===v.type){u(y,v.sibling),s=e(v,h.props),cu(s,h),s.return=y,y=s;break l}u(y,v);break}else t(y,v);v=v.sibling}h.type===st?(s=Qu(h.props.children,y.mode,s,h.key),cu(s,h),s.return=y,y=s):(s=On(h.type,h.key,h.props,null,y.mode,s),cu(s,h),s.return=y,y=s)}return f(y);case $t:l:{for(O=h.key;v!==null;){if(v.key===O)if(v.tag===4&&v.stateNode.containerInfo===h.containerInfo&&v.stateNode.implementation===h.implementation){u(y,v.sibling),s=e(v,h.children||[]),s.return=y,y=s;break l}else{u(y,v);break}else t(y,v);v=v.sibling}s=oc(h,y.mode,s),s.return=y,y=s}return f(y);case F:return h=Ku(h),H(y,v,h,s)}if(Pa(h))return b(y,v,h,s);if(ka(h)){if(O=ka(h),typeof O!="function")throw Error(S(150));return h=O.call(h),N(y,v,h,s)}if(typeof h.then=="function")return H(y,v,Bn(h),s);if(h.$$typeof===ql)return H(y,v,Un(y,h),s);qn(y,h)}return typeof h=="string"&&h!==""||typeof h=="number"||typeof h=="bigint"?(h=""+h,v!==null&&v.tag===6?(u(y,v.sibling),s=e(v,h),s.return=y,y=s):(u(y,v),s=hc(h,y.mode,s),s.return=y,y=s),f(y)):u(y,v)}return function(y,v,h,s){try{be=0;var O=H(y,v,h,s);return Da=null,O}catch(A){if(A===_a||A===Cn)throw A;var G=Gl(29,A,null,y.mode);return G.lanes=s,G.return=y,G}}}var Ju=Qv(!0),Xv=Qv(!1),iu=!1;function Ac(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function _c(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function vu(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function mu(l,t,u){var a=l.updateQueue;if(a===null)return null;if(a=a.shared,(r&2)!==0){var e=a.pending;return e===null?t.next=t:(t.next=e.next,e.next=t),a.pending=t,t=En(l),bv(l,null,u),t}return bn(l,a,t,u),En(l)}function Ee(l,t,u){if(t=t.updateQueue,t!==null&&(t=t.shared,(u&4194048)!==0)){var a=t.lanes;a&=l.pendingLanes,u|=a,t.lanes=u,A0(l,u)}}function Dc(l,t){var u=l.updateQueue,a=l.alternate;if(a!==null&&(a=a.updateQueue,u===a)){var e=null,n=null;if(u=u.firstBaseUpdate,u!==null){do{var f={lane:u.lane,tag:u.tag,payload:u.payload,callback:null,next:null};n===null?e=n=f:n=n.next=f,u=u.next}while(u!==null);n===null?e=n=t:n=n.next=t}else e=n=t;u={baseState:a.baseState,firstBaseUpdate:e,lastBaseUpdate:n,shared:a.shared,callbacks:a.callbacks},l.updateQueue=u;return}l=u.lastBaseUpdate,l===null?u.firstBaseUpdate=t:l.next=t,u.lastBaseUpdate=t}var Mc=!1;function Oe(){if(Mc){var l=Aa;if(l!==null)throw l}}function Ne(l,t,u,a){Mc=!1;var e=l.updateQueue;iu=!1;var n=e.firstBaseUpdate,f=e.lastBaseUpdate,c=e.shared.pending;if(c!==null){e.shared.pending=null;var i=c,d=i.next;i.next=null,f===null?n=d:f.next=d,f=i;var g=l.alternate;g!==null&&(g=g.updateQueue,c=g.lastBaseUpdate,c!==f&&(c===null?g.firstBaseUpdate=d:c.next=d,g.lastBaseUpdate=i))}if(n!==null){var z=e.baseState;f=0,g=d=i=null,c=n;do{var m=c.lane&-536870913,o=m!==c.lane;if(o?(Y&m)===m:(a&m)===m){m!==0&&m===ru&&(Mc=!0),g!==null&&(g=g.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});l:{var b=l,N=c;m=t;var H=u;switch(N.tag){case 1:if(b=N.payload,typeof b=="function"){z=b.call(H,z,m);break l}z=b;break l;case 3:b.flags=b.flags&-65537|128;case 0:if(b=N.payload,m=typeof b=="function"?b.call(H,z,m):b,m==null)break l;z=X({},z,m);break l;case 2:iu=!0}}m=c.callback,m!==null&&(l.flags|=64,o&&(l.flags|=8192),o=e.callbacks,o===null?e.callbacks=[m]:o.push(m))}else o={lane:m,tag:c.tag,payload:c.payload,callback:c.callback,next:null},g===null?(d=g=o,i=z):g=g.next=o,f|=m;if(c=c.next,c===null){if(c=e.shared.pending,c===null)break;o=c,c=o.next,o.next=null,e.lastBaseUpdate=o,e.shared.pending=null}}while(!0);g===null&&(i=z),e.baseState=i,e.firstBaseUpdate=d,e.lastBaseUpdate=g,n===null&&(e.shared.lanes=0),su|=f,l.lanes=f,l.memoizedState=z}}function Zv(l,t){if(typeof l!="function")throw Error(S(191,l));l.call(t)}function Vv(l,t){var u=l.callbacks;if(u!==null)for(l.callbacks=null,l=0;ln?n:8;var f=D.T,c={};c.types=f!==null?f.types:null,D.T=c,wc(l,!1,t,u);try{var i=e(),d=D.S;if(d!==null&&d(c,i),i!==null&&typeof i=="object"&&typeof i.then=="function"){var g=dh(i,a);Me(l,t,g,Fl(l))}else Me(l,t,a,Fl(l))}catch(z){Me(l,t,{then:function(){},status:"rejected",reason:z},Fl())}finally{j.p=n,f!==null&&c.types!==null&&(f.types=c.types),D.T=f}}function zh(){}function Jc(l,t,u,a){if(l.tag!==5)throw Error(S(476));var e=sm(l).queue;Sm(l,e,t,Hu,u===null?zh:function(){return zm(l),u(a)})}function sm(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:Hu,baseState:Hu,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Kt,lastRenderedState:Hu},next:null};var u={};return t.next={memoizedState:u,baseState:u,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Kt,lastRenderedState:u},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function zm(l){var t=sm(l);t.next===null&&(t=l.alternate.memoizedState),Me(l,t.next.queue,{},Fl())}function pc(){return bl(Wa)}function Tm(){return cl().memoizedState}function bm(){return cl().memoizedState}function Th(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var u=Fl();l=vu(u);var a=mu(t,l,u);a!==null&&(Vl(a,t,u),Ee(a,t,u)),t={cache:bc()},l.payload=t;return}t=t.return}}function bh(l,t,u){var a=Fl();u={lane:a,revertLane:0,gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},Kn(l)?Om(t,u):(u=yc(l,t,u,a),u!==null&&(Vl(u,l,a),Nm(u,t,a)))}function Em(l,t,u){var a=Fl();Me(l,t,u,a)}function Me(l,t,u,a){var e={lane:a,revertLane:0,gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null};if(Kn(l))Om(t,e);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var f=t.lastRenderedState,c=n(f,u);if(e.hasEagerState=!0,e.eagerState=c,Ll(c,f))return bn(l,t,e,0),$===null&&Tn(),!1}catch{}if(u=yc(l,t,e,a),u!==null)return Vl(u,l,a),Nm(u,t,a),!0}return!1}function wc(l,t,u,a){if(a={lane:2,revertLane:Xi(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Kn(l)){if(t)throw Error(S(479))}else t=yc(l,u,a,2),t!==null&&Vl(t,l,2)}function Kn(l){var t=l.alternate;return l===U||t!==null&&t===U}function Om(l,t){Ma=Qn=!0;var u=l.pending;u===null?t.next=t:(t.next=u.next,u.next=t),l.pending=t}function Nm(l,t,u){if((u&4194048)!==0){var a=t.lanes;a&=l.pendingLanes,u|=a,t.lanes=u,A0(l,u)}}var Ln={readContext:bl,use:Vn,useCallback:nl,useContext:nl,useEffect:nl,useImperativeHandle:nl,useLayoutEffect:nl,useInsertionEffect:nl,useMemo:nl,useReducer:nl,useRef:nl,useState:nl,useDebugValue:nl,useDeferredValue:nl,useTransition:nl,useSyncExternalStore:nl,useId:nl,useHostTransitionStatus:nl,useFormState:nl,useActionState:nl,useOptimistic:nl,useMemoCache:nl,useCacheRefresh:nl,useEffectEvent:nl},Am={readContext:bl,use:Vn,useCallback:function(l,t){return Hl().memoizedState=[l,t===void 0?null:t],l},useContext:bl,useEffect:cm,useImperativeHandle:function(l,t,u){u=u!=null?u.concat([l]):null,rn(4194308,4,ym.bind(null,t,l),u)},useLayoutEffect:function(l,t){return rn(4194308,4,l,t)},useInsertionEffect:function(l,t){rn(4,2,l,t)},useMemo:function(l,t){var u=Hl();t=t===void 0?null:t;var a=l();if(pu){lu(!0);try{l()}finally{lu(!1)}}return u.memoizedState=[a,t],a},useReducer:function(l,t,u){var a=Hl();if(u!==void 0){var e=u(t);if(pu){lu(!0);try{u(t)}finally{lu(!1)}}}else e=t;return a.memoizedState=a.baseState=e,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:e},a.queue=l,l=l.dispatch=bh.bind(null,U,l),[a.memoizedState,l]},useRef:function(l){var t=Hl();return l={current:l},t.memoizedState=l},useState:function(l){l=jc(l);var t=l.queue,u=Em.bind(null,U,t);return t.dispatch=u,[l.memoizedState,u]},useDebugValue:Kc,useDeferredValue:function(l,t){var u=Hl();return Lc(u,l,t)},useTransition:function(){var l=jc(!1);return l=Sm.bind(null,U,l.queue,!0,!1),Hl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,u){var a=U,e=Hl();if(R){if(u===void 0)throw Error(S(407));u=u()}else{if(u=t(),$===null)throw Error(S(349));(Y&127)!==0||Jv(a,t,u)}e.memoizedState=u;var n={value:u,getSnapshot:t};return e.queue=n,cm(wv.bind(null,a,n,l),[l]),a.flags|=2048,Ha(9,{destroy:void 0},pv.bind(null,a,n,u,t),null),u},useId:function(){var l=Hl(),t=$.identifierPrefix;if(R){var u=Ot,a=Et;u=(a&~(1<<32-xl(a)-1)).toString(32)+u,t="_"+t+"R_"+u,u=Xn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof a.is=="string"?f.createElement("select",{is:a.is}):f.createElement("select"),a.multiple?n.multiple=!0:a.size&&(n.size=a.size);break;default:n=typeof a.is=="string"?f.createElement(e,{is:a.is}):f.createElement(e)}}n[Tl]=t,n[Yl]=a;l:for(f=t.child;f!==null;){if(f.tag===5||f.tag===6)n.appendChild(f.stateNode);else if(f.tag!==4&&f.tag!==27&&f.child!==null){f.child.return=f,f=f.child;continue}if(f===t)break l;for(;f.sibling===null;){if(f.return===null||f.return===t)break l;f=f.return}f.sibling.return=f.return,f=f.sibling}t.stateNode=n;l:switch(Al(n,e,a),e){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break l;case"img":a=!0;break l;default:a=!1}a&&Jt(t)}}return P(t),t.subtreeFlags&=-33554433,fi(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,u),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==a&&Jt(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(S(166));if(l=kt.current,Na(t)){if(l=t.stateNode,u=t.memoizedProps,a=null,e=gl,e!==null)switch(e.tag){case 27:case 5:a=e.memoizedProps}l[Tl]=t,l=!!(l.nodeValue===u||a!==null&&a.suppressHydrationWarning===!0||w1(l.nodeValue,u)),l||nu(t,!0)}else l=je(l).createTextNode(a),l[Tl]=t,t.stateNode=l}return P(t),null;case 31:if(u=t.memoizedState,l===null||l.memoizedState!==null){if(a=Na(t),u!==null){if(l===null){if(!a)throw Error(S(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(S(557));l[Tl]=t}else Xu(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;P(t),l=!1}else u=sc(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=u),l=!0;if(!l)return t.flags&256?(Jl(t),t):(Jl(t),null);if((t.flags&128)!==0)throw Error(S(558))}return P(t),null;case 13:if(a=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(e=Na(t),a!==null&&a.dehydrated!==null){if(l===null){if(!e)throw Error(S(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(S(317));e[Tl]=t}else Xu(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;P(t),e=!1}else e=sc(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),e=!0;if(!e)return t.flags&256?(Jl(t),t):(Jl(t),null)}return Jl(t),(t.flags&128)!==0?(t.lanes=u,t):(u=a!==null,l=l!==null&&l.memoizedState!==null,u&&(a=t.child,e=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(e=a.alternate.memoizedState.cachePool.pool),n=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(n=a.memoizedState.cachePool.pool),n!==e&&(a.flags|=2048)),u!==l&&u&&(t.child.flags|=8192),$n(t,t.updateQueue),P(t),null);case 4:return ca(),l===null&&ri(t.stateNode.containerInfo),t.flags|=67108864,P(t),null;case 10:return rt(t.type),P(t),null;case 19:if(Rc(t),a=t.memoizedState,a===null)return P(t),null;if(e=(t.flags&128)!==0,n=a.rendering,n===null)if(e)He(a,!1);else{if(fl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=Gn(l),n!==null){for(t.flags|=128,He(a,!1),l=n.updateQueue,t.updateQueue=l,$n(t,l),t.subtreeFlags=0,l=u,u=t.child;u!==null;)Ev(u,l),u=u.sibling;return Ae(t,Ol.current&1|2),R&&Vt(t,a.treeForkCount),t.child}l=l.sibling}a.tail!==null&&jl()>vf&&(t.flags|=128,e=!0,He(a,!1),t.lanes=4194304)}else{if(!e)if(l=Gn(n),l!==null){if(t.flags|=128,e=!0,l=l.updateQueue,t.updateQueue=l,$n(t,l),He(a,!0),a.tail===null&&a.tailMode!=="collapsed"&&a.tailMode!=="visible"&&!n.alternate&&!R)return P(t),null}else 2*jl()-a.renderingStartTime>vf&&u!==536870912&&(t.flags|=128,e=!0,He(a,!1),t.lanes=4194304);a.isBackwards?(n.sibling=t.child,t.child=n):(l=a.last,l!==null?l.sibling=n:t.child=n,a.last=n)}if(a.tail!==null){l=a.tail;l:{for(u=l;u!==null;){if(u.alternate!==null){u=!1;break l}u=u.sibling}u=!0}return a.rendering=l,a.tail=l.sibling,a.renderingStartTime=jl(),l.sibling=null,n=Ol.current,n=e?n&1|2:n&1,a.tailMode==="visible"||a.tailMode==="collapsed"||!u||R?Ae(t,n):(u=n,I(El,t),I(Ol,u),Dl===null&&(Dl=t)),R&&Vt(t,a.treeForkCount),l}return P(t),null;case 22:case 23:return Jl(t),Hc(),a=t.memoizedState!==null,l!==null?l.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(u&536870912)!==0&&(t.flags&128)===0&&(P(t),t.subtreeFlags&6&&(t.flags|=8192)):P(t),u=t.updateQueue,u!==null&&$n(t,u.retryQueue),u=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(u=l.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==u&&(t.flags|=2048),l!==null&&zl(xu),null;case 24:return u=null,l!==null&&(u=l.memoizedState.cache),t.memoizedState.cache!==u&&(t.flags|=2048),rt(vl),P(t),null;case 25:return null;case 30:return t.flags|=33554432,P(t),null}throw Error(S(156,t.tag))}function Mh(l,t){switch(gc(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return rt(vl),ca(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return ln(t),null;case 31:if(t.memoizedState!==null){if(Jl(t),t.alternate===null)throw Error(S(340));Xu()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(Jl(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(S(340));Xu()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return Rc(t),l=t.flags,l&65536?(t.flags=l&-65537|128,l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null),t.flags|=4,t):null;case 4:return ca(),null;case 10:return rt(t.type),null;case 22:case 23:return Jl(t),Hc(),l!==null&&zl(xu),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return rt(vl),null;case 25:return null;default:return null}}function Fm(l,t){switch(gc(t),t.tag){case 3:rt(vl),ca();break;case 26:case 27:case 5:ln(t);break;case 4:ca();break;case 31:t.memoizedState!==null&&Jl(t);break;case 13:Jl(t);break;case 19:Rc(t);break;case 10:rt(t.type);break;case 22:case 23:Jl(t),Hc(),l!==null&&zl(xu);break;case 24:rt(vl)}}function Ce(l,t){try{var u=t.updateQueue,a=u!==null?u.lastEffect:null;if(a!==null){var e=a.next;u=e;do{if((u.tag&l)===l){a=void 0;var n=u.create,f=u.inst;a=n(),f.destroy=a}u=u.next}while(u!==e)}}catch(c){L(t,t.return,c)}}function ou(l,t,u){try{var a=t.updateQueue,e=a!==null?a.lastEffect:null;if(e!==null){var n=e.next;a=n;do{if((a.tag&l)===l){var f=a.inst,c=f.destroy;if(c!==void 0){f.destroy=void 0,e=t;var i=u,d=c;try{d()}catch(g){L(e,i,g)}}}a=a.next}while(a!==n)}}catch(g){L(t,t.return,g)}}function $m(l){var t=l.updateQueue;if(t!==null){var u=l.stateNode;try{Vv(t,u)}catch(a){L(l,l.return,a)}}}function Im(l,t,u){u.props=wu(l.type,l.memoizedProps),u.state=l.memoizedState;try{u.componentWillUnmount()}catch(a){L(l,t,a)}}function Nt(l,t){try{var u=l.ref;if(u!==null){switch(l.tag){case 26:case 27:case 5:var a=l.stateNode;break;case 30:var e=l.stateNode,n=Qt(l.memoizedProps,e);(e.ref===null||e.ref.name!==n)&&(e.ref=ey(n)),a=e.ref;break;case 7:if(l.stateNode===null){var f=new $l(l);V(l.child,!1,zo,f,void 0,void 0),l.stateNode=f}a=l.stateNode;break;default:a=l.stateNode}typeof u=="function"?l.refCleanup=u(a):u.current=a}}catch(c){L(l,t,c)}}function Nl(l,t){var u=l.ref,a=l.refCleanup;if(u!==null)if(typeof a=="function")try{a()}catch(e){L(l,t,e)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof u=="function")try{u(null)}catch(e){L(l,t,e)}else u.current=null}function In(l,t){if((l.tag===5||l.tag===27||l.tag===6)&&l.alternate===null&&t!==null)for(var u=0;u title"))),Al(a,t,u),a[Tl]=l,ol(a),t=a;break l;case"link":if(n=Ey("link","href",e).get(t+(u.href||""))){for(f=0;fH&&(f=H,H=N,N=f);var y=vv(c,N),v=vv(c,H);if(y&&v&&(o.rangeCount!==1||o.anchorNode!==y.node||o.anchorOffset!==y.offset||o.focusNode!==v.node||o.focusOffset!==v.offset)){var h=z.createRange();h.setStart(y.node,y.offset),o.removeAllRanges(),N>H?(o.addRange(h),o.extend(v.node,v.offset)):(h.setEnd(v.node,v.offset),o.addRange(h))}}}}for(z=[],o=c;o=o.parentNode;)o.nodeType===1&&z.push({element:o,left:o.scrollLeft,top:o.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;cu?32:u,D.T=null,u=Mi,Mi=null;var n=ht,f=Ht;if(el=0,Iu=ht=null,Ht=0,(r&6)!==0)throw Error(S(331));var c=r;if(r|=4,b1(n.current),s1(n,n.current,f,u),r=c,Xe(0,!1),rl&&typeof rl.onPostCommitFiberRoot=="function")try{rl.onPostCommitFiberRoot(te,n)}catch{}return!0}finally{j.p=e,D.T=a,G1(l,t)}}function Q1(l,t,u){t=lt(u,t),t=$c(l.stateNode,t,2),l=mu(l,t,2),l!==null&&(ae(l,2),Ct(l))}function L(l,t,u){if(l.tag===3)Q1(l,l,u);else for(;t!==null;){if(t.tag===3){Q1(t,l,u);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(zu===null||!zu.has(a))){l=lt(u,l),u=Bm(2),a=mu(t,u,2),a!==null&&(qm(u,a,t,l),ae(a,2),Ct(a));break}}t=t.return}}function Yi(l,t,u){var a=l.pingCache;if(a===null){a=l.pingCache=new Rh;var e=new Set;a.set(t,e)}else e=a.get(t),e===void 0&&(e=new Set,a.set(t,e));e.has(u)||(Ai=!0,e.add(u),l=Vh.bind(null,l,t,u),t.then(l,l))}function Vh(l,t,u){var a=l.pingCache;a!==null&&a.delete(t),l.pingedLanes|=l.suspendedLanes&u,l.warmLanes&=~u,$===l&&(Y&u)===u&&((fl===4||fl===3&&(Y&62914560)===Y&&300>jl()-cf)&&(r&2)===0?ja(l,0):ff|=u,Ga===Y&&(Ga=0)),Ct(l)}function X1(l,t){t===0&&(t=O0()),l=Gu(l,t),l!==null&&(ae(l,t),Ct(l))}function jh(l){var t=l.memoizedState,u=0;t!==null&&(u=t.retryLane),X1(l,u)}function rh(l,t){var u=0;switch(l.tag){case 31:case 13:var a=l.stateNode,e=l.memoizedState;e!==null&&(u=e.retryLane);break;case 19:a=l.stateNode;break;case 22:a=l.stateNode._retryCache;break;default:throw Error(S(314))}a!==null&&a.delete(t),X1(l,u)}function xh(l,t){return Xf(l,t)}var xa=null,Ka=null,Gi=!1,Sf=!1,Qi=!1,bu=0;function Ct(l){l!==Ka&&l.next===null&&(Ka===null?xa=Ka=l:Ka=Ka.next=l),Sf=!0,Gi||(Gi=!0,Lh())}function Xe(l,t){if(!Qi&&Sf){Qi=!0;do for(var u=!1,a=xa;a!==null;){if(l!==0){var e=a.pendingLanes;if(e===0)var n=0;else{var f=a.suspendedLanes,c=a.pingedLanes;n=(1<<31-xl(42|l)+1)-1,n&=e&~(f&~c),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(u=!0,r1(a,n))}else n=Y,n=nn(a,a===$?n:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(n&3)===0||ue(a,n)||(u=!0,r1(a,n));a=a.next}while(u);Qi=!1}}function Kh(){Z1()}function Z1(){Sf=Gi=!1;var l=0;bu!==0&&to()&&(l=bu);for(var t=jl(),u=null,a=xa;a!==null;){var e=a.next,n=V1(a,t);n===0?(a.next=null,u===null?xa=e:u.next=e,e===null&&(Ka=u)):(u=a,(l!==0||(n&3)!==0)&&(Sf=!0)),a=e}el!==0&&el!==5||Xe(l),bu!==0&&(bu=0)}function V1(l,t){for(var u=l.suspendedLanes,a=l.pingedLanes,e=l.expirationTimes,n=l.pendingLanes&-62914561;0c)break;var g=i.transferSize,z=i.initiatorType;g&&W1(z)&&(i=i.responseEnd,f+=g*(iEf){N.length=b;break}h=new Promise(co.bind(h)),N.push(h)}}}if(0"u"?null:document;function sy(l,t,u){var a=Ja;if(a&&typeof t=="string"&&t){var e=kl(t);e='link[rel="'+l+'"][href="'+e+'"]',typeof u=="string"&&(e+='[crossorigin="'+u+'"]'),Sy.has(e)||(Sy.add(e),l={rel:l,crossOrigin:u,href:t},a.querySelector(e)===null&&(t=a.createElement("link"),Al(t,"link",l),ol(t),a.head.appendChild(t)))}}function Mo(l){wt.D(l),sy("dns-prefetch",l,null)}function Uo(l,t){wt.C(l,t),sy("preconnect",l,t)}function Ho(l,t,u){wt.L(l,t,u);var a=Ja;if(a&&l&&t){var e='link[rel="preload"][as="'+kl(t)+'"]';t==="image"&&u&&u.imageSrcSet?(e+='[imagesrcset="'+kl(u.imageSrcSet)+'"]',typeof u.imageSizes=="string"&&(e+='[imagesizes="'+kl(u.imageSizes)+'"]')):e+='[href="'+kl(l)+'"]';var n=e;switch(t){case"style":n=pa(l);break;case"script":n=wa(l)}if(!(ft.has(n)||(l=X({rel:"preload",href:t==="image"&&u&&u.imageSrcSet?void 0:l,as:t},u),ft.set(n,l),a.querySelector(e)!==null||t==="style"&&a.querySelector(xe(n))||t==="script"&&a.querySelector(Ke(n))))){var f=a.createElement("link");Al(f,"link",l),t==="style"&&(f[fn]=!0,f.onload=f.onerror=function(){C0(f)}),ol(f),a.head.appendChild(f)}}}function Co(l,t){wt.m(l,t);var u=Ja;if(u&&l){var a=t&&typeof t.as=="string"?t.as:"script",e='link[rel="modulepreload"][as="'+kl(a)+'"][href="'+kl(l)+'"]',n=e;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=wa(l)}if(!ft.has(n)&&(l=X({rel:"modulepreload",href:l},t),ft.set(n,l),u.querySelector(e)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(u.querySelector(Ke(n)))return}a=u.createElement("link"),Al(a,"link",l),ol(a),u.head.appendChild(a)}}}function Ro(l,t,u){wt.S(l,t,u);var a=Ja;if(a&&l){var e=ma(a).hoistableStyles,n=pa(l);t=t||"default";var f=e.get(n);if(!f){var c={loading:0,preload:null};if(f=a.querySelector(xe(n)))c.loading=5;else{l=X({rel:"stylesheet",href:l,"data-precedence":t},u),(u=ft.get(n))&&a0(l,u);var i=f=a.createElement("link");ol(i),Al(i,"link",l),i._p=new Promise(function(d,g){i.onload=d,i.onerror=g}),i.addEventListener("load",function(){c.loading|=1}),i.addEventListener("error",function(){c.loading|=2}),c.loading|=4,Tf(f,t,a)}f={type:"stylesheet",instance:f,count:1,state:c},e.set(n,f)}}}function Bo(l,t){wt.X(l,t);var u=Ja;if(u&&l){var a=ma(u).hoistableScripts,e=wa(l),n=a.get(e);n||(n=u.querySelector(Ke(e)),n||(l=X({src:l,async:!0},t),(t=ft.get(e))&&e0(l,t),n=u.createElement("script"),ol(n),Al(n,"link",l),u.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},a.set(e,n))}}function qo(l,t){wt.M(l,t);var u=Ja;if(u&&l){var a=ma(u).hoistableScripts,e=wa(l),n=a.get(e);n||(n=u.querySelector(Ke(e)),n||(l=X({src:l,async:!0,type:"module"},t),(t=ft.get(e))&&e0(l,t),n=u.createElement("script"),ol(n),Al(n,"link",l),u.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},a.set(e,n))}}function zy(l,t,u,a){var e=(e=kt.current)?re(e):null;if(!e)throw Error(S(446));switch(l){case"meta":case"title":return null;case"style":return typeof u.precedence=="string"&&typeof u.href=="string"?(u=pa(u.href),t=ma(e).hoistableStyles,a=t.get(u),a||(a={type:"style",instance:null,count:0,state:null},t.set(u,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(u.rel==="stylesheet"&&typeof u.href=="string"&&typeof u.precedence=="string"){l=pa(u.href);var n=ma(e).hoistableStyles,f=n.get(l);if(f||(e=e.ownerDocument||e,f={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,f),(n=e.querySelector(xe(l)))?n._p||(f.instance=n,f.state.loading=5):(n=ft.get(l),n||(n={rel:"preload",as:"style",href:u.href,crossOrigin:u.crossOrigin,integrity:u.integrity,media:u.media,hrefLang:u.hrefLang,referrerPolicy:u.referrerPolicy},ft.set(l,n)),Yo(e,l,n,f.state))),t&&a===null)throw Error(S(528,""));return f}if(t&&a!==null)throw Error(S(529,""));return null;case"script":return t=u.async,u=u.src,typeof u=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(u=wa(u),t=ma(e).hoistableScripts,a=t.get(u),a||(a={type:"script",instance:null,count:0,state:null},t.set(u,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(S(444,l))}}function pa(l){return'href="'+kl(l)+'"'}function xe(l){return'link[rel="stylesheet"]['+l+"]"}function Ty(l){return X({},l,{"data-precedence":l.precedence,precedence:null})}function Yo(l,t,u,a){if(t=l.querySelector('link[rel="preload"][as="style"]['+t+"]")){if(t[fn]!==!0){a.loading=1;return}}else t=l.createElement("link"),t[fn]=!0,t.onload=t.onerror=C0.bind(null,t),Al(t,"link",u),ol(t),l.head.appendChild(t);a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2})}function wa(l){return'[src="'+kl(l)+'"]'}function Ke(l){return"script[async]"+l}function by(l,t,u){if(t.count++,t.instance===null)switch(t.type){case"style":var a=l.querySelector('style[data-href~="'+kl(u.href)+'"]');if(a)return t.instance=a,ol(a),a;var e=X({},u,{"data-href":u.href,"data-precedence":u.precedence,href:null,precedence:null});return a=(l.ownerDocument||l).createElement("style"),ol(a),Al(a,"style",e),Tf(a,u.precedence,l),t.instance=a;case"stylesheet":e=pa(u.href);var n=l.querySelector(xe(e));if(n)return t.state.loading|=4,t.instance=n,ol(n),n;a=Ty(u),(e=ft.get(e))&&a0(a,e),n=(l.ownerDocument||l).createElement("link"),ol(n);var f=n;return f._p=new Promise(function(c,i){f.onload=c,f.onerror=i}),Al(n,"link",a),t.state.loading|=4,Tf(n,u.precedence,l),t.instance=n;case"script":return n=wa(u.src),(e=l.querySelector(Ke(n)))?(t.instance=e,ol(e),e):(a=u,(e=ft.get(n))&&(a=X({},u),e0(a,e)),l=l.ownerDocument||l,e=l.createElement("script"),ol(e),Al(e,"link",a),l.head.appendChild(e),t.instance=e);case"void":return null;default:throw Error(S(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,Tf(a,u.precedence,l));return t.instance}function Tf(l,t,u){for(var a=u.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),e=a.length?a[a.length-1]:null,n=e,f=0;f title"):null)}function Go(l,t,u){if(u===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(l=t.disabled,typeof t.precedence=="string"&&l==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Oy(l,t){return l==="img"&&t.src!=null&&t.src!==""&&t.onLoad==null&&t.loading!=="lazy"}function Ny(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function Ay(l){return(l.width||100)*(l.height||100)*(typeof devicePixelRatio=="number"?devicePixelRatio:1)*.25}function _y(l,t){typeof t.decode=="function"&&(l.imgCount++,t.complete||(l.imgBytes+=Ay(t),l.suspenseyImages.push(t)),l=Zo.bind(l),t.decode().then(l,l))}function Qo(l,t,u,a){if(u.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(u.state.loading&4)===0){if(u.instance===null){var e=pa(a.href),n=t.querySelector(xe(e));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Le.bind(l),t.then(l,l)),u.state.loading|=4,u.instance=n,ol(n);return}n=t.ownerDocument||t,a=Ty(a),(e=ft.get(e))&&a0(a,e),n=n.createElement("link"),ol(n);var f=n;f._p=new Promise(function(c,i){f.onload=c,f.onerror=i}),Al(n,"link",a),u.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(u,t),(t=u.state.preload)&&(u.state.loading&3)===0&&(l.count++,u=Le.bind(l),t.addEventListener("load",u),t.addEventListener("error",u))}}var Ef=0;function Xo(l,t){return l.stylesheets&&l.count===0&&Nf(l,l.stylesheets),0Ef?50:800)+t);return l.unsuspend=u,function(){l.unsuspend=null,clearTimeout(a),clearTimeout(e)}}:null}function Dy(l){if(l.count===0&&(l.imgCount===0||!l.waitingForImages)){if(l.stylesheets)Nf(l,l.stylesheets);else if(l.unsuspend){var t=l.unsuspend;l.unsuspend=null,t()}}}function Le(){this.count--,Dy(this)}function Zo(){this.imgCount--,Dy(this)}var Of=null;function Nf(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Of=new Map,t.forEach(Vo,l),Of=null,Le.call(l))}function Vo(l,t){if(!(t.state.loading&4)){var u=Of.get(l);if(u)var a=u.get(null);else{u=new Map,Of.set(l,u);for(var e=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(T)}catch(tl){console.error(tl)}}return T(),d0.exports=ko(),d0.exports}var Ly=Po();const lg=({value:T,name:tl,hydrate:p=!0})=>{if(T==null||T.trim()==="")return null;const S=p?"astro-slot":"astro-static-slot";return Wt.createElement(S,{name:tl,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:T}})};var Wy=Wt.memo(lg,()=>!0);function tg(T){for(const tl in T)if(tl.startsWith("__reactContainer"))return tl}const ug={class:"className",for:"htmlFor"};let Jy=0;function Fy(T,tl,p){tl===void 0&&(Jy+=1,tl=Jy,p=0);let S={};for(const il of T.attributes){const gt=ug[il.name]||il.name;S[gt]=il.value}if(S.key=`${tl}-${p}`,T.firstChild===null)return Wt.createElement(T.localName,S);let Bl=0;return Wt.createElement(T.localName,S,Array.from(T.childNodes).map(il=>il.nodeType===Node.TEXT_NODE?il.data:il.nodeType===Node.ELEMENT_NODE?(Bl+=1,Fy(il,tl,Bl)):void 0).filter(il=>!!il))}function ag(T,tl){if(tl&&T){let p=[],S=document.createElement("template");S.innerHTML=T;for(let Bl of S.content.children)p.push(Fy(Bl));return p}else return T?Wt.createElement(Wy,{value:T}):void 0}let py=new WeakMap;const wy=(T,tl)=>{let p=py.get(T);return p||(p=tl(),py.set(T,p)),p};var ng=T=>(tl,p,{default:S,...Bl},{client:il})=>{if(!T.hasAttribute("ssr"))return;const gt=T.getAttribute("data-action-key"),Mu=T.getAttribute("data-action-name"),Ml=T.getAttribute("data-action-result"),Il=gt&&Mu&&Ml?[JSON.parse(Ml),gt,Mu]:void 0,Pu={identifierPrefix:T.getAttribute("prefix"),formState:Il};for(const[ct,_l]of Object.entries(Bl))p[ct]=Wt.createElement(Wy,{value:_l,name:ct});const V=Wt.createElement(tl,p,ag(S,T.hasAttribute("data-react-children"))),W=tg(T);if(W&&delete T[W],il==="only")return Wt.startTransition(()=>{wy(T,()=>{const _l=Ly.createRoot(T);return T.addEventListener("astro:unmount",()=>_l.unmount(),{once:!0}),_l}).render(V)});Wt.startTransition(()=>{wy(T,()=>{const _l=Ly.hydrateRoot(T,V,Pu);return T.addEventListener("astro:unmount",()=>_l.unmount(),{once:!0}),_l}).render(V)})};export{ng as default}; diff --git a/services/recordly-share/worker/web/dist/_astro/index.DeQQz02V.js b/services/recordly-share/worker/web/dist/_astro/index.DeQQz02V.js new file mode 100644 index 000000000..cd9c2f70b --- /dev/null +++ b/services/recordly-share/worker/web/dist/_astro/index.DeQQz02V.js @@ -0,0 +1 @@ +function ie(_,m){for(var d=0;dy[T]})}}}return Object.freeze(Object.defineProperty(_,Symbol.toStringTag,{value:"Module"}))}function se(_){return _&&_.__esModule&&Object.prototype.hasOwnProperty.call(_,"default")?_.default:_}var Y={exports:{}},o={};var V;function fe(){if(V)return o;V=1;var _=Symbol.for("react.transitional.element"),m=Symbol.for("react.portal"),d=Symbol.for("react.fragment"),y=Symbol.for("react.strict_mode"),T=Symbol.for("react.profiler"),R=Symbol.for("react.consumer"),h=Symbol.for("react.context"),H=Symbol.for("react.forward_ref"),O=Symbol.for("react.suspense"),S=Symbol.for("react.memo"),i=Symbol.for("react.lazy"),t=Symbol.for("react.activity"),l=Symbol.for("react.view_transition"),g=Symbol.iterator;function w(e){return e===null||typeof e!="object"?null:(e=g&&e[g]||e["@@iterator"],typeof e=="function"?e:null)}var P={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},k=Object.assign,b={};function C(e,r,n){this.props=e,this.context=r,this.refs=b,this.updater=n||P}C.prototype.isReactComponent={},C.prototype.setState=function(e,r){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,r,"setState")},C.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function x(){}x.prototype=C.prototype;function D(e,r,n){this.props=e,this.context=r,this.refs=b,this.updater=n||P}var j=D.prototype=new x;j.constructor=D,k(j,C.prototype),j.isPureReactComponent=!0;var q=Array.isArray;function I(){}var c={H:null,A:null,T:null,S:null},z=Object.prototype.hasOwnProperty;function L(e,r,n){var u=n.ref;return{$$typeof:_,type:e,key:r,ref:u!==void 0?u:null,props:n}}function ee(e,r){return L(e.type,r,e.props)}function M(e){return typeof e=="object"&&e!==null&&e.$$typeof===_}function te(e){var r={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return r[n]})}var G=/\/+/g;function $(e,r){return typeof e=="object"&&e!==null&&e.key!=null?te(""+e.key):r.toString(36)}function re(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch(typeof e.status=="string"?e.then(I,I):(e.status="pending",e.then(function(r){e.status==="pending"&&(e.status="fulfilled",e.value=r)},function(r){e.status==="pending"&&(e.status="rejected",e.reason=r)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}function A(e,r,n,u,s){var f=typeof e;(f==="undefined"||f==="boolean")&&(e=null);var a=!1;if(e===null)a=!0;else switch(f){case"bigint":case"string":case"number":a=!0;break;case"object":switch(e.$$typeof){case _:case m:a=!0;break;case i:return a=e._init,A(a(e._payload),r,n,u,s)}}if(a)return s=s(e),a=u===""?"."+$(e,0):u,q(s)?(n="",a!=null&&(n=a.replace(G,"$&/")+"/"),A(s,r,n,"",function(oe){return oe})):s!=null&&(M(s)&&(s=ee(s,n+(s.key==null||e&&e.key===s.key?"":(""+s.key).replace(G,"$&/")+"/")+a)),r.push(s)),1;a=0;var E=u===""?".":u+":";if(q(e))for(var v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(_)}catch(m){console.error(m)}}return _(),U.exports=ae(),U.exports}export{ce as $,le as R,ye as a,J as b,se as g,F as r}; diff --git a/services/recordly-share/worker/web/dist/embed.html b/services/recordly-share/worker/web/dist/embed.html new file mode 100644 index 000000000..5f1cd77bf --- /dev/null +++ b/services/recordly-share/worker/web/dist/embed.html @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/services/recordly-share/worker/web/dist/icon-64.png b/services/recordly-share/worker/web/dist/icon-64.png new file mode 100644 index 000000000..fc3c7a673 Binary files /dev/null and b/services/recordly-share/worker/web/dist/icon-64.png differ diff --git a/services/recordly-share/worker/web/dist/lib-login.html b/services/recordly-share/worker/web/dist/lib-login.html new file mode 100644 index 000000000..733717e9c --- /dev/null +++ b/services/recordly-share/worker/web/dist/lib-login.html @@ -0,0 +1 @@ + Library — Recordly

Your library

Enter your dashboard password to manage shared recordings.

\ No newline at end of file diff --git a/services/recordly-share/worker/web/dist/lib.html b/services/recordly-share/worker/web/dist/lib.html new file mode 100644 index 000000000..9c0b2fecc --- /dev/null +++ b/services/recordly-share/worker/web/dist/lib.html @@ -0,0 +1 @@ + Library — Recordly

Your recordings

Manage your shared videos and links.

\ No newline at end of file diff --git a/services/recordly-share/worker/web/dist/share.html b/services/recordly-share/worker/web/dist/share.html new file mode 100644 index 000000000..1e9a25fde --- /dev/null +++ b/services/recordly-share/worker/web/dist/share.html @@ -0,0 +1 @@ + Recordly
\ No newline at end of file diff --git a/services/recordly-share/worker/web/package-lock.json b/services/recordly-share/worker/web/package-lock.json new file mode 100644 index 000000000..488c5fedb --- /dev/null +++ b/services/recordly-share/worker/web/package-lock.json @@ -0,0 +1,8312 @@ +{ + "name": "recordly-share-web", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "recordly-share-web", + "version": "1.0.0", + "dependencies": { + "@astrojs/react": "^6.0.6", + "@heroui/react": "^3.2.6", + "@heroui/styles": "^3.2.6", + "@phosphor-icons/react": "^2.1.10", + "@tailwindcss/vite": "^4.3.3", + "astro": "^6.4.5", + "react": "^19.3.0", + "react-dom": "^19.3.0", + "tailwindcss": "^4.3.3" + }, + "devDependencies": { + "@astrojs/check": "^0.9.10", + "@types/node": "^24.13.6", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "typescript": "^6.0.3" + } + }, + "node_modules/@adobe/react-spectrum": { + "version": "3.47.5", + "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.47.5.tgz", + "integrity": "sha512-iTbAwwMijVnQjwjwbvkWn82AyRAbFNSJzt/VawWp1vXRIxVIO9COZ1pPG5Fj88xXgqlG8maVcv58p74vqqy5HA==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.4", + "@react-types/shared": "^3.36.1", + "@spectrum-icons/ui": "^3.7.2", + "@spectrum-icons/workflow": "^4.3.2", + "@swc/helpers": "^0.5.0", + "client-only": "^0.0.1", + "clsx": "^2.0.0", + "react-aria": "3.52.1", + "react-aria-components": "1.21.1", + "react-stately": "3.50.0", + "react-transition-group": "^4.4.5", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@adobe/react-spectrum-ui": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@adobe/react-spectrum-ui/-/react-spectrum-ui-1.2.1.tgz", + "integrity": "sha512-wcrbEE2O/9WnEn6avBnaVRRx88S5PLFsPLr4wffzlbMfXeQsy+RMQwaJd3cbzrn18/j04Isit7f7Emfn0dhrJA==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@adobe/react-spectrum-workflow": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@adobe/react-spectrum-workflow/-/react-spectrum-workflow-2.3.5.tgz", + "integrity": "sha512-b53VIPwPWKb/T5gzE3qs+QlGP5gVrw/LnWV3xMksDU+CRl3rzOKUwxIGiZO8ICyYh1WiyqY4myGlPU/nAynBUg==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@astrojs/astro2tsx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/astro2tsx/-/astro2tsx-0.1.0.tgz", + "integrity": "sha512-tgprkax8mcF+BiHJQBdoQ+REqtvvnLlYzV0yCeLMdcv3pJIutdlinWNHUzN1jMOT5VRlYTtMmDdaoPrtd3cBAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/core": "1.11.3", + "@napi-rs/wasm-runtime": "1.2.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/check": { + "version": "0.9.10", + "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.10.tgz", + "integrity": "sha512-zgx/UQMozdjOa3bOxjgeCFdtpE3c9rRX6xHwa+2QXvy8z8Akifu2AtubHyv/zzC2znO8dl8fFWL4K+Ba9kS8HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/language-server": "^2.16.7", + "chokidar": "^4.0.3", + "kleur": "^4.1.5", + "yargs": "^18.0.0" + }, + "bin": { + "astro-check": "bin/astro-check.js" + }, + "peerDependencies": { + "typescript": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/@astrojs/check/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@astrojs/check/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@astrojs/compiler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-4.0.0.tgz", + "integrity": "sha512-eouss7G8ygdZqHuke033VMcVw5HTZUu+PXd/h06DGDUg/jt5btPYPqh66ENWw/mU78rBrf/oeC4oqoBwMtDMNA==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.0.tgz", + "integrity": "sha512-Ry2R3VPeIN4uPCSA4xQc+e+vsJXkalKpEbDc07hV+a/o5Bs2N/s/uDcPJH/05L19DKh9tAy7e6JM3YZ6Cxfezw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "js-yaml": "^4.1.1", + "picomatch": "^4.0.4", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "unified": "^11.0.5" + } + }, + "node_modules/@astrojs/language-server": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.17.0.tgz", + "integrity": "sha512-ZvT7UEo7/jBdfjXD3nNYssziEezNKM8G6FUYRnGUidAs7FmowqsQhQ0Xwl5Q4tjqlOjhnpxQuoEb4jwESL+nKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/astro2tsx": "^0.1.0", + "@astrojs/yaml2ts": "^0.2.4", + "@volar/kit": "~2.4.28", + "@volar/language-core": "~2.4.28", + "@volar/language-server": "~2.4.28", + "@volar/language-service": "~2.4.28", + "muggle-string": "^0.4.1", + "tinyglobby": "^0.2.16", + "volar-service-css": "0.0.71", + "volar-service-emmet": "0.0.71", + "volar-service-html": "0.0.71", + "volar-service-prettier": "0.0.71", + "volar-service-typescript": "0.0.71", + "volar-service-typescript-twoslash-queries": "0.0.71", + "volar-service-yaml": "0.0.71", + "vscode-html-languageservice": "^5.6.2", + "vscode-uri": "^3.1.0" + }, + "bin": { + "astro-ls": "bin/nodeServer.js" + }, + "peerDependencies": { + "prettier": "^3.0.0", + "prettier-plugin-astro": ">=0.11.0" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + } + } + }, + "node_modules/@astrojs/markdown-remark": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.2.0.tgz", + "integrity": "sha512-+YxmVQu1Bd+MFfSzjq1rOJvD9+nIOJzz5YIIhdIH01RrxRkKbyKoEgyIqP3yv51MhzMDgd79QaPv+kCVPT8vHw==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.10.0", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.1.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/prism": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz", + "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/react": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-6.0.6.tgz", + "integrity": "sha512-TQ9G2m2tIx9c105GmvjRAcTk+kV0QER5MsEPKUbK1Jm8SBYKzIzR89xh4L2vXAxI2zMfTMmsR7vln1TOLZpckw==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.11.0", + "@vitejs/plugin-react": "^5.2.0", + "devalue": "^5.8.1", + "ultrahtml": "^1.6.0", + "vite": "^8.0.13" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0", + "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0", + "react": "^17.0.2 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@astrojs/react/node_modules/@astrojs/internal-helpers": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.11.0.tgz", + "integrity": "sha512-3rzxJ+xbo0+8YyqOzLziIN32wmsHdCjEVz2sGOpRxJ+Ben/KiLph4ItxBy1abEL+E8fkRzqjg0rfXmaHJGw9JA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "js-yaml": "^4.3.0", + "picomatch": "^4.0.4", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "unified": "^11.0.5" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@astrojs/react/node_modules/vite": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.0.tgz", + "integrity": "sha512-lhZBVvEHefgE+HQZC9O7EBJgCU/nVzFNl7vkS4RE0APtWLP02/8QVIkQtzBxPquh7lq5/78NHipTj7ODQ6XuyQ==", + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.28", + "rolldown": "~1.2.6", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.2.tgz", + "integrity": "sha512-j8DNruA8ors99Al39RYZPJK4DC1bKkoNm93mAMuBhY9TCNC4R8n1q7ovFnJ5qhGh5Lsh7pa1gpQVpYpsJPeTHQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.4.0", + "dset": "^3.1.4", + "is-docker": "^4.0.0", + "is-wsl": "^3.1.1", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/yaml2ts": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.4.tgz", + "integrity": "sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==", + "dev": true, + "license": "MIT", + "dependencies": { + "yaml": "^2.8.3" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@clack/core": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.1.tgz", + "integrity": "sha512-FILJa1gGKEFTGZAJE9RpVhrjKz3c3h4ar60dSv6cGuDqufQ84YEIS3GAGvZiN+H6yaLbbvTFNejjCC4tXpZEuw==", + "license": "MIT", + "dependencies": { + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@clack/prompts": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.5.1.tgz", + "integrity": "sha512-zccHj2z2oCCO4yrDiRSlFOxWerGqRiysP7a5jPK6uoI9URKAquwY42Dd/iUP8JWHxEzdRe4TlbvZCo8z1/mhrw==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.4.1", + "fast-string-width": "^3.0.2", + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-parser": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.1.tgz", + "integrity": "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/stream-reader": "^2.2.0", + "@emmetio/stream-reader-utils": "^0.1.0" + } + }, + "node_modules/@emmetio/html-matcher": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz", + "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@emmetio/scanner": "^1.0.0" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emmetio/stream-reader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz", + "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emmetio/stream-reader-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz", + "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emnapi/core": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz", + "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@emnapi/wasi-threads": "1.2.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", + "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@heroui/react": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@heroui/react/-/react-3.2.6.tgz", + "integrity": "sha512-KBhUUUdX4571SSjwpuBPEFZTYAw/tmGezTIsTnjIOlXDZkjWACfhFe6ibtReO+xTkUcfxCV1r3cF00/3OPlhhw==", + "license": "MIT", + "dependencies": { + "@heroui/styles": "3.2.6", + "@radix-ui/react-avatar": "1.2.6", + "@react-stately/utils": "3.12.1", + "@react-types/color": "3.2.0", + "@react-types/shared": "3.36.1", + "input-otp": "1.5.0", + "tailwind-variants": "3.3.1" + }, + "peerDependencies": { + "@internationalized/date": "^3.12.4", + "@react-aria/ssr": "^3.10.1", + "@react-aria/utils": "^3.34.1", + "react": ">=19.0.0", + "react-aria": "^3.52.1", + "react-aria-components": "^1.21.1", + "react-dom": ">=19.0.0", + "tailwindcss": ">=4.0.0" + } + }, + "node_modules/@heroui/styles": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@heroui/styles/-/styles-3.2.6.tgz", + "integrity": "sha512-feKZUphVe5+QCXnUe8kpqT5T+pPeMI3LaQcSztx08PGVTkhz0dU0C6crKvA1G4HHIPFXXon68VeL8lPjvGHsWg==", + "license": "MIT", + "dependencies": { + "tailwind-variants": "3.3.1", + "tw-animate-css": "1.4.0" + }, + "peerDependencies": { + "tailwindcss": ">=4.0.0" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@internationalized/date": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.4.tgz", + "integrity": "sha512-M1dEn4c1U1HsSlaVR8upZtSqvXrTkHDfv18H01uCSJyjVLDxnBR38v/fMxecmlwXKR4i9HeZcmgQAPE6A+aGJQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.8.tgz", + "integrity": "sha512-8UmMFia46DUt+k97zKd9fKWXcWHR+k8ae3eYzILETuT2KbIvLyOfac7zesw+sJdRAAZ7Q9pM1Mk22aXp2LD0Ig==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.10.tgz", + "integrity": "sha512-PDx6//vHSpRnHfxqMqto11zQvhsaU74O3mKv2F/0eicGZcl9NLjQmGlbHz/LsJh5tLKp4A4L7ZVTzN1/MmMTvA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz", + "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@oxc-project/types": { + "version": "0.150.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.150.0.tgz", + "integrity": "sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@phosphor-icons/react": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@phosphor-icons/react/-/react-2.1.10.tgz", + "integrity": "sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">= 16.8", + "react-dom": ">= 16.8" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.7.tgz", + "integrity": "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.6.tgz", + "integrity": "sha512-4ULOTJ/mqy2hT9GlWa/MFHxHSvH3nJzHnZM1waNsc5Bonv7i70aNenghXmD97S6OJ81ekXONGGt4nT1r0PfEdA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-is-hydrated": "0.1.3", + "@radix-ui/react-use-layout-effect": "1.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.5.tgz", + "integrity": "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.2.tgz", + "integrity": "sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.10.tgz", + "integrity": "sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.3.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.3.tgz", + "integrity": "sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.5" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.4.tgz", + "integrity": "sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.3.tgz", + "integrity": "sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.4.tgz", + "integrity": "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@react-aria/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@react-aria/color/-/color-3.2.1.tgz", + "integrity": "sha512-v/pZh1yBNeayQ5Kio0xRIX0gBf6uu+KjCRW4QSydTyRpmhvk6sMzHT9i9/vIMdaDHaYHBXlXF+Tp/mvS9CG4Zw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-aria": "^3.48.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.10.1.tgz", + "integrity": "sha512-jn038/ZYmu6DpfXJ6r2U9zFFppjbc9wnApPJSCxao2RZVEqep4YyoniHSy8qv6V21/xyS4IV7W9a+X2jOjSuag==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-aria": "^3.48.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.34.1", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.34.1.tgz", + "integrity": "sha512-H6+rGZL+0f58bBNaUMfctEnT+NogqwAk+nHiB8sR3K+YlQ37GTuCijy2U/pPvQtFMS5mURrjZeBH5JNNXsx14A==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-aria": "^3.48.0", + "react-stately": "^3.46.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-spectrum/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@react-spectrum/color/-/color-3.2.1.tgz", + "integrity": "sha512-FbB+GaVufsN+obNJmUAe8XGZTeJjEWvEf/k/7nxDxoDCBdg/o6eEPONAZyID5Dj1f8BZKNym8VURxDZx7IIyuQ==", + "license": "Apache-2.0", + "dependencies": { + "@adobe/react-spectrum": "^3.47.0", + "@swc/helpers": "^0.5.0", + "react-stately": "^3.46.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-spectrum/provider": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@react-spectrum/provider/-/provider-3.11.1.tgz", + "integrity": "sha512-TsoNdVdmlQ7L+75ILq5Yb3+wp/I1AtIeat0o+Y+ZBxP+TtWpwT1ZtCB5l3cplFVzHzOpZlzO0VaDrDP9ElGYDw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@adobe/react-spectrum": "^3.47.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/color": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@react-stately/color/-/color-3.10.1.tgz", + "integrity": "sha512-v4YlLa/oRQpPa/M9Yq1e0Bl8Z7xzGZdNDAIbfIMZuiJtacaOKriPW+AOgjjT/Ab0fNX2YDbwIYvkiMOJBnTi5A==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-stately": "^3.46.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.12.1.tgz", + "integrity": "sha512-NqKfzrknpfwiewx7R2vk1P+CneClInPDsIhw15+jOcUYSEfej0nta4cJywuKQJ2gsPwqX/ojDNixedCve9FWGw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-stately": "^3.46.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-types/color/-/color-3.2.0.tgz", + "integrity": "sha512-beV3vz80nzZ1EuYUM7296Kyi3AHcMrbQw0qub/9yzHWVTKKc5sy/e4dCMKcWL/ArkeAyc7jDOiui190RQ4l0Fw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/color": "^3.2.0", + "@react-spectrum/color": "^3.2.0", + "@react-stately/color": "^3.10.0" + }, + "peerDependencies": { + "@react-spectrum/provider": "^3.0.0", + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", + "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.9.tgz", + "integrity": "sha512-tNISae1QEf/vkb3xkRcjV5SEdzPE97We5IVaa2Z8jSszQPZ8U60B/YCYpw4QI7VidYsBtKavczXf+DyDs9WGxw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.9.tgz", + "integrity": "sha512-YC8YsI30o606GTZi0VyzYlsDKFP8W61i/QzayHDkLbNEz/IShqAmTa+hsJRj13xTHA0H+6fk4b2UmGn+Q/cMlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.9.tgz", + "integrity": "sha512-IwhlH3qK5urrY8hZiEgGkHKEFN901p/p2bjxCxJlr4GyNnF7wYpUvK+Y43uaRYuC4hpfjzbR3SJC3arX1jGvmw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.9.tgz", + "integrity": "sha512-XxpJfVzFh+jilRxIXUqcfYAYcunIc/XEzIizsOL1fcJee5Sf7H3mH8WlLmfHfluz5amqR88QQo9izKtmMlavAw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.9.tgz", + "integrity": "sha512-kSfvhmgeWyfkbT3p/1s5vSgboogoah2zkm9fX2zjg2hHxSV7T4KhMWRUUaRk4OXNqoD3QAUeRqLcs1aZOK4U1g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.9.tgz", + "integrity": "sha512-1RVzG17pxqbTfYLC352JlLt6kKLG+6Hr30n8DlIJqsnV5luUDd2Qdx9Ayw1Cabfyb1K9k0jXEZ7evxkRoT+uiw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.9.tgz", + "integrity": "sha512-BXqPvZ2drqVD+/Z8UpKwcs4Mp7grM+eGFku4CAEKrEtcbAsUpzREphK1sogCRZGreVPiMkiiBtw0n3TPteuqvw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.9.tgz", + "integrity": "sha512-11vWvo8YDwLzukt27J3aYDWU+gg2P7J+ZOmiJ0hkF5BXZDW7pVya7r40MXDy6ya0i9KamoENSVKIugvJNgFXIA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.9.tgz", + "integrity": "sha512-a1tijMkdwsIARtc0F39ApURROkf3NwqinI6TOiSSWCTR7dT96dffNvMUtDHnq64wKNTIZOIlzKrFvvFUznJiyw==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.9.tgz", + "integrity": "sha512-x6SQNdAvv4c3hWqTMaWuawzMX9myaCs/yEmlGsxJzkdClnHW7FbrjQuSiRDhuSYzEYoEMhsaJy9qHG/XNemJPQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.9.tgz", + "integrity": "sha512-9s0AZ8BFK5/n7B/TBoa2yJE3gI3KURrbXcPBlsAsvjU4VeJKgE90y1YtNxyEUIcHPQkg6/yfF3qihUrcM/Kf0Q==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.9.tgz", + "integrity": "sha512-P7VWAmV+WdJluH7ovnRGoiv2i8To7GAZ+kGzfGup635cyL7SyYl3lSUaA3Gp5THf0n/Co5EyEqb2zbqq+nMOHQ==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.9.tgz", + "integrity": "sha512-1qixtsE4BK8h+yS3BfmZ09UhA7O/N4IACva6YBr7EBvCJraByTuRcgOTaiA62Tm0vey3UcKXLOaoGHtYmNGEVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.9.tgz", + "integrity": "sha512-ok8IQjcEPs1AKZfuEUznVBrJw+gK4soq+bx8b1X2XoMqVClarc1q5JDmVtWXY1xfr6ZuHTAsPXHTgTrqKTZeww==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.9.tgz", + "integrity": "sha512-Ip2mXoU0hM0boq3Rf+ekuT653OROSo6aSYcPT1VHE4q52KvyxgFkQgrgb/IEsxOuvQ2fZZbs8khJAyCEPM24/g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.2.0.tgz", + "integrity": "sha512-Hc87Ab1Ld/vEbZRCbwx344I5v+4RU8CVToUTRkqXL1+TjbuOp9U5Xa0M23V4GEWHxVn+yO5otb+HkQVm3ptWQQ==", + "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.2.0", + "@shikijs/types": "4.2.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.2.0.tgz", + "integrity": "sha512-fjETeq1k5ffyXqRgS6+3hpvqseLalp1kjNfRbXpUgWR8FpZ1CmQfiNHovc5lncYjt/Vg5JK/WJEmLahjwMa0og==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.2.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.2.0.tgz", + "integrity": "sha512-hTorK1dffPkpbMUk6Z+828PgRo7d07HbnizoP0hNPFjhxMHctj0Px/qoHeGMYafc6ju+u9iMldN4JbVzNQM++g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.2.0", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.2.0.tgz", + "integrity": "sha512-bwrVRlJ0wUhZxAbVdvBbv2TTC9yLsh4C/IO5Ofz0T8MQntgDvyVnkbjw9vi50r1kx7RCIJdnJnjZAwmAsXFLZQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.2.0.tgz", + "integrity": "sha512-NOq+DtUkVBJtZMVXL5A0vI0Xk8nvDYaXetFHSJFlOqjDZIVhIPRYFdGkSoElDqNuegikcc3A76SNUa8dTqtAYA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.2.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.2.0.tgz", + "integrity": "sha512-RX8IHYeLv8Cu2W6ruc3RxUqWn0IYCqSrMBzi/uRGAmfyDNOnNO5BF/Px7o97n4XTpmFTo5GbRaazuOWj+2ak2w==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.2.0.tgz", + "integrity": "sha512-VT/MKtlpOhEPZloSH3Pb9WCZEBDoQVMa9jedp5UAwmJOar1DVc9DRODAxmYPW9M93IK4ryuqRejFfmlvlVDemw==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@spectrum-icons/ui": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@spectrum-icons/ui/-/ui-3.7.2.tgz", + "integrity": "sha512-7IuSHO+Ck8gJUIGIXqDcDIU4R8RHRUZhlfz8AwN1rSdCEvdgp6DWYN0LDTMrWh7TN/H5hrJ7oDO/gUpR3TnBjw==", + "license": "Apache-2.0", + "dependencies": { + "@adobe/react-spectrum-ui": "1.2.1", + "@babel/runtime": "^7.24.4", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "@adobe/react-spectrum": "^3.47.0", + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@spectrum-icons/workflow": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@spectrum-icons/workflow/-/workflow-4.3.2.tgz", + "integrity": "sha512-UkVg8Kp9rInjfqtG27in9p7RWfN9JFSvZr7ZOpN2n9jkrQ1y88hZpK8dKce8lgVb7jALXtsi2p0rjyaWzO0QsA==", + "license": "Apache-2.0", + "dependencies": { + "@adobe/react-spectrum-workflow": "2.3.5", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "@adobe/react-spectrum": "^3.47.0", + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", + "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "24.13.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.6.tgz", + "integrity": "sha512-SGrw/h3KPFshy3OE6ZL53LMBG5vGQQ8/gIpiqz/kRZhPJ7HgwCEs8LBuNtWLa8dvGZVpSF7+Bf+c11HUrCb/yg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", + "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@volar/kit": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.28.tgz", + "integrity": "sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-service": "2.4.28", + "@volar/typescript": "2.4.28", + "typesafe-path": "^0.2.2", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/language-server": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.28.tgz", + "integrity": "sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@volar/language-service": "2.4.28", + "@volar/typescript": "2.4.28", + "path-browserify": "^1.0.1", + "request-light": "^0.7.0", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/language-service": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.28.tgz", + "integrity": "sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vscode/emmet-helper": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz", + "integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "emmet": "^2.4.3", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vscode/emmet-helper/node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vscode/l10n": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz", + "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-i18n": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ajv-i18n/-/ajv-i18n-4.2.0.tgz", + "integrity": "sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^8.0.0-beta.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astro": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/astro/-/astro-6.4.5.tgz", + "integrity": "sha512-0R7WLD1+WD/mTPcZxyKtcF0CztQi9ahFRtGM7oChJhxjNbr4lSBenxi+mk91k5bPTaUEoZ6edg1fDo2qP8bCwg==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^4.0.0", + "@astrojs/internal-helpers": "0.10.0", + "@astrojs/markdown-remark": "7.2.0", + "@astrojs/telemetry": "3.3.2", + "@capsizecss/unpack": "^4.0.0", + "@clack/prompts": "^1.1.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "ci-info": "^4.4.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^2.0.0", + "cookie": "^1.1.1", + "devalue": "^5.8.1", + "diff": "^8.0.3", + "dset": "^3.1.4", + "es-module-lexer": "^2.0.0", + "esbuild": "^0.27.3", + "flattie": "^1.1.1", + "fontace": "~0.4.1", + "get-tsconfig": "5.0.0-beta.4", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "js-yaml": "^4.1.1", + "jsonc-parser": "^3.3.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.2", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "obug": "^2.1.1", + "p-limit": "^7.3.0", + "p-queue": "^9.1.0", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.4", + "rehype": "^13.0.2", + "semver": "^7.7.4", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "svgo": "^4.0.1", + "tinyclip": "^0.1.12", + "tinyexec": "^1.0.4", + "tinyglobby": "^0.2.15", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.4", + "unist-util-visit": "^5.1.0", + "unstorage": "^1.17.5", + "vfile": "^6.0.3", + "vite": "^7.3.2", + "vitefu": "^1.1.2", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^22.0.0", + "zod": "^4.3.6" + }, + "bin": { + "astro": "bin/astro.mjs" + }, + "engines": { + "node": ">=22.12.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.25", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.25.tgz", + "integrity": "sha512-gMmEShwwq7FJqMwvfRwvCl00v4kN+KOfJqXn+f4nrufak5gNHJOksd/60Dvjuz7sI8Y5WiSFBa8FEYr+zoyqCw==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz", + "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.23", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.427", + "node-releases": "^2.0.55", + "update-browserslist-db": "^1.3.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", + "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.433", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.433.tgz", + "integrity": "sha512-5lCAbyZBjtmUt/RAGHRqrL2q0oEFRThDAsZHHDn9XHa89Qw7gMYOeSicBTy+AHfvo0r6vwsZvqNJTQIQy1BLzA==", + "license": "ISC" + }, + "node_modules/emmet": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz", + "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "./packages/scanner", + "./packages/abbreviation", + "./packages/css-abbreviation", + "./" + ], + "dependencies": { + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz", + "integrity": "sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz", + "integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "engines": { + "node": ">=20.20.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/input-otp": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.5.0.tgz", + "integrity": "sha512-3AcfdW1sNG0FmSA5hHMBXG7jNW5CdcdKs8ln8JOmn6S2SRkoXoJx+2UwC+ZvjflfnOdHJx0SfQ9/YjlxVYLtGQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-docker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz", + "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.3.tgz", + "integrity": "sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.56", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.56.tgz", + "integrity": "sha512-x0InOIyzgdk+eyaWaRJFH5snEtiImgBgblZ2CyPrLmqqcuMQkEvcDPHbzqbD8eDsSeJbVOjn+crzyzHaM4D+/A==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obug": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.2.tgz", + "integrity": "sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.0.tgz", + "integrity": "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.2.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.0.tgz", + "integrity": "sha512-7NED7xhQ74Ngp4JP/2e0VZHp7vSWfJfqeiR92jPgxsz6m0Se4P03YoTKa9dDXyZ3r6P616gUXttrB6nnHYKang==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prettier": { + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.8.tgz", + "integrity": "sha512-WRFq3Wn3WId7LLROfMLdH7xaFr2jR62wU8nLO6rQUOLOxNZUviyJQs1M0iIhLexSFy+L+w0ch66wtoO2jRjG0A==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-aria": { + "version": "3.52.1", + "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.52.1.tgz", + "integrity": "sha512-fdZZruC9/x/joCg0mhKGs5aHpwrXLCSZ4GOJmhhYyiE0ffyEsk9MLFt9LCOCF9tn8ErTD+UDQP4oDUSlZkmpCg==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.4", + "@internationalized/number": "^3.6.8", + "@internationalized/string": "^3.2.10", + "@react-types/shared": "^3.36.1", + "@swc/helpers": "^0.5.0", + "aria-hidden": "^1.2.3", + "clsx": "^2.0.0", + "react-stately": "3.50.0", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-aria-components": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/react-aria-components/-/react-aria-components-1.21.1.tgz", + "integrity": "sha512-J88WflYY0z+EhLX0ce+GjFlQ3ag3ubIgfUTjpKSrBQBu92Xtl4Ub9o118HItUddtbk1Ido0jzyPy94/klZy1hg==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.4", + "@internationalized/string": "^3.2.10", + "@react-types/shared": "^3.36.1", + "@swc/helpers": "^0.5.0", + "client-only": "^0.0.1", + "react-aria": "3.52.1", + "react-stately": "3.50.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-stately": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.50.0.tgz", + "integrity": "sha512-TnckvpDQGU0672wEaLZqdzvhuSeXWjgW6vijMWxiKOxc8CosQUfPGISdcZyfHqjX3XMjEtRxj4w9HumvX4h4mw==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.4", + "@internationalized/number": "^3.6.8", + "@internationalized/string": "^3.2.10", + "@react-types/shared": "^3.36.1", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/request-light": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz", + "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rolldown": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.9.tgz", + "integrity": "sha512-hx/Pv0N1haXRb11qkfnK5MXB/iqr7i0yjWQqmO9uHqZpBgQSqzc8UsSnEpalsh+j1I8qQ2CkXAkJC8Br3dKSlg==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.150.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.9", + "@rolldown/binding-android-arm64": "1.2.9", + "@rolldown/binding-darwin-arm64": "1.2.9", + "@rolldown/binding-darwin-x64": "1.2.9", + "@rolldown/binding-freebsd-x64": "1.2.9", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.9", + "@rolldown/binding-linux-arm64-gnu": "1.2.9", + "@rolldown/binding-linux-arm64-musl": "1.2.9", + "@rolldown/binding-linux-ppc64-gnu": "1.2.9", + "@rolldown/binding-linux-s390x-gnu": "1.2.9", + "@rolldown/binding-linux-x64-gnu": "1.2.9", + "@rolldown/binding-linux-x64-musl": "1.2.9", + "@rolldown/binding-openharmony-arm64": "1.2.9", + "@rolldown/binding-win32-arm64-msvc": "1.2.9", + "@rolldown/binding-win32-x64-msvc": "1.2.9" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shiki": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.2.0.tgz", + "integrity": "sha512-hjNax6o/ylDy9lefQEaSDtzaT3iVNtZ3WmpQnbuQNoG4xvnSKf2kSKbihZVO4JRG1TTMejs7CmNRYlWgAL66pQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.2.0", + "@shikijs/engine-javascript": "4.2.0", + "@shikijs/engine-oniguruma": "4.2.0", + "@shikijs/langs": "4.2.0", + "@shikijs/themes": "4.2.0", + "@shikijs/types": "4.2.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz", + "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tailwind-variants": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.3.1.tgz", + "integrity": "sha512-4pAvwUtM4HKBiRZftncAbpn6V9Hhwoa5Fl7O2u5zbp7Z5Cvu+/o/6+176WY3WCEES209543quG8zFIcXCsc5Jw==", + "license": "MIT", + "engines": { + "node": ">=16.9.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwind-merge": ">=3.0.0", + "tailwindcss": "*" + }, + "peerDependenciesMeta": { + "tailwind-merge": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyclip": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.14.tgz", + "integrity": "sha512-F1oWdz8tjT17qe1d5JgDK6z03WGOhYYAN0lK3/D/fzNiy93xswLLEw7pk+3g05onhAy6Bsc6PLNUGhdgVjemMQ==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, + "node_modules/tinyexec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, + "node_modules/typesafe-path": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz", + "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-auto-import-cache": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.6.tgz", + "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.8" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.7.0.tgz", + "integrity": "sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz", + "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/volar-service-css": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.71.tgz", + "integrity": "sha512-wRRFt9BpjMKCazcgOh67MSjUjiWUCAh99DyYSDIOTuxaRjEtDC7PpB0k1Y1wbJIW/pVtMUSVbpPo3UGSm0Byxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-css-languageservice": "^6.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-emmet": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.71.tgz", + "integrity": "sha512-zqjzt6bN95e3CUstBm0PBFAJnrfz0ZAARka87fart46/gNCLLuP3Vujy8V/J8HEziTFLnfkgIASLFYPUhonJcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/css-parser": "^0.4.1", + "@emmetio/html-matcher": "^1.3.0", + "@vscode/emmet-helper": "^2.9.3", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-html": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.71.tgz", + "integrity": "sha512-e8tHPhgQ7ooLfudAEIku+kgd9pWkq3SSz8RbnQDI1+Eb8wbenkLGHqoirLqz5ORLV6wIMr2Iv08RWBG5eOcgpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-html-languageservice": "^5.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-prettier": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.71.tgz", + "integrity": "sha512-Rz7JVH3qD108UCdmIEiZvOBNljMt2nLFdbN8AXcDfn7xD9F5I2aCIsDVqBbXw21PsnxG0b7MfwtNF+zPS/NKUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0", + "prettier": "^2.2 || ^3.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + }, + "prettier": { + "optional": true + } + } + }, + "node_modules/volar-service-typescript": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.71.tgz", + "integrity": "sha512-yTtM/BVT6hoyEYnDtaCyAtNhdNeS/mhTTABlBOdw3NNiRBUin3IznFJpgfjer4c6RYopiPjjQjc9VFhxVl1mLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-browserify": "^1.0.1", + "semver": "^7.6.2", + "typescript-auto-import-cache": "^0.3.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-nls": "^5.2.0", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-typescript-twoslash-queries": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.71.tgz", + "integrity": "sha512-9K2k72s4n7rV9s4bX0MyjbX9iBribvKZbBJKuEmTCZfeWJXs6Yh7bGpY4eoc7UufAjvpheBqwyZCOIPBvxCv0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-yaml": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.71.tgz", + "integrity": "sha512-qYGWGuVpUTnZGu5P/CR4KLK4aIR8RrcVnmfZ2eRcj9q/I8VZCoC5yy9FtEvfNvnDp4MU17yhdJcvpQPIqhJS2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-uri": "^3.0.8", + "yaml-language-server": "~1.23.0" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/vscode-css-languageservice": { + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.10.tgz", + "integrity": "sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-css-languageservice/node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-html-languageservice": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.6.2.tgz", + "integrity": "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.1.0" + } + }, + "node_modules/vscode-json-languageservice": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz", + "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.2" + }, + "engines": { + "npm": ">=7.0.0" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.2.tgz", + "integrity": "sha512-SbQSV9yRemARxeXw6LU5sS6Zq0e9/DgCCX5yelH263ZQWukbTk8EF8fjTrr1dziasf4GwlJbvTwFnTrnQFWZXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.3.tgz", + "integrity": "sha512-DF49+WeV5py4zO5hhobp60jjsDSK0lAqA0OuKBLBvp423HPWQcCbhZz3JgyfIewsEz2f8U+X75xNIFHdiXZm2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "9.0.2", + "vscode-languageserver-types": "3.18.3" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.14.tgz", + "integrity": "sha512-EQyqJMi552E4ZTf46izQ4Fj6XquqxCySR3J5ZSD1SisMf6RfpeOWHxGBE8Gr6V0/3GHIGdAzDn8F8+1nTGCnoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.3.tgz", + "integrity": "sha512-XIlzJ7Qp/jzSI1ds7/FwPAWrPeTZA7pAtlW4hdJ1J6xXWJL6dR9QYnDhJOdLzdKhUQ5Mm6mvUMw+3DcOQQasPw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-languageserver/node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver/node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver/node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.2.0.tgz", + "integrity": "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", + "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "devOptional": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yaml-language-server": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.23.0.tgz", + "integrity": "sha512-3qVyCOexLCWw06PQa5kRPwvMWMZ/eZeCRWUvgD6a0OkqL/4iCnxy2WumbWifa937Uo5xhyWJ0uxlU39ljhNh7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vscode/l10n": "^0.0.18", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "ajv-i18n": "^4.2.0", + "prettier": "^3.8.1", + "request-light": "^0.5.7", + "vscode-json-languageservice": "4.1.8", + "vscode-languageserver": "^9.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.16.0", + "vscode-uri": "^3.0.2", + "yaml": "2.8.3" + }, + "bin": { + "yaml-language-server": "bin/yaml-language-server" + } + }, + "node_modules/yaml-language-server/node_modules/request-light": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz", + "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==", + "dev": true, + "license": "MIT" + }, + "node_modules/yaml-language-server/node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^8.2.1", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/services/recordly-share/worker/web/package.json b/services/recordly-share/worker/web/package.json new file mode 100644 index 000000000..2b4aac940 --- /dev/null +++ b/services/recordly-share/worker/web/package.json @@ -0,0 +1,31 @@ +{ + "name": "recordly-share-web", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "check": "astro check", + "test": "node --experimental-strip-types --test src/scripts/shareModel.node-test.ts" + }, + "dependencies": { + "@astrojs/react": "^6.0.6", + "@heroui/react": "^3.2.6", + "@heroui/styles": "^3.2.6", + "@phosphor-icons/react": "^2.1.10", + "@tailwindcss/vite": "^4.3.3", + "astro": "^6.4.5", + "react": "^19.3.0", + "react-dom": "^19.3.0", + "tailwindcss": "^4.3.3" + }, + "devDependencies": { + "@astrojs/check": "^0.9.10", + "@types/node": "^24.13.6", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "typescript": "^6.0.3" + } +} diff --git a/services/recordly-share/worker/web/public/icon-64.png b/services/recordly-share/worker/web/public/icon-64.png new file mode 100644 index 000000000..fc3c7a673 Binary files /dev/null and b/services/recordly-share/worker/web/public/icon-64.png differ diff --git a/services/recordly-share/worker/web/src/components/LibraryPage.tsx b/services/recordly-share/worker/web/src/components/LibraryPage.tsx new file mode 100644 index 000000000..ca0bc7157 --- /dev/null +++ b/services/recordly-share/worker/web/src/components/LibraryPage.tsx @@ -0,0 +1,216 @@ +import { Button, Card, Chip, Input, Label, Link, Skeleton, TextField, toast } from '@heroui/react'; +import { + ArrowClockwiseIcon, + ArrowSquareOutIcon, + LockKeyIcon, + TrashIcon, +} from '@phosphor-icons/react'; +import { useEffect, useState } from 'react'; +import { + fetchVideos, + renewVideo, + deleteVideo, + formatDate, + formatDuration, + daysUntilExpiry, + type LibraryVideo, +} from '../scripts/library'; +import { CenteredCard, CopyButton, Header, Notice, Notifications } from './ShareUI'; + +export function LibraryLogin() { + const [error, setError] = useState(false); + useEffect(() => setError(new URLSearchParams(location.search).has('error')), []); + return ( + + +

Your library

+

Enter your dashboard password to manage shared recordings.

+
+ + + + + {error && Incorrect password. Please try again.} + +
+
+ ); +} + +export default function LibraryPage() { + const [videos, setVideos] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(''); + const [pending, setPending] = useState(null); + const [confirmDelete, setConfirmDelete] = useState(null); + async function load() { + setLoading(true); + setError(''); + try { + setVideos(await fetchVideos()); + } catch { + setError('Could not load your recordings. Please try again.'); + } finally { + setLoading(false); + } + } + useEffect(() => { + void load(); + }, []); + async function renew(code: string) { + setPending(code); + try { + const expires = await renewVideo(code); + if (!expires) throw new Error(); + setVideos((current) => + current.map((video) => + video.share_code === code ? { ...video, expires_at: expires } : video, + ), + ); + toast.success('Share link renewed'); + } catch { + toast.danger('Could not renew this link. Try again.'); + } finally { + setPending(null); + } + } + async function remove(code: string) { + setPending(code); + try { + if (!(await deleteVideo(code))) throw new Error(); + setVideos((current) => current.filter((video) => video.share_code !== code)); + toast.success('Recording deleted'); + setConfirmDelete(null); + } catch { + toast.danger('Could not delete this recording. Try again.'); + } finally { + setPending(null); + } + } + return ( + <> + +
+
+
+
+

Your recordings

+

Manage your shared videos and links.

+
+ +
+ {error && {error}} +
+ {loading + ? [0, 1, 2].map((i) => ) + : videos.map((video) => { + const days = daysUntilExpiry(video.expires_at); + return ( + + { + e.currentTarget.style.visibility = 'hidden'; + }} + /> + + {video.title} + + {formatDuration(video.duration)} · {formatDate(video.created_at)} ·{' '} + {video.view_count} {video.view_count === 1 ? 'view' : 'views'} + + + + + {Number.isNaN(days) + ? 'Expiry unknown' + : days === 0 + ? 'Expires today' + : days === 1 + ? 'Expires tomorrow' + : `Expires in ${days} days`} + + {!!video.is_protected && ( + + + Protected + + )} + + + + + Open + + + + + + {confirmDelete === video.share_code && ( + + + Delete “{video.title}”? This permanently removes the recording and its + share link. + +
+ + +
+
+ )} +
+ ); + })} +
+ {!loading && !error && videos.length === 0 && ( + + No shared recordings yet + Publish a recording from Recordly to see it here. + + )} +
+ + ); +} diff --git a/services/recordly-share/worker/web/src/components/PagedPanel.tsx b/services/recordly-share/worker/web/src/components/PagedPanel.tsx new file mode 100644 index 000000000..22ecfac4e --- /dev/null +++ b/services/recordly-share/worker/web/src/components/PagedPanel.tsx @@ -0,0 +1,89 @@ +import { Button } from '@heroui/react'; +import { CaretLeftIcon, CaretRightIcon } from '@phosphor-icons/react'; +import { useLayoutEffect, useRef, useState, type ReactNode } from 'react'; + +/** Flow long content into viewport-sized pages instead of a scroll container. */ +export default function PagedPanel({ children, label }: { children: ReactNode; label: string }) { + const viewport = useRef(null); + const flow = useRef(null); + const [page, setPage] = useState(0); + const [pages, setPages] = useState(1); + const [stride, setStride] = useState(0); + + useLayoutEffect(() => { + const frame = viewport.current; + const content = flow.current; + if (!frame || !content) return; + const measure = () => { + const width = frame.clientWidth; + if (!width) return; + const step = width + 24; + const count = Math.max(1, Math.ceil((content.scrollWidth + 24 - 1) / step)); + setStride(step); + setPages(count); + setPage((current) => Math.min(current, count - 1)); + }; + const resize = new ResizeObserver(measure); + const mutation = new MutationObserver(measure); + resize.observe(frame); + mutation.observe(content, { childList: true, subtree: true, characterData: true }); + measure(); + return () => { + resize.disconnect(); + mutation.disconnect(); + }; + }, []); + + return ( +
+
{ + if (!stride || !viewport.current) return; + const frame = viewport.current; + const offset = + (event.target as HTMLElement).getBoundingClientRect().left - + frame.getBoundingClientRect().left + + page * stride + + frame.scrollLeft; + setPage(Math.max(0, Math.min(pages - 1, Math.floor((offset + 1) / stride)))); + frame.scrollLeft = 0; + }} + > +
+ {children} +
+
+ +
+ ); +} diff --git a/services/recordly-share/worker/web/src/components/ShareFeedback.tsx b/services/recordly-share/worker/web/src/components/ShareFeedback.tsx new file mode 100644 index 000000000..80cdcd587 --- /dev/null +++ b/services/recordly-share/worker/web/src/components/ShareFeedback.tsx @@ -0,0 +1,376 @@ +import { + Avatar, + Button, + Card, + Chip, + Input, + Label, + Spinner, + Tabs, + TextArea, + TextField, + toast, +} from '@heroui/react'; +import { + ChatCircleIcon, + ClockIcon, + LinkSimpleIcon, + PaperPlaneTiltIcon, +} from '@phosphor-icons/react'; +import { useEffect, useState, type RefObject } from 'react'; +import { + fetchComments, + formatDate, + formatTimestamp, + postComment, + type Comment, + type ShareData, +} from '../scripts/api'; +import { timestampParts } from '../scripts/shareModel'; +import { copyLink, Notice } from './ShareUI'; +import PagedPanel from './PagedPanel'; + +interface Props { + data: ShareData; + time: number; + duration: number; + comments: Comment[]; + setComments: (comments: Comment[]) => void; + seek: (time: number) => void; + composerRef: RefObject; + selectedTab: string; + setSelectedTab: (tab: string) => void; +} + +export default function ShareFeedback({ + data, + time, + duration, + comments, + setComments, + seek, + composerRef, + selectedTab, + setSelectedTab, +}: Props) { + const [name, setName] = useState(''); + const [text, setText] = useState(''); + const [lockedTime, setLockedTime] = useState(null); + const [posting, setPosting] = useState(false); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(''); + const [page, setPage] = useState(1); + const [total, setTotal] = useState(0); + const [moreLoading, setMoreLoading] = useState(false); + const activeIndex = comments.reduce( + (found, comment, i) => (comment.timestamp <= time + 0.3 ? i : found), + -1, + ); + + useEffect(() => { + try { + setName(localStorage.getItem('recordly-comment-name') || ''); + } catch { + /* Storage can be disabled. */ + } + let cancelled = false; + fetchComments(data.shareCode) + .then((result) => { + if (cancelled) return; + setComments([...result.comments].sort((a, b) => a.timestamp - b.timestamp)); + setTotal(result.total); + setLoading(false); + }) + .catch(() => { + if (!cancelled) { + setError('Comments could not be loaded. Reload the page to try again.'); + setLoading(false); + } + }); + return () => { + cancelled = true; + }; + }, [data.shareCode]); + + async function loadMore() { + setMoreLoading(true); + try { + const result = await fetchComments(data.shareCode, page + 1); + setComments([...comments, ...result.comments].sort((a, b) => a.timestamp - b.timestamp)); + setTotal(result.total); + setPage(page + 1); + } catch { + toast.danger('Could not load more comments. Try again.'); + } finally { + setMoreLoading(false); + } + } + + async function submit() { + if (posting || !name.trim() || !text.trim()) return; + const timestamp = lockedTime ?? time; + setPosting(true); + setError(''); + try { + const ok = await postComment(data.shareCode, timestamp, name.trim(), text.trim()); + if (!ok) throw new Error('Could not post your comment. Please try again.'); + setComments( + [ + ...comments, + { + timestamp, + author_name: name.trim(), + text: text.trim(), + created_at: new Date().toISOString().slice(0, 19), + }, + ].sort((a, b) => a.timestamp - b.timestamp), + ); + setTotal(total + 1); + setText(''); + setLockedTime(null); + try { + localStorage.setItem('recordly-comment-name', name.trim()); + } catch { + /* Posting does not require storage. */ + } + toast.success(`Comment posted at ${formatTimestamp(timestamp)}`); + } catch { + setError('Could not post your comment. Your draft is saved here—please try again.'); + } finally { + setPosting(false); + } + } + + return ( + + setSelectedTab(String(key))} + className="feedback-tabs" + > + + + + Comments + {total > 0 && ( + + {total} + + )} + + + {data.segments.length > 0 && ( + + Transcript + + + )} + {(data.video.summary || data.chapters.length > 0) && ( + + Details + + + )} + + + + + {loading ? ( +
+ +
+ ) : !comments.length ? ( +
+ +

Start the conversation

+

Leave feedback at the exact moment you’re watching.

+
+ ) : ( + comments.map((comment, i) => ( +
+
+ + + {comment.author_name.slice(0, 2).toUpperCase()} + + + {comment.author_name} + +
+

+ {timestampParts(comment.text, duration).map((part, n) => + part.time === undefined ? ( + part.text + ) : ( + + ), + )} +

+ {formatDate(comment.created_at)} +
+ )) + )} + {comments.length < total && ( + + )} +
+
+ {data.segments.length > 0 && ( + + + {data.segments.map((segment, i) => ( +
= segment.start_time && time < segment.end_time} + > +
+ + {segment.speaker && {segment.speaker}} + +
+ +
+ ))} +
+
+ )} + {(data.video.summary || data.chapters.length > 0) && ( + + +
+

Recording

+

{data.video.title}

+
+ {data.video.summary && ( +
+

Summary

+

{data.video.summary}

+
+ )} + {data.chapters.length > 0 && ( +
+

Chapters

+
+ {data.chapters.map((chapter, index) => ( + + ))} +
+
+ )} +
+
+ )} +
+