diff --git a/docs/implementation-notes/card-actions-ui-redesign.md b/docs/implementation-notes/card-actions-ui-redesign.md new file mode 100644 index 00000000..cbcaa2fd --- /dev/null +++ b/docs/implementation-notes/card-actions-ui-redesign.md @@ -0,0 +1,71 @@ +# Card actions UI redesign + +Date: 2026-07-31 + +![Cloud-sized package embed with the focused card detail](./card-actions-ui-redesign.png) + +## Impact matrix + +| Area | Decision | Rationale | +| --- | --- | --- | +| Desktop app | Yes | Local vault boards use the shared board surface. New cards must persist their Markdown body and frontmatter in the initial filesystem write. | +| Web app | Yes | Cloud workspace boards expose the same card workflow and need matching creation/detail behavior and permissions. | +| Shared model/utilities | Yes | `BoardActions.createCard` accepts an optional initial card patch so every adapter can create a complete card without a reload race. Parent/dependency resolution now supports collision-resistant relative-path keys while retaining unique legacy basenames. | +| Shared UI | Yes | The quick-create dialog and expanded card detail have the same information architecture on Desktop and Web and remain props-in/callbacks-out. | +| Web service/API | No | Existing document create/update APIs already persist the required Markdown and frontmatter. No contract, auth, migration, event, or budget change is needed. | +| `packages/board-react` | Yes | Editable embeds consume the shared `BoardSurface`, so quick-create and card detail must stay aligned with the apps. The published 0.1.0 package incorrectly routed every open through its old read-only panel; 0.1.1 restores the editable detail while preserving the explicit read-only path. | +| CLI/MCP | Yes | Command and tool behavior already accepts the relation string; help/schema copy now documents collision-resistant relative-path references and legacy basename compatibility. | +| In-app Help | Yes | Card creation and detail navigation are user-visible workflows. The English and Chinese boards-and-cards article now explains them. | +| Other docs | Yes | The board package README now describes the shared quick-create/detail behavior and lightweight Markdown preview boundary. | +| Release/deployment | Yes | Rebuild Desktop/Web assets and `packages/board-react@0.1.1` dist; Cloud can consume the exact git commit before npm publication. No backend image, migration, or CLI binary is required. | + +## Surface decisions and acceptance criteria + +### Desktop and Web + +- Entry point: **New card** at the bottom of any visible swimlane. +- Empty state: title is focused; description and core properties are optional. +- Existing data: selecting a card opens a wide detail dialog with content on the left and properties on the right. +- Read-only/permissions: existing read-only behavior continues to hide creation and mutation affordances. +- Persistence: title, Markdown description, status, priority, assignee, labels, and due date are written during card creation; subsequent edits use the existing update adapter. +- Sub-cards: the `parent` relationship is included in the initial create write, avoiding the stale-metadata race from the former create-then-update flow. +- Rapid edits: Web card writes read and advance a ref-backed metadata snapshot, so queued field changes compose on the latest content/hash even before React rerenders. +- Relations: new parent/dependency choices persist a normalized relative path; existing basename-only links continue to resolve when unique and are left unresolved rather than misbound when ambiguous. +- Recovery: the create action stays open while saving and preserves the form if the adapter rejects. Failed sub-card drafts are also preserved, while switching cards resets draft/error state and isolates any older in-flight request. +- Keyboard: Command/Ctrl + Enter creates; Escape closes through Headless UI dialog behavior. +- Responsive: the property inspector moves below the main content on narrow windows. + +### Embeddable board package + +- Editable boards receive the shared quick-create and focused card-detail dialogs. +- Read-only boards continue to intercept card opens with the package's built-in read-only detail. +- A host `onCardOpen` callback continues to replace either built-in detail path. +- The package accepts the shared detail's Markdown source but uses a safe + plain-text preview by default, avoiding the KaTeX/Mermaid document-renderer + dependency chain. Desktop and Web inject their full renderer. +- Portaled dialog and nested dropdown elements carry the package scope class so styles do not leak into the host. +- A real 1180 × 790 Cloud-style host verifies bounded board layout, per-column + vertical scrolling, editable card details, quick creation, sub-card creation, + host open interception, persistence, and explicit read-only behavior. + +## Migration and release notes + +- No mandatory data migration is required. Legacy basename relations remain + compatible when unique; newly saved relations use collision-resistant paths. +- No HTTP API or server rollout is required. +- Rebuild the Desktop and Web frontends and the checked-in `packages/board-react/dist` output from the same commit. +- Publish `jtype-board-react@0.1.1` when the npm release is authorized; the + Cloud consumer may pin the reviewed git commit in the meantime. +- Feature smoke test: create a card with description and properties, reload, reopen it, and verify all values persist. + +## Verification + +- `npm run build` — Desktop frontend build passed. +- `(cd services/jtype-web/frontend && npm run build)` — Web frontend build passed. +- `npm run test:unit` — 65 unit tests passed, including queued Web saves composing on the latest content/hash. +- `(cd packages/board-react && npm run build && npm test)` — package bundle rebuilt; 21 package unit tests and 3 real-embed E2E tests passed. +- `npx playwright test --config playwright.board.config.ts --workers=1` — 16 Chromium E2E tests passed. +- `cargo check --manifest-path services/jtype-cli/Cargo.toml` — CLI check passed. +- `cargo check --manifest-path services/jtype-web/Cargo.toml` — Web service check passed. +- Grok CLI and Kimi CLI final read-only reviews — `NO ACTIONABLE FINDINGS`. +- Visual smoke test at 1440 × 960 and 720 × 900 verified the focused create dialog, wide detail layout, responsive property inspector, and clean browser console. diff --git a/docs/implementation-notes/card-actions-ui-redesign.png b/docs/implementation-notes/card-actions-ui-redesign.png new file mode 100644 index 00000000..11bc34ba Binary files /dev/null and b/docs/implementation-notes/card-actions-ui-redesign.png differ diff --git a/packages/board-react/README.md b/packages/board-react/README.md index 7f8b87d2..fc9aa615 100644 --- a/packages/board-react/README.md +++ b/packages/board-react/README.md @@ -138,13 +138,18 @@ Included: vertical swimlane management and drag-to-move with `status`, within-lane reorder applies to Status swimlanes; alternate dimensions move cards between lanes without rewriting workflow order. Also included: card create/delete, board/table/calendar, multi-select filters, search/sort, -read-only card detail, and localized chrome. +read-only card detail, and localized chrome. Editable embeds use the shared +focused quick-create and card-detail dialogs, including description, +properties, relations, and sub-cards. Explicitly read-only embeds keep the +non-mutating detail; a host `onCardOpen` callback still replaces either +built-in path. Not yet (flag-gated later): members/assignee options, versions/activity, ticket badges (the `OCCSV-####` chip — the embed client has no ticket-index endpoint, so cards never show it even when the board configures `ticketKey`), -comments, attachments upload, markdown-rendered notes (notes show as plain -text — the markdown renderer chain is deliberately excluded to keep the bundle -small). +comments, attachments upload, and rich Markdown preview. Notes remain fully +editable Markdown, while the package's Preview uses safe plain text so the +KaTeX/Mermaid document-renderer chain is deliberately excluded from the +embed bundle. ## Installing from git @@ -171,7 +176,7 @@ the CSS scoping invariant and emits `dist/index.js`, `dist/index.d.ts`, cd packages/board-react npm install npm run build # tsc --noEmit && vite build && scope-css -npm test # unit tests (run from the repo root playwright-unit runner) +npm test # unit tests + real Cloud-sized embed browser regression ``` A manual-verification host lives in `example/` (React 18 consumer): diff --git a/packages/board-react/dist/index.d.ts b/packages/board-react/dist/index.d.ts index 43123295..e6d6ccdc 100644 --- a/packages/board-react/dist/index.d.ts +++ b/packages/board-react/dist/index.d.ts @@ -1,314 +1,319 @@ -import { CSSProperties } from 'react'; -import { ReactElement } from 'react'; - -/** Shape of the `.board` JSON config document (mirrors WebBoardView). */ -export declare type BoardConfigJSON = BoardDocumentConfig; - -/** Canonical synced `.board` JSON shape used by Desktop, Web, and board-react. */ -declare type BoardDocumentConfig = BoardViewConfig & { - id: string; -}; - -/** A user-defined custom field on a board's cards (stored in frontmatter / properties). */ -declare type BoardFieldDef = { - key: string; - label: string; - type?: BoardFieldType; -}; - -declare type BoardFieldType = "text" | "number" | "date"; - -declare type BoardGroupKey = "status" | "priority" | "assignee"; - -/** A board-level label definition: a tag's text + its display color. */ -declare type BoardLabelDef = { - label: string; - color?: string | null; -}; - -export declare type BoardLocale = 'en' | 'zh' | 'ja' | 'ko'; - -export declare type BoardResolution = { - boardDocId: string; - boardRelativePath: string; - /** Folder holding the board's card `.md` documents. */ - boardDir: string; -}; - -/** Persistent, user-editable swimlane definition stored in a `.board` file. */ -declare type BoardSwimlane = { - /** Immutable machine identity referenced by card frontmatter `swimlane`. */ - key: string; - name: string; - color?: string | null; -}; - -declare type BoardSwimlaneGroupKey = BoardGroupKey | "custom"; - -export declare type BoardTag = { - id?: string; - label: string; - color?: string | null; -}; - -export declare type BoardViewCard = { - /** Stable id — desktop: file path; web: card id. */ - id: string; - /** Allocated ticket id (e.g. `OCCSV-3371`), cloud-indexed; shown as a card badge. */ - ticket?: string | null; - /** The grouping value under the default (status) grouping. */ - columnKey: string; - position: number; - title: string; - icon?: string | null; - priority?: string | null; - /** Display text (web resolves a member name; desktop uses free text). */ - assignee?: string | null; - /** Stable custom swimlane identity from card frontmatter `swimlane`. */ - swimlaneKey?: string | null; - due?: string | null; - tags: BoardTag[]; - /** Markdown body / description. */ - notes?: string; - taskDone?: number; - taskTotal?: number; - excerpt?: string | null; - /** Attachment URLs / vault paths (frontmatter `attachments`). */ - attachments?: string[]; - /** Values for the board's user-defined custom fields, keyed by field key. */ - custom?: Record; - /** Card slugs this card is blocked by (frontmatter `blocked_by`). */ - blockedBy?: string[]; - /** Card slugs this card blocks (frontmatter `blocks`). */ - blocks?: string[]; - /** Card slugs this card relates to, no direction (frontmatter `relates`). */ - relates?: string[]; - /** Parent card slug (frontmatter `parent`) — makes this card a sub-card. */ - parent?: string | null; -}; - -declare type BoardViewColumn = { - key: string; - name: string; - color?: string | null; - /** Optional WIP limit; the column flags when its card count exceeds this. */ - limit?: number | null; -}; - -declare type BoardViewConfig = { - title: string; - columns: BoardViewColumn[]; - /** Column key treated as terminal/done (suppresses overdue styling). */ - doneColumn?: string; - /** Tint each column header by its (or an auto) color. */ - colorColumns?: boolean; - viewType?: BoardViewType; - groupBy?: BoardGroupKey; - /** Sub-mode for the calendar view (month grid vs agenda list). Defaults to "month". */ - calendarMode?: CalendarMode; - /** User-defined custom fields shown/edited on cards (board-level schema). */ - fields?: BoardFieldDef[]; - /** - * Board-level label definitions giving tags an explicit color. A card references - * a label by its `label` text in frontmatter `tags`; a tag with no matching - * definition (or a definition with no color) falls back to a deterministic - * auto-color, so tags are colored with zero config. - */ - labels?: BoardLabelDef[]; - /** Board ticket-id prefix (e.g. `OCCSV`) for per-card `OCCSV-3371` ticket links. */ - ticketKey?: string; - /** +import { CSSProperties } from 'react'; +import { ReactElement } from 'react'; + +/** Shape of the `.board` JSON config document (mirrors WebBoardView). */ +export declare type BoardConfigJSON = BoardDocumentConfig; + +/** Canonical synced `.board` JSON shape used by Desktop, Web, and board-react. */ +declare type BoardDocumentConfig = BoardViewConfig & { + id: string; +}; + +/** A user-defined custom field on a board's cards (stored in frontmatter / properties). */ +declare type BoardFieldDef = { + key: string; + label: string; + type?: BoardFieldType; +}; + +declare type BoardFieldType = "text" | "number" | "date"; + +declare type BoardGroupKey = "status" | "priority" | "assignee"; + +/** A board-level label definition: a tag's text + its display color. */ +declare type BoardLabelDef = { + label: string; + color?: string | null; +}; + +export declare type BoardLocale = 'en' | 'zh' | 'ja' | 'ko'; + +export declare type BoardResolution = { + boardDocId: string; + boardRelativePath: string; + /** Folder holding the board's card `.md` documents. */ + boardDir: string; +}; + +/** Persistent, user-editable swimlane definition stored in a `.board` file. */ +declare type BoardSwimlane = { + /** Immutable machine identity referenced by card frontmatter `swimlane`. */ + key: string; + name: string; + color?: string | null; +}; + +declare type BoardSwimlaneGroupKey = BoardGroupKey | "custom"; + +export declare type BoardTag = { + id?: string; + label: string; + color?: string | null; +}; + +export declare type BoardViewCard = { + /** Stable id — desktop: absolute file path; web/embed: relative document path. */ + id: string; + /** + * Portable vault-relative document path used by persisted card relations. + * Desktop supplies this separately because `id` is an absolute filesystem path. + */ + relationKey?: string; + /** Allocated ticket id (e.g. `OCCSV-3371`), cloud-indexed; shown as a card badge. */ + ticket?: string | null; + /** The grouping value under the default (status) grouping. */ + columnKey: string; + position: number; + title: string; + icon?: string | null; + priority?: string | null; + /** Display text (web resolves a member name; desktop uses free text). */ + assignee?: string | null; + /** Stable custom swimlane identity from card frontmatter `swimlane`. */ + swimlaneKey?: string | null; + due?: string | null; + tags: BoardTag[]; + /** Markdown body / description. */ + notes?: string; + taskDone?: number; + taskTotal?: number; + excerpt?: string | null; + /** Attachment URLs / vault paths (frontmatter `attachments`). */ + attachments?: string[]; + /** Values for the board's user-defined custom fields, keyed by field key. */ + custom?: Record; + /** Card slugs this card is blocked by (frontmatter `blocked_by`). */ + blockedBy?: string[]; + /** Card slugs this card blocks (frontmatter `blocks`). */ + blocks?: string[]; + /** Card slugs this card relates to, no direction (frontmatter `relates`). */ + relates?: string[]; + /** Parent card slug (frontmatter `parent`) — makes this card a sub-card. */ + parent?: string | null; +}; + +declare type BoardViewColumn = { + key: string; + name: string; + color?: string | null; + /** Optional WIP limit; the column flags when its card count exceeds this. */ + limit?: number | null; +}; + +declare type BoardViewConfig = { + title: string; + columns: BoardViewColumn[]; + /** Column key treated as terminal/done (suppresses overdue styling). */ + doneColumn?: string; + /** Tint each column header by its (or an auto) color. */ + colorColumns?: boolean; + viewType?: BoardViewType; + groupBy?: BoardGroupKey; + /** Sub-mode for the calendar view (month grid vs agenda list). Defaults to "month". */ + calendarMode?: CalendarMode; + /** User-defined custom fields shown/edited on cards (board-level schema). */ + fields?: BoardFieldDef[]; + /** + * Board-level label definitions giving tags an explicit color. A card references + * a label by its `label` text in frontmatter `tags`; a tag with no matching + * definition (or a definition with no color) falls back to a deterministic + * auto-color, so tags are colored with zero config. + */ + labels?: BoardLabelDef[]; + /** Board ticket-id prefix (e.g. `OCCSV`) for per-card `OCCSV-3371` ticket links. */ + ticketKey?: string; + /** * Active custom swimlane mode. Historical configs may also contain * status/priority/assignee here from the retired two-dimensional layout; * those values now render as the single vertical swimlane dimension. */ swimlaneBy?: BoardSwimlaneGroupKey; /** Persistent definitions used by custom vertical swimlanes. */ - swimlanes?: BoardSwimlane[]; - /** Present only while a derived-lane conversion is incomplete/retryable. */ - swimlaneMigration?: SwimlaneMigration; -}; - -declare type BoardViewType = "board" | "table" | "calendar"; - -declare type CalendarMode = "month" | "agenda"; - -export declare type CreateClientOptions = { - /** Origin of the jtype server, e.g. `https://jtype.nightc.com`. */ - baseUrl: string; - /** A session token (typically mcp-scoped, minted via the OAuth device flow). */ - token: string; - /** Override fetch (tests, custom agents). Defaults to the global fetch. */ - fetchImpl?: typeof fetch; -}; - -export declare function createJTypeClient(opts: CreateClientOptions): JTypeBoardDataClient; - -/** - * Typed API failure. `code` is the server's typed error string (body `error` - * field) when present, else a generic `http_` / `network_error`. - * The message never contains the token. - */ -export declare class JTypeApiError extends Error { - readonly status: number; - readonly code: string; - constructor(status: number, code: string); -} - -/** - * Embeddable jtype kanban board: give it `baseUrl`+`token` (or an injected - * `client`) plus `workspaceId`+`boardRef` and it renders the same shared - * BoardSurface the jtype desktop + web apps use, backed by the document API. - */ + swimlanes?: BoardSwimlane[]; + /** Present only while a derived-lane conversion is incomplete/retryable. */ + swimlaneMigration?: SwimlaneMigration; +}; + +declare type BoardViewType = "board" | "table" | "calendar"; + +declare type CalendarMode = "month" | "agenda"; + +export declare type CreateClientOptions = { + /** Origin of the jtype server, e.g. `https://jtype.nightc.com`. */ + baseUrl: string; + /** A session token (typically mcp-scoped, minted via the OAuth device flow). */ + token: string; + /** Override fetch (tests, custom agents). Defaults to the global fetch. */ + fetchImpl?: typeof fetch; +}; + +export declare function createJTypeClient(opts: CreateClientOptions): JTypeBoardDataClient; + +/** + * Typed API failure. `code` is the server's typed error string (body `error` + * field) when present, else a generic `http_` / `network_error`. + * The message never contains the token. + */ +export declare class JTypeApiError extends Error { + readonly status: number; + readonly code: string; + constructor(status: number, code: string); +} + +/** + * Embeddable jtype kanban board: give it `baseUrl`+`token` (or an injected + * `client`) plus `workspaceId`+`boardRef` and it renders the same shared + * BoardSurface the jtype desktop + web apps use, backed by the document API. + */ export declare function JTypeBoard({ workspaceId, boardRef, baseUrl, token, client: injectedClient, readOnly, currentUser, live, pollIntervalMs, onCardOpen, onConnectionChange, locale, className, style, }: JTypeBoardProps): ReactElement; - -export declare type JTypeBoardConnection = 'live' | 'polling' | 'error'; - -/** - * Everything the board embed calls. `createJTypeClient` is the direct - * (baseUrl + token) implementation; hosts can substitute their own proxy-backed - * implementation so no jtype token ever reaches the browser. - */ -export declare interface JTypeBoardDataClient { - listDocuments(workspaceId: string): Promise; - getDocument(workspaceId: string, docId: string): Promise; - saveDocument(workspaceId: string, req: JTypeSaveDocumentRequest): Promise; - /** Optional: enables the card Delete action. Absent → deleting fails visibly. */ - deleteDocument?(workspaceId: string, docId: string): Promise; - /** - * Optional: subscribe to a board's live SSE feed - * (`GET /api/v1/workspaces/:id/boards/:boardRef/events`, `boardRef` = the - * board's logical id from its `.board` config). Since PR #45 - * (kanban-unification-v2, commit a4d2a31) the server rejects anything but a - * full-scope session token on the live WS/SSE surfaces — an mcp-scoped token - * gets 403. Implementations must surface that as - * `onDown({ permanent: true })` so the board falls back to *visible* polling - * instead of pretending to be live. Returns an unsubscribe function. - */ - subscribeBoardEvents?(workspaceId: string, boardRef: string, handlers: LiveSubscriptionHandlers): () => void; -} - -/** - * Typed board-embed failure. Rendered as an explicit error state — never a - * blank board. - */ -export declare class JTypeBoardError extends Error { - readonly code: 'board_not_found' | 'board_ref_ambiguous' | 'board_config_invalid' | 'props_invalid'; - /** For `board_ref_ambiguous`: the matching `.board` paths. */ - readonly candidates: string[]; - constructor(code: JTypeBoardError['code'], detail?: string, candidates?: string[]); -} - -export declare type JTypeBoardProps = { - /** Cloud workspace id (UUID). */ - workspaceId: string; - /** Board name or `.board` relative path; resolved via listDocuments. */ - boardRef: string; - /** jtype server origin. XOR with `client`. */ - baseUrl?: string; - /** Session token (typically mcp-scoped). XOR with `client`. */ - token?: string; - /** - * Injected data client. When set, EVERY request (loads, polling, writes, - * live subscription) goes through it — the browser never talks to jtype - * directly, so a host proxy can keep the token server-side. - * Memoize it: a new identity per render restarts the board. - */ - client?: JTypeBoardDataClient; - /** Hide all mutation affordances (view-only board). Default false. */ - readOnly?: boolean; + +export declare type JTypeBoardConnection = 'live' | 'polling' | 'error'; + +/** + * Everything the board embed calls. `createJTypeClient` is the direct + * (baseUrl + token) implementation; hosts can substitute their own proxy-backed + * implementation so no jtype token ever reaches the browser. + */ +export declare interface JTypeBoardDataClient { + listDocuments(workspaceId: string): Promise; + getDocument(workspaceId: string, docId: string): Promise; + saveDocument(workspaceId: string, req: JTypeSaveDocumentRequest): Promise; + /** Optional: enables the card Delete action. Absent → deleting fails visibly. */ + deleteDocument?(workspaceId: string, docId: string): Promise; + /** + * Optional: subscribe to a board's live SSE feed + * (`GET /api/v1/workspaces/:id/boards/:boardRef/events`, `boardRef` = the + * board's logical id from its `.board` config). Since PR #45 + * (kanban-unification-v2, commit a4d2a31) the server rejects anything but a + * full-scope session token on the live WS/SSE surfaces — an mcp-scoped token + * gets 403. Implementations must surface that as + * `onDown({ permanent: true })` so the board falls back to *visible* polling + * instead of pretending to be live. Returns an unsubscribe function. + */ + subscribeBoardEvents?(workspaceId: string, boardRef: string, handlers: LiveSubscriptionHandlers): () => void; +} + +/** + * Typed board-embed failure. Rendered as an explicit error state — never a + * blank board. + */ +export declare class JTypeBoardError extends Error { + readonly code: 'board_not_found' | 'board_ref_ambiguous' | 'board_config_invalid' | 'props_invalid'; + /** For `board_ref_ambiguous`: the matching `.board` paths. */ + readonly candidates: string[]; + constructor(code: JTypeBoardError['code'], detail?: string, candidates?: string[]); +} + +export declare type JTypeBoardProps = { + /** Cloud workspace id (UUID). */ + workspaceId: string; + /** Board name or `.board` relative path; resolved via listDocuments. */ + boardRef: string; + /** jtype server origin. XOR with `client`. */ + baseUrl?: string; + /** Session token (typically mcp-scoped). XOR with `client`. */ + token?: string; + /** + * Injected data client. When set, EVERY request (loads, polling, writes, + * live subscription) goes through it — the browser never talks to jtype + * directly, so a host proxy can keep the token server-side. + * Memoize it: a new identity per render restarts the board. + */ + client?: JTypeBoardDataClient; + /** Hide all mutation affordances (view-only board). Default false. */ + readOnly?: boolean; /** Current user's display name; enables the personal "My cards" filter. */ currentUser?: string; - /** - * Try the live SSE feed (default true). Post PR #45 the feed requires a - * full-scope session token — with an mcp-scoped token the server answers - * 403 and the board VISIBLY falls back to polling (connection chip + - * onConnectionChange('polling')). Never a silent fake-live. - */ - live?: boolean; - /** Polling cadence in ms (default 30000, min 5000). */ - pollIntervalMs?: number; - /** Intercept card opens (replaces the built-in read-only detail panel). */ - onCardOpen?: (card: BoardViewCard) => void; - /** Observe live/polling/error transitions. */ - onConnectionChange?: (state: JTypeBoardConnection) => void; - /** Board chrome locale (default 'en'). Shared across instances (see README). */ - locale?: BoardLocale; - className?: string; - style?: CSSProperties; -}; - -export declare type JTypeCloudDocument = { - relativePath: string; - title: string; - isPublished: boolean; - content: string; - contentHash: string; - versionId: string; - updatedClock: number; -}; - -export declare type JTypeDocumentListItem = { - id: string; - relativePath: string; - title: string; - isPublished: boolean; - contentHash: string; - updatedClock: number; - versionId: string | null; -}; - -export declare type JTypeSaveDocumentRequest = { - relativePath: string; - title?: string; - content: string; - baseContentHash?: string; - baseContent?: string; -}; - -export declare type JTypeSaveDocumentResponse = { - relativePath: string; - contentHash: string; - updatedClock: number; - mergeStatus: 'accepted' | 'merged' | 'unchanged'; -}; - -export declare type LiveSubscriptionHandlers = { - /** A board event arrived. Payload is deliberately opaque — refetch. */ - onEvent: () => void; - /** The stream is connected and delivering. */ - onUp: () => void; - /** - * The stream failed or ended. `permanent: true` means retrying is pointless - * for this credential (e.g. the server rejected the token's scope) and the - * board should settle on polling. - */ - onDown: (info: { - permanent: boolean; - reason: string; - }) => void; -}; - -/** - * Resolve a host-supplied `boardRef` to the workspace's `.board` config doc. - * The host only knows a name (what jcode Cloud's kanban link stores) or a - * relative path; resolution order: - * 1. exact relativePath match (`boardRef` itself, or `boardRef` + `.board`); - * 2. unique basename match anywhere in the workspace - * (any folder containing `.board`). - * Multiple basename matches → `board_ref_ambiguous` listing the candidates - * (pass the full path to disambiguate); none → `board_not_found`. - */ -export declare function resolveBoardDoc(docs: JTypeDocumentListItem[], boardRef: string): BoardResolution; - -/** Persisted while a derived priority/assignee view is converted to custom lanes. */ -declare type SwimlaneMigration = { - version: 1; - source: "priority" | "assignee"; - mapping: Array<{ - value: string; - swimlaneKey: string; - }>; -}; - -export { } + /** + * Try the live SSE feed (default true). Post PR #45 the feed requires a + * full-scope session token — with an mcp-scoped token the server answers + * 403 and the board VISIBLY falls back to polling (connection chip + + * onConnectionChange('polling')). Never a silent fake-live. + */ + live?: boolean; + /** Polling cadence in ms (default 30000, min 5000). */ + pollIntervalMs?: number; + /** Intercept card opens (replaces the built-in editable/read-only detail). */ + onCardOpen?: (card: BoardViewCard) => void; + /** Observe live/polling/error transitions. */ + onConnectionChange?: (state: JTypeBoardConnection) => void; + /** Board chrome locale (default 'en'). Shared across instances (see README). */ + locale?: BoardLocale; + className?: string; + style?: CSSProperties; +}; + +export declare type JTypeCloudDocument = { + relativePath: string; + title: string; + isPublished: boolean; + content: string; + contentHash: string; + versionId: string; + updatedClock: number; +}; + +export declare type JTypeDocumentListItem = { + id: string; + relativePath: string; + title: string; + isPublished: boolean; + contentHash: string; + updatedClock: number; + versionId: string | null; +}; + +export declare type JTypeSaveDocumentRequest = { + relativePath: string; + title?: string; + content: string; + baseContentHash?: string; + baseContent?: string; +}; + +export declare type JTypeSaveDocumentResponse = { + relativePath: string; + contentHash: string; + updatedClock: number; + mergeStatus: 'accepted' | 'merged' | 'unchanged'; +}; + +export declare type LiveSubscriptionHandlers = { + /** A board event arrived. Payload is deliberately opaque — refetch. */ + onEvent: () => void; + /** The stream is connected and delivering. */ + onUp: () => void; + /** + * The stream failed or ended. `permanent: true` means retrying is pointless + * for this credential (e.g. the server rejected the token's scope) and the + * board should settle on polling. + */ + onDown: (info: { + permanent: boolean; + reason: string; + }) => void; +}; + +/** + * Resolve a host-supplied `boardRef` to the workspace's `.board` config doc. + * The host only knows a name (what jcode Cloud's kanban link stores) or a + * relative path; resolution order: + * 1. exact relativePath match (`boardRef` itself, or `boardRef` + `.board`); + * 2. unique basename match anywhere in the workspace + * (any folder containing `.board`). + * Multiple basename matches → `board_ref_ambiguous` listing the candidates + * (pass the full path to disambiguate); none → `board_not_found`. + */ +export declare function resolveBoardDoc(docs: JTypeDocumentListItem[], boardRef: string): BoardResolution; + +/** Persisted while a derived priority/assignee view is converted to custom lanes. */ +declare type SwimlaneMigration = { + version: 1; + source: "priority" | "assignee"; + mapping: Array<{ + value: string; + swimlaneKey: string; + }>; +}; + +export { } diff --git a/packages/board-react/dist/index.js b/packages/board-react/dist/index.js index b6a641f3..39acb4ea 100644 --- a/packages/board-react/dist/index.js +++ b/packages/board-react/dist/index.js @@ -80,7 +80,7 @@ var N = ({ children: e }) => e, P = (e) => { values: t, components: n }; -}, F = i(null), I = (e) => u(F), ee = ({ i18n: e, defaultComponent: t, children: n }) => { +}, F = i(null), I = (e) => u(F), L = ({ i18n: e, defaultComponent: t, children: n }) => { let r = v(e.locale || null), i = l(() => ({ i18n: new Proxy(e, {}), defaultComponent: t, @@ -96,7 +96,7 @@ var N = ({ children: e }) => e, P = (e) => { children: n }); }; -function L(e) { +function R(e) { let t = I(void 0); return /* @__PURE__ */ S(M, { ...e, @@ -104,13 +104,50 @@ function L(e) { }); } //#endregion -//#region node_modules/@lingui/core/dist/index.mjs -var R = (e) => typeof e == "string", z = (e) => typeof e == "function", B = /* @__PURE__ */ new Map(), te = "en"; -function ne(e) { - return [...Array.isArray(e) ? e : [e], te]; +//#region node_modules/@heroicons/react/24/outline/esm/ExclamationTriangleIcon.js +function z({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z" + })); +} +var B = /*#__PURE__*/ e.forwardRef(z); +//#endregion +//#region node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js +function V({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M6 18 18 6M6 6l12 12" + })); } -function re(e, t, n) { - let r = ne(e); +var ee = /*#__PURE__*/ e.forwardRef(V), H = (e) => typeof e == "string", te = (e) => typeof e == "function", ne = /* @__PURE__ */ new Map(), re = "en"; +function U(e) { + return [...Array.isArray(e) ? e : [e], re]; +} +function ie(e, t, n) { + let r = U(e); n ||= "default"; let i; if (typeof n == "string") switch (i = { @@ -127,9 +164,9 @@ function re(e, t, n) { break; } else i = n; - return se(() => ce("date", r, n), () => new Intl.DateTimeFormat(r, i)).format(R(t) ? new Date(t) : t); + return ce(() => le("date", r, n), () => new Intl.DateTimeFormat(r, i)).format(H(t) ? new Date(t) : t); } -function ie(e, t, n) { +function ae(e, t, n) { let r; if (n ||= "default", typeof n == "string") switch (r = { second: "numeric", @@ -143,24 +180,24 @@ function ie(e, t, n) { case "short": delete r.second; } else r = n; - return re(e, t, r); + return ie(e, t, r); } -function ae(e, t, n) { - let r = ne(e); - return se(() => ce("number", r, n), () => new Intl.NumberFormat(r, n)).format(t); +function oe(e, t, n) { + let r = U(e); + return ce(() => le("number", r, n), () => new Intl.NumberFormat(r, n)).format(t); } -function oe(e, t, n, { offset: r = 0, ...i }) { - let a = ne(e), o = t ? se(() => ce("plural-ordinal", a), () => new Intl.PluralRules(a, { type: "ordinal" })) : se(() => ce("plural-cardinal", a), () => new Intl.PluralRules(a, { type: "cardinal" })); +function se(e, t, n, { offset: r = 0, ...i }) { + let a = U(e), o = t ? ce(() => le("plural-ordinal", a), () => new Intl.PluralRules(a, { type: "ordinal" })) : ce(() => le("plural-cardinal", a), () => new Intl.PluralRules(a, { type: "cardinal" })); return i[n] ?? i[o.select(n - r)] ?? i.other; } -function se(e, t) { - let n = e(), r = B.get(n); - return r || (r = t(), B.set(n, r)), r; +function ce(e, t) { + let n = e(), r = ne.get(n); + return r || (r = t(), ne.set(n, r)), r; } -function ce(e, t, n) { +function le(e, t, n) { return `${e}-${t.join("-")}-${JSON.stringify(n)}`; } -var le = /\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/, ue = (e) => e.replace(/\\u([a-fA-F0-9]{4})|\\x([a-fA-F0-9]{2})/g, (e, t, n) => { +var ue = /\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/, de = (e) => e.replace(/\\u([a-fA-F0-9]{4})|\\x([a-fA-F0-9]{2})/g, (e, t, n) => { if (t) { let e = parseInt(t, 16); return String.fromCharCode(e); @@ -168,31 +205,31 @@ var le = /\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/, ue = (e) => e.replace(/\\u([a-fA let e = parseInt(n, 16); return String.fromCharCode(e); } -}), de = "%__lingui_octothorpe__%", fe = (e, t, n = {}) => { +}), fe = "%__lingui_octothorpe__%", pe = (e, t, n = {}) => { let r = t || e, i = (e) => typeof e == "object" ? e : n[e], a = (e, t) => { - let a = Object.keys(n).length ? i("number") : void 0, o = ae(r, e, a); - return t.replace(new RegExp(de, "g"), o); + let a = Object.keys(n).length ? i("number") : void 0, o = oe(r, e, a); + return t.replace(new RegExp(fe, "g"), o); }; return { plural: (e, t) => { - let { offset: n = 0 } = t, i = oe(r, !1, e, t); + let { offset: n = 0 } = t, i = se(r, !1, e, t); return a(e - n, i); }, selectordinal: (e, t) => { - let { offset: n = 0 } = t, i = oe(r, !0, e, t); + let { offset: n = 0 } = t, i = se(r, !0, e, t); return a(e - n, i); }, - select: pe, - number: (e, t) => ae(r, e, i(t) || { style: t }), - date: (e, t) => re(r, e, i(t) || t), - time: (e, t) => ie(r, e, i(t) || t) + select: me, + number: (e, t) => oe(r, e, i(t) || { style: t }), + date: (e, t) => ie(r, e, i(t) || t), + time: (e, t) => ae(r, e, i(t) || t) }; -}, pe = (e, t) => t[e] ?? t.other; -function me(e, t, n) { +}, me = (e, t) => t[e] ?? t.other; +function he(e, t, n) { return (r = {}, i) => { - let a = fe(t, n, i), o = (e, t = !1) => Array.isArray(e) ? e.reduce((e, n) => { - if (n === "#" && t) return e + de; - if (R(n)) return e + n; + let a = pe(t, n, i), o = (e, t = !1) => Array.isArray(e) ? e.reduce((e, n) => { + if (n === "#" && t) return e + fe; + if (H(n)) return e + n; let [i, s, c] = n, l = {}; s === "plural" || s === "selectordinal" || s === "select" ? Object.entries(c).forEach(([e, t]) => { l[e] = o(t, s === "plural" || s === "selectordinal"); @@ -204,10 +241,10 @@ function me(e, t, n) { } else u = r[i]; return u == null ? e : e + u; }, "") : e, s = o(e); - return R(s) && le.test(s) ? ue(s) : R(s) ? s : s ? String(s) : ""; + return H(s) && ue.test(s) ? de(s) : H(s) ? s : s ? String(s) : ""; }; } -var he = class { +var ge = class { _events = {}; on(e, t) { return this._events[e] ??= /* @__PURE__ */ new Set(), this._events[e].add(t), () => this.removeListener(e, t); @@ -220,14 +257,14 @@ var he = class { let n = this._events[e]; if (n) for (let e of [...n]) e.apply(this, t); } -}, ge = class extends he { +}, _e = class extends ge { _locale = ""; _locales; _messages = {}; _missing; _messageCompiler; constructor(e) { - super(), e.missing != null && (this._missing = e.missing), e.messages != null && this.load(e.messages), (typeof e.locale == "string" || e.locales) && this.activate(e.locale ?? te, e.locales); + super(), e.missing != null && (this._missing = e.missing), e.messages != null && this.load(e.messages), (typeof e.locale == "string" || e.locales) && this.activate(e.locale ?? re, e.locales); } get locale() { return this._locale; @@ -257,15 +294,15 @@ var he = class { _(e, t, n) { if (!this.locale) throw Error("Lingui: Attempted to call a translation function without setting a locale.\nMake sure to call `i18n.activate(locale)` before using Lingui functions.\nThis issue may also occur due to a race condition in your initialization logic."); let r = n?.message; - e ||= "", R(e) || (t = e.values || t, r = e.message, e = e.id); + e ||= "", H(e) || (t = e.values || t, r = e.message, e = e.id); let i = this.messages[e], a = i === void 0, o = this._missing; - if (o && a) return z(o) ? o(this._locale, e) : o; + if (o && a) return te(o) ? o(this._locale, e) : o; a && this.emit("missing", { id: e, locale: this._locale }); let s = i || r || e; - return R(s) && (this._messageCompiler ? s = this._messageCompiler(s) : console.warn(`Uncompiled message detected! Message: + return H(s) && (this._messageCompiler ? s = this._messageCompiler(s) : console.warn(`Uncompiled message detected! Message: > ${s} @@ -273,7492 +310,8729 @@ That means you use raw catalog or your catalog doesn't have a translation for th ICU features such as interpolation and plurals will not work properly for that message. Please compile your catalog first. -`)), R(s) && le.test(s) ? ue(s) : R(s) ? s : me(s, this._locale, this._locales)(t, n?.formats); +`)), H(s) && ue.test(s) ? de(s) : H(s) ? s : he(s, this._locale, this._locales)(t, n?.formats); } t = this._.bind(this); date(e, t) { - return re(this._locales || this._locale, e, t); + return ie(this._locales || this._locale, e, t); } number(e, t) { - return ae(this._locales || this._locale, e, t); + return oe(this._locales || this._locale, e, t); } }; -function _e(e = {}) { - return new ge(e); -} -var V = _e(), ve = (e) => e?.ownerDocument ?? document, ye = (e) => e && "window" in e && e.window === e ? e : ve(e).defaultView || window; -function be(e) { - return typeof e == "object" && !!e && "nodeType" in e && typeof e.nodeType == "number"; -} -function xe(e) { - return be(e) && e.nodeType === Node.DOCUMENT_FRAGMENT_NODE && "host" in e; +function ve(e = {}) { + return new _e(e); } +var W = ve(); //#endregion -//#region ../../node_modules/.pnpm/react-stately@3.47.0_react@19.2.7/node_modules/react-stately/dist/private/flags/flags.mjs -var Se = !1; -function Ce() { - return Se; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/AdjustmentsHorizontalIcon.js +function ye({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M10.5 6h9.75M10.5 6a1.5 1.5 0 1 1-3 0m3 0a1.5 1.5 0 1 0-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-9.75 0h9.75" + })); } +var be = /*#__PURE__*/ e.forwardRef(ye); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/utils/shadowdom/DOMFunctions.mjs -function we(e, t) { - if (!Ce()) return t && e ? e.contains(t) : !1; - if (!e || !t) return !1; - let n = t; - for (; n !== null;) { - if (n === e) return !0; - n = n.tagName === "SLOT" && n.assignedSlot ? n.assignedSlot.parentNode : xe(n) ? n.host : n.parentNode; - } - return !1; -} -var Te = (e = document) => { - if (!Ce()) return e.activeElement; - let t = e.activeElement; - for (; t && "shadowRoot" in t && t.shadowRoot?.activeElement;) t = t.shadowRoot.activeElement; - return t; -}; -function Ee(e) { - if (Ce() && 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; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowDownIcon.js +function xe({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M19.5 13.5 12 21m0 0-7.5-7.5M12 21V3" + })); } +var Se = /*#__PURE__*/ e.forwardRef(xe); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/utils/focusWithoutScrolling.mjs -function De(e) { - if (ke()) e.focus({ preventScroll: !0 }); - else { - let t = Ae(e); - e.focus(), je(t); - } -} -var Oe = null; -function ke() { - if (Oe == null) { - Oe = !1; - try { - document.createElement("div").focus({ get preventScroll() { - return Oe = !0, !0; - } }); - } catch {} - } - return Oe; -} -function Ae(e) { - let t = e.parentNode, n = [], r = document.scrollingElement || document.documentElement; - for (; t instanceof HTMLElement && t !== r;) (t.offsetHeight < t.scrollHeight || t.offsetWidth < t.scrollWidth) && n.push({ - element: t, - scrollTop: t.scrollTop, - scrollLeft: t.scrollLeft - }), t = t.parentNode; - return r instanceof HTMLElement && n.push({ - element: r, - scrollTop: r.scrollTop, - scrollLeft: r.scrollLeft - }), n; -} -function je(e) { - for (let { element: t, scrollTop: n, scrollLeft: r } of e) t.scrollTop = n, t.scrollLeft = r; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowLeftIcon.js +function Ce({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M10.5 19.5 3 12m0 0 7.5-7.5M3 12h18" + })); } +var we = /*#__PURE__*/ e.forwardRef(Ce); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/utils/useLayoutEffect.mjs -var Me = typeof document < "u" ? t.useLayoutEffect : () => {}; -//#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/interactions/utils.mjs -function Ne(e) { - let t = e; - return t.nativeEvent = e, t.isDefaultPrevented = () => t.defaultPrevented, t.isPropagationStopped = () => t.cancelBubble, t.persist = () => {}, t; -} -function Pe(e, t) { - Object.defineProperty(e, "target", { value: t }), Object.defineProperty(e, "currentTarget", { value: t }); -} -function Fe(e) { - let t = v({ - isFocused: !1, - observer: null - }); - return Me(() => { - let e = t.current; - return () => { - e.observer &&= (e.observer.disconnect(), null); - }; - }, []), l((n) => { - let r = Ee(n); - if (r instanceof HTMLButtonElement || r instanceof HTMLInputElement || r instanceof HTMLTextAreaElement || r instanceof HTMLSelectElement) { - t.current.isFocused = !0; - let n = r; - n.addEventListener("focusout", (r) => { - if (t.current.isFocused = !1, n.disabled) { - let t = Ne(r); - e?.(t); - } - t.current.observer && (t.current.observer.disconnect(), t.current.observer = null); - }, { once: !0 }), t.current.observer = new MutationObserver(() => { - if (t.current.isFocused && n.disabled) { - t.current.observer?.disconnect(); - let e = n === Te() ? null : Te(); - n.dispatchEvent(new FocusEvent("blur", { relatedTarget: e })), n.dispatchEvent(new FocusEvent("focusout", { - bubbles: !0, - relatedTarget: e - })); - } - }), t.current.observer.observe(n, { - attributes: !0, - attributeFilter: ["disabled"] - }); - } - }, [e]); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowPathIcon.js +function Te({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99" + })); } +var Ee = /*#__PURE__*/ e.forwardRef(Te); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/utils/platform.mjs -function Ie(e) { - if (typeof window > "u" || window.navigator == null) return !1; - let t = window.navigator.userAgentData?.brands; - return Array.isArray(t) && t.some((t) => e.test(t.brand)) || e.test(window.navigator.userAgent); -} -function Le(e) { - return typeof window < "u" && window.navigator != null && e.test(window.navigator.userAgentData?.platform || window.navigator.platform); -} -function Re(e) { - let t = null; - return () => (t ??= e(), t); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowRightIcon.js +function De({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3" + })); } -var ze = Re(function() { - return Le(/^Mac/i); -}), Be = Re(function() { - return Le(/^iPad/i) || ze() && navigator.maxTouchPoints > 1; -}), Ve = Re(function() { - return Ie(/AppleWebKit/i) && !He(); -}), He = Re(function() { - return Ie(/Chrome/i); -}), Ue = Re(function() { - return Ie(/Android/i); -}), We = Re(function() { - return Ie(/Firefox/i); -}); +var Oe = /*#__PURE__*/ e.forwardRef(De); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/utils/isVirtualEvent.mjs -function Ge(e) { - return e.pointerType === "" && e.isTrusted ? !0 : Ue() && e.pointerType ? e.type === "click" && e.buttons === 1 : e.detail === 0 && !e.pointerType; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowTopRightOnSquareIcon.js +function ke({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25" + })); } +var Ae = /*#__PURE__*/ e.forwardRef(ke); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/utils/openLink.mjs -function Ke(e, t, n = !0) { - let { metaKey: r, ctrlKey: i, altKey: a, shiftKey: o } = t; - We() && window.event?.type?.startsWith("key") && e.target === "_blank" && (ze() ? r = !0 : i = !0); - let s = Ve() && ze() && !Be() ? new KeyboardEvent("keydown", { - keyIdentifier: "Enter", - metaKey: r, - ctrlKey: i, - altKey: a, - shiftKey: o - }) : new MouseEvent("click", { - metaKey: r, - ctrlKey: i, - altKey: a, - shiftKey: o, - detail: 1, - bubbles: !0, - cancelable: !0 - }); - Ke.isOpening = n, De(e), e.dispatchEvent(s), Ke.isOpening = !1; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowUpTrayIcon.js +function je({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5" + })); } -Ke.isOpening = !1; +var Me = /*#__PURE__*/ e.forwardRef(je); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/interactions/useFocusVisible.mjs -var qe = null, Je = /* @__PURE__ */ new Set(), Ye = /* @__PURE__ */ new Map(), Xe = !1, Ze = !1, Qe = { - Tab: !0, - Escape: !0 -}; -function $e(e, t) { - for (let n of Je) n(e, t); -} -function et(e) { - return !(e.metaKey || !ze() && e.altKey || e.ctrlKey || e.key === "Control" || e.key === "Shift" || e.key === "Meta"); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowUpIcon.js +function Ne({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M4.5 10.5 12 3m0 0 7.5 7.5M12 3v18" + })); } -function tt(e) { - Xe = !0, !Ke.isOpening && et(e) && (qe = "keyboard", $e("keyboard", e)); +var Pe = /*#__PURE__*/ e.forwardRef(Ne); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowUturnLeftIcon.js +function Fe({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M9 15 3 9m0 0 6-6M3 9h12a6 6 0 0 1 0 12h-3" + })); } -function nt(e) { - qe = "pointer", "pointerType" in e && e.pointerType, (e.type === "mousedown" || e.type === "pointerdown") && (Xe = !0, $e("pointer", e)); +var Ie = /*#__PURE__*/ e.forwardRef(Fe); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowsPointingInIcon.js +function Le({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M9 9V4.5M9 9H4.5M9 9 3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25" + })); } -function rt(e) { - !Ke.isOpening && Ge(e) && (Xe = !0, qe = "virtual"); +var Re = /*#__PURE__*/ e.forwardRef(Le); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ArrowsPointingOutIcon.js +function ze({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15" + })); } -function it(e) { - let t = ye(Ee(e)), n = ve(Ee(e)); - Ee(e) === t || Ee(e) === n || !e.isTrusted || (!Xe && !Ze && (qe = "virtual", $e("virtual", e)), Xe = !1, Ze = !1); +var Be = /*#__PURE__*/ e.forwardRef(ze); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/Bars3Icon.js +function Ve({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" + })); } -function at() { - Xe = !1, Ze = !0; +var He = /*#__PURE__*/ e.forwardRef(Ve); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/BarsArrowDownIcon.js +function Ue({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M3 4.5h14.25M3 9h9.75M3 13.5h9.75m4.5-4.5v12m0 0-3.75-3.75M17.25 21 21 17.25" + })); } -function ot(e) { - if (typeof window > "u" || typeof document > "u") return; - let t = ye(e), n = ve(e); - if (Ye.get(t)) return; - let r = t.HTMLElement.prototype.focus; - t.HTMLElement.prototype.focus = function() { - Xe = !0, r.apply(this, arguments); - }, n.addEventListener("keydown", tt, !0), n.addEventListener("keyup", tt, !0), n.addEventListener("click", rt, !0), t.addEventListener("focus", it, !0), t.addEventListener("blur", at, !1), typeof PointerEvent < "u" && (n.addEventListener("pointerdown", nt, !0), n.addEventListener("pointermove", nt, !0), n.addEventListener("pointerup", nt, !0)), t.addEventListener("beforeunload", () => { - st(e); - }, { once: !0 }), Ye.set(t, { focus: r }); -} -var st = (e, t) => { - let n = ye(e), r = ve(e); - t && r.removeEventListener("DOMContentLoaded", t), Ye.has(n) && (n.HTMLElement.prototype.focus = Ye.get(n).focus, r.removeEventListener("keydown", tt, !0), r.removeEventListener("keyup", tt, !0), r.removeEventListener("click", rt, !0), n.removeEventListener("focus", it, !0), n.removeEventListener("blur", at, !1), typeof PointerEvent < "u" && (r.removeEventListener("pointerdown", nt, !0), r.removeEventListener("pointermove", nt, !0), r.removeEventListener("pointerup", nt, !0)), Ye.delete(n)); -}; -function ct(e) { - let t = ve(e), n; - return t.readyState === "loading" ? (n = () => { - ot(e); - }, t.addEventListener("DOMContentLoaded", n)) : ot(e), () => st(e, n); +var We = /*#__PURE__*/ e.forwardRef(Ue); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/BookmarkIcon.js +function Ge({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M17.593 3.322c1.1.128 1.907 1.077 1.907 2.185V21L12 17.25 4.5 21V5.507c0-1.108.806-2.057 1.907-2.185a48.507 48.507 0 0 1 11.186 0Z" + })); } -typeof document < "u" && ct(); -function lt() { - return qe !== "pointer"; +var Ke = /*#__PURE__*/ e.forwardRef(Ge); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/CalendarDaysIcon.js +function qe({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5m-9-6h.008v.008H12v-.008ZM12 15h.008v.008H12V15Zm0 2.25h.008v.008H12v-.008ZM9.75 15h.008v.008H9.75V15Zm0 2.25h.008v.008H9.75v-.008ZM7.5 15h.008v.008H7.5V15Zm0 2.25h.008v.008H7.5v-.008Zm6.75-4.5h.008v.008h-.008v-.008Zm0 2.25h.008v.008h-.008V15Zm0 2.25h.008v.008h-.008v-.008Zm2.25-4.5h.008v.008H16.5v-.008Zm0 2.25h.008v.008H16.5V15Z" + })); } -var ut = /* @__PURE__ */ new Set([ - "checkbox", - "radio", - "range", - "color", - "file", - "image", - "button", - "submit", - "reset" -]); -function dt(e, t, n) { - let r = n ? Ee(n) : void 0, i = ve(r), a = ye(r), o = a === void 0 ? HTMLInputElement : a.HTMLInputElement, s = a === void 0 ? HTMLTextAreaElement : a.HTMLTextAreaElement, c = a === void 0 ? HTMLElement : a.HTMLElement, l = a === void 0 ? KeyboardEvent : a.KeyboardEvent, u = Te(i); - return e = e || u instanceof o && !ut.has(u.type) || u instanceof s || u instanceof c && u.isContentEditable, !(e && t === "keyboard" && n instanceof l && !Qe[n.key]); +var Je = /*#__PURE__*/ e.forwardRef(qe); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChatBubbleLeftIcon.js +function Ye({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M2.25 12.76c0 1.6 1.123 2.994 2.707 3.227 1.087.16 2.185.283 3.293.369V21l4.076-4.076a1.526 1.526 0 0 1 1.037-.443 48.282 48.282 0 0 0 5.68-.494c1.584-.233 2.707-1.626 2.707-3.228V6.741c0-1.602-1.123-2.995-2.707-3.228A48.394 48.394 0 0 0 12 3c-2.392 0-4.744.175-7.043.513C3.373 3.746 2.25 5.14 2.25 6.741v6.018Z" + })); } -function ft(e, t, n) { - ot(), f(() => { - if (n?.enabled === !1) return; - let t = (t, r) => { - dt(!!n?.isTextInput, t, r) && e(lt()); - }; - return Je.add(t), () => { - Je.delete(t); - }; - }, t); +var Xe = /*#__PURE__*/ e.forwardRef(Ye); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/CheckCircleIcon.js +function Ze({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" + })); } +var Qe = /*#__PURE__*/ e.forwardRef(Ze); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/interactions/useFocus.mjs -function pt(e) { - let { isDisabled: t, onFocus: n, onBlur: r, onFocusChange: i } = e, a = l((e) => { - if (Ee(e) === e.currentTarget) return r && r(e), i && i(!1), !0; - }, [r, i]), o = Fe(a), s = l((e) => { - let t = Ee(e), r = ve(t), a = r ? Te(r) : Te(); - t === e.currentTarget && t === a && (n && n(e), i && i(!0), o(e)); - }, [ - i, - n, - o - ]); - return { focusProps: { - onFocus: !t && (n || i || r) ? s : void 0, - onBlur: !t && (r || i) ? a : void 0 - } }; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/CheckIcon.js +function $e({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "m4.5 12.75 6 6 9-13.5" + })); } +var et = /*#__PURE__*/ e.forwardRef($e); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/utils/useGlobalListeners.mjs -function mt() { - let e = v(/* @__PURE__ */ new Map()), t = l((t, n, r, i) => { - let a = i?.once ? (...t) => { - e.current.delete(r), r(...t); - } : r; - e.current.set(r, { - type: n, - eventTarget: t, - fn: a, - options: i - }), t.addEventListener(n, a, i); - }, []), n = l((t, n, r, i) => { - let a = e.current.get(r)?.fn || r; - t.removeEventListener(n, a, i), e.current.delete(r); - }, []), r = l(() => { - e.current.forEach((e, t) => { - n(e.eventTarget, e.type, t, e.options); - }); - }, [n]); - return f(() => r, [r]), { - addGlobalListener: t, - removeGlobalListener: n, - removeAllGlobalListeners: r - }; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronDownIcon.js +function tt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "m19.5 8.25-7.5 7.5-7.5-7.5" + })); } +var nt = /*#__PURE__*/ e.forwardRef(tt); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/interactions/useFocusWithin.mjs -function ht(e) { - let { isDisabled: t, onBlurWithin: n, onFocusWithin: r, onFocusWithinChange: i } = e, a = v({ isFocusWithin: !1 }), { addGlobalListener: o, removeAllGlobalListeners: s } = mt(), c = l((e) => { - we(e.currentTarget, Ee(e)) && a.current.isFocusWithin && !we(e.currentTarget, e.relatedTarget) && (a.current.isFocusWithin = !1, s(), n && n(e), i && i(!1)); - }, [ - n, - i, - a, - s - ]), u = Fe(c), d = l((e) => { - if (!we(e.currentTarget, Ee(e))) return; - let t = Ee(e), n = ve(t), s = Te(n); - if (!a.current.isFocusWithin && s === t) { - r && r(e), i && i(!0), a.current.isFocusWithin = !0, u(e); - let t = e.currentTarget; - o(n, "focus", (e) => { - let r = Ee(e); - if (a.current.isFocusWithin && !we(t, r)) { - let e = new n.defaultView.FocusEvent("blur", { relatedTarget: r }); - Pe(e, t); - let i = Ne(e); - c(i); - } - }, { capture: !0 }); - } - }, [ - r, - i, - u, - o, - c - ]); - return t ? { focusWithinProps: { - onFocus: void 0, - onBlur: void 0 - } } : { focusWithinProps: { - onFocus: d, - onBlur: c - } }; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronLeftIcon.js +function rt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M15.75 19.5 8.25 12l7.5-7.5" + })); } +var it = /*#__PURE__*/ e.forwardRef(rt); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/focus/useFocusRing.mjs -function gt(e = {}) { - let { autoFocus: t = !1, isTextInput: n, within: r } = e, i = v({ - isFocused: !1, - isFocusVisible: t || lt() - }), [a, o] = y(!1), [s, c] = y(() => i.current.isFocused && i.current.isFocusVisible), u = l(() => c(i.current.isFocused && i.current.isFocusVisible), []), d = l((e) => { - i.current.isFocused = e, i.current.isFocusVisible = lt(), o(e), u(); - }, [u]); - ft((e) => { - i.current.isFocusVisible = e, u(); - }, [n, a], { - enabled: a, - isTextInput: n - }); - let { focusProps: f } = pt({ - isDisabled: r, - onFocusChange: d - }), { focusWithinProps: p } = ht({ - isDisabled: !r, - onFocusWithinChange: d - }); - return { - isFocused: a, - isFocusVisible: s, - focusProps: r ? p : f - }; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronRightIcon.js +function at({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "m8.25 4.5 7.5 7.5-7.5 7.5" + })); } +var ot = /*#__PURE__*/ e.forwardRef(at); //#endregion -//#region ../../node_modules/.pnpm/react-aria@3.49.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react-aria/dist/private/interactions/useHover.mjs -var _t = !1, vt = 0; -function yt() { - _t = !0, setTimeout(() => { - _t = !1; - }, 500); -} -function bt(e) { - e.pointerType === "touch" && yt(); -} -function xt() { - let e = ve(null); - if (e !== void 0) return vt === 0 && typeof PointerEvent < "u" && e.addEventListener("pointerup", bt), vt++, () => { - vt--, !(vt > 0) && typeof PointerEvent < "u" && e.removeEventListener("pointerup", bt); - }; -} -function St(e) { - let { onHoverStart: t, onHoverChange: n, onHoverEnd: r, isDisabled: i } = e, [a, o] = y(!1), s = v({ - isHovered: !1, - ignoreEmulatedMouseEvents: !1, - pointerType: "", - target: null - }).current; - f(xt, []); - let { addGlobalListener: c, removeAllGlobalListeners: l } = mt(), { hoverProps: u, triggerHoverEnd: d } = g(() => { - let e = (e, r) => { - if (s.pointerType = r, i || r === "touch" || s.isHovered || !we(e.currentTarget, Ee(e))) return; - s.isHovered = !0; - let l = e.currentTarget; - s.target = l, c(ve(Ee(e)), "pointerover", (e) => { - s.isHovered && s.target && !we(s.target, Ee(e)) && a(e, e.pointerType); - }, { capture: !0 }), t && t({ - type: "hoverstart", - target: l, - pointerType: r - }), n && n(!0), o(!0); - }, a = (e, t) => { - let i = s.target; - s.pointerType = "", s.target = null, !(t === "touch" || !s.isHovered || !i) && (s.isHovered = !1, l(), r && r({ - type: "hoverend", - target: i, - pointerType: t - }), n && n(!1), o(!1)); - }, u = {}; - return typeof PointerEvent < "u" && (u.onPointerEnter = (t) => { - _t && t.pointerType === "mouse" || e(t, t.pointerType); - }, u.onPointerLeave = (e) => { - !i && we(e.currentTarget, Ee(e)) && a(e, e.pointerType); - }), { - hoverProps: u, - triggerHoverEnd: a - }; - }, [ - t, - n, - r, - i, - s, - c, - l - ]); - return f(() => { - i && d({ currentTarget: s.target }, s.pointerType); - }, [i]), { - hoverProps: u, - isHovered: a - }; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronUpDownIcon.js +function st({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M8.25 15 12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9" + })); } +var ct = /*#__PURE__*/ e.forwardRef(st); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/env.js -var Ct = Object.defineProperty, wt = (e, t, n) => t in e ? Ct(e, t, { - enumerable: !0, - configurable: !0, - writable: !0, - value: n -}) : e[t] = n, Tt = (e, t, n) => (wt(e, typeof t == "symbol" ? t : t + "", n), n), Et = new class { - constructor() { - Tt(this, "current", this.detect()), Tt(this, "handoffState", "pending"), Tt(this, "currentId", 0); - } - set(e) { - this.current !== e && (this.handoffState = "pending", this.currentId = 0, this.current = e); - } - reset() { - this.set(this.detect()); - } - nextId() { - return ++this.currentId; - } - get isServer() { - return this.current === "server"; - } - get isClient() { - return this.current === "client"; - } - detect() { - return typeof window > "u" || typeof document > "u" ? "server" : "client"; - } - handoff() { - this.handoffState === "pending" && (this.handoffState = "complete"); - } - get isHandoffComplete() { - return this.handoffState === "complete"; - } -}(); -//#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/owner.js -function Dt(e) { - return Et.isServer ? null : e == null ? document : e?.ownerDocument ?? document; -} -function Ot(e) { - return Et.isServer ? null : e == null ? document : (e?.getRootNode)?.call(e) ?? document; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ClipboardDocumentIcon.js +function lt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M8.25 7.5V6.108c0-1.135.845-2.098 1.976-2.192.373-.03.748-.057 1.123-.08M15.75 18H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08M15.75 18.75v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5A3.375 3.375 0 0 0 6.375 7.5H5.25m11.9-3.664A2.251 2.251 0 0 0 15 2.25h-1.5a2.251 2.251 0 0 0-2.15 1.586m5.8 0c.065.21.1.433.1.664v.75h-6V4.5c0-.231.035-.454.1-.664M6.75 7.5H4.875c-.621 0-1.125.504-1.125 1.125v12c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V16.5a9 9 0 0 0-9-9Z" + })); } -function kt(e) { - return Ot(e)?.activeElement ?? null; +var ut = /*#__PURE__*/ e.forwardRef(lt); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ClockIcon.js +function dt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" + })); } -function At(e) { - return kt(e) === e; +var ft = /*#__PURE__*/ e.forwardRef(dt); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/Cog6ToothIcon.js +function pt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z" + }), /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" + })); } +var mt = /*#__PURE__*/ e.forwardRef(pt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/micro-task.js -function jt(e) { - typeof queueMicrotask == "function" ? queueMicrotask(e) : Promise.resolve().then(e).catch((e) => setTimeout(() => { - throw e; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/DocumentDuplicateIcon.js +function ht({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75" })); } +var gt = /*#__PURE__*/ e.forwardRef(ht); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/disposables.js -function Mt() { - let e = [], t = { - addEventListener(e, n, r, i) { - return e.addEventListener(n, r, i), t.add(() => e.removeEventListener(n, r, i)); - }, - requestAnimationFrame(...e) { - let n = requestAnimationFrame(...e); - return t.add(() => cancelAnimationFrame(n)); - }, - nextFrame(...e) { - return t.requestAnimationFrame(() => t.requestAnimationFrame(...e)); - }, - setTimeout(...e) { - let n = setTimeout(...e); - return t.add(() => clearTimeout(n)); - }, - microTask(...e) { - let n = { current: !0 }; - return jt(() => { - n.current && e[0](); - }), t.add(() => { - n.current = !1; - }); - }, - style(e, t, n) { - let r = e.style.getPropertyValue(t); - return Object.assign(e.style, { [t]: n }), this.add(() => { - Object.assign(e.style, { [t]: r }); - }); - }, - group(e) { - let t = Mt(); - return e(t), this.add(() => t.dispose()); - }, - add(t) { - return e.includes(t) || e.push(t), () => { - let n = e.indexOf(t); - if (n >= 0) for (let t of e.splice(n, 1)) t(); - }; - }, - dispose() { - for (let t of e.splice(0)) t(); - } - }; - return t; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/EllipsisHorizontalIcon.js +function _t({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M6.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM12.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM18.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z" + })); } +var vt = /*#__PURE__*/ e.forwardRef(_t); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/hooks/use-disposables.js -function Nt() { - let [e] = y(Mt); - return f(() => () => e.dispose(), [e]), e; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ExclamationTriangleIcon.js +function yt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z" + })); } +var bt = /*#__PURE__*/ e.forwardRef(yt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js -var H = (e, t) => { - Et.isServer ? f(e, t) : h(e, t); -}; -//#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/hooks/use-latest-value.js -function Pt(e) { - let t = v(e); - return H(() => { - t.current = e; - }, [e]), t; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/EyeIcon.js +function xt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z" + }), /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" + })); } +var St = /*#__PURE__*/ e.forwardRef(xt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/hooks/use-event.js -var U = function(e) { - let n = Pt(e); - return t.useCallback((...e) => n.current(...e), [n]); -}; -//#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/hooks/use-active-press.js -function Ft(e) { - let t = e.width / 2, n = e.height / 2; - return { - top: e.clientY - n, - right: e.clientX + t, - bottom: e.clientY + n, - left: e.clientX - t - }; -} -function It(e, t) { - return !(!e || !t || e.right < t.left || e.left > t.right || e.bottom < t.top || e.top > t.bottom); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/FaceSmileIcon.js +function Ct({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M15.182 15.182a4.5 4.5 0 0 1-6.364 0M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0ZM9.75 9.75c0 .414-.168.75-.375.75S9 10.164 9 9.75 9.168 9 9.375 9s.375.336.375.75Zm-.375 0h.008v.015h-.008V9.75Zm5.625 0c0 .414-.168.75-.375.75s-.375-.336-.375-.75.168-.75.375-.75.375.336.375.75Zm-.375 0h.008v.015h-.008V9.75Z" + })); } -function Lt({ disabled: e = !1 } = {}) { - let t = v(null), [n, r] = y(!1), i = Nt(), a = U(() => { - t.current = null, r(!1), i.dispose(); - }), o = U((e) => { - if (i.dispose(), t.current === null) { - t.current = e.currentTarget, r(!0); - { - let n = Dt(e.currentTarget); - i.addEventListener(n, "pointerup", a, !1), i.addEventListener(n, "pointermove", (e) => { - if (t.current) { - let n = Ft(e); - r(It(n, t.current.getBoundingClientRect())); - } - }, !1), i.addEventListener(n, "pointercancel", a, !1); - } - } - }); - return { - pressed: n, - pressProps: e ? {} : { - onPointerDown: o, - onPointerUp: a, - onClick: a - } - }; +var wt = /*#__PURE__*/ e.forwardRef(Ct); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/FlagIcon.js +function Tt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M3 3v1.5M3 21v-6m0 0 2.77-.693a9 9 0 0 1 6.208.682l.108.054a9 9 0 0 0 6.086.71l3.114-.732a48.524 48.524 0 0 1-.005-10.499l-3.11.732a9 9 0 0 1-6.085-.711l-.108-.054a9 9 0 0 0-6.208-.682L3 4.5M3 15V4.5" + })); } +var Et = /*#__PURE__*/ e.forwardRef(Tt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/hooks/use-slot.js -function W(e) { - return g(() => e, Object.values(e)); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/FunnelIcon.js +function Dt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 0 1-.659 1.591l-5.432 5.432a2.25 2.25 0 0 0-.659 1.591v2.927a2.25 2.25 0 0 1-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 0 0-.659-1.591L3.659 7.409A2.25 2.25 0 0 1 3 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0 1 12 3Z" + })); } +var Ot = /*#__PURE__*/ e.forwardRef(Dt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/internal/disabled.js -var Rt = i(void 0); -function zt() { - return u(Rt); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/InformationCircleIcon.js +function kt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z" + })); } +var At = /*#__PURE__*/ e.forwardRef(kt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/class-names.js -function Bt(...e) { - return Array.from(new Set(e.flatMap((e) => typeof e == "string" ? e.split(" ") : []))).filter(Boolean).join(" "); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/LinkIcon.js +function jt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244" + })); } +var Mt = /*#__PURE__*/ e.forwardRef(jt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/match.js -function Vt(e, t, ...n) { - if (e in t) { - let r = t[e]; - return typeof r == "function" ? r(...n) : r; - } - let r = /* @__PURE__ */ Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map((e) => `"${e}"`).join(", ")}.`); - throw Error.captureStackTrace && Error.captureStackTrace(r, Vt), r; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/LockClosedIcon.js +function Nt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" + })); } +var Pt = /*#__PURE__*/ e.forwardRef(Nt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/render.js -var Ht = ((e) => (e[e.None = 0] = "None", e[e.RenderStrategy = 1] = "RenderStrategy", e[e.Static = 2] = "Static", e))(Ht || {}), Ut = ((e) => (e[e.Unmount = 0] = "Unmount", e[e.Hidden = 1] = "Hidden", e))(Ut || {}); -function G() { - let e = Kt(); - return l((t) => Wt({ - mergeRefs: e, - ...t - }), [e]); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/MagnifyingGlassIcon.js +function Ft({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" + })); } -function Wt({ ourProps: e, theirProps: t, slot: n, defaultTag: r, features: i, visible: a = !0, name: o, mergeRefs: s }) { - s ??= qt; - let c = Jt(t, e); - if (a) return Gt(c, n, r, o, s); - let l = i ?? 0; - if (l & 2) { - let { static: e = !1, ...t } = c; - if (e) return Gt(t, n, r, o, s); - } - if (l & 1) { - let { unmount: e = !0, ...t } = c; - return Vt(+!e, { - 0() { - return null; - }, - 1() { - return Gt({ - ...t, - hidden: !0, - style: { display: "none" } - }, n, r, o, s); - } - }); - } - return Gt(c, n, r, o, s); -} -function Gt(e, t = {}, n, i, o) { - let { as: s = n, children: l, refName: u = "ref", ...d } = Zt(e, ["unmount", "static"]), f = e.ref === void 0 ? {} : { [u]: e.ref }, p = typeof l == "function" ? l(t) : l; - p = $t(p), "className" in d && d.className && typeof d.className == "function" && (d.className = d.className(t)), d["aria-labelledby"] && d["aria-labelledby"] === d.id && (d["aria-labelledby"] = void 0); - let m = {}; - if (t) { - let e = !1, n = []; - for (let [r, i] of Object.entries(t)) typeof i == "boolean" && (e = !0), i === !0 && n.push(r.replace(/([A-Z])/g, (e) => `-${e.toLowerCase()}`)); - if (e) { - m["data-headlessui-state"] = n.join(" "); - for (let e of n) m[`data-${e}`] = ""; - } - } - if (en(s) && (Object.keys(Xt(d)).length > 0 || Object.keys(Xt(m)).length > 0)) if (!c(p) || Array.isArray(p) && p.length > 1 || tn(p)) { - if (Object.keys(Xt(d)).length > 0) throw Error([ - "Passing props on \"Fragment\"!", - "", - `The current component <${i} /> is rendering a "Fragment".`, - "However we need to passthrough the following props:", - Object.keys(Xt(d)).concat(Object.keys(Xt(m))).map((e) => ` - ${e}`).join("\n"), - "", - "You can apply a few solutions:", - ["Add an `as=\"...\"` prop, to ensure that we render an actual element instead of a \"Fragment\".", "Render a single element as the child so that we can forward the props onto that element."].map((e) => ` - ${e}`).join("\n") - ].join("\n")); - } else { - let e = p.props?.className, t = typeof e == "function" ? (...t) => Bt(e(...t), d.className) : Bt(e, d.className), n = t ? { className: t } : {}, i = Jt(p.props, Xt(Zt(d, ["ref"]))); - for (let e in m) e in i && delete m[e]; - return r(p, Object.assign({}, i, m, f, { ref: o(Qt(p), f.ref) }, n)); - } - return a(s, Object.assign({}, Zt(d, ["ref"]), !en(s) && f, !en(s) && m), p); -} -function Kt() { - let e = v([]), t = l((t) => { - for (let n of e.current) n != null && (typeof n == "function" ? n(t) : n.current = t); - }, []); - return (...n) => { - if (!n.every((e) => e == null)) return e.current = n, t; - }; -} -function qt(...e) { - return e.every((e) => e == null) ? void 0 : (t) => { - for (let n of e) n != null && (typeof n == "function" ? n(t) : n.current = t); - }; -} -function Jt(...e) { - if (e.length === 0) return {}; - if (e.length === 1) return e[0]; - let t = {}, n = {}; - for (let r of e) for (let e in r) e.startsWith("on") && typeof r[e] == "function" ? (n[e] ?? (n[e] = []), n[e].push(r[e])) : t[e] = r[e]; - if (t.disabled || t["aria-disabled"]) for (let e in n) /^(on(?:Click|Pointer|Mouse|Key)(?:Down|Up|Press)?)$/.test(e) && (n[e] = [(e) => (e?.preventDefault)?.call(e)]); - for (let e in n) Object.assign(t, { [e](t, ...r) { - let i = n[e]; - for (let e of i) { - if ((t instanceof Event || t?.nativeEvent instanceof Event) && t.defaultPrevented) return; - e(t, ...r); - } - } }); - return t; -} -function Yt(...e) { - if (e.length === 0) return {}; - if (e.length === 1) return e[0]; - let t = {}, n = {}; - for (let r of e) for (let e in r) e.startsWith("on") && typeof r[e] == "function" ? (n[e] ?? (n[e] = []), n[e].push(r[e])) : t[e] = r[e]; - for (let e in n) Object.assign(t, { [e](...t) { - let r = n[e]; - for (let e of r) e?.(...t); - } }); - return t; -} -function K(e) { - return Object.assign(s(e), { displayName: e.displayName ?? e.name }); -} -function Xt(e) { - let t = Object.assign({}, e); - for (let e in t) t[e] === void 0 && delete t[e]; - return t; -} -function Zt(e, t = []) { - let n = Object.assign({}, e); - for (let e of t) e in n && delete n[e]; - return n; -} -function Qt(e) { - return t.version.split(".")[0] >= "19" ? e.props.ref : e.ref; -} -function $t(e) { - if (e != null && e.$$typeof === Symbol.for("react.lazy")) { - let t = e._payload; - if (t != null && t.status === "fulfilled") return $t(t.value); - } - return e; -} -function en(e) { - return e === n || e === Symbol.for("react.fragment"); -} -function tn(e) { - return en(e.type); +var It = /*#__PURE__*/ e.forwardRef(Ft); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/PaperClipIcon.js +function Lt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "m18.375 12.739-7.693 7.693a4.5 4.5 0 0 1-6.364-6.364l10.94-10.94A3 3 0 1 1 19.5 7.372L8.552 18.32m.009-.01-.01.01m5.699-9.941-7.81 7.81a1.5 1.5 0 0 0 2.112 2.13" + })); } +var Rt = /*#__PURE__*/ e.forwardRef(Lt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/hooks/use-controllable.js -function nn(e, t, n) { - let [r, i] = y(n), a = e !== void 0, o = v(a), s = v(!1), c = v(!1); - return a && !o.current && !s.current ? (s.current = !0, o.current = a, console.error("A component is changing from uncontrolled to controlled. This may be caused by the value changing from undefined to a defined value, which should not happen.")) : !a && o.current && !c.current && (c.current = !0, o.current = a, console.error("A component is changing from controlled to uncontrolled. This may be caused by the value changing from a defined value to undefined, which should not happen.")), [a ? e : r, U((e) => (a || E(() => i(e)), t?.(e)))]; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/PencilSquareIcon.js +function zt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10" + })); } +var Bt = /*#__PURE__*/ e.forwardRef(zt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/hooks/use-default-value.js -function rn(e) { - let [t] = y(e); - return t; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/PencilIcon.js +function Vt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" + })); } +var Ht = /*#__PURE__*/ e.forwardRef(Vt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/form.js -function an(e = {}, t = null, n = []) { - for (let [r, i] of Object.entries(e)) sn(n, on(t, r), i); - return n; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/PlusIcon.js +function Ut({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M12 4.5v15m7.5-7.5h-15" + })); } -function on(e, t) { - return e ? e + "[" + t + "]" : t; +var Wt = /*#__PURE__*/ e.forwardRef(Ut); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/RectangleGroupIcon.js +function Gt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M2.25 7.125C2.25 6.504 2.754 6 3.375 6h6c.621 0 1.125.504 1.125 1.125v3.75c0 .621-.504 1.125-1.125 1.125h-6a1.125 1.125 0 0 1-1.125-1.125v-3.75ZM14.25 8.625c0-.621.504-1.125 1.125-1.125h5.25c.621 0 1.125.504 1.125 1.125v8.25c0 .621-.504 1.125-1.125 1.125h-5.25a1.125 1.125 0 0 1-1.125-1.125v-8.25ZM3.75 16.125c0-.621.504-1.125 1.125-1.125h5.25c.621 0 1.125.504 1.125 1.125v2.25c0 .621-.504 1.125-1.125 1.125h-5.25a1.125 1.125 0 0 1-1.125-1.125v-2.25Z" + })); } -function sn(e, t, n) { - if (Array.isArray(n)) for (let [r, i] of n.entries()) sn(e, on(t, r.toString()), i); - else n instanceof Date ? e.push([t, n.toISOString()]) : typeof n == "boolean" ? e.push([t, n ? "1" : "0"]) : typeof n == "string" ? e.push([t, n]) : typeof n == "number" ? e.push([t, `${n}`]) : n == null ? e.push([t, ""]) : ln(n) && !c(n) && an(n, t, e); +var Kt = /*#__PURE__*/ e.forwardRef(Gt); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/RectangleStackIcon.js +function qt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M6 6.878V6a2.25 2.25 0 0 1 2.25-2.25h7.5A2.25 2.25 0 0 1 18 6v.878m-12 0c.235-.083.487-.128.75-.128h10.5c.263 0 .515.045.75.128m-12 0A2.25 2.25 0 0 0 4.5 9v.878m13.5-3A2.25 2.25 0 0 1 19.5 9v.878m0 0a2.246 2.246 0 0 0-.75-.128H5.25c-.263 0-.515.045-.75.128m15 0A2.25 2.25 0 0 1 21 12v6a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18v-6c0-.98.626-1.813 1.5-2.122" + })); } -function cn(e) { - var t; - let n = e?.form ?? e.closest("form"); - if (n) { - for (let t of n.elements) if (t !== e && (t.tagName === "INPUT" && t.type === "submit" || t.tagName === "BUTTON" && t.type === "submit" || t.nodeName === "INPUT" && t.type === "image")) { - t.click(); - return; - } - (t = n.requestSubmit) == null || t.call(n); - } +var Jt = /*#__PURE__*/ e.forwardRef(qt); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/Squares2X2Icon.js +function Yt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M3.75 6A2.25 2.25 0 0 1 6 3.75h2.25A2.25 2.25 0 0 1 10.5 6v2.25a2.25 2.25 0 0 1-2.25 2.25H6a2.25 2.25 0 0 1-2.25-2.25V6ZM3.75 15.75A2.25 2.25 0 0 1 6 13.5h2.25a2.25 2.25 0 0 1 2.25 2.25V18a2.25 2.25 0 0 1-2.25 2.25H6A2.25 2.25 0 0 1 3.75 18v-2.25ZM13.5 6a2.25 2.25 0 0 1 2.25-2.25H18A2.25 2.25 0 0 1 20.25 6v2.25A2.25 2.25 0 0 1 18 10.5h-2.25a2.25 2.25 0 0 1-2.25-2.25V6ZM13.5 15.75a2.25 2.25 0 0 1 2.25-2.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-2.25A2.25 2.25 0 0 1 13.5 18v-2.25Z" + })); } -function ln(e) { - if (Object.prototype.toString.call(e) !== "[object Object]") return !1; - let t = Object.getPrototypeOf(e); - return t === null || Object.getPrototypeOf(t) === null; +var Xt = /*#__PURE__*/ e.forwardRef(Yt); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/TableCellsIcon.js +function Zt({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 0 1-1.125-1.125M3.375 19.5h7.5c.621 0 1.125-.504 1.125-1.125m-9.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-7.5A1.125 1.125 0 0 1 12 18.375m9.75-12.75c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125m19.5 0v1.5c0 .621-.504 1.125-1.125 1.125M2.25 5.625v1.5c0 .621.504 1.125 1.125 1.125m0 0h17.25m-17.25 0h7.5c.621 0 1.125.504 1.125 1.125M3.375 8.25c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m17.25-3.75h-7.5c-.621 0-1.125.504-1.125 1.125m8.625-1.125c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125M12 10.875v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 10.875c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125M13.125 12h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125M20.625 12c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5M12 14.625v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 14.625c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125m0 1.5v-1.5m0 0c0-.621.504-1.125 1.125-1.125m0 0h7.5" + })); } +var Qt = /*#__PURE__*/ e.forwardRef(Zt); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/internal/hidden.js -var un = "span", dn = ((e) => (e[e.None = 1] = "None", e[e.Focusable = 2] = "Focusable", e[e.Hidden = 4] = "Hidden", e))(dn || {}); -function fn(e, t) { - let { features: n = 1, ...r } = e, i = { - ref: t, - "aria-hidden": (n & 2) == 2 ? !0 : r["aria-hidden"] ?? void 0, - hidden: (n & 4) == 4 || void 0, - style: { - position: "fixed", - top: 1, - left: 1, - width: 1, - height: 0, - padding: 0, - margin: -1, - overflow: "hidden", - clip: "rect(0, 0, 0, 0)", - whiteSpace: "nowrap", - borderWidth: "0", - ...(n & 4) == 4 && (n & 2) != 2 && { display: "none" } - } - }; - return G()({ - ourProps: i, - theirProps: r, - slot: {}, - defaultTag: un, - name: "Hidden" - }); -} -var pn = K(fn), mn = i(null); -function hn({ children: e }) { - let n = u(mn); - if (!n) return t.createElement(t.Fragment, null, e); - let { target: r } = n; - return r ? T(t.createElement(t.Fragment, null, e), r) : null; -} -function gn({ data: e, form: n, disabled: r, onReset: i, overrides: a }) { - let [o, s] = y(null), c = Nt(); - return f(() => { - if (i && o) return c.addEventListener(o, "reset", i); - }, [ - o, - n, - i - ]), t.createElement(hn, null, t.createElement(_n, { - setForm: s, - formId: n - }), an(e).map(([e, i]) => t.createElement(pn, { - features: dn.Hidden, - ...Xt({ - key: e, - as: "input", - type: "hidden", - hidden: !0, - readOnly: !0, - form: n, - disabled: r, - name: e, - value: i, - ...a - }) - }))); -} -function _n({ setForm: e, formId: n }) { - return f(() => { - if (n) { - let t = document.getElementById(n); - t && e(t); - } - }, [e, n]), n ? null : t.createElement(pn, { - features: dn.Hidden, - as: "input", - type: "hidden", - hidden: !0, - readOnly: !0, - ref: (t) => { - if (!t) return; - let n = t.closest("form"); - n && e(n); - } - }); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/TagIcon.js +function $t({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z" + }), /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M6 6h.008v.008H6V6Z" + })); } +var en = /*#__PURE__*/ e.forwardRef($t); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/internal/id.js -var vn = i(void 0); -function yn() { - return u(vn); +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/TrashIcon.js +function tn({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" + })); } +var nn = /*#__PURE__*/ e.forwardRef(tn); //#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/dom.js -function bn(e) { - return typeof e != "object" || !e ? !1 : "nodeType" in e; -} -function xn(e) { - return bn(e) && "tagName" in e; +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/UserCircleIcon.js +function rn({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M17.982 18.725A7.488 7.488 0 0 0 12 15.75a7.488 7.488 0 0 0-5.982 2.975m11.963 0a9 9 0 1 0-11.963 0m11.963 0A8.966 8.966 0 0 1 12 21a8.966 8.966 0 0 1-5.982-2.275M15 9.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" + })); } -function Sn(e) { - return xn(e) && "accessKey" in e; +var an = /*#__PURE__*/ e.forwardRef(rn); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/UserIcon.js +function on({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z" + })); } -function Cn(e) { - return xn(e) && "tabIndex" in e; +var sn = /*#__PURE__*/ e.forwardRef(on); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ViewColumnsIcon.js +function cn({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M9 4.5v15m6-15v15m-10.875 0h15.75c.621 0 1.125-.504 1.125-1.125V5.625c0-.621-.504-1.125-1.125-1.125H4.125C3.504 4.5 3 5.004 3 5.625v12.75c0 .621.504 1.125 1.125 1.125Z" + })); } -function wn(e) { - return xn(e) && "style" in e; +var ln = /*#__PURE__*/ e.forwardRef(cn); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js +function un({ title: t, titleId: n, ...r }, i) { + return /*#__PURE__*/ e.createElement("svg", Object.assign({ + xmlns: "http://www.w3.org/2000/svg", + fill: "none", + viewBox: "0 0 24 24", + strokeWidth: 1.5, + stroke: "currentColor", + "aria-hidden": "true", + "data-slot": "icon", + ref: i, + "aria-labelledby": n + }, r), t ? /*#__PURE__*/ e.createElement("title", { id: n }, t) : null, /*#__PURE__*/ e.createElement("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + d: "M6 18 18 6M6 6l12 12" + })); } -function Tn(e) { - return Sn(e) && e.nodeName === "IFRAME"; +var dn = /*#__PURE__*/ e.forwardRef(un); +//#endregion +//#region ../../shared/lib/frontmatter.ts +function fn(e) { + if (!e.startsWith("---\n") && !e.startsWith("---\r\n")) return { + data: {}, + body: e, + hasFrontmatter: !1 + }; + let t = e.replace(/\r\n/g, "\n"), n = t.indexOf("\n---", 4); + if (n === -1) return { + data: {}, + body: e, + hasFrontmatter: !1 + }; + let r = t.slice(4, n).trim(), i = t.slice(n + 4).replace(/^\n/, ""), a = {}; + for (let e of r.split("\n")) { + let t = e.indexOf(":"); + if (t > 0) { + let n = e.slice(0, t).trim(); + a[n] = e.slice(t + 1).trim().replace(/^["']|["']$/g, ""); + } + } + return { + data: a, + body: i, + hasFrontmatter: !0 + }; } -function En(e) { - return Sn(e) && e.nodeName === "INPUT"; +function pn(e, t) { + let n = fn(e), r = { + ...n.data, + ...t + }; + return `---\n${Object.entries(r).filter(([, e]) => e !== "").map(([e, t]) => `${e}: ${t}`).join("\n")}\n---\n\n${n.body.trimStart()}`; } -function Dn(e) { - return Sn(e) && e.nodeName === "LABEL"; +//#endregion +//#region ../../shared/lib/board.ts +function mn(e) { + return e.split(",").map((e) => e.trim()).filter(Boolean); } -function On(e) { - return Sn(e) && e.nodeName === "FIELDSET"; +function hn(e) { + return e.join(", "); } -function kn(e) { - return Sn(e) && e.nodeName === "LEGEND"; +var gn = /* @__PURE__ */ new Set([ + "id", + "relationKey", + "board", + "ticket", + "title", + "status", + "columnKey", + "position", + "priority", + "assignee", + "swimlane", + "swimlaneKey", + "due", + "icon", + "tags", + "attachments", + "notes", + "taskDone", + "taskTotal", + "excerpt", + "blocked_by", + "blockedBy", + "blocks", + "relates", + "parent" +]); +function _n(e, t) { + let { data: n, body: r } = fn(e), i = { ...n }; + if (t.title !== void 0 && (i.title = t.title), t.columnKey !== void 0 && (i.status = t.columnKey), t.priority !== void 0 && (i.priority = t.priority ?? ""), t.assignee !== void 0 && (i.assignee = t.assignee ?? ""), t.swimlaneKey !== void 0 && (i.swimlane = t.swimlaneKey ?? ""), t.due !== void 0 && (i.due = t.due ?? ""), t.icon !== void 0 && (i.icon = t.icon ?? ""), t.tags !== void 0 && (i.tags = t.tags.map((e) => e.label).join(", ")), t.attachments !== void 0 && (i.attachments = hn(t.attachments)), t.custom !== void 0) for (let [e, n] of Object.entries(t.custom)) gn.has(e) || (i[e] = n ?? ""); + return t.blockedBy !== void 0 && (i.blocked_by = Pn(t.blockedBy)), t.blocks !== void 0 && (i.blocks = Pn(t.blocks)), t.relates !== void 0 && (i.relates = Pn(t.relates)), t.parent !== void 0 && (i.parent = t.parent ? Pn([t.parent]) : ""), pn(t.notes === void 0 ? r : t.notes, i); } -function An(e) { - return xn(e) ? e.matches("a[href],audio[controls],button,details,embed,iframe,img[usemap],input:not([type=\"hidden\"]),label,select,textarea,video[controls]") : !1; +function vn(e) { + let t = e.split(/[\\/]/).pop() || e; + try { + return decodeURIComponent(t.split("?")[0] || t); + } catch { + return t; + } } -//#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/utils/bugs.js -function jn(e) { - let t = e.parentElement, n = null; - for (; t && !On(t);) kn(t) && (n = t), t = t.parentElement; - let r = t?.getAttribute("disabled") === ""; - return r && Mn(n) ? !1 : r; +function yn(e) { + let t = e.trim(); + if (!t) return !1; + let n = /^([a-z][a-z0-9+.-]*):/i.exec(t); + if (!n) return !0; + let r = n[1].toLowerCase(); + return r === "http" || r === "https"; } -function Mn(e) { - if (!e) return !1; - let t = e.previousElementSibling; - for (; t !== null;) { - if (kn(t)) return !1; - t = t.previousElementSibling; +function bn(e, t) { + let n = {}; + if (!e || !t) return n; + for (let r of t) { + let t = e[r.key]; + t !== void 0 && t !== "" && (n[r.key] = t); } - return !0; -} -//#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/hooks/use-sync-refs.js -var Nn = Symbol(); -function Pn(e, t = !0) { - return Object.assign(e, { [Nn]: t }); + return n; } -function q(...e) { - let t = v(e); - f(() => { - t.current = e; - }, [e]); - let n = U((e) => { - for (let n of t.current) n != null && (typeof n == "function" ? n(e) : n.current = e); - }); - return e.every((e) => e == null || e?.[Nn]) ? void 0 : n; -} -//#endregion -//#region ../../node_modules/.pnpm/@headlessui+react@2.2.10_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@headlessui/react/dist/components/description/description.js -var Fn = i(null); -Fn.displayName = "DescriptionContext"; -function In() { - let e = u(Fn); - if (e === null) { - let e = /* @__PURE__ */ Error("You used a component, but it is not inside a relevant parent."); - throw Error.captureStackTrace && Error.captureStackTrace(e, In), e; +var xn = [ + "none", + "low", + "medium", + "high", + "urgent" +], Sn = [ + "urgent", + "high", + "medium", + "low", + "none" +], Cn = { + urgent: 0, + high: 1, + medium: 2, + low: 3, + none: 4 +}, wn = { + urgent: "bg-red-100 text-red-700", + high: "bg-amber-100 text-amber-700", + medium: "bg-sky-100 text-sky-700", + low: "bg-stone-100 text-stone-500" +}, Tn = [ + "#ef4444", + "#f59e0b", + "#eab308", + "#22c55e", + "#0ea5e9", + "#6366f1", + "#a855f7", + "#ec4899", + "#78716c" +], En = [ + "title", + "relationKey", + "board", + "status", + "position", + "priority", + "assignee", + "swimlane", + "due", + "tags", + "icon", + "blocked_by", + "blocks", + "relates", + "attachments", + "parent" +]; +function Dn(e) { + let t = 0, n = 0; + for (let r of e.split("\n")) { + let e = r.replace(/^\s+/, "").match(/^[-*+] \[([ xX])\]/); + e && (n += 1, e[1]?.toLowerCase() === "x" && (t += 1)); } - return e; -} -function Ln() { - return u(Fn)?.value ?? void 0; -} -function Rn() { - let [e, n] = y([]); - return [e.length > 0 ? e.join(" ") : void 0, g(() => function(e) { - let r = U((e) => (n((t) => [...t, e]), () => n((t) => { - let n = t.slice(), r = n.indexOf(e); - return r !== -1 && n.splice(r, 1), n; - }))), i = g(() => ({ - register: r, - slot: e.slot, - name: e.name, - props: e.props, - value: e.value - }), [ - r, - e.slot, - e.name, - e.props, - e.value - ]); - return t.createElement(Fn.Provider, { value: i }, e.children); - }, [n])]; -} -var zn = "p"; -function Bn(e, t) { - let n = m(), r = zt(), { id: i = `headlessui-description-${n}`, ...a } = e, o = In(), s = q(t); - H(() => o.register(i), [i, o.register]); - let c = W({ - ...o.slot, - disabled: r || !1 - }), l = { - ref: s, - ...o.props, - id: i + return { + done: t, + total: n }; - return G()({ - ourProps: l, - theirProps: a, - slot: c, - defaultTag: zn, - name: o.name || "Description" - }); } -var Vn = K(Bn), Hn = Object.assign(Vn, {}), J = ((e) => (e.Space = " ", e.Enter = "Enter", e.Escape = "Escape", e.Backspace = "Backspace", e.Delete = "Delete", e.ArrowLeft = "ArrowLeft", e.ArrowUp = "ArrowUp", e.ArrowRight = "ArrowRight", e.ArrowDown = "ArrowDown", e.Home = "Home", e.End = "End", e.PageUp = "PageUp", e.PageDown = "PageDown", e.Tab = "Tab", e))(J || {}), Un = i(null); -Un.displayName = "LabelContext"; -function Wn() { - let e = u(Un); - if (e === null) { - let e = /* @__PURE__ */ Error("You used a