From 132cfc1cbb98ad9f9bffebf45fa39a91ae0b9312 Mon Sep 17 00:00:00 2001 From: jack Date: Thu, 30 Jul 2026 11:55:44 +0800 Subject: [PATCH 1/2] feat(kanban): redesign status workflow and filters --- AGENTS.md | 138 + .../status-columns-filter-redesign.png | Bin 0 -> 80403 bytes .../mockups/status-management-redesign.png | Bin 0 -> 100129 bytes .../kanban/status-columns-filter-redesign.md | 110 + packages/board-react/README.md | 15 +- packages/board-react/dist/index.d.ts | 4 +- packages/board-react/dist/index.js | 2741 +++++++++-------- packages/board-react/dist/style.css | 2 +- packages/board-react/src/JTypeBoard.tsx | 4 + packages/board-react/src/strings.ts | 8 +- .../articles/kanban-boards-and-cards.en.md | 8 +- .../articles/kanban-boards-and-cards.ts | 6 +- .../articles/kanban-boards-and-cards.zh.md | 8 +- .../articles/kanban-embed-your-board.en.md | 3 +- .../articles/kanban-embed-your-board.ts | 6 +- .../articles/kanban-embed-your-board.zh.md | 3 +- .../articles/kanban-web-board-view.en.md | 17 +- .../content/articles/kanban-web-board-view.ts | 6 +- .../articles/kanban-web-board-view.zh.md | 17 +- .../components/board/BoardFilterPopover.tsx | 321 ++ shared/components/board/BoardPeek.tsx | 2 +- shared/components/board/BoardSurface.tsx | 146 +- shared/components/board/BoardSwimlanes.tsx | 12 +- .../components/board/LaneDetailsPopover.tsx | 12 +- .../components/board/StatusManagerDialog.tsx | 13 +- .../board/SwimlaneConversionDialog.tsx | 16 +- .../components/board/SwimlaneDeleteDialog.tsx | 10 +- .../board/SwimlaneManagerDialog.tsx | 24 +- shared/components/board/types.ts | 2 +- shared/i18n/locales/en/messages.mjs | 2 +- shared/i18n/locales/en/messages.po | 500 ++- shared/i18n/locales/ja/messages.mjs | 2 +- shared/i18n/locales/ja/messages.po | 487 ++- shared/i18n/locales/ko/messages.mjs | 2 +- shared/i18n/locales/ko/messages.po | 445 ++- shared/i18n/locales/zh/messages.mjs | 2 +- shared/i18n/locales/zh/messages.po | 485 ++- shared/lib/board.ts | 158 +- tests/e2e/app.spec.ts | 59 + tests/e2e/board-swimlanes.spec.ts | 83 +- tests/e2e/web-dashboard.spec.ts | 56 +- tests/fixtures/board-swimlanes.tsx | 11 +- tests/unit/boardFilters.spec.ts | 99 + 43 files changed, 4227 insertions(+), 1818 deletions(-) create mode 100644 internal-docs/kanban/mockups/status-columns-filter-redesign.png create mode 100644 internal-docs/kanban/mockups/status-management-redesign.png create mode 100644 internal-docs/kanban/status-columns-filter-redesign.md create mode 100644 shared/components/board/BoardFilterPopover.tsx create mode 100644 tests/unit/boardFilters.spec.ts diff --git a/AGENTS.md b/AGENTS.md index 114cd0e9..ff420c84 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -220,3 +220,141 @@ Shared component CSS classes live in `shared/styles/components.css`. Both fronte - Changes to `shared/` affect both Desktop and Web. Verify both builds pass. - When adding a new shared component, follow the Props-in/Callbacks-out pattern. - When a shared component needs platform-specific behavior, add a slot prop — do not add platform detection. + +## New Feature Workflow + +Do not assume that every feature belongs on every surface. Before implementation, +analyze where the capability belongs, which layers it affects, what can be +shared, and which artifacts or documentation must follow it. The result may be +Desktop-only, Web-only, shared across both, package-only, or backend-only. + +### 1. Feature Impact Analysis + +Before editing code, add an impact matrix to the implementation notes or PR. +Mark every row **Yes**, **No**, or **N/A**, and give a short reason. A "No" +decision is valid; it just must be deliberate. + +| Area | Questions to answer | +|------|---------------------| +| Desktop app | Does this support local-first/offline vault work, local files, Tauri capabilities, or a focused desktop workflow? What is its entry point and persistence adapter? | +| Web app | Does this require cloud workspaces, collaboration, members/roles, admin, publishing, browser access, or server-owned data? What is its entry point and permission behavior? | +| Shared model/utilities | Do Desktop, Web, the board package, CLI, MCP, or backend need the same types, validation, IDs, parsing, or transformations? | +| Shared UI | Is the interaction and information architecture materially the same on Desktop and Web? Can it stay props-in/callbacks-out without platform branches? | +| Web service/API | Does it change HTTP contracts, auth, persistence, migrations, events, sync, conflicts, budgets, webhooks, or storage? | +| `packages/board-react` | Does the embeddable Kanban package expose or persist the affected board capability? Does its public API, types, bundle, example, or README need to change? | +| CLI/MCP | Should automation or headless users be able to read or mutate the feature? Do tool schemas or help text need updates? | +| In-app Help | Does the feature add or change a user-visible workflow, setting, limitation, or concept covered by the Help Center? | +| Other docs | Do README, API docs, internal design docs, screenshots, examples, or release notes become inaccurate? | +| Release/deployment | Which artifacts must be rebuilt or promoted: Desktop installers, Web image, board package, CLI binaries, or none? | + +Use repository searches to support the matrix. Do not infer that a change is +isolated from its filename. + +### 2. Surface Decision Rules + +Choose surfaces based on product responsibility, not symmetry: + +- Prefer **Desktop** for local vault and filesystem workflows, offline behavior, + native OS integration, and single-file editing. +- Prefer **Web** for cloud collaboration, member/role-aware behavior, admin, + publishing, and server-only capabilities. +- Implement on **both** when the same user-owned document or board can be opened + and edited on both surfaces and inconsistent behavior would corrupt, hide, or + surprise users. +- A feature can intentionally differ by surface. Keep the domain model + compatible, then document the UX difference and its reason. +- Do not add placeholder UI to a surface that cannot provide the real behavior. + +For each affected surface, define the entry point, default/empty state, +existing-data state, read-only/permission state, persistence path, error +recovery, and user-visible acceptance criteria. + +### 3. Decide What To Share + +Share the smallest stable layer that is genuinely common: + +- Put common types, parsing, validation, stable IDs, migrations, and pure + transformations in `shared/lib/` when multiple consumers need them. +- Put UI in `shared/components/` only when Desktop and Web have substantially + the same interaction. Shared UI must remain props-in/callbacks-out. +- Keep platform data access in adapters: Tauri/filesystem behavior in `src/`, + Web API behavior in `services/jtype-web/frontend/src/`. +- If workflows differ, share primitives or the domain model instead of forcing + a single component full of platform conditionals. +- A shared component is not proof of integration. Each selected host still + needs an explicit entry point, adapter, and persistence test. + +### 4. Decide Whether Kanban Package Changes + +Update `packages/board-react` when the feature changes board data or behavior +that external embedded boards should expose. In that case: + +- Update package source, public props/types, adapters, and localized strings as + applicable. +- Update `packages/board-react/README.md` and the example when consumers need new + setup or behavior guidance. +- Rebuild the checked-in `packages/board-react/dist/` output. +- Run `npm run build` and `npm test` from `packages/board-react/`. + +Do not update the package for app-shell-only behavior, Desktop filesystem +features, Web admin UI, or other capabilities the embeddable board cannot use. +Record that decision in the impact matrix. + +### 5. Decide Whether Documentation Changes + +Update documentation when the feature changes what a user can do, how they find +it, its data model, configuration, permissions, limitations, or recovery flow. + +- In-app Help lives in + `services/jtype-web/frontend/src/help/content/`. Update the relevant article + source and maintained locale variants when the user workflow changes. +- Update `packages/board-react/README.md` for public package behavior. +- Update API docs for contract or tool changes. +- Update internal design/ADR material when the architectural decision changes. +- Update screenshots, examples, and release notes when old material would + misrepresent the product. + +Docs are not required for invisible refactors with no behavior or contract +change. State why docs are unchanged in the impact matrix. + +### 6. Implement And Test The Selected Scope + +Implementation and verification follow the matrix; unaffected surfaces are not +modified merely for parity. + +- Add unit tests for shared models and transformations. +- Add a real Desktop entry-point/persistence test when Desktop is **Yes**. +- Add a real Web entry-point/API persistence test when Web is **Yes**. +- Add package tests and rebuild `dist/` when `packages/board-react` is **Yes**. +- Add API/Rust tests when service contracts or persistence are **Yes**. +- Test discoverability from the normal default state, not only a fixture where + the feature is already enabled. +- A shared fixture is useful for component behavior but does not replace the + selected host integration tests. + +### 7. Review, Release, And Verify + +- The PR must include the completed impact matrix, acceptance criteria, tests + run, documentation decisions, migration notes, and visuals for each changed UI + surface. +- Review the user flow from its real entry point and default state. +- Build and release only the affected artifacts identified in the matrix. +- Verify every released artifact comes from a commit containing the change. +- Promote Kubernetes changes with an explicit context and namespace. +- `/health` proves service availability, not feature completion. Run a + feature-specific smoke test on every promoted or published surface, including + persistence after reload where applicable. + +### Definition Of Done + +A feature is complete when: + +- Every impact area has a Yes/No/N/A decision with rationale. +- Every **Yes** area is implemented, tested, documented, and released as needed. +- Shared code is used only where the model or interaction is genuinely shared. +- Every selected UI surface exposes the feature from a discoverable real entry + point and handles its relevant states. +- Package bundles, public types, examples, and Help content are updated when + their impact rows are **Yes**. +- Feature-specific verification passes on the artifacts and environments that + were actually released. diff --git a/internal-docs/kanban/mockups/status-columns-filter-redesign.png b/internal-docs/kanban/mockups/status-columns-filter-redesign.png new file mode 100644 index 0000000000000000000000000000000000000000..378ab6ba370b6a1f92c3174f19ef72251f17daba GIT binary patch literal 80403 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.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
>bZ*`@^rFfvXq&W)d-u-^w! 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

y5*gGnsWSG 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 z%0A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 void` | — | Intercept card opens; replaces the built-in read-only detail panel. | @@ -130,9 +132,10 @@ successful poll. ## MVP scope -Included: column + card rendering, drag to move/reorder cards (frontmatter -`status`/`position` writeback), card create/delete, board/table/calendar and -swimlane views, search/filter/sort, read-only card detail, localized chrome. +Included: status-column management, drag to move/reorder cards (frontmatter +`status`/`position` writeback), card create/delete, board/table/calendar, +optional horizontal rows, multi-select filters, search/sort, read-only card +detail, and localized chrome. 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`), diff --git a/packages/board-react/dist/index.d.ts b/packages/board-react/dist/index.d.ts index 63cbca9d..7096fb01 100644 --- a/packages/board-react/dist/index.d.ts +++ b/packages/board-react/dist/index.d.ts @@ -159,7 +159,7 @@ export declare class JTypeApiError extends Error { * `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, live, pollIntervalMs, onCardOpen, onConnectionChange, locale, className, style, }: JTypeBoardProps): ReactElement; +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'; @@ -216,6 +216,8 @@ export declare type JTypeBoardProps = { 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 diff --git a/packages/board-react/dist/index.js b/packages/board-react/dist/index.js index 8c4f9aea..17aa09c8 100644 --- a/packages/board-react/dist/index.js +++ b/packages/board-react/dist/index.js @@ -105,12 +105,12 @@ function L(e) { } //#endregion //#region node_modules/@lingui/core/dist/index.mjs -var R = (e) => typeof e == "string", te = (e) => typeof e == "function", z = /* @__PURE__ */ new Map(), ne = "en"; -function re(e) { - return [...Array.isArray(e) ? e : [e], ne]; +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]; } -function ie(e, t, n) { - let r = re(e); +function re(e, t, n) { + let r = ne(e); n ||= "default"; let i; if (typeof n == "string") switch (i = { @@ -127,9 +127,9 @@ function ie(e, t, n) { break; } else i = n; - return ce(() => le("date", r, n), () => new Intl.DateTimeFormat(r, i)).format(R(t) ? new Date(t) : t); + return se(() => ce("date", r, n), () => new Intl.DateTimeFormat(r, i)).format(R(t) ? new Date(t) : t); } -function ae(e, t, n) { +function ie(e, t, n) { let r; if (n ||= "default", typeof n == "string") switch (r = { second: "numeric", @@ -143,24 +143,24 @@ function ae(e, t, n) { case "short": delete r.second; } else r = n; - return ie(e, t, r); + return re(e, t, r); } -function oe(e, t, n) { - let r = re(e); - return ce(() => le("number", r, n), () => new Intl.NumberFormat(r, n)).format(t); +function ae(e, t, n) { + let r = ne(e); + return se(() => ce("number", r, n), () => new Intl.NumberFormat(r, n)).format(t); } -function se(e, t, n, { offset: r = 0, ...i }) { - let a = re(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" })); +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" })); return i[n] ?? i[o.select(n - r)] ?? i.other; } -function ce(e, t) { - let n = e(), r = z.get(n); - return r || (r = t(), z.set(n, r)), r; +function se(e, t) { + let n = e(), r = B.get(n); + return r || (r = t(), B.set(n, r)), r; } -function le(e, t, n) { +function ce(e, t, n) { return `${e}-${t.join("-")}-${JSON.stringify(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) => { +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) => { if (t) { let e = parseInt(t, 16); return String.fromCharCode(e); @@ -168,30 +168,30 @@ var ue = /\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/, de = (e) => e.replace(/\\u([a-fA let e = parseInt(n, 16); return String.fromCharCode(e); } -}), fe = "%__lingui_octothorpe__%", pe = (e, t, n = {}) => { +}), de = "%__lingui_octothorpe__%", fe = (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 = oe(r, e, a); - return t.replace(new RegExp(fe, "g"), o); + let a = Object.keys(n).length ? i("number") : void 0, o = ae(r, e, a); + return t.replace(new RegExp(de, "g"), o); }; return { plural: (e, t) => { - let { offset: n = 0 } = t, i = se(r, !1, e, t); + let { offset: n = 0 } = t, i = oe(r, !1, e, t); return a(e - n, i); }, selectordinal: (e, t) => { - let { offset: n = 0 } = t, i = se(r, !0, e, t); + let { offset: n = 0 } = t, i = oe(r, !0, e, t); return a(e - n, i); }, - 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) + 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) }; -}, me = (e, t) => t[e] ?? t.other; -function he(e, t, n) { +}, pe = (e, t) => t[e] ?? t.other; +function me(e, t, n) { return (r = {}, i) => { - let a = pe(t, n, i), o = (e, t = !1) => Array.isArray(e) ? e.reduce((e, n) => { - if (n === "#" && t) return e + fe; + 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 [i, s, c] = n, l = {}; s === "plural" || s === "selectordinal" || s === "select" ? Object.entries(c).forEach(([e, t]) => { @@ -204,10 +204,10 @@ function he(e, t, n) { } else u = r[i]; return u == null ? e : e + u; }, "") : e, s = o(e); - return R(s) && ue.test(s) ? de(s) : R(s) ? s : s ? String(s) : ""; + return R(s) && le.test(s) ? ue(s) : R(s) ? s : s ? String(s) : ""; }; } -var ge = class { +var he = class { _events = {}; on(e, t) { return this._events[e] ??= /* @__PURE__ */ new Set(), this._events[e].add(t), () => this.removeListener(e, t); @@ -220,14 +220,14 @@ var ge = class { let n = this._events[e]; if (n) for (let e of [...n]) e.apply(this, t); } -}, _e = class extends ge { +}, ge = class extends he { _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 ?? ne, 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 ?? te, e.locales); } get locale() { return this._locale; @@ -259,7 +259,7 @@ var ge = class { let r = n?.message; e ||= "", R(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 te(o) ? o(this._locale, e) : o; + if (o && a) return z(o) ? o(this._locale, e) : o; a && this.emit("missing", { id: e, locale: this._locale @@ -273,52 +273,52 @@ 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) && ue.test(s) ? de(s) : R(s) ? s : he(s, this._locale, this._locales)(t, n?.formats); +`)), R(s) && le.test(s) ? ue(s) : R(s) ? s : me(s, this._locale, this._locales)(t, n?.formats); } t = this._.bind(this); date(e, t) { - return ie(this._locales || this._locale, e, t); + return re(this._locales || this._locale, e, t); } number(e, t) { - return oe(this._locales || this._locale, e, t); + return ae(this._locales || this._locale, e, t); } }; -function ve(e = {}) { - return new _e(e); +function _e(e = {}) { + return new ge(e); } -var B = ve(), ye = (e) => e?.ownerDocument ?? document, be = (e) => e && "window" in e && e.window === e ? e : ye(e).defaultView || window; -function xe(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 Se(e) { - return xe(e) && e.nodeType === Node.DOCUMENT_FRAGMENT_NODE && "host" in e; +function xe(e) { + return be(e) && e.nodeType === Node.DOCUMENT_FRAGMENT_NODE && "host" in e; } //#endregion //#region ../../node_modules/.pnpm/react-stately@3.47.0_react@19.2.7/node_modules/react-stately/dist/private/flags/flags.mjs -var Ce = !1; -function we() { - return Ce; +var Se = !1; +function Ce() { + return Se; } //#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 Te(e, t) { - if (!we()) return t && e ? e.contains(t) : !1; +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 : Se(n) ? n.host : n.parentNode; + n = n.tagName === "SLOT" && n.assignedSlot ? n.assignedSlot.parentNode : xe(n) ? n.host : n.parentNode; } return !1; } -var Ee = (e = document) => { - if (!we()) return e.activeElement; +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 De(e) { - if (we() && e.target instanceof Element && e.target.shadowRoot) { +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; } @@ -326,26 +326,26 @@ function De(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/focusWithoutScrolling.mjs -function Oe(e) { - if (Ae()) e.focus({ preventScroll: !0 }); +function De(e) { + if (ke()) e.focus({ preventScroll: !0 }); else { - let t = je(e); - e.focus(), Me(t); + let t = Ae(e); + e.focus(), je(t); } } -var ke = null; -function Ae() { - if (ke == null) { - ke = !1; +var Oe = null; +function ke() { + if (Oe == null) { + Oe = !1; try { document.createElement("div").focus({ get preventScroll() { - return ke = !0, !0; + return Oe = !0, !0; } }); } catch {} } - return ke; + return Oe; } -function je(e) { +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, @@ -358,46 +358,46 @@ function je(e) { scrollLeft: r.scrollLeft }), n; } -function Me(e) { +function je(e) { for (let { element: t, scrollTop: n, scrollLeft: r } of e) t.scrollTop = n, t.scrollLeft = r; } //#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 Ne = typeof document < "u" ? t.useLayoutEffect : () => {}; +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 Pe(e) { +function Ne(e) { let t = e; return t.nativeEvent = e, t.isDefaultPrevented = () => t.defaultPrevented, t.isPropagationStopped = () => t.cancelBubble, t.persist = () => {}, t; } -function Fe(e, t) { +function Pe(e, t) { Object.defineProperty(e, "target", { value: t }), Object.defineProperty(e, "currentTarget", { value: t }); } -function Ie(e) { +function Fe(e) { let t = v({ isFocused: !1, observer: null }); - return Ne(() => { + return Me(() => { let e = t.current; return () => { e.observer &&= (e.observer.disconnect(), null); }; }, []), l((n) => { - let r = De(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 = Pe(r); + 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 === Ee() ? null : Ee(); + let e = n === Te() ? null : Te(); n.dispatchEvent(new FocusEvent("blur", { relatedTarget: e })), n.dispatchEvent(new FocusEvent("focusout", { bubbles: !0, relatedTarget: e @@ -412,42 +412,42 @@ function Ie(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/platform.mjs -function Le(e) { +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 Re(e) { +function Le(e) { return typeof window < "u" && window.navigator != null && e.test(window.navigator.userAgentData?.platform || window.navigator.platform); } -function ze(e) { +function Re(e) { let t = null; return () => (t ??= e(), t); } -var Be = ze(function() { - return Re(/^Mac/i); -}), Ve = ze(function() { - return Re(/^iPad/i) || Be() && navigator.maxTouchPoints > 1; -}), He = ze(function() { - return Le(/AppleWebKit/i) && !Ue(); -}), Ue = ze(function() { - return Le(/Chrome/i); -}), We = ze(function() { - return Le(/Android/i); -}), Ge = ze(function() { - return Le(/Firefox/i); +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); }); //#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 Ke(e) { - return e.pointerType === "" && e.isTrusted ? !0 : We() && e.pointerType ? e.type === "click" && e.buttons === 1 : e.detail === 0 && !e.pointerType; +function Ge(e) { + return e.pointerType === "" && e.isTrusted ? !0 : Ue() && e.pointerType ? e.type === "click" && e.buttons === 1 : e.detail === 0 && !e.pointerType; } //#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 qe(e, t, n = !0) { +function Ke(e, t, n = !0) { let { metaKey: r, ctrlKey: i, altKey: a, shiftKey: o } = t; - Ge() && window.event?.type?.startsWith("key") && e.target === "_blank" && (Be() ? r = !0 : i = !0); - let s = He() && Be() && !Ve() ? new KeyboardEvent("keydown", { + 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, @@ -462,63 +462,63 @@ function qe(e, t, n = !0) { bubbles: !0, cancelable: !0 }); - qe.isOpening = n, Oe(e), e.dispatchEvent(s), qe.isOpening = !1; + Ke.isOpening = n, De(e), e.dispatchEvent(s), Ke.isOpening = !1; } -qe.isOpening = !1; +Ke.isOpening = !1; //#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 Je = null, Ye = /* @__PURE__ */ new Set(), Xe = /* @__PURE__ */ new Map(), Ze = !1, Qe = !1, $e = { +var qe = null, Je = /* @__PURE__ */ new Set(), Ye = /* @__PURE__ */ new Map(), Xe = !1, Ze = !1, Qe = { Tab: !0, Escape: !0 }; -function et(e, t) { - for (let n of Ye) n(e, t); +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"); } function tt(e) { - return !(e.metaKey || !Be() && e.altKey || e.ctrlKey || e.key === "Control" || e.key === "Shift" || e.key === "Meta"); + Xe = !0, !Ke.isOpening && et(e) && (qe = "keyboard", $e("keyboard", e)); } function nt(e) { - Ze = !0, !qe.isOpening && tt(e) && (Je = "keyboard", et("keyboard", e)); + qe = "pointer", "pointerType" in e && e.pointerType, (e.type === "mousedown" || e.type === "pointerdown") && (Xe = !0, $e("pointer", e)); } function rt(e) { - Je = "pointer", "pointerType" in e && e.pointerType, (e.type === "mousedown" || e.type === "pointerdown") && (Ze = !0, et("pointer", e)); + !Ke.isOpening && Ge(e) && (Xe = !0, qe = "virtual"); } function it(e) { - !qe.isOpening && Ke(e) && (Ze = !0, Je = "virtual"); + 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); } -function at(e) { - let t = be(De(e)), n = ye(De(e)); - De(e) === t || De(e) === n || !e.isTrusted || (!Ze && !Qe && (Je = "virtual", et("virtual", e)), Ze = !1, Qe = !1); +function at() { + Xe = !1, Ze = !0; } -function ot() { - Ze = !1, Qe = !0; -} -function st(e) { +function ot(e) { if (typeof window > "u" || typeof document > "u") return; - let t = be(e), n = ye(e); - if (Xe.get(t)) return; + let t = ye(e), n = ve(e); + if (Ye.get(t)) return; let r = t.HTMLElement.prototype.focus; t.HTMLElement.prototype.focus = function() { - Ze = !0, r.apply(this, arguments); - }, n.addEventListener("keydown", nt, !0), n.addEventListener("keyup", nt, !0), n.addEventListener("click", it, !0), t.addEventListener("focus", at, !0), t.addEventListener("blur", ot, !1), typeof PointerEvent < "u" && (n.addEventListener("pointerdown", rt, !0), n.addEventListener("pointermove", rt, !0), n.addEventListener("pointerup", rt, !0)), t.addEventListener("beforeunload", () => { - ct(e); - }, { once: !0 }), Xe.set(t, { focus: r }); -} -var ct = (e, t) => { - let n = be(e), r = ye(e); - t && r.removeEventListener("DOMContentLoaded", t), Xe.has(n) && (n.HTMLElement.prototype.focus = Xe.get(n).focus, r.removeEventListener("keydown", nt, !0), r.removeEventListener("keyup", nt, !0), r.removeEventListener("click", it, !0), n.removeEventListener("focus", at, !0), n.removeEventListener("blur", ot, !1), typeof PointerEvent < "u" && (r.removeEventListener("pointerdown", rt, !0), r.removeEventListener("pointermove", rt, !0), r.removeEventListener("pointerup", rt, !0)), Xe.delete(n)); + 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 lt(e) { - let t = ye(e), n; +function ct(e) { + let t = ve(e), n; return t.readyState === "loading" ? (n = () => { - st(e); - }, t.addEventListener("DOMContentLoaded", n)) : st(e), () => ct(e, n); + ot(e); + }, t.addEventListener("DOMContentLoaded", n)) : ot(e), () => st(e, n); } -typeof document < "u" && lt(); -function ut() { - return Je !== "pointer"; +typeof document < "u" && ct(); +function lt() { + return qe !== "pointer"; } -var dt = /* @__PURE__ */ new Set([ +var ut = /* @__PURE__ */ new Set([ "checkbox", "radio", "range", @@ -529,28 +529,28 @@ var dt = /* @__PURE__ */ new Set([ "submit", "reset" ]); -function ft(e, t, n) { - let r = n ? De(n) : void 0, i = ye(r), a = be(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 = Ee(i); - return e = e || u instanceof o && !dt.has(u.type) || u instanceof s || u instanceof c && u.isContentEditable, !(e && t === "keyboard" && n instanceof l && !$e[n.key]); +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]); } -function pt(e, t, n) { - st(), f(() => { +function ft(e, t, n) { + ot(), f(() => { if (n?.enabled === !1) return; let t = (t, r) => { - ft(!!n?.isTextInput, t, r) && e(ut()); + dt(!!n?.isTextInput, t, r) && e(lt()); }; - return Ye.add(t), () => { - Ye.delete(t); + return Je.add(t), () => { + Je.delete(t); }; }, t); } //#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 mt(e) { +function pt(e) { let { isDisabled: t, onFocus: n, onBlur: r, onFocusChange: i } = e, a = l((e) => { - if (De(e) === e.currentTarget) return r && r(e), i && i(!1), !0; - }, [r, i]), o = Ie(a), s = l((e) => { - let t = De(e), r = ye(t), a = r ? Ee(r) : Ee(); + 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, @@ -564,7 +564,7 @@ function mt(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 ht() { +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); @@ -591,26 +591,26 @@ function ht() { } //#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 gt(e) { - let { isDisabled: t, onBlurWithin: n, onFocusWithin: r, onFocusWithinChange: i } = e, a = v({ isFocusWithin: !1 }), { addGlobalListener: o, removeAllGlobalListeners: s } = ht(), c = l((e) => { - Te(e.currentTarget, De(e)) && a.current.isFocusWithin && !Te(e.currentTarget, e.relatedTarget) && (a.current.isFocusWithin = !1, s(), n && n(e), i && i(!1)); +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 = Ie(c), d = l((e) => { - if (!Te(e.currentTarget, De(e))) return; - let t = De(e), n = ye(t), s = Ee(n); + ]), 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 = De(e); - if (a.current.isFocusWithin && !Te(t, r)) { + let r = Ee(e); + if (a.current.isFocusWithin && !we(t, r)) { let e = new n.defaultView.FocusEvent("blur", { relatedTarget: r }); - Fe(e, t); - let i = Pe(e); + Pe(e, t); + let i = Ne(e); c(i); } }, { capture: !0 }); @@ -632,23 +632,23 @@ function gt(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/focus/useFocusRing.mjs -function _t(e = {}) { +function gt(e = {}) { let { autoFocus: t = !1, isTextInput: n, within: r } = e, i = v({ isFocused: !1, - isFocusVisible: t || ut() + 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 = ut(), o(e), u(); + i.current.isFocused = e, i.current.isFocusVisible = lt(), o(e), u(); }, [u]); - pt((e) => { + ft((e) => { i.current.isFocusVisible = e, u(); }, [n, a], { enabled: a, isTextInput: n }); - let { focusProps: f } = mt({ + let { focusProps: f } = pt({ isDisabled: r, onFocusChange: d - }), { focusWithinProps: p } = gt({ + }), { focusWithinProps: p } = ht({ isDisabled: !r, onFocusWithinChange: d }); @@ -660,36 +660,36 @@ function _t(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/interactions/useHover.mjs -var vt = !1, yt = 0; -function bt() { - vt = !0, setTimeout(() => { - vt = !1; +var _t = !1, vt = 0; +function yt() { + _t = !0, setTimeout(() => { + _t = !1; }, 500); } -function xt(e) { - e.pointerType === "touch" && bt(); +function bt(e) { + e.pointerType === "touch" && yt(); } -function St() { - let e = ye(null); - if (e !== void 0) return yt === 0 && typeof PointerEvent < "u" && e.addEventListener("pointerup", xt), yt++, () => { - yt--, !(yt > 0) && typeof PointerEvent < "u" && e.removeEventListener("pointerup", xt); +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 Ct(e) { +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(St, []); - let { addGlobalListener: c, removeAllGlobalListeners: l } = ht(), { hoverProps: u, triggerHoverEnd: d } = g(() => { + 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 || !Te(e.currentTarget, De(e))) return; + 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(ye(De(e)), "pointerover", (e) => { - s.isHovered && s.target && !Te(s.target, De(e)) && a(e, e.pointerType); + 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, @@ -704,9 +704,9 @@ function Ct(e) { }), n && n(!1), o(!1)); }, u = {}; return typeof PointerEvent < "u" && (u.onPointerEnter = (t) => { - vt && t.pointerType === "mouse" || e(t, t.pointerType); + _t && t.pointerType === "mouse" || e(t, t.pointerType); }, u.onPointerLeave = (e) => { - !i && Te(e.currentTarget, De(e)) && a(e, e.pointerType); + !i && we(e.currentTarget, Ee(e)) && a(e, e.pointerType); }), { hoverProps: u, triggerHoverEnd: a @@ -729,14 +729,14 @@ function Ct(e) { } //#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 wt = Object.defineProperty, Tt = (e, t, n) => t in e ? wt(e, t, { +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, Et = (e, t, n) => (Tt(e, typeof t == "symbol" ? t : t + "", n), n), Dt = new class { +}) : e[t] = n, Tt = (e, t, n) => (wt(e, typeof t == "symbol" ? t : t + "", n), n), Et = new class { constructor() { - Et(this, "current", this.detect()), Et(this, "handoffState", "pending"), Et(this, "currentId", 0); + 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); @@ -765,28 +765,28 @@ var wt = Object.defineProperty, Tt = (e, t, n) => t in e ? wt(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/utils/owner.js +function Dt(e) { + return Et.isServer ? null : e == null ? document : e?.ownerDocument ?? document; +} function Ot(e) { - return Dt.isServer ? null : e == null ? document : e?.ownerDocument ?? document; + return Et.isServer ? null : e == null ? document : (e?.getRootNode)?.call(e) ?? document; } function kt(e) { - return Dt.isServer ? null : e == null ? document : (e?.getRootNode)?.call(e) ?? document; + return Ot(e)?.activeElement ?? null; } function At(e) { - return kt(e)?.activeElement ?? null; -} -function jt(e) { - return At(e) === e; + return kt(e) === e; } //#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 Mt(e) { +function jt(e) { typeof queueMicrotask == "function" ? queueMicrotask(e) : Promise.resolve().then(e).catch((e) => setTimeout(() => { throw e; })); } //#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 Nt() { +function Mt() { let e = [], t = { addEventListener(e, n, r, i) { return e.addEventListener(n, r, i), t.add(() => e.removeEventListener(n, r, i)); @@ -804,7 +804,7 @@ function Nt() { }, microTask(...e) { let n = { current: !0 }; - return Mt(() => { + return jt(() => { n.current && e[0](); }), t.add(() => { n.current = !1; @@ -817,7 +817,7 @@ function Nt() { }); }, group(e) { - let t = Nt(); + let t = Mt(); return e(t), this.add(() => t.dispose()); }, add(t) { @@ -834,32 +834,32 @@ function 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/hooks/use-disposables.js -function Pt() { - let [e] = y(Nt); +function Nt() { + let [e] = y(Mt); return f(() => () => e.dispose(), [e]), e; } //#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 V = (e, t) => { - Dt.isServer ? f(e, t) : h(e, t); +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 Ft(e) { +function Pt(e) { let t = v(e); - return V(() => { + return H(() => { t.current = e; }, [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-event.js -var H = function(e) { - let n = Ft(e); +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 It(e) { +function Ft(e) { let t = e.width / 2, n = e.height / 2; return { top: e.clientY - n, @@ -868,21 +868,21 @@ function It(e) { left: e.clientX - t }; } -function Lt(e, t) { +function It(e, t) { return !(!e || !t || e.right < t.left || e.left > t.right || e.bottom < t.top || e.top > t.bottom); } -function Rt({ disabled: e = !1 } = {}) { - let t = v(null), [n, r] = y(!1), i = Pt(), a = H(() => { +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 = H((e) => { + }), o = U((e) => { if (i.dispose(), t.current === null) { t.current = e.currentTarget, r(!0); { - let n = Ot(e.currentTarget); + let n = Dt(e.currentTarget); i.addEventListener(n, "pointerup", a, !1), i.addEventListener(n, "pointermove", (e) => { if (t.current) { - let n = It(e); - r(Lt(n, t.current.getBoundingClientRect())); + let n = Ft(e); + r(It(n, t.current.getBoundingClientRect())); } }, !1), i.addEventListener(n, "pointercancel", a, !1); } @@ -899,7 +899,7 @@ function Rt({ disabled: e = !1 } = {}) { } //#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 U(e) { +function Rt(e) { return g(() => e, Object.values(e)); } //#endregion @@ -1061,7 +1061,7 @@ function nn(e) { //#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 rn(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, H((e) => (a || E(() => i(e)), t?.(e)))]; + 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)))]; } //#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 @@ -1137,7 +1137,7 @@ function gn({ children: e }) { return r ? T(t.createElement(t.Fragment, null, e), r) : null; } function _n({ data: e, form: n, disabled: r, onReset: i, overrides: a }) { - let [o, s] = y(null), c = Pt(); + let [o, s] = y(null), c = Nt(); return f(() => { if (i && o) return c.addEventListener(o, "reset", i); }, [ @@ -1251,7 +1251,7 @@ function K(...e) { f(() => { t.current = e; }, [e]); - let n = H((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?.[Pn]) ? void 0 : n; @@ -1274,7 +1274,7 @@ function Rn() { function zn() { let [e, n] = y([]); return [e.length > 0 ? e.join(" ") : void 0, g(() => function(e) { - let r = H((e) => (n((t) => [...t, e]), () => n((t) => { + 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(() => ({ @@ -1296,8 +1296,8 @@ function zn() { var Bn = "p"; function Vn(e, t) { let n = m(), r = Bt(), { id: i = `headlessui-description-${n}`, ...a } = e, o = Ln(), s = K(t); - V(() => o.register(i), [i, o.register]); - let c = U({ + H(() => o.register(i), [i, o.register]); + let c = Rt({ ...o.slot, disabled: r || !1 }), l = { @@ -1330,7 +1330,7 @@ function Kn(e) { function qn({ inherit: e = !1 } = {}) { let n = Kn(), [r, i] = y([]), a = e ? [n, ...r].filter(Boolean) : r; return [a.length > 0 ? a.join(" ") : void 0, g(() => function(e) { - let n = H((e) => (i((t) => [...t, e]), () => i((t) => { + let n = U((e) => (i((t) => [...t, e]), () => i((t) => { let n = t.slice(), r = n.indexOf(e); return r !== -1 && n.splice(r, 1), n; }))), r = g(() => ({ @@ -1352,8 +1352,8 @@ function qn({ inherit: e = !1 } = {}) { var Jn = "label"; function Yn(e, t) { let n = m(), r = Gn(), i = bn(), a = Bt(), { id: o = `headlessui-label-${n}`, htmlFor: s = i ?? r.props?.htmlFor, passive: c = !1, ...l } = e, u = K(t); - V(() => r.register(o), [o, r.register]); - let d = H((e) => { + H(() => r.register(o), [o, r.register]); + let d = U((e) => { let t = e.currentTarget; if (!(e.target !== e.currentTarget && jn(e.target)) && (On(t) && e.preventDefault(), r.props && "onClick" in r.props && typeof r.props.onClick == "function" && r.props.onClick(e), On(t))) { let e = document.getElementById(t.htmlFor); @@ -1365,7 +1365,7 @@ function Yn(e, t) { (Dn(e) && (e.type === "file" || e.type === "radio" || e.type === "checkbox") || e.role === "radio" || e.role === "checkbox" || e.role === "switch") && e.click(), e.focus({ preventScroll: !0 }); } } - }), f = U({ + }), f = Rt({ ...r.slot, disabled: a || !1 }), p = { @@ -1416,9 +1416,9 @@ function nr(e) { } function rr(e, t, n = !1) { let [r, i] = y(() => nr(t)); - return V(() => { + return H(() => { if (!t || !e) return; - let n = Nt(); + let n = Mt(); return n.requestAnimationFrame(function e() { n.requestAnimationFrame(e), i((e) => { let n = nr(t); @@ -1440,10 +1440,10 @@ var ir = ((e) => (e[e.Left = 0] = "Left", e[e.Right = 2] = "Right", e))(ir || {} function ar(e) { let t = v(null); return { - onPointerDown: H((n) => { + onPointerDown: U((n) => { t.current = n.pointerType, !Mn(n.currentTarget) && n.pointerType === "mouse" && n.button === ir.Left && (n.preventDefault(), e(n)); }), - onClick: H((n) => { + onClick: U((n) => { t.current !== "mouse" && (Mn(n.currentTarget) || e(n)); }) }; @@ -1470,7 +1470,7 @@ var or = class extends Map { t instanceof WeakSet ? t.add(e) : t.set(e, n); }, pr = (e, t, n, r) => (ur(e, t, "write to private field"), r ? r.call(e, n) : t.set(e, n), n), mr, hr, gr, _r = class { constructor(e) { - fr(this, mr, {}), fr(this, hr, new or(() => /* @__PURE__ */ new Set())), fr(this, gr, /* @__PURE__ */ new Set()), lr(this, "disposables", Nt()), pr(this, mr, e), Dt.isServer && this.disposables.microTask(() => { + fr(this, mr, {}), fr(this, hr, new or(() => /* @__PURE__ */ new Set())), fr(this, gr, /* @__PURE__ */ new Set()), lr(this, "disposables", Mt()), pr(this, mr, e), Et.isServer && this.disposables.microTask(() => { this.dispose(); }); } @@ -1481,7 +1481,7 @@ var or = class extends Map { return dr(this, mr); } subscribe(e, t) { - if (Dt.isServer) return () => {}; + if (Et.isServer) return () => {}; let n = { selector: e, callback: t, @@ -1492,7 +1492,7 @@ var or = class extends Map { }); } on(e, t) { - return Dt.isServer ? () => {} : (dr(this, hr).get(e).add(t), this.disposables.add(() => { + return Et.isServer ? () => {} : (dr(this, hr).get(e).add(t), this.disposables.add(() => { dr(this, hr).get(e).delete(t); })); } @@ -1525,7 +1525,7 @@ function br(e) { return t === null || Object.getPrototypeOf(t) === null; } function xr(e) { - let [t, n] = e(), r = Nt(); + let [t, n] = e(), r = Mt(); return (...e) => { t(...e), r.dispose(), r.microTask(n); }; @@ -1620,7 +1620,7 @@ function Ar(e, t, n, r, i) { //#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/react-glue.js function J(e, t, n = vr) { - return Ar(H((t) => e.subscribe(jr, t)), H(() => e.state), H(() => e.state), H(t), n); + return Ar(U((t) => e.subscribe(jr, t)), U(() => e.state), U(() => e.state), U(t), n); } function jr(e) { return e; @@ -1629,7 +1629,7 @@ function jr(e) { //#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-is-top-layer.js function Mr(e, t) { let n = p(), r = Or.get(t), [i, a] = J(r, l((e) => [r.selectors.isTop(e, n), r.selectors.inStack(e, n)], [r, n])); - return V(() => { + return H(() => { if (e) return r.actions.push(n), () => r.actions.pop(n); }, [ r, @@ -1655,14 +1655,14 @@ function Ir(e) { } function Lr(e, { allowed: t, disallowed: n } = {}) { let r = Mr(e, "inert-others"); - V(() => { + H(() => { if (!r) return; - let e = Nt(); + let e = Mt(); for (let t of n?.() ?? []) t && e.add(Fr(t)); let i = t?.() ?? []; for (let t of i) { if (!t) continue; - let n = Ot(t); + let n = Dt(t); if (!n) continue; let r = t.parentElement; for (; r && r !== n.body;) { @@ -1680,7 +1680,7 @@ function Lr(e, { allowed: t, disallowed: 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-on-disappear.js function Rr(e, t, n) { - let r = Ft((e) => { + let r = Pt((e) => { let t = e.getBoundingClientRect(); t.x === 0 && t.y === 0 && t.width === 0 && t.height === 0 && n(); }); @@ -1688,7 +1688,7 @@ function Rr(e, t, n) { if (!e) return; let n = t === null ? null : Cn(t) ? t : t.current; if (!n) return; - let i = Nt(); + let i = Mt(); if (typeof ResizeObserver < "u") { let e = new ResizeObserver(() => r.current(n)); e.observe(n), i.add(() => e.disconnect()); @@ -1726,7 +1726,7 @@ function Wr(e = document.body) { } var Gr = ((e) => (e[e.Strict = 0] = "Strict", e[e.Loose = 1] = "Loose", e))(Gr || {}); function Kr(e, t = 0) { - return e !== Ot(e)?.body && Ht(t, { + return e !== Dt(e)?.body && Ht(t, { 0() { return e.matches(zr); }, @@ -1741,8 +1741,8 @@ function Kr(e, t = 0) { }); } function qr(e) { - Nt().nextFrame(() => { - let t = At(e); + Mt().nextFrame(() => { + let t = kt(e); t && wn(t) && !Kr(t, 0) && Yr(e); }); } @@ -1767,11 +1767,11 @@ function Qr(e, t = (e) => e) { return a & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : a & Node.DOCUMENT_POSITION_PRECEDING ? 1 : 0; }); } -function $r(e, t, n = e === null ? document.body : kt(e)) { +function $r(e, t, n = e === null ? document.body : Ot(e)) { return ei(Ur(n), t, { relativeTo: e }); } function ei(e, t, { sorted: n = !0, relativeTo: r = null, skipElements: i = [] } = {}) { - let a = Array.isArray(e) ? e.length > 0 ? kt(e[0]) : document : kt(e), o = Array.isArray(e) ? n ? Qr(e) : e : t & 64 ? Wr(e) : Ur(e); + let a = Array.isArray(e) ? e.length > 0 ? Ot(e[0]) : document : Ot(e), o = Array.isArray(e) ? n ? Qr(e) : e : t & 64 ? Wr(e) : Ur(e); i.length > 0 && o.length > 1 && (o = o.filter((e) => !i.some((t) => t != null && "current" in t ? t?.current === e : t === e))), r ??= a?.activeElement; let s = (() => { if (t & 5) return 1; @@ -1793,7 +1793,7 @@ function ei(e, t, { sorted: n = !0, relativeTo: r = null, skipElements: i = [] } if (e >= d) return 1; } f = o[e], f?.focus(l), u += s; - } while (f !== At(f)); + } while (f !== kt(f)); return t & 6 && Zr(f) && f.select(), 2; } //#endregion @@ -1810,7 +1810,7 @@ function ri() { //#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-document-event.js function ii(e, t, n, r) { - let i = Ft(n); + let i = Pt(n); f(() => { if (!e) return; function n(e) { @@ -1826,7 +1826,7 @@ function ii(e, t, n, r) { //#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-window-event.js function ai(e, t, n, r) { - let i = Ft(n); + let i = Pt(n); f(() => { if (!e) return; function n(e) { @@ -1843,7 +1843,7 @@ function ai(e, t, n, r) { //#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-outside-click.js var oi = 30; function si(e, t, n) { - let r = Ft(n), i = l(function(e, n) { + let r = Pt(n), i = l(function(e, n) { if (e.defaultPrevented) return; let i = n(e); if (i === null || !i.getRootNode().contains(i) || !i.isConnected) return; @@ -1877,10 +1877,10 @@ function si(e, t, 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-owner.js function ci(...e) { - return g(() => Ot(...e), [...e]); + return g(() => Dt(...e), [...e]); } function li(...e) { - return g(() => kt(...e), [...e]); + return g(() => Ot(...e), [...e]); } //#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-quick-release.js @@ -1914,7 +1914,7 @@ function mi(e, { trigger: t, action: n, close: r, select: i }) { //#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-listener.js function hi(e, t, n, r) { - let i = Ft(n); + let i = Pt(n); f(() => { e ??= window; function n(e) { @@ -1987,7 +1987,7 @@ function bi() { } t.microTask(() => { if (window.getComputedStyle(e.documentElement).scrollBehavior !== "auto") { - let n = Nt(); + let n = Mt(); n.style(e.documentElement, "scrollBehavior", "auto"), t.add(() => t.microTask(() => n.dispose())); } let n = window.scrollY ?? window.pageYOffset, i = null; @@ -2041,7 +2041,7 @@ var Ci = vi(() => /* @__PURE__ */ new Map(), { let n = this.get(e) ?? { doc: e, count: 0, - d: Nt(), + d: Mt(), meta: /* @__PURE__ */ new Set(), computedMeta: {} }; @@ -2084,7 +2084,7 @@ Ci.subscribe(() => { //#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/document-overflow/use-document-overflow.js function wi(e, t, n = () => ({ containers: [] })) { let r = _i(Ci), i = t ? r.get(t) : void 0, a = i ? i.count > 0 : !1; - return V(() => { + return H(() => { if (!(!t || !e)) return Ci.dispatch("PUSH", t, n), () => Ci.dispatch("POP", t, n); }, [e, t]), a; } @@ -2143,7 +2143,7 @@ function Ai(e) { } function ji(e, t, n, r) { let [i, a] = y(n), { hasFlag: o, addFlag: s, removeFlag: c } = Oi(e && i ? 3 : 0), l = v(!1), u = v(!1); - return V(() => { + return H(() => { var i; if (e) { if (n && a(!0), !t) { @@ -2168,7 +2168,7 @@ function ji(e, t, n, r) { e, n, t, - Pt() + Nt() ]), e ? [i, { closed: o(1), enter: o(2), @@ -2182,7 +2182,7 @@ function ji(e, t, n, r) { }]; } function Mi(e, { prepare: t, run: n, done: r, inFlight: i }) { - let a = Nt(); + let a = Mt(); return Pi(e, { prepare: t, inFlight: i @@ -2193,7 +2193,7 @@ function Mi(e, { prepare: t, run: n, done: r, inFlight: i }) { }), a.dispose; } function Ni(e, t) { - let n = Nt(); + let n = Mt(); if (!e) return n.dispose; let r = !1; n.add(() => { @@ -2221,9 +2221,9 @@ function Ii(e, { container: t, accept: n, walk: r }) { let i = v(n), a = v(r); f(() => { i.current = n, a.current = r; - }, [n, r]), V(() => { + }, [n, r]), H(() => { if (!t || !e) return; - let n = Ot(t); + let n = Dt(t); if (!n) return; let r = i.current, o = a.current, s = Object.assign((e) => r(e), { acceptNode: r }), c = n.createTreeWalker(t, NodeFilter.SHOW_ELEMENT, s, !1); for (; c.nextNode();) o(c.currentNode); @@ -2237,7 +2237,7 @@ function Ii(e, { container: t, accept: n, walk: r }) { //#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-watch.js function Li(e, t) { - let n = v([]), r = H(e); + let n = v([]), r = U(e); f(() => { let e = [...n.current]; for (let [i, a] of t.entries()) if (n.current[i] !== a) { @@ -3507,7 +3507,7 @@ function xs() { function Ss(e = null) { e === !1 && (e = null), typeof e == "string" && (e = { to: e }); let t = u(_s), n = g(() => e, [JSON.stringify(e, (e, t) => t?.outerHTML ?? t)]); - V(() => { + H(() => { t?.(n ?? null); }, [t, n]); let r = u(gs); @@ -3522,7 +3522,7 @@ function ws({ children: t, enabled: n = !0 }) { let [r, i] = y(null), [a, o] = y(0), s = v(null), [c, l] = y(null); Ts(c); let u = n && r !== null && c !== null, { to: d = "bottom", gap: f = 0, offset: p = 0, padding: m = 0, inner: h } = Es(r, c), [_, b = "center"] = d.split(" "); - V(() => { + H(() => { u && o(0); }, [u]); let { refs: x, floatingStyles: S, context: C } = cs({ @@ -3580,7 +3580,7 @@ function ws({ children: t, enabled: n = !0 }) { let E = g(() => ({ anchor: [w, T].filter(Boolean).join(" ") }), [w, T]), { getReferenceProps: D, getFloatingProps: O } = fs([hs(C, { overflowRef: s, onChange: o - })]), k = H((e) => { + })]), k = U((e) => { l(e), x.setFloating(e); }); return e.createElement(_s.Provider, { value: i }, e.createElement(gs.Provider, { value: { @@ -3593,7 +3593,7 @@ function ws({ children: t, enabled: n = !0 }) { } }, t)); } function Ts(e) { - V(() => { + H(() => { if (!e) return; let t = new MutationObserver(() => { let t = window.getComputedStyle(e).maxHeight, n = parseFloat(t); @@ -3619,7 +3619,7 @@ function Es(e, t) { }; } function Ds(e, t, n = void 0) { - let r = Pt(), i = H((e, t) => { + let r = Nt(), i = U((e, t) => { if (e == null) return [n, null]; if (typeof e == "number") return [e, null]; if (typeof e == "string") { @@ -3649,7 +3649,7 @@ function Ds(e, t, n = void 0) { } return [n, null]; }), a = g(() => i(e, t)[0], [e, t]), [o = a, s] = y(); - return V(() => { + return H(() => { let [n, r] = i(e, t); if (s(n), r) return r(s); }, [e, t]), o; @@ -3748,9 +3748,9 @@ function zs(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-on-unmount.js function Bs(e) { - let t = H(e), n = v(!1); + let t = U(e), n = v(!1); f(() => (n.current = !1, () => { - n.current = !0, Mt(() => { + n.current = !0, jt(() => { n.current && t(); }); }), [t]); @@ -3762,10 +3762,10 @@ function Vs() { return "useSyncExternalStore" in e && ((e) => e.useSyncExternalStore)(e)(() => () => {}, () => !1, () => !t); } function Hs() { - let t = Vs(), [n, r] = e.useState(Dt.isHandoffComplete); - return n && Dt.isHandoffComplete === !1 && r(!1), e.useEffect(() => { + let t = Vs(), [n, r] = e.useState(Et.isHandoffComplete); + return n && Et.isHandoffComplete === !1 && r(!1), e.useEffect(() => { n !== !0 && r(!0); - }, [n]), e.useEffect(() => Dt.handoff(), []), !t && n; + }, [n]), e.useEffect(() => Et.handoff(), []), !t && 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/internal/portal-force-root.js @@ -3781,7 +3781,7 @@ function Gs(e) { function Ks(e) { let t = Ws(), n = u(Zs), [r, i] = y(() => { if (!t && n !== null) return n.current ?? null; - if (Dt.isServer) return null; + if (Et.isServer) return null; let r = e?.getElementById("headlessui-portal-root"); if (r) return r; if (e === null) return null; @@ -3801,7 +3801,7 @@ function Ks(e) { var qs = n, Js = G(function(e, n) { let { ownerDocument: r = null, ...i } = e, a = v(null), o = K(Fn((e) => { a.current = e; - }), n), s = ci(a.current), c = Ks(r ?? s), l = u($s), d = Pt(), f = Hs(), p = W(); + }), n), s = ci(a.current), c = Ks(r ?? s), l = u($s), d = Nt(), f = Hs(), p = W(); return Bs(() => { var e; c && c.childNodes.length <= 0 && ((e = c.parentElement) == null || e.removeChild(c)); @@ -3844,7 +3844,7 @@ function Qs(e, n) { } var $s = i(null); function ec() { - let e = u($s), n = v([]), r = H((t) => (n.current.push(t), e && e.register(t), () => i(t))), i = H((t) => { + let e = u($s), n = v([]), r = U((t) => (n.current.push(t), e && e.register(t), () => i(t))), i = U((t) => { let r = n.current.indexOf(t); r !== -1 && n.current.splice(r, 1), e && e.unregister(t); }), a = g(() => ({ @@ -3873,7 +3873,7 @@ function ac(e) { return `${t.x},${t.y}`; } function oc(e, t, n) { - let r = Nt(); + let r = Mt(); if (t.kind === "Tracked") { let i = function() { a !== ac(e) && (r.dispose(), n()); @@ -3894,7 +3894,7 @@ function sc(e, t = typeof document < "u" ? document.defaultView : null, n) { //#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-is-touch-device.js function cc() { let [e] = y(() => typeof window < "u" && typeof window.matchMedia == "function" ? window.matchMedia("(pointer: coarse)") : null), [t, n] = y(e?.matches ?? !1); - return V(() => { + return H(() => { if (!e) return; function t(e) { n(e.matches); @@ -3905,8 +3905,8 @@ function cc() { //#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-root-containers.js function lc({ defaultContainers: e = [], portals: t, mainTreeNode: n } = {}) { - let r = H(() => { - let r = Ot(n), i = []; + let r = U(() => { + let r = Dt(n), i = []; for (let t of e) t !== null && (Sn(t) ? i.push(t) : "current" in t && Sn(t.current) && i.push(t.current)); if (t != null && t.current) for (let e of t.current) i.push(e); for (let e of r?.querySelectorAll("html > *, body > *") ?? []) e !== document.body && e !== document.head && Sn(e) && e.id !== "headlessui-portal-root" && (n && (e.contains(n) || e.contains(n?.getRootNode()?.host)) || i.some((t) => e.contains(t)) || i.push(e)); @@ -3914,7 +3914,7 @@ function lc({ defaultContainers: e = [], portals: t, mainTreeNode: n } = {}) { }); return { resolveContainers: r, - contains: H((e) => r().some((t) => t.contains(e))) + contains: U((e) => r().some((t) => t.contains(e))) }; } var uc = i(null); @@ -3924,7 +3924,7 @@ function dc({ children: e, node: n }) { features: fn.Hidden, ref: (e) => { if (e) { - for (let t of Ot(e)?.querySelectorAll("html > *, body > *") ?? []) if (t !== document.body && t !== document.head && Sn(t) && t != null && t.contains(e)) { + for (let t of Dt(e)?.querySelectorAll("html > *, body > *") ?? []) if (t !== document.body && t !== document.head && Sn(t) && t != null && t.contains(e)) { i(t); break; } @@ -3939,7 +3939,7 @@ function fc(e = null) { //#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-is-mounted.js function pc() { let e = v(!1); - return V(() => (e.current = !0, () => { + return H(() => (e.current = !0, () => { e.current = !1; }), []), e; } @@ -3979,7 +3979,7 @@ function yc(e, n) { containers: s, previousActiveElement: d }); - let f = hc(), p = H((e) => { + let f = hc(), p = U((e) => { if (!Cn(r.current)) return; let t = r.current; ((e) => e())(() => { @@ -3992,7 +3992,7 @@ function yc(e, n) { } }); }); - }), m = Mr(!!(c & 2), "focus-trap#tab-lock"), h = Pt(), g = v(!1), _ = { + }), m = Mr(!!(c & 2), "focus-trap#tab-lock"), h = Nt(), g = v(!1), _ = { ref: i, onKeyDown(e) { e.key == "Tab" && (g.current = !0, h.requestAnimationFrame(() => { @@ -4033,19 +4033,19 @@ var bc = G(yc), xc = Object.assign(bc, { features: vc }); function Sc(e = !0) { let t = v(Ls.slice()); return Li(([e], [n]) => { - n === !0 && e === !1 && Mt(() => { + n === !0 && e === !1 && jt(() => { t.current.splice(0); }), n === !1 && e === !0 && (t.current = Ls.slice()); }, [ e, Ls, t - ]), H(() => t.current.find((e) => e != null && e.isConnected) ?? null); + ]), U(() => t.current.find((e) => e != null && e.isConnected) ?? null); } function Cc(e, { ownerDocument: t }) { let n = !!(e & 8), r = Sc(n); Li(() => { - n || jt(t?.body) && Yr(r()); + n || At(t?.body) && Yr(r()); }, [n]), Bs(() => { n && Yr(r()); }); @@ -4059,7 +4059,7 @@ function wc(e, { ownerDocument: t, container: n, initialFocus: r, initialFocusFa return; } let c = n.current; - c && Mt(() => { + c && jt(() => { if (!s.current) return; let n = t?.activeElement; if (r != null && r.current) { @@ -4127,7 +4127,7 @@ function Nc(e) { return "children" in e ? Nc(e.children) : e.current.filter(({ el: e }) => e.current !== null).filter(({ state: e }) => e === "visible").length > 0; } function Pc(e, t) { - let n = Ft(e), r = v([]), i = pc(), a = Pt(), o = H((e, t = Wt.Hidden) => { + let n = Pt(e), r = v([]), i = pc(), a = Nt(), o = U((e, t = Wt.Hidden) => { let o = r.current.findIndex(({ el: t }) => t === e); o !== -1 && (Ht(t, { [Wt.Unmount]() { @@ -4140,7 +4140,7 @@ function Pc(e, t) { var e; !Nc(r) && i.current && ((e = n.current) == null || e.call(n)); })); - }), s = H((e) => { + }), s = U((e) => { let t = r.current.find(({ el: t }) => t === e); return t ? t.state !== "visible" && (t.state = "visible") : r.current.push({ el: e, @@ -4149,13 +4149,13 @@ function Pc(e, t) { }), c = v([]), l = v(Promise.resolve()), u = v({ enter: [], leave: [] - }), d = H((e, n, r) => { + }), d = U((e, n, r) => { c.current.splice(0), t && (t.chains.current[n] = t.chains.current[n].filter(([t]) => t !== e)), t?.chains.current[n].push([e, new Promise((e) => { c.current.push(e); })]), t?.chains.current[n].push([e, new Promise((e) => { Promise.all(u.current[n].map(([e, t]) => t)).then(() => e()); })]), n === "enter" ? l.current = l.current.then(() => t?.wait.current).then(() => r(n)) : r(n); - }), f = H((e, t, n) => { + }), f = U((e, t, n) => { Promise.all(u.current[t].splice(0).map(([e, t]) => t)).then(() => { var e; (e = c.current.shift()) == null || e(); @@ -4187,7 +4187,7 @@ function Lc(e, n) { n, x ] : n === null ? [] : [n]), T = (r = _.unmount) == null || r ? Wt.Unmount : Wt.Hidden, { show: E, appear: D, initial: O } = Ac(), [k, A] = y(E ? "visible" : "hidden"), j = jc(), { register: M, unregister: N } = j; - V(() => M(S), [M, S]), V(() => { + H(() => M(S), [M, S]), H(() => { if (T === Wt.Hidden && S.current) { if (E && k !== "visible") { A("visible"); @@ -4207,7 +4207,7 @@ function Lc(e, n) { T ]); let P = Hs(); - V(() => { + H(() => { if (C && P && k === "visible" && S.current === null) throw Error("Did you forget to passthrough the `ref` to the actual DOM node?"); }, [ S, @@ -4217,37 +4217,37 @@ function Lc(e, n) { ]); let F = O && !D, I = D && E && O, ee = v(!1), L = Pc(() => { ee.current || (A("hidden"), N(S)); - }, j), R = H((e) => { + }, j), R = U((e) => { ee.current = !0; let t = e ? "enter" : "leave"; L.onStart(S, t, (e) => { e === "enter" ? a?.() : e === "leave" && s?.(); }); - }), te = H((e) => { + }), z = U((e) => { let t = e ? "enter" : "leave"; ee.current = !1, L.onStop(S, t, (e) => { e === "enter" ? o?.() : e === "leave" && c?.(); }), t === "leave" && !Nc(L) && (A("hidden"), N(S)); }); f(() => { - C && i || (R(E), te(E)); + C && i || (R(E), z(E)); }, [ E, C, i ]); - let [, z] = ji(!(!i || !C || !P || F), b, E, { + let [, B] = ji(!(!i || !C || !P || F), b, E, { start: R, - end: te - }), ne = Zt({ + end: z + }), te = Zt({ ref: w, - className: Vt(_.className, I && l, I && u, z.enter && l, z.enter && z.closed && u, z.enter && !z.closed && d, z.leave && m, z.leave && !z.closed && h, z.leave && z.closed && g, !z.transition && E && p)?.trim() || void 0, - ...Ai(z) - }), re = 0; - k === "visible" && (re |= X.Open), k === "hidden" && (re |= X.Closed), E && k === "hidden" && (re |= X.Opening), !E && k === "visible" && (re |= X.Closing); - let ie = W(); - return t.createElement(Mc.Provider, { value: L }, t.createElement(Ps, { value: re }, ie({ - ourProps: ne, + className: Vt(_.className, I && l, I && u, B.enter && l, B.enter && B.closed && u, B.enter && !B.closed && d, B.leave && m, B.leave && !B.closed && h, B.leave && B.closed && g, !B.transition && E && p)?.trim() || void 0, + ...Ai(B) + }), ne = 0; + k === "visible" && (ne |= X.Open), k === "hidden" && (ne |= X.Closed), E && k === "hidden" && (ne |= X.Opening), !E && k === "visible" && (ne |= X.Closing); + let re = W(); + return t.createElement(Mc.Provider, { value: L }, t.createElement(Ps, { value: ne }, re({ + ourProps: te, theirProps: _, defaultTag: Fc, features: Ic, @@ -4263,7 +4263,7 @@ function Rc(e, r) { let [d, f] = y(i ? "visible" : "hidden"), p = Pc(() => { i || f("hidden"); }), [m, h] = y(!0), _ = v([i]); - V(() => { + H(() => { m !== !1 && _.current[_.current.length - 1] !== i && (_.current.push(i), h(!1)); }, [_, i]); let b = g(() => ({ @@ -4275,13 +4275,13 @@ function Rc(e, r) { a, m ]); - V(() => { + H(() => { i ? f("visible") : !Nc(p) && c.current !== null && f("hidden"); }, [i, p]); - let x = { unmount: o }, S = H(() => { + let x = { unmount: o }, S = U(() => { var t; m && h(!1), (t = e.beforeEnter) == null || t.call(e); - }), C = H(() => { + }), C = U(() => { var t; m && h(!1), (t = e.beforeLeave) == null || t.call(e); }), w = W(); @@ -4346,7 +4346,7 @@ var Xc = G(function(e, n) { titleId: null, descriptionId: null, panelRef: o() - }), D = H(() => s(!1)), O = H((e) => E({ + }), D = U(() => s(!1)), O = U((e) => E({ type: 0, id: e })), k = Hs() ? w === 0 : !1, [A, j] = ec(), M = { get current() { @@ -4357,11 +4357,11 @@ var Xc = G(function(e, n) { defaultContainers: [M] }), F = b !== null && (b & X.Closing) === X.Closing; Lr(f || F ? !1 : k, { - allowed: H(() => [x.current?.closest("[data-headlessui-portal]") ?? null]), - disallowed: H(() => [N?.closest("body > *:not(#headlessui-portal-root)") ?? null]) + allowed: U(() => [x.current?.closest("[data-headlessui-portal]") ?? null]), + disallowed: U(() => [N?.closest("body > *:not(#headlessui-portal-root)") ?? null]) }); let I = Or.get(null); - V(() => { + H(() => { if (k) return I.actions.push(i), () => I.actions.pop(i); }, [ I, @@ -4374,7 +4374,7 @@ var Xc = G(function(e, n) { }), sc(ee, C?.defaultView, (e) => { e.preventDefault(), e.stopPropagation(), document.activeElement && "blur" in document.activeElement && typeof document.activeElement.blur == "function" && document.activeElement.blur(), D(); }), Ti(f || F ? !1 : k, C, P), Rr(k, x, D); - let [L, R] = zn(), te = g(() => [{ + let [L, R] = zn(), z = g(() => [{ dialogState: w, close: D, setTitleId: O, @@ -4385,7 +4385,7 @@ var Xc = G(function(e, n) { O, p, T - ]), z = U({ open: w === 0 }), ne = { + ]), B = Rt({ open: w === 0 }), te = { ref: S, id: i, role: u, @@ -4394,18 +4394,18 @@ var Xc = G(function(e, n) { "aria-labelledby": T.titleId, "aria-describedby": L, unmount: p - }, re = !cc(), ie = vc.None; - k && !f && (ie |= vc.RestoreFocus, ie |= vc.TabLock, d && (ie |= vc.AutoFocus), re && (ie |= vc.InitialFocus)); - let ae = W(); - return t.createElement(Fs, null, t.createElement(Gs, { force: !0 }, t.createElement(rc, null, t.createElement(qc.Provider, { value: te }, t.createElement(nc, { target: x }, t.createElement(Gs, { force: !1 }, t.createElement(R, { slot: z }, t.createElement(j, null, t.createElement(xc, { + }, ne = !cc(), re = vc.None; + k && !f && (re |= vc.RestoreFocus, re |= vc.TabLock, d && (re |= vc.AutoFocus), ne && (re |= vc.InitialFocus)); + let ie = W(); + return t.createElement(Fs, null, t.createElement(Gs, { force: !0 }, t.createElement(rc, null, t.createElement(qc.Provider, { value: z }, t.createElement(nc, { target: x }, t.createElement(Gs, { force: !1 }, t.createElement(R, { slot: B }, t.createElement(j, null, t.createElement(xc, { initialFocus: c, initialFocusFallback: x, containers: P, - features: ie - }, t.createElement($n, { value: D }, ae({ - ourProps: ne, + features: re + }, t.createElement($n, { value: D }, ie({ + ourProps: te, theirProps: h, - slot: z, + slot: B, defaultTag: Zc, features: Qc, visible: w === 0, @@ -4434,10 +4434,10 @@ function $c(e, n) { } var el = "div"; function tl(e, r) { - let i = m(), { id: a = `headlessui-dialog-panel-${i}`, transition: o = !1, ...s } = e, [{ dialogState: c, unmount: l }, u] = Jc("Dialog.Panel"), d = K(r, u.panelRef), f = U({ open: c === 0 }), p = { + let i = m(), { id: a = `headlessui-dialog-panel-${i}`, transition: o = !1, ...s } = e, [{ dialogState: c, unmount: l }, u] = Jc("Dialog.Panel"), d = K(r, u.panelRef), f = Rt({ open: c === 0 }), p = { ref: d, id: a, - onClick: H((e) => { + onClick: U((e) => { e.stopPropagation(); }) }, h = o ? Hc : n, g = o ? { unmount: l } : {}, _ = W(); @@ -4451,7 +4451,7 @@ function tl(e, r) { } var nl = "div"; function rl(e, r) { - let { transition: i = !1, ...a } = e, [{ dialogState: o, unmount: s }] = Jc("Dialog.Backdrop"), c = U({ open: o === 0 }), l = { + let { transition: i = !1, ...a } = e, [{ dialogState: o, unmount: s }] = Jc("Dialog.Backdrop"), c = Rt({ open: o === 0 }), l = { ref: r, "aria-hidden": !0 }, u = i ? Hc : n, d = i ? { unmount: s } : {}, f = W(); @@ -4467,7 +4467,7 @@ var il = "h2"; function al(e, t) { let n = m(), { id: r = `headlessui-dialog-title-${n}`, ...i } = e, [{ dialogState: a, setTitleId: o }] = Jc("Dialog.Title"), s = K(t); f(() => (o(r), () => o(null)), [r, o]); - let c = U({ open: a === 0 }), l = { + let c = Rt({ open: a === 0 }), l = { ref: s, id: r }; @@ -4513,7 +4513,7 @@ function pl(e) { //#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-text-value.js function ml(e) { let t = v(""), n = v(""); - return H(() => { + return U(() => { let r = e.current; if (!r) return ""; let i = r.innerText; @@ -4893,7 +4893,7 @@ function jl(e, n) { }), D = v(/* @__PURE__ */ new Map()), O = tr(d), k = l((e) => Ht(A.mode, { [yl.Multi]: () => C.some((t) => O(t, e)), [yl.Single]: () => O(C, e) - }), [C]), A = U({ + }), [C]), A = Rt({ value: C, disabled: p, invalid: f, @@ -4905,21 +4905,21 @@ function jl(e, n) { optionsPropsRef: E, listRef: D }); - V(() => { + H(() => { T.state.dataRef.current = A; }, [A]); let j = J(T, (e) => e.listboxState), M = Or.get(null), N = J(M, l((e) => M.selectors.isTop(e, r), [M, r])), [P, F] = J(T, (e) => [e.buttonElement, e.optionsElement]); si(N, [P, F], (e, t) => { T.send({ type: xl.CloseListbox }), Kr(t, Gr.Loose) || (e.preventDefault(), P?.focus()); }); - let I = U({ + let I = Rt({ open: j === vl.Open, disabled: p, invalid: f, value: C - }), [ee, L] = qn({ inherit: !0 }), R = { ref: x }, te = l(() => { + }), [ee, L] = qn({ inherit: !0 }), R = { ref: x }, z = l(() => { if (S !== void 0) return w?.(S); - }, [w, S]), z = W(); + }, [w, S]), B = W(); return t.createElement(L, { value: ee, props: { htmlFor: P?.id }, @@ -4934,8 +4934,8 @@ function jl(e, n) { disabled: p, data: { [c]: C }, form: s, - onReset: te - }), z({ + onReset: z + }), B({ ourProps: R, theirProps: y, slot: I, @@ -4960,7 +4960,7 @@ function Nl(e, t) { close: a.actions.closeListbox, select: a.actions.selectActiveOption }); - let _ = H((e) => { + let _ = U((e) => { switch (e.key) { case q.Enter: ln(e.currentTarget); @@ -4973,7 +4973,7 @@ function Nl(e, t) { e.preventDefault(), a.actions.openListbox({ focus: i.value ? Z.Nothing : Z.Last }); break; } - }), v = H((e) => { + }), v = U((e) => { switch (e.key) { case q.Space: e.preventDefault(); @@ -4982,7 +4982,7 @@ function Nl(e, t) { }), y = ar((e) => { var t; a.state.listboxState === vl.Open ? (E(() => a.actions.closeListbox()), (t = a.state.buttonElement) == null || t.focus({ preventScroll: !0 })) : (e.preventDefault(), a.actions.openListbox({ focus: Z.Nothing })); - }), b = H((e) => e.preventDefault()), x = Kn([o]), S = Rn(), { isFocusVisible: C, focusProps: w } = _t({ autoFocus: c }), { isHovered: T, hoverProps: D } = Ct({ isDisabled: s }), { pressed: O, pressProps: k } = Rt({ disabled: s }), A = U({ + }), b = U((e) => e.preventDefault()), x = Kn([o]), S = Rn(), { isFocusVisible: C, focusProps: w } = gt({ autoFocus: c }), { isHovered: T, hoverProps: D } = St({ isDisabled: s }), { pressed: O, pressProps: k } = Lt({ disabled: s }), A = Rt({ open: p === vl.Open, active: O || p === vl.Open, disabled: s, @@ -5044,12 +5044,12 @@ function Ll(e, n) { index: N } }; - })()), I = xs(), ee = K(n, d ? P : null, v.actions.setOptionsElement, h), L = Pt(); + })()), I = xs(), ee = K(n, d ? P : null, v.actions.setOptionsElement, h), L = Nt(); f(() => { let e = S; - e && b === vl.Open && (jt(e) || e == null || e.focus({ preventScroll: !0 })); + e && b === vl.Open && (At(e) || e == null || e.focus({ preventScroll: !0 })); }, [b, S]); - let R = H((e) => { + let R = U((e) => { var t; switch (L.dispose(), e.key) { case q.Space: if (v.state.searchQuery !== "") return e.preventDefault(), e.stopPropagation(), v.actions.search(e.key); @@ -5078,12 +5078,12 @@ function Ll(e, n) { e.key.length === 1 && (v.actions.search(e.key), L.setTimeout(() => v.actions.clearSearch(), 350)); break; } - }), te = J(v, (e) => e.buttonElement?.id), z = U({ open: b === vl.Open }), ne = Xt(d ? I() : {}, { + }), z = J(v, (e) => e.buttonElement?.id), B = Rt({ open: b === vl.Open }), te = Xt(d ? I() : {}, { id: i, ref: ee, "aria-activedescendant": J(v, v.selectors.activeDescendantId), "aria-multiselectable": _.mode === yl.Multi || void 0, - "aria-labelledby": te, + "aria-labelledby": z, "aria-orientation": _.orientation, onKeyDown: R, role: "listbox", @@ -5094,17 +5094,17 @@ function Ll(e, n) { "--button-width": rr(O, x, !0).width }, ...Ai(k) - }), re = W(), ie = g(() => _.mode === yl.Multi ? _ : { + }), ne = W(), re = g(() => _.mode === yl.Multi ? _ : { ..._, isSelected: M }, [_, M]); return t.createElement(rc, { enabled: o ? e.static || O : !1, ownerDocument: w - }, t.createElement(Ol.Provider, { value: ie }, re({ - ourProps: ne, + }, t.createElement(Ol.Provider, { value: re }, ne({ + ourProps: te, theirProps: u, - slot: z, + slot: B, defaultTag: Fl, features: Il, visible: A, @@ -5113,7 +5113,7 @@ function Ll(e, n) { } var Rl = "div"; function zl(e, t) { - let n = m(), { id: r = `headlessui-listbox-option-${n}`, disabled: i = !1, value: a, ...o } = e, s = u(Pl) === !0, c = kl("Listbox.Option"), l = El("Listbox.Option"), d = J(l, (e) => l.selectors.isActive(e, r)), f = c.isSelected(a), p = v(null), h = ml(p), g = Ft({ + let n = m(), { id: r = `headlessui-listbox-option-${n}`, disabled: i = !1, value: a, ...o } = e, s = u(Pl) === !0, c = kl("Listbox.Option"), l = El("Listbox.Option"), d = J(l, (e) => l.selectors.isActive(e, r)), f = c.isSelected(a), p = v(null), h = ml(p), g = Pt({ disabled: i, value: a, domRef: p, @@ -5123,35 +5123,35 @@ function zl(e, t) { }), _ = K(t, p, (e) => { e ? c.listRef.current.set(r, e) : c.listRef.current.delete(r); }), y = J(l, (e) => l.selectors.shouldScrollIntoView(e, r)); - V(() => { - if (y) return Nt().requestAnimationFrame(() => { + H(() => { + if (y) return Mt().requestAnimationFrame(() => { var e, t; (t = (e = p.current)?.scrollIntoView) == null || t.call(e, { block: "nearest" }); }); - }, [y, p]), V(() => { + }, [y, p]), H(() => { if (!s) return l.actions.registerOption(r, g), () => l.actions.unregisterOption(r); }, [ g, r, s ]); - let b = H((e) => { + let b = U((e) => { if (i) return e.preventDefault(); l.actions.selectOption(a); - }), x = H(() => { + }), x = U(() => { if (i) return l.actions.goToOption({ focus: Z.Nothing }); l.actions.goToOption({ focus: Z.Specific, id: r }); - }), S = Di(), C = H((e) => S.update(e)), w = H((e) => { + }), S = Di(), C = U((e) => S.update(e)), w = U((e) => { S.wasMoved(e) && (i || d && l.state.activationTrigger === bl.Pointer || l.actions.goToOption({ focus: Z.Specific, id: r }, bl.Pointer)); - }), T = H((e) => { + }), T = U((e) => { S.wasMoved(e) && (i || d && l.state.activationTrigger === bl.Pointer && l.actions.goToOption({ focus: Z.Nothing })); - }), E = U({ + }), E = Rt({ active: d, focus: d, selected: f, @@ -5184,7 +5184,7 @@ function zl(e, t) { } var Bl = n; function Vl(e, n) { - let { options: r, placeholder: i, ...a } = e, o = { ref: K(n) }, s = kl("ListboxSelectedOption"), c = U({}), l = s.value === void 0 || s.value === null || s.mode === yl.Multi && Array.isArray(s.value) && s.value.length === 0, u = W(); + let { options: r, placeholder: i, ...a } = e, o = { ref: K(n) }, s = kl("ListboxSelectedOption"), c = Rt({}), l = s.value === void 0 || s.value === null || s.mode === yl.Multi && Array.isArray(s.value) && s.value.length === 0, u = W(); return t.createElement(Pl.Provider, { value: !0 }, u({ ourProps: o, theirProps: { @@ -5473,9 +5473,9 @@ function su(e, n) { var n; o.send({ type: Q.CloseMenu }), Kr(t, Gr.Loose) || (e.preventDefault(), (n = o.state.buttonElement) == null || n.focus()); }); - let p = H(() => { + let p = U(() => { o.send({ type: Q.CloseMenu }); - }), h = U({ + }), h = Rt({ open: s === Ql.Open, close: p }), g = { ref: d }, _ = W(); @@ -5492,10 +5492,10 @@ function su(e, n) { } var cu = "button"; function lu(e, t) { - let n = iu("Menu.Button"), r = m(), { id: i = `headlessui-menu-button-${r}`, disabled: a = !1, autoFocus: o = !1, ...s } = e, c = v(null), u = bs(), d = K(t, c, ys(), H((e) => n.send({ + let n = iu("Menu.Button"), r = m(), { id: i = `headlessui-menu-button-${r}`, disabled: a = !1, autoFocus: o = !1, ...s } = e, c = v(null), u = bs(), d = K(t, c, ys(), U((e) => n.send({ type: Q.SetButtonElement, element: e - }))), f = H((e) => { + }))), f = U((e) => { switch (e.key) { case q.Space: case q.Enter: @@ -5512,7 +5512,7 @@ function lu(e, t) { }); break; } - }), p = H((e) => { + }), p = U((e) => { switch (e.key) { case q.Space: e.preventDefault(); @@ -5540,7 +5540,7 @@ function lu(e, t) { focus: { focus: Z.Nothing }, trigger: $l.Pointer }))); - }), { isFocusVisible: b, focusProps: x } = _t({ autoFocus: o }), { isHovered: S, hoverProps: C } = Ct({ isDisabled: a }), { pressed: w, pressProps: T } = Rt({ disabled: a }), D = U({ + }), { isFocusVisible: b, focusProps: x } = gt({ autoFocus: o }), { isHovered: S, hoverProps: C } = St({ isDisabled: a }), { pressed: w, pressProps: T } = Lt({ disabled: a }), D = Rt({ open: h === Ql.Open, active: w || h === Ql.Open, disabled: a, @@ -5569,7 +5569,7 @@ function lu(e, t) { } var uu = "div", du = Ut.RenderStrategy | Ut.Static; function fu(e, n) { - let r = m(), { id: i = `headlessui-menu-items-${r}`, anchor: a, portal: o = !1, modal: s = !0, transition: c = !1, ...u } = e, d = vs(a), p = iu("Menu.Items"), [h, g] = Ss(d), _ = xs(), [v, b] = y(null), x = K(n, d ? h : null, H((e) => p.send({ + let r = m(), { id: i = `headlessui-menu-items-${r}`, anchor: a, portal: o = !1, modal: s = !0, transition: c = !1, ...u } = e, d = vs(a), p = iu("Menu.Items"), [h, g] = Ss(d), _ = xs(), [v, b] = y(null), x = K(n, d ? h : null, U((e) => p.send({ type: Q.SetItemsElement, element: e })), b), [S, C] = J(p, (e) => [e.menuState, e.buttonElement]), w = ci(C), T = ci(v); @@ -5583,7 +5583,7 @@ function fu(e, n) { let j = !J(p, p.selectors.didButtonMove) && O; f(() => { let e = v; - e && S === Ql.Open && (jt(e) || e.focus({ preventScroll: !0 })); + e && S === Ql.Open && (At(e) || e.focus({ preventScroll: !0 })); }, [S, v]), Ii(S === Ql.Open, { container: v, accept(e) { @@ -5593,7 +5593,7 @@ function fu(e, n) { e.setAttribute("role", "none"); } }); - let M = Pt(), N = H((e) => { + let M = Nt(), N = U((e) => { var t, n; switch (M.dispose(), e.key) { case q.Space: if (p.state.searchQuery !== "") return e.preventDefault(), e.stopPropagation(), p.send({ @@ -5638,13 +5638,13 @@ function fu(e, n) { }), M.setTimeout(() => p.send({ type: Q.ClearSearch }), 350)); break; } - }), P = H((e) => { + }), P = U((e) => { switch (e.key) { case q.Space: e.preventDefault(); break; } - }), F = U({ open: S === Ql.Open }), I = Xt(d ? _() : {}, { + }), F = Rt({ open: S === Ql.Open }), I = Xt(d ? _() : {}, { "aria-activedescendant": J(p, p.selectors.activeDescendantId), "aria-labelledby": J(p, (e) => e.buttonElement?.id), id: i, @@ -5676,8 +5676,8 @@ function fu(e, n) { var pu = n; function mu(e, n) { let r = m(), { id: i = `headlessui-menu-item-${r}`, disabled: a = !1, ...o } = e, s = iu("Menu.Item"), c = J(s, (e) => s.selectors.isActive(e, i)), l = v(null), u = K(n, l), d = J(s, (e) => s.selectors.shouldScrollIntoView(e, i)); - V(() => { - if (d) return Nt().requestAnimationFrame(() => { + H(() => { + if (d) return Mt().requestAnimationFrame(() => { var e, t; (t = (e = l.current)?.scrollIntoView) == null || t.call(e, { block: "nearest" }); }); @@ -5689,15 +5689,15 @@ function mu(e, n) { return f(); } }); - V(() => { + H(() => { p.current.disabled = a; - }, [p, a]), V(() => (s.actions.registerItem(i, p), () => s.actions.unregisterItem(i)), [p, i]); - let h = H(() => { + }, [p, a]), H(() => (s.actions.registerItem(i, p), () => s.actions.unregisterItem(i)), [p, i]); + let h = U(() => { s.send({ type: Q.CloseMenu }); - }), g = H((e) => { + }), g = U((e) => { if (a) return e.preventDefault(); s.send({ type: Q.CloseMenu }), qr(s.state.buttonElement); - }), _ = H(() => { + }), _ = U(() => { if (a) return s.send({ type: Q.GoToItem, focus: Z.Nothing @@ -5707,19 +5707,19 @@ function mu(e, n) { focus: Z.Specific, id: i }); - }), y = Di(), b = H((e) => y.update(e)), x = H((e) => { + }), y = Di(), b = U((e) => y.update(e)), x = U((e) => { y.wasMoved(e) && (a || c || s.send({ type: Q.GoToItem, focus: Z.Specific, id: i, trigger: $l.Pointer })); - }), S = H((e) => { + }), S = U((e) => { y.wasMoved(e) && (a || c && s.state.activationTrigger === $l.Pointer && s.send({ type: Q.GoToItem, focus: Z.Nothing })); - }), [C, w] = qn(), [T, E] = zn(), D = U({ + }), [C, w] = qn(), [T, E] = zn(), D = Rt({ active: c, focus: c, disabled: a, @@ -5768,7 +5768,7 @@ function gu(e, n) { var _u = "header"; function vu(e, t) { let n = m(), { id: r = `headlessui-menu-heading-${n}`, ...i } = e, a = Gn(); - V(() => a.register(r), [r, a.register]); + H(() => a.register(r), [r, a.register]); let o = { id: r, ref: t, @@ -5872,7 +5872,7 @@ var xu = G(su), Su = G(lu), Cu = G(fu), $ = G(mu), wu = G(gu), Tu = G(vu), Eu = }) }), Au(this, "selectors", { isPortalled: (e) => { if (!e.button || !e.panel) return !1; - let t = Ot(e.button) ?? document; + let t = Dt(e.button) ?? document; for (let n of t.querySelectorAll("body > *")) if (Number(n?.contains(e.button)) ^ Number(n?.contains(e.panel))) return !0; let n = Ur(t), r = n.indexOf(e.button), i = (r + n.length - 1) % n.length, a = (r + 1) % n.length, o = n[i], s = n[a]; return !e.panel.contains(o) && !e.panel.contains(s); @@ -5941,7 +5941,7 @@ function Uu(e, n) { e.panel, e.buttonId, e.panelId - ], [])), y = li(s.current ?? d), b = Ft(h), x = Ft(_), S = g(() => ({ + ], [])), y = li(s.current ?? d), b = Pt(h), x = Pt(_), S = g(() => ({ buttonId: b, panelId: x, close: o.actions.close @@ -5949,8 +5949,8 @@ function Uu(e, n) { b, x, o - ]), C = zu(), w = C?.registerPopover, T = H(() => { - let e = At(s.current ?? d); + ]), C = zu(), w = C?.registerPopover, T = U(() => { + let e = kt(s.current ?? d); return C?.isFocusWithinPopoverGroup() ?? (e && (d?.contains(e) || p?.contains(e))); }); f(() => w?.(S), [w, S]); @@ -5969,7 +5969,7 @@ function Uu(e, n) { }, !0), si(u === ju.Open, k.resolveContainers, (e, t) => { o.actions.close(), Kr(t, Gr.Loose) || (e.preventDefault(), d?.focus()); }); - let A = U({ + let A = Rt({ open: u === ju.Open, close: o.actions.refocusableClose }), j = J(o, l((e) => Ht(e.popoverState, { @@ -6002,7 +6002,7 @@ function Gu(e, n) { i, c ]); - let [T] = y(() => Symbol()), E = K(x, n, ys(), H((e) => { + let [T] = y(() => Symbol()), E = K(x, n, ys(), U((e) => { if (!w) { if (e) c.state.buttons.current.push(T); else { @@ -6011,7 +6011,7 @@ function Gu(e, n) { } c.state.buttons.current.length > 1 && console.warn("You are already using a but only 1 is supported."), e && c.actions.setButton(e); } - })), D = K(x, n), O = H((e) => { + })), D = K(x, n), O = U((e) => { var t, n, r; if (w) { if (c.state.popoverState === ju.Closed) return; @@ -6029,28 +6029,28 @@ function Gu(e, n) { case q.Escape: if (c.state.popoverState !== ju.Open) return C?.(c.state.buttonId); if (!x.current) return; - let t = At(x.current); + let t = kt(x.current); if (t && !x.current.contains(t)) return; e.preventDefault(), e.stopPropagation(), c.actions.close(); break; } - }), k = H((e) => { + }), k = U((e) => { w || e.key === q.Space && e.preventDefault(); - }), A = H((e) => { + }), A = U((e) => { var t, n; Mn(e.currentTarget) || a || (w ? (c.actions.close(), (t = c.state.button) == null || t.focus()) : (e.preventDefault(), e.stopPropagation(), c.state.popoverState === ju.Closed ? (C?.(c.state.buttonId), c.actions.open()) : c.actions.close(), (n = c.state.button) == null || n.focus())); - }), j = H((e) => { + }), j = U((e) => { e.preventDefault(), e.stopPropagation(); - }), { isFocusVisible: M, focusProps: N } = _t({ autoFocus: o }), { isHovered: P, hoverProps: F } = Ct({ isDisabled: a }), { pressed: I, pressProps: ee } = Rt({ disabled: a }), L = u === ju.Open, R = U({ + }), { isFocusVisible: M, focusProps: N } = gt({ autoFocus: o }), { isHovered: P, hoverProps: F } = St({ isDisabled: a }), { pressed: I, pressProps: ee } = Lt({ disabled: a }), L = u === ju.Open, R = Rt({ open: L, active: I || L, disabled: a, hover: P, focus: M, autofocus: o - }), te = gi(e, p), z = Xt(w ? { + }), z = gi(e, p), B = Xt(w ? { ref: D, - type: te, + type: z, onKeyDown: O, onClick: A, disabled: a || void 0, @@ -6058,7 +6058,7 @@ function Gu(e, n) { } : { ref: E, id: h, - type: te, + type: z, "aria-expanded": u === ju.Open, "aria-controls": g ? _ : void 0, disabled: a || void 0, @@ -6067,22 +6067,22 @@ function Gu(e, n) { onKeyUp: k, onClick: A, onMouseDown: j - }, N, F, ee), ne = hc(), re = H(() => { + }, N, F, ee), te = hc(), ne = U(() => { if (!Cn(c.state.panel)) return; let e = c.state.panel; function t() { - Ht(ne.current, { + Ht(te.current, { [mc.Forwards]: () => ei(e, Y.First), [mc.Backwards]: () => ei(e, Y.Last) - }) === Vr.Error && ei(Ur(kt(c.state.button)).filter((e) => e.dataset.headlessuiFocusGuard !== "true"), Ht(ne.current, { + }) === Vr.Error && ei(Ur(Ot(c.state.button)).filter((e) => e.dataset.headlessuiFocusGuard !== "true"), Ht(te.current, { [mc.Forwards]: Y.Next, [mc.Backwards]: Y.Previous }), { relativeTo: c.state.button }); } t(); - }), ie = W(); - return t.createElement(t.Fragment, null, ie({ - ourProps: z, + }), re = W(); + return t.createElement(t.Fragment, null, re({ + ourProps: B, theirProps: s, slot: R, defaultTag: Wu, @@ -6094,15 +6094,15 @@ function Gu(e, n) { "data-headlessui-focus-guard": !0, as: "button", type: "button", - onFocus: re + onFocus: ne })); } var Ku = "div", qu = Ut.RenderStrategy | Ut.Static; function Ju(e, t) { - let n = m(), { id: r = `headlessui-popover-backdrop-${n}`, transition: i = !1, ...a } = e, o = Iu("Popover.Backdrop"), s = J(o, l((e) => e.popoverState, [])), [c, u] = y(null), d = K(t, u), f = Ns(), [p, h] = ji(i, c, f === null ? s === ju.Open : (f & X.Open) === X.Open), g = H((e) => { + let n = m(), { id: r = `headlessui-popover-backdrop-${n}`, transition: i = !1, ...a } = e, o = Iu("Popover.Backdrop"), s = J(o, l((e) => e.popoverState, [])), [c, u] = y(null), d = K(t, u), f = Ns(), [p, h] = ji(i, c, f === null ? s === ju.Open : (f & X.Open) === X.Open), g = U((e) => { if (Mn(e.currentTarget)) return e.preventDefault(); o.actions.close(); - }), _ = U({ open: s === ju.Open }), v = { + }), _ = Rt({ open: s === ju.Open }), v = { ref: d, id: r, "aria-hidden": !0, @@ -6130,15 +6130,15 @@ function Zu(e, n) { ], [])), C = `headlessui-focus-sentinel-before-${r}`, w = `headlessui-focus-sentinel-after-${r}`, T = v(null), E = vs(o), [D, O] = Ss(E), k = xs(); E && (s = !0); let [A, j] = y(null), M = K(T, n, E ? D : null, p.actions.setPanel, j), N = ci(_), P = ci(T.current); - V(() => (p.actions.setPanelId(i), () => p.actions.setPanelId(null)), [i, p]); + H(() => (p.actions.setPanelId(i), () => p.actions.setPanelId(null)), [i, p]); let F = Ns(), [I, ee] = ji(u, A, F === null ? g === ju.Open : (F & X.Open) === X.Open); Rr(I, _, p.actions.close), Ti(!b && c && I, P); - let L = H((e) => { + let L = U((e) => { var t; switch (e.key) { case q.Escape: if (p.state.popoverState !== ju.Open || !T.current) return; - let n = At(T.current); + let n = kt(T.current); if (n && !T.current.contains(n)) return; e.preventDefault(), e.stopPropagation(), p.actions.close(), (t = p.state.button) == null || t.focus(); break; @@ -6154,7 +6154,7 @@ function Zu(e, n) { p ]), f(() => { if (b || !a || g !== ju.Open || !T.current) return; - let e = At(T.current); + let e = kt(T.current); T.current.contains(e) || ei(T.current, Y.First); }, [ b, @@ -6162,10 +6162,10 @@ function Zu(e, n) { T.current, g ]); - let R = U({ + let R = Rt({ open: g === ju.Open, close: p.actions.refocusableClose - }), te = Xt(E ? k() : {}, { + }), z = Xt(E ? k() : {}, { ref: M, id: i, onKeyDown: L, @@ -6181,11 +6181,11 @@ function Zu(e, n) { "--button-width": rr(I, _, !0).width }, ...Ai(ee) - }), z = hc(), ne = H(() => { + }), B = hc(), te = U(() => { let e = T.current; if (!e) return; function t() { - Ht(z.current, { + Ht(B.current, { [mc.Forwards]: () => { var t; ei(e, Y.First) === Vr.Error && ((t = p.state.afterPanelSentinel.current) == null || t.focus()); @@ -6197,14 +6197,14 @@ function Zu(e, n) { }); } t(); - }), re = H(() => { + }), ne = U(() => { let e = T.current; if (!e) return; function t() { - Ht(z.current, { + Ht(B.current, { [mc.Forwards]: () => { if (!p.state.button) return; - let e = Ur(kt(p.state.button) ?? document.body), t = e.indexOf(p.state.button), n = e.slice(0, t + 1), r = [...e.slice(t + 1), ...n]; + let e = Ur(Ot(p.state.button) ?? document.body), t = e.indexOf(p.state.button), n = e.slice(0, t + 1), r = [...e.slice(t + 1), ...n]; for (let e of r.slice()) if (e.dataset.headlessuiFocusGuard === "true" || A != null && A.contains(e)) { let t = r.indexOf(e); t !== -1 && r.splice(t, 1); @@ -6218,7 +6218,7 @@ function Zu(e, n) { }); } t(); - }), ie = W(); + }), re = W(); return t.createElement(Fs, null, t.createElement(Bu.Provider, { value: i }, t.createElement($n, { value: p.actions.refocusableClose }, t.createElement(rc, { enabled: s ? e.static || I : !1, ownerDocument: N @@ -6229,9 +6229,9 @@ function Zu(e, n) { "data-headlessui-focus-guard": !0, as: "button", type: "button", - onFocus: ne - }), ie({ - ourProps: te, + onFocus: te + }), re({ + ourProps: z, theirProps: d, slot: R, defaultTag: Yu, @@ -6245,12 +6245,12 @@ function Zu(e, n) { "data-headlessui-focus-guard": !0, as: "button", type: "button", - onFocus: re + onFocus: ne }))))); } var Qu = "div"; function $u(e, n) { - let r = v(null), i = K(r, n), [a, o] = y([]), s = H((e) => { + let r = v(null), i = K(r, n), [a, o] = y([]), s = U((e) => { o((t) => { let n = t.indexOf(e); if (n !== -1) { @@ -6259,13 +6259,13 @@ function $u(e, n) { } return t; }); - }), c = H((e) => (o((t) => [...t, e]), () => s(e))), l = H(() => { + }), c = U((e) => (o((t) => [...t, e]), () => s(e))), l = U(() => { var e; - let t = kt(r.current); + let t = Ot(r.current); if (!t) return !1; - let n = At(r.current); + let n = kt(r.current); return (e = r.current) != null && e.contains(n) ? !0 : a.some((e) => t.getElementById(e.buttonId.current)?.contains(n) || t.getElementById(e.panelId.current)?.contains(n)); - }), u = H((e) => { + }), u = U((e) => { for (let t of a) t.buttonId.current !== e && t.close(); }), d = g(() => ({ registerPopover: c, @@ -6277,7 +6277,7 @@ function $u(e, n) { s, l, u - ]), f = U({}), p = e, m = { ref: i }, h = W(); + ]), f = Rt({}), p = e, m = { ref: i }, h = W(); return t.createElement(dc, null, t.createElement(Ru.Provider, { value: d }, h({ ourProps: m, theirProps: p, @@ -6336,11 +6336,11 @@ function pd(e, t) { } var md = "div"; function hd(e, n) { - let r = m(), i = Bt(), { id: a = `headlessui-radiogroup-${r}`, value: o, form: s, name: c, onChange: u, by: d, disabled: f = i || !1, defaultValue: p, tabIndex: h = 0, ...y } = e, b = tr(d), [x, S] = _(pd, { options: [] }), C = x.options, [w, T] = qn(), [E, D] = zn(), O = v(null), k = K(O, n), A = an(p), [j, M] = rn(o, u, A), N = g(() => C.find((e) => !e.propsRef.current.disabled), [C]), P = g(() => C.some((e) => b(e.propsRef.current.value, j)), [C, j]), F = H((e) => { + let r = m(), i = Bt(), { id: a = `headlessui-radiogroup-${r}`, value: o, form: s, name: c, onChange: u, by: d, disabled: f = i || !1, defaultValue: p, tabIndex: h = 0, ...y } = e, b = tr(d), [x, S] = _(pd, { options: [] }), C = x.options, [w, T] = qn(), [E, D] = zn(), O = v(null), k = K(O, n), A = an(p), [j, M] = rn(o, u, A), N = g(() => C.find((e) => !e.propsRef.current.disabled), [C]), P = g(() => C.some((e) => b(e.propsRef.current.value, j)), [C, j]), F = U((e) => { if (f || b(e, j)) return !1; let t = C.find((t) => b(t.propsRef.current.value, e))?.propsRef.current; return t != null && t.disabled ? !1 : (M?.(e), !0); - }), I = H((e) => { + }), I = U((e) => { if (!O.current) return; let t = C.filter((e) => e.propsRef.current.disabled === !1).map((e) => e.element.current); switch (e.key) { @@ -6350,26 +6350,26 @@ function hd(e, n) { case q.ArrowLeft: case q.ArrowUp: if (e.preventDefault(), e.stopPropagation(), ei(t, Y.Previous | Y.WrapAround) === Vr.Success) { - let e = C.find((e) => jt(e.element.current)); + let e = C.find((e) => At(e.element.current)); e && F(e.propsRef.current.value); } break; case q.ArrowRight: case q.ArrowDown: if (e.preventDefault(), e.stopPropagation(), ei(t, Y.Next | Y.WrapAround) === Vr.Success) { - let e = C.find((e) => jt(e.element.current)); + let e = C.find((e) => At(e.element.current)); e && F(e.propsRef.current.value); } break; case q.Space: { e.preventDefault(), e.stopPropagation(); - let t = C.find((e) => jt(e.element.current)); + let t = C.find((e) => At(e.element.current)); t && F(t.propsRef.current.value); } break; } - }), ee = H((e) => (S({ + }), ee = U((e) => (S({ type: 0, ...e }), () => S({ @@ -6394,16 +6394,16 @@ function hd(e, n) { ]), R = g(() => ({ registerOption: ee, change: F - }), [ee, F]), te = { + }), [ee, F]), z = { ref: k, id: a, role: "radiogroup", "aria-labelledby": w, "aria-describedby": E, onKeyDown: I - }, z = U({ value: j }), ne = l(() => { + }, B = Rt({ value: j }), te = l(() => { if (A !== void 0) return F(A); - }, [F, A]), re = W(); + }, [F, A]), ne = W(); return t.createElement(D, { name: "RadioGroup.Description" }, t.createElement(T, { name: "RadioGroup.Label" }, t.createElement(dd.Provider, { value: R }, t.createElement(ld.Provider, { value: L }, c != null && t.createElement(_n, { disabled: f, data: { [c]: j || "on" }, @@ -6412,22 +6412,22 @@ function hd(e, n) { checked: j != null }, form: s, - onReset: ne - }), re({ - ourProps: te, + onReset: te + }), ne({ + ourProps: z, theirProps: y, - slot: z, + slot: B, defaultTag: md, name: "RadioGroup" }))))); } var gd = "div"; function _d(e, n) { - let r = ud("RadioGroup.Option"), i = fd("RadioGroup.Option"), a = m(), { id: o = `headlessui-radiogroup-option-${a}`, value: s, disabled: c = r.disabled || !1, autoFocus: l = !1, ...u } = e, d = v(null), f = K(d, n), [p, h] = qn(), [g, _] = zn(), y = Ft({ + let r = ud("RadioGroup.Option"), i = fd("RadioGroup.Option"), a = m(), { id: o = `headlessui-radiogroup-option-${a}`, value: s, disabled: c = r.disabled || !1, autoFocus: l = !1, ...u } = e, d = v(null), f = K(d, n), [p, h] = qn(), [g, _] = zn(), y = Pt({ value: s, disabled: c }); - V(() => i.registerOption({ + H(() => i.registerOption({ id: o, element: d, propsRef: y @@ -6437,11 +6437,11 @@ function _d(e, n) { d, y ]); - let b = H((e) => { + let b = U((e) => { var t; if (Mn(e.currentTarget)) return e.preventDefault(); i.change(s) && ((t = d.current) == null || t.focus()); - }), x = r.firstOption?.id === o, { isFocusVisible: S, focusProps: C } = _t({ autoFocus: l }), { isHovered: w, hoverProps: T } = Ct({ isDisabled: c }), E = r.compare(r.value, s), D = Xt({ + }), x = r.firstOption?.id === o, { isFocusVisible: S, focusProps: C } = gt({ autoFocus: l }), { isHovered: w, hoverProps: T } = St({ isDisabled: c }), E = r.compare(r.value, s), D = Xt({ ref: f, id: o, role: "radio", @@ -6452,7 +6452,7 @@ function _d(e, n) { tabIndex: c ? -1 : E || !r.containsCheckedOption && x ? r.tabIndex : -1, onClick: c ? void 0 : b, autoFocus: l - }, C, T), O = U({ + }, C, T), O = Rt({ checked: E, disabled: c, active: S, @@ -6470,11 +6470,11 @@ function _d(e, n) { } var vd = "span"; function yd(e, t) { - let n = ud("Radio"), r = fd("Radio"), i = m(), a = bn(), o = Bt(), { id: s = a || `headlessui-radio-${i}`, value: c, disabled: l = n.disabled || o || !1, autoFocus: u = !1, ...d } = e, f = v(null), p = K(f, t), h = Kn(), g = Rn(), _ = Ft({ + let n = ud("Radio"), r = fd("Radio"), i = m(), a = bn(), o = Bt(), { id: s = a || `headlessui-radio-${i}`, value: c, disabled: l = n.disabled || o || !1, autoFocus: u = !1, ...d } = e, f = v(null), p = K(f, t), h = Kn(), g = Rn(), _ = Pt({ value: c, disabled: l }); - V(() => r.registerOption({ + H(() => r.registerOption({ id: s, element: f, propsRef: _ @@ -6484,11 +6484,11 @@ function yd(e, t) { f, _ ]); - let y = H((e) => { + let y = U((e) => { var t; if (Mn(e.currentTarget)) return e.preventDefault(); r.change(c) && ((t = f.current) == null || t.focus()); - }), { isFocusVisible: b, focusProps: x } = _t({ autoFocus: u }), { isHovered: S, hoverProps: C } = Ct({ isDisabled: l }), w = n.firstOption?.id === s, T = n.compare(n.value, c), E = Xt({ + }), { isFocusVisible: b, focusProps: x } = gt({ autoFocus: u }), { isHovered: S, hoverProps: C } = St({ isDisabled: l }), w = n.firstOption?.id === s, T = n.compare(n.value, c), E = Xt({ ref: p, id: s, role: "radio", @@ -6499,7 +6499,7 @@ function yd(e, t) { tabIndex: l ? -1 : T || !n.containsCheckedOption && w ? n.tabIndex : -1, autoFocus: u, onClick: l ? void 0 : y - }, x, C), D = U({ + }, x, C), D = Rt({ checked: T, disabled: l, hover: S, @@ -6801,7 +6801,7 @@ function Xd({ title: t, titleId: n, ...r }, i) { } var Zd = /*#__PURE__*/ e.forwardRef(Xd); //#endregion -//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronLeftIcon.js +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronDownIcon.js function Qd({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", @@ -6816,12 +6816,12 @@ function Qd({ title: t, titleId: n, ...r }, i) { }, 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" + d: "m19.5 8.25-7.5 7.5-7.5-7.5" })); } var $d = /*#__PURE__*/ e.forwardRef(Qd); //#endregion -//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronRightIcon.js +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronLeftIcon.js function ef({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", @@ -6836,12 +6836,12 @@ function ef({ title: t, titleId: n, ...r }, i) { }, 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" + d: "M15.75 19.5 8.25 12l7.5-7.5" })); } var tf = /*#__PURE__*/ e.forwardRef(ef); //#endregion -//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronUpDownIcon.js +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronRightIcon.js function nf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", @@ -6856,12 +6856,12 @@ function nf({ title: t, titleId: n, ...r }, i) { }, 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" + d: "m8.25 4.5 7.5 7.5-7.5 7.5" })); } var rf = /*#__PURE__*/ e.forwardRef(nf); //#endregion -//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ClipboardDocumentIcon.js +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ChevronUpDownIcon.js function af({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", @@ -6876,13 +6876,33 @@ function af({ title: t, titleId: n, ...r }, i) { }, 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" + d: "M8.25 15 12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9" })); } var of = /*#__PURE__*/ e.forwardRef(af); //#endregion -//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/Cog6ToothIcon.js +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ClipboardDocumentIcon.js function sf({ 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" + })); +} +var cf = /*#__PURE__*/ e.forwardRef(sf); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/Cog6ToothIcon.js +function lf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -6903,10 +6923,10 @@ function sf({ title: t, titleId: n, ...r }, i) { d: "M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" })); } -var cf = /*#__PURE__*/ e.forwardRef(sf); +var uf = /*#__PURE__*/ e.forwardRef(lf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/DocumentDuplicateIcon.js -function lf({ title: t, titleId: n, ...r }, i) { +function df({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -6923,10 +6943,10 @@ function lf({ title: t, titleId: n, ...r }, i) { 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 uf = /*#__PURE__*/ e.forwardRef(lf); +var ff = /*#__PURE__*/ e.forwardRef(df); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/EllipsisHorizontalIcon.js -function df({ title: t, titleId: n, ...r }, i) { +function pf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -6943,10 +6963,10 @@ function df({ title: t, titleId: n, ...r }, i) { 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 ff = /*#__PURE__*/ e.forwardRef(df); +var mf = /*#__PURE__*/ e.forwardRef(pf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ExclamationTriangleIcon.js -function pf({ title: t, titleId: n, ...r }, i) { +function hf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -6963,10 +6983,10 @@ function pf({ title: t, titleId: n, ...r }, i) { 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 mf = /*#__PURE__*/ e.forwardRef(pf); +var gf = /*#__PURE__*/ e.forwardRef(hf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/FunnelIcon.js -function hf({ title: t, titleId: n, ...r }, i) { +function _f({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -6983,10 +7003,10 @@ function hf({ title: t, titleId: n, ...r }, i) { 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 gf = /*#__PURE__*/ e.forwardRef(hf); +var vf = /*#__PURE__*/ e.forwardRef(_f); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/InformationCircleIcon.js -function _f({ title: t, titleId: n, ...r }, i) { +function yf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7003,10 +7023,10 @@ function _f({ title: t, titleId: n, ...r }, i) { 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 vf = /*#__PURE__*/ e.forwardRef(_f); +var bf = /*#__PURE__*/ e.forwardRef(yf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/LinkIcon.js -function yf({ title: t, titleId: n, ...r }, i) { +function xf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7023,10 +7043,10 @@ function yf({ title: t, titleId: n, ...r }, i) { 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 bf = /*#__PURE__*/ e.forwardRef(yf); +var Sf = /*#__PURE__*/ e.forwardRef(xf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/LockClosedIcon.js -function xf({ title: t, titleId: n, ...r }, i) { +function Cf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7043,10 +7063,10 @@ function xf({ title: t, titleId: n, ...r }, i) { 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 Sf = /*#__PURE__*/ e.forwardRef(xf); +var wf = /*#__PURE__*/ e.forwardRef(Cf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/MagnifyingGlassIcon.js -function Cf({ title: t, titleId: n, ...r }, i) { +function Tf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7063,10 +7083,30 @@ function Cf({ title: t, titleId: n, ...r }, i) { 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" })); } -var wf = /*#__PURE__*/ e.forwardRef(Cf); +var Ef = /*#__PURE__*/ e.forwardRef(Tf); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/PencilSquareIcon.js +function Df({ 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 Of = /*#__PURE__*/ e.forwardRef(Df); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/PencilIcon.js -function Tf({ title: t, titleId: n, ...r }, i) { +function kf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7083,10 +7123,10 @@ function Tf({ title: t, titleId: n, ...r }, i) { 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 Ef = /*#__PURE__*/ e.forwardRef(Tf); +var Af = /*#__PURE__*/ e.forwardRef(kf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/PlusIcon.js -function Df({ title: t, titleId: n, ...r }, i) { +function jf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7103,10 +7143,10 @@ function Df({ title: t, titleId: n, ...r }, i) { d: "M12 4.5v15m7.5-7.5h-15" })); } -var Of = /*#__PURE__*/ e.forwardRef(Df); +var Mf = /*#__PURE__*/ e.forwardRef(jf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/RectangleGroupIcon.js -function kf({ title: t, titleId: n, ...r }, i) { +function Nf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7123,10 +7163,10 @@ function kf({ title: t, titleId: n, ...r }, i) { 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" })); } -var Af = /*#__PURE__*/ e.forwardRef(kf); +var Pf = /*#__PURE__*/ e.forwardRef(Nf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/Squares2X2Icon.js -function jf({ title: t, titleId: n, ...r }, i) { +function Ff({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7143,10 +7183,10 @@ function jf({ title: t, titleId: n, ...r }, i) { 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" })); } -var Mf = /*#__PURE__*/ e.forwardRef(jf); +var If = /*#__PURE__*/ e.forwardRef(Ff); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/TableCellsIcon.js -function Nf({ title: t, titleId: n, ...r }, i) { +function Lf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7163,10 +7203,10 @@ function Nf({ title: t, titleId: n, ...r }, i) { 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 Pf = /*#__PURE__*/ e.forwardRef(Nf); +var Rf = /*#__PURE__*/ e.forwardRef(Lf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/TagIcon.js -function Ff({ title: t, titleId: n, ...r }, i) { +function zf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7187,10 +7227,10 @@ function Ff({ title: t, titleId: n, ...r }, i) { d: "M6 6h.008v.008H6V6Z" })); } -var If = /*#__PURE__*/ e.forwardRef(Ff); +var Bf = /*#__PURE__*/ e.forwardRef(zf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/TrashIcon.js -function Lf({ title: t, titleId: n, ...r }, i) { +function Vf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7207,10 +7247,30 @@ function Lf({ title: t, titleId: n, ...r }, i) { 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 Rf = /*#__PURE__*/ e.forwardRef(Lf); +var Hf = /*#__PURE__*/ e.forwardRef(Vf); +//#endregion +//#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/UserCircleIcon.js +function Uf({ 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" + })); +} +var Wf = /*#__PURE__*/ e.forwardRef(Uf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/UserIcon.js -function zf({ title: t, titleId: n, ...r }, i) { +function Gf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7227,10 +7287,10 @@ function zf({ title: t, titleId: n, ...r }, i) { 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" })); } -var Bf = /*#__PURE__*/ e.forwardRef(zf); +var Kf = /*#__PURE__*/ e.forwardRef(Gf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/ViewColumnsIcon.js -function Vf({ title: t, titleId: n, ...r }, i) { +function qf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7247,10 +7307,10 @@ function Vf({ title: t, titleId: n, ...r }, i) { 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" })); } -var Hf = /*#__PURE__*/ e.forwardRef(Vf); +var Jf = /*#__PURE__*/ e.forwardRef(qf); //#endregion //#region ../../node_modules/.pnpm/@heroicons+react@2.2.0_react@19.2.7/node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js -function Uf({ title: t, titleId: n, ...r }, i) { +function Yf({ title: t, titleId: n, ...r }, i) { return /*#__PURE__*/ e.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", fill: "none", @@ -7267,10 +7327,10 @@ function Uf({ title: t, titleId: n, ...r }, i) { d: "M6 18 18 6M6 6l12 12" })); } -var Wf = /*#__PURE__*/ e.forwardRef(Uf); +var Xf = /*#__PURE__*/ e.forwardRef(Yf); //#endregion //#region ../../shared/lib/frontmatter.ts -function Gf(e) { +function Zf(e) { if (!e.startsWith("---\n") && !e.startsWith("---\r\n")) return { data: {}, body: e, @@ -7296,8 +7356,8 @@ function Gf(e) { hasFrontmatter: !0 }; } -function Kf(e, t) { - let n = Gf(e), r = { +function Qf(e, t) { + let n = Zf(e), r = { ...n.data, ...t }; @@ -7305,13 +7365,13 @@ function Kf(e, t) { } //#endregion //#region ../../shared/lib/board.ts -function qf(e) { +function $f(e) { return e.split(",").map((e) => e.trim()).filter(Boolean); } -function Jf(e) { +function ep(e) { return e.join(", "); } -var Yf = /* @__PURE__ */ new Set([ +var tp = /* @__PURE__ */ new Set([ "id", "board", "ticket", @@ -7337,12 +7397,12 @@ var Yf = /* @__PURE__ */ new Set([ "relates", "parent" ]); -function Xf(e, t) { - let { data: n, body: r } = Gf(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 = Jf(t.attachments)), t.custom !== void 0) for (let [e, n] of Object.entries(t.custom)) Yf.has(e) || (i[e] = n ?? ""); - return t.blockedBy !== void 0 && (i.blocked_by = fp(t.blockedBy)), t.blocks !== void 0 && (i.blocks = fp(t.blocks)), t.relates !== void 0 && (i.relates = fp(t.relates)), t.parent !== void 0 && (i.parent = t.parent ? fp([t.parent]) : ""), Kf(t.notes === void 0 ? r : t.notes, i); +function np(e, t) { + let { data: n, body: r } = Zf(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 = ep(t.attachments)), t.custom !== void 0) for (let [e, n] of Object.entries(t.custom)) tp.has(e) || (i[e] = n ?? ""); + return t.blockedBy !== void 0 && (i.blocked_by = vp(t.blockedBy)), t.blocks !== void 0 && (i.blocks = vp(t.blocks)), t.relates !== void 0 && (i.relates = vp(t.relates)), t.parent !== void 0 && (i.parent = t.parent ? vp([t.parent]) : ""), Qf(t.notes === void 0 ? r : t.notes, i); } -function Zf(e) { +function rp(e) { let t = e.split(/[\\/]/).pop() || e; try { return decodeURIComponent(t.split("?")[0] || t); @@ -7350,7 +7410,7 @@ function Zf(e) { return t; } } -function Qf(e) { +function ip(e) { let t = e.trim(); if (!t) return !1; let n = /^([a-z][a-z0-9+.-]*):/i.exec(t); @@ -7358,7 +7418,7 @@ function Qf(e) { let r = n[1].toLowerCase(); return r === "http" || r === "https"; } -function $f(e, t) { +function ap(e, t) { let n = {}; if (!e || !t) return n; for (let r of t) { @@ -7367,24 +7427,24 @@ function $f(e, t) { } return n; } -var ep = [ +var op = [ "urgent", "high", "medium", "low", "none" -], tp = { +], sp = { urgent: 0, high: 1, medium: 2, low: 3, none: 4 -}, np = { +}, cp = { 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" -}, rp = [ +}, lp = [ "#ef4444", "#f59e0b", "#eab308", @@ -7394,7 +7454,7 @@ var ep = [ "#a855f7", "#ec4899", "#78716c" -], ip = [ +], up = [ "title", "board", "status", @@ -7411,7 +7471,7 @@ var ep = [ "attachments", "parent" ]; -function ap(e) { +function dp(e) { let t = 0, n = 0; for (let r of e.split("\n")) { let e = r.replace(/^\s+/, "").match(/^[-*+] \[([ xX])\]/); @@ -7422,17 +7482,17 @@ function ap(e) { total: n }; } -function op(e) { +function fp(e) { for (let t of e.split("\n")) { let e = t.trim().replace(/^[#>\-*+\s]+/, "").replace(/^\[[ xX]\]\s*/, "").trim(); if (e) return e.length > 120 ? `${e.slice(0, 120)}…` : e; } return null; } -function sp(e) { +function pp(e) { return e.trim().replace(/^\[|\]$/g, "").split(",").map((e) => e.trim().replace(/^#/, "")).filter(Boolean); } -var cp = [ +var mp = [ "#ef4444", "#f59e0b", "#eab308", @@ -7444,29 +7504,29 @@ var cp = [ "#ec4899", "#78716c" ]; -function lp(e) { +function hp(e) { let t = 0; for (let n = 0; n < e.length; n++) t = Math.imul(t, 31) + e.charCodeAt(n) >>> 0; - return cp[t % cp.length]; + return mp[t % mp.length]; } -function up(e, t) { +function gp(e, t) { return e.map((e) => ({ label: e, - color: t?.find((t) => t.label === e)?.color ?? lp(e) + color: t?.find((t) => t.label === e)?.color ?? hp(e) })); } -function dp(e) { +function _p(e) { return e.split(",").map((e) => e.trim().replace(/^\[\[/, "").replace(/\]\]$/, "").trim()).filter(Boolean); } -function fp(e) { +function vp(e) { return e.map((e) => `[[${e}]]`).join(", "); } -function pp(e) { +function yp(e) { return (e.id.split(/[\\/]/).pop() ?? e.id).replace(/\.md$/i, ""); } -function mp(e, t) { +function bp(e, t) { let n = t || "done", r = /* @__PURE__ */ new Map(); - for (let t of e) r.set(pp(t), t); + for (let t of e) r.set(yp(t), t); let i = (e) => !!e && e.columnKey !== n, a = /* @__PURE__ */ new Map(), o = (e, t) => { let n = a.get(e); n || a.set(e, n = /* @__PURE__ */ new Set()), n.add(t.id); @@ -7483,9 +7543,9 @@ function mp(e, t) { for (let [e, t] of a) s.set(e, t.size); return s; } -function hp(e) { +function xp(e) { let t = /* @__PURE__ */ new Map(); - for (let n of e) t.set(pp(n), n); + for (let n of e) t.set(yp(n), n); let n = /* @__PURE__ */ new Map(); for (let r of e) { if (!r.parent) continue; @@ -7496,47 +7556,47 @@ function hp(e) { } return n; } -function gp(e, t) { +function Sp(e, t) { let n = t || "done"; return { done: e.filter((e) => e.columnKey === n).length, total: e.length }; } -function _p() { +function Cp() { let e = /* @__PURE__ */ new Date(); return `${e.getFullYear()}-${String(e.getMonth() + 1).padStart(2, "0")}-${String(e.getDate()).padStart(2, "0")}`; } -function vp(e) { +function wp(e) { return e.toLowerCase().replace(/[^a-z0-9一-龥]+/g, "-").replace(/^-+|-+$/g, "") || "item"; } -var yp = /* @__PURE__ */ new Set([ +var Tp = /* @__PURE__ */ new Set([ "status", "priority", "assignee" ]); -function bp(e) { - return typeof e == "string" && yp.has(e) ? e : "status"; +function Ep(e) { + return typeof e == "string" && Tp.has(e) ? e : "status"; } -function xp(e) { - return e === "custom" ? "custom" : typeof e == "string" && yp.has(e) ? e : void 0; +function Dp(e) { + return e === "custom" ? "custom" : typeof e == "string" && Tp.has(e) ? e : void 0; } -function Sp(e, t = []) { - let n = new Set(t), r = `lane_${vp(e).replace(/-/g, "_")}`; +function Op(e, t = []) { + let n = new Set(t), r = `lane_${wp(e).replace(/-/g, "_")}`; for (let e = 0; e < 20; e += 1) { let e = `${r}_${typeof globalThis.crypto?.randomUUID == "function" ? globalThis.crypto.randomUUID().replace(/-/g, "").slice(0, 8) : Math.random().toString(36).slice(2, 10).padEnd(8, "0")}`; if (!n.has(e)) return e; } return `${r}_${Date.now().toString(36)}`; } -function Cp(e, t, n) { +function kp(e, t, n) { let r = e.trim(); - return r ? r.length > 80 ? "Swimlane names can be at most 80 characters." : t.some((e) => e.key !== n && e.name.trim().toLocaleLowerCase() === r.toLocaleLowerCase()) ? "Swimlane names must be unique on this board." : null : "Swimlane name is required."; + return r ? r.length > 80 ? "Row names can be at most 80 characters." : t.some((e) => e.key !== n && e.name.trim().toLocaleLowerCase() === r.toLocaleLowerCase()) ? "Row names must be unique on this board." : null : "Row name is required."; } -function wp(e) { +function Ap(e) { return e.swimlaneKey || ""; } -function Tp(e, t) { +function jp(e, t) { let n = [], r = e.swimlanes ?? [], i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Set(); for (let e of r) { i.has(e.key) ? a.add(e.key) : i.add(e.key); @@ -7553,7 +7613,7 @@ function Tp(e, t) { }); let c = /* @__PURE__ */ new Map(); for (let e of t) { - let t = wp(e); + let t = Ap(e); t && !i.has(t) && c.set(t, (c.get(t) ?? 0) + 1); } for (let [e, t] of c) n.push({ @@ -7563,28 +7623,28 @@ function Tp(e, t) { }); return n; } -function Ep(e, t) { - return t === "custom" ? wp(e) : t === "priority" ? e.priority || "none" : t === "assignee" ? e.assignee || "" : e.columnKey || ""; +function Mp(e, t) { + return t === "custom" ? Ap(e) : t === "priority" ? e.priority || "none" : t === "assignee" ? e.assignee || "" : e.columnKey || ""; } -function Dp(e, t, n, r) { +function Np(e, t, n, r) { if (n === "status") return e.columns; - if (n === "priority") return ep.map((e) => ({ + if (n === "priority") return op.map((e) => ({ key: e, name: e === "none" ? r : `${e.charAt(0).toUpperCase()}${e.slice(1)}` })); let i = /* @__PURE__ */ new Set(); - for (let e of t) i.add(Ep(e, n)); + for (let e of t) i.add(Mp(e, n)); return [...i].sort((e, t) => e === "" ? 1 : t === "" ? -1 : e.localeCompare(t)).map((e) => ({ key: e, name: e || r })); } -function Op(e, t) { +function Pp(e, t) { let n = e.swimlaneKey; return !!n && !(t ?? []).some((e) => e.key === n); } -function kp(e, t, n, r) { - if (n !== "custom") return Dp(e, t, n, r); +function Fp(e, t, n, r) { + if (n !== "custom") return Np(e, t, n, r); let i = /* @__PURE__ */ new Set(), a = (e.swimlanes ?? []).filter((e) => i.has(e.key) ? !1 : (i.add(e.key), !0)), o = new Set(a.map((e) => e.key)), s = t.some((e) => !e.swimlaneKey || !o.has(e.swimlaneKey)); return [...a.map((e) => ({ key: e.key, @@ -7595,64 +7655,332 @@ function kp(e, t, n, r) { name: r }] : []]; } -function Ap(e, t, n, r) { +function Ip(e, t, n, r) { let i = /* @__PURE__ */ new Map(), a = n === "custom" ? new Set((r ?? []).map((e) => e.key)) : null; for (let r of e) { - let e = Ep(r, n), o = n === "custom" && (!e || !a?.has(e)) ? "" : e, s = Ep(r, t), c = i.get(o); + let e = Mp(r, n), o = n === "custom" && (!e || !a?.has(e)) ? "" : e, s = Mp(r, t), c = i.get(o); c || i.set(o, c = /* @__PURE__ */ new Map()); let l = c.get(s); l || c.set(s, l = []), l.push(r); } return i; } -function jp(e, t, n) { - return t ? t.prop === "swimlaneIssue" ? Op(e, n?.swimlanes) : t.prop === "priority" ? (e.priority || "none") === t.value : t.prop === "assignee" ? (e.assignee || "") === t.value : t.prop !== "tag" || e.tags.some((e) => e.label === t.value) : !0; +function Lp(e) { + return new Set((e ?? []).map((e) => e.trim().toLowerCase())); } -function Mp(e, t) { +function Rp(e, t) { + let [n, r, i] = e.split("-").map(Number); + return Kp(new Date(n, r - 1, i + t)); +} +function zp(e) { + return !!(e.priorities?.length || e.assignees?.length || e.tags?.length || e.due || e.blocked || e.mine || e.missingRow); +} +function Bp(e) { + return [ + !!e.priorities?.length, + !!e.assignees?.length, + !!e.tags?.length, + !!e.due, + !!e.blocked, + !!e.mine, + !!e.missingRow + ].filter(Boolean).length; +} +function Vp(e, t, n = {}) { + let r = Lp(t.priorities); + if (r.size > 0 && !r.has((e.priority || "none").toLowerCase())) return !1; + let i = Lp(t.assignees); + if (i.size > 0 && !i.has((e.assignee || "").trim().toLowerCase())) return !1; + let a = Lp(t.tags); + if (a.size > 0 && !e.tags.some((e) => a.has(e.label.trim().toLowerCase()))) return !1; + if (t.due) { + let r = e.due && qp(e.due) ? e.due : null, i = n.today && qp(n.today) ? n.today : Cp(); + if (t.due === "none" && r || t.due !== "none" && !r || r && (t.due === "overdue" && r >= i || t.due === "today" && r !== i || t.due === "nextSevenDays" && (r < i || r > Rp(i, 6)))) return !1; + } + if (t.blocked && !(n.blockedCardIds ? n.blockedCardIds.has(e.id) : (e.blockedBy?.length ?? 0) > 0)) return !1; + if (t.mine) { + let t = n.currentUser?.trim().toLowerCase(); + if (!t || e.assignee?.trim().toLowerCase() !== t) return !1; + } + return !(t.missingRow && !Pp(e, n.config?.swimlanes)); +} +function Hp(e, t) { return !!(e.title.toLowerCase().includes(t) || e.ticket && e.ticket.toLowerCase().includes(t) || e.assignee && e.assignee.toLowerCase().includes(t) || e.tags.some((e) => e.label.toLowerCase().includes(t)) || e.notes && e.notes.toLowerCase().includes(t) || !e.notes && e.excerpt && e.excerpt.toLowerCase().includes(t)); } -function Np(e, t, n, r) { - let i = t.trim().toLowerCase(); - return e.filter((e) => i && !Mp(e, i) ? !1 : jp(e, n, r)); +function Up(e) { + return e ? "prop" in e ? e.prop === "priority" ? { priorities: [e.value] } : e.prop === "assignee" ? { assignees: [e.value] } : e.prop === "tag" ? { tags: [e.value] } : { missingRow: !0 } : e : {}; } -function Pp(e, t) { +function Wp(e, t, n, r, i = {}) { + let a = t.trim().toLowerCase(), o = Up(n); + return e.filter((e) => a && !Hp(e, a) ? !1 : Vp(e, o, { + ...i, + config: r + })); +} +function Gp(e, t) { let n = [...e]; - return t === "due" ? n.sort((e, t) => (e.due || "9999-99-99").localeCompare(t.due || "9999-99-99")) : t === "priority" ? n.sort((e, t) => (tp[e.priority || "none"] ?? 5) - (tp[t.priority || "none"] ?? 5)) : t === "title" ? n.sort((e, t) => e.title.localeCompare(t.title)) : n.sort((e, t) => e.position - t.position), n; + return t === "due" ? n.sort((e, t) => (e.due || "9999-99-99").localeCompare(t.due || "9999-99-99")) : t === "priority" ? n.sort((e, t) => (sp[e.priority || "none"] ?? 5) - (sp[t.priority || "none"] ?? 5)) : t === "title" ? n.sort((e, t) => e.title.localeCompare(t.title)) : n.sort((e, t) => e.position - t.position), n; } -function Fp(e) { +function Kp(e) { return `${e.getFullYear()}-${String(e.getMonth() + 1).padStart(2, "0")}-${String(e.getDate()).padStart(2, "0")}`; } -function Ip(e) { +function qp(e) { return !!e && /^\d{4}-\d{2}-\d{2}$/.test(e); } -function Lp() { - return _p().slice(0, 7); +function Jp() { + return Cp().slice(0, 7); } -function Rp(e, t) { +function Yp(e, t) { let [n, r] = e.split("-"), i = new Date(Number(n), Number(r) - 1 + t, 1); return `${i.getFullYear()}-${String(i.getMonth() + 1).padStart(2, "0")}`; } -function zp(e) { +function Xp(e) { let t = /* @__PURE__ */ new Map(); for (let n of e) { - if (!Ip(n.due)) continue; + if (!qp(n.due)) continue; let e = t.get(n.due); e ? e.push(n) : t.set(n.due, [n]); } return t; } -function Bp(e, t = 0) { +function Zp(e, t = 0) { let [n, r] = e.split("-"), i = Number(n), a = Number(r), o = (new Date(i, a - 1, 1).getDay() - t + 7) % 7, s = new Date(i, a - 1, 1 - o), c = []; for (let e = 0; e < 6; e++) { let t = []; - for (let n = 0; n < 7; n++) t.push(Fp(new Date(s.getFullYear(), s.getMonth(), s.getDate() + e * 7 + n))); + for (let n = 0; n < 7; n++) t.push(Kp(new Date(s.getFullYear(), s.getMonth(), s.getDate() + e * 7 + n))); c.push(t); } return c; } //#endregion +//#region ../../shared/components/board/BoardFilterPopover.tsx +function Qp(e, t) { + let n = new Set(e ?? []); + return n.has(t) ? n.delete(t) : n.add(t), n.size > 0 ? [...n] : void 0; +} +function $p({ selected: e, children: t, onClick: n, selectionRole: r = "checkbox" }) { + return /* @__PURE__ */ C("button", { + type: "button", + role: r, + "aria-checked": e, + onClick: n, + className: `flex min-h-8 w-full items-center gap-2 rounded-lg px-2 text-left text-xs transition ${e ? "bg-brand-soft/70 font-medium text-brand-dark" : "text-stone-600 hover:bg-stone-50"}`, + children: [/* @__PURE__ */ S("span", { + className: `flex h-4 w-4 shrink-0 items-center justify-center border ${r === "radio" ? "rounded-full" : "rounded"} ${e ? "border-brand bg-brand text-white" : "border-stone-300 bg-white"}`, + "aria-hidden": !0, + children: e && /* @__PURE__ */ S(Zd, { className: "h-3 w-3" }) + }), /* @__PURE__ */ S("span", { + className: "min-w-0 flex-1 truncate", + children: t + })] + }); +} +function em({ title: e, children: t }) { + return /* @__PURE__ */ C("section", { + className: "border-t border-line px-3 py-3 first:border-t-0", + children: [/* @__PURE__ */ S("h3", { + className: "mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-brand-gray", + children: e + }), t] + }); +} +function tm(e) { + return e === "overdue" ? V._({ id: "ddrz1m" }) : e === "today" ? V._({ id: "1iShX0" }) : e === "nextSevenDays" ? V._({ id: "3CIp19" }) : V._({ id: "VXh9CK" }); +} +function nm({ filters: e, onChange: t, assignees: r, tags: i, currentUser: a, visibleCount: o, totalCount: s, portalClassName: c }) { + let l = Bp(e), u = c ? ` ${c}` : "", d = (n, r) => t({ + ...e, + [n]: r + }), f = (n) => { + let r = { ...e }; + delete r[n], t(r); + }, p = []; + if (e.priorities?.length) { + let t = e.priorities.map((e) => e === "none" ? V._({ id: "-X4ual" }) : e); + p.push({ + key: "priorities", + label: V._({ + id: "-3Qbcm", + values: { 0: t.join(", ") } + }) + }); + } + return e.assignees?.length && p.push({ + key: "assignees", + label: V._({ + id: "vJvZPY", + values: { 0: e.assignees.map((e) => e || V._({ id: "EbMPZJ" })).join(", ") } + }) + }), e.tags?.length && p.push({ + key: "tags", + label: V._({ + id: "5Oy0YM", + values: { 0: e.tags.join(", ") } + }) + }), e.due && p.push({ + key: "due", + label: tm(e.due) + }), e.blocked && p.push({ + key: "blocked", + label: V._({ id: "32TndD" }) + }), e.mine && p.push({ + key: "mine", + label: V._({ id: "YDa2KG" }) + }), e.missingRow && p.push({ + key: "missingRow", + label: V._({ id: "lqoy3F" }) + }), /* @__PURE__ */ C(n, { children: [/* @__PURE__ */ C(od, { + className: "relative", + children: [/* @__PURE__ */ C(td, { + className: `inline-flex h-7 items-center gap-1 rounded-md border px-2 text-xs transition ${l > 0 ? "border-brand/40 bg-brand-soft/60 font-medium text-brand-dark" : "border-stone-200 bg-white text-stone-600 hover:border-brand/40 hover:text-brand-dark"}`, + "aria-label": l > 0 ? V._({ + id: "obId50", + values: { activeCount: l } + }) : V._({ id: "cSev-j" }), + children: [ + /* @__PURE__ */ S(vf, { className: "h-3.5 w-3.5" }), + /* @__PURE__ */ S(L, { id: "cSev-j" }), + l > 0 && /* @__PURE__ */ S("span", { + className: "rounded-full bg-brand px-1.5 py-0.5 text-[9px] font-semibold leading-none text-white", + children: l + }), + /* @__PURE__ */ S($d, { className: "h-3 w-3 text-stone-400" }) + ] + }), /* @__PURE__ */ C(id, { + anchor: "bottom start", + className: `z-40 w-[min(22rem,calc(100vw-1rem))] overflow-hidden rounded-xl border border-line bg-white shadow-xl shadow-emerald-950/10 [--anchor-gap:6px] focus:outline-none${u}`, + children: [/* @__PURE__ */ C("div", { + className: "flex min-h-12 items-center gap-3 px-4", + children: [/* @__PURE__ */ C("span", { + className: "min-w-0 flex-1", + children: [/* @__PURE__ */ S("span", { + className: "block text-xs font-semibold text-stone-800", + children: /* @__PURE__ */ S(L, { id: "02N8r0" }) + }), /* @__PURE__ */ S("span", { + className: "block text-[10px] text-brand-gray", + children: /* @__PURE__ */ S(L, { + id: "7pBic4", + values: { + visibleCount: o, + totalCount: s + } + }) + })] + }), l > 0 && /* @__PURE__ */ S("button", { + type: "button", + onClick: () => t({}), + className: "rounded-lg px-2 py-1 text-[11px] font-medium text-brand-dark hover:bg-brand-soft", + children: /* @__PURE__ */ S(L, { id: "yYxB17" }) + })] + }), /* @__PURE__ */ C("div", { + className: "max-h-[min(70vh,34rem)] overflow-y-auto", + children: [ + /* @__PURE__ */ S(em, { + title: /* @__PURE__ */ S(L, { id: "1hKEom" }), + children: /* @__PURE__ */ S("div", { + className: "grid grid-cols-2 gap-1", + children: op.map((t) => /* @__PURE__ */ S($p, { + selected: e.priorities?.includes(t) ?? !1, + onClick: () => d("priorities", Qp(e.priorities, t)), + children: t === "none" ? V._({ id: "-X4ual" }) : t + }, t)) + }) + }), + /* @__PURE__ */ S(em, { + title: /* @__PURE__ */ S(L, { id: "ojKCLU" }), + children: /* @__PURE__ */ C("div", { + className: "space-y-1", + children: [ + a && /* @__PURE__ */ S($p, { + selected: !!e.mine, + onClick: () => d("mine", !e.mine || void 0), + children: /* @__PURE__ */ C("span", { + className: "inline-flex items-center gap-1.5", + children: [/* @__PURE__ */ S(Wf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "YDa2KG" })] + }) + }), + /* @__PURE__ */ S($p, { + selected: e.assignees?.includes("") ?? !1, + onClick: () => d("assignees", Qp(e.assignees, "")), + children: /* @__PURE__ */ S(L, { id: "EbMPZJ" }) + }), + r.map((t) => /* @__PURE__ */ S($p, { + selected: e.assignees?.includes(t) ?? !1, + onClick: () => d("assignees", Qp(e.assignees, t)), + children: t + }, t)) + ] + }) + }), + i.length > 0 && /* @__PURE__ */ S(em, { + title: /* @__PURE__ */ S(L, { id: "h8DugX" }), + children: /* @__PURE__ */ S("div", { + className: "space-y-1", + children: i.map((t) => /* @__PURE__ */ S($p, { + selected: e.tags?.includes(t) ?? !1, + onClick: () => d("tags", Qp(e.tags, t)), + children: t + }, t)) + }) + }), + /* @__PURE__ */ S(em, { + title: /* @__PURE__ */ S(L, { id: "XicmhT" }), + children: /* @__PURE__ */ S("div", { + className: "grid grid-cols-2 gap-1", + role: "radiogroup", + "aria-label": V._({ id: "XicmhT" }), + children: [ + "overdue", + "today", + "nextSevenDays", + "none" + ].map((t) => /* @__PURE__ */ S($p, { + selected: e.due === t, + selectionRole: "radio", + onClick: () => d("due", t), + children: tm(t) + }, t)) + }) + }), + /* @__PURE__ */ C(em, { + title: /* @__PURE__ */ S(L, { id: "YFdnVT" }), + children: [/* @__PURE__ */ S($p, { + selected: !!e.blocked, + onClick: () => d("blocked", !e.blocked || void 0), + children: /* @__PURE__ */ C("span", { + className: "inline-flex items-center gap-1.5", + children: [/* @__PURE__ */ S(wf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "9YTdO7" })] + }) + }), e.missingRow && /* @__PURE__ */ S("div", { + className: "mt-1", + children: /* @__PURE__ */ S($p, { + selected: !0, + onClick: () => d("missingRow", void 0), + children: /* @__PURE__ */ S(L, { id: "-9kYEs" }) + }) + })] + }) + ] + })] + })] + }), p.map((e) => /* @__PURE__ */ C("button", { + type: "button", + onClick: () => f(e.key), + title: V._({ id: "rn2_2V" }), + "aria-label": V._({ + id: "rT-mCe", + values: { 0: e.label } + }), + className: "inline-flex h-7 max-w-48 items-center gap-1 rounded-full border border-brand/20 bg-brand-soft/45 px-2 text-[11px] font-medium text-brand-dark hover:border-brand/40 hover:bg-brand-soft", + children: [/* @__PURE__ */ S("span", { + className: "truncate", + children: e.label + }), /* @__PURE__ */ S(Xf, { className: "h-3 w-3 shrink-0" })] + }, e.key))] }); +} +//#endregion //#region ../../shared/components/board/BoardTable.tsx -function Vp({ cards: e, statusName: t, today: n, doneKey: r, selectedId: i, onSelect: a }) { +function rm({ cards: e, statusName: t, today: n, doneKey: r, selectedId: i, onSelect: a }) { let o = "px-3 py-2 text-left text-[11px] font-medium uppercase tracking-wide text-brand-gray", s = "px-3 py-2 align-middle", c = /* @__PURE__ */ S("span", { className: "text-stone-300", children: "—" @@ -7732,7 +8060,7 @@ function Vp({ cards: e, statusName: t, today: n, doneKey: r, selectedId: i, onSe /* @__PURE__ */ S("td", { className: s, children: e.priority && e.priority !== "none" ? /* @__PURE__ */ S("span", { - className: `rounded px-1.5 py-0.5 text-[11px] font-medium ${np[e.priority] ?? "bg-stone-100 text-stone-500"}`, + className: `rounded px-1.5 py-0.5 text-[11px] font-medium ${cp[e.priority] ?? "bg-stone-100 text-stone-500"}`, children: e.priority }) : c }), @@ -7740,7 +8068,7 @@ function Vp({ cards: e, statusName: t, today: n, doneKey: r, selectedId: i, onSe className: `${s} text-stone-600`, children: e.assignee ? /* @__PURE__ */ C("span", { className: "inline-flex items-center gap-1", - children: [/* @__PURE__ */ S(Bf, { className: "h-3.5 w-3.5 text-brand-gray" }), e.assignee] + children: [/* @__PURE__ */ S(Kf, { className: "h-3.5 w-3.5 text-brand-gray" }), e.assignee] }) : c }), /* @__PURE__ */ S("td", { @@ -7757,7 +8085,7 @@ function Vp({ cards: e, statusName: t, today: n, doneKey: r, selectedId: i, onSe children: e.tags.map((e) => /* @__PURE__ */ C("span", { className: "inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[11px] text-brand-dark", style: { backgroundColor: e.color ? `${e.color}22` : void 0 }, - children: [/* @__PURE__ */ S(If, { className: "h-3 w-3" }), e.label] + children: [/* @__PURE__ */ S(Bf, { className: "h-3 w-3" }), e.label] }, e.label)) }) : c }) @@ -7773,9 +8101,9 @@ function Vp({ cards: e, statusName: t, today: n, doneKey: r, selectedId: i, onSe } //#endregion //#region ../../shared/components/board/BoardCalendar.tsx -var Hp = Array.from({ length: 7 }, (e, t) => new Date(2023, 0, 1 + t).toLocaleDateString(void 0, { weekday: "short" })); -function Up({ cards: e, today: t, doneKey: n, mode: r, onModeChange: i, selectedId: a, onSelect: o }) { - let [s, c] = y(() => Lp()), l = zp(e), [u, d] = s.split("-"), f = new Date(Number(u), Number(d) - 1, 1).toLocaleDateString(void 0, { +var im = Array.from({ length: 7 }, (e, t) => new Date(2023, 0, 1 + t).toLocaleDateString(void 0, { weekday: "short" })); +function am({ cards: e, today: t, doneKey: n, mode: r, onModeChange: i, selectedId: a, onSelect: o }) { + let [s, c] = y(() => Jp()), l = Xp(e), [u, d] = s.split("-"), f = new Date(Number(u), Number(d) - 1, 1).toLocaleDateString(void 0, { year: "numeric", month: "long" }), p = (e) => !!e.due && e.due < t && e.columnKey !== n, m = "inline-flex h-7 w-7 items-center justify-center rounded-md border border-stone-200 text-stone-500 hover:border-brand/40 hover:text-brand-dark", h = (e) => `rounded-md px-2 py-1 text-xs font-medium ${r === e ? "bg-brand-soft text-brand-dark" : "text-stone-500 hover:text-brand-dark"}`, g = (e, t) => { @@ -7786,7 +8114,7 @@ function Up({ cards: e, today: t, doneKey: n, mode: r, onModeChange: i, selected title: e.title, className: `flex w-full items-center gap-1 rounded px-1 py-0.5 text-left text-[11px] transition-colors ${a === e.id ? "bg-brand-soft/60" : "bg-stone-100/70 hover:bg-brand-soft/40"} ${n ? "text-red-600" : "text-stone-700"}`, children: [ - e.priority && e.priority !== "none" && /* @__PURE__ */ S("span", { className: `h-1.5 w-1.5 shrink-0 rounded-full ${np[e.priority]?.split(" ")[0] ?? "bg-stone-300"}` }), + e.priority && e.priority !== "none" && /* @__PURE__ */ S("span", { className: `h-1.5 w-1.5 shrink-0 rounded-full ${cp[e.priority]?.split(" ")[0] ?? "bg-stone-300"}` }), e.icon && /* @__PURE__ */ S("span", { className: "shrink-0", children: e.icon @@ -7812,18 +8140,18 @@ function Up({ cards: e, today: t, doneKey: n, mode: r, onModeChange: i, selected /* @__PURE__ */ S("button", { type: "button", className: m, - title: B._({ id: "1xwZj_" }), - "aria-label": B._({ id: "1xwZj_" }), - onClick: () => c((e) => Rp(e, -1)), - children: /* @__PURE__ */ S($d, { className: "h-4 w-4" }) + title: V._({ id: "1xwZj_" }), + "aria-label": V._({ id: "1xwZj_" }), + onClick: () => c((e) => Yp(e, -1)), + children: /* @__PURE__ */ S(tf, { className: "h-4 w-4" }) }), /* @__PURE__ */ S("button", { type: "button", className: m, - title: B._({ id: "g8JmSC" }), - "aria-label": B._({ id: "g8JmSC" }), - onClick: () => c((e) => Rp(e, 1)), - children: /* @__PURE__ */ S(tf, { className: "h-4 w-4" }) + title: V._({ id: "g8JmSC" }), + "aria-label": V._({ id: "g8JmSC" }), + onClick: () => c((e) => Yp(e, 1)), + children: /* @__PURE__ */ S(rf, { className: "h-4 w-4" }) }), /* @__PURE__ */ S("span", { className: "min-w-[8rem] text-sm font-medium text-brand-dark", @@ -7832,7 +8160,7 @@ function Up({ cards: e, today: t, doneKey: n, mode: r, onModeChange: i, selected /* @__PURE__ */ S("button", { type: "button", className: "rounded-md border border-stone-200 px-2 py-1 text-xs text-stone-600 hover:border-brand/40 hover:text-brand-dark", - onClick: () => c(Lp()), + onClick: () => c(Jp()), children: /* @__PURE__ */ S(L, { id: "ecUA8p" }) }) ] }), /* @__PURE__ */ C("div", { @@ -7851,7 +8179,7 @@ function Up({ cards: e, today: t, doneKey: n, mode: r, onModeChange: i, selected })] }); if (r === "agenda") { - let n = Pp(e, "due"), r = n.filter((e) => Ip(e.due)), i = n.filter((e) => !Ip(e.due)), a = ""; + let n = Gp(e, "due"), r = n.filter((e) => qp(e.due)), i = n.filter((e) => !qp(e.due)), a = ""; return /* @__PURE__ */ C("div", { className: "flex min-h-0 flex-1 flex-col", children: [_, /* @__PURE__ */ C("div", { @@ -7885,14 +8213,14 @@ function Up({ cards: e, today: t, doneKey: n, mode: r, onModeChange: i, selected })] }); } - let v = Bp(s); + let v = Zp(s); return /* @__PURE__ */ C("div", { className: "flex min-h-0 flex-1 flex-col", children: [ _, /* @__PURE__ */ S("div", { className: "grid grid-cols-7 border-b border-black/[0.04] bg-[#fbfdfb]", - children: Hp.map((e) => /* @__PURE__ */ S("div", { + children: im.map((e) => /* @__PURE__ */ S("div", { className: "px-2 py-1 text-center text-[11px] font-medium uppercase tracking-wide text-brand-gray", children: e }, e)) @@ -7921,7 +8249,7 @@ function Up({ cards: e, today: t, doneKey: n, mode: r, onModeChange: i, selected } //#endregion //#region ../../shared/components/board/LaneDetailsPopover.tsx -function Wp({ lane: e, cardCount: t, portalClassName: n, buttonClassName: r = "flex h-8 w-8 items-center justify-center rounded-lg text-stone-400 hover:bg-white hover:text-stone-600" }) { +function om({ lane: e, cardCount: t, portalClassName: n, buttonClassName: r = "flex h-8 w-8 items-center justify-center rounded-lg text-stone-400 hover:bg-white hover:text-stone-600" }) { let [i, a] = y("idle"), o = v(null), s = n ? ` ${n}` : ""; f(() => { a("idle"); @@ -7939,20 +8267,20 @@ function Wp({ lane: e, cardCount: t, portalClassName: n, buttonClassName: r = "f return /* @__PURE__ */ C(od, { className: "relative shrink-0", children: [/* @__PURE__ */ S(td, { - title: B._({ id: "rRubBJ" }), - "aria-label": B._({ - id: "Th4mIx", + title: V._({ id: "6G3KzD" }), + "aria-label": V._({ + id: "RnplaY", values: { 0: e.name } }), className: r, - children: /* @__PURE__ */ S(vf, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(bf, { className: "h-4 w-4" }) }), /* @__PURE__ */ C(id, { anchor: "bottom end", className: `z-50 w-80 rounded-xl border border-line bg-white p-4 shadow-lg shadow-emerald-950/10 [--anchor-gap:4px] focus:outline-none${s}`, children: [ /* @__PURE__ */ C("p", { className: "flex items-center gap-2 text-xs font-semibold text-stone-800", - children: [/* @__PURE__ */ S(vf, { className: "h-4 w-4 text-brand-dark" }), /* @__PURE__ */ S(L, { id: "rRubBJ" })] + children: [/* @__PURE__ */ S(bf, { className: "h-4 w-4 text-brand-dark" }), /* @__PURE__ */ S(L, { id: "6G3KzD" })] }), /* @__PURE__ */ C("dl", { className: "mt-3 grid grid-cols-[64px_minmax(0,1fr)] items-center gap-x-2 gap-y-2 text-[11px]", @@ -7967,7 +8295,7 @@ function Wp({ lane: e, cardCount: t, portalClassName: n, buttonClassName: r = "f }), /* @__PURE__ */ S("dt", { className: "text-brand-gray", - children: /* @__PURE__ */ S(L, { id: "c61_Lv" }) + children: /* @__PURE__ */ S(L, { id: "PM7yYy" }) }), /* @__PURE__ */ C("dd", { className: "flex min-w-0 items-center gap-1.5", @@ -7976,11 +8304,11 @@ function Wp({ lane: e, cardCount: t, portalClassName: n, buttonClassName: r = "f children: e.key }), /* @__PURE__ */ C("button", { type: "button", - title: B._({ id: "qpGDiV" }), - "aria-label": B._({ id: "qpGDiV" }), + title: V._({ id: "fdEjOR" }), + "aria-label": V._({ id: "fdEjOR" }), onClick: () => void c(), className: "inline-flex h-7 items-center gap-1 rounded-lg border border-stone-200 px-2 text-[10px] font-medium text-brand-dark hover:border-brand/30", - children: [/* @__PURE__ */ S(of, { className: "h-3.5 w-3.5" }), i === "copied" ? B._({ id: "6V3Ea3" }) : B._({ id: "he3ygx" })] + children: [/* @__PURE__ */ S(cf, { className: "h-3.5 w-3.5" }), i === "copied" ? V._({ id: "6V3Ea3" }) : V._({ id: "he3ygx" })] })] }), /* @__PURE__ */ S("dt", { @@ -8007,7 +8335,7 @@ function Wp({ lane: e, cardCount: t, portalClassName: n, buttonClassName: r = "f } //#endregion //#region ../../shared/components/board/StatusActionsMenu.tsx -function Gp({ column: e, siblings: t, actions: n, doneKey: r, orientation: i, portalClassName: a, buttonClassName: o = "flex h-8 w-8 items-center justify-center rounded-lg text-stone-400 hover:bg-white hover:text-stone-600" }) { +function sm({ column: e, siblings: t, actions: n, doneKey: r, orientation: i, portalClassName: a, buttonClassName: o = "flex h-8 w-8 items-center justify-center rounded-lg text-stone-400 hover:bg-white hover:text-stone-600" }) { let s = t.findIndex((t) => t.key === e.key), c = r === e.key; if (!(n.renameColumn || n.reorderColumns || n.toggleDoneColumn || n.setColumnLimit || n.setColumnColor || n.deleteColumn)) return null; let l = a ? ` ${a}` : "", u = s > 0 ? t[s - 1] : void 0, d = s >= 0 && s < t.length - 1 ? t[s + 1] : void 0; @@ -8015,13 +8343,13 @@ function Gp({ column: e, siblings: t, actions: n, doneKey: r, orientation: i, po as: "div", className: "relative shrink-0", children: [/* @__PURE__ */ S(Su, { - title: B._({ id: "YHjvGb" }), - "aria-label": B._({ + title: V._({ id: "YHjvGb" }), + "aria-label": V._({ id: "RlLl3G", values: { 0: e.name } }), className: o, - children: /* @__PURE__ */ S(ff, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(mf, { className: "h-4 w-4" }) }), /* @__PURE__ */ C(Cu, { anchor: "bottom end", className: `z-50 w-48 rounded-xl border border-line bg-white py-1 text-xs shadow-lg shadow-emerald-950/10 [--anchor-gap:4px] focus:outline-none${l}`, @@ -8030,7 +8358,7 @@ function Gp({ column: e, siblings: t, actions: n, doneKey: r, orientation: i, po type: "button", onClick: () => void n.renameColumn?.(e.key), className: "flex w-full items-center gap-2 px-3 py-2 text-left text-stone-700 data-[focus]:bg-stone-100", - children: [/* @__PURE__ */ S(Ef, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "2wxgft" })] + children: [/* @__PURE__ */ S(Af, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "2wxgft" })] }) }), n.reorderColumns && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { type: "button", @@ -8061,7 +8389,7 @@ function Gp({ column: e, siblings: t, actions: n, doneKey: r, orientation: i, po type: "button", onClick: () => void n.setColumnLimit?.(e.key), className: "flex w-full items-center gap-2 px-3 py-2 text-left text-stone-700 data-[focus]:bg-stone-100", - children: [/* @__PURE__ */ S(gf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "Iw6WJa" })] + children: [/* @__PURE__ */ S(vf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "Iw6WJa" })] }) }), n.setColumnColor && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S("div", { className: "my-1 border-t border-line" }), /* @__PURE__ */ C("div", { className: "px-3 py-2", @@ -8070,7 +8398,7 @@ function Gp({ column: e, siblings: t, actions: n, doneKey: r, orientation: i, po children: /* @__PURE__ */ S(L, { id: "jZlrte" }) }), /* @__PURE__ */ C("div", { className: "mt-2 flex flex-wrap gap-2", - children: [rp.map((t) => /* @__PURE__ */ S("button", { + children: [lp.map((t) => /* @__PURE__ */ S("button", { type: "button", onClick: () => void n.setColumnColor?.(e.key, t), title: t, @@ -8078,10 +8406,10 @@ function Gp({ column: e, siblings: t, actions: n, doneKey: r, orientation: i, po style: { backgroundColor: t } }, t)), /* @__PURE__ */ S("button", { type: "button", - title: B._({ id: "H_SQFv" }), + title: V._({ id: "H_SQFv" }), onClick: () => void n.setColumnColor?.(e.key, null), className: "flex h-5 w-5 items-center justify-center rounded-full bg-white ring-1 ring-black/10", - children: /* @__PURE__ */ S(Wf, { className: "h-3 w-3 text-stone-400" }) + children: /* @__PURE__ */ S(Xf, { className: "h-3 w-3 text-stone-400" }) })] })] })] }), @@ -8093,7 +8421,7 @@ function Gp({ column: e, siblings: t, actions: n, doneKey: r, orientation: i, po t.length > 1 && n.deleteColumn?.(e.key); }, className: "flex w-full items-center gap-2 px-3 py-2 text-left text-red-600 aria-disabled:opacity-40 data-[focus]:bg-red-50", - children: [/* @__PURE__ */ S(Rf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] + children: [/* @__PURE__ */ S(Hf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] }) })] }) ] })] @@ -8101,8 +8429,8 @@ function Gp({ column: e, siblings: t, actions: n, doneKey: r, orientation: i, po } //#endregion //#region ../../shared/components/board/BoardSwimlanes.tsx -function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKey: o, sortBy: s, today: c, doneKey: l, selectedId: u, actions: d, readOnly: f, customLaneMutationPending: p, portalClassName: m, onSelect: h, onOpenManager: _, onManageLane: v, onMoveCustomLane: b, onSetCustomLaneColor: x, onShowMissing: w }) { - let [T, E] = y(!1), [D, O] = y(""), k = m ? ` ${m}` : "", A = g(() => Ap(e, a, o, i.swimlanes), [ +function cm({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKey: o, sortBy: s, today: c, doneKey: l, selectedId: u, actions: d, readOnly: f, customLaneMutationPending: p, portalClassName: m, onSelect: h, onOpenManager: _, onManageLane: v, onMoveCustomLane: b, onSetCustomLaneColor: x, onShowMissing: w }) { + let [T, E] = y(!1), [D, O] = y(""), k = m ? ` ${m}` : "", A = g(() => Ip(e, a, o, i.swimlanes), [ e, i.swimlanes, a, @@ -8115,7 +8443,7 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe let e = new Map(t.map((e) => [e.key, 0])); for (let t of A.values()) for (let [n, r] of t) e.has(n) && e.set(n, (e.get(n) ?? 0) + r.length); return e; - }, [t, A]), ee = (e) => F.get(e) ?? 0, R = r.filter((e) => e.key !== "" || ee(e.key) > 0), te = (e) => { + }, [t, A]), ee = (e) => F.get(e) ?? 0, R = r.filter((e) => e.key !== "" || ee(e.key) > 0), z = (e) => { let t = e.due && e.due < c && e.columnKey !== l; return /* @__PURE__ */ C("button", { type: "button", @@ -8139,7 +8467,7 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe className: "mt-1 flex flex-wrap items-center gap-1.5", children: [ e.priority && e.priority !== "none" && /* @__PURE__ */ S("span", { - className: `rounded px-1.5 py-0.5 text-[11px] font-medium ${np[e.priority] ?? "bg-stone-100 text-stone-500"}`, + className: `rounded px-1.5 py-0.5 text-[11px] font-medium ${cp[e.priority] ?? "bg-stone-100 text-stone-500"}`, children: e.priority }), (e.taskTotal ?? 0) > 0 && /* @__PURE__ */ C("span", { @@ -8159,20 +8487,20 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe }) ] }, e.id); - }, z = (e, t) => { + }, B = (e, t) => { let n = N.get(e.key); return !n || f ? null : /* @__PURE__ */ C(Du, { as: "div", className: "relative shrink-0", children: [/* @__PURE__ */ S(Su, { disabled: p, - title: B._({ id: "DGEEOQ" }), - "aria-label": B._({ + title: V._({ id: "-hwvgo" }), + "aria-label": V._({ id: "RlLl3G", values: { 0: e.name } }), className: "flex h-8 w-8 items-center justify-center rounded-lg text-stone-400 hover:bg-white hover:text-stone-600 disabled:cursor-wait disabled:opacity-40", - children: /* @__PURE__ */ S(ff, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(mf, { className: "h-4 w-4" }) }), /* @__PURE__ */ C(Cu, { anchor: "bottom end", className: `z-50 w-48 rounded-xl border border-line bg-white py-1 text-xs shadow-lg shadow-emerald-950/10 [--anchor-gap:4px] focus:outline-none${k}`, @@ -8184,7 +8512,7 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe action: "rename" }), className: "flex w-full items-center gap-2 px-3 py-2 text-left text-stone-700 data-[focus]:bg-stone-100", - children: [/* @__PURE__ */ S(Ef, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "2wxgft" })] + children: [/* @__PURE__ */ S(Af, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "2wxgft" })] }) }), /* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { type: "button", @@ -8210,7 +8538,7 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe children: /* @__PURE__ */ S(L, { id: "jZlrte" }) }), /* @__PURE__ */ C("div", { className: "mt-2 flex flex-wrap gap-2", - children: [rp.map((t) => /* @__PURE__ */ S("button", { + children: [lp.map((t) => /* @__PURE__ */ S("button", { type: "button", disabled: p, onClick: () => x(e.key, t), @@ -8220,10 +8548,10 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe }, t)), /* @__PURE__ */ S("button", { type: "button", disabled: p, - title: B._({ id: "H_SQFv" }), + title: V._({ id: "H_SQFv" }), onClick: () => x(e.key, null), className: "flex h-5 w-5 items-center justify-center rounded-full bg-white ring-1 ring-black/10 disabled:cursor-wait disabled:opacity-40", - children: /* @__PURE__ */ S(Wf, { className: "h-3 w-3 text-stone-400" }) + children: /* @__PURE__ */ S(Xf, { className: "h-3 w-3 text-stone-400" }) })] })] }), @@ -8235,7 +8563,7 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe action: "delete" }), className: "flex w-full items-center gap-2 px-3 py-2 text-left text-red-600 data-[focus]:bg-red-50", - children: [/* @__PURE__ */ S(Rf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] + children: [/* @__PURE__ */ S(Hf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] }) }) ] })] @@ -8248,11 +8576,11 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe children: [ /* @__PURE__ */ S("span", { className: "mx-auto flex h-11 w-11 items-center justify-center rounded-xl bg-brand-soft text-brand-dark", - children: /* @__PURE__ */ S(Af, { className: "h-5 w-5" }) + children: /* @__PURE__ */ S(Pf, { className: "h-5 w-5" }) }), /* @__PURE__ */ S("h2", { className: "mt-4 text-base font-semibold tracking-tight text-stone-900", - children: /* @__PURE__ */ S(L, { id: "IdMoS6" }) + children: /* @__PURE__ */ S(L, { id: "NnxWLJ" }) }), /* @__PURE__ */ S("p", { className: "mx-auto mt-2 max-w-sm text-xs leading-5 text-brand-gray", @@ -8262,7 +8590,7 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe type: "button", onClick: _, className: "mt-5 inline-flex min-h-10 items-center gap-1.5 rounded-lg bg-brand-dark px-3 text-xs font-semibold text-white hover:bg-brand", - children: [/* @__PURE__ */ S(Of, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "KCszT6" })] + children: [/* @__PURE__ */ S(Mf, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "qZd_ph" })] }) ] }) @@ -8279,18 +8607,18 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe className: "min-w-0 flex-1", children: [/* @__PURE__ */ S("span", { className: "block text-[10px] font-semibold text-stone-600", - children: /* @__PURE__ */ S(L, { id: "fVlS4-" }) + children: /* @__PURE__ */ S(L, { id: "hL5-_P" }) }), /* @__PURE__ */ S("span", { className: "block truncate text-[9px] text-brand-gray", - children: o === "custom" ? B._({ id: "8Tg_JR" }) : o === "status" ? B._({ id: "uAQUqI" }) : o === "priority" ? B._({ id: "1hKEom" }) : B._({ id: "ojKCLU" }) + children: o === "custom" ? V._({ id: "8Tg_JR" }) : o === "status" ? V._({ id: "uAQUqI" }) : o === "priority" ? V._({ id: "1hKEom" }) : V._({ id: "ojKCLU" }) })] }), a === "status" && d.addColumn && !f && /* @__PURE__ */ S("button", { type: "button", onClick: () => E(!0), - title: B._({ id: "1nUGn5" }), - "aria-label": B._({ id: "1nUGn5" }), + title: V._({ id: "1nUGn5" }), + "aria-label": V._({ id: "1nUGn5" }), className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-lg text-brand-dark hover:bg-brand-soft", - children: /* @__PURE__ */ S(Of, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(Mf, { className: "h-4 w-4" }) })] }), t.map((e) => { @@ -8305,13 +8633,13 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe }), l === e.key && a === "status" && /* @__PURE__ */ S(Yd, { className: "h-3.5 w-3.5 shrink-0 text-emerald-500", - title: B._({ id: "_5CsXX" }) + title: V._({ id: "_5CsXX" }) }), /* @__PURE__ */ C("span", { className: `shrink-0 rounded-full px-1.5 py-0.5 text-[10px] tabular-nums ${r ? "bg-red-100 font-semibold text-red-600" : "bg-stone-100 text-brand-gray"}`, children: [n, e.limit == null ? "" : `/${e.limit}`] }), - a === "status" && !f && /* @__PURE__ */ S(Gp, { + a === "status" && !f && /* @__PURE__ */ S(sm, { column: e, siblings: t, actions: d, @@ -8330,7 +8658,7 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe t && (E(!1), O(""), d.addColumn?.(t)); }, children: [ - /* @__PURE__ */ S(Of, { className: "h-4 w-4 text-brand-dark" }), + /* @__PURE__ */ S(Mf, { className: "h-4 w-4 text-brand-dark" }), /* @__PURE__ */ S("input", { autoFocus: !0, value: D, @@ -8338,8 +8666,8 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe onKeyDown: (e) => { e.key === "Escape" && (E(!1), O("")); }, - placeholder: B._({ id: "P5cvAA" }), - "aria-label": B._({ id: "P5cvAA" }), + placeholder: V._({ id: "P5cvAA" }), + "aria-label": V._({ id: "P5cvAA" }), className: "h-8 w-56 rounded-lg border border-stone-200 bg-white px-2 text-xs outline-none focus:border-brand focus:ring-2 focus:ring-brand/10" }), /* @__PURE__ */ S("button", { @@ -8378,13 +8706,13 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe children: [a && P > 0 && /* @__PURE__ */ S("button", { type: "button", onClick: w, - title: B._({ - id: "vIKvqQ", + title: V._({ + id: "9gx7rl", values: { missingCount: P } }), - "aria-label": B._({ id: "AoHpbt" }), + "aria-label": V._({ id: "_kh61D" }), className: "mr-1 inline-flex align-[-2px] text-amber-600 hover:text-amber-700", - children: /* @__PURE__ */ S(mf, { className: "h-3.5 w-3.5" }) + children: /* @__PURE__ */ S(gf, { className: "h-3.5 w-3.5" }) }), e.name] }), /* @__PURE__ */ S("span", { className: "mt-1 block text-[10px] tabular-nums text-brand-gray", @@ -8394,13 +8722,13 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe }) })] }), - o === "custom" && !a && z(e, c), - o === "custom" && !a && N.get(e.key) && /* @__PURE__ */ S(Wp, { + o === "custom" && !a && B(e, c), + o === "custom" && !a && N.get(e.key) && /* @__PURE__ */ S(om, { lane: N.get(e.key), cardCount: i, portalClassName: m }), - o === "status" && !f && /* @__PURE__ */ S(Gp, { + o === "status" && !f && /* @__PURE__ */ S(sm, { column: e, siblings: R, actions: d, @@ -8411,7 +8739,7 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe ] }), t.map((t) => /* @__PURE__ */ S("div", { className: "min-h-24 space-y-2 rounded-xl border border-line bg-stone-100/60 p-2", - children: Pp(r?.get(t.key) ?? [], s).map(te) + children: Gp(r?.get(t.key) ?? [], s).map(z) }, `${e.key || "unassigned"}-${t.key}`))] }, `row-${e.key || "unassigned"}`); }) ] @@ -8420,7 +8748,7 @@ function Kp({ cards: e, columns: t, lanes: r, config: i, groupKey: a, swimlaneKe } //#endregion //#region ../../shared/components/board/StatusManagerDialog.tsx -function qp({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) { +function lm({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) { let [a, o] = y(!1), [s, c] = y(""), l = r ? ` ${r}` : "", u = t.doneColumn ?? "done"; return /* @__PURE__ */ C(ul, { open: e, @@ -8436,7 +8764,7 @@ function qp({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) children: [ /* @__PURE__ */ S("span", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-brand-soft text-brand-dark", - children: /* @__PURE__ */ S(Af, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(Pf, { className: "h-4 w-4" }) }), /* @__PURE__ */ C("div", { className: "min-w-0 flex-1", @@ -8445,16 +8773,16 @@ function qp({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) children: /* @__PURE__ */ S(L, { id: "rvpMpc" }) }), /* @__PURE__ */ S("p", { className: "mt-1 text-xs leading-5 text-brand-gray", - children: /* @__PURE__ */ S(L, { id: "tYS8HY" }) + children: /* @__PURE__ */ S(L, { id: "0gvHNl" }) })] }), /* @__PURE__ */ S("button", { type: "button", onClick: i, - title: B._({ id: "yz7wBu" }), - "aria-label": B._({ id: "yz7wBu" }), + title: V._({ id: "yz7wBu" }), + "aria-label": V._({ id: "yz7wBu" }), className: "rounded-lg p-1 text-stone-400 hover:bg-stone-100 hover:text-stone-600", - children: /* @__PURE__ */ S(Wf, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(Xf, { className: "h-4 w-4" }) }) ] }), @@ -8462,7 +8790,7 @@ function qp({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) className: "min-h-0 flex-1 overflow-y-auto px-4 py-3", children: [/* @__PURE__ */ S("ul", { className: "space-y-1", - "aria-label": B._({ id: "Db4W3_" }), + "aria-label": V._({ id: "Db4W3_" }), children: t.columns.map((e) => { let i = u === e.key; return /* @__PURE__ */ C("li", { @@ -8472,22 +8800,32 @@ function qp({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) className: "h-4 w-4 shrink-0 rounded-full bg-stone-300 ring-1 ring-black/10", style: e.color ? { backgroundColor: e.color } : void 0 }), - /* @__PURE__ */ S("span", { - className: "min-w-0 flex-1 truncate text-xs font-semibold text-stone-800", - children: e.name + /* @__PURE__ */ C("span", { + className: "min-w-0 flex-1", + children: [/* @__PURE__ */ S("span", { + className: "block truncate text-xs font-semibold text-stone-800", + children: e.name + }), /* @__PURE__ */ C("span", { + className: "mt-0.5 block truncate text-[10px] text-brand-gray", + children: [ + /* @__PURE__ */ S(L, { id: "YNYued" }), + ": ", + /* @__PURE__ */ S("code", { children: e.key }) + ] + })] }), e.limit != null && /* @__PURE__ */ S("span", { className: "rounded bg-stone-100 px-1.5 py-0.5 text-[10px] tabular-nums text-brand-gray", - children: B._({ + children: V._({ id: "pdVZUg", values: { 0: e.limit } }) }), i && /* @__PURE__ */ S(Yd, { className: "h-4 w-4 text-emerald-500", - title: B._({ id: "_5CsXX" }) + title: V._({ id: "_5CsXX" }) }), - /* @__PURE__ */ S(Gp, { + /* @__PURE__ */ S(sm, { column: e, siblings: t.columns, actions: n, @@ -8507,7 +8845,7 @@ function qp({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) t && (o(!1), c(""), n.addColumn?.(t)); }, children: [ - /* @__PURE__ */ S(Of, { className: "h-4 w-4 text-brand-dark" }), + /* @__PURE__ */ S(Mf, { className: "h-4 w-4 text-brand-dark" }), /* @__PURE__ */ S("input", { autoFocus: !0, value: s, @@ -8515,8 +8853,8 @@ function qp({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) onKeyDown: (e) => { e.key === "Escape" && (o(!1), c("")); }, - placeholder: B._({ id: "P5cvAA" }), - "aria-label": B._({ id: "P5cvAA" }), + placeholder: V._({ id: "P5cvAA" }), + "aria-label": V._({ id: "P5cvAA" }), className: "h-8 min-w-0 flex-1 rounded-lg border border-stone-200 bg-white px-2 text-xs outline-none focus:border-brand focus:ring-2 focus:ring-brand/10" }), /* @__PURE__ */ S("button", { @@ -8529,7 +8867,7 @@ function qp({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) type: "button", onClick: () => o(!0), className: "mt-2 flex min-h-11 w-full items-center gap-2 rounded-xl border border-dashed border-brand/20 bg-brand-soft/20 px-3 text-xs font-semibold text-brand-dark hover:border-brand/40 hover:bg-brand-soft/40", - children: [/* @__PURE__ */ S(Of, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "1nUGn5" })] + children: [/* @__PURE__ */ S(Mf, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "1nUGn5" })] }))] }), /* @__PURE__ */ S("div", { @@ -8548,18 +8886,18 @@ function qp({ open: e, config: t, actions: n, portalClassName: r, onClose: i }) } //#endregion //#region ../../shared/components/board/controls.tsx -var Jp = "rounded-md border border-stone-200 bg-white px-1.5 py-1 text-xs text-stone-700 focus:border-brand focus:outline-none focus:ring-1 focus:ring-brand"; -function Yp({ value: e, options: t, onChange: n, disabled: r = !1 }) { +var um = "rounded-md border border-stone-200 bg-white px-1.5 py-1 text-xs text-stone-700 focus:border-brand focus:outline-none focus:ring-1 focus:ring-brand"; +function dm({ value: e, options: t, onChange: n, disabled: r = !1 }) { let i = t.find((t) => t.value === e); return /* @__PURE__ */ C(Jl, { value: e, onChange: n, disabled: r, children: [/* @__PURE__ */ C(Ul, { - className: `${Jp} flex w-full items-center justify-between gap-1 disabled:cursor-not-allowed disabled:bg-stone-50 disabled:opacity-60`, + className: `${um} flex w-full items-center justify-between gap-1 disabled:cursor-not-allowed disabled:bg-stone-50 disabled:opacity-60`, children: [/* @__PURE__ */ C("span", { className: "flex min-w-0 items-center gap-1.5", - children: [i?.warning ? /* @__PURE__ */ S(mf, { className: "h-3.5 w-3.5 shrink-0 text-amber-500" }) : i?.color ? /* @__PURE__ */ S("span", { + children: [i?.warning ? /* @__PURE__ */ S(gf, { className: "h-3.5 w-3.5 shrink-0 text-amber-500" }) : i?.color ? /* @__PURE__ */ S("span", { className: "h-2.5 w-2.5 shrink-0 rounded-full", style: { backgroundColor: i.color }, "aria-hidden": !0 @@ -8567,7 +8905,7 @@ function Yp({ value: e, options: t, onChange: n, disabled: r = !1 }) { className: "truncate", children: i?.label ?? e })] - }), /* @__PURE__ */ S(rf, { className: "h-3.5 w-3.5 shrink-0 text-stone-400" })] + }), /* @__PURE__ */ S(of, { className: "h-3.5 w-3.5 shrink-0 text-stone-400" })] }), /* @__PURE__ */ S(Gl, { anchor: "bottom start", className: "z-[60] w-[var(--button-width)] rounded-md border border-black/[0.06] bg-white py-1 text-xs shadow-lg [--anchor-gap:4px] focus:outline-none", @@ -8576,7 +8914,7 @@ function Yp({ value: e, options: t, onChange: n, disabled: r = !1 }) { className: "flex cursor-pointer items-center justify-between gap-1 px-2 py-1 text-stone-700 data-[focus]:bg-stone-100", children: [/* @__PURE__ */ C("span", { className: "flex min-w-0 items-center gap-1.5", - children: [t.warning ? /* @__PURE__ */ S(mf, { className: "h-3.5 w-3.5 shrink-0 text-amber-500" }) : t.color ? /* @__PURE__ */ S("span", { + children: [t.warning ? /* @__PURE__ */ S(gf, { className: "h-3.5 w-3.5 shrink-0 text-amber-500" }) : t.color ? /* @__PURE__ */ S("span", { className: "h-2.5 w-2.5 shrink-0 rounded-full", style: { backgroundColor: t.color }, "aria-hidden": !0 @@ -8591,7 +8929,7 @@ function Yp({ value: e, options: t, onChange: n, disabled: r = !1 }) { } //#endregion //#region ../../shared/components/board/SwimlaneDeleteDialog.tsx -function Xp({ lane: e, cardCount: t, targets: n, busy: r, progress: i, error: a, portalClassName: o, onClose: s, onConfirm: c }) { +function fm({ lane: e, cardCount: t, targets: n, busy: r, progress: i, error: a, portalClassName: o, onClose: s, onConfirm: c }) { let [l, u] = y("keep"), [d, p] = y(""), m = v(null), h = n.length > 0; f(() => { let t = e?.key ?? null, r = m.current !== t; @@ -8614,7 +8952,7 @@ function Xp({ lane: e, cardCount: t, targets: n, busy: r, progress: i, error: a, children: [ /* @__PURE__ */ S(ll, { className: "text-base font-semibold tracking-tight text-stone-900", - children: B._({ + children: V._({ id: "KpnwJK", values: { 0: e.name } }) @@ -8622,10 +8960,10 @@ function Xp({ lane: e, cardCount: t, targets: n, busy: r, progress: i, error: a, /* @__PURE__ */ S("p", { id: "swimlane-delete-description", className: "mt-1 text-xs leading-5 text-brand-gray", - children: t > 0 ? B._({ - id: "RbsNko", + children: t > 0 ? V._({ + id: "GL6e_U", values: { cardCount: t } - }) : B._({ id: "MYx830" }) + }) : V._({ id: "9L7ptC" }) }), t > 0 && /* @__PURE__ */ C(Cd, { value: l, @@ -8647,7 +8985,7 @@ function Xp({ lane: e, cardCount: t, targets: n, busy: r, progress: i, error: a, })] }), /* @__PURE__ */ S("span", { className: "mt-1 block text-[11px] leading-4 text-brand-gray", - children: /* @__PURE__ */ S(L, { id: "Y8bR2a" }) + children: /* @__PURE__ */ S(L, { id: "c-EXz1" }) })] })] }), /* @__PURE__ */ C(Sd, { @@ -8663,14 +9001,14 @@ function Xp({ lane: e, cardCount: t, targets: n, busy: r, progress: i, error: a, children: /* @__PURE__ */ S(L, { id: "_TJomP" }) }), /* @__PURE__ */ S("span", { className: "mt-1 block text-[11px] leading-4 text-brand-gray", - children: /* @__PURE__ */ S(L, { id: "3CtQL6" }) + children: /* @__PURE__ */ S(L, { id: "xX5QVp" }) })] })] })] }), h && /* @__PURE__ */ S("div", { className: "mt-2 pl-7", - children: /* @__PURE__ */ S(Yp, { + children: /* @__PURE__ */ S(dm, { value: d, options: n, disabled: l !== "move", @@ -8708,7 +9046,7 @@ function Xp({ lane: e, cardCount: t, targets: n, busy: r, progress: i, error: a, a && /* @__PURE__ */ C("div", { className: "mt-4 flex gap-2 rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-800", role: "alert", - children: [/* @__PURE__ */ S(mf, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ S("span", { children: a })] + children: [/* @__PURE__ */ S(gf, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ S("span", { children: a })] }) ] }), /* @__PURE__ */ C("div", { @@ -8727,7 +9065,7 @@ function Xp({ lane: e, cardCount: t, targets: n, busy: r, progress: i, error: a, }), "aria-disabled": r || t > 0 && l === "move" && n.length === 0, className: "rounded-lg bg-red-600 px-3 py-1.5 text-xs font-semibold text-white hover:bg-red-700 aria-disabled:cursor-not-allowed aria-disabled:opacity-50", - children: r ? B._({ id: "XklovM" }) : t > 0 && l === "move" ? B._({ id: "NYTPDY" }) : B._({ id: "uAP6ov" }) + children: r ? V._({ id: "XklovM" }) : t > 0 && l === "move" ? V._({ id: "NYTPDY" }) : V._({ id: "0cspe_" }) })] })] }) }) @@ -8736,26 +9074,26 @@ function Xp({ lane: e, cardCount: t, targets: n, busy: r, progress: i, error: a, } //#endregion //#region ../../shared/components/board/SwimlaneManagerDialog.tsx -function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, onClose: a, onSaveLanes: o, onUpdateCards: s, onShowAffected: c }) { - let [l, u] = y(!1), [d, p] = y(""), [m, h] = y(null), [_, b] = y(""), [w, T] = y(null), [E, D] = y(!1), [O, k] = y(null), [A, j] = y(!1), [M, N] = y(""), [P, F] = y(null), [I, ee] = y(""), R = v(null), [te, z] = y(null), ne = v(!1), re = v(null); +function pm({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, onClose: a, onSaveLanes: o, onUpdateCards: s, onShowAffected: c }) { + let [l, u] = y(!1), [d, p] = y(""), [m, h] = y(null), [_, b] = y(""), [w, T] = y(null), [E, D] = y(!1), [O, k] = y(null), [A, j] = y(!1), [M, N] = y(""), [P, F] = y(null), [I, ee] = y(""), R = v(null), [z, B] = y(null), te = v(!1), ne = v(null); f(() => { e || (u(!1), p(""), h(null), T(null), k(null), N(""), F(null), ee("")); }, [e]), f(() => { - if (!e || !r || re.current === r.id) return; + if (!e || !r || ne.current === r.id) return; let n = t.find((e) => e.key === r.laneKey); - n && (re.current = r.id, r.action === "rename" ? (h(n.key), b(n.name), T(null)) : (N(""), F(null), k(n))); + n && (ne.current = r.id, r.action === "rename" ? (h(n.key), b(n.name), T(null)) : (N(""), F(null), k(n))); }, [ r?.id, e, t ]); - let ie = i ? ` ${i}` : "", ae = g(() => { + let re = i ? ` ${i}` : "", ie = g(() => { let e = /* @__PURE__ */ new Map(); for (let t of n) t.swimlaneKey && e.set(t.swimlaneKey, (e.get(t.swimlaneKey) ?? 0) + 1); return e; - }, [n]), oe = g(() => Tp({ swimlanes: t }, n), [t, n]), se = oe.filter((e) => e.kind === "dangling_swimlane").reduce((e, t) => e + t.cardCount, 0), ce = oe.filter((e) => e.kind !== "dangling_swimlane"), le = async (e, t = "dialog") => { - if (!ne.current) { - ne.current = !0, D(!0), T(null); + }, [n]), ae = g(() => jp({ swimlanes: t }, n), [t, n]), oe = ae.filter((e) => e.kind === "dangling_swimlane").reduce((e, t) => e + t.cardCount, 0), se = ae.filter((e) => e.kind !== "dangling_swimlane"), ce = async (e, t = "dialog") => { + if (!te.current) { + te.current = !0, D(!0), T(null); try { await o(e); } catch (e) { @@ -8764,14 +9102,14 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, message: e instanceof Error ? e.message : String(e) }), e; } finally { - ne.current = !1, D(!1); + te.current = !1, D(!1); } } - }, ue = (e, n) => { + }, le = (e, n) => { let r = t.findIndex((t) => t.key === e), i = r + n; if (r < 0 || i < 0 || i >= t.length || E) return; let a = [...t], [o] = a.splice(r, 1); - o && (a.splice(i, 0, o), le(a, e).then(() => ee(B._({ + o && (a.splice(i, 0, o), ce(a, e).then(() => ee(V._({ id: "CxcMyt", values: { 0: o.name, @@ -8779,12 +9117,12 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, 2: t.length } }))).catch(() => void 0)); - }, de = (e, n) => { + }, ue = (e, n) => { if (e === n || E) return; let r = [...t], i = r.findIndex((t) => t.key === e), a = r.findIndex((e) => e.key === n); if (i < 0 || a < 0) return; let [o] = r.splice(i, 1); - o && (r.splice(a, 0, o), le(r, e).then(() => ee(B._({ + o && (r.splice(a, 0, o), ce(r, e).then(() => ee(V._({ id: "CxcMyt", values: { 0: o.name, @@ -8792,32 +9130,32 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, 2: t.length } }))).catch(() => void 0)); - }, fe = (e, t) => { + }, de = (e, t) => { e.button !== 0 || E || (R.current = { key: t, x: e.clientX, y: e.clientY, moved: !1 }, e.currentTarget.setPointerCapture?.(e.pointerId)); - }, pe = (e, t) => { + }, fe = (e, t) => { let n = R.current; if (!(!n || n.key !== t) && !n.moved) { if (Math.abs(e.clientX - n.x) < 4 && Math.abs(e.clientY - n.y) < 4) return; - n.moved = !0, z(t); + n.moved = !0, B(t); } - }, me = (e, t) => { + }, pe = (e, t) => { let n = R.current; - R.current = null, z(null); + R.current = null, B(null); try { e.currentTarget.releasePointerCapture?.(e.pointerId); } catch {} if (!n?.moved || n.key !== t) return; let r = document.elementFromPoint(e.clientX, e.clientY)?.closest("[data-swimlane-row]")?.dataset.swimlaneRow; - r && de(t, r); - }, he = (e) => { + r && ue(t, r); + }, me = (e) => { T(null), h(e.key), b(e.name); - }, ge = async (e) => { - let n = Cp(_, t, e.key); + }, he = async (e) => { + let n = kp(_, t, e.key); if (n) { T({ key: e.key, @@ -8826,14 +9164,14 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, return; } let r = _.trim(); - h(null), r !== e.name && await le(t.map((t) => t.key === e.key ? { + h(null), r !== e.name && await ce(t.map((t) => t.key === e.key ? { ...t, name: r } : t), e.key).catch(() => { h(e.key); }); - }, _e = async () => { - let e = Cp(d, t); + }, ge = async () => { + let e = kp(d, t); if (e) { T({ key: "new", @@ -8842,18 +9180,18 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, return; } let r = d.trim(), i = { - key: Sp(r, [...t.map((e) => e.key), ...n.map((e) => e.swimlaneKey).filter((e) => !!e)]), + key: Op(r, [...t.map((e) => e.key), ...n.map((e) => e.swimlaneKey).filter((e) => !!e)]), name: r }; - u(!1), p(""), await le([...t, i], "new").catch(() => { + u(!1), p(""), await ce([...t, i], "new").catch(() => { u(!0), p(r); }); - }, ve = (e, n) => { - E || le(t.map((t) => t.key === e.key ? { + }, _e = (e, n) => { + E || ce(t.map((t) => t.key === e.key ? { ...t, color: n } : t), e.key).catch(() => void 0); - }, ye = async (e) => { + }, ve = async (e) => { if (!O || A) return; let r = n.filter((e) => e.swimlaneKey === O.key); j(!0), N(""), F(null); @@ -8877,9 +9215,9 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, } finally { j(!1); } - }, be = O ? [{ + }, ye = O ? [{ value: "", - label: B._({ id: "EbMPZJ" }) + label: V._({ id: "EbMPZJ" }) }, ...t.filter((e) => e.key !== O.key).map((e) => ({ value: e.key, label: e.name, @@ -8890,12 +9228,12 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, onClose: () => { !E && !A && a(); }, - className: `relative z-40${ie}`, - children: [/* @__PURE__ */ S(cl, { className: `fixed inset-0 bg-stone-950/30 backdrop-blur-sm${ie}` }), /* @__PURE__ */ S("div", { - className: `fixed inset-0 flex items-end justify-center overflow-y-auto p-0 sm:items-center sm:p-4${ie}`, + className: `relative z-40${re}`, + children: [/* @__PURE__ */ S(cl, { className: `fixed inset-0 bg-stone-950/30 backdrop-blur-sm${re}` }), /* @__PURE__ */ S("div", { + className: `fixed inset-0 flex items-end justify-center overflow-y-auto p-0 sm:items-center sm:p-4${re}`, children: /* @__PURE__ */ C(sl, { "aria-describedby": "swimlane-manager-description", - className: `flex max-h-[88dvh] w-full max-w-2xl flex-col overflow-hidden rounded-t-2xl bg-white shadow-2xl shadow-emerald-950/10 ring-1 ring-black/[0.06] sm:rounded-2xl${ie}`, + className: `flex max-h-[88dvh] w-full max-w-2xl flex-col overflow-hidden rounded-t-2xl bg-white shadow-2xl shadow-emerald-950/10 ring-1 ring-black/[0.06] sm:rounded-2xl${re}`, children: [ /* @__PURE__ */ C("div", { className: "flex items-start gap-3 border-b border-line px-5 pb-4 pt-5", @@ -8909,12 +9247,12 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, children: [ /* @__PURE__ */ S(ll, { className: "text-base font-semibold tracking-tight text-stone-900", - children: /* @__PURE__ */ S(L, { id: "uH1U8v" }) + children: /* @__PURE__ */ S(L, { id: "2aEwT_" }) }), /* @__PURE__ */ S("p", { id: "swimlane-manager-description", className: "mt-1 text-xs leading-5 text-brand-gray", - children: /* @__PURE__ */ S(L, { id: "lUeOk0" }) + children: /* @__PURE__ */ S(L, { id: "rK_KGj" }) }), /* @__PURE__ */ S("span", { className: "sr-only", @@ -8929,10 +9267,10 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, E || a(); }, "aria-disabled": E, - title: B._({ id: "yz7wBu" }), - "aria-label": B._({ id: "yz7wBu" }), + title: V._({ id: "yz7wBu" }), + "aria-label": V._({ id: "yz7wBu" }), className: "rounded-lg p-1 text-stone-400 hover:bg-stone-100 hover:text-stone-600 aria-disabled:cursor-not-allowed aria-disabled:opacity-50", - children: /* @__PURE__ */ S(Wf, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(Xf, { className: "h-4 w-4" }) }) ] }), @@ -8940,23 +9278,23 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, className: "min-h-0 flex-1 overflow-y-auto px-4 py-3", children: [ /* @__PURE__ */ S("ul", { - "aria-label": B._({ id: "hyVzII" }), + "aria-label": V._({ id: "ceQmqN" }), className: "space-y-1", children: t.map((e, n) => { let r = w?.key === e.key ? w.message : null; return /* @__PURE__ */ C("li", { "data-swimlane-row": e.key, - className: `rounded-xl transition ${te === e.key ? "opacity-50" : ""}`, + className: `rounded-xl transition ${z === e.key ? "opacity-50" : ""}`, children: [/* @__PURE__ */ C("div", { className: "group flex min-h-12 items-center gap-2 px-2 hover:bg-stone-50 focus-within:bg-stone-50", children: [ /* @__PURE__ */ S("button", { type: "button", - onPointerDown: (t) => fe(t, e.key), - onPointerMove: (t) => pe(t, e.key), - onPointerUp: (t) => me(t, e.key), - title: B._({ id: "KGi3u9" }), - "aria-label": B._({ + onPointerDown: (t) => de(t, e.key), + onPointerMove: (t) => fe(t, e.key), + onPointerUp: (t) => pe(t, e.key), + title: V._({ id: "KGi3u9" }), + "aria-label": V._({ id: "2BPVq8", values: { 0: e.name } }), @@ -8966,7 +9304,7 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, /* @__PURE__ */ C(od, { className: "relative shrink-0", children: [/* @__PURE__ */ S(td, { - title: B._({ id: "KFiYGY" }), + title: V._({ id: "KFiYGY" }), className: "flex h-9 w-9 items-center justify-center rounded-lg hover:bg-white focus:outline-none focus:ring-2 focus:ring-brand/30", children: /* @__PURE__ */ S("span", { className: "h-4 w-4 rounded-full bg-stone-300 ring-1 ring-black/10", @@ -8975,24 +9313,24 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, }) }), /* @__PURE__ */ C(id, { anchor: "bottom start", - className: `z-50 w-52 rounded-xl border border-line bg-white p-3 shadow-lg shadow-emerald-950/10 [--anchor-gap:4px] focus:outline-none${ie}`, + className: `z-50 w-52 rounded-xl border border-line bg-white p-3 shadow-lg shadow-emerald-950/10 [--anchor-gap:4px] focus:outline-none${re}`, children: [/* @__PURE__ */ S("p", { className: "text-[11px] font-medium text-brand-gray", - children: /* @__PURE__ */ S(L, { id: "U0hizX" }) + children: /* @__PURE__ */ S(L, { id: "fwTn8F" }) }), /* @__PURE__ */ C("div", { className: "mt-2 flex flex-wrap gap-2", - children: [rp.map((t) => /* @__PURE__ */ S("button", { + children: [lp.map((t) => /* @__PURE__ */ S("button", { type: "button", - onClick: () => ve(e, t), + onClick: () => _e(e, t), title: t, className: `h-5 w-5 rounded-full ring-1 ring-black/10 ${e.color === t ? "ring-2 ring-brand ring-offset-2" : ""}`, style: { backgroundColor: t } }, t)), /* @__PURE__ */ S("button", { type: "button", - onClick: () => ve(e, null), - title: B._({ id: "H_SQFv" }), + onClick: () => _e(e, null), + title: V._({ id: "H_SQFv" }), className: `flex h-5 w-5 items-center justify-center rounded-full bg-white ring-1 ring-black/10 ${e.color ? "" : "ring-2 ring-brand ring-offset-2"}`, - children: /* @__PURE__ */ S(Wf, { className: "h-3 w-3 text-stone-400" }) + children: /* @__PURE__ */ S(Xf, { className: "h-3 w-3 text-stone-400" }) })] })] })] @@ -9000,23 +9338,23 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, m === e.key ? /* @__PURE__ */ S("form", { className: "min-w-0 flex-1", onSubmit: (t) => { - t.preventDefault(), ge(e); + t.preventDefault(), he(e); }, children: /* @__PURE__ */ S("input", { autoFocus: !0, value: _, maxLength: 80, onChange: (e) => b(e.target.value), - onBlur: () => void ge(e), + onBlur: () => void he(e), onKeyDown: (e) => { e.key === "Escape" && (h(null), T(null)); }, - "aria-label": B._({ id: "79Yvzu" }), + "aria-label": V._({ id: "kMqzL_" }), className: "h-8 w-full rounded-lg border border-brand/40 bg-white px-2 text-xs font-medium text-stone-800 outline-none ring-2 ring-brand/10" }) }) : /* @__PURE__ */ S("button", { type: "button", - onDoubleClick: () => he(e), + onDoubleClick: () => me(e), className: "min-w-0 flex-1 truncate text-left text-xs font-semibold text-stone-800", title: e.name, children: e.name @@ -9025,33 +9363,33 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, className: "shrink-0 tabular-nums text-[11px] text-brand-gray", children: /* @__PURE__ */ S(L, { id: "fFAIng", - values: { 0: ae.get(e.key) ?? 0 } + values: { 0: ie.get(e.key) ?? 0 } }) }), /* @__PURE__ */ C(Du, { as: "div", className: "relative shrink-0", children: [/* @__PURE__ */ S(Su, { - title: B._({ id: "DGEEOQ" }), - "aria-label": B._({ + title: V._({ id: "-hwvgo" }), + "aria-label": V._({ id: "RlLl3G", values: { 0: e.name } }), className: "flex h-9 w-9 items-center justify-center rounded-lg text-stone-400 opacity-100 hover:bg-white hover:text-stone-600 md:opacity-0 md:group-hover:opacity-100 md:data-[open]:opacity-100", - children: /* @__PURE__ */ S(ff, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(mf, { className: "h-4 w-4" }) }), /* @__PURE__ */ C(Cu, { anchor: "bottom end", - className: `z-50 w-48 rounded-xl border border-line bg-white py-1 text-xs shadow-lg shadow-emerald-950/10 [--anchor-gap:4px] focus:outline-none${ie}`, + className: `z-50 w-48 rounded-xl border border-line bg-white py-1 text-xs shadow-lg shadow-emerald-950/10 [--anchor-gap:4px] focus:outline-none${re}`, children: [ /* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { type: "button", - onClick: () => he(e), + onClick: () => me(e), className: "flex w-full items-center gap-2 px-3 py-2 text-left text-stone-700 data-[focus]:bg-stone-100", - children: [/* @__PURE__ */ S(Ef, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "2wxgft" })] + children: [/* @__PURE__ */ S(Af, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "2wxgft" })] }) }), /* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { type: "button", - onClick: () => ue(e.key, -1), + onClick: () => le(e.key, -1), disabled: n === 0 || E, "aria-disabled": n === 0 || E, className: "flex w-full items-center gap-2 px-3 py-2 text-left text-stone-700 aria-disabled:opacity-40 data-[focus]:bg-stone-100", @@ -9059,7 +9397,7 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, }) }), /* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { type: "button", - onClick: () => ue(e.key, 1), + onClick: () => le(e.key, 1), disabled: n === t.length - 1 || E, "aria-disabled": n === t.length - 1 || E, className: "flex w-full items-center gap-2 px-3 py-2 text-left text-stone-700 aria-disabled:opacity-40 data-[focus]:bg-stone-100", @@ -9072,14 +9410,14 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, N(""), F(null), k(e); }, className: "flex w-full items-center gap-2 px-3 py-2 text-left text-red-600 data-[focus]:bg-red-50", - children: [/* @__PURE__ */ S(Rf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] + children: [/* @__PURE__ */ S(Hf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] }) }) ] })] }), - /* @__PURE__ */ S(Wp, { + /* @__PURE__ */ S(om, { lane: e, - cardCount: ae.get(e.key) ?? 0, + cardCount: ie.get(e.key) ?? 0, portalClassName: i, buttonClassName: "flex h-9 w-9 items-center justify-center rounded-lg text-stone-400 opacity-100 hover:bg-white hover:text-stone-600 md:opacity-0 md:group-hover:opacity-100 md:data-[open]:opacity-100" }) @@ -9087,7 +9425,7 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, }), r && /* @__PURE__ */ C("div", { className: "mx-2 mb-1 flex items-center gap-1.5 rounded-lg bg-amber-50 px-2 py-1.5 text-[11px] text-amber-800", role: "alert", - children: [/* @__PURE__ */ S(mf, { className: "h-3.5 w-3.5 shrink-0" }), r] + children: [/* @__PURE__ */ S(gf, { className: "h-3.5 w-3.5 shrink-0" }), r] })] }, e.key); }) @@ -9095,14 +9433,14 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, l ? /* @__PURE__ */ C("form", { className: "mt-2 rounded-xl border border-dashed border-brand/30 bg-brand-soft/20 p-2", onSubmit: (e) => { - e.preventDefault(), _e(); + e.preventDefault(), ge(); }, children: [/* @__PURE__ */ C("div", { className: "flex items-center gap-2", children: [ /* @__PURE__ */ S("span", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-white text-brand-dark", - children: /* @__PURE__ */ S(Of, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(Mf, { className: "h-4 w-4" }) }), /* @__PURE__ */ S("input", { autoFocus: !0, @@ -9112,8 +9450,8 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, onKeyDown: (e) => { e.key === "Escape" && (u(!1), p(""), T(null)); }, - placeholder: B._({ id: "79Yvzu" }), - "aria-label": B._({ id: "79Yvzu" }), + placeholder: V._({ id: "kMqzL_" }), + "aria-label": V._({ id: "kMqzL_" }), className: "h-8 min-w-0 flex-1 rounded-lg border border-stone-200 bg-white px-2 text-xs text-stone-800 outline-none focus:border-brand focus:ring-2 focus:ring-brand/10" }), /* @__PURE__ */ S("button", { @@ -9142,9 +9480,9 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, u(!0), p(""), T(null); }, className: "mt-2 flex min-h-11 w-full items-center gap-2 rounded-xl border border-dashed border-brand/20 bg-brand-soft/20 px-3 text-left text-xs font-semibold text-brand-dark hover:border-brand/40 hover:bg-brand-soft/40", - children: [/* @__PURE__ */ S(Of, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "KCszT6" })] + children: [/* @__PURE__ */ S(Mf, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "qZd_ph" })] }), - (ce.length > 0 || se > 0) && /* @__PURE__ */ C("section", { + (se.length > 0 || oe > 0) && /* @__PURE__ */ C("section", { className: "mt-4 border-t border-line pt-3", "aria-labelledby": "swimlane-issues-title", children: [/* @__PURE__ */ S("h3", { @@ -9153,25 +9491,25 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, children: /* @__PURE__ */ S(L, { id: "1718Q-" }) }), /* @__PURE__ */ C("div", { className: "mt-2 space-y-2", - children: [ce.map((e) => /* @__PURE__ */ C("div", { + children: [se.map((e) => /* @__PURE__ */ C("div", { className: "flex min-h-11 items-center gap-2 rounded-xl bg-amber-50 px-3 text-xs text-amber-800", role: "alert", - children: [/* @__PURE__ */ S(mf, { className: "h-4 w-4 shrink-0" }), /* @__PURE__ */ S("span", { children: e.kind === "duplicate_swimlane_key" ? B._({ - id: "RgO4DX", + children: [/* @__PURE__ */ S(gf, { className: "h-4 w-4 shrink-0" }), /* @__PURE__ */ S("span", { children: e.kind === "duplicate_swimlane_key" ? V._({ + id: "dQva-y", values: { 0: e.key } - }) : B._({ - id: "uWPalN", + }) : V._({ + id: "mPINe9", values: { 0: e.name } }) })] - }, `${e.kind}-${e.kind === "duplicate_swimlane_key" ? e.key : e.name}`)), se > 0 && /* @__PURE__ */ C("div", { + }, `${e.kind}-${e.kind === "duplicate_swimlane_key" ? e.key : e.name}`)), oe > 0 && /* @__PURE__ */ C("div", { className: "flex min-h-11 items-center gap-2 rounded-xl bg-amber-50 px-3 text-xs text-amber-800", children: [ - /* @__PURE__ */ S(mf, { className: "h-4 w-4 shrink-0" }), + /* @__PURE__ */ S(gf, { className: "h-4 w-4 shrink-0" }), /* @__PURE__ */ S("span", { className: "min-w-0 flex-1", - children: B._({ - id: "SavliD", - values: { danglingCount: se } + children: V._({ + id: "F6osRA", + values: { danglingCount: oe } }) }), /* @__PURE__ */ S("button", { @@ -9193,7 +9531,7 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, children: [/* @__PURE__ */ S("span", { className: "text-[11px] text-brand-gray", "aria-live": "polite", - children: E ? B._({ id: "K_F6pa" }) : B._({ id: "cUt8yN" }) + children: E ? V._({ id: "K_F6pa" }) : V._({ id: "cUt8yN" }) }), /* @__PURE__ */ S("button", { type: "button", onClick: () => { @@ -9207,10 +9545,10 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, ] }) })] - }), /* @__PURE__ */ S(Xp, { + }), /* @__PURE__ */ S(fm, { lane: O, - cardCount: O ? ae.get(O.key) ?? 0 : 0, - targets: be, + cardCount: O ? ie.get(O.key) ?? 0 : 0, + targets: ye, busy: A, progress: P, error: M, @@ -9218,12 +9556,12 @@ function Zp({ open: e, lanes: t, cards: n, focusRequest: r, portalClassName: i, onClose: () => { A || k(null); }, - onConfirm: ye + onConfirm: ve })] }); } //#endregion //#region ../../shared/components/board/SwimlaneConversionDialog.tsx -function Qp({ source: e, rows: t, open: n, busy: r, resume: i, progress: a, error: o, portalClassName: s, onClose: c, onConfirm: l }) { +function mm({ source: e, rows: t, open: n, busy: r, resume: i, progress: a, error: o, portalClassName: s, onClose: c, onConfirm: l }) { let u = s ? ` ${s}` : "", d = () => { r || c(); }; @@ -9241,16 +9579,16 @@ function Qp({ source: e, rows: t, open: n, busy: r, resume: i, progress: a, erro children: [ /* @__PURE__ */ S(ll, { className: "text-base font-semibold tracking-tight text-stone-900", - children: i ? B._({ id: "CXTDT_" }) : e === "priority" ? B._({ id: "nfhh60" }) : B._({ id: "vMTOsC" }) + children: i ? V._({ id: "K_cST0" }) : e === "priority" ? V._({ id: "U95P80" }) : V._({ id: "WWUwTb" }) }), /* @__PURE__ */ S("p", { id: "swimlane-conversion-description", className: "mt-1 text-xs leading-5 text-brand-gray", - children: i ? B._({ id: "T_nAzC" }) : e === "priority" ? B._({ id: "_YbTQZ" }) : B._({ id: "RfEZH1" }) + children: i ? V._({ id: "7MGAQC" }) : e === "priority" ? V._({ id: "eAi4RE" }) : V._({ id: "fOluHh" }) }), /* @__PURE__ */ C("ul", { className: "mt-4 divide-y divide-line", - "aria-label": B._({ id: "4NY8B5" }), + "aria-label": V._({ id: "4t8aKB" }), children: [t.map((e) => /* @__PURE__ */ C("li", { className: "flex min-h-10 items-center gap-2 py-2", children: [ @@ -9303,7 +9641,7 @@ function Qp({ source: e, rows: t, open: n, busy: r, resume: i, progress: a, erro o && /* @__PURE__ */ C("div", { className: "mt-4 flex gap-2 rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-800", role: "alert", - children: [/* @__PURE__ */ S(mf, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ S("span", { children: o })] + children: [/* @__PURE__ */ S(gf, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ S("span", { children: o })] }) ] }), /* @__PURE__ */ C("div", { @@ -9322,7 +9660,7 @@ function Qp({ source: e, rows: t, open: n, busy: r, resume: i, progress: a, erro disabled: r || t.length === 0, "aria-disabled": r || t.length === 0, className: "rounded-lg bg-brand-dark px-3 py-1.5 text-xs font-semibold text-white hover:bg-brand aria-disabled:cursor-not-allowed aria-disabled:opacity-50", - children: r ? B._({ id: "XklovM" }) : i ? B._({ id: "l_g7se" }) : B._({ id: "PUeYA1" }) + children: r ? V._({ id: "XklovM" }) : i ? V._({ id: "l_g7se" }) : V._({ id: "kBRFD0" }) })] })] }) @@ -9331,8 +9669,8 @@ function Qp({ source: e, rows: t, open: n, busy: r, resume: i, progress: a, erro } //#endregion //#region ../../shared/components/board/BoardSurface.tsx -function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFromTemplate: o, assigneeOptions: s, tagOptions: c, loadNotes: l, onUploadAttachment: u, loadComments: d, addComment: p, updateComment: m, deleteComment: h, toggleReaction: _, resolveComment: b, currentUser: w, loadActivity: T, fullscreen: E, onToggleFullscreen: D, onOpenSettings: O, readOnly: k, onCardOpen: A, peekComponent: j, portalClassName: M }) { - let [N, P] = y(null), [F, I] = y(/* @__PURE__ */ new Set()), [ee, R] = y(null), [te, z] = y(null), [ne, re] = y(/* @__PURE__ */ new Set()), [ie, ae] = y(null), [oe, se] = y(""), [ce, le] = y(!1), [ue, de] = y(""), [fe, pe] = y(""), [me, he] = y("manual"), [ge, _e] = y(null), [ve, ye] = y(360), [be, xe] = y(null), [Se, Ce] = y(null), [we, Te] = y(null), [Ee, De] = y(!1), [Oe, ke] = y(!1), [Ae, je] = y(), [Me, Ne] = y(!1), [Pe, Fe] = y("priority"), [Ie, Le] = y(!1), [Re, ze] = y(null), [Be, Ve] = y(""), [He, Ue] = y(0), [We, Ge] = y(!1), Ke = v(null), qe = v(null), Je = v(!1), Ye = v(null), Xe = v(!1), Ze = e.groupBy ?? "status", Qe = Ze === "status", $e = e.viewType ?? "board", et = e.doneColumn ?? "done", tt = (e.colorColumns ?? !1) && Qe && $e === "board", nt = me === "manual" && Qe && $e === "board" && !fe.trim() && !ge, rt = _p(); +function hm({ config: e, cards: t, actions: r, error: i, templates: a, createFromTemplate: o, assigneeOptions: s, tagOptions: c, loadNotes: l, onUploadAttachment: u, loadComments: d, addComment: p, updateComment: m, deleteComment: h, toggleReaction: _, resolveComment: b, currentUser: w, loadActivity: T, fullscreen: E, onToggleFullscreen: D, onOpenSettings: O, readOnly: k, onCardOpen: A, peekComponent: j, portalClassName: M }) { + let [N, P] = y(null), [F, I] = y(/* @__PURE__ */ new Set()), [ee, R] = y(null), [z, B] = y(null), [te, ne] = y(/* @__PURE__ */ new Set()), [re, ie] = y(null), [ae, oe] = y(""), [se, ce] = y(!1), [le, ue] = y(""), [de, fe] = y(""), [pe, me] = y("manual"), [he, ge] = y({}), [_e, ve] = y(360), [ye, be] = y(null), [xe, Se] = y(null), [Ce, we] = y(null), [Te, Ee] = y(!1), [De, Oe] = y(!1), [ke, Ae] = y(), [je, Me] = y(!1), [Ne, Pe] = y("priority"), [Fe, Ie] = y(!1), [Le, Re] = y(null), [ze, Be] = y(""), [Ve, He] = y(0), [Ue, We] = y(!1), Ge = v(null), Ke = v(null), qe = v(!1), Je = v(null), Ye = v(!1), Xe = e.groupBy ?? "status", Ze = Xe === "status", Qe = e.viewType ?? "board", $e = e.doneColumn ?? "done", et = (e.colorColumns ?? !1) && Ze && Qe === "board", tt = pe === "manual" && Ze && Qe === "board" && !de.trim() && !zp(he), nt = Cp(); f(() => { if (!E || !D) return; let e = (e) => { @@ -9351,28 +9689,35 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro }; return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e); }, [F.size]); - let it = g(() => Dp(e, t, Ze, B._({ id: "EbMPZJ" })), [ + let rt = g(() => Np(e, t, Xe, V._({ id: "EbMPZJ" })), [ e, t, - Ze - ]), at = xp(e.swimlaneBy), ot = at && at !== Ze ? at : null, st = $e === "board" && !!ot, ct = g(() => ot ? kp(e, t, ot, B._({ id: "EbMPZJ" })) : [], [ + Xe + ]), it = Dp(e.swimlaneBy), at = it && it !== Xe ? it : null, ot = Qe === "board" && !!at, st = g(() => at ? Fp(e, t, at, V._({ id: "EbMPZJ" })) : [], [ e, t, - ot - ]), lt = g(() => Np(t, fe, ge, e), [ + at + ]), ct = g(() => bp(t, e.doneColumn), [t, e.doneColumn]), lt = g(() => new Set(ct.keys()), [ct]), ut = g(() => Wp(t, de, he, e, { + currentUser: w, + today: nt, + blockedCardIds: lt + }), [ t, - fe, - ge, - e - ]), ut = g(() => mp(t, e.doneColumn), [t, e.doneColumn]), dt = g(() => hp(t), [t]), ft = g(() => [...new Set(t.map((e) => e.assignee).filter(Boolean))], [t]), pt = g(() => [...new Set(t.flatMap((e) => e.tags.map((e) => e.label)))], [t]), mt = (t) => e.columns.find((e) => e.key === t)?.name || t || B._({ id: "EbMPZJ" }), ht = N ? t.find((e) => e.id === N) ?? null : null, gt = g(() => Dp(e, t, Pe, B._({ id: "EbMPZJ" })).filter((e) => Pe === "priority" ? e.key !== "none" : e.key !== "").map((e, n) => ({ + de, + he, + e, + w, + nt, + lt + ]), dt = g(() => xp(t), [t]), ft = g(() => [...new Set(t.map((e) => e.assignee).filter(Boolean))], [t]), pt = g(() => [...new Set(t.flatMap((e) => e.tags.map((e) => e.label)))], [t]), mt = (t) => e.columns.find((e) => e.key === t)?.name || t || V._({ id: "EbMPZJ" }), ht = N ? t.find((e) => e.id === N) ?? null : null, gt = g(() => Np(e, t, Ne, V._({ id: "EbMPZJ" })).filter((e) => Ne === "priority" ? e.key !== "none" : e.key !== "").map((e, n) => ({ value: e.key, name: e.name, - color: e.color ?? rp[n % rp.length], - cardCount: t.filter((t) => Ep(t, Pe) === e.key).length + color: e.color ?? lp[n % lp.length], + cardCount: t.filter((t) => Mp(t, Ne) === e.key).length })), [ t, e, - Pe + Ne ]), _t = async (e, t) => { if (r.updateCards) { await r.updateCards(e, t); @@ -9381,10 +9726,10 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro let n = 0; for (let i of e) await r.updateCard(i.cardId, i.patch), n += 1, t?.(n, e.length); }, vt = async () => { - if (!Ie) { - if (Ve(""), Ye.current = null, !(e.swimlaneMigration?.source === Pe && e.swimlaneMigration)) { + if (!Fe) { + if (Be(""), Je.current = null, !(e.swimlaneMigration?.source === Ne && e.swimlaneMigration)) { let n = /* @__PURE__ */ new Set([...(e.swimlanes ?? []).map((e) => e.key), ...t.map((e) => e.swimlaneKey).filter((e) => !!e)]), i = gt.map((e) => { - let t = Sp(e.name, n); + let t = Op(e.name, n); return n.add(t), { value: e.value, swimlaneKey: t @@ -9395,7 +9740,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro color: gt[t]?.color }))], o = { version: 1, - source: Pe, + source: Ne, mapping: i }; try { @@ -9404,25 +9749,25 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro swimlaneMigration: o }); } catch (e) { - Ve(e instanceof Error ? e.message : String(e)); + Be(e instanceof Error ? e.message : String(e)); return; } } - ze(null), Le(!0); + Re(null), Ie(!0); } }; f(() => { - if (!Ie || Je.current) return; + if (!Fe || qe.current) return; let n = e.swimlaneMigration; - !n || n.source !== Pe || (Je.current = !0, (async () => { + !n || n.source !== Ne || (qe.current = !0, (async () => { try { let i = [...n.mapping], a = [...e.swimlanes ?? []], o = new Set(i.map((e) => e.value)), s = new Set(a.map((e) => e.key)), c = /* @__PURE__ */ new Set([ ...s, ...i.map((e) => e.swimlaneKey), ...t.map((e) => e.swimlaneKey).filter((e) => !!e) - ]), l = [...new Set(t.map((e) => Ep(e, n.source)).filter((e) => n.source === "priority" ? e !== "none" : e !== ""))], u = !1; + ]), l = [...new Set(t.map((e) => Mp(e, n.source)).filter((e) => n.source === "priority" ? e !== "none" : e !== ""))], u = !1; for (let e of l) if (!o.has(e)) { - let t = Sp(e, c); + let t = Op(e, c); c.add(t), i.push({ value: e, swimlaneKey: t @@ -9433,11 +9778,11 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro a.push({ key: e.swimlaneKey, name: t?.name ?? e.value, - color: t?.color ?? rp[n % rp.length] + color: t?.color ?? lp[n % lp.length] }), s.add(e.swimlaneKey), u = !0; } if (u) { - Ye.current = null, await r.setConfig({ + Je.current = null, await r.setConfig({ swimlanes: a, swimlaneMigration: { ...n, @@ -9447,22 +9792,22 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro return; } let d = new Map(i.map((e) => [e.value, e.swimlaneKey])), f = t.flatMap((e) => { - let t = Ep(e, n.source), r = d.get(t); + let t = Mp(e, n.source), r = d.get(t); return r && e.swimlaneKey !== r ? [{ cardId: e.id, patch: { swimlaneKey: r } }] : []; }); if (f.length > 0) { - let e = f.map((e) => `${e.cardId}:${String(e.patch.swimlaneKey ?? "")}`).sort().join("\n"), t = Ye.current; - if (t?.signature === e && t.writes >= 2) throw Error(B._({ id: "KAlhe_" })); - Ye.current = { + let e = f.map((e) => `${e.cardId}:${String(e.patch.swimlaneKey ?? "")}`).sort().join("\n"), t = Je.current; + if (t?.signature === e && t.writes >= 2) throw Error(V._({ id: "KAlhe_" })); + Je.current = { signature: e, writes: t?.signature === e ? t.writes + 1 : 1 - }, ze({ + }, Re({ completed: 0, total: f.length - }), await _t(f, (e, t) => ze({ + }), await _t(f, (e, t) => Re({ completed: e, total: t })); @@ -9472,11 +9817,11 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro swimlanes: a, swimlaneBy: "custom", swimlaneMigration: void 0 - }), Ye.current = null, Le(!1), ze(null), Ne(!1); + }), Je.current = null, Ie(!1), Re(null), Me(!1); } catch (e) { - Ve(e instanceof Error ? e.message : String(e)), ze(null), Le(!1); + Be(e instanceof Error ? e.message : String(e)), Re(null), Ie(!1); } finally { - Je.current = !1, Ue((e) => e + 1); + qe.current = !1, He((e) => e + 1); } })()); }, [ @@ -9484,35 +9829,35 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro t, e.swimlaneMigration, e.swimlanes, - He, - Ie, + Ve, + Fe, gt, - Pe + Ne ]); let yt = "h-7 rounded-md border border-stone-200 bg-white px-2 text-xs text-stone-600 focus:border-brand focus:outline-none focus:ring-1 focus:ring-brand", bt = M ? ` ${M}` : "", xt = (e) => { - Ie || Promise.resolve(r.setConfig(e)).catch(() => {}); + Fe || Promise.resolve(r.setConfig(e)).catch(() => {}); }, St = async (e) => { await r.setConfig({ swimlanes: e }); }, Ct = (t, n) => { - if (Xe.current) return; + if (Ye.current) return; let i = [...e.swimlanes ?? []], a = i.findIndex((e) => e.key === t), o = a + n; if (a < 0 || o < 0 || o >= i.length) return; let [s] = i.splice(a, 1); - s && (i.splice(o, 0, s), Xe.current = !0, Ge(!0), Promise.resolve(r.setConfig({ swimlanes: i })).catch(() => {}).finally(() => { - Xe.current = !1, Ge(!1); + s && (i.splice(o, 0, s), Ye.current = !0, We(!0), Promise.resolve(r.setConfig({ swimlanes: i })).catch(() => {}).finally(() => { + Ye.current = !1, We(!1); })); }, wt = (t, n) => { - Xe.current || (Xe.current = !0, Ge(!0), Promise.resolve(r.setConfig({ swimlanes: (e.swimlanes ?? []).map((e) => e.key === t ? { + Ye.current || (Ye.current = !0, We(!0), Promise.resolve(r.setConfig({ swimlanes: (e.swimlanes ?? []).map((e) => e.key === t ? { ...e, color: n } : e) })).catch(() => {}).finally(() => { - Xe.current = !1, Ge(!1); + Ye.current = !1, We(!1); })); }, Tt = () => { - _e({ - prop: "swimlaneIssue", - value: "dangling" - }), window.setTimeout(() => { + ge((e) => ({ + ...e, + missingRow: !0 + })), window.setTimeout(() => { document.querySelector("[data-swimlane-unassigned]")?.scrollIntoView({ block: "nearest", inline: "nearest", @@ -9538,7 +9883,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro }; }, kt = (e, t) => (document.elementFromPoint(e, t)?.closest("[data-col-key]"))?.dataset.colKey ?? null, At = (e, t) => { if (e.button === 0) { - Ke.current = { + Ge.current = { id: t.id, startX: e.clientX, startY: e.clientY, @@ -9550,27 +9895,27 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro } }, jt = (e, t) => { if (k) return; - let n = Ke.current; + let n = Ge.current; if (!(!n || n.id !== t.id)) { if (!n.moved) { if (Math.abs(e.clientX - n.startX) < 4 && Math.abs(e.clientY - n.startY) < 4) return; - n.moved = !0, xe(t.id); + n.moved = !0, be(t.id); } - Te({ + we({ x: e.clientX, y: e.clientY }), R(Ot(e.clientX, e.clientY)); } }, Mt = (e, n) => { - let i = Ke.current; - Ke.current = null; + let i = Ge.current; + Ge.current = null; try { e.currentTarget.releasePointerCapture(e.pointerId); } catch {} - if (xe(null), Te(null), R(null), i?.moved) { + if (be(null), we(null), R(null), i?.moved) { let i = Ot(e.clientX, e.clientY); if (i) { - let e = Qe && !nt ? t.filter((e) => e.id !== n.id && Ep(e, Ze) === i.col).length : i.index; + let e = Ze && !tt ? t.filter((e) => e.id !== n.id && Mp(e, Xe) === i.col).length : i.index; r.moveCard(n.id, i.col, e); } } else if (i) { @@ -9585,9 +9930,9 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro } }, Nt = (e) => { for (let n of F) t.some((e) => e.id === n) && r.updateCard(n, e); - }, Pt = (e, t) => { - if (!(!Qe || !r.reorderColumns || e.button !== 0) && !e.target.closest("button")) { - qe.current = { + }, H = (e, t) => { + if (!(!Ze || !r.reorderColumns || e.button !== 0) && !e.target.closest("button")) { + Ke.current = { key: t.key, startX: e.clientX, startY: e.clientY, @@ -9597,26 +9942,26 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro e.currentTarget.setPointerCapture(e.pointerId); } catch {} } - }, V = (e, t) => { - let n = qe.current; + }, Pt = (e, t) => { + let n = Ke.current; if (!(!n || n.key !== t.key)) { if (!n.moved) { if (Math.abs(e.clientX - n.startX) < 4 && Math.abs(e.clientY - n.startY) < 4) return; - n.moved = !0, Ce(t.key); + n.moved = !0, Se(t.key); } - z(kt(e.clientX, e.clientY)); + B(kt(e.clientX, e.clientY)); } - }, Ft = (e, t) => { - let n = qe.current; - qe.current = null; + }, U = (e, t) => { + let n = Ke.current; + Ke.current = null; try { e.currentTarget.releasePointerCapture(e.pointerId); } catch {} - if (Ce(null), z(null), n?.moved) { + if (Se(null), B(null), n?.moved) { let n = kt(e.clientX, e.clientY); n && n !== t.key && r.reorderColumns?.(t.key, n); } - }, H = (e) => re((t) => { + }, Ft = (e) => ne((t) => { let n = new Set(t); return n.has(e) ? n.delete(e) : n.add(e), n; }), It = async (e, t) => { @@ -9627,7 +9972,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro }; return i && e.columns.length === 0 ? /* @__PURE__ */ C("div", { className: "flex h-full flex-col items-center justify-center gap-3 bg-stone-50 p-8 text-center", - children: [/* @__PURE__ */ S(mf, { className: "h-9 w-9 text-amber-500" }), /* @__PURE__ */ S("p", { + children: [/* @__PURE__ */ S(gf, { className: "h-9 w-9 text-amber-500" }), /* @__PURE__ */ S("p", { className: "max-w-md break-words text-sm text-stone-600", children: i })] @@ -9642,7 +9987,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro children: [ /* @__PURE__ */ S("span", { className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-lg bg-brand-soft text-brand-dark", - children: /* @__PURE__ */ S(Hf, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(Jf, { className: "h-4 w-4" }) }), /* @__PURE__ */ C("div", { className: "min-w-0 flex-1", @@ -9657,8 +10002,8 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro "aria-hidden": !0, children: " · " }), - lt.length, - lt.length === t.length ? "" : `/${t.length}`, + ut.length, + ut.length === t.length ? "" : `/${t.length}`, " ", /* @__PURE__ */ S(L, { id: "sCzmvQ" }) ] @@ -9673,51 +10018,51 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro /* @__PURE__ */ C("button", { type: "button", onClick: () => xt({ viewType: "board" }), - className: `inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium ${$e === "board" ? "bg-brand-soft text-brand-dark" : "text-stone-500 hover:text-brand-dark"}`, - children: [/* @__PURE__ */ S(Hf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "QD8opX" })] + className: `inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium ${Qe === "board" ? "bg-brand-soft text-brand-dark" : "text-stone-500 hover:text-brand-dark"}`, + children: [/* @__PURE__ */ S(Jf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "QD8opX" })] }), /* @__PURE__ */ C("button", { type: "button", onClick: () => xt({ viewType: "table" }), - className: `inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium ${$e === "table" ? "bg-brand-soft text-brand-dark" : "text-stone-500 hover:text-brand-dark"}`, - children: [/* @__PURE__ */ S(Pf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "4hJhzz" })] + className: `inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium ${Qe === "table" ? "bg-brand-soft text-brand-dark" : "text-stone-500 hover:text-brand-dark"}`, + children: [/* @__PURE__ */ S(Rf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "4hJhzz" })] }), /* @__PURE__ */ C("button", { type: "button", onClick: () => xt({ viewType: "calendar" }), - className: `inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium ${$e === "calendar" ? "bg-brand-soft text-brand-dark" : "text-stone-500 hover:text-brand-dark"}`, + className: `inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium ${Qe === "calendar" ? "bg-brand-soft text-brand-dark" : "text-stone-500 hover:text-brand-dark"}`, children: [/* @__PURE__ */ S(qd, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "AjVXBS" })] }) ] }), - Qe && $e === "board" && !k && /* @__PURE__ */ C("button", { + Ze && Qe === "board" && !k && /* @__PURE__ */ C("button", { type: "button", - className: `inline-flex items-center gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs font-medium ${tt ? "border-brand/40 bg-brand-soft/50 text-brand-dark" : "border-stone-200 text-stone-600 hover:border-brand/40 hover:text-brand-dark"}`, + className: `inline-flex items-center gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs font-medium ${et ? "border-brand/40 bg-brand-soft/50 text-brand-dark" : "border-stone-200 text-stone-600 hover:border-brand/40 hover:text-brand-dark"}`, onClick: () => xt({ colorColumns: !e.colorColumns }), - title: B._({ id: "b4hVKD" }), - children: [/* @__PURE__ */ S(Mf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "jZlrte" })] + title: V._({ id: "b4hVKD" }), + children: [/* @__PURE__ */ S(If, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "jZlrte" })] }), r.refresh && /* @__PURE__ */ C("button", { type: "button", className: "inline-flex items-center gap-1.5 rounded-lg border border-stone-200 px-2.5 py-1.5 text-xs font-medium text-stone-600 hover:border-brand/40 hover:text-brand-dark", onClick: () => void r.refresh?.(), - title: B._({ id: "lCF0wC" }), + title: V._({ id: "lCF0wC" }), children: [/* @__PURE__ */ S(jd, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "lCF0wC" })] }), O && /* @__PURE__ */ S("button", { type: "button", className: "inline-flex items-center justify-center rounded-lg border border-stone-200 p-1.5 text-stone-600 hover:border-brand/40 hover:text-brand-dark", onClick: O, - title: B._({ id: "6buwPb" }), - "aria-label": B._({ id: "6buwPb" }), - children: /* @__PURE__ */ S(cf, { className: "h-3.5 w-3.5" }) + title: V._({ id: "6buwPb" }), + "aria-label": V._({ id: "6buwPb" }), + children: /* @__PURE__ */ S(uf, { className: "h-3.5 w-3.5" }) }), D && /* @__PURE__ */ S("button", { type: "button", className: `inline-flex items-center justify-center rounded-lg border p-1.5 ${E ? "border-brand/40 bg-brand-soft/50 text-brand-dark" : "border-stone-200 text-stone-600 hover:border-brand/40 hover:text-brand-dark"}`, onClick: D, - title: E ? B._({ id: "sQpDn6" }) : B._({ id: "3qkggm" }), - "aria-label": E ? B._({ id: "sQpDn6" }) : B._({ id: "3qkggm" }), + title: E ? V._({ id: "sQpDn6" }) : V._({ id: "3qkggm" }), + "aria-label": E ? V._({ id: "sQpDn6" }) : V._({ id: "3qkggm" }), "aria-pressed": E, children: S(E ? Ld : zd, { className: "h-3.5 w-3.5" }) }) @@ -9728,161 +10073,124 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro /* @__PURE__ */ C("div", { className: "flex flex-wrap items-center gap-2 border-b border-black/[0.04] bg-white/40 px-5 py-1.5", children: [ - $e === "board" && /* @__PURE__ */ C("label", { + Qe === "board" && /* @__PURE__ */ C("label", { className: "inline-flex items-center gap-1 text-xs text-brand-gray", - children: [/* @__PURE__ */ S(Af, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ C("select", { + children: [/* @__PURE__ */ S(Pf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ C("select", { className: yt, - value: Ze, - disabled: Ie, + value: Xe, + disabled: Fe, onChange: (e) => xt({ groupBy: e.target.value }), children: [ /* @__PURE__ */ S("option", { value: "status", - children: B._({ id: "OepdfE" }) + children: V._({ id: "guQk4e" }) }), /* @__PURE__ */ S("option", { value: "priority", - children: B._({ id: "y9cj46" }) + children: V._({ id: "hNQgyI" }) }), /* @__PURE__ */ S("option", { value: "assignee", - children: B._({ id: "AxAubu" }) + children: V._({ id: "yjeGpt" }) }) ] })] }), - $e === "board" && /* @__PURE__ */ C("label", { + Qe === "board" && !k && /* @__PURE__ */ S("button", { + type: "button", + disabled: Fe, + onClick: () => Oe(!0), + title: V._({ id: "rvpMpc" }), + "aria-label": V._({ id: "rvpMpc" }), + className: "inline-flex h-7 w-7 items-center justify-center rounded-md border border-stone-200 bg-white text-stone-500 transition hover:border-brand/40 hover:text-brand-dark focus:outline-none focus:ring-2 focus:ring-brand/20 active:translate-y-px disabled:cursor-not-allowed disabled:opacity-50", + children: /* @__PURE__ */ S(Of, { className: "h-3.5 w-3.5" }) + }), + Qe === "board" && /* @__PURE__ */ C("label", { className: "inline-flex items-center gap-1 text-xs text-brand-gray", children: [/* @__PURE__ */ S(Vd, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ C("select", { className: yt, - value: ot ?? "", - disabled: Ie, + value: at ?? "", + disabled: Fe, onChange: (t) => { let n = t.target.value || void 0; Promise.resolve(r.setConfig({ swimlaneBy: n })).then(() => { - n === "custom" && (e.swimlanes?.length ?? 0) === 0 && !k && De(!0); + n === "custom" && (e.swimlanes?.length ?? 0) === 0 && !k && Ee(!0); }).catch(() => {}); }, children: [ /* @__PURE__ */ S("option", { value: "", - children: B._({ id: "KjXDqG" }) + children: V._({ id: "lt2UOc" }) }), [ "status", "priority", "assignee" - ].filter((e) => e !== Ze).map((e) => /* @__PURE__ */ S("option", { + ].filter((e) => e !== Xe).map((e) => /* @__PURE__ */ S("option", { value: e, - children: e === "status" ? B._({ id: "ucJg3u" }) : e === "priority" ? B._({ id: "jUbC3Z" }) : B._({ id: "lHxVTh" }) + children: e === "status" ? V._({ id: "wp-2ZK" }) : e === "priority" ? V._({ id: "p4rTvq" }) : V._({ id: "Ld9MtR" }) }, e)), /* @__PURE__ */ S("option", { value: "custom", - children: B._({ id: "ATIq3Z" }) + children: V._({ id: "wGM_xy" }) }) ] })] }), - $e === "board" && ot && !k && /* @__PURE__ */ S("button", { + Qe === "board" && at && at !== "status" && !k && /* @__PURE__ */ S("button", { type: "button", - disabled: Ie, + disabled: Fe, onClick: () => { - ot === "custom" ? De(!0) : ot === "status" ? ke(!0) : (Fe(e.swimlaneMigration?.source ?? ot), Ve(""), Ne(!0)); + at === "custom" ? Ee(!0) : (Pe(e.swimlaneMigration?.source ?? at), Be(""), Me(!0)); }, - title: ot === "custom" ? B._({ id: "uH1U8v" }) : ot === "status" ? B._({ id: "rvpMpc" }) : B._({ id: "jzy1b8" }), - "aria-label": ot === "custom" ? B._({ id: "uH1U8v" }) : ot === "status" ? B._({ id: "rvpMpc" }) : B._({ id: "jzy1b8" }), + title: at === "custom" ? V._({ id: "2aEwT_" }) : V._({ id: "u36sC2" }), + "aria-label": at === "custom" ? V._({ id: "2aEwT_" }) : V._({ id: "u36sC2" }), className: "inline-flex h-7 w-7 items-center justify-center rounded-md border border-stone-200 bg-white text-stone-500 transition hover:border-brand/40 hover:text-brand-dark focus:outline-none focus:ring-2 focus:ring-brand/20 active:translate-y-px disabled:cursor-not-allowed disabled:opacity-50", children: /* @__PURE__ */ S(Td, { className: "h-3.5 w-3.5" }) }), - $e !== "calendar" && /* @__PURE__ */ C("label", { + Qe !== "calendar" && /* @__PURE__ */ C("label", { className: "inline-flex items-center gap-1 text-xs text-brand-gray", children: [/* @__PURE__ */ S(Ud, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ C("select", { className: yt, - value: me, - onChange: (e) => he(e.target.value), + value: pe, + onChange: (e) => me(e.target.value), children: [ /* @__PURE__ */ S("option", { value: "manual", - children: B._({ id: "8lE269" }) + children: V._({ id: "8lE269" }) }), /* @__PURE__ */ S("option", { value: "due", - children: B._({ id: "fYcKtB" }) + children: V._({ id: "fYcKtB" }) }), /* @__PURE__ */ S("option", { value: "priority", - children: B._({ id: "WSP6v1" }) + children: V._({ id: "WSP6v1" }) }), /* @__PURE__ */ S("option", { value: "title", - children: B._({ id: "p9yTeb" }) + children: V._({ id: "p9yTeb" }) }) ] })] }), - /* @__PURE__ */ C(Du, { - as: "div", - className: "relative", - children: [/* @__PURE__ */ C(Su, { - className: `inline-flex h-7 items-center gap-1 rounded-md border px-2 text-xs ${ge ? "border-brand/40 bg-brand-soft/50 text-brand-dark" : "border-stone-200 text-stone-600 hover:border-brand/40"}`, - children: [/* @__PURE__ */ S(gf, { className: "h-3.5 w-3.5" }), ge ? ge.prop === "swimlaneIssue" ? B._({ id: "FQylcT" }) : `${ge.prop}: ${ge.value || B._({ id: "EbMPZJ" })}` : /* @__PURE__ */ S(L, { id: "o7J4JM" })] - }), /* @__PURE__ */ C(Cu, { - anchor: "bottom start", - className: `z-30 w-52 rounded-lg border border-black/[0.06] bg-white py-1 text-sm shadow-lg [--anchor-gap:4px] focus:outline-none${bt}`, - children: [ - ge && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { - type: "button", - className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-stone-700 data-[focus]:bg-stone-100", - onClick: () => _e(null), - children: [/* @__PURE__ */ S(Wf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "Q2mGA7" })] - }) }), /* @__PURE__ */ S("div", { className: "my-1 border-t border-black/[0.05]" })] }), - /* @__PURE__ */ S("div", { - className: "px-3 py-0.5 text-[11px] uppercase tracking-wide text-stone-400", - children: /* @__PURE__ */ S(L, { id: "1hKEom" }) - }), - ep.map((e) => /* @__PURE__ */ S($, { children: /* @__PURE__ */ S("button", { - type: "button", - className: "flex w-full items-center px-3 py-1 text-left text-stone-700 data-[focus]:bg-stone-100", - onClick: () => _e({ - prop: "priority", - value: e - }), - children: e - }) }, e)), - ft.length > 0 && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S("div", { - className: "px-3 py-0.5 text-[11px] uppercase tracking-wide text-stone-400", - children: /* @__PURE__ */ S(L, { id: "ojKCLU" }) - }), ft.map((e) => /* @__PURE__ */ S($, { children: /* @__PURE__ */ S("button", { - type: "button", - className: "flex w-full items-center px-3 py-1 text-left text-stone-700 data-[focus]:bg-stone-100", - onClick: () => _e({ - prop: "assignee", - value: e - }), - children: e - }) }, e))] }), - pt.length > 0 && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S("div", { - className: "px-3 py-0.5 text-[11px] uppercase tracking-wide text-stone-400", - children: /* @__PURE__ */ S(L, { id: "OYHzN1" }) - }), pt.map((e) => /* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { - type: "button", - className: "flex w-full items-center gap-1 px-3 py-1 text-left text-stone-700 data-[focus]:bg-stone-100", - onClick: () => _e({ - prop: "tag", - value: e - }), - children: [/* @__PURE__ */ S(If, { className: "h-3 w-3" }), e] - }) }, e))] }) - ] - })] + /* @__PURE__ */ S(nm, { + filters: he, + onChange: ge, + assignees: ft, + tags: pt, + currentUser: w, + visibleCount: ut.length, + totalCount: t.length, + portalClassName: M }), /* @__PURE__ */ C("div", { className: "relative ml-auto", - children: [/* @__PURE__ */ S(wf, { className: "pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-stone-400" }), /* @__PURE__ */ S("input", { + children: [/* @__PURE__ */ S(Ef, { className: "pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-stone-400" }), /* @__PURE__ */ S("input", { className: `${yt} w-44 pl-7`, - placeholder: B._({ id: "JTYvAw" }), - value: fe, - onChange: (e) => pe(e.target.value) + placeholder: V._({ id: "JTYvAw" }), + value: de, + onChange: (e) => fe(e.target.value) })] }) ] @@ -9894,61 +10202,61 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro children: i }) }), - $e === "table" ? /* @__PURE__ */ S(Vp, { - cards: Pp(lt, me), + Qe === "table" ? /* @__PURE__ */ S(rm, { + cards: Gp(ut, pe), statusName: mt, - today: rt, - doneKey: et, + today: nt, + doneKey: $e, selectedId: ht?.id, onSelect: Et - }) : $e === "calendar" ? /* @__PURE__ */ S(Up, { - cards: lt, - today: rt, - doneKey: et, + }) : Qe === "calendar" ? /* @__PURE__ */ S(am, { + cards: ut, + today: nt, + doneKey: $e, mode: e.calendarMode ?? "month", onModeChange: (e) => xt({ calendarMode: e }), selectedId: ht?.id, onSelect: Et - }) : st && ot ? /* @__PURE__ */ S(Kp, { - cards: lt, - columns: it, - lanes: ct, + }) : ot && at ? /* @__PURE__ */ S(cm, { + cards: ut, + columns: rt, + lanes: st, config: e, - groupKey: Ze, - swimlaneKey: ot, - sortBy: me, - today: rt, - doneKey: et, + groupKey: Xe, + swimlaneKey: at, + sortBy: pe, + today: nt, + doneKey: $e, selectedId: ht?.id, actions: r, - readOnly: k || Ie, - customLaneMutationPending: We, + readOnly: k || Fe, + customLaneMutationPending: Ue, portalClassName: M, onSelect: Et, - onOpenManager: () => De(!0), + onOpenManager: () => Ee(!0), onManageLane: ({ laneKey: e, action: t }) => { - je({ + Ae({ id: Date.now(), laneKey: e, action: t - }), De(!0); + }), Ee(!0); }, onMoveCustomLane: Ct, onSetCustomLaneColor: wt, onShowMissing: Tt }) : /* @__PURE__ */ C("div", { className: "flex min-h-0 flex-1 items-stretch gap-3 overflow-x-auto p-4", - children: [it.map((t, i) => { - let s = Pp(lt.filter((e) => Ep(e, Ze) === t.key), me), c = (e) => !!be && nt && ee?.col === t.key && ee.index === e, l = Qe && et === t.key, u = te === t.key, d = Qe && t.limit != null && s.length > t.limit, f = t.color ?? rp[i % rp.length]; - return ne.has(t.key) ? /* @__PURE__ */ C("button", { + children: [rt.map((t, i) => { + let s = Gp(ut.filter((e) => Mp(e, Xe) === t.key), pe), c = (e) => !!ye && tt && ee?.col === t.key && ee.index === e, l = Ze && $e === t.key, u = z === t.key, d = Ze && t.limit != null && s.length > t.limit, f = t.color ?? lp[i % lp.length]; + return te.has(t.key) ? /* @__PURE__ */ C("button", { type: "button", "data-col-key": t.key, - onClick: () => H(t.key), - title: B._({ id: "AC9Gkf" }), + onClick: () => Ft(t.key), + title: V._({ id: "AC9Gkf" }), className: `flex h-full w-10 shrink-0 flex-col items-center gap-2 rounded-xl border bg-stone-100/60 py-2 text-stone-500 hover:border-brand/40 ${u ? "border-brand/60" : "border-black/[0.05]"}`, children: [ - /* @__PURE__ */ S(tf, { className: "h-4 w-4" }), - (tt || t.color) && /* @__PURE__ */ S("span", { + /* @__PURE__ */ S(rf, { className: "h-4 w-4" }), + (et || t.color) && /* @__PURE__ */ S("span", { className: "h-2 w-2 rounded-full", style: { backgroundColor: f }, "aria-hidden": !0 @@ -9964,51 +10272,51 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro ] }, t.key) : /* @__PURE__ */ C("div", { "data-col-key": t.key, - className: `flex max-h-full w-72 shrink-0 flex-col rounded-xl border bg-stone-100/60 transition-opacity ${Se === t.key ? "opacity-50" : ""} ${u ? "border-brand/60" : ee?.col === t.key ? "border-brand/40" : "border-black/[0.05]"}`, + className: `flex max-h-full w-72 shrink-0 flex-col rounded-xl border bg-stone-100/60 transition-opacity ${xe === t.key ? "opacity-50" : ""} ${u ? "border-brand/60" : ee?.col === t.key ? "border-brand/40" : "border-black/[0.05]"}`, children: [/* @__PURE__ */ C("div", { className: "flex items-center justify-between gap-1 rounded-t-xl px-3 py-2", - style: tt ? { backgroundColor: `${f}1f` } : void 0, + style: et ? { backgroundColor: `${f}1f` } : void 0, children: [/* @__PURE__ */ C("div", { - onPointerDown: (e) => Pt(e, t), - onPointerMove: (e) => V(e, t), - onPointerUp: (e) => Ft(e, t), - className: `flex min-w-0 flex-1 select-none items-center gap-1.5 text-sm font-medium text-stone-700 ${Qe && r.reorderColumns ? "cursor-grab touch-none active:cursor-grabbing" : ""}`, + onPointerDown: (e) => H(e, t), + onPointerMove: (e) => Pt(e, t), + onPointerUp: (e) => U(e, t), + className: `flex min-w-0 flex-1 select-none items-center gap-1.5 text-sm font-medium text-stone-700 ${Ze && r.reorderColumns ? "cursor-grab touch-none active:cursor-grabbing" : ""}`, children: [ /* @__PURE__ */ S("button", { type: "button", - onClick: () => H(t.key), - title: B._({ id: "pwN6Ae" }), + onClick: () => Ft(t.key), + title: V._({ id: "pwN6Ae" }), className: "-ml-1 rotate-90 rounded p-0.5 text-stone-400 hover:bg-white hover:text-stone-600", - children: /* @__PURE__ */ S(tf, { className: "h-3.5 w-3.5" }) + children: /* @__PURE__ */ S(rf, { className: "h-3.5 w-3.5" }) }), - (tt || t.color) && /* @__PURE__ */ S("span", { + (et || t.color) && /* @__PURE__ */ S("span", { className: "h-2 w-2 rounded-full", style: { backgroundColor: f }, "aria-hidden": !0 }), /* @__PURE__ */ S("span", { className: "truncate", - children: t.name || B._({ id: "EbMPZJ" }) + children: t.name || V._({ id: "EbMPZJ" }) }), l && /* @__PURE__ */ S(Yd, { className: "h-3.5 w-3.5 shrink-0 text-emerald-500", - title: B._({ id: "_5CsXX" }) + title: V._({ id: "_5CsXX" }) }), /* @__PURE__ */ C("span", { className: `rounded-full px-1.5 text-xs ${d ? "bg-red-100 font-medium text-red-600" : "bg-white text-stone-400"}`, - title: t.limit == null ? void 0 : B._({ + title: t.limit == null ? void 0 : V._({ id: "d5z6xQ", values: { 0: t.limit } }), children: [s.length, t.limit == null ? "" : `/${t.limit}`] }) ] - }), Qe && !k && Dt && /* @__PURE__ */ C(Du, { + }), Ze && !k && Dt && /* @__PURE__ */ C(Du, { as: "div", className: "relative shrink-0", children: [/* @__PURE__ */ S(Su, { className: "rounded p-0.5 text-stone-400 hover:bg-white hover:text-stone-600", - children: /* @__PURE__ */ S(ff, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(mf, { className: "h-4 w-4" }) }), /* @__PURE__ */ C(Cu, { anchor: "bottom end", className: `z-30 w-48 rounded-lg border border-black/[0.06] bg-white py-1 text-sm shadow-lg [--anchor-gap:4px] focus:outline-none${bt}`, @@ -10017,7 +10325,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro type: "button", className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-stone-700 data-[focus]:bg-stone-100", onClick: () => void r.renameColumn?.(t.key), - children: [/* @__PURE__ */ S(Ef, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "2wxgft" })] + children: [/* @__PURE__ */ S(Af, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "2wxgft" })] }) }), r.toggleDoneColumn && /* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { type: "button", @@ -10029,7 +10337,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro type: "button", className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-stone-700 data-[focus]:bg-stone-100", onClick: () => void r.setColumnLimit?.(t.key), - children: [/* @__PURE__ */ S(gf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "Iw6WJa" })] + children: [/* @__PURE__ */ S(vf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "Iw6WJa" })] }) }), r.setColumnColor && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S("div", { className: "my-1 border-t border-black/[0.05]" }), /* @__PURE__ */ C("div", { className: "px-3 py-1", @@ -10038,7 +10346,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro children: /* @__PURE__ */ S(L, { id: "jZlrte" }) }), /* @__PURE__ */ C("div", { className: "mt-1 flex flex-wrap items-center gap-1.5", - children: [rp.map((e) => /* @__PURE__ */ S("button", { + children: [lp.map((e) => /* @__PURE__ */ S("button", { type: "button", title: e, onClick: () => void r.setColumnColor?.(t.key, e), @@ -10046,7 +10354,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro style: { backgroundColor: e } }, e)), /* @__PURE__ */ S("button", { type: "button", - title: B._({ id: "H_SQFv" }), + title: V._({ id: "H_SQFv" }), onClick: () => void r.setColumnColor?.(t.key, null), className: `flex h-4 w-4 items-center justify-center rounded-full bg-white ring-1 ring-black/10 ${t.color ? "" : "ring-2 ring-offset-1 ring-stone-500"}`, children: /* @__PURE__ */ S("span", { className: "h-2 w-2 rounded-full bg-stone-300" }) @@ -10055,10 +10363,10 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro })] }), r.deleteColumn && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S("div", { className: "my-1 border-t border-black/[0.05]" }), /* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { type: "button", - disabled: it.length <= 1, + disabled: rt.length <= 1, className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-red-600 disabled:opacity-40 data-[focus]:bg-red-50", onClick: () => void r.deleteColumn?.(t.key), - children: [/* @__PURE__ */ S(Rf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] + children: [/* @__PURE__ */ S(Hf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] }) })] }) ] })] @@ -10067,7 +10375,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro className: "min-h-0 flex-1 space-y-2 overflow-y-auto p-2", children: [ s.map((t, i) => { - let a = t.due && t.due < rt && t.columnKey !== et, o = ut.get(t.id) ?? 0, s = dt.get(t.id), l = t.priority && t.priority !== "none" || t.assignee || t.due || (t.taskTotal ?? 0) > 0 || t.tags.length > 0 || o > 0 || (s?.length ?? 0) > 0; + let a = t.due && t.due < nt && t.columnKey !== $e, o = ct.get(t.id) ?? 0, s = dt.get(t.id), l = t.priority && t.priority !== "none" || t.assignee || t.due || (t.taskTotal ?? 0) > 0 || t.tags.length > 0 || o > 0 || (s?.length ?? 0) > 0; return /* @__PURE__ */ C(n, { children: [c(i) && /* @__PURE__ */ S("div", { className: "mx-1 h-0.5 rounded bg-brand" }), /* @__PURE__ */ C("div", { role: "button", tabIndex: 0, @@ -10079,7 +10387,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro onKeyDown: (e) => { e.key === "Enter" && Et(t); }, - className: `group relative block w-full cursor-pointer touch-none select-none rounded-lg bg-white p-2.5 text-left shadow-sm transition hover:ring-brand/30 ${be === t.id ? "opacity-40" : ""} ${F.has(t.id) ? "ring-2 ring-brand/70" : ht?.id === t.id ? "ring-1 ring-brand/60" : "ring-1 ring-black/[0.04]"}`, + className: `group relative block w-full cursor-pointer touch-none select-none rounded-lg bg-white p-2.5 text-left shadow-sm transition hover:ring-brand/30 ${ye === t.id ? "opacity-40" : ""} ${F.has(t.id) ? "ring-2 ring-brand/70" : ht?.id === t.id ? "ring-1 ring-brand/60" : "ring-1 ring-black/[0.04]"}`, children: [ !k && /* @__PURE__ */ S("div", { className: "absolute right-1 top-1 opacity-0 transition-opacity focus-within:opacity-100 group-hover:opacity-100", @@ -10090,7 +10398,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro as: "div", children: [/* @__PURE__ */ S(Su, { className: "rounded p-0.5 text-stone-400 hover:bg-stone-100 hover:text-stone-600", - children: /* @__PURE__ */ S(ff, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(mf, { className: "h-4 w-4" }) }), /* @__PURE__ */ C(Cu, { anchor: "bottom end", className: `z-30 w-44 rounded-lg border border-black/[0.06] bg-white py-1 text-sm shadow-lg [--anchor-gap:4px] focus:outline-none${bt}`, @@ -10105,13 +10413,13 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro type: "button", className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-stone-700 data-[focus]:bg-stone-100", onClick: () => void r.copyCardLink?.(t), - children: [/* @__PURE__ */ S(bf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "y1eoq1" })] + children: [/* @__PURE__ */ S(Sf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "y1eoq1" })] }) }), r.duplicateCard && /* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { type: "button", className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-stone-700 data-[focus]:bg-stone-100", onClick: () => void r.duplicateCard?.(t), - children: [/* @__PURE__ */ S(uf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "euc6Ns" })] + children: [/* @__PURE__ */ S(ff, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "euc6Ns" })] }) }), r.saveAsTemplate && /* @__PURE__ */ S($, { children: /* @__PURE__ */ C("button", { type: "button", @@ -10124,7 +10432,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro type: "button", className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-red-600 data-[focus]:bg-red-50", onClick: () => void r.deleteCard(t), - children: [/* @__PURE__ */ S(Rf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] + children: [/* @__PURE__ */ S(Hf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] }) }) ] })] @@ -10150,14 +10458,14 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro children: [ o > 0 && /* @__PURE__ */ C("span", { className: "inline-flex items-center gap-0.5 rounded bg-red-50 px-1.5 py-0.5 text-[11px] font-medium text-red-600", - title: B._({ + title: V._({ id: "x52RAh", values: { blockedCount: o } }), - children: [/* @__PURE__ */ S(Sf, { className: "h-3 w-3" }), o] + children: [/* @__PURE__ */ S(wf, { className: "h-3 w-3" }), o] }), t.priority && t.priority !== "none" && /* @__PURE__ */ S("span", { - className: `rounded px-1.5 py-0.5 text-[11px] font-medium ${np[t.priority] ?? "bg-stone-100 text-stone-500"}`, + className: `rounded px-1.5 py-0.5 text-[11px] font-medium ${cp[t.priority] ?? "bg-stone-100 text-stone-500"}`, children: t.priority }), (t.taskTotal ?? 0) > 0 && /* @__PURE__ */ C("span", { @@ -10170,10 +10478,10 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro ] }), s && s.length > 0 && (() => { - let t = gp(s, e.doneColumn), n = 2 * Math.PI * 6; + let t = Sp(s, e.doneColumn), n = 2 * Math.PI * 6; return /* @__PURE__ */ C("span", { className: `inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[11px] font-medium ${t.done === t.total ? "bg-emerald-50 text-emerald-600" : "bg-stone-100 text-stone-500"}`, - title: B._({ + title: V._({ id: "bwOqWD", values: { 0: t.done, @@ -10212,11 +10520,11 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro t.tags.map((e) => /* @__PURE__ */ C("span", { className: "inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[11px] text-brand-dark", style: { backgroundColor: e.color ? `${e.color}22` : "rgba(0,136,132,0.10)" }, - children: [/* @__PURE__ */ S(If, { className: "h-3 w-3" }), e.label] + children: [/* @__PURE__ */ S(Bf, { className: "h-3 w-3" }), e.label] }, e.label)), t.assignee && /* @__PURE__ */ C("span", { className: "inline-flex items-center gap-0.5 text-[11px] text-brand-gray", - children: [/* @__PURE__ */ S(Bf, { className: "h-3 w-3" }), t.assignee] + children: [/* @__PURE__ */ S(Kf, { className: "h-3 w-3" }), t.assignee] }), t.due && /* @__PURE__ */ C("span", { className: `inline-flex items-center gap-0.5 text-[11px] ${a ? "font-medium text-red-600" : "text-brand-gray"}`, @@ -10227,31 +10535,31 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro ] })] }, t.id); }), - s.length === 0 ? be && ee?.col === t.key && /* @__PURE__ */ S("div", { className: "mx-1 h-14 rounded-lg border-2 border-dashed border-brand/50 bg-brand-soft/30" }) : c(s.length) && /* @__PURE__ */ S("div", { className: "mx-1 h-0.5 rounded bg-brand" }), - k ? null : ie === t.key ? /* @__PURE__ */ S("textarea", { + s.length === 0 ? ye && ee?.col === t.key && /* @__PURE__ */ S("div", { className: "mx-1 h-14 rounded-lg border-2 border-dashed border-brand/50 bg-brand-soft/30" }) : c(s.length) && /* @__PURE__ */ S("div", { className: "mx-1 h-0.5 rounded bg-brand" }), + k ? null : re === t.key ? /* @__PURE__ */ S("textarea", { autoFocus: !0, rows: 2, className: "w-full resize-none rounded-lg bg-white p-2 text-sm text-stone-800 shadow-sm ring-1 ring-brand/40 focus:outline-none focus:ring-2 focus:ring-brand/40", - placeholder: B._({ id: "u2IprG" }), - value: oe, - onChange: (e) => se(e.target.value), + placeholder: V._({ id: "u2IprG" }), + value: ae, + onChange: (e) => oe(e.target.value), onKeyDown: (e) => { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); - let n = oe; - se(""), ae(null), It(t.key, n); + let n = ae; + oe(""), ie(null), It(t.key, n); } - e.key === "Escape" && (se(""), ae(null)); + e.key === "Escape" && (oe(""), ie(null)); }, onBlur: () => { - oe.trim() && It(t.key, oe), se(""), ae(null); + ae.trim() && It(t.key, ae), oe(""), ie(null); } }) : a && a.length > 0 && o ? /* @__PURE__ */ C(Du, { as: "div", className: "relative", children: [/* @__PURE__ */ C(Su, { className: "flex w-full items-center gap-1.5 rounded-lg px-2 py-1.5 text-left text-sm text-stone-400 hover:bg-white hover:text-brand-dark", - children: [/* @__PURE__ */ S(Of, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "pnrmSP" })] + children: [/* @__PURE__ */ S(Mf, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "pnrmSP" })] }), /* @__PURE__ */ C(Cu, { anchor: "bottom start", className: `z-30 w-52 rounded-lg border border-black/[0.06] bg-white py-1 text-sm shadow-lg [--anchor-gap:4px] focus:outline-none${bt}`, @@ -10260,9 +10568,9 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro type: "button", className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-stone-700 data-[focus]:bg-stone-100", onClick: () => { - se(""), ae(t.key); + oe(""), ie(t.key); }, - children: [/* @__PURE__ */ S(Ef, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "UQOvxZ" })] + children: [/* @__PURE__ */ S(Af, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "UQOvxZ" })] }) }), /* @__PURE__ */ S("div", { className: "my-1 border-t border-black/[0.05]" }), /* @__PURE__ */ S("div", { @@ -10284,37 +10592,37 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro type: "button", className: "flex w-full items-center gap-1.5 rounded-lg px-2 py-1.5 text-left text-sm text-stone-400 hover:bg-white hover:text-brand-dark", onClick: () => { - se(""), ae(t.key); + oe(""), ie(t.key); }, - children: [/* @__PURE__ */ S(Of, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "pnrmSP" })] + children: [/* @__PURE__ */ S(Mf, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "pnrmSP" })] }) ] })] }, t.key); - }), Qe && !k && r.addColumn && (ce ? /* @__PURE__ */ S("input", { + }), Ze && !k && r.addColumn && (se ? /* @__PURE__ */ S("input", { autoFocus: !0, className: "w-44 shrink-0 self-start rounded-xl border border-brand/40 px-3 py-2 text-sm text-stone-800 focus:outline-none focus:ring-2 focus:ring-brand/40", - placeholder: B._({ id: "iYVqZq" }), - value: ue, - onChange: (e) => de(e.target.value), + placeholder: V._({ id: "P5cvAA" }), + value: le, + onChange: (e) => ue(e.target.value), onKeyDown: (e) => { if (e.key === "Enter") { - let e = ue.trim(); - de(""), le(!1), e && r.addColumn?.(e); + let e = le.trim(); + ue(""), ce(!1), e && r.addColumn?.(e); } - e.key === "Escape" && (de(""), le(!1)); + e.key === "Escape" && (ue(""), ce(!1)); }, onBlur: () => { - let e = ue.trim(); - e && r.addColumn?.(e), de(""), le(!1); + let e = le.trim(); + e && r.addColumn?.(e), ue(""), ce(!1); } }) : /* @__PURE__ */ C("button", { type: "button", className: "flex w-44 shrink-0 self-start items-center gap-1.5 rounded-xl border border-dashed border-stone-300 px-3 py-2 text-sm text-stone-400 hover:border-brand/40 hover:text-brand-dark", onClick: () => { - de(""), le(!0); + ue(""), ce(!0); }, - children: [/* @__PURE__ */ S(Of, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "AgvHni" })] + children: [/* @__PURE__ */ S(Mf, { className: "h-4 w-4" }), /* @__PURE__ */ S(L, { id: "1nUGn5" })] }))] }) ] @@ -10332,14 +10640,14 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro /* @__PURE__ */ C("select", { className: yt, value: "", - "aria-label": B._({ id: "8enUYo" }), + "aria-label": V._({ id: "8enUYo" }), onChange: (e) => { e.target.value && Nt({ columnKey: e.target.value }), e.target.value = ""; }, children: [/* @__PURE__ */ S("option", { value: "", disabled: !0, - children: B._({ id: "BiWlsk" }) + children: V._({ id: "BiWlsk" }) }), e.columns.map((e) => /* @__PURE__ */ S("option", { value: e.key, children: e.name @@ -10348,15 +10656,15 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro /* @__PURE__ */ C("select", { className: yt, value: "", - "aria-label": B._({ id: "hNmOZ7" }), + "aria-label": V._({ id: "hNmOZ7" }), onChange: (e) => { e.target.value && Nt({ priority: e.target.value }), e.target.value = ""; }, children: [/* @__PURE__ */ S("option", { value: "", disabled: !0, - children: B._({ id: "B5TUF-" }) - }), ep.map((e) => /* @__PURE__ */ S("option", { + children: V._({ id: "B5TUF-" }) + }), op.map((e) => /* @__PURE__ */ S("option", { value: e, children: e }, e))] @@ -10368,30 +10676,30 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro let e = t.filter((e) => F.has(e.id)); I(/* @__PURE__ */ new Set()), r.deleteCards?.(e); }, - children: [/* @__PURE__ */ S(Rf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] + children: [/* @__PURE__ */ S(Hf, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ S(L, { id: "cnGeoo" })] }), /* @__PURE__ */ S("button", { type: "button", className: "rounded p-1 text-stone-400 hover:bg-stone-100", - title: B._({ id: "FBIuPX" }), - "aria-label": B._({ id: "FBIuPX" }), + title: V._({ id: "FBIuPX" }), + "aria-label": V._({ id: "FBIuPX" }), onClick: () => I(/* @__PURE__ */ new Set()), - children: /* @__PURE__ */ S(Wf, { className: "h-4 w-4" }) + children: /* @__PURE__ */ S(Xf, { className: "h-4 w-4" }) }) ] }), ht && j && /* @__PURE__ */ C("div", { className: "absolute right-0 top-0 z-30 h-full shadow-[-10px_0_30px_rgba(0,0,0,0.07)]", - style: { width: ve }, + style: { width: _e }, children: [/* @__PURE__ */ S("div", { onMouseDown: (e) => { e.preventDefault(); - let t = e.clientX, n = ve, r = (e) => ye(Math.min(640, Math.max(300, n + (t - e.clientX)))), i = () => { + let t = e.clientX, n = _e, r = (e) => ve(Math.min(640, Math.max(300, n + (t - e.clientX)))), i = () => { window.removeEventListener("mousemove", r), window.removeEventListener("mouseup", i); }; window.addEventListener("mousemove", r), window.addEventListener("mouseup", i); }, - title: B._({ id: "AVreQ5" }), + title: V._({ id: "AVreQ5" }), className: "absolute left-0 top-0 z-10 h-full w-1.5 -translate-x-1/2 cursor-col-resize transition-colors hover:bg-brand/40" }), /* @__PURE__ */ S(j, { card: ht, @@ -10402,7 +10710,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro swimlaneOptions: e.swimlaneBy === "custom" || (e.swimlanes?.length ?? 0) > 0 ? [ { value: "", - label: B._({ id: "EbMPZJ" }) + label: V._({ id: "EbMPZJ" }) }, ...(e.swimlanes ?? []).map((e) => ({ value: e.key, @@ -10411,16 +10719,16 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro })), ...ht.swimlaneKey && !(e.swimlanes ?? []).some((e) => e.key === ht.swimlaneKey) ? [{ value: ht.swimlaneKey, - label: B._({ id: "7dZyQU" }), + label: V._({ id: "_laW0t" }), warning: !0 }] : [] ] : void 0, - swimlaneDisabled: Ie, + swimlaneDisabled: Fe, assigneeOptions: s, tagOptions: c, fields: e.fields, onAddField: (t) => { - let n = /* @__PURE__ */ new Set([...ip, ...(e.fields ?? []).map((e) => e.key)]), r = vp(t); + let n = /* @__PURE__ */ new Set([...up, ...(e.fields ?? []).map((e) => e.key)]), r = wp(t); if (n.has(r)) { let e = 2; for (; n.has(`${r}-${e}`);) e += 1; @@ -10432,7 +10740,7 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro }] }); }, dependencyCards: t.filter((e) => e.id !== ht.id).map((e) => ({ - slug: pp(e), + slug: yp(e), title: e.title })), childCards: (dt.get(ht.id) ?? []).map((e) => ({ @@ -10440,12 +10748,12 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro title: e.title, icon: e.icon, statusName: mt(e.columnKey), - done: e.columnKey === et + done: e.columnKey === $e })), onOpenCard: (e) => P(e), onAddChild: k ? void 0 : async (t) => { - let n = Qe ? e.columns[0]?.key ?? ht.columnKey : ht.columnKey, i = await r.createCard(n, t); - typeof i == "string" && await r.updateCard(i, { parent: pp(ht) }); + let n = Ze ? e.columns[0]?.key ?? ht.columnKey : ht.columnKey, i = await r.createCard(n, t); + typeof i == "string" && await r.updateCard(i, { parent: yp(ht) }); }, loadNotes: l, onUploadAttachment: u, @@ -10463,47 +10771,47 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro onOpenFull: r.openCardFull ? () => r.openCardFull?.(ht) : void 0 })] }), - /* @__PURE__ */ S(Zp, { - open: Ee, + /* @__PURE__ */ S(pm, { + open: Te, lanes: e.swimlanes ?? [], cards: t, - focusRequest: Ae, + focusRequest: ke, portalClassName: M, onClose: () => { - De(!1), je(void 0); + Ee(!1), Ae(void 0); }, onSaveLanes: St, onUpdateCards: _t, onShowAffected: Tt }), - /* @__PURE__ */ S(qp, { - open: Oe, + /* @__PURE__ */ S(lm, { + open: De, config: e, actions: r, portalClassName: M, - onClose: () => ke(!1) + onClose: () => Oe(!1) }), - /* @__PURE__ */ S(Qp, { - source: Pe, + /* @__PURE__ */ S(mm, { + source: Ne, rows: gt, - open: Me, - busy: Ie, - resume: e.swimlaneMigration?.source === Pe, - progress: Re, - error: Be, + open: je, + busy: Fe, + resume: e.swimlaneMigration?.source === Ne, + progress: Le, + error: ze, portalClassName: M, onClose: () => { - Ie || Ne(!1); + Fe || Me(!1); }, onConfirm: vt }), - be && we && (() => { - let e = t.find((e) => e.id === be); + ye && Ce && (() => { + let e = t.find((e) => e.id === ye); return /* @__PURE__ */ C("div", { className: "pointer-events-none fixed z-[60] max-w-[260px] -translate-x-1/2 -translate-y-1/2 truncate rounded-lg bg-white px-3 py-2 text-sm text-stone-800 shadow-xl ring-1 ring-brand/40", style: { - left: we.x, - top: we.y + left: Ce.x, + top: Ce.y }, children: [e?.icon && /* @__PURE__ */ S("span", { className: "mr-1", @@ -10516,17 +10824,17 @@ function $p({ config: e, cards: t, actions: r, error: i, templates: a, createFro } //#endregion //#region src/client.ts -var em = class extends Error { +var gm = class extends Error { status; code; constructor(e, t) { super(`jtype API error${e ? ` ${e}` : ""}: ${t}`), this.name = "JTypeApiError", this.status = e, this.code = t; } }; -function tm(e) { +function _m(e) { let t = (e.baseUrl ?? "").replace(/\/+$/, ""), n = e.token, r = e.fetchImpl ?? ((...e) => fetch(...e)); - if (!t) throw new em(0, "base_url_required"); - if (!n) throw new em(0, "token_required"); + if (!t) throw new gm(0, "base_url_required"); + if (!n) throw new gm(0, "token_required"); async function i(e, i = {}) { let a; try { @@ -10539,11 +10847,11 @@ function tm(e) { } }); } catch { - throw new em(0, "network_error"); + throw new gm(0, "network_error"); } if (!a.ok) { let e = await a.json().catch(() => null); - throw new em(a.status, e?.error || `http_${a.status}`); + throw new gm(a.status, e?.error || `http_${a.status}`); } if (a.status !== 204) return await a.json(); } @@ -10613,26 +10921,26 @@ function tm(e) { } //#endregion //#region src/resolveBoard.ts -var nm = class extends Error { +var vm = class extends Error { code; candidates; constructor(e, t, n = []) { super(t ? `${e}: ${t}` : e), this.name = "JTypeBoardError", this.code = e, this.candidates = n; } }; -function rm(e, t) { +function ym(e, t) { let n = t.trim().replace(/^\.?\//, ""); - if (!n) throw new nm("board_not_found", "empty boardRef"); + if (!n) throw new vm("board_not_found", "empty boardRef"); let r = n.toLowerCase(), i = r.endsWith(".board") ? r : `${r}.board`, a = e.filter((e) => e.relativePath.toLowerCase().endsWith(".board")), o = a.find((e) => { let t = e.relativePath.toLowerCase(); return t === r || t === i; }); - if (o) return im(o); + if (o) return bm(o); let s = a.filter((e) => e.relativePath.toLowerCase().endsWith(`/${i}`)); - if (s.length === 1) return im(s[0]); - throw s.length > 1 ? new nm("board_ref_ambiguous", `"${t}" matches ${s.length} boards`, s.map((e) => e.relativePath)) : new nm("board_not_found", `no .board document matches "${t}"`); + if (s.length === 1) return bm(s[0]); + throw s.length > 1 ? new vm("board_ref_ambiguous", `"${t}" matches ${s.length} boards`, s.map((e) => e.relativePath)) : new vm("board_not_found", `no .board document matches "${t}"`); } -function im(e) { +function bm(e) { return { boardDocId: e.id, boardRelativePath: e.relativePath, @@ -10641,7 +10949,7 @@ function im(e) { } //#endregion //#region src/boardData.ts -function am(e, t) { +function xm(e, t) { return { title: e.title || t, columns: e.columns, @@ -10652,16 +10960,16 @@ function am(e, t) { fields: e.fields, labels: e.labels, ticketKey: e.ticketKey, - swimlaneBy: xp(e.swimlaneBy), + swimlaneBy: Dp(e.swimlaneBy), swimlanes: e.swimlanes, swimlaneMigration: e.swimlaneMigration, - groupBy: bp(e.groupBy) + groupBy: Ep(e.groupBy) }; } -function om(e, t) { - let n = Gf(e.content); +function Sm(e, t) { + let n = Zf(e.content); if (n.data.board !== t.id) return null; - let r = ap(n.body); + let r = dp(n.body); return { id: e.relativePath, columnKey: n.data.status || "", @@ -10672,35 +10980,35 @@ function om(e, t) { assignee: n.data.assignee || null, swimlaneKey: n.data.swimlane || null, due: n.data.due || null, - tags: up(n.data.tags ? sp(n.data.tags) : [], t.labels), + tags: gp(n.data.tags ? pp(n.data.tags) : [], t.labels), notes: n.body, taskDone: r.done, taskTotal: r.total, - excerpt: op(n.body), - attachments: n.data.attachments ? qf(n.data.attachments) : [], - custom: $f(n.data, t.fields), - blockedBy: n.data.blocked_by ? dp(n.data.blocked_by) : [], - blocks: n.data.blocks ? dp(n.data.blocks) : [], - relates: n.data.relates ? dp(n.data.relates) : [], - parent: n.data.parent ? dp(n.data.parent)[0] ?? null : null + excerpt: fp(n.body), + attachments: n.data.attachments ? $f(n.data.attachments) : [], + custom: ap(n.data, t.fields), + blockedBy: n.data.blocked_by ? _p(n.data.blocked_by) : [], + blocks: n.data.blocks ? _p(n.data.blocks) : [], + relates: n.data.relates ? _p(n.data.relates) : [], + parent: n.data.parent ? _p(n.data.parent)[0] ?? null : null }; } -function sm(e, t) { - return Xf(e, t); +function Cm(e, t) { + return np(e, t); } -var cm = [ +var wm = [ "viewType", "groupBy", "swimlaneBy", "calendarMode" ]; -function lm(e, t) { +function Tm(e, t) { let n = { ...e }; - for (let e of cm) e in t && (n[e] = t[e]); + for (let e of wm) e in t && (n[e] = t[e]); return n; } -async function um(e, t, n, r) { - let i = await e.listDocuments(t), a = rm(i, n), o = async (n, i) => { +async function Em(e, t, n, r) { + let i = await e.listDocuments(t), a = ym(i, n), o = async (n, i) => { let a = r.get(n); if (a && a.contentHash === i) return a.doc; let o = await e.getDocument(t, n); @@ -10712,14 +11020,14 @@ async function um(e, t, n, r) { try { if (l = JSON.parse(c.content), !l || typeof l != "object" || !Array.isArray(l.columns)) throw Error("missing columns"); } catch (e) { - throw new nm("board_config_invalid", `${a.boardRelativePath}: ${String(e)}`); + throw new vm("board_config_invalid", `${a.boardRelativePath}: ${String(e)}`); } let u = i.filter((e) => e.relativePath.startsWith(`${a.boardDir}/`) && e.relativePath.toLowerCase().endsWith(".md")), d = await Promise.all(u.map(async (e) => ({ item: e, doc: await o(e.id, e.contentHash) }))), f = /* @__PURE__ */ new Map(), p = []; for (let { item: e, doc: t } of d) { - let n = om(t, l); + let n = Sm(t, l); n && (f.set(t.relativePath, { id: e.id, relativePath: t.relativePath, @@ -10744,7 +11052,7 @@ async function um(e, t, n, r) { } //#endregion //#region src/CardDetail.tsx -function dm({ card: e, config: t, strings: n, onClose: r }) { +function Dm({ card: e, config: t, strings: n, onClose: r }) { f(() => { let e = (e) => { e.key === "Escape" && r(); @@ -10812,7 +11120,7 @@ function dm({ card: e, config: t, strings: n, onClose: r }) { }), /* @__PURE__ */ S("dd", { className: "text-sm text-stone-800", children: e === n.priority ? /* @__PURE__ */ S("span", { - className: `rounded px-1.5 py-0.5 text-[11px] font-medium ${np[t] ?? "bg-stone-100 text-stone-500"}`, + className: `rounded px-1.5 py-0.5 text-[11px] font-medium ${cp[t] ?? "bg-stone-100 text-stone-500"}`, children: t }) : t })] @@ -10840,18 +11148,18 @@ function dm({ card: e, config: t, strings: n, onClose: r }) { className: "mt-1 space-y-1", children: e.attachments.map((e) => /* @__PURE__ */ S("li", { className: "rounded border border-stone-200 px-2 py-1 text-xs", - children: Qf(e) ? /* @__PURE__ */ S("a", { + children: ip(e) ? /* @__PURE__ */ S("a", { href: e, target: "_blank", rel: "noreferrer", className: "block truncate text-brand-dark hover:underline", title: e, - children: Zf(e) + children: rp(e) }) : /* @__PURE__ */ C("span", { className: "block truncate text-stone-500", title: e, children: [ - Zf(e), + rp(e), " ", /* @__PURE__ */ C("span", { className: "text-red-500", @@ -10882,18 +11190,18 @@ function dm({ card: e, config: t, strings: n, onClose: r }) { } //#endregion //#region src/i18n.ts -var fm = { - en: JSON.parse("{\"--lIxB\":[\"Blocked by\"],\"-b7T3G\":[\"Updated\"],\"1718Q-\":[\"Issues\"],\"1DBGsz\":[\"Notes\"],\"1YABGm\":[\"Link (Ctrl+K)\"],\"1hKEom\":[\"Priority\"],\"1lWHP7\":[\"unsafe\"],\"1nUGn5\":[\"Add status\"],\"1xwZj_\":[\"Previous month\"],\"23yqV0\":[\"Show affected cards\"],\"2BPVq8\":[\"Reorder \",[\"0\"]],\"2wxgft\":[\"Rename\"],\"3CtQL6\":[\"Choose another swimlane, then update the cards first.\"],\"3Ib6FN\":[\"Move down\"],\"3qkggm\":[\"Fullscreen\"],\"4NY8B5\":[\"Swimlanes to create\"],\"4gdyen\":[\"Local (yours)\"],\"4hJhzz\":[\"Table\"],\"54sFiP\":[\"flowchart TD\\n A[Start] --> B[End]\"],\"5Q_DQ6\":[\"Inline Code\"],\"66g_UW\":[\"Collapse resolved thread\"],\"6V3Ea3\":[\"Copied\"],\"6YtxFj\":[\"Name\"],\"6buwPb\":[\"Board settings\"],\"79Yvzu\":[\"Swimlane name\"],\"7VpPHA\":[\"Confirm\"],\"7dZyQU\":[\"Previous swimlane missing\"],\"7s3WlU\":[\"Blocks\"],\"8PifYj\":[\"Mermaid diagram\"],\"8Tg_JR\":[\"Custom\"],\"8enUYo\":[\"Set status\"],\"8hSn0h\":[\"Result (editable)\"],\"8lE269\":[\"Sort: Manual\"],\"9OEgyT\":[\"Add reaction\"],\"9OH3W0\":[\"Resolve thread\"],\"9gxam6\":[\"Could not render this Draw.io diagram.\"],\"AC9Gkf\":[\"Expand column\"],\"ANe5kn\":[\"Updating cards…\"],\"AS5WO9\":[\"Could not render this PDF.\"],\"ATIq3Z\":[\"Swimlane: Custom\"],\"AVreQ5\":[\"Drag to resize\"],\"AgvHni\":[\"Add column\"],\"AjVXBS\":[\"Calendar\"],\"AoHpbt\":[\"Show cards with missing swimlanes\"],\"AxAubu\":[\"Group: Assignee\"],\"B5TUF-\":[\"Priority…\"],\"BfMZ7w\":[\"Accept cloud\"],\"BiWlsk\":[\"Status…\"],\"BnmEvM\":[\"Save as template\"],\"C6-ZRl\":[\"Someone\"],\"CXTDT_\":[\"Resume swimlane conversion?\"],\"CxcMyt\":[[\"0\"],\" moved to position \",[\"1\"],\" of \",[\"2\"],\".\"],\"DGEEOQ\":[\"Swimlane actions\"],\"DPfwMq\":[\"Done\"],\"Db4W3_\":[\"Statuses\"],\"EWPtMO\":[\"Code\"],\"EbMPZJ\":[\"Unassigned\"],\"FBIuPX\":[\"Clear selection\"],\"FQylcT\":[\"Swimlane: Missing\"],\"G4qrLy\":[\"Unset done column\"],\"GKu3m4\":[\"No labels\"],\"Gpfctt\":[\"Due\"],\"HTKRVa\":[\"Do not close this dialog.\"],\"H_SQFv\":[\"No color\"],\"HajiZl\":[\"Month\"],\"HrmW6B\":[\"Add a comment… (Markdown supported)\"],\"I6SWEy\":[\"Split\"],\"ICip_B\":[\"Cloud (remote)\"],\"IdMoS6\":[\"Create your first swimlane\"],\"Ik60OC\":[\"Open in editor\"],\"ImOQa9\":[\"Reply\"],\"Iw6WJa\":[\"Set WIP limit\"],\"JTYvAw\":[\"Search cards\"],\"KAlhe_\":[\"Conversion stopped because card updates did not persist. Refresh and try again.\"],\"KCszT6\":[\"Add swimlane\"],\"KFiYGY\":[\"Change color\"],\"KGi3u9\":[\"Drag to reorder\"],\"K_F6pa\":[\"Saving…\"],\"Kd6eg7\":[\"Moving cards…\"],\"KeYrQ5\":[\"Remove your reaction\"],\"KjXDqG\":[\"Swimlane: None\"],\"KmydK6\":[\"Bold\"],\"KpnwJK\":[\"Delete \\\"\",[\"0\"],\"\\\"?\"],\"KvW1VO\":[\"Draw.io diagram\"],\"LQn6-8\":[\"Accept local\"],\"MHrjPM\":[\"Title\"],\"MYx830\":[\"This empty swimlane will be removed from the board.\"],\"Mm72la\":[\"No comments yet\"],\"MmYpxT\":[\"Reply…\"],\"NBdIgR\":[\"Comment\"],\"NYTPDY\":[\"Move cards and delete\"],\"O6H89R\":[\"Resolved\"],\"ONWvwQ\":[\"Upload\"],\"OR4WQZ\":[\"+ Add sub-card\"],\"OYHzN1\":[\"Tags\"],\"OepdfE\":[\"Group: Status\"],\"P5cvAA\":[\"Status name\"],\"PUeYA1\":[\"Create editable swimlanes\"],\"Pvpx7b\":[\"Paste a URL or path\"],\"Q2mGA7\":[\"Clear filter\"],\"QD8opX\":[\"Board\"],\"QlsPZy\":[\"Write Mermaid syntax to see the diagram.\"],\"QmZYQP\":[\"Unresolve thread\"],\"QyioBP\":[\"Move up\"],\"RbsNko\":[[\"cardCount\"],\" card(s) currently use this swimlane.\"],\"RfEZH1\":[\"JType will create independent swimlanes from the current assignee rows. Card assignee values will stay unchanged.\"],\"RgO4DX\":[\"Duplicate lane ID \\\"\",[\"0\"],\"\\\". The first definition is used.\"],\"RlLl3G\":[\"Actions for \",[\"0\"]],\"S5Qbb1\":[\"comma, separated\"],\"SavliD\":[[\"danglingCount\"],\" card(s) refer to deleted swimlanes.\"],\"T_nAzC\":[\"JType will reuse the existing lane IDs and continue unfinished card updates.\"],\"TdfEV7\":[\"Archived\"],\"Th4mIx\":[\"Lane details for \",[\"0\"]],\"U0hizX\":[\"Swimlane color\"],\"UDb2YD\":[\"React\"],\"UQOvxZ\":[\"Blank card\"],\"URmyfc\":[\"Details\"],\"Ubl2by\":[\"Move right\"],\"VNa_N2\":[\"This file type can not be previewed yet.\"],\"VbyRUy\":[\"Comments\"],\"WEYdDv\":[\"Recommended\"],\"WSP6v1\":[\"Sort: Priority\"],\"X03-eC\":[\"Please enter a value.\"],\"XJOV1Y\":[\"Activity\"],\"XklovM\":[\"Working…\"],\"Y8bR2a\":[\"Delete only the swimlane. Card references remain recoverable.\"],\"YHjvGb\":[\"Status actions\"],\"Ya7bZl\":[\"Diagram error\"],\"Zot9XS\":[\"No cards\"],\"_5CsXX\":[\"Done column\"],\"_EsjyQ\":[\"Use this\"],\"_TJomP\":[\"Move cards before deleting\"],\"_YbTQZ\":[\"JType will create independent swimlanes from the current priority rows. Card priority values will stay unchanged.\"],\"a6uhHr\":[\"Bold (Ctrl+B)\"],\"aDvLhk\":[\"Add a comment…\"],\"abUZlY\":[\"Add details...\"],\"agOeRN\":[\"Could not render this API specification.\"],\"b4hVKD\":[\"Color columns\"],\"bwOqWD\":[[\"0\"],\" of \",[\"1\"],\" sub-cards done\"],\"by_svU\":[\"Keep cards in Unassigned\"],\"bzjBcL\":[\"Sub-cards\"],\"c61_Lv\":[\"Lane ID\"],\"cJ44lA\":[\"Unscheduled\"],\"cUt8yN\":[\"Changes save automatically.\"],\"cfaWH-\":[\"Add labels\"],\"cnGeoo\":[\"Delete\"],\"d-F6q9\":[\"Created\"],\"d5z6xQ\":[\"WIP limit \",[\"0\"]],\"dEgA5A\":[\"Cancel\"],\"ecUA8p\":[\"Today\"],\"euc6Ns\":[\"Duplicate\"],\"fEqHZq\":[\"Open sub-card\"],\"fFAIng\":[[\"0\",\"plural\",{\"one\":[\"#\",\" card\"],\"other\":[\"#\",\" cards\"]}]],\"fVlS4-\":[\"Swimlane\"],\"fYcKtB\":[\"Sort: Due\"],\"fvImQM\":[[\"0\"],\" selected\"],\"g8JmSC\":[\"Next month\"],\"gANddk\":[\"Uploading…\"],\"gLDJuJ\":[\"Untitled card\"],\"gzZWjO\":[\"No assigned values to convert.\"],\"hNmOZ7\":[\"Set priority\"],\"he3ygx\":[\"Copy\"],\"hh4sEG\":[\"Relates\"],\"hnK1gR\":[\"PDF document\"],\"hyVzII\":[\"Swimlanes\"],\"i4_LY_\":[\"Write\"],\"iSLA_r\":[\"Move left\"],\"iTylMl\":[\"Templates\"],\"iYVqZq\":[\"Column name\"],\"jUbC3Z\":[\"Swimlane: Priority\"],\"jZlrte\":[\"Color\"],\"jzy1b8\":[\"Make swimlanes editable\"],\"k4b5_X\":[\"edited\"],\"kZlRKE\":[\"Mermaid source\"],\"kryGs-\":[\"Card\"],\"lCF0wC\":[\"Refresh\"],\"lEQWoB\":[\"Add stable horizontal groups that stay visible even when they have no cards.\"],\"lHxVTh\":[\"Swimlane: Assignee\"],\"lUeOk0\":[\"Horizontal groups for this board. Names can change; card mapping stays attached.\"],\"l_g7se\":[\"Resume conversion\"],\"ltF1xa\":[\"Save merged result\"],\"m16xKo\":[\"Add\"],\"nabda1\":[\"Delete card\"],\"nfhh60\":[\"Make priority swimlanes editable?\"],\"njJFtc\":[\"Delete comment\"],\"o7J4JM\":[\"Filter\"],\"o8va6N\":[\"Restored\"],\"ojKCLU\":[\"Assignee\"],\"p9yTeb\":[\"Sort: Title\"],\"pKKcSl\":[\"Show resolved thread\"],\"pKztsX\":[\"Open in full editor\"],\"pdVZUg\":[\"WIP \",[\"0\"]],\"pnrmSP\":[\"New card\"],\"pwN6Ae\":[\"Collapse column\"],\"pzutoc\":[\"Italic\"],\"qpGDiV\":[\"Copy lane ID\"],\"rF8SEQ\":[\"Edit comment\"],\"rRubBJ\":[\"Lane details\"],\"rdUucN\":[\"Preview\"],\"rvpMpc\":[\"Manage statuses\"],\"sCzmvQ\":[\"cards\"],\"sQpDn6\":[\"Exit fullscreen\"],\"sujToP\":[\"Parent\"],\"tF-_sn\":[[\"cardCount\",\"plural\",{\"one\":[\"#\",\" card\"],\"other\":[\"#\",\" cards\"]}]],\"tK2x9T\":[\"⚠ \",[\"0\"],\" Conflict\",[\"1\"],\" to Resolve\"],\"tYS8HY\":[\"Status columns stay available when they are used as columns or swimlanes.\"],\"t_YqKh\":[\"Remove\"],\"tfDRzk\":[\"Save\"],\"u2IprG\":[\"Card title (Enter to add, Esc to cancel)\"],\"uAP6ov\":[\"Delete swimlane\"],\"uAQUqI\":[\"Status\"],\"uH1U8v\":[\"Manage swimlanes\"],\"uWPalN\":[\"Duplicate swimlane name \\\"\",[\"0\"],\"\\\". Names should be unique.\"],\"uaR_cz\":[[\"total\",\"plural\",{\"one\":[\"#\",\" card\"],\"other\":[\"#\",\" cards\"]}]],\"ucJg3u\":[\"Swimlane: Status\"],\"vIKvqQ\":[[\"missingCount\"],\" card(s) refer to deleted swimlanes.\"],\"vMTOsC\":[\"Make assignee swimlanes editable?\"],\"vfYjJ_\":[\"Copy failed.\"],\"w7E-FA\":[\"Unsafe link blocked: \",[\"url\"]],\"w_Sphq\":[\"Attachments\"],\"wf6Djn\":[\"Italic (Ctrl+I)\"],\"wtw-au\":[\"Set as done column\"],\"wwu18a\":[\"Icon\"],\"x52RAh\":[\"Blocked by \",[\"blockedCount\"],\" unfinished card(s)\"],\"xDsmP9\":[\"Agenda\"],\"xUOPoQ\":[\"Used by\"],\"y1eoq1\":[\"Copy link\"],\"y9cj46\":[\"Group: Priority\"],\"yEbJGs\":[\"+ Add field\"],\"ybGQtY\":[\"← Back to list\"],\"yz7wBu\":[\"Close\"],\"yzF66j\":[\"Link\"],\"zOc0vf\":[\"No icon\"],\"zga9sT\":[\"OK\"]}"), - zh: JSON.parse("{\"--lIxB\":[\"被阻塞于\"],\"-b7T3G\":[\"更新\"],\"1718Q-\":[\"问题\"],\"1DBGsz\":[\"备注\"],\"1YABGm\":[\"链接 (Ctrl+K)\"],\"1hKEom\":[\"优先级\"],\"1lWHP7\":[\"不安全\"],\"1nUGn5\":[\"添加状态\"],\"1xwZj_\":[\"上个月\"],\"23yqV0\":[\"显示受影响的卡片\"],\"2BPVq8\":[\"重新排序 \",[\"0\"]],\"2wxgft\":[\"重命名\"],\"3CtQL6\":[\"选择另一个泳道,然后先更新卡片。\"],\"3Ib6FN\":[\"下移\"],\"3qkggm\":[\"全屏\"],\"4NY8B5\":[\"将创建的泳道\"],\"4gdyen\":[\"本地(我的)\"],\"4hJhzz\":[\"表格\"],\"54sFiP\":[\"flowchart TD\\n A[开始] --> B[结束]\"],\"5Q_DQ6\":[\"行内代码\"],\"66g_UW\":[\"折叠已解决话题\"],\"6V3Ea3\":[\"已复制\"],\"6YtxFj\":[\"名称\"],\"6buwPb\":[\"看板设置\"],\"79Yvzu\":[\"泳道名称\"],\"7VpPHA\":[\"确认\"],\"7dZyQU\":[\"原泳道已不存在\"],\"7s3WlU\":[\"阻塞\"],\"8PifYj\":[\"Mermaid 图表\"],\"8Tg_JR\":[\"自定义\"],\"8enUYo\":[\"设置状态\"],\"8hSn0h\":[\"结果(可编辑)\"],\"8lE269\":[\"排序:手动\"],\"9OEgyT\":[\"添加回应\"],\"9OH3W0\":[\"解决话题\"],\"9gxam6\":[\"无法渲染此 Draw.io 图表。\"],\"AC9Gkf\":[\"展开列\"],\"ANe5kn\":[\"正在更新卡片…\"],\"AS5WO9\":[\"无法渲染此 PDF。\"],\"ATIq3Z\":[\"泳道:自定义\"],\"AVreQ5\":[\"拖动调整宽度\"],\"AgvHni\":[\"添加列\"],\"AjVXBS\":[\"日历\"],\"AoHpbt\":[\"显示泳道缺失的卡片\"],\"AxAubu\":[\"分组:负责人\"],\"B5TUF-\":[\"优先级…\"],\"BfMZ7w\":[\"接受云端\"],\"BiWlsk\":[\"状态…\"],\"BnmEvM\":[\"存为模板\"],\"C6-ZRl\":[\"某人\"],\"CXTDT_\":[\"继续泳道转换?\"],\"CxcMyt\":[\"已将 \",[\"0\"],\" 移到第 \",[\"1\"],\" 位,共 \",[\"2\"],\" 项。\"],\"DGEEOQ\":[\"泳道操作\"],\"DPfwMq\":[\"完成\"],\"Db4W3_\":[\"状态\"],\"EWPtMO\":[\"代码\"],\"EbMPZJ\":[\"未分配\"],\"FBIuPX\":[\"清除选择\"],\"FQylcT\":[\"泳道:缺失\"],\"G4qrLy\":[\"取消完成列\"],\"GKu3m4\":[\"暂无标签\"],\"Gpfctt\":[\"截止日期\"],\"HTKRVa\":[\"请勿关闭此对话框。\"],\"H_SQFv\":[\"无颜色\"],\"HajiZl\":[\"月\"],\"HrmW6B\":[\"添加评论…(支持 Markdown)\"],\"I6SWEy\":[\"分栏\"],\"ICip_B\":[\"云端(远程)\"],\"IdMoS6\":[\"创建第一条泳道\"],\"Ik60OC\":[\"在编辑器中打开\"],\"ImOQa9\":[\"回复\"],\"Iw6WJa\":[\"设置 WIP 限制\"],\"JTYvAw\":[\"搜索卡片\"],\"KAlhe_\":[\"卡片更新未能持久化,转换已停止。请刷新后重试。\"],\"KCszT6\":[\"添加泳道\"],\"KFiYGY\":[\"更改颜色\"],\"KGi3u9\":[\"拖动以重新排序\"],\"K_F6pa\":[\"保存中…\"],\"Kd6eg7\":[\"正在移动卡片…\"],\"KeYrQ5\":[\"撤回你的回应\"],\"KjXDqG\":[\"泳道:无\"],\"KmydK6\":[\"粗体\"],\"KpnwJK\":[\"删除“\",[\"0\"],\"”?\"],\"KvW1VO\":[\"Draw.io 图表\"],\"LQn6-8\":[\"接受本地\"],\"MHrjPM\":[\"标题\"],\"MYx830\":[\"此空泳道将从看板中移除。\"],\"Mm72la\":[\"暂无评论\"],\"MmYpxT\":[\"回复…\"],\"NBdIgR\":[\"评论\"],\"NYTPDY\":[\"移动卡片并删除\"],\"O6H89R\":[\"已解决\"],\"ONWvwQ\":[\"上传\"],\"OR4WQZ\":[\"+ 添加子卡片\"],\"OYHzN1\":[\"标签\"],\"OepdfE\":[\"分组:状态\"],\"P5cvAA\":[\"状态名称\"],\"PUeYA1\":[\"创建可编辑泳道\"],\"Pvpx7b\":[\"粘贴 URL 或路径\"],\"Q2mGA7\":[\"清除筛选\"],\"QD8opX\":[\"看板\"],\"QlsPZy\":[\"输入 Mermaid 语法以查看图表。\"],\"QmZYQP\":[\"取消解决\"],\"QyioBP\":[\"上移\"],\"RbsNko\":[\"当前有 \",[\"cardCount\"],\" 张卡片使用此泳道。\"],\"RfEZH1\":[\"JType 将根据当前负责人行创建独立泳道。卡片的负责人值不会改变。\"],\"RgO4DX\":[\"泳道 ID“\",[\"0\"],\"”重复。将使用第一条定义。\"],\"RlLl3G\":[[\"0\"],\" 的操作\"],\"S5Qbb1\":[\"用逗号分隔\"],\"SavliD\":[\"有 \",[\"danglingCount\"],\" 张卡片引用了已删除的泳道。\"],\"T_nAzC\":[\"JType 将复用现有泳道 ID,并继续未完成的卡片更新。\"],\"TdfEV7\":[\"归档\"],\"Th4mIx\":[[\"0\"],\" 的泳道详情\"],\"U0hizX\":[\"泳道颜色\"],\"UDb2YD\":[\"回应\"],\"UQOvxZ\":[\"空白卡片\"],\"URmyfc\":[\"详情\"],\"Ubl2by\":[\"右移\"],\"VNa_N2\":[\"暂不支持预览此文件类型。\"],\"VbyRUy\":[\"评论\"],\"WEYdDv\":[\"推荐\"],\"WSP6v1\":[\"排序:优先级\"],\"X03-eC\":[\"请输入内容。\"],\"XJOV1Y\":[\"活动\"],\"XklovM\":[\"正在处理…\"],\"Y8bR2a\":[\"仅删除泳道。卡片引用仍可恢复。\"],\"YHjvGb\":[\"状态操作\"],\"Ya7bZl\":[\"图表错误\"],\"Zot9XS\":[\"暂无卡片\"],\"_5CsXX\":[\"完成列\"],\"_EsjyQ\":[\"使用此版本\"],\"_TJomP\":[\"删除前移动卡片\"],\"_YbTQZ\":[\"JType 将根据当前优先级行创建独立泳道。卡片的优先级值不会改变。\"],\"a6uhHr\":[\"粗体 (Ctrl+B)\"],\"aDvLhk\":[\"添加评论…\"],\"abUZlY\":[\"添加详情...\"],\"agOeRN\":[\"无法渲染此 API 规范。\"],\"b4hVKD\":[\"彩色列\"],\"bwOqWD\":[[\"1\"],\" 张子卡中已完成 \",[\"0\"],\" 张\"],\"by_svU\":[\"将卡片保留在未分配\"],\"bzjBcL\":[\"子卡片\"],\"c61_Lv\":[\"泳道 ID\"],\"cJ44lA\":[\"未排期\"],\"cUt8yN\":[\"更改会自动保存。\"],\"cfaWH-\":[\"添加标签\"],\"cnGeoo\":[\"删除\"],\"d-F6q9\":[\"创建\"],\"d5z6xQ\":[\"WIP 限制 \",[\"0\"]],\"dEgA5A\":[\"取消\"],\"ecUA8p\":[\"今天\"],\"euc6Ns\":[\"复制卡片\"],\"fEqHZq\":[\"打开子卡片\"],\"fFAIng\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 张卡片\"],\"other\":[\"#\",\" 张卡片\"]}]],\"fVlS4-\":[\"泳道\"],\"fYcKtB\":[\"排序:截止\"],\"fvImQM\":[\"已选择 \",[\"0\"],\" 项\"],\"g8JmSC\":[\"下个月\"],\"gANddk\":[\"上传中…\"],\"gLDJuJ\":[\"未命名卡片\"],\"gzZWjO\":[\"没有可转换的已分配值。\"],\"hNmOZ7\":[\"设置优先级\"],\"he3ygx\":[\"复制\"],\"hh4sEG\":[\"相关\"],\"hnK1gR\":[\"PDF 文档\"],\"hyVzII\":[\"泳道\"],\"i4_LY_\":[\"写作\"],\"iSLA_r\":[\"左移\"],\"iTylMl\":[\"模板\"],\"iYVqZq\":[\"列名称\"],\"jUbC3Z\":[\"泳道:优先级\"],\"jZlrte\":[\"颜色\"],\"jzy1b8\":[\"将泳道转为可编辑\"],\"k4b5_X\":[\"已编辑\"],\"kZlRKE\":[\"Mermaid 源码\"],\"kryGs-\":[\"卡片\"],\"lCF0wC\":[\"刷新\"],\"lEQWoB\":[\"添加稳定的横向分组,即使没有卡片也会保持显示。\"],\"lHxVTh\":[\"泳道:负责人\"],\"lUeOk0\":[\"此看板的横向分组。名称可以更改,卡片映射会保持关联。\"],\"l_g7se\":[\"继续转换\"],\"ltF1xa\":[\"保存合并结果\"],\"m16xKo\":[\"添加\"],\"nabda1\":[\"删除卡片\"],\"nfhh60\":[\"将优先级泳道转为可编辑?\"],\"njJFtc\":[\"删除评论\"],\"o7J4JM\":[\"筛选\"],\"o8va6N\":[\"恢复\"],\"ojKCLU\":[\"负责人\"],\"p9yTeb\":[\"排序:标题\"],\"pKKcSl\":[\"显示已解决话题\"],\"pKztsX\":[\"在完整编辑器中打开\"],\"pdVZUg\":[\"在制品 \",[\"0\"]],\"pnrmSP\":[\"新建卡片\"],\"pwN6Ae\":[\"折叠列\"],\"pzutoc\":[\"斜体\"],\"qpGDiV\":[\"复制泳道 ID\"],\"rF8SEQ\":[\"编辑评论\"],\"rRubBJ\":[\"泳道详情\"],\"rdUucN\":[\"预览\"],\"rvpMpc\":[\"管理状态\"],\"sCzmvQ\":[\"张卡片\"],\"sQpDn6\":[\"退出全屏\"],\"sujToP\":[\"父卡片\"],\"tF-_sn\":[[\"cardCount\",\"plural\",{\"one\":[\"#\",\" 张卡片\"],\"other\":[\"#\",\" 张卡片\"]}]],\"tK2x9T\":[\"⚠ \",[\"0\"],\" 个冲突\",[\"1\"],\"待解决\"],\"tYS8HY\":[\"无论作为列还是泳道使用,状态列都可以继续管理。\"],\"t_YqKh\":[\"移除\"],\"tfDRzk\":[\"保存\"],\"u2IprG\":[\"卡片标题(回车添加,Esc 取消)\"],\"uAP6ov\":[\"删除泳道\"],\"uAQUqI\":[\"状态\"],\"uH1U8v\":[\"管理泳道\"],\"uWPalN\":[\"泳道名称“\",[\"0\"],\"”重复。名称应保持唯一。\"],\"uaR_cz\":[[\"total\",\"plural\",{\"one\":[\"#\",\" 张卡片\"],\"other\":[\"#\",\" 张卡片\"]}]],\"ucJg3u\":[\"泳道:状态\"],\"vIKvqQ\":[\"有 \",[\"missingCount\"],\" 张卡片引用了已删除的泳道。\"],\"vMTOsC\":[\"将负责人泳道转为可编辑?\"],\"vfYjJ_\":[\"复制失败。\"],\"w7E-FA\":[\"已拦截不安全链接:\",[\"url\"]],\"w_Sphq\":[\"附件\"],\"wf6Djn\":[\"斜体 (Ctrl+I)\"],\"wtw-au\":[\"设为完成列\"],\"wwu18a\":[\"图标\"],\"x52RAh\":[\"被 \",[\"blockedCount\"],\" 张未完成卡片阻塞\"],\"xDsmP9\":[\"日程\"],\"xUOPoQ\":[\"使用情况\"],\"y1eoq1\":[\"复制链接\"],\"y9cj46\":[\"分组:优先级\"],\"yEbJGs\":[\"+ 添加字段\"],\"ybGQtY\":[\"← 返回列表\"],\"yz7wBu\":[\"关闭\"],\"yzF66j\":[\"链接\"],\"zOc0vf\":[\"无图标\"],\"zga9sT\":[\"确定\"]}"), - ja: JSON.parse("{\"--lIxB\":[\"Blocked by\"],\"-b7T3G\":[\"Updated\"],\"1718Q-\":[\"問題\"],\"1DBGsz\":[\"ノート\"],\"1YABGm\":[\"リンク (Ctrl+K)\"],\"1hKEom\":[\"優先度\"],\"1lWHP7\":[\"unsafe\"],\"1nUGn5\":[\"ステータスを追加\"],\"1xwZj_\":[\"Previous month\"],\"23yqV0\":[\"影響を受けるカードを表示\"],\"2BPVq8\":[[\"0\"],\"を並べ替え\"],\"2wxgft\":[\"名前を変更\"],\"3CtQL6\":[\"別のスイムレーンを選び、先にカードを更新します。\"],\"3Ib6FN\":[\"下へ移動\"],\"3qkggm\":[\"全画面表示\"],\"4NY8B5\":[\"作成するスイムレーン\"],\"4gdyen\":[\"ローカル(自分の)\"],\"4hJhzz\":[\"表\"],\"54sFiP\":[\"flowchart TD\\n A[開始] --> B[終了]\"],\"5Q_DQ6\":[\"インラインコード\"],\"66g_UW\":[\"Collapse resolved thread\"],\"6V3Ea3\":[\"コピーしました\"],\"6YtxFj\":[\"名前\"],\"6buwPb\":[\"Board settings\"],\"79Yvzu\":[\"スイムレーン名\"],\"7VpPHA\":[\"確認\"],\"7dZyQU\":[\"以前のスイムレーンが見つかりません\"],\"7s3WlU\":[\"Blocks\"],\"8PifYj\":[\"Mermaid 図\"],\"8Tg_JR\":[\"カスタム\"],\"8enUYo\":[\"Set status\"],\"8hSn0h\":[\"結果(編集可能)\"],\"8lE269\":[\"並べ替え:手動\"],\"9OEgyT\":[\"Add reaction\"],\"9OH3W0\":[\"Resolve thread\"],\"9gxam6\":[\"この Draw.io 図をレンダリングできませんでした。\"],\"AC9Gkf\":[\"列を展開\"],\"ANe5kn\":[\"カードを更新中…\"],\"AS5WO9\":[\"この PDF をレンダリングできませんでした。\"],\"ATIq3Z\":[\"スイムレーン:カスタム\"],\"AVreQ5\":[\"ドラッグしてサイズ変更\"],\"AgvHni\":[\"列を追加\"],\"AjVXBS\":[\"Calendar\"],\"AoHpbt\":[\"スイムレーンが見つからないカードを表示\"],\"AxAubu\":[\"グループ:担当者\"],\"B5TUF-\":[\"Priority…\"],\"BfMZ7w\":[\"クラウドを採用\"],\"BiWlsk\":[\"Status…\"],\"BnmEvM\":[\"テンプレートとして保存\"],\"C6-ZRl\":[\"Someone\"],\"CXTDT_\":[\"スイムレーンの変換を再開しますか?\"],\"CxcMyt\":[[\"0\"],\"を\",[\"2\"],\"件中\",[\"1\"],\"番目に移動しました。\"],\"DGEEOQ\":[\"スイムレーンの操作\"],\"DPfwMq\":[\"完了\"],\"Db4W3_\":[\"ステータス\"],\"EWPtMO\":[\"コード\"],\"EbMPZJ\":[\"未割り当て\"],\"FBIuPX\":[\"Clear selection\"],\"FQylcT\":[\"スイムレーン:不明\"],\"G4qrLy\":[\"完了列を解除\"],\"GKu3m4\":[\"ラベルなし\"],\"Gpfctt\":[\"期限\"],\"HTKRVa\":[\"このダイアログを閉じないでください。\"],\"H_SQFv\":[\"色なし\"],\"HajiZl\":[\"Month\"],\"HrmW6B\":[\"Add a comment… (Markdown supported)\"],\"I6SWEy\":[\"分割\"],\"ICip_B\":[\"クラウド(リモート)\"],\"IdMoS6\":[\"最初のスイムレーンを作成\"],\"Ik60OC\":[\"エディターで開く\"],\"ImOQa9\":[\"Reply\"],\"Iw6WJa\":[\"WIP 制限を設定\"],\"JTYvAw\":[\"カードを検索\"],\"KAlhe_\":[\"カードの更新が保存されなかったため、変換を停止しました。更新して再試行してください。\"],\"KCszT6\":[\"スイムレーンを追加\"],\"KFiYGY\":[\"色を変更\"],\"KGi3u9\":[\"ドラッグして並べ替え\"],\"K_F6pa\":[\"保存中…\"],\"Kd6eg7\":[\"カードを移動中…\"],\"KeYrQ5\":[\"Remove your reaction\"],\"KjXDqG\":[\"Swimlane: None\"],\"KmydK6\":[\"太字\"],\"KpnwJK\":[\"「\",[\"0\"],\"」を削除しますか?\"],\"KvW1VO\":[\"Draw.io 図\"],\"LQn6-8\":[\"ローカルを採用\"],\"MHrjPM\":[\"タイトル\"],\"MYx830\":[\"この空のスイムレーンをボードから削除します。\"],\"Mm72la\":[\"No comments yet\"],\"MmYpxT\":[\"Reply…\"],\"NBdIgR\":[\"Comment\"],\"NYTPDY\":[\"カードを移動して削除\"],\"O6H89R\":[\"Resolved\"],\"ONWvwQ\":[\"Upload\"],\"OR4WQZ\":[\"+ Add sub-card\"],\"OYHzN1\":[\"タグ\"],\"OepdfE\":[\"グループ:ステータス\"],\"P5cvAA\":[\"ステータス名\"],\"PUeYA1\":[\"編集可能なスイムレーンを作成\"],\"Pvpx7b\":[\"Paste a URL or path\"],\"Q2mGA7\":[\"フィルターをクリア\"],\"QD8opX\":[\"ボード\"],\"QlsPZy\":[\"Mermaid 構文を書くと図が表示されます。\"],\"QmZYQP\":[\"Unresolve thread\"],\"QyioBP\":[\"上へ移動\"],\"RbsNko\":[\"現在\",[\"cardCount\"],\"枚のカードがこのスイムレーンを使用しています。\"],\"RfEZH1\":[\"JType は現在の担当者行から独立したスイムレーンを作成します。カードの担当者は変更されません。\"],\"RgO4DX\":[\"スイムレーン ID「\",[\"0\"],\"」が重複しています。最初の定義を使用します。\"],\"RlLl3G\":[[\"0\"],\"の操作\"],\"S5Qbb1\":[\"カンマ区切り\"],\"SavliD\":[[\"danglingCount\"],\"枚のカードが削除済みのスイムレーンを参照しています。\"],\"T_nAzC\":[\"JType は既存のスイムレーン ID を再利用し、未完了のカード更新を続行します。\"],\"TdfEV7\":[\"Archived\"],\"Th4mIx\":[[\"0\"],\" のレーン詳細\"],\"U0hizX\":[\"スイムレーンの色\"],\"UDb2YD\":[\"React\"],\"UQOvxZ\":[\"空のカード\"],\"URmyfc\":[\"詳細\"],\"Ubl2by\":[\"右へ移動\"],\"VNa_N2\":[\"このファイル形式はまだプレビューできません。\"],\"VbyRUy\":[\"Comments\"],\"WEYdDv\":[\"推奨\"],\"WSP6v1\":[\"並べ替え:優先度\"],\"X03-eC\":[\"値を入力してください。\"],\"XJOV1Y\":[\"Activity\"],\"XklovM\":[\"処理中…\"],\"Y8bR2a\":[\"スイムレーンだけを削除します。カードの参照は復元できます。\"],\"YHjvGb\":[\"ステータスの操作\"],\"Ya7bZl\":[\"図のエラー\"],\"Zot9XS\":[\"カードなし\"],\"_5CsXX\":[\"完了列\"],\"_EsjyQ\":[\"これを使用\"],\"_TJomP\":[\"削除前にカードを移動\"],\"_YbTQZ\":[\"JType は現在の優先度行から独立したスイムレーンを作成します。カードの優先度は変更されません。\"],\"a6uhHr\":[\"太字 (Ctrl+B)\"],\"aDvLhk\":[\"Add a comment…\"],\"abUZlY\":[\"詳細を追加...\"],\"agOeRN\":[\"この API 仕様をレンダリングできませんでした。\"],\"b4hVKD\":[\"色付き列\"],\"bwOqWD\":[[\"0\"],\" of \",[\"1\"],\" sub-cards done\"],\"by_svU\":[\"カードを未割り当てに残す\"],\"bzjBcL\":[\"Sub-cards\"],\"c61_Lv\":[\"スイムレーン ID\"],\"cJ44lA\":[\"Unscheduled\"],\"cUt8yN\":[\"変更は自動的に保存されます。\"],\"cfaWH-\":[\"ラベルを追加\"],\"cnGeoo\":[\"削除\"],\"d-F6q9\":[\"Created\"],\"d5z6xQ\":[\"WIP 制限 \",[\"0\"]],\"dEgA5A\":[\"キャンセル\"],\"ecUA8p\":[\"Today\"],\"euc6Ns\":[\"複製\"],\"fEqHZq\":[\"Open sub-card\"],\"fFAIng\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のカード\"],\"other\":[\"#\",\" 件のカード\"]}]],\"fVlS4-\":[\"スイムレーン\"],\"fYcKtB\":[\"並べ替え:期限\"],\"fvImQM\":[[\"0\"],\" selected\"],\"g8JmSC\":[\"Next month\"],\"gANddk\":[\"Uploading…\"],\"gLDJuJ\":[\"無題のカード\"],\"gzZWjO\":[\"変換できる割り当て済みの値がありません。\"],\"hNmOZ7\":[\"Set priority\"],\"he3ygx\":[\"コピー\"],\"hh4sEG\":[\"Relates\"],\"hnK1gR\":[\"PDF ドキュメント\"],\"hyVzII\":[\"スイムレーン\"],\"i4_LY_\":[\"記述\"],\"iSLA_r\":[\"左へ移動\"],\"iTylMl\":[\"テンプレート\"],\"iYVqZq\":[\"列名\"],\"jUbC3Z\":[\"Swimlane: Priority\"],\"jZlrte\":[\"カラー\"],\"jzy1b8\":[\"スイムレーンを編集可能にする\"],\"k4b5_X\":[\"edited\"],\"kZlRKE\":[\"Mermaid ソース\"],\"kryGs-\":[\"カード\"],\"lCF0wC\":[\"更新\"],\"lEQWoB\":[\"カードがなくても表示され続ける横方向のグループを追加します。\"],\"lHxVTh\":[\"Swimlane: Assignee\"],\"lUeOk0\":[\"このボードの横方向グループです。名前を変更しても、カードの関連付けは維持されます。\"],\"l_g7se\":[\"変換を再開\"],\"ltF1xa\":[\"マージ結果を保存\"],\"m16xKo\":[\"追加\"],\"nabda1\":[\"カードを削除\"],\"nfhh60\":[\"優先度スイムレーンを編集可能にしますか?\"],\"njJFtc\":[\"Delete comment\"],\"o7J4JM\":[\"フィルター\"],\"o8va6N\":[\"Restored\"],\"ojKCLU\":[\"担当者\"],\"p9yTeb\":[\"並べ替え:タイトル\"],\"pKKcSl\":[\"Show resolved thread\"],\"pKztsX\":[\"フルエディターで開く\"],\"pdVZUg\":[\"WIP \",[\"0\"]],\"pnrmSP\":[\"新規カード\"],\"pwN6Ae\":[\"列を折りたたむ\"],\"pzutoc\":[\"イタリック\"],\"qpGDiV\":[\"スイムレーン ID をコピー\"],\"rF8SEQ\":[\"Edit comment\"],\"rRubBJ\":[\"スイムレーンの詳細\"],\"rdUucN\":[\"プレビュー\"],\"rvpMpc\":[\"ステータスを管理\"],\"sCzmvQ\":[\"枚のカード\"],\"sQpDn6\":[\"全画面表示を終了\"],\"sujToP\":[\"Parent\"],\"tF-_sn\":[[\"cardCount\",\"plural\",{\"one\":[\"#\",\" 件のカード\"],\"other\":[\"#\",\" 件のカード\"]}]],\"tK2x9T\":[\"⚠ \",[\"0\"],\" 件の競合\",[\"1\"],\"を解決中\"],\"tYS8HY\":[\"ステータス列は、列またはスイムレーンとして使用中でも管理できます。\"],\"t_YqKh\":[\"Remove\"],\"tfDRzk\":[\"Save\"],\"u2IprG\":[\"カードのタイトル(Enter で追加、Esc でキャンセル)\"],\"uAP6ov\":[\"スイムレーンを削除\"],\"uAQUqI\":[\"ステータス\"],\"uH1U8v\":[\"スイムレーンを管理\"],\"uWPalN\":[\"スイムレーン名「\",[\"0\"],\"」が重複しています。名前は一意にしてください。\"],\"uaR_cz\":[[\"total\",\"plural\",{\"one\":[\"#\",\" 件のカード\"],\"other\":[\"#\",\" 件のカード\"]}]],\"ucJg3u\":[\"Swimlane: Status\"],\"vIKvqQ\":[[\"missingCount\"],\"枚のカードが削除済みのスイムレーンを参照しています。\"],\"vMTOsC\":[\"担当者スイムレーンを編集可能にしますか?\"],\"vfYjJ_\":[\"コピーに失敗しました。\"],\"w7E-FA\":[\"Unsafe link blocked: \",[\"url\"]],\"w_Sphq\":[\"Attachments\"],\"wf6Djn\":[\"イタリック (Ctrl+I)\"],\"wtw-au\":[\"完了列に設定\"],\"wwu18a\":[\"アイコン\"],\"x52RAh\":[\"Blocked by \",[\"blockedCount\"],\" unfinished card(s)\"],\"xDsmP9\":[\"Agenda\"],\"xUOPoQ\":[\"使用状況\"],\"y1eoq1\":[\"リンクをコピー\"],\"y9cj46\":[\"グループ:優先度\"],\"yEbJGs\":[\"+ Add field\"],\"ybGQtY\":[\"← リストに戻る\"],\"yz7wBu\":[\"閉じる\"],\"yzF66j\":[\"リンク\"],\"zOc0vf\":[\"アイコンなし\"],\"zga9sT\":[\"OK\"]}"), - ko: JSON.parse("{\"--lIxB\":[\"Blocked by\"],\"-b7T3G\":[\"Updated\"],\"1718Q-\":[\"Issues\"],\"1DBGsz\":[\"노트\"],\"1YABGm\":[\"링크 (Ctrl+K)\"],\"1hKEom\":[\"우선순위\"],\"1lWHP7\":[\"unsafe\"],\"1nUGn5\":[\"Add status\"],\"1xwZj_\":[\"Previous month\"],\"23yqV0\":[\"Show affected cards\"],\"2BPVq8\":[\"Reorder \",[\"0\"]],\"2wxgft\":[\"이름 변경\"],\"3CtQL6\":[\"Choose another swimlane, then update the cards first.\"],\"3Ib6FN\":[\"Move down\"],\"3qkggm\":[\"전체 화면\"],\"4NY8B5\":[\"Swimlanes to create\"],\"4gdyen\":[\"로컈 (내 것)\"],\"4hJhzz\":[\"테이블\"],\"54sFiP\":[\"flowchart TD\\n A[시작] --> B[끝]\"],\"5Q_DQ6\":[\"인라인 코드\"],\"66g_UW\":[\"Collapse resolved thread\"],\"6V3Ea3\":[\"Copied\"],\"6YtxFj\":[\"Name\"],\"6buwPb\":[\"Board settings\"],\"79Yvzu\":[\"Swimlane name\"],\"7VpPHA\":[\"확인\"],\"7dZyQU\":[\"Previous swimlane missing\"],\"7s3WlU\":[\"Blocks\"],\"8PifYj\":[\"Mermaid 다이어그램\"],\"8Tg_JR\":[\"Custom\"],\"8enUYo\":[\"Set status\"],\"8hSn0h\":[\"결과 (편집 가능)\"],\"8lE269\":[\"정렬: 수동\"],\"9OEgyT\":[\"Add reaction\"],\"9OH3W0\":[\"Resolve thread\"],\"9gxam6\":[\"이 Draw.io 다이어그램을 렌더링할 수 없습니다.\"],\"AC9Gkf\":[\"열 펼치기\"],\"ANe5kn\":[\"Updating cards…\"],\"AS5WO9\":[\"이 PDF를 렌더링할 수 없습니다.\"],\"ATIq3Z\":[\"Swimlane: Custom\"],\"AVreQ5\":[\"드래그하여 크기 조정\"],\"AgvHni\":[\"열 추가\"],\"AjVXBS\":[\"Calendar\"],\"AoHpbt\":[\"Show cards with missing swimlanes\"],\"AxAubu\":[\"그룹: 담당자\"],\"B5TUF-\":[\"Priority…\"],\"BfMZ7w\":[\"클라우드 수낙\"],\"BiWlsk\":[\"Status…\"],\"BnmEvM\":[\"템플릿으로 저장\"],\"C6-ZRl\":[\"Someone\"],\"CXTDT_\":[\"Resume swimlane conversion?\"],\"CxcMyt\":[[\"0\"],\" moved to position \",[\"1\"],\" of \",[\"2\"],\".\"],\"DGEEOQ\":[\"Swimlane actions\"],\"DPfwMq\":[\"Done\"],\"Db4W3_\":[\"Statuses\"],\"EWPtMO\":[\"코드\"],\"EbMPZJ\":[\"미할당\"],\"FBIuPX\":[\"Clear selection\"],\"FQylcT\":[\"Swimlane: Missing\"],\"G4qrLy\":[\"완료 열 해제\"],\"GKu3m4\":[\"라벨 없음\"],\"Gpfctt\":[\"마감\"],\"HTKRVa\":[\"Do not close this dialog.\"],\"H_SQFv\":[\"색상 없음\"],\"HajiZl\":[\"Month\"],\"HrmW6B\":[\"Add a comment… (Markdown supported)\"],\"I6SWEy\":[\"스플릿\"],\"ICip_B\":[\"클라우드 (원격)\"],\"IdMoS6\":[\"Create your first swimlane\"],\"Ik60OC\":[\"에디터에서 열기\"],\"ImOQa9\":[\"Reply\"],\"Iw6WJa\":[\"WIP 한도 설정\"],\"JTYvAw\":[\"카드 검색\"],\"KAlhe_\":[\"카드 업데이트가 저장되지 않아 변환을 중지했습니다. 새로 고친 후 다시 시도하세요.\"],\"KCszT6\":[\"Add swimlane\"],\"KFiYGY\":[\"Change color\"],\"KGi3u9\":[\"Drag to reorder\"],\"K_F6pa\":[\"저장 중…\"],\"Kd6eg7\":[\"Moving cards…\"],\"KeYrQ5\":[\"Remove your reaction\"],\"KjXDqG\":[\"Swimlane: None\"],\"KmydK6\":[\"굵게\"],\"KpnwJK\":[\"Delete \\\"\",[\"0\"],\"\\\"?\"],\"KvW1VO\":[\"Draw.io 다이어그램\"],\"LQn6-8\":[\"로컈 수낙\"],\"MHrjPM\":[\"제목\"],\"MYx830\":[\"This empty swimlane will be removed from the board.\"],\"Mm72la\":[\"No comments yet\"],\"MmYpxT\":[\"Reply…\"],\"NBdIgR\":[\"Comment\"],\"NYTPDY\":[\"Move cards and delete\"],\"O6H89R\":[\"Resolved\"],\"ONWvwQ\":[\"Upload\"],\"OR4WQZ\":[\"+ Add sub-card\"],\"OYHzN1\":[\"태그\"],\"OepdfE\":[\"그룹: 상태\"],\"P5cvAA\":[\"Status name\"],\"PUeYA1\":[\"Create editable swimlanes\"],\"Pvpx7b\":[\"Paste a URL or path\"],\"Q2mGA7\":[\"필터 지우기\"],\"QD8opX\":[\"보드\"],\"QlsPZy\":[\"Mermaid 구문을 작성하면 다이어그램이 표시됩니다.\"],\"QmZYQP\":[\"Unresolve thread\"],\"QyioBP\":[\"Move up\"],\"RbsNko\":[[\"cardCount\"],\" card(s) currently use this swimlane.\"],\"RfEZH1\":[\"JType will create independent swimlanes from the current assignee rows. Card assignee values will stay unchanged.\"],\"RgO4DX\":[\"Duplicate lane ID \\\"\",[\"0\"],\"\\\". The first definition is used.\"],\"RlLl3G\":[\"Actions for \",[\"0\"]],\"S5Qbb1\":[\"쉼표로 구분\"],\"SavliD\":[[\"danglingCount\"],\" card(s) refer to deleted swimlanes.\"],\"T_nAzC\":[\"JType will reuse the existing lane IDs and continue unfinished card updates.\"],\"TdfEV7\":[\"Archived\"],\"Th4mIx\":[[\"0\"],\" 레인 세부 정보\"],\"U0hizX\":[\"Swimlane color\"],\"UDb2YD\":[\"React\"],\"UQOvxZ\":[\"빈 카드\"],\"URmyfc\":[\"Details\"],\"Ubl2by\":[\"Move right\"],\"VNa_N2\":[\"이 파일 형식은 아직 미리볼 수 없습니다.\"],\"VbyRUy\":[\"Comments\"],\"WEYdDv\":[\"Recommended\"],\"WSP6v1\":[\"정렬: 우선순위\"],\"X03-eC\":[\"값을 입력해 주세요.\"],\"XJOV1Y\":[\"Activity\"],\"XklovM\":[\"Working…\"],\"Y8bR2a\":[\"Delete only the swimlane. Card references remain recoverable.\"],\"YHjvGb\":[\"Status actions\"],\"Ya7bZl\":[\"다이어그램 오류\"],\"Zot9XS\":[\"카드 없음\"],\"_5CsXX\":[\"완료 열\"],\"_EsjyQ\":[\"이것 사용\"],\"_TJomP\":[\"Move cards before deleting\"],\"_YbTQZ\":[\"JType will create independent swimlanes from the current priority rows. Card priority values will stay unchanged.\"],\"a6uhHr\":[\"굵게 (Ctrl+B)\"],\"aDvLhk\":[\"Add a comment…\"],\"abUZlY\":[\"세부정보 추가...\"],\"agOeRN\":[\"이 API 명세를 렌더링할 수 없습니다.\"],\"b4hVKD\":[\"색상 열\"],\"bwOqWD\":[[\"0\"],\" of \",[\"1\"],\" sub-cards done\"],\"by_svU\":[\"Keep cards in Unassigned\"],\"bzjBcL\":[\"Sub-cards\"],\"c61_Lv\":[\"Lane ID\"],\"cJ44lA\":[\"Unscheduled\"],\"cUt8yN\":[\"Changes save automatically.\"],\"cfaWH-\":[\"라벨 추가\"],\"cnGeoo\":[\"삭제\"],\"d-F6q9\":[\"Created\"],\"d5z6xQ\":[\"WIP 한도 \",[\"0\"]],\"dEgA5A\":[\"취소\"],\"ecUA8p\":[\"Today\"],\"euc6Ns\":[\"복제\"],\"fEqHZq\":[\"Open sub-card\"],\"fFAIng\":[[\"0\",\"plural\",{\"one\":[\"카드 \",\"#\",\"개\"],\"other\":[\"카드 \",\"#\",\"개\"]}]],\"fVlS4-\":[\"Swimlane\"],\"fYcKtB\":[\"정렬: 마감\"],\"fvImQM\":[[\"0\"],\" selected\"],\"g8JmSC\":[\"Next month\"],\"gANddk\":[\"Uploading…\"],\"gLDJuJ\":[\"제목 없는 카드\"],\"gzZWjO\":[\"No assigned values to convert.\"],\"hNmOZ7\":[\"Set priority\"],\"he3ygx\":[\"Copy\"],\"hh4sEG\":[\"Relates\"],\"hnK1gR\":[\"PDF 문서\"],\"hyVzII\":[\"Swimlanes\"],\"i4_LY_\":[\"작성\"],\"iSLA_r\":[\"Move left\"],\"iTylMl\":[\"템플릿\"],\"iYVqZq\":[\"열 이름\"],\"jUbC3Z\":[\"Swimlane: Priority\"],\"jZlrte\":[\"색상\"],\"jzy1b8\":[\"Make swimlanes editable\"],\"k4b5_X\":[\"edited\"],\"kZlRKE\":[\"Mermaid 소스\"],\"kryGs-\":[\"카드\"],\"lCF0wC\":[\"새로고침\"],\"lEQWoB\":[\"Add stable horizontal groups that stay visible even when they have no cards.\"],\"lHxVTh\":[\"Swimlane: Assignee\"],\"lUeOk0\":[\"Horizontal groups for this board. Names can change; card mapping stays attached.\"],\"l_g7se\":[\"Resume conversion\"],\"ltF1xa\":[\"병합 결과 저장\"],\"m16xKo\":[\"Add\"],\"nabda1\":[\"카드 삭제\"],\"nfhh60\":[\"Make priority swimlanes editable?\"],\"njJFtc\":[\"Delete comment\"],\"o7J4JM\":[\"필터\"],\"o8va6N\":[\"Restored\"],\"ojKCLU\":[\"담당자\"],\"p9yTeb\":[\"정렬: 제목\"],\"pKKcSl\":[\"Show resolved thread\"],\"pKztsX\":[\"전체 에디터에서 열기\"],\"pdVZUg\":[\"WIP \",[\"0\"]],\"pnrmSP\":[\"새 카드\"],\"pwN6Ae\":[\"열 접기\"],\"pzutoc\":[\"기울임꼴\"],\"qpGDiV\":[\"Copy lane ID\"],\"rF8SEQ\":[\"Edit comment\"],\"rRubBJ\":[\"Lane details\"],\"rdUucN\":[\"미리보기\"],\"rvpMpc\":[\"Manage statuses\"],\"sCzmvQ\":[\"개 카드\"],\"sQpDn6\":[\"전체 화면 종료\"],\"sujToP\":[\"Parent\"],\"tF-_sn\":[[\"cardCount\",\"plural\",{\"one\":[\"카드 \",\"#\",\"개\"],\"other\":[\"카드 \",\"#\",\"개\"]}]],\"tK2x9T\":[\"⚠ 해결할 충돌 \",[\"0\"],\"건\",[\"1\"]],\"tYS8HY\":[\"Status columns stay available when they are used as columns or swimlanes.\"],\"t_YqKh\":[\"Remove\"],\"tfDRzk\":[\"Save\"],\"u2IprG\":[\"카드 제목 (Enter로 추가, Esc로 취소)\"],\"uAP6ov\":[\"Delete swimlane\"],\"uAQUqI\":[\"상태\"],\"uH1U8v\":[\"Manage swimlanes\"],\"uWPalN\":[\"Duplicate swimlane name \\\"\",[\"0\"],\"\\\". Names should be unique.\"],\"uaR_cz\":[[\"total\",\"plural\",{\"one\":[\"카드 \",\"#\",\"개\"],\"other\":[\"카드 \",\"#\",\"개\"]}]],\"ucJg3u\":[\"Swimlane: Status\"],\"vIKvqQ\":[[\"missingCount\"],\" card(s) refer to deleted swimlanes.\"],\"vMTOsC\":[\"Make assignee swimlanes editable?\"],\"vfYjJ_\":[\"복사하지 못했습니다.\"],\"w7E-FA\":[\"Unsafe link blocked: \",[\"url\"]],\"w_Sphq\":[\"Attachments\"],\"wf6Djn\":[\"기울임꼴 (Ctrl+I)\"],\"wtw-au\":[\"완료 열로 설정\"],\"wwu18a\":[\"아이콘\"],\"x52RAh\":[\"Blocked by \",[\"blockedCount\"],\" unfinished card(s)\"],\"xDsmP9\":[\"Agenda\"],\"xUOPoQ\":[\"Used by\"],\"y1eoq1\":[\"링크 복사\"],\"y9cj46\":[\"그룹: 우선순위\"],\"yEbJGs\":[\"+ Add field\"],\"ybGQtY\":[\"← 목록으로\"],\"yz7wBu\":[\"닫기\"],\"yzF66j\":[\"링크\"],\"zOc0vf\":[\"아이콘 없음\"],\"zga9sT\":[\"확인\"]}") +var Om = { + en: JSON.parse("{\"--lIxB\":[\"Blocked by\"],\"-3Qbcm\":[\"Priority: \",[\"0\"]],\"-9kYEs\":[\"Cards with a missing row\"],\"-X4ual\":[\"No priority\"],\"-b7T3G\":[\"Updated\"],\"-hwvgo\":[\"Row actions\"],\"02N8r0\":[\"Filter cards\"],\"0cspe_\":[\"Delete row\"],\"0gvHNl\":[\"Statuses define the card workflow. Rename or reorder them freely; cards stay mapped by status ID.\"],\"1718Q-\":[\"Issues\"],\"1DBGsz\":[\"Notes\"],\"1YABGm\":[\"Link (Ctrl+K)\"],\"1hKEom\":[\"Priority\"],\"1iShX0\":[\"Due today\"],\"1lWHP7\":[\"unsafe\"],\"1nUGn5\":[\"Add status\"],\"1xwZj_\":[\"Previous month\"],\"23yqV0\":[\"Show affected cards\"],\"2BPVq8\":[\"Reorder \",[\"0\"]],\"2aEwT_\":[\"Manage custom rows\"],\"2wxgft\":[\"Rename\"],\"32TndD\":[\"Blocked\"],\"3CIp19\":[\"Next 7 days\"],\"3CtQL6\":[\"Choose another swimlane, then update the cards first.\"],\"3Ib6FN\":[\"Move down\"],\"3qkggm\":[\"Fullscreen\"],\"4NY8B5\":[\"Swimlanes to create\"],\"4gdyen\":[\"Local (yours)\"],\"4hJhzz\":[\"Table\"],\"4t8aKB\":[\"Rows to create\"],\"54sFiP\":[\"flowchart TD\\n A[Start] --> B[End]\"],\"5Oy0YM\":[\"Labels: \",[\"0\"]],\"5Q_DQ6\":[\"Inline Code\"],\"66g_UW\":[\"Collapse resolved thread\"],\"6G3KzD\":[\"Row details\"],\"6V3Ea3\":[\"Copied\"],\"6YtxFj\":[\"Name\"],\"6buwPb\":[\"Board settings\"],\"79Yvzu\":[\"Swimlane name\"],\"7MGAQC\":[\"JType will reuse the existing row IDs and continue unfinished card updates.\"],\"7VpPHA\":[\"Confirm\"],\"7dZyQU\":[\"Previous swimlane missing\"],\"7pBic4\":[[\"visibleCount\"],\" of \",[\"totalCount\"],\" cards shown\"],\"7s3WlU\":[\"Blocks\"],\"8PifYj\":[\"Mermaid diagram\"],\"8Tg_JR\":[\"Custom\"],\"8enUYo\":[\"Set status\"],\"8hSn0h\":[\"Result (editable)\"],\"8lE269\":[\"Sort: Manual\"],\"9L7ptC\":[\"This empty row will be removed from the board.\"],\"9OEgyT\":[\"Add reaction\"],\"9OH3W0\":[\"Resolve thread\"],\"9YTdO7\":[\"Blocked cards\"],\"9gx7rl\":[[\"missingCount\"],\" card(s) refer to deleted rows.\"],\"9gxam6\":[\"Could not render this Draw.io diagram.\"],\"AC9Gkf\":[\"Expand column\"],\"ANe5kn\":[\"Updating cards…\"],\"AS5WO9\":[\"Could not render this PDF.\"],\"ATIq3Z\":[\"Swimlane: Custom\"],\"AVreQ5\":[\"Drag to resize\"],\"AgvHni\":[\"Add column\"],\"AjVXBS\":[\"Calendar\"],\"AoHpbt\":[\"Show cards with missing swimlanes\"],\"AxAubu\":[\"Group: Assignee\"],\"B5TUF-\":[\"Priority…\"],\"BfMZ7w\":[\"Accept cloud\"],\"BiWlsk\":[\"Status…\"],\"BnmEvM\":[\"Save as template\"],\"C6-ZRl\":[\"Someone\"],\"CXTDT_\":[\"Resume swimlane conversion?\"],\"CxcMyt\":[[\"0\"],\" moved to position \",[\"1\"],\" of \",[\"2\"],\".\"],\"DGEEOQ\":[\"Swimlane actions\"],\"DPfwMq\":[\"Done\"],\"Db4W3_\":[\"Statuses\"],\"EWPtMO\":[\"Code\"],\"EbMPZJ\":[\"Unassigned\"],\"F6osRA\":[[\"danglingCount\"],\" card(s) refer to deleted rows.\"],\"FBIuPX\":[\"Clear selection\"],\"FQylcT\":[\"Swimlane: Missing\"],\"G4qrLy\":[\"Unset done column\"],\"GKu3m4\":[\"No labels\"],\"GL6e_U\":[[\"cardCount\"],\" card(s) currently use this row.\"],\"Gpfctt\":[\"Due\"],\"HTKRVa\":[\"Do not close this dialog.\"],\"H_SQFv\":[\"No color\"],\"HajiZl\":[\"Month\"],\"HrmW6B\":[\"Add a comment… (Markdown supported)\"],\"I6SWEy\":[\"Split\"],\"ICip_B\":[\"Cloud (remote)\"],\"IdMoS6\":[\"Create your first swimlane\"],\"Ik60OC\":[\"Open in editor\"],\"ImOQa9\":[\"Reply\"],\"IqKCNQ\":[\"Row\"],\"Iw6WJa\":[\"Set WIP limit\"],\"JTYvAw\":[\"Search cards\"],\"KAlhe_\":[\"Conversion stopped because card updates did not persist. Refresh and try again.\"],\"KCszT6\":[\"Add swimlane\"],\"KFiYGY\":[\"Change color\"],\"KGi3u9\":[\"Drag to reorder\"],\"K_F6pa\":[\"Saving…\"],\"K_cST0\":[\"Resume row conversion?\"],\"Kd6eg7\":[\"Moving cards…\"],\"KeYrQ5\":[\"Remove your reaction\"],\"KjXDqG\":[\"Swimlane: None\"],\"KmydK6\":[\"Bold\"],\"KpnwJK\":[\"Delete \\\"\",[\"0\"],\"\\\"?\"],\"KvW1VO\":[\"Draw.io diagram\"],\"LQn6-8\":[\"Accept local\"],\"Ld9MtR\":[\"Rows: Assignee\"],\"MHrjPM\":[\"Title\"],\"MYx830\":[\"This empty swimlane will be removed from the board.\"],\"Mm72la\":[\"No comments yet\"],\"MmYpxT\":[\"Reply…\"],\"NBdIgR\":[\"Comment\"],\"NYTPDY\":[\"Move cards and delete\"],\"NnxWLJ\":[\"Create your first custom row\"],\"O6H89R\":[\"Resolved\"],\"ONWvwQ\":[\"Upload\"],\"OR4WQZ\":[\"+ Add sub-card\"],\"OYHzN1\":[\"Tags\"],\"OepdfE\":[\"Group: Status\"],\"P5cvAA\":[\"Status name\"],\"PM7yYy\":[\"Row ID\"],\"PUeYA1\":[\"Create editable swimlanes\"],\"Pvpx7b\":[\"Paste a URL or path\"],\"Q2mGA7\":[\"Clear filter\"],\"QD8opX\":[\"Board\"],\"QlsPZy\":[\"Write Mermaid syntax to see the diagram.\"],\"QmZYQP\":[\"Unresolve thread\"],\"QyioBP\":[\"Move up\"],\"RbsNko\":[[\"cardCount\"],\" card(s) currently use this swimlane.\"],\"RfEZH1\":[\"JType will create independent swimlanes from the current assignee rows. Card assignee values will stay unchanged.\"],\"RgO4DX\":[\"Duplicate lane ID \\\"\",[\"0\"],\"\\\". The first definition is used.\"],\"RlLl3G\":[\"Actions for \",[\"0\"]],\"RnplaY\":[\"Row details for \",[\"0\"]],\"S5Qbb1\":[\"comma, separated\"],\"SavliD\":[[\"danglingCount\"],\" card(s) refer to deleted swimlanes.\"],\"T_nAzC\":[\"JType will reuse the existing lane IDs and continue unfinished card updates.\"],\"TdfEV7\":[\"Archived\"],\"Th4mIx\":[\"Lane details for \",[\"0\"]],\"U0hizX\":[\"Swimlane color\"],\"U95P80\":[\"Make priority rows editable?\"],\"UDb2YD\":[\"React\"],\"UQOvxZ\":[\"Blank card\"],\"URmyfc\":[\"Details\"],\"Ubl2by\":[\"Move right\"],\"VNa_N2\":[\"This file type can not be previewed yet.\"],\"VXh9CK\":[\"No due date\"],\"VbyRUy\":[\"Comments\"],\"WEYdDv\":[\"Recommended\"],\"WSP6v1\":[\"Sort: Priority\"],\"WWUwTb\":[\"Make assignee rows editable?\"],\"X03-eC\":[\"Please enter a value.\"],\"XJOV1Y\":[\"Activity\"],\"XicmhT\":[\"Due date\"],\"XklovM\":[\"Working…\"],\"Y8bR2a\":[\"Delete only the swimlane. Card references remain recoverable.\"],\"YDa2KG\":[\"My cards\"],\"YFdnVT\":[\"Card state\"],\"YHjvGb\":[\"Status actions\"],\"YNYued\":[\"Status ID\"],\"Ya7bZl\":[\"Diagram error\"],\"Zot9XS\":[\"No cards\"],\"_5CsXX\":[\"Done column\"],\"_EsjyQ\":[\"Use this\"],\"_TJomP\":[\"Move cards before deleting\"],\"_YbTQZ\":[\"JType will create independent swimlanes from the current priority rows. Card priority values will stay unchanged.\"],\"_kh61D\":[\"Show cards with missing rows\"],\"_laW0t\":[\"Previous row missing\"],\"a6uhHr\":[\"Bold (Ctrl+B)\"],\"aDvLhk\":[\"Add a comment…\"],\"abUZlY\":[\"Add details...\"],\"agOeRN\":[\"Could not render this API specification.\"],\"b4hVKD\":[\"Color columns\"],\"bwOqWD\":[[\"0\"],\" of \",[\"1\"],\" sub-cards done\"],\"by_svU\":[\"Keep cards in Unassigned\"],\"bzjBcL\":[\"Sub-cards\"],\"c-EXz1\":[\"Delete only the row. Card references remain recoverable.\"],\"c61_Lv\":[\"Lane ID\"],\"cJ44lA\":[\"Unscheduled\"],\"cSev-j\":[\"Filters\"],\"cUt8yN\":[\"Changes save automatically.\"],\"ceQmqN\":[\"Custom rows\"],\"cfaWH-\":[\"Add labels\"],\"cnGeoo\":[\"Delete\"],\"d-F6q9\":[\"Created\"],\"d5z6xQ\":[\"WIP limit \",[\"0\"]],\"dEgA5A\":[\"Cancel\"],\"dQva-y\":[\"Duplicate row ID \\\"\",[\"0\"],\"\\\". The first definition is used.\"],\"ddrz1m\":[\"Overdue\"],\"eAi4RE\":[\"JType will create independent custom rows from the current priority groups. Card priority values will stay unchanged.\"],\"ecUA8p\":[\"Today\"],\"euc6Ns\":[\"Duplicate\"],\"fEqHZq\":[\"Open sub-card\"],\"fFAIng\":[[\"0\",\"plural\",{\"one\":[\"#\",\" card\"],\"other\":[\"#\",\" cards\"]}]],\"fOluHh\":[\"JType will create independent custom rows from the current assignee groups. Card assignee values will stay unchanged.\"],\"fVlS4-\":[\"Swimlane\"],\"fYcKtB\":[\"Sort: Due\"],\"fdEjOR\":[\"Copy row ID\"],\"fvImQM\":[[\"0\"],\" selected\"],\"fwTn8F\":[\"Row color\"],\"g8JmSC\":[\"Next month\"],\"gANddk\":[\"Uploading…\"],\"gLDJuJ\":[\"Untitled card\"],\"guQk4e\":[\"Columns: Status\"],\"gzZWjO\":[\"No assigned values to convert.\"],\"h8DugX\":[\"Labels\"],\"hL5-_P\":[\"Rows\"],\"hNQgyI\":[\"Columns: Priority\"],\"hNmOZ7\":[\"Set priority\"],\"he3ygx\":[\"Copy\"],\"hh4sEG\":[\"Relates\"],\"hnK1gR\":[\"PDF document\"],\"hyVzII\":[\"Swimlanes\"],\"i4_LY_\":[\"Write\"],\"iSLA_r\":[\"Move left\"],\"iTylMl\":[\"Templates\"],\"iYVqZq\":[\"Column name\"],\"jUbC3Z\":[\"Swimlane: Priority\"],\"jZlrte\":[\"Color\"],\"jzy1b8\":[\"Make swimlanes editable\"],\"k4b5_X\":[\"edited\"],\"kBRFD0\":[\"Create editable rows\"],\"kMqzL_\":[\"Row name\"],\"kZlRKE\":[\"Mermaid source\"],\"kryGs-\":[\"Card\"],\"lCF0wC\":[\"Refresh\"],\"lEQWoB\":[\"Add stable horizontal groups that stay visible even when they have no cards.\"],\"lHxVTh\":[\"Swimlane: Assignee\"],\"lUeOk0\":[\"Horizontal groups for this board. Names can change; card mapping stays attached.\"],\"l_g7se\":[\"Resume conversion\"],\"lqoy3F\":[\"Missing row\"],\"lt2UOc\":[\"Rows: None\"],\"ltF1xa\":[\"Save merged result\"],\"m16xKo\":[\"Add\"],\"mPINe9\":[\"Duplicate row name \\\"\",[\"0\"],\"\\\". Names should be unique.\"],\"nabda1\":[\"Delete card\"],\"nfhh60\":[\"Make priority swimlanes editable?\"],\"njJFtc\":[\"Delete comment\"],\"o7J4JM\":[\"Filter\"],\"o8va6N\":[\"Restored\"],\"obId50\":[\"Filters, \",[\"activeCount\"],\" active\"],\"ojKCLU\":[\"Assignee\"],\"p4rTvq\":[\"Rows: Priority\"],\"p9yTeb\":[\"Sort: Title\"],\"pKKcSl\":[\"Show resolved thread\"],\"pKztsX\":[\"Open in full editor\"],\"pdVZUg\":[\"WIP \",[\"0\"]],\"pnrmSP\":[\"New card\"],\"pwN6Ae\":[\"Collapse column\"],\"pzutoc\":[\"Italic\"],\"qZd_ph\":[\"Add row\"],\"qpGDiV\":[\"Copy lane ID\"],\"rF8SEQ\":[\"Edit comment\"],\"rK_KGj\":[\"Optional horizontal groups for this board. Names can change; cards stay mapped by row ID.\"],\"rRubBJ\":[\"Lane details\"],\"rT-mCe\":[\"Remove filter: \",[\"0\"]],\"rdUucN\":[\"Preview\"],\"rn2_2V\":[\"Remove filter\"],\"rvpMpc\":[\"Manage statuses\"],\"sCzmvQ\":[\"cards\"],\"sQpDn6\":[\"Exit fullscreen\"],\"sujToP\":[\"Parent\"],\"tF-_sn\":[[\"cardCount\",\"plural\",{\"one\":[\"#\",\" card\"],\"other\":[\"#\",\" cards\"]}]],\"tK2x9T\":[\"⚠ \",[\"0\"],\" Conflict\",[\"1\"],\" to Resolve\"],\"tYS8HY\":[\"Status columns stay available when they are used as columns or swimlanes.\"],\"t_YqKh\":[\"Remove\"],\"tfDRzk\":[\"Save\"],\"u2IprG\":[\"Card title (Enter to add, Esc to cancel)\"],\"u36sC2\":[\"Make rows editable\"],\"uAP6ov\":[\"Delete swimlane\"],\"uAQUqI\":[\"Status\"],\"uH1U8v\":[\"Manage swimlanes\"],\"uWPalN\":[\"Duplicate swimlane name \\\"\",[\"0\"],\"\\\". Names should be unique.\"],\"uaR_cz\":[[\"total\",\"plural\",{\"one\":[\"#\",\" card\"],\"other\":[\"#\",\" cards\"]}]],\"ucJg3u\":[\"Swimlane: Status\"],\"vIKvqQ\":[[\"missingCount\"],\" card(s) refer to deleted swimlanes.\"],\"vJvZPY\":[\"Assignee: \",[\"0\"]],\"vMTOsC\":[\"Make assignee swimlanes editable?\"],\"vfYjJ_\":[\"Copy failed.\"],\"w7E-FA\":[\"Unsafe link blocked: \",[\"url\"]],\"wGM_xy\":[\"Rows: Custom\"],\"w_Sphq\":[\"Attachments\"],\"wf6Djn\":[\"Italic (Ctrl+I)\"],\"wp-2ZK\":[\"Rows: Status\"],\"wtw-au\":[\"Set as done column\"],\"wwu18a\":[\"Icon\"],\"x52RAh\":[\"Blocked by \",[\"blockedCount\"],\" unfinished card(s)\"],\"xDsmP9\":[\"Agenda\"],\"xUOPoQ\":[\"Used by\"],\"xX5QVp\":[\"Choose another row, then update the cards first.\"],\"y1eoq1\":[\"Copy link\"],\"y9cj46\":[\"Group: Priority\"],\"yEbJGs\":[\"+ Add field\"],\"yYxB17\":[\"Clear all\"],\"ybGQtY\":[\"← Back to list\"],\"yjeGpt\":[\"Columns: Assignee\"],\"yz7wBu\":[\"Close\"],\"yzF66j\":[\"Link\"],\"zOc0vf\":[\"No icon\"],\"zga9sT\":[\"OK\"]}"), + zh: JSON.parse("{\"--lIxB\":[\"被阻塞于\"],\"-3Qbcm\":[\"优先级:\",[\"0\"]],\"-9kYEs\":[\"横向分组缺失的卡片\"],\"-X4ual\":[\"无优先级\"],\"-b7T3G\":[\"更新\"],\"-hwvgo\":[\"横向分组操作\"],\"02N8r0\":[\"筛选卡片\"],\"0cspe_\":[\"删除横向分组\"],\"0gvHNl\":[\"状态定义卡片工作流。可自由重命名或排序;卡片始终通过状态 ID 保持映射。\"],\"1718Q-\":[\"问题\"],\"1DBGsz\":[\"备注\"],\"1YABGm\":[\"链接 (Ctrl+K)\"],\"1hKEom\":[\"优先级\"],\"1iShX0\":[\"今天到期\"],\"1lWHP7\":[\"不安全\"],\"1nUGn5\":[\"添加状态\"],\"1xwZj_\":[\"上个月\"],\"23yqV0\":[\"显示受影响的卡片\"],\"2BPVq8\":[\"重新排序 \",[\"0\"]],\"2aEwT_\":[\"管理自定义横向分组\"],\"2wxgft\":[\"重命名\"],\"32TndD\":[\"被阻塞\"],\"3CIp19\":[\"未来 7 天\"],\"3CtQL6\":[\"选择另一个泳道,然后先更新卡片。\"],\"3Ib6FN\":[\"下移\"],\"3qkggm\":[\"全屏\"],\"4NY8B5\":[\"将创建的泳道\"],\"4gdyen\":[\"本地(我的)\"],\"4hJhzz\":[\"表格\"],\"4t8aKB\":[\"将创建的横向分组\"],\"54sFiP\":[\"flowchart TD\\n A[开始] --> B[结束]\"],\"5Oy0YM\":[\"标签:\",[\"0\"]],\"5Q_DQ6\":[\"行内代码\"],\"66g_UW\":[\"折叠已解决话题\"],\"6G3KzD\":[\"横向分组详情\"],\"6V3Ea3\":[\"已复制\"],\"6YtxFj\":[\"名称\"],\"6buwPb\":[\"看板设置\"],\"79Yvzu\":[\"泳道名称\"],\"7MGAQC\":[\"JType 会复用现有横向分组 ID,并继续完成尚未结束的卡片更新。\"],\"7VpPHA\":[\"确认\"],\"7dZyQU\":[\"原泳道已不存在\"],\"7pBic4\":[\"显示 \",[\"visibleCount\"],\"/\",[\"totalCount\"],\" 张卡片\"],\"7s3WlU\":[\"阻塞\"],\"8PifYj\":[\"Mermaid 图表\"],\"8Tg_JR\":[\"自定义\"],\"8enUYo\":[\"设置状态\"],\"8hSn0h\":[\"结果(可编辑)\"],\"8lE269\":[\"排序:手动\"],\"9L7ptC\":[\"此空横向分组将从看板中移除。\"],\"9OEgyT\":[\"添加回应\"],\"9OH3W0\":[\"解决话题\"],\"9YTdO7\":[\"被阻塞的卡片\"],\"9gx7rl\":[\"有 \",[\"missingCount\"],\" 张卡片引用了已删除的横向分组。\"],\"9gxam6\":[\"无法渲染此 Draw.io 图表。\"],\"AC9Gkf\":[\"展开列\"],\"ANe5kn\":[\"正在更新卡片…\"],\"AS5WO9\":[\"无法渲染此 PDF。\"],\"ATIq3Z\":[\"泳道:自定义\"],\"AVreQ5\":[\"拖动调整宽度\"],\"AgvHni\":[\"添加列\"],\"AjVXBS\":[\"日历\"],\"AoHpbt\":[\"显示泳道缺失的卡片\"],\"AxAubu\":[\"分组:负责人\"],\"B5TUF-\":[\"优先级…\"],\"BfMZ7w\":[\"接受云端\"],\"BiWlsk\":[\"状态…\"],\"BnmEvM\":[\"存为模板\"],\"C6-ZRl\":[\"某人\"],\"CXTDT_\":[\"继续泳道转换?\"],\"CxcMyt\":[\"已将 \",[\"0\"],\" 移到第 \",[\"1\"],\" 位,共 \",[\"2\"],\" 项。\"],\"DGEEOQ\":[\"泳道操作\"],\"DPfwMq\":[\"完成\"],\"Db4W3_\":[\"状态\"],\"EWPtMO\":[\"代码\"],\"EbMPZJ\":[\"未分配\"],\"F6osRA\":[\"有 \",[\"danglingCount\"],\" 张卡片引用了已删除的横向分组。\"],\"FBIuPX\":[\"清除选择\"],\"FQylcT\":[\"泳道:缺失\"],\"G4qrLy\":[\"取消完成列\"],\"GKu3m4\":[\"暂无标签\"],\"GL6e_U\":[\"当前有 \",[\"cardCount\"],\" 张卡片使用此横向分组。\"],\"Gpfctt\":[\"截止日期\"],\"HTKRVa\":[\"请勿关闭此对话框。\"],\"H_SQFv\":[\"无颜色\"],\"HajiZl\":[\"月\"],\"HrmW6B\":[\"添加评论…(支持 Markdown)\"],\"I6SWEy\":[\"分栏\"],\"ICip_B\":[\"云端(远程)\"],\"IdMoS6\":[\"创建第一条泳道\"],\"Ik60OC\":[\"在编辑器中打开\"],\"ImOQa9\":[\"回复\"],\"IqKCNQ\":[\"横向分组\"],\"Iw6WJa\":[\"设置 WIP 限制\"],\"JTYvAw\":[\"搜索卡片\"],\"KAlhe_\":[\"卡片更新未能持久化,转换已停止。请刷新后重试。\"],\"KCszT6\":[\"添加泳道\"],\"KFiYGY\":[\"更改颜色\"],\"KGi3u9\":[\"拖动以重新排序\"],\"K_F6pa\":[\"保存中…\"],\"K_cST0\":[\"继续转换横向分组?\"],\"Kd6eg7\":[\"正在移动卡片…\"],\"KeYrQ5\":[\"撤回你的回应\"],\"KjXDqG\":[\"泳道:无\"],\"KmydK6\":[\"粗体\"],\"KpnwJK\":[\"删除“\",[\"0\"],\"”?\"],\"KvW1VO\":[\"Draw.io 图表\"],\"LQn6-8\":[\"接受本地\"],\"Ld9MtR\":[\"横向分组:负责人\"],\"MHrjPM\":[\"标题\"],\"MYx830\":[\"此空泳道将从看板中移除。\"],\"Mm72la\":[\"暂无评论\"],\"MmYpxT\":[\"回复…\"],\"NBdIgR\":[\"评论\"],\"NYTPDY\":[\"移动卡片并删除\"],\"NnxWLJ\":[\"创建第一个自定义横向分组\"],\"O6H89R\":[\"已解决\"],\"ONWvwQ\":[\"上传\"],\"OR4WQZ\":[\"+ 添加子卡片\"],\"OYHzN1\":[\"标签\"],\"OepdfE\":[\"分组:状态\"],\"P5cvAA\":[\"状态名称\"],\"PM7yYy\":[\"横向分组 ID\"],\"PUeYA1\":[\"创建可编辑泳道\"],\"Pvpx7b\":[\"粘贴 URL 或路径\"],\"Q2mGA7\":[\"清除筛选\"],\"QD8opX\":[\"看板\"],\"QlsPZy\":[\"输入 Mermaid 语法以查看图表。\"],\"QmZYQP\":[\"取消解决\"],\"QyioBP\":[\"上移\"],\"RbsNko\":[\"当前有 \",[\"cardCount\"],\" 张卡片使用此泳道。\"],\"RfEZH1\":[\"JType 将根据当前负责人行创建独立泳道。卡片的负责人值不会改变。\"],\"RgO4DX\":[\"泳道 ID“\",[\"0\"],\"”重复。将使用第一条定义。\"],\"RlLl3G\":[[\"0\"],\" 的操作\"],\"RnplaY\":[[\"0\"],\" 的横向分组详情\"],\"S5Qbb1\":[\"用逗号分隔\"],\"SavliD\":[\"有 \",[\"danglingCount\"],\" 张卡片引用了已删除的泳道。\"],\"T_nAzC\":[\"JType 将复用现有泳道 ID,并继续未完成的卡片更新。\"],\"TdfEV7\":[\"归档\"],\"Th4mIx\":[[\"0\"],\" 的泳道详情\"],\"U0hizX\":[\"泳道颜色\"],\"U95P80\":[\"将优先级横向分组转为可编辑?\"],\"UDb2YD\":[\"回应\"],\"UQOvxZ\":[\"空白卡片\"],\"URmyfc\":[\"详情\"],\"Ubl2by\":[\"右移\"],\"VNa_N2\":[\"暂不支持预览此文件类型。\"],\"VXh9CK\":[\"无截止日期\"],\"VbyRUy\":[\"评论\"],\"WEYdDv\":[\"推荐\"],\"WSP6v1\":[\"排序:优先级\"],\"WWUwTb\":[\"将负责人横向分组转为可编辑?\"],\"X03-eC\":[\"请输入内容。\"],\"XJOV1Y\":[\"活动\"],\"XicmhT\":[\"截止日期\"],\"XklovM\":[\"正在处理…\"],\"Y8bR2a\":[\"仅删除泳道。卡片引用仍可恢复。\"],\"YDa2KG\":[\"我的卡片\"],\"YFdnVT\":[\"卡片状态\"],\"YHjvGb\":[\"状态操作\"],\"YNYued\":[\"状态 ID\"],\"Ya7bZl\":[\"图表错误\"],\"Zot9XS\":[\"暂无卡片\"],\"_5CsXX\":[\"完成列\"],\"_EsjyQ\":[\"使用此版本\"],\"_TJomP\":[\"删除前移动卡片\"],\"_YbTQZ\":[\"JType 将根据当前优先级行创建独立泳道。卡片的优先级值不会改变。\"],\"_kh61D\":[\"显示横向分组缺失的卡片\"],\"_laW0t\":[\"原横向分组已缺失\"],\"a6uhHr\":[\"粗体 (Ctrl+B)\"],\"aDvLhk\":[\"添加评论…\"],\"abUZlY\":[\"添加详情...\"],\"agOeRN\":[\"无法渲染此 API 规范。\"],\"b4hVKD\":[\"彩色列\"],\"bwOqWD\":[[\"1\"],\" 张子卡中已完成 \",[\"0\"],\" 张\"],\"by_svU\":[\"将卡片保留在未分配\"],\"bzjBcL\":[\"子卡片\"],\"c-EXz1\":[\"仅删除横向分组。卡片引用仍可恢复。\"],\"c61_Lv\":[\"泳道 ID\"],\"cJ44lA\":[\"未排期\"],\"cSev-j\":[\"筛选\"],\"cUt8yN\":[\"更改会自动保存。\"],\"ceQmqN\":[\"自定义横向分组\"],\"cfaWH-\":[\"添加标签\"],\"cnGeoo\":[\"删除\"],\"d-F6q9\":[\"创建\"],\"d5z6xQ\":[\"WIP 限制 \",[\"0\"]],\"dEgA5A\":[\"取消\"],\"dQva-y\":[\"横向分组 ID“\",[\"0\"],\"”重复。将使用第一条定义。\"],\"ddrz1m\":[\"已逾期\"],\"eAi4RE\":[\"JType 会根据当前优先级分组创建独立的自定义横向分组。卡片的优先级不会改变。\"],\"ecUA8p\":[\"今天\"],\"euc6Ns\":[\"复制卡片\"],\"fEqHZq\":[\"打开子卡片\"],\"fFAIng\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 张卡片\"],\"other\":[\"#\",\" 张卡片\"]}]],\"fOluHh\":[\"JType 会根据当前负责人分组创建独立的自定义横向分组。卡片的负责人不会改变。\"],\"fVlS4-\":[\"泳道\"],\"fYcKtB\":[\"排序:截止\"],\"fdEjOR\":[\"复制横向分组 ID\"],\"fvImQM\":[\"已选择 \",[\"0\"],\" 项\"],\"fwTn8F\":[\"横向分组颜色\"],\"g8JmSC\":[\"下个月\"],\"gANddk\":[\"上传中…\"],\"gLDJuJ\":[\"未命名卡片\"],\"guQk4e\":[\"列:状态\"],\"gzZWjO\":[\"没有可转换的已分配值。\"],\"h8DugX\":[\"标签\"],\"hL5-_P\":[\"横向分组\"],\"hNQgyI\":[\"列:优先级\"],\"hNmOZ7\":[\"设置优先级\"],\"he3ygx\":[\"复制\"],\"hh4sEG\":[\"相关\"],\"hnK1gR\":[\"PDF 文档\"],\"hyVzII\":[\"泳道\"],\"i4_LY_\":[\"写作\"],\"iSLA_r\":[\"左移\"],\"iTylMl\":[\"模板\"],\"iYVqZq\":[\"列名称\"],\"jUbC3Z\":[\"泳道:优先级\"],\"jZlrte\":[\"颜色\"],\"jzy1b8\":[\"将泳道转为可编辑\"],\"k4b5_X\":[\"已编辑\"],\"kBRFD0\":[\"创建可编辑横向分组\"],\"kMqzL_\":[\"横向分组名称\"],\"kZlRKE\":[\"Mermaid 源码\"],\"kryGs-\":[\"卡片\"],\"lCF0wC\":[\"刷新\"],\"lEQWoB\":[\"添加稳定的横向分组,即使没有卡片也会保持显示。\"],\"lHxVTh\":[\"泳道:负责人\"],\"lUeOk0\":[\"此看板的横向分组。名称可以更改,卡片映射会保持关联。\"],\"l_g7se\":[\"继续转换\"],\"lqoy3F\":[\"横向分组缺失\"],\"lt2UOc\":[\"横向分组:无\"],\"ltF1xa\":[\"保存合并结果\"],\"m16xKo\":[\"添加\"],\"mPINe9\":[\"横向分组名称“\",[\"0\"],\"”重复。名称应保持唯一。\"],\"nabda1\":[\"删除卡片\"],\"nfhh60\":[\"将优先级泳道转为可编辑?\"],\"njJFtc\":[\"删除评论\"],\"o7J4JM\":[\"筛选\"],\"o8va6N\":[\"恢复\"],\"obId50\":[\"筛选,已启用 \",[\"activeCount\"],\" 项\"],\"ojKCLU\":[\"负责人\"],\"p4rTvq\":[\"横向分组:优先级\"],\"p9yTeb\":[\"排序:标题\"],\"pKKcSl\":[\"显示已解决话题\"],\"pKztsX\":[\"在完整编辑器中打开\"],\"pdVZUg\":[\"在制品 \",[\"0\"]],\"pnrmSP\":[\"新建卡片\"],\"pwN6Ae\":[\"折叠列\"],\"pzutoc\":[\"斜体\"],\"qZd_ph\":[\"添加横向分组\"],\"qpGDiV\":[\"复制泳道 ID\"],\"rF8SEQ\":[\"编辑评论\"],\"rK_KGj\":[\"看板的可选横向分组。名称可以修改,卡片仍通过横向分组 ID 保持映射。\"],\"rRubBJ\":[\"泳道详情\"],\"rT-mCe\":[\"移除筛选:\",[\"0\"]],\"rdUucN\":[\"预览\"],\"rn2_2V\":[\"移除筛选\"],\"rvpMpc\":[\"管理状态\"],\"sCzmvQ\":[\"张卡片\"],\"sQpDn6\":[\"退出全屏\"],\"sujToP\":[\"父卡片\"],\"tF-_sn\":[[\"cardCount\",\"plural\",{\"one\":[\"#\",\" 张卡片\"],\"other\":[\"#\",\" 张卡片\"]}]],\"tK2x9T\":[\"⚠ \",[\"0\"],\" 个冲突\",[\"1\"],\"待解决\"],\"tYS8HY\":[\"无论作为列还是泳道使用,状态列都可以继续管理。\"],\"t_YqKh\":[\"移除\"],\"tfDRzk\":[\"保存\"],\"u2IprG\":[\"卡片标题(回车添加,Esc 取消)\"],\"u36sC2\":[\"转为可编辑横向分组\"],\"uAP6ov\":[\"删除泳道\"],\"uAQUqI\":[\"状态\"],\"uH1U8v\":[\"管理泳道\"],\"uWPalN\":[\"泳道名称“\",[\"0\"],\"”重复。名称应保持唯一。\"],\"uaR_cz\":[[\"total\",\"plural\",{\"one\":[\"#\",\" 张卡片\"],\"other\":[\"#\",\" 张卡片\"]}]],\"ucJg3u\":[\"泳道:状态\"],\"vIKvqQ\":[\"有 \",[\"missingCount\"],\" 张卡片引用了已删除的泳道。\"],\"vJvZPY\":[\"负责人:\",[\"0\"]],\"vMTOsC\":[\"将负责人泳道转为可编辑?\"],\"vfYjJ_\":[\"复制失败。\"],\"w7E-FA\":[\"已拦截不安全链接:\",[\"url\"]],\"wGM_xy\":[\"横向分组:自定义\"],\"w_Sphq\":[\"附件\"],\"wf6Djn\":[\"斜体 (Ctrl+I)\"],\"wp-2ZK\":[\"横向分组:状态\"],\"wtw-au\":[\"设为完成列\"],\"wwu18a\":[\"图标\"],\"x52RAh\":[\"被 \",[\"blockedCount\"],\" 张未完成卡片阻塞\"],\"xDsmP9\":[\"日程\"],\"xUOPoQ\":[\"使用情况\"],\"xX5QVp\":[\"选择另一个横向分组,然后先更新卡片。\"],\"y1eoq1\":[\"复制链接\"],\"y9cj46\":[\"分组:优先级\"],\"yEbJGs\":[\"+ 添加字段\"],\"yYxB17\":[\"清除全部\"],\"ybGQtY\":[\"← 返回列表\"],\"yjeGpt\":[\"列:负责人\"],\"yz7wBu\":[\"关闭\"],\"yzF66j\":[\"链接\"],\"zOc0vf\":[\"无图标\"],\"zga9sT\":[\"确定\"]}"), + ja: JSON.parse("{\"--lIxB\":[\"Blocked by\"],\"-3Qbcm\":[\"Priority: \",[\"0\"]],\"-9kYEs\":[\"Cards with a missing row\"],\"-X4ual\":[\"No priority\"],\"-b7T3G\":[\"Updated\"],\"-hwvgo\":[\"Row actions\"],\"02N8r0\":[\"Filter cards\"],\"0cspe_\":[\"Delete row\"],\"0gvHNl\":[\"Statuses define the card workflow. Rename or reorder them freely; cards stay mapped by status ID.\"],\"1718Q-\":[\"問題\"],\"1DBGsz\":[\"ノート\"],\"1YABGm\":[\"リンク (Ctrl+K)\"],\"1hKEom\":[\"優先度\"],\"1iShX0\":[\"Due today\"],\"1lWHP7\":[\"unsafe\"],\"1nUGn5\":[\"ステータスを追加\"],\"1xwZj_\":[\"Previous month\"],\"23yqV0\":[\"影響を受けるカードを表示\"],\"2BPVq8\":[[\"0\"],\"を並べ替え\"],\"2aEwT_\":[\"Manage custom rows\"],\"2wxgft\":[\"名前を変更\"],\"32TndD\":[\"Blocked\"],\"3CIp19\":[\"Next 7 days\"],\"3CtQL6\":[\"別のスイムレーンを選び、先にカードを更新します。\"],\"3Ib6FN\":[\"下へ移動\"],\"3qkggm\":[\"全画面表示\"],\"4NY8B5\":[\"作成するスイムレーン\"],\"4gdyen\":[\"ローカル(自分の)\"],\"4hJhzz\":[\"表\"],\"4t8aKB\":[\"Rows to create\"],\"54sFiP\":[\"flowchart TD\\n A[開始] --> B[終了]\"],\"5Oy0YM\":[\"Labels: \",[\"0\"]],\"5Q_DQ6\":[\"インラインコード\"],\"66g_UW\":[\"Collapse resolved thread\"],\"6G3KzD\":[\"Row details\"],\"6V3Ea3\":[\"コピーしました\"],\"6YtxFj\":[\"名前\"],\"6buwPb\":[\"Board settings\"],\"79Yvzu\":[\"スイムレーン名\"],\"7MGAQC\":[\"JType will reuse the existing row IDs and continue unfinished card updates.\"],\"7VpPHA\":[\"確認\"],\"7dZyQU\":[\"以前のスイムレーンが見つかりません\"],\"7pBic4\":[[\"visibleCount\"],\" of \",[\"totalCount\"],\" cards shown\"],\"7s3WlU\":[\"Blocks\"],\"8PifYj\":[\"Mermaid 図\"],\"8Tg_JR\":[\"カスタム\"],\"8enUYo\":[\"Set status\"],\"8hSn0h\":[\"結果(編集可能)\"],\"8lE269\":[\"並べ替え:手動\"],\"9L7ptC\":[\"This empty row will be removed from the board.\"],\"9OEgyT\":[\"Add reaction\"],\"9OH3W0\":[\"Resolve thread\"],\"9YTdO7\":[\"Blocked cards\"],\"9gx7rl\":[[\"missingCount\"],\" card(s) refer to deleted rows.\"],\"9gxam6\":[\"この Draw.io 図をレンダリングできませんでした。\"],\"AC9Gkf\":[\"列を展開\"],\"ANe5kn\":[\"カードを更新中…\"],\"AS5WO9\":[\"この PDF をレンダリングできませんでした。\"],\"ATIq3Z\":[\"スイムレーン:カスタム\"],\"AVreQ5\":[\"ドラッグしてサイズ変更\"],\"AgvHni\":[\"列を追加\"],\"AjVXBS\":[\"Calendar\"],\"AoHpbt\":[\"スイムレーンが見つからないカードを表示\"],\"AxAubu\":[\"グループ:担当者\"],\"B5TUF-\":[\"Priority…\"],\"BfMZ7w\":[\"クラウドを採用\"],\"BiWlsk\":[\"Status…\"],\"BnmEvM\":[\"テンプレートとして保存\"],\"C6-ZRl\":[\"Someone\"],\"CXTDT_\":[\"スイムレーンの変換を再開しますか?\"],\"CxcMyt\":[[\"0\"],\"を\",[\"2\"],\"件中\",[\"1\"],\"番目に移動しました。\"],\"DGEEOQ\":[\"スイムレーンの操作\"],\"DPfwMq\":[\"完了\"],\"Db4W3_\":[\"ステータス\"],\"EWPtMO\":[\"コード\"],\"EbMPZJ\":[\"未割り当て\"],\"F6osRA\":[[\"danglingCount\"],\" card(s) refer to deleted rows.\"],\"FBIuPX\":[\"Clear selection\"],\"FQylcT\":[\"スイムレーン:不明\"],\"G4qrLy\":[\"完了列を解除\"],\"GKu3m4\":[\"ラベルなし\"],\"GL6e_U\":[[\"cardCount\"],\" card(s) currently use this row.\"],\"Gpfctt\":[\"期限\"],\"HTKRVa\":[\"このダイアログを閉じないでください。\"],\"H_SQFv\":[\"色なし\"],\"HajiZl\":[\"Month\"],\"HrmW6B\":[\"Add a comment… (Markdown supported)\"],\"I6SWEy\":[\"分割\"],\"ICip_B\":[\"クラウド(リモート)\"],\"IdMoS6\":[\"最初のスイムレーンを作成\"],\"Ik60OC\":[\"エディターで開く\"],\"ImOQa9\":[\"Reply\"],\"IqKCNQ\":[\"Row\"],\"Iw6WJa\":[\"WIP 制限を設定\"],\"JTYvAw\":[\"カードを検索\"],\"KAlhe_\":[\"カードの更新が保存されなかったため、変換を停止しました。更新して再試行してください。\"],\"KCszT6\":[\"スイムレーンを追加\"],\"KFiYGY\":[\"色を変更\"],\"KGi3u9\":[\"ドラッグして並べ替え\"],\"K_F6pa\":[\"保存中…\"],\"K_cST0\":[\"Resume row conversion?\"],\"Kd6eg7\":[\"カードを移動中…\"],\"KeYrQ5\":[\"Remove your reaction\"],\"KjXDqG\":[\"Swimlane: None\"],\"KmydK6\":[\"太字\"],\"KpnwJK\":[\"「\",[\"0\"],\"」を削除しますか?\"],\"KvW1VO\":[\"Draw.io 図\"],\"LQn6-8\":[\"ローカルを採用\"],\"Ld9MtR\":[\"Rows: Assignee\"],\"MHrjPM\":[\"タイトル\"],\"MYx830\":[\"この空のスイムレーンをボードから削除します。\"],\"Mm72la\":[\"No comments yet\"],\"MmYpxT\":[\"Reply…\"],\"NBdIgR\":[\"Comment\"],\"NYTPDY\":[\"カードを移動して削除\"],\"NnxWLJ\":[\"Create your first custom row\"],\"O6H89R\":[\"Resolved\"],\"ONWvwQ\":[\"Upload\"],\"OR4WQZ\":[\"+ Add sub-card\"],\"OYHzN1\":[\"タグ\"],\"OepdfE\":[\"グループ:ステータス\"],\"P5cvAA\":[\"ステータス名\"],\"PM7yYy\":[\"Row ID\"],\"PUeYA1\":[\"編集可能なスイムレーンを作成\"],\"Pvpx7b\":[\"Paste a URL or path\"],\"Q2mGA7\":[\"フィルターをクリア\"],\"QD8opX\":[\"ボード\"],\"QlsPZy\":[\"Mermaid 構文を書くと図が表示されます。\"],\"QmZYQP\":[\"Unresolve thread\"],\"QyioBP\":[\"上へ移動\"],\"RbsNko\":[\"現在\",[\"cardCount\"],\"枚のカードがこのスイムレーンを使用しています。\"],\"RfEZH1\":[\"JType は現在の担当者行から独立したスイムレーンを作成します。カードの担当者は変更されません。\"],\"RgO4DX\":[\"スイムレーン ID「\",[\"0\"],\"」が重複しています。最初の定義を使用します。\"],\"RlLl3G\":[[\"0\"],\"の操作\"],\"RnplaY\":[\"Row details for \",[\"0\"]],\"S5Qbb1\":[\"カンマ区切り\"],\"SavliD\":[[\"danglingCount\"],\"枚のカードが削除済みのスイムレーンを参照しています。\"],\"T_nAzC\":[\"JType は既存のスイムレーン ID を再利用し、未完了のカード更新を続行します。\"],\"TdfEV7\":[\"Archived\"],\"Th4mIx\":[[\"0\"],\" のレーン詳細\"],\"U0hizX\":[\"スイムレーンの色\"],\"U95P80\":[\"Make priority rows editable?\"],\"UDb2YD\":[\"React\"],\"UQOvxZ\":[\"空のカード\"],\"URmyfc\":[\"詳細\"],\"Ubl2by\":[\"右へ移動\"],\"VNa_N2\":[\"このファイル形式はまだプレビューできません。\"],\"VXh9CK\":[\"No due date\"],\"VbyRUy\":[\"Comments\"],\"WEYdDv\":[\"推奨\"],\"WSP6v1\":[\"並べ替え:優先度\"],\"WWUwTb\":[\"Make assignee rows editable?\"],\"X03-eC\":[\"値を入力してください。\"],\"XJOV1Y\":[\"Activity\"],\"XicmhT\":[\"Due date\"],\"XklovM\":[\"処理中…\"],\"Y8bR2a\":[\"スイムレーンだけを削除します。カードの参照は復元できます。\"],\"YDa2KG\":[\"My cards\"],\"YFdnVT\":[\"Card state\"],\"YHjvGb\":[\"ステータスの操作\"],\"YNYued\":[\"Status ID\"],\"Ya7bZl\":[\"図のエラー\"],\"Zot9XS\":[\"カードなし\"],\"_5CsXX\":[\"完了列\"],\"_EsjyQ\":[\"これを使用\"],\"_TJomP\":[\"削除前にカードを移動\"],\"_YbTQZ\":[\"JType は現在の優先度行から独立したスイムレーンを作成します。カードの優先度は変更されません。\"],\"_kh61D\":[\"Show cards with missing rows\"],\"_laW0t\":[\"Previous row missing\"],\"a6uhHr\":[\"太字 (Ctrl+B)\"],\"aDvLhk\":[\"Add a comment…\"],\"abUZlY\":[\"詳細を追加...\"],\"agOeRN\":[\"この API 仕様をレンダリングできませんでした。\"],\"b4hVKD\":[\"色付き列\"],\"bwOqWD\":[[\"0\"],\" of \",[\"1\"],\" sub-cards done\"],\"by_svU\":[\"カードを未割り当てに残す\"],\"bzjBcL\":[\"Sub-cards\"],\"c-EXz1\":[\"Delete only the row. Card references remain recoverable.\"],\"c61_Lv\":[\"スイムレーン ID\"],\"cJ44lA\":[\"Unscheduled\"],\"cSev-j\":[\"Filters\"],\"cUt8yN\":[\"変更は自動的に保存されます。\"],\"ceQmqN\":[\"Custom rows\"],\"cfaWH-\":[\"ラベルを追加\"],\"cnGeoo\":[\"削除\"],\"d-F6q9\":[\"Created\"],\"d5z6xQ\":[\"WIP 制限 \",[\"0\"]],\"dEgA5A\":[\"キャンセル\"],\"dQva-y\":[\"Duplicate row ID \\\"\",[\"0\"],\"\\\". The first definition is used.\"],\"ddrz1m\":[\"Overdue\"],\"eAi4RE\":[\"JType will create independent custom rows from the current priority groups. Card priority values will stay unchanged.\"],\"ecUA8p\":[\"Today\"],\"euc6Ns\":[\"複製\"],\"fEqHZq\":[\"Open sub-card\"],\"fFAIng\":[[\"0\",\"plural\",{\"one\":[\"#\",\" 件のカード\"],\"other\":[\"#\",\" 件のカード\"]}]],\"fOluHh\":[\"JType will create independent custom rows from the current assignee groups. Card assignee values will stay unchanged.\"],\"fVlS4-\":[\"スイムレーン\"],\"fYcKtB\":[\"並べ替え:期限\"],\"fdEjOR\":[\"Copy row ID\"],\"fvImQM\":[[\"0\"],\" selected\"],\"fwTn8F\":[\"Row color\"],\"g8JmSC\":[\"Next month\"],\"gANddk\":[\"Uploading…\"],\"gLDJuJ\":[\"無題のカード\"],\"guQk4e\":[\"Columns: Status\"],\"gzZWjO\":[\"変換できる割り当て済みの値がありません。\"],\"h8DugX\":[\"Labels\"],\"hL5-_P\":[\"Rows\"],\"hNQgyI\":[\"Columns: Priority\"],\"hNmOZ7\":[\"Set priority\"],\"he3ygx\":[\"コピー\"],\"hh4sEG\":[\"Relates\"],\"hnK1gR\":[\"PDF ドキュメント\"],\"hyVzII\":[\"スイムレーン\"],\"i4_LY_\":[\"記述\"],\"iSLA_r\":[\"左へ移動\"],\"iTylMl\":[\"テンプレート\"],\"iYVqZq\":[\"列名\"],\"jUbC3Z\":[\"Swimlane: Priority\"],\"jZlrte\":[\"カラー\"],\"jzy1b8\":[\"スイムレーンを編集可能にする\"],\"k4b5_X\":[\"edited\"],\"kBRFD0\":[\"Create editable rows\"],\"kMqzL_\":[\"Row name\"],\"kZlRKE\":[\"Mermaid ソース\"],\"kryGs-\":[\"カード\"],\"lCF0wC\":[\"更新\"],\"lEQWoB\":[\"カードがなくても表示され続ける横方向のグループを追加します。\"],\"lHxVTh\":[\"Swimlane: Assignee\"],\"lUeOk0\":[\"このボードの横方向グループです。名前を変更しても、カードの関連付けは維持されます。\"],\"l_g7se\":[\"変換を再開\"],\"lqoy3F\":[\"Missing row\"],\"lt2UOc\":[\"Rows: None\"],\"ltF1xa\":[\"マージ結果を保存\"],\"m16xKo\":[\"追加\"],\"mPINe9\":[\"Duplicate row name \\\"\",[\"0\"],\"\\\". Names should be unique.\"],\"nabda1\":[\"カードを削除\"],\"nfhh60\":[\"優先度スイムレーンを編集可能にしますか?\"],\"njJFtc\":[\"Delete comment\"],\"o7J4JM\":[\"フィルター\"],\"o8va6N\":[\"Restored\"],\"obId50\":[\"Filters, \",[\"activeCount\"],\" active\"],\"ojKCLU\":[\"担当者\"],\"p4rTvq\":[\"Rows: Priority\"],\"p9yTeb\":[\"並べ替え:タイトル\"],\"pKKcSl\":[\"Show resolved thread\"],\"pKztsX\":[\"フルエディターで開く\"],\"pdVZUg\":[\"WIP \",[\"0\"]],\"pnrmSP\":[\"新規カード\"],\"pwN6Ae\":[\"列を折りたたむ\"],\"pzutoc\":[\"イタリック\"],\"qZd_ph\":[\"Add row\"],\"qpGDiV\":[\"スイムレーン ID をコピー\"],\"rF8SEQ\":[\"Edit comment\"],\"rK_KGj\":[\"Optional horizontal groups for this board. Names can change; cards stay mapped by row ID.\"],\"rRubBJ\":[\"スイムレーンの詳細\"],\"rT-mCe\":[\"Remove filter: \",[\"0\"]],\"rdUucN\":[\"プレビュー\"],\"rn2_2V\":[\"Remove filter\"],\"rvpMpc\":[\"ステータスを管理\"],\"sCzmvQ\":[\"枚のカード\"],\"sQpDn6\":[\"全画面表示を終了\"],\"sujToP\":[\"Parent\"],\"tF-_sn\":[[\"cardCount\",\"plural\",{\"one\":[\"#\",\" 件のカード\"],\"other\":[\"#\",\" 件のカード\"]}]],\"tK2x9T\":[\"⚠ \",[\"0\"],\" 件の競合\",[\"1\"],\"を解決中\"],\"tYS8HY\":[\"ステータス列は、列またはスイムレーンとして使用中でも管理できます。\"],\"t_YqKh\":[\"Remove\"],\"tfDRzk\":[\"Save\"],\"u2IprG\":[\"カードのタイトル(Enter で追加、Esc でキャンセル)\"],\"u36sC2\":[\"Make rows editable\"],\"uAP6ov\":[\"スイムレーンを削除\"],\"uAQUqI\":[\"ステータス\"],\"uH1U8v\":[\"スイムレーンを管理\"],\"uWPalN\":[\"スイムレーン名「\",[\"0\"],\"」が重複しています。名前は一意にしてください。\"],\"uaR_cz\":[[\"total\",\"plural\",{\"one\":[\"#\",\" 件のカード\"],\"other\":[\"#\",\" 件のカード\"]}]],\"ucJg3u\":[\"Swimlane: Status\"],\"vIKvqQ\":[[\"missingCount\"],\"枚のカードが削除済みのスイムレーンを参照しています。\"],\"vJvZPY\":[\"Assignee: \",[\"0\"]],\"vMTOsC\":[\"担当者スイムレーンを編集可能にしますか?\"],\"vfYjJ_\":[\"コピーに失敗しました。\"],\"w7E-FA\":[\"Unsafe link blocked: \",[\"url\"]],\"wGM_xy\":[\"Rows: Custom\"],\"w_Sphq\":[\"Attachments\"],\"wf6Djn\":[\"イタリック (Ctrl+I)\"],\"wp-2ZK\":[\"Rows: Status\"],\"wtw-au\":[\"完了列に設定\"],\"wwu18a\":[\"アイコン\"],\"x52RAh\":[\"Blocked by \",[\"blockedCount\"],\" unfinished card(s)\"],\"xDsmP9\":[\"Agenda\"],\"xUOPoQ\":[\"使用状況\"],\"xX5QVp\":[\"Choose another row, then update the cards first.\"],\"y1eoq1\":[\"リンクをコピー\"],\"y9cj46\":[\"グループ:優先度\"],\"yEbJGs\":[\"+ Add field\"],\"yYxB17\":[\"Clear all\"],\"ybGQtY\":[\"← リストに戻る\"],\"yjeGpt\":[\"Columns: Assignee\"],\"yz7wBu\":[\"閉じる\"],\"yzF66j\":[\"リンク\"],\"zOc0vf\":[\"アイコンなし\"],\"zga9sT\":[\"OK\"]}"), + ko: JSON.parse("{\"--lIxB\":[\"Blocked by\"],\"-3Qbcm\":[\"Priority: \",[\"0\"]],\"-9kYEs\":[\"Cards with a missing row\"],\"-X4ual\":[\"No priority\"],\"-b7T3G\":[\"Updated\"],\"-hwvgo\":[\"Row actions\"],\"02N8r0\":[\"Filter cards\"],\"0cspe_\":[\"Delete row\"],\"0gvHNl\":[\"Statuses define the card workflow. Rename or reorder them freely; cards stay mapped by status ID.\"],\"1718Q-\":[\"Issues\"],\"1DBGsz\":[\"노트\"],\"1YABGm\":[\"링크 (Ctrl+K)\"],\"1hKEom\":[\"우선순위\"],\"1iShX0\":[\"Due today\"],\"1lWHP7\":[\"unsafe\"],\"1nUGn5\":[\"Add status\"],\"1xwZj_\":[\"Previous month\"],\"23yqV0\":[\"Show affected cards\"],\"2BPVq8\":[\"Reorder \",[\"0\"]],\"2aEwT_\":[\"Manage custom rows\"],\"2wxgft\":[\"이름 변경\"],\"32TndD\":[\"Blocked\"],\"3CIp19\":[\"Next 7 days\"],\"3CtQL6\":[\"Choose another swimlane, then update the cards first.\"],\"3Ib6FN\":[\"Move down\"],\"3qkggm\":[\"전체 화면\"],\"4NY8B5\":[\"Swimlanes to create\"],\"4gdyen\":[\"로컈 (내 것)\"],\"4hJhzz\":[\"테이블\"],\"4t8aKB\":[\"Rows to create\"],\"54sFiP\":[\"flowchart TD\\n A[시작] --> B[끝]\"],\"5Oy0YM\":[\"Labels: \",[\"0\"]],\"5Q_DQ6\":[\"인라인 코드\"],\"66g_UW\":[\"Collapse resolved thread\"],\"6G3KzD\":[\"Row details\"],\"6V3Ea3\":[\"Copied\"],\"6YtxFj\":[\"Name\"],\"6buwPb\":[\"Board settings\"],\"79Yvzu\":[\"Swimlane name\"],\"7MGAQC\":[\"JType will reuse the existing row IDs and continue unfinished card updates.\"],\"7VpPHA\":[\"확인\"],\"7dZyQU\":[\"Previous swimlane missing\"],\"7pBic4\":[[\"visibleCount\"],\" of \",[\"totalCount\"],\" cards shown\"],\"7s3WlU\":[\"Blocks\"],\"8PifYj\":[\"Mermaid 다이어그램\"],\"8Tg_JR\":[\"Custom\"],\"8enUYo\":[\"Set status\"],\"8hSn0h\":[\"결과 (편집 가능)\"],\"8lE269\":[\"정렬: 수동\"],\"9L7ptC\":[\"This empty row will be removed from the board.\"],\"9OEgyT\":[\"Add reaction\"],\"9OH3W0\":[\"Resolve thread\"],\"9YTdO7\":[\"Blocked cards\"],\"9gx7rl\":[[\"missingCount\"],\" card(s) refer to deleted rows.\"],\"9gxam6\":[\"이 Draw.io 다이어그램을 렌더링할 수 없습니다.\"],\"AC9Gkf\":[\"열 펼치기\"],\"ANe5kn\":[\"Updating cards…\"],\"AS5WO9\":[\"이 PDF를 렌더링할 수 없습니다.\"],\"ATIq3Z\":[\"Swimlane: Custom\"],\"AVreQ5\":[\"드래그하여 크기 조정\"],\"AgvHni\":[\"열 추가\"],\"AjVXBS\":[\"Calendar\"],\"AoHpbt\":[\"Show cards with missing swimlanes\"],\"AxAubu\":[\"그룹: 담당자\"],\"B5TUF-\":[\"Priority…\"],\"BfMZ7w\":[\"클라우드 수낙\"],\"BiWlsk\":[\"Status…\"],\"BnmEvM\":[\"템플릿으로 저장\"],\"C6-ZRl\":[\"Someone\"],\"CXTDT_\":[\"Resume swimlane conversion?\"],\"CxcMyt\":[[\"0\"],\" moved to position \",[\"1\"],\" of \",[\"2\"],\".\"],\"DGEEOQ\":[\"Swimlane actions\"],\"DPfwMq\":[\"Done\"],\"Db4W3_\":[\"Statuses\"],\"EWPtMO\":[\"코드\"],\"EbMPZJ\":[\"미할당\"],\"F6osRA\":[[\"danglingCount\"],\" card(s) refer to deleted rows.\"],\"FBIuPX\":[\"Clear selection\"],\"FQylcT\":[\"Swimlane: Missing\"],\"G4qrLy\":[\"완료 열 해제\"],\"GKu3m4\":[\"라벨 없음\"],\"GL6e_U\":[[\"cardCount\"],\" card(s) currently use this row.\"],\"Gpfctt\":[\"마감\"],\"HTKRVa\":[\"Do not close this dialog.\"],\"H_SQFv\":[\"색상 없음\"],\"HajiZl\":[\"Month\"],\"HrmW6B\":[\"Add a comment… (Markdown supported)\"],\"I6SWEy\":[\"스플릿\"],\"ICip_B\":[\"클라우드 (원격)\"],\"IdMoS6\":[\"Create your first swimlane\"],\"Ik60OC\":[\"에디터에서 열기\"],\"ImOQa9\":[\"Reply\"],\"IqKCNQ\":[\"Row\"],\"Iw6WJa\":[\"WIP 한도 설정\"],\"JTYvAw\":[\"카드 검색\"],\"KAlhe_\":[\"카드 업데이트가 저장되지 않아 변환을 중지했습니다. 새로 고친 후 다시 시도하세요.\"],\"KCszT6\":[\"Add swimlane\"],\"KFiYGY\":[\"Change color\"],\"KGi3u9\":[\"Drag to reorder\"],\"K_F6pa\":[\"저장 중…\"],\"K_cST0\":[\"Resume row conversion?\"],\"Kd6eg7\":[\"Moving cards…\"],\"KeYrQ5\":[\"Remove your reaction\"],\"KjXDqG\":[\"Swimlane: None\"],\"KmydK6\":[\"굵게\"],\"KpnwJK\":[\"Delete \\\"\",[\"0\"],\"\\\"?\"],\"KvW1VO\":[\"Draw.io 다이어그램\"],\"LQn6-8\":[\"로컈 수낙\"],\"Ld9MtR\":[\"Rows: Assignee\"],\"MHrjPM\":[\"제목\"],\"MYx830\":[\"This empty swimlane will be removed from the board.\"],\"Mm72la\":[\"No comments yet\"],\"MmYpxT\":[\"Reply…\"],\"NBdIgR\":[\"Comment\"],\"NYTPDY\":[\"Move cards and delete\"],\"NnxWLJ\":[\"Create your first custom row\"],\"O6H89R\":[\"Resolved\"],\"ONWvwQ\":[\"Upload\"],\"OR4WQZ\":[\"+ Add sub-card\"],\"OYHzN1\":[\"태그\"],\"OepdfE\":[\"그룹: 상태\"],\"P5cvAA\":[\"Status name\"],\"PM7yYy\":[\"Row ID\"],\"PUeYA1\":[\"Create editable swimlanes\"],\"Pvpx7b\":[\"Paste a URL or path\"],\"Q2mGA7\":[\"필터 지우기\"],\"QD8opX\":[\"보드\"],\"QlsPZy\":[\"Mermaid 구문을 작성하면 다이어그램이 표시됩니다.\"],\"QmZYQP\":[\"Unresolve thread\"],\"QyioBP\":[\"Move up\"],\"RbsNko\":[[\"cardCount\"],\" card(s) currently use this swimlane.\"],\"RfEZH1\":[\"JType will create independent swimlanes from the current assignee rows. Card assignee values will stay unchanged.\"],\"RgO4DX\":[\"Duplicate lane ID \\\"\",[\"0\"],\"\\\". The first definition is used.\"],\"RlLl3G\":[\"Actions for \",[\"0\"]],\"RnplaY\":[\"Row details for \",[\"0\"]],\"S5Qbb1\":[\"쉼표로 구분\"],\"SavliD\":[[\"danglingCount\"],\" card(s) refer to deleted swimlanes.\"],\"T_nAzC\":[\"JType will reuse the existing lane IDs and continue unfinished card updates.\"],\"TdfEV7\":[\"Archived\"],\"Th4mIx\":[[\"0\"],\" 레인 세부 정보\"],\"U0hizX\":[\"Swimlane color\"],\"U95P80\":[\"Make priority rows editable?\"],\"UDb2YD\":[\"React\"],\"UQOvxZ\":[\"빈 카드\"],\"URmyfc\":[\"Details\"],\"Ubl2by\":[\"Move right\"],\"VNa_N2\":[\"이 파일 형식은 아직 미리볼 수 없습니다.\"],\"VXh9CK\":[\"No due date\"],\"VbyRUy\":[\"Comments\"],\"WEYdDv\":[\"Recommended\"],\"WSP6v1\":[\"정렬: 우선순위\"],\"WWUwTb\":[\"Make assignee rows editable?\"],\"X03-eC\":[\"값을 입력해 주세요.\"],\"XJOV1Y\":[\"Activity\"],\"XicmhT\":[\"Due date\"],\"XklovM\":[\"Working…\"],\"Y8bR2a\":[\"Delete only the swimlane. Card references remain recoverable.\"],\"YDa2KG\":[\"My cards\"],\"YFdnVT\":[\"Card state\"],\"YHjvGb\":[\"Status actions\"],\"YNYued\":[\"Status ID\"],\"Ya7bZl\":[\"다이어그램 오류\"],\"Zot9XS\":[\"카드 없음\"],\"_5CsXX\":[\"완료 열\"],\"_EsjyQ\":[\"이것 사용\"],\"_TJomP\":[\"Move cards before deleting\"],\"_YbTQZ\":[\"JType will create independent swimlanes from the current priority rows. Card priority values will stay unchanged.\"],\"_kh61D\":[\"Show cards with missing rows\"],\"_laW0t\":[\"Previous row missing\"],\"a6uhHr\":[\"굵게 (Ctrl+B)\"],\"aDvLhk\":[\"Add a comment…\"],\"abUZlY\":[\"세부정보 추가...\"],\"agOeRN\":[\"이 API 명세를 렌더링할 수 없습니다.\"],\"b4hVKD\":[\"색상 열\"],\"bwOqWD\":[[\"0\"],\" of \",[\"1\"],\" sub-cards done\"],\"by_svU\":[\"Keep cards in Unassigned\"],\"bzjBcL\":[\"Sub-cards\"],\"c-EXz1\":[\"Delete only the row. Card references remain recoverable.\"],\"c61_Lv\":[\"Lane ID\"],\"cJ44lA\":[\"Unscheduled\"],\"cSev-j\":[\"Filters\"],\"cUt8yN\":[\"Changes save automatically.\"],\"ceQmqN\":[\"Custom rows\"],\"cfaWH-\":[\"라벨 추가\"],\"cnGeoo\":[\"삭제\"],\"d-F6q9\":[\"Created\"],\"d5z6xQ\":[\"WIP 한도 \",[\"0\"]],\"dEgA5A\":[\"취소\"],\"dQva-y\":[\"Duplicate row ID \\\"\",[\"0\"],\"\\\". The first definition is used.\"],\"ddrz1m\":[\"Overdue\"],\"eAi4RE\":[\"JType will create independent custom rows from the current priority groups. Card priority values will stay unchanged.\"],\"ecUA8p\":[\"Today\"],\"euc6Ns\":[\"복제\"],\"fEqHZq\":[\"Open sub-card\"],\"fFAIng\":[[\"0\",\"plural\",{\"one\":[\"카드 \",\"#\",\"개\"],\"other\":[\"카드 \",\"#\",\"개\"]}]],\"fOluHh\":[\"JType will create independent custom rows from the current assignee groups. Card assignee values will stay unchanged.\"],\"fVlS4-\":[\"Swimlane\"],\"fYcKtB\":[\"정렬: 마감\"],\"fdEjOR\":[\"Copy row ID\"],\"fvImQM\":[[\"0\"],\" selected\"],\"fwTn8F\":[\"Row color\"],\"g8JmSC\":[\"Next month\"],\"gANddk\":[\"Uploading…\"],\"gLDJuJ\":[\"제목 없는 카드\"],\"guQk4e\":[\"Columns: Status\"],\"gzZWjO\":[\"No assigned values to convert.\"],\"h8DugX\":[\"Labels\"],\"hL5-_P\":[\"Rows\"],\"hNQgyI\":[\"Columns: Priority\"],\"hNmOZ7\":[\"Set priority\"],\"he3ygx\":[\"Copy\"],\"hh4sEG\":[\"Relates\"],\"hnK1gR\":[\"PDF 문서\"],\"hyVzII\":[\"Swimlanes\"],\"i4_LY_\":[\"작성\"],\"iSLA_r\":[\"Move left\"],\"iTylMl\":[\"템플릿\"],\"iYVqZq\":[\"열 이름\"],\"jUbC3Z\":[\"Swimlane: Priority\"],\"jZlrte\":[\"색상\"],\"jzy1b8\":[\"Make swimlanes editable\"],\"k4b5_X\":[\"edited\"],\"kBRFD0\":[\"Create editable rows\"],\"kMqzL_\":[\"Row name\"],\"kZlRKE\":[\"Mermaid 소스\"],\"kryGs-\":[\"카드\"],\"lCF0wC\":[\"새로고침\"],\"lEQWoB\":[\"Add stable horizontal groups that stay visible even when they have no cards.\"],\"lHxVTh\":[\"Swimlane: Assignee\"],\"lUeOk0\":[\"Horizontal groups for this board. Names can change; card mapping stays attached.\"],\"l_g7se\":[\"Resume conversion\"],\"lqoy3F\":[\"Missing row\"],\"lt2UOc\":[\"Rows: None\"],\"ltF1xa\":[\"병합 결과 저장\"],\"m16xKo\":[\"Add\"],\"mPINe9\":[\"Duplicate row name \\\"\",[\"0\"],\"\\\". Names should be unique.\"],\"nabda1\":[\"카드 삭제\"],\"nfhh60\":[\"Make priority swimlanes editable?\"],\"njJFtc\":[\"Delete comment\"],\"o7J4JM\":[\"필터\"],\"o8va6N\":[\"Restored\"],\"obId50\":[\"Filters, \",[\"activeCount\"],\" active\"],\"ojKCLU\":[\"담당자\"],\"p4rTvq\":[\"Rows: Priority\"],\"p9yTeb\":[\"정렬: 제목\"],\"pKKcSl\":[\"Show resolved thread\"],\"pKztsX\":[\"전체 에디터에서 열기\"],\"pdVZUg\":[\"WIP \",[\"0\"]],\"pnrmSP\":[\"새 카드\"],\"pwN6Ae\":[\"열 접기\"],\"pzutoc\":[\"기울임꼴\"],\"qZd_ph\":[\"Add row\"],\"qpGDiV\":[\"Copy lane ID\"],\"rF8SEQ\":[\"Edit comment\"],\"rK_KGj\":[\"Optional horizontal groups for this board. Names can change; cards stay mapped by row ID.\"],\"rRubBJ\":[\"Lane details\"],\"rT-mCe\":[\"Remove filter: \",[\"0\"]],\"rdUucN\":[\"미리보기\"],\"rn2_2V\":[\"Remove filter\"],\"rvpMpc\":[\"Manage statuses\"],\"sCzmvQ\":[\"개 카드\"],\"sQpDn6\":[\"전체 화면 종료\"],\"sujToP\":[\"Parent\"],\"tF-_sn\":[[\"cardCount\",\"plural\",{\"one\":[\"카드 \",\"#\",\"개\"],\"other\":[\"카드 \",\"#\",\"개\"]}]],\"tK2x9T\":[\"⚠ 해결할 충돌 \",[\"0\"],\"건\",[\"1\"]],\"tYS8HY\":[\"Status columns stay available when they are used as columns or swimlanes.\"],\"t_YqKh\":[\"Remove\"],\"tfDRzk\":[\"Save\"],\"u2IprG\":[\"카드 제목 (Enter로 추가, Esc로 취소)\"],\"u36sC2\":[\"Make rows editable\"],\"uAP6ov\":[\"Delete swimlane\"],\"uAQUqI\":[\"상태\"],\"uH1U8v\":[\"Manage swimlanes\"],\"uWPalN\":[\"Duplicate swimlane name \\\"\",[\"0\"],\"\\\". Names should be unique.\"],\"uaR_cz\":[[\"total\",\"plural\",{\"one\":[\"카드 \",\"#\",\"개\"],\"other\":[\"카드 \",\"#\",\"개\"]}]],\"ucJg3u\":[\"Swimlane: Status\"],\"vIKvqQ\":[[\"missingCount\"],\" card(s) refer to deleted swimlanes.\"],\"vJvZPY\":[\"Assignee: \",[\"0\"]],\"vMTOsC\":[\"Make assignee swimlanes editable?\"],\"vfYjJ_\":[\"복사하지 못했습니다.\"],\"w7E-FA\":[\"Unsafe link blocked: \",[\"url\"]],\"wGM_xy\":[\"Rows: Custom\"],\"w_Sphq\":[\"Attachments\"],\"wf6Djn\":[\"기울임꼴 (Ctrl+I)\"],\"wp-2ZK\":[\"Rows: Status\"],\"wtw-au\":[\"완료 열로 설정\"],\"wwu18a\":[\"아이콘\"],\"x52RAh\":[\"Blocked by \",[\"blockedCount\"],\" unfinished card(s)\"],\"xDsmP9\":[\"Agenda\"],\"xUOPoQ\":[\"Used by\"],\"xX5QVp\":[\"Choose another row, then update the cards first.\"],\"y1eoq1\":[\"링크 복사\"],\"y9cj46\":[\"그룹: 우선순위\"],\"yEbJGs\":[\"+ Add field\"],\"yYxB17\":[\"Clear all\"],\"ybGQtY\":[\"← 목록으로\"],\"yjeGpt\":[\"Columns: Assignee\"],\"yz7wBu\":[\"닫기\"],\"yzF66j\":[\"링크\"],\"zOc0vf\":[\"아이콘 없음\"],\"zga9sT\":[\"확인\"]}") }; -function pm(e) { - B.load(e, fm[e] ?? fm.en), B.activate(e); +function km(e) { + V.load(e, Om[e] ?? Om.en), V.activate(e); } //#endregion //#region src/strings.ts -var mm = { +var Am = { en: { loading: "Loading board…", live: "Live", @@ -10904,7 +11212,7 @@ var mm = { close: "Close", cardReadOnlyHint: "Read-only card view", status: "Status", - swimlane: "Swimlane", + swimlane: "Row", unassigned: "Unassigned", priority: "Priority", assignee: "Assignee", @@ -10934,7 +11242,7 @@ var mm = { close: "关闭", cardReadOnlyHint: "只读卡片视图", status: "状态", - swimlane: "泳道", + swimlane: "横向分组", unassigned: "未分配", priority: "优先级", assignee: "负责人", @@ -10964,7 +11272,7 @@ var mm = { close: "閉じる", cardReadOnlyHint: "読み取り専用のカード表示", status: "ステータス", - swimlane: "スイムレーン", + swimlane: "行グループ", unassigned: "未割り当て", priority: "優先度", assignee: "担当者", @@ -10994,7 +11302,7 @@ var mm = { close: "닫기", cardReadOnlyHint: "읽기 전용 카드 보기", status: "상태", - swimlane: "스윔레인", + swimlane: "행 그룹", unassigned: "미할당", priority: "우선순위", assignee: "담당자", @@ -11015,56 +11323,56 @@ var mm = { errGeneric: (e) => `보드를 불러오지 못했습니다: ${e}` } }; -function hm(e) { - return mm[e] ?? mm.en; +function jm(e) { + return Am[e] ?? Am.en; } //#endregion //#region src/JTypeBoard.tsx -function gm() { +function Mm() { return Math.random().toString(36).slice(2, 6); } -function _m({ workspaceId: e, boardRef: t, baseUrl: n, token: r, client: i, readOnly: a = !1, live: o = !0, pollIntervalMs: s = 3e4, onCardOpen: c, onConnectionChange: l, locale: u, className: d, style: p }) { - let m = u ?? "en", h = hm(m), _ = v(null); - _.current !== m && (_.current = m, pm(m)); - let b = i && (n || r) ? h.errPropsBoth : !i && (!n || !r) ? h.errPropsNone : null, w = g(() => b ? null : i || tm({ +function Nm({ workspaceId: e, boardRef: t, baseUrl: n, token: r, client: i, readOnly: a = !1, currentUser: o, live: s = !0, pollIntervalMs: c = 3e4, onCardOpen: l, onConnectionChange: u, locale: d, className: p, style: m }) { + let h = d ?? "en", _ = jm(h), b = v(null); + b.current !== h && (b.current = h, km(h)); + let w = i && (n || r) ? _.errPropsBoth : !i && (!n || !r) ? _.errPropsNone : null, T = g(() => w ? null : i || _m({ baseUrl: n, token: r }), [ i, n, r, - b - ]), T = Math.max(5e3, s), [E, D] = y(null), [O, k] = y(""), [A, j] = y(""), [M, N] = y("polling"), [P, F] = y(null), [I, L] = y({}), R = v(null), te = v(/* @__PURE__ */ new Map()), z = v(null), ne = v(null), re = v(l); - re.current = l; - let ie = v(h); - ie.current = h; + w + ]), E = Math.max(5e3, c), [D, O] = y(null), [k, A] = y(""), [j, M] = y(""), [N, P] = y("polling"), [F, I] = y(null), [L, R] = y({}), z = v(null), B = v(/* @__PURE__ */ new Map()), te = v(null), ne = v(null), re = v(u); + re.current = u; + let ie = v(_); + ie.current = _; let ae = (e) => { let n = ie.current; - return e instanceof nm ? e.code === "board_not_found" ? n.errBoardNotFound(t) : e.code === "board_ref_ambiguous" ? n.errBoardAmbiguous(t, e.candidates) : e.code === "board_config_invalid" ? n.errBoardConfigInvalid : n.errGeneric(e.message) : e instanceof em ? e.status === 401 || e.status === 403 ? n.errUnauthorized : e.status === 0 && e.code === "network_error" ? n.errNetwork : n.errGeneric(e.code) : n.errGeneric(e instanceof Error ? e.message : String(e)); + return e instanceof vm ? e.code === "board_not_found" ? n.errBoardNotFound(t) : e.code === "board_ref_ambiguous" ? n.errBoardAmbiguous(t, e.candidates) : e.code === "board_config_invalid" ? n.errBoardConfigInvalid : n.errGeneric(e.message) : e instanceof gm ? e.status === 401 || e.status === 403 ? n.errUnauthorized : e.status === 0 && e.code === "network_error" ? n.errNetwork : n.errGeneric(e.code) : n.errGeneric(e instanceof Error ? e.message : String(e)); }, oe = v(ae); oe.current = ae, f(() => { - if (!w) return; - let n = !1, r = null, i = null, a = null, s = null, c = !1, l = !1; - R.current = null, D(null), k(""), j(""), F(null), L({}); + if (!T) return; + let n = !1, r = null, i = null, a = null, o = null, c = !1, l = !1; + z.current = null, O(null), A(""), M(""), I(null), R({}); let u = (e) => { - n || (N(e), ne.current !== e && (ne.current = e, re.current?.(e))); + n || (P(e), ne.current !== e && (ne.current = e, re.current?.(e))); }, d = async () => { try { - let r = await um(w, e, t, te.current); - return n ? null : (R.current = r, D(r), k(""), j(""), u(c ? "live" : "polling"), r); + let r = await Em(T, e, t, B.current); + return n ? null : (z.current = r, O(r), A(""), M(""), u(c ? "live" : "polling"), r); } catch (e) { if (n) return null; let t = oe.current(e); - return R.current ? j(t) : k(t), u("error"), null; + return z.current ? M(t) : A(t), u("error"), null; } }; - z.current = d; + te.current = d; let f = () => { r = setTimeout(async () => { n || (c || await d(), n || f()); - }, T); + }, E); }, p = (t) => { - n || !o || l || !w.subscribeBoardEvents || (s = w.subscribeBoardEvents(e, t, { + n || !s || l || !T.subscribeBoardEvents || (o = T.subscribeBoardEvents(e, t, { onEvent: () => { a && clearTimeout(a), a = setTimeout(() => void d(), 300); }, @@ -11072,40 +11380,40 @@ function _m({ workspaceId: e, boardRef: t, baseUrl: n, token: r, client: i, read c = !0, u("live"); }, onDown: ({ permanent: e }) => { - c = !1, !n && (R.current && u("polling"), e ? l = !0 : i = setTimeout(() => p(t), 3e4)); + c = !1, !n && (z.current && u("polling"), e ? l = !0 : i = setTimeout(() => p(t), 3e4)); } })); }; return d().then((e) => { n || (e && p(e.config.id), f()); }), () => { - n = !0, r && clearTimeout(r), i && clearTimeout(i), a && clearTimeout(a), s?.(), z.current = null; + n = !0, r && clearTimeout(r), i && clearTimeout(i), a && clearTimeout(a), o?.(), te.current = null; }; }, [ - w, + T, e, t, - o, - T + s, + E ]); let se = g(() => { - let t = () => z.current?.() ?? Promise.resolve(null), n = async (e) => { + let t = () => te.current?.() ?? Promise.resolve(null), n = async (e) => { try { await e(); } catch (e) { - j(oe.current(e)); + M(oe.current(e)); } }, r = async (t, n) => { - let r = R.current; - if (!r || !w) return; - let i = r.metaByPath.get(t), a = await w.saveDocument(e, { + let r = z.current; + if (!r || !T) return; + let i = r.metaByPath.get(t), a = await T.saveDocument(e, { relativePath: t, content: n, baseContentHash: i?.contentHash, baseContent: i?.content }); if (i) { - let e = R.current; + let e = z.current; if (!e) return; let r = new Map(e.metaByPath); r.set(t, { @@ -11117,36 +11425,36 @@ function _m({ workspaceId: e, boardRef: t, baseUrl: n, token: r, client: i, read ...e, metaByPath: r }; - R.current = o, D((t) => t === e ? o : t); + z.current = o, O((t) => t === e ? o : t); } }; return { refresh: () => void t(), setConfig: async (n) => { try { - let r = R.current; - if (!r || !w) return; + let r = z.current; + if (!r || !T) return; if (a) { - L((e) => lm(e, n)); + R((e) => Tm(e, n)); return; } let i = { ...r.config, ...n }; - await w.saveDocument(e, { + await T.saveDocument(e, { relativePath: r.boardRelativePath, content: JSON.stringify(i, null, 2), baseContentHash: r.boardDoc.contentHash, baseContent: r.boardDoc.content }), await t(); } catch (e) { - throw j(oe.current(e)), e; + throw M(oe.current(e)), e; } }, createCard: async (n, r) => { - let i = R.current; - if (!(!i || !w)) try { + let i = z.current; + if (!(!i || !T)) try { let a = i.config.groupBy || "status", o = i.cards.filter((e) => (a === "status" ? e.columnKey : a === "priority" ? e.priority || "none" : e.assignee || "") === n).reduce((e, t) => Math.max(e, t.position), -1) + 1, s = { title: r, board: i.config.id, @@ -11154,47 +11462,47 @@ function _m({ workspaceId: e, boardRef: t, baseUrl: n, token: r, client: i, read position: String(o) }; a !== "status" && (s[a] = n); - let c = `${i.boardDir}/${vp(r)}.md`; - return i.metaByPath.has(c) && (c = `${i.boardDir}/${vp(r)}-${gm()}.md`), await w.saveDocument(e, { + let c = `${i.boardDir}/${wp(r)}.md`; + return i.metaByPath.has(c) && (c = `${i.boardDir}/${wp(r)}-${Mm()}.md`), await T.saveDocument(e, { relativePath: c, - content: Kf("", s) + content: Qf("", s) }), await t(), c; } catch (e) { - j(oe.current(e)); + M(oe.current(e)); return; } }, updateCard: (e, i) => n(async () => { - let n = R.current, a = n?.metaByPath.get(e); - !n || !a || (await r(e, sm(a.content, i)), await t()); + let n = z.current, a = n?.metaByPath.get(e); + !n || !a || (await r(e, Cm(a.content, i)), await t()); }), updateCards: async (e, n) => { try { if (a) return; - let i = R.current; + let i = z.current; if (!i) return; let o = e.find((e) => !i.metaByPath.has(e.cardId)); if (o) throw Error(`Card metadata is missing for ${o.cardId}.`); let s = 0; for (let t of e) { let a = i.metaByPath.get(t.cardId); - await r(t.cardId, sm(a.content, t.patch)), s += 1, n?.(s, e.length); + await r(t.cardId, Cm(a.content, t.patch)), s += 1, n?.(s, e.length); } await t(); } catch (e) { - throw await t(), j(oe.current(e)), e; + throw await t(), M(oe.current(e)), e; } }, moveCard: (e, i, a) => n(async () => { - let n = R.current; - if (!n || !w) return; + let n = z.current; + if (!n || !T) return; let o = n.config.groupBy || "status", s = n.metaByPath.get(e); if (!s) return; if (o !== "status") { let a = n.cards.find((t) => t.id === e); if ((o === "priority" ? a?.priority || "none" : a?.assignee || "") === i) return; - let { data: c, body: l } = Gf(s.content); - await r(e, Kf(l, { + let { data: c, body: l } = Zf(s.content); + await r(e, Qf(l, { ...c, [o]: i })), await t(); @@ -11207,8 +11515,8 @@ function _m({ workspaceId: e, boardRef: t, baseUrl: n, token: r, client: i, read if (!a) continue; let o = n.metaByPath.get(a.id); if (!o || a.id !== e && a.position === t && a.columnKey === i) continue; - let { data: s, body: l } = Gf(o.content); - await r(a.id, Kf(l, { + let { data: s, body: l } = Zf(o.content); + await r(a.id, Qf(l, { ...s, status: i, position: String(t) @@ -11217,70 +11525,71 @@ function _m({ workspaceId: e, boardRef: t, baseUrl: n, token: r, client: i, read await t(); }), deleteCard: async (r) => { - let i = R.current, a = i?.metaByPath.get(r.id); - if (!(!i || !a || !w)) { - if (!w.deleteDocument) { - j(ie.current.deleteUnsupported); + let i = z.current, a = i?.metaByPath.get(r.id); + if (!(!i || !a || !T)) { + if (!T.deleteDocument) { + M(ie.current.deleteUnsupported); return; } window.confirm(ie.current.confirmDeleteCard(r.title)) && await n(async () => { - await w.deleteDocument(e, a.id), await t(); + await T.deleteDocument(e, a.id), await t(); }); } } }; }, [ - w, + T, e, a - ]), ce = g(() => E ? a ? { - ...E.config, - ...I - } : E.config : null, [ - E, + ]), ce = g(() => D ? a ? { + ...D.config, + ...L + } : D.config : null, [ + D, a, - I - ]), le = g(() => E && ce ? am(ce, E.boardDir) : null, [E, ce]), ue = P ? E?.cards.find((e) => e.id === P) ?? null : null, de = c ?? ((e) => F(e.id)), fe; - return fe = b ? /* @__PURE__ */ S(vm, { message: b }) : !E && O ? /* @__PURE__ */ S(vm, { - message: O, - retryLabel: h.retry, - onRetry: () => void z.current?.() - }) : !E || !le ? /* @__PURE__ */ S("div", { + L + ]), le = g(() => D && ce ? xm(ce, D.boardDir) : null, [D, ce]), ue = F ? D?.cards.find((e) => e.id === F) ?? null : null, de = l ?? ((e) => I(e.id)), fe; + return fe = w ? /* @__PURE__ */ S(Pm, { message: w }) : !D && k ? /* @__PURE__ */ S(Pm, { + message: k, + retryLabel: _.retry, + onRetry: () => void te.current?.() + }) : !D || !le ? /* @__PURE__ */ S("div", { className: "flex h-full items-center justify-center bg-[#fbfdfb] p-8 text-sm text-stone-500", - children: h.loading + children: _.loading }) : /* @__PURE__ */ C(x, { children: [ /* @__PURE__ */ S(ee, { - i18n: B, - children: /* @__PURE__ */ S($p, { + i18n: V, + children: /* @__PURE__ */ S(hm, { config: le, - cards: E.cards, + cards: D.cards, actions: se, - error: A || void 0, + error: j || void 0, readOnly: a, + currentUser: o, onCardOpen: de, portalClassName: "jtb-scope" }) }), - ue && !c && ce && /* @__PURE__ */ S(dm, { + ue && !l && ce && /* @__PURE__ */ S(Dm, { card: ue, config: ce, - strings: h, - onClose: () => F(null) + strings: _, + onClose: () => I(null) }), - /* @__PURE__ */ S(ym, { - state: M, - strings: h, - pollSecs: Math.round(T / 1e3), - liveWanted: o + /* @__PURE__ */ S(Fm, { + state: N, + strings: _, + pollSecs: Math.round(E / 1e3), + liveWanted: s }) ] }), /* @__PURE__ */ S("div", { - className: `jtb-scope jtb-root ${d ?? ""}`, - style: p, + className: `jtb-scope jtb-root ${p ?? ""}`, + style: m, "data-jtype-board": t, children: fe }); } -function vm({ message: e, retryLabel: t, onRetry: n }) { +function Pm({ message: e, retryLabel: t, onRetry: n }) { return /* @__PURE__ */ C("div", { className: "flex h-full flex-col items-center justify-center gap-3 bg-[#fbfdfb] p-8 text-center", children: [ @@ -11310,7 +11619,7 @@ function vm({ message: e, retryLabel: t, onRetry: n }) { ] }); } -function ym({ state: e, strings: t, pollSecs: n, liveWanted: r }) { +function Fm({ state: e, strings: t, pollSecs: n, liveWanted: r }) { let i = e === "live" ? t.live : e === "polling" ? t.polling(n) : t.connectionError, a = e === "live" ? "bg-emerald-500" : e === "polling" ? "bg-stone-400" : "bg-red-500"; return /* @__PURE__ */ C("div", { className: "pointer-events-none absolute bottom-2 right-2 z-40 inline-flex items-center gap-1.5 rounded-full border border-black/[0.06] bg-white/90 px-2 py-0.5 text-[11px] text-stone-500 shadow-sm", @@ -11322,4 +11631,4 @@ function ym({ state: e, strings: t, pollSecs: n, liveWanted: r }) { }); } //#endregion -export { em as JTypeApiError, _m as JTypeBoard, nm as JTypeBoardError, tm as createJTypeClient, rm as resolveBoardDoc }; +export { gm as JTypeApiError, Nm as JTypeBoard, vm as JTypeBoardError, _m as createJTypeClient, ym as resolveBoardDoc }; diff --git a/packages/board-react/dist/style.css b/packages/board-react/dist/style.css index 35af839d..3cb8e16b 100644 --- a/packages/board-react/dist/style.css +++ b/packages/board-react/dist/style.css @@ -1,3 +1,3 @@ /*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){:where(.jtb-scope) *,*:where(.jtb-scope),:where(.jtb-scope) :before,:where(.jtb-scope):before,:where(.jtb-scope) :after,:where(.jtb-scope):after,:where(.jtb-scope) ::backdrop,:where(.jtb-scope)::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{.jtb-scope{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-950:oklch(26.2% .051 172.552);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-700:oklch(50% .134 242.749);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-100:oklch(97% .001 106.424);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-stone-950:oklch(14.7% .004 49.25);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-brand:#008884;--color-brand-dark:#006f6b;--color-brand-soft:#e8f6f2;--color-brand-gray:#6f817a;--color-line:#0d0d0c0f}}@layer base{.jtb-scope{color:#1c1917;-webkit-font-smoothing:antialiased;text-align:left;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;line-height:1.5}.jtb-root{isolation:isolate;height:100%;min-height:0;position:relative;overflow:hidden}:where(.jtb-scope) *,*:where(.jtb-scope),:where(.jtb-scope) :before,:where(.jtb-scope):before,:where(.jtb-scope) :after,:where(.jtb-scope):after{box-sizing:border-box;border:0 solid}:where(.jtb-scope) h1,h1:where(.jtb-scope),:where(.jtb-scope) h2,h2:where(.jtb-scope),:where(.jtb-scope) h3,h3:where(.jtb-scope),:where(.jtb-scope) h4,h4:where(.jtb-scope),:where(.jtb-scope) h5,h5:where(.jtb-scope),:where(.jtb-scope) h6,h6:where(.jtb-scope),:where(.jtb-scope) p,p:where(.jtb-scope),:where(.jtb-scope) blockquote,blockquote:where(.jtb-scope),:where(.jtb-scope) pre,pre:where(.jtb-scope),:where(.jtb-scope) dl,dl:where(.jtb-scope),:where(.jtb-scope) dd,dd:where(.jtb-scope),:where(.jtb-scope) figure,figure:where(.jtb-scope){margin:0}:where(.jtb-scope) h1,h1:where(.jtb-scope),:where(.jtb-scope) h2,h2:where(.jtb-scope),:where(.jtb-scope) h3,h3:where(.jtb-scope),:where(.jtb-scope) h4,h4:where(.jtb-scope),:where(.jtb-scope) h5,h5:where(.jtb-scope),:where(.jtb-scope) h6,h6:where(.jtb-scope){font-size:inherit;font-weight:inherit}:where(.jtb-scope) ul,ul:where(.jtb-scope),:where(.jtb-scope) ol,ol:where(.jtb-scope){margin:0;padding:0;list-style:none}:where(.jtb-scope) button,button:where(.jtb-scope),:where(.jtb-scope) input,input:where(.jtb-scope),:where(.jtb-scope) optgroup,optgroup:where(.jtb-scope),:where(.jtb-scope) select,select:where(.jtb-scope),:where(.jtb-scope) textarea,textarea:where(.jtb-scope){font:inherit;font-feature-settings:inherit;letter-spacing:inherit;color:inherit;background-color:#0000;margin:0;padding:0}:where(.jtb-scope) button,button:where(.jtb-scope),:where(.jtb-scope) [role=button],[role=button]:where(.jtb-scope){cursor:pointer}:where(.jtb-scope) button,button:where(.jtb-scope){text-transform:none;-webkit-appearance:button;background-image:none}:where(.jtb-scope) :disabled,:disabled:where(.jtb-scope){cursor:default}:where(.jtb-scope) input::placeholder,input:where(.jtb-scope)::placeholder,:where(.jtb-scope) textarea::placeholder,textarea:where(.jtb-scope)::placeholder{opacity:1;color:#a8a29e}:where(.jtb-scope) textarea,textarea:where(.jtb-scope){resize:vertical}:where(.jtb-scope) a,a:where(.jtb-scope){color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}:where(.jtb-scope) img,img:where(.jtb-scope),:where(.jtb-scope) svg,svg:where(.jtb-scope),:where(.jtb-scope) video,video:where(.jtb-scope),:where(.jtb-scope) canvas,canvas:where(.jtb-scope){vertical-align:middle;display:block}:where(.jtb-scope) img,img:where(.jtb-scope),:where(.jtb-scope) video,video:where(.jtb-scope){max-width:100%;height:auto}:where(.jtb-scope) table,table:where(.jtb-scope){text-indent:0;border-color:inherit;border-collapse:collapse}:where(.jtb-scope) [hidden],[hidden]:where(.jtb-scope){display:none!important}}@layer components;@layer utilities{:where(.jtb-scope) .pointer-events-none,.pointer-events-none:where(.jtb-scope){pointer-events:none}:where(.jtb-scope) .collapse,.collapse:where(.jtb-scope){visibility:collapse}:where(.jtb-scope) .visible,.visible:where(.jtb-scope){visibility:visible}:where(.jtb-scope) .sr-only,.sr-only:where(.jtb-scope){clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:where(.jtb-scope) .absolute,.absolute:where(.jtb-scope){position:absolute}:where(.jtb-scope) .fixed,.fixed:where(.jtb-scope){position:fixed}:where(.jtb-scope) .relative,.relative:where(.jtb-scope){position:relative}:where(.jtb-scope) .sticky,.sticky:where(.jtb-scope){position:sticky}:where(.jtb-scope) .inset-0,.inset-0:where(.jtb-scope){inset:0}:where(.jtb-scope) .top-0,.top-0:where(.jtb-scope){top:0}:where(.jtb-scope) .top-1,.top-1:where(.jtb-scope){top:var(--spacing)}:where(.jtb-scope) .top-1\/2,.top-1\/2:where(.jtb-scope){top:50%}:where(.jtb-scope) .right-0,.right-0:where(.jtb-scope){right:0}:where(.jtb-scope) .right-1,.right-1:where(.jtb-scope){right:var(--spacing)}:where(.jtb-scope) .right-2,.right-2:where(.jtb-scope){right:calc(var(--spacing) * 2)}:where(.jtb-scope) .bottom-2,.bottom-2:where(.jtb-scope){bottom:calc(var(--spacing) * 2)}:where(.jtb-scope) .bottom-4,.bottom-4:where(.jtb-scope){bottom:calc(var(--spacing) * 4)}:where(.jtb-scope) .left-0,.left-0:where(.jtb-scope){left:0}:where(.jtb-scope) .left-1\/2,.left-1\/2:where(.jtb-scope){left:50%}:where(.jtb-scope) .left-2,.left-2:where(.jtb-scope){left:calc(var(--spacing) * 2)}:where(.jtb-scope) .z-10,.z-10:where(.jtb-scope){z-index:10}:where(.jtb-scope) .z-20,.z-20:where(.jtb-scope){z-index:20}:where(.jtb-scope) .z-30,.z-30:where(.jtb-scope){z-index:30}:where(.jtb-scope) .z-40,.z-40:where(.jtb-scope){z-index:40}:where(.jtb-scope) .z-50,.z-50:where(.jtb-scope){z-index:50}:where(.jtb-scope) .z-\[60\],.z-\[60\]:where(.jtb-scope){z-index:60}:where(.jtb-scope) .col-span-full,.col-span-full:where(.jtb-scope){grid-column:1/-1}:where(.jtb-scope) .mx-1,.mx-1:where(.jtb-scope){margin-inline:var(--spacing)}:where(.jtb-scope) .mx-2,.mx-2:where(.jtb-scope){margin-inline:calc(var(--spacing) * 2)}:where(.jtb-scope) .mx-auto,.mx-auto:where(.jtb-scope){margin-inline:auto}:where(.jtb-scope) .my-1,.my-1:where(.jtb-scope){margin-block:var(--spacing)}:where(.jtb-scope) .mt-0\.5,.mt-0\.5:where(.jtb-scope){margin-top:calc(var(--spacing) * .5)}:where(.jtb-scope) .mt-1,.mt-1:where(.jtb-scope){margin-top:var(--spacing)}:where(.jtb-scope) .mt-1\.5,.mt-1\.5:where(.jtb-scope){margin-top:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .mt-2,.mt-2:where(.jtb-scope){margin-top:calc(var(--spacing) * 2)}:where(.jtb-scope) .mt-3,.mt-3:where(.jtb-scope){margin-top:calc(var(--spacing) * 3)}:where(.jtb-scope) .mt-4,.mt-4:where(.jtb-scope){margin-top:calc(var(--spacing) * 4)}:where(.jtb-scope) .mt-5,.mt-5:where(.jtb-scope){margin-top:calc(var(--spacing) * 5)}:where(.jtb-scope) .mr-1,.mr-1:where(.jtb-scope){margin-right:var(--spacing)}:where(.jtb-scope) .mb-0\.5,.mb-0\.5:where(.jtb-scope){margin-bottom:calc(var(--spacing) * .5)}:where(.jtb-scope) .mb-1,.mb-1:where(.jtb-scope){margin-bottom:var(--spacing)}:where(.jtb-scope) .-ml-1,.-ml-1:where(.jtb-scope){margin-left:calc(var(--spacing) * -1)}:where(.jtb-scope) .ml-1,.ml-1:where(.jtb-scope){margin-left:var(--spacing)}:where(.jtb-scope) .ml-auto,.ml-auto:where(.jtb-scope){margin-left:auto}:where(.jtb-scope) .block,.block:where(.jtb-scope){display:block}:where(.jtb-scope) .contents,.contents:where(.jtb-scope){display:contents}:where(.jtb-scope) .flex,.flex:where(.jtb-scope){display:flex}:where(.jtb-scope) .grid,.grid:where(.jtb-scope){display:grid}:where(.jtb-scope) .hidden,.hidden:where(.jtb-scope){display:none}:where(.jtb-scope) .inline,.inline:where(.jtb-scope){display:inline}:where(.jtb-scope) .inline-block,.inline-block:where(.jtb-scope){display:inline-block}:where(.jtb-scope) .inline-flex,.inline-flex:where(.jtb-scope){display:inline-flex}:where(.jtb-scope) .table,.table:where(.jtb-scope){display:table}:where(.jtb-scope) .h-0\.5,.h-0\.5:where(.jtb-scope){height:calc(var(--spacing) * .5)}:where(.jtb-scope) .h-1\.5,.h-1\.5:where(.jtb-scope){height:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .h-2,.h-2:where(.jtb-scope){height:calc(var(--spacing) * 2)}:where(.jtb-scope) .h-2\.5,.h-2\.5:where(.jtb-scope){height:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .h-3,.h-3:where(.jtb-scope){height:calc(var(--spacing) * 3)}:where(.jtb-scope) .h-3\.5,.h-3\.5:where(.jtb-scope){height:calc(var(--spacing) * 3.5)}:where(.jtb-scope) .h-4,.h-4:where(.jtb-scope){height:calc(var(--spacing) * 4)}:where(.jtb-scope) .h-4\.5,.h-4\.5:where(.jtb-scope){height:calc(var(--spacing) * 4.5)}:where(.jtb-scope) .h-5,.h-5:where(.jtb-scope){height:calc(var(--spacing) * 5)}:where(.jtb-scope) .h-6,.h-6:where(.jtb-scope){height:calc(var(--spacing) * 6)}:where(.jtb-scope) .h-7,.h-7:where(.jtb-scope){height:calc(var(--spacing) * 7)}:where(.jtb-scope) .h-8,.h-8:where(.jtb-scope){height:calc(var(--spacing) * 8)}:where(.jtb-scope) .h-9,.h-9:where(.jtb-scope){height:calc(var(--spacing) * 9)}:where(.jtb-scope) .h-10,.h-10:where(.jtb-scope){height:calc(var(--spacing) * 10)}:where(.jtb-scope) .h-11,.h-11:where(.jtb-scope){height:calc(var(--spacing) * 11)}:where(.jtb-scope) .h-14,.h-14:where(.jtb-scope){height:calc(var(--spacing) * 14)}:where(.jtb-scope) .h-full,.h-full:where(.jtb-scope){height:100%}:where(.jtb-scope) .max-h-56,.max-h-56:where(.jtb-scope){max-height:calc(var(--spacing) * 56)}:where(.jtb-scope) .max-h-\[88dvh\],.max-h-\[88dvh\]:where(.jtb-scope){max-height:88dvh}:where(.jtb-scope) .max-h-full,.max-h-full:where(.jtb-scope){max-height:100%}:where(.jtb-scope) .min-h-0,.min-h-0:where(.jtb-scope){min-height:0}:where(.jtb-scope) .min-h-10,.min-h-10:where(.jtb-scope){min-height:calc(var(--spacing) * 10)}:where(.jtb-scope) .min-h-11,.min-h-11:where(.jtb-scope){min-height:calc(var(--spacing) * 11)}:where(.jtb-scope) .min-h-12,.min-h-12:where(.jtb-scope){min-height:calc(var(--spacing) * 12)}:where(.jtb-scope) .min-h-24,.min-h-24:where(.jtb-scope){min-height:calc(var(--spacing) * 24)}:where(.jtb-scope) .min-h-\[5\.5rem\],.min-h-\[5\.5rem\]:where(.jtb-scope){min-height:5.5rem}:where(.jtb-scope) .min-h-\[220px\],.min-h-\[220px\]:where(.jtb-scope){min-height:220px}:where(.jtb-scope) .w-1\.5,.w-1\.5:where(.jtb-scope){width:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .w-2,.w-2:where(.jtb-scope){width:calc(var(--spacing) * 2)}:where(.jtb-scope) .w-2\.5,.w-2\.5:where(.jtb-scope){width:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .w-3,.w-3:where(.jtb-scope){width:calc(var(--spacing) * 3)}:where(.jtb-scope) .w-3\.5,.w-3\.5:where(.jtb-scope){width:calc(var(--spacing) * 3.5)}:where(.jtb-scope) .w-4,.w-4:where(.jtb-scope){width:calc(var(--spacing) * 4)}:where(.jtb-scope) .w-4\.5,.w-4\.5:where(.jtb-scope){width:calc(var(--spacing) * 4.5)}:where(.jtb-scope) .w-5,.w-5:where(.jtb-scope){width:calc(var(--spacing) * 5)}:where(.jtb-scope) .w-6,.w-6:where(.jtb-scope){width:calc(var(--spacing) * 6)}:where(.jtb-scope) .w-7,.w-7:where(.jtb-scope){width:calc(var(--spacing) * 7)}:where(.jtb-scope) .w-8,.w-8:where(.jtb-scope){width:calc(var(--spacing) * 8)}:where(.jtb-scope) .w-9,.w-9:where(.jtb-scope){width:calc(var(--spacing) * 9)}:where(.jtb-scope) .w-10,.w-10:where(.jtb-scope){width:calc(var(--spacing) * 10)}:where(.jtb-scope) .w-11,.w-11:where(.jtb-scope){width:calc(var(--spacing) * 11)}:where(.jtb-scope) .w-44,.w-44:where(.jtb-scope){width:calc(var(--spacing) * 44)}:where(.jtb-scope) .w-48,.w-48:where(.jtb-scope){width:calc(var(--spacing) * 48)}:where(.jtb-scope) .w-52,.w-52:where(.jtb-scope){width:calc(var(--spacing) * 52)}:where(.jtb-scope) .w-56,.w-56:where(.jtb-scope){width:calc(var(--spacing) * 56)}:where(.jtb-scope) .w-72,.w-72:where(.jtb-scope){width:calc(var(--spacing) * 72)}:where(.jtb-scope) .w-80,.w-80:where(.jtb-scope){width:calc(var(--spacing) * 80)}:where(.jtb-scope) .w-\[232px\],.w-\[232px\]:where(.jtb-scope){width:232px}:where(.jtb-scope) .w-\[360px\],.w-\[360px\]:where(.jtb-scope){width:360px}:where(.jtb-scope) .w-\[var\(--button-width\)\],.w-\[var\(--button-width\)\]:where(.jtb-scope){width:var(--button-width)}:where(.jtb-scope) .w-full,.w-full:where(.jtb-scope){width:100%}:where(.jtb-scope) .max-w-2xl,.max-w-2xl:where(.jtb-scope){max-width:var(--container-2xl)}:where(.jtb-scope) .max-w-\[92\%\],.max-w-\[92\%\]:where(.jtb-scope){max-width:92%}:where(.jtb-scope) .max-w-\[260px\],.max-w-\[260px\]:where(.jtb-scope){max-width:260px}:where(.jtb-scope) .max-w-lg,.max-w-lg:where(.jtb-scope){max-width:var(--container-lg)}:where(.jtb-scope) .max-w-md,.max-w-md:where(.jtb-scope){max-width:var(--container-md)}:where(.jtb-scope) .max-w-sm,.max-w-sm:where(.jtb-scope){max-width:var(--container-sm)}:where(.jtb-scope) .max-w-xl,.max-w-xl:where(.jtb-scope){max-width:var(--container-xl)}:where(.jtb-scope) .min-w-0,.min-w-0:where(.jtb-scope){min-width:0}:where(.jtb-scope) .min-w-\[8rem\],.min-w-\[8rem\]:where(.jtb-scope){min-width:8rem}:where(.jtb-scope) .min-w-max,.min-w-max:where(.jtb-scope){min-width:max-content}:where(.jtb-scope) .flex-1,.flex-1:where(.jtb-scope){flex:1}:where(.jtb-scope) .shrink-0,.shrink-0:where(.jtb-scope){flex-shrink:0}:where(.jtb-scope) .border-collapse,.border-collapse:where(.jtb-scope){border-collapse:collapse}:where(.jtb-scope) .-translate-x-1\/2,.-translate-x-1\/2:where(.jtb-scope){--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}:where(.jtb-scope) .-translate-y-1\/2,.-translate-y-1\/2:where(.jtb-scope){--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}:where(.jtb-scope) .-rotate-90,.-rotate-90:where(.jtb-scope){rotate:-90deg}:where(.jtb-scope) .rotate-90,.rotate-90:where(.jtb-scope){rotate:90deg}:where(.jtb-scope) .animate-spin,.animate-spin:where(.jtb-scope){animation:var(--animate-spin)}:where(.jtb-scope) .cursor-col-resize,.cursor-col-resize:where(.jtb-scope){cursor:col-resize}:where(.jtb-scope) .cursor-grab,.cursor-grab:where(.jtb-scope){cursor:grab}:where(.jtb-scope) .cursor-pointer,.cursor-pointer:where(.jtb-scope){cursor:pointer}:where(.jtb-scope) .touch-none,.touch-none:where(.jtb-scope){touch-action:none}:where(.jtb-scope) .resize,.resize:where(.jtb-scope){resize:both}:where(.jtb-scope) .resize-none,.resize-none:where(.jtb-scope){resize:none}:where(.jtb-scope) .resize-y,.resize-y:where(.jtb-scope){resize:vertical}:where(.jtb-scope) .grid-cols-7,.grid-cols-7:where(.jtb-scope){grid-template-columns:repeat(7,minmax(0,1fr))}:where(.jtb-scope) .grid-cols-8,.grid-cols-8:where(.jtb-scope){grid-template-columns:repeat(8,minmax(0,1fr))}:where(.jtb-scope) .grid-cols-\[64px_minmax\(0\,1fr\)\],.grid-cols-\[64px_minmax\(0\,1fr\)\]:where(.jtb-scope){grid-template-columns:64px minmax(0,1fr)}:where(.jtb-scope) .grid-cols-\[88px_minmax\(0\,1fr\)\],.grid-cols-\[88px_minmax\(0\,1fr\)\]:where(.jtb-scope){grid-template-columns:88px minmax(0,1fr)}:where(.jtb-scope) .grid-rows-6,.grid-rows-6:where(.jtb-scope){grid-template-rows:repeat(6,minmax(0,1fr))}:where(.jtb-scope) .flex-col,.flex-col:where(.jtb-scope){flex-direction:column}:where(.jtb-scope) .flex-wrap,.flex-wrap:where(.jtb-scope){flex-wrap:wrap}:where(.jtb-scope) .items-baseline,.items-baseline:where(.jtb-scope){align-items:baseline}:where(.jtb-scope) .items-center,.items-center:where(.jtb-scope){align-items:center}:where(.jtb-scope) .items-end,.items-end:where(.jtb-scope){align-items:flex-end}:where(.jtb-scope) .items-start,.items-start:where(.jtb-scope){align-items:flex-start}:where(.jtb-scope) .items-stretch,.items-stretch:where(.jtb-scope){align-items:stretch}:where(.jtb-scope) .justify-between,.justify-between:where(.jtb-scope){justify-content:space-between}:where(.jtb-scope) .justify-center,.justify-center:where(.jtb-scope){justify-content:center}:where(.jtb-scope) .justify-end,.justify-end:where(.jtb-scope){justify-content:flex-end}:where(.jtb-scope) .gap-0\.5,.gap-0\.5:where(.jtb-scope){gap:calc(var(--spacing) * .5)}:where(.jtb-scope) .gap-1,.gap-1:where(.jtb-scope){gap:var(--spacing)}:where(.jtb-scope) .gap-1\.5,.gap-1\.5:where(.jtb-scope){gap:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .gap-2,.gap-2:where(.jtb-scope){gap:calc(var(--spacing) * 2)}:where(.jtb-scope) .gap-2\.5,.gap-2\.5:where(.jtb-scope){gap:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .gap-3,.gap-3:where(.jtb-scope){gap:calc(var(--spacing) * 3)}:where(.jtb-scope) :where(.space-y-0\.5>:not(:last-child)),:where(.space-y-0\.5>:not(:last-child)):where(.jtb-scope){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.jtb-scope) :where(.space-y-1>:not(:last-child)),:where(.space-y-1>:not(:last-child)):where(.jtb-scope){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.jtb-scope) :where(.space-y-2>:not(:last-child)),:where(.space-y-2>:not(:last-child)):where(.jtb-scope){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.jtb-scope) .gap-x-2,.gap-x-2:where(.jtb-scope){column-gap:calc(var(--spacing) * 2)}:where(.jtb-scope) .gap-y-1\.5,.gap-y-1\.5:where(.jtb-scope){row-gap:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .gap-y-2,.gap-y-2:where(.jtb-scope){row-gap:calc(var(--spacing) * 2)}:where(.jtb-scope) :where(.divide-y>:not(:last-child)),:where(.divide-y>:not(:last-child)):where(.jtb-scope){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.jtb-scope) :where(.divide-line>:not(:last-child)),:where(.divide-line>:not(:last-child)):where(.jtb-scope){border-color:var(--color-line)}:where(.jtb-scope) .self-start,.self-start:where(.jtb-scope){align-self:flex-start}:where(.jtb-scope) .truncate,.truncate:where(.jtb-scope){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:where(.jtb-scope) .overflow-auto,.overflow-auto:where(.jtb-scope){overflow:auto}:where(.jtb-scope) .overflow-hidden,.overflow-hidden:where(.jtb-scope){overflow:hidden}:where(.jtb-scope) .overflow-x-auto,.overflow-x-auto:where(.jtb-scope){overflow-x:auto}:where(.jtb-scope) .overflow-y-auto,.overflow-y-auto:where(.jtb-scope){overflow-y:auto}:where(.jtb-scope) .rounded,.rounded:where(.jtb-scope){border-radius:.25rem}:where(.jtb-scope) .rounded-2xl,.rounded-2xl:where(.jtb-scope){border-radius:var(--radius-2xl)}:where(.jtb-scope) .rounded-full,.rounded-full:where(.jtb-scope){border-radius:3.40282e38px}:where(.jtb-scope) .rounded-lg,.rounded-lg:where(.jtb-scope){border-radius:var(--radius-lg)}:where(.jtb-scope) .rounded-md,.rounded-md:where(.jtb-scope){border-radius:var(--radius-md)}:where(.jtb-scope) .rounded-xl,.rounded-xl:where(.jtb-scope){border-radius:var(--radius-xl)}:where(.jtb-scope) .rounded-t-2xl,.rounded-t-2xl:where(.jtb-scope){border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}:where(.jtb-scope) .rounded-t-xl,.rounded-t-xl:where(.jtb-scope){border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}:where(.jtb-scope) .border,.border:where(.jtb-scope){border-style:var(--tw-border-style);border-width:1px}:where(.jtb-scope) .border-2,.border-2:where(.jtb-scope){border-style:var(--tw-border-style);border-width:2px}:where(.jtb-scope) .border-t,.border-t:where(.jtb-scope){border-top-style:var(--tw-border-style);border-top-width:1px}:where(.jtb-scope) .border-r,.border-r:where(.jtb-scope){border-right-style:var(--tw-border-style);border-right-width:1px}:where(.jtb-scope) .border-b,.border-b:where(.jtb-scope){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}:where(.jtb-scope) .border-l,.border-l:where(.jtb-scope){border-left-style:var(--tw-border-style);border-left-width:1px}:where(.jtb-scope) .border-l-2,.border-l-2:where(.jtb-scope){border-left-style:var(--tw-border-style);border-left-width:2px}:where(.jtb-scope) .border-dashed,.border-dashed:where(.jtb-scope){--tw-border-style:dashed;border-style:dashed}:where(.jtb-scope) .border-black\/\[0\.04\],.border-black\/\[0\.04\]:where(.jtb-scope){border-color:#0000000a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-black\/\[0\.04\],.border-black\/\[0\.04\]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-black) 4%, transparent)}}:where(.jtb-scope) .border-black\/\[0\.05\],.border-black\/\[0\.05\]:where(.jtb-scope){border-color:#0000000d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-black\/\[0\.05\],.border-black\/\[0\.05\]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}:where(.jtb-scope) .border-black\/\[0\.06\],.border-black\/\[0\.06\]:where(.jtb-scope){border-color:#0000000f}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-black\/\[0\.06\],.border-black\/\[0\.06\]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-black) 6%, transparent)}}:where(.jtb-scope) .border-black\/\[0\.08\],.border-black\/\[0\.08\]:where(.jtb-scope){border-color:#00000014}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-black\/\[0\.08\],.border-black\/\[0\.08\]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-black) 8%, transparent)}}:where(.jtb-scope) .border-brand\/20,.border-brand\/20:where(.jtb-scope){border-color:#00888433}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/20,.border-brand\/20:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 20%, transparent)}}:where(.jtb-scope) .border-brand\/30,.border-brand\/30:where(.jtb-scope){border-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/30,.border-brand\/30:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}:where(.jtb-scope) .border-brand\/40,.border-brand\/40:where(.jtb-scope){border-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/40,.border-brand\/40:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .border-brand\/50,.border-brand\/50:where(.jtb-scope){border-color:#00888480}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/50,.border-brand\/50:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 50%, transparent)}}:where(.jtb-scope) .border-brand\/60,.border-brand\/60:where(.jtb-scope){border-color:#00888499}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/60,.border-brand\/60:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 60%, transparent)}}:where(.jtb-scope) .border-emerald-100,.border-emerald-100:where(.jtb-scope){border-color:var(--color-emerald-100)}:where(.jtb-scope) .border-line,.border-line:where(.jtb-scope){border-color:var(--color-line)}:where(.jtb-scope) .border-red-200,.border-red-200:where(.jtb-scope){border-color:var(--color-red-200)}:where(.jtb-scope) .border-stone-100,.border-stone-100:where(.jtb-scope){border-color:var(--color-stone-100)}:where(.jtb-scope) .border-stone-200,.border-stone-200:where(.jtb-scope){border-color:var(--color-stone-200)}:where(.jtb-scope) .border-stone-300,.border-stone-300:where(.jtb-scope){border-color:var(--color-stone-300)}:where(.jtb-scope) .bg-\[\#fbfdfb\],.bg-\[\#fbfdfb\]:where(.jtb-scope){background-color:#fbfdfb}:where(.jtb-scope) .bg-amber-50,.bg-amber-50:where(.jtb-scope){background-color:var(--color-amber-50)}:where(.jtb-scope) .bg-amber-100,.bg-amber-100:where(.jtb-scope){background-color:var(--color-amber-100)}:where(.jtb-scope) .bg-brand,.bg-brand:where(.jtb-scope){background-color:var(--color-brand)}:where(.jtb-scope) .bg-brand-dark,.bg-brand-dark:where(.jtb-scope){background-color:var(--color-brand-dark)}:where(.jtb-scope) .bg-brand-soft,.bg-brand-soft:where(.jtb-scope){background-color:var(--color-brand-soft)}:where(.jtb-scope) .bg-brand-soft\/20,.bg-brand-soft\/20:where(.jtb-scope){background-color:#e8f6f233}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/20,.bg-brand-soft\/20:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 20%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/30,.bg-brand-soft\/30:where(.jtb-scope){background-color:#e8f6f24d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/30,.bg-brand-soft\/30:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 30%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/40,.bg-brand-soft\/40:where(.jtb-scope){background-color:#e8f6f266}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/40,.bg-brand-soft\/40:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 40%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/50,.bg-brand-soft\/50:where(.jtb-scope){background-color:#e8f6f280}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/50,.bg-brand-soft\/50:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 50%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/60,.bg-brand-soft\/60:where(.jtb-scope){background-color:#e8f6f299}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/60,.bg-brand-soft\/60:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 60%, transparent)}}:where(.jtb-scope) .bg-emerald-50,.bg-emerald-50:where(.jtb-scope){background-color:var(--color-emerald-50)}:where(.jtb-scope) .bg-emerald-50\/30,.bg-emerald-50\/30:where(.jtb-scope){background-color:#ecfdf54d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-emerald-50\/30,.bg-emerald-50\/30:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-emerald-50) 30%, transparent)}}:where(.jtb-scope) .bg-emerald-500,.bg-emerald-500:where(.jtb-scope){background-color:var(--color-emerald-500)}:where(.jtb-scope) .bg-red-50,.bg-red-50:where(.jtb-scope){background-color:var(--color-red-50)}:where(.jtb-scope) .bg-red-100,.bg-red-100:where(.jtb-scope){background-color:var(--color-red-100)}:where(.jtb-scope) .bg-red-500,.bg-red-500:where(.jtb-scope){background-color:var(--color-red-500)}:where(.jtb-scope) .bg-red-600,.bg-red-600:where(.jtb-scope){background-color:var(--color-red-600)}:where(.jtb-scope) .bg-sky-100,.bg-sky-100:where(.jtb-scope){background-color:var(--color-sky-100)}:where(.jtb-scope) .bg-stone-50,.bg-stone-50:where(.jtb-scope){background-color:var(--color-stone-50)}:where(.jtb-scope) .bg-stone-50\/40,.bg-stone-50\/40:where(.jtb-scope){background-color:#fafaf966}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-50\/40,.bg-stone-50\/40:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-50) 40%, transparent)}}:where(.jtb-scope) .bg-stone-50\/60,.bg-stone-50\/60:where(.jtb-scope){background-color:#fafaf999}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-50\/60,.bg-stone-50\/60:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-50) 60%, transparent)}}:where(.jtb-scope) .bg-stone-100,.bg-stone-100:where(.jtb-scope){background-color:var(--color-stone-100)}:where(.jtb-scope) .bg-stone-100\/60,.bg-stone-100\/60:where(.jtb-scope){background-color:#f5f5f499}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-100\/60,.bg-stone-100\/60:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-100) 60%, transparent)}}:where(.jtb-scope) .bg-stone-100\/70,.bg-stone-100\/70:where(.jtb-scope){background-color:#f5f5f4b3}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-100\/70,.bg-stone-100\/70:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-100) 70%, transparent)}}:where(.jtb-scope) .bg-stone-300,.bg-stone-300:where(.jtb-scope){background-color:var(--color-stone-300)}:where(.jtb-scope) .bg-stone-400,.bg-stone-400:where(.jtb-scope){background-color:var(--color-stone-400)}:where(.jtb-scope) .bg-stone-950\/30,.bg-stone-950\/30:where(.jtb-scope){background-color:#0c0a094d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-950\/30,.bg-stone-950\/30:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-950) 30%, transparent)}}:where(.jtb-scope) .bg-transparent,.bg-transparent:where(.jtb-scope){background-color:#0000}:where(.jtb-scope) .bg-white,.bg-white:where(.jtb-scope){background-color:var(--color-white)}:where(.jtb-scope) .bg-white\/40,.bg-white\/40:where(.jtb-scope){background-color:#fff6}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-white\/40,.bg-white\/40:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-white) 40%, transparent)}}:where(.jtb-scope) .bg-white\/70,.bg-white\/70:where(.jtb-scope){background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-white\/70,.bg-white\/70:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}:where(.jtb-scope) .bg-white\/90,.bg-white\/90:where(.jtb-scope){background-color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-white\/90,.bg-white\/90:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-white) 90%, transparent)}}:where(.jtb-scope) .bg-white\/95,.bg-white\/95:where(.jtb-scope){background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-white\/95,.bg-white\/95:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-white) 95%, transparent)}}:where(.jtb-scope) .p-0,.p-0:where(.jtb-scope){padding:0}:where(.jtb-scope) .p-0\.5,.p-0\.5:where(.jtb-scope){padding:calc(var(--spacing) * .5)}:where(.jtb-scope) .p-1,.p-1:where(.jtb-scope){padding:var(--spacing)}:where(.jtb-scope) .p-1\.5,.p-1\.5:where(.jtb-scope){padding:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .p-2,.p-2:where(.jtb-scope){padding:calc(var(--spacing) * 2)}:where(.jtb-scope) .p-2\.5,.p-2\.5:where(.jtb-scope){padding:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .p-3,.p-3:where(.jtb-scope){padding:calc(var(--spacing) * 3)}:where(.jtb-scope) .p-4,.p-4:where(.jtb-scope){padding:calc(var(--spacing) * 4)}:where(.jtb-scope) .p-6,.p-6:where(.jtb-scope){padding:calc(var(--spacing) * 6)}:where(.jtb-scope) .p-8,.p-8:where(.jtb-scope){padding:calc(var(--spacing) * 8)}:where(.jtb-scope) .px-0\.5,.px-0\.5:where(.jtb-scope){padding-inline:calc(var(--spacing) * .5)}:where(.jtb-scope) .px-1,.px-1:where(.jtb-scope){padding-inline:var(--spacing)}:where(.jtb-scope) .px-1\.5,.px-1\.5:where(.jtb-scope){padding-inline:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .px-2,.px-2:where(.jtb-scope){padding-inline:calc(var(--spacing) * 2)}:where(.jtb-scope) .px-2\.5,.px-2\.5:where(.jtb-scope){padding-inline:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .px-3,.px-3:where(.jtb-scope){padding-inline:calc(var(--spacing) * 3)}:where(.jtb-scope) .px-4,.px-4:where(.jtb-scope){padding-inline:calc(var(--spacing) * 4)}:where(.jtb-scope) .px-5,.px-5:where(.jtb-scope){padding-inline:calc(var(--spacing) * 5)}:where(.jtb-scope) .px-8,.px-8:where(.jtb-scope){padding-inline:calc(var(--spacing) * 8)}:where(.jtb-scope) .py-0\.5,.py-0\.5:where(.jtb-scope){padding-block:calc(var(--spacing) * .5)}:where(.jtb-scope) .py-1,.py-1:where(.jtb-scope){padding-block:var(--spacing)}:where(.jtb-scope) .py-1\.5,.py-1\.5:where(.jtb-scope){padding-block:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .py-2,.py-2:where(.jtb-scope){padding-block:calc(var(--spacing) * 2)}:where(.jtb-scope) .py-2\.5,.py-2\.5:where(.jtb-scope){padding-block:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .py-3,.py-3:where(.jtb-scope){padding-block:calc(var(--spacing) * 3)}:where(.jtb-scope) .py-4,.py-4:where(.jtb-scope){padding-block:calc(var(--spacing) * 4)}:where(.jtb-scope) .py-8,.py-8:where(.jtb-scope){padding-block:calc(var(--spacing) * 8)}:where(.jtb-scope) .py-10,.py-10:where(.jtb-scope){padding-block:calc(var(--spacing) * 10)}:where(.jtb-scope) .pt-1,.pt-1:where(.jtb-scope){padding-top:var(--spacing)}:where(.jtb-scope) .pt-3,.pt-3:where(.jtb-scope){padding-top:calc(var(--spacing) * 3)}:where(.jtb-scope) .pt-5,.pt-5:where(.jtb-scope){padding-top:calc(var(--spacing) * 5)}:where(.jtb-scope) .pr-5,.pr-5:where(.jtb-scope){padding-right:calc(var(--spacing) * 5)}:where(.jtb-scope) .pb-4,.pb-4:where(.jtb-scope){padding-bottom:calc(var(--spacing) * 4)}:where(.jtb-scope) .pl-2,.pl-2:where(.jtb-scope){padding-left:calc(var(--spacing) * 2)}:where(.jtb-scope) .pl-7,.pl-7:where(.jtb-scope){padding-left:calc(var(--spacing) * 7)}:where(.jtb-scope) .pl-10,.pl-10:where(.jtb-scope){padding-left:calc(var(--spacing) * 10)}:where(.jtb-scope) .text-center,.text-center:where(.jtb-scope){text-align:center}:where(.jtb-scope) .text-left,.text-left:where(.jtb-scope){text-align:left}:where(.jtb-scope) .align-\[-2px\],.align-\[-2px\]:where(.jtb-scope){vertical-align:-2px}:where(.jtb-scope) .align-middle,.align-middle:where(.jtb-scope){vertical-align:middle}:where(.jtb-scope) .font-mono,.font-mono:where(.jtb-scope){font-family:var(--font-mono)}:where(.jtb-scope) .text-base,.text-base:where(.jtb-scope){font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:where(.jtb-scope) .text-sm,.text-sm:where(.jtb-scope){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}:where(.jtb-scope) .text-xs,.text-xs:where(.jtb-scope){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}:where(.jtb-scope) .text-\[9px\],.text-\[9px\]:where(.jtb-scope){font-size:9px}:where(.jtb-scope) .text-\[10px\],.text-\[10px\]:where(.jtb-scope){font-size:10px}:where(.jtb-scope) .text-\[11px\],.text-\[11px\]:where(.jtb-scope){font-size:11px}:where(.jtb-scope) .text-\[12px\],.text-\[12px\]:where(.jtb-scope){font-size:12px}:where(.jtb-scope) .text-\[13px\],.text-\[13px\]:where(.jtb-scope){font-size:13px}:where(.jtb-scope) .leading-4,.leading-4:where(.jtb-scope){--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}:where(.jtb-scope) .leading-5,.leading-5:where(.jtb-scope){--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}:where(.jtb-scope) .leading-6,.leading-6:where(.jtb-scope){--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}:where(.jtb-scope) .leading-none,.leading-none:where(.jtb-scope){--tw-leading:1;line-height:1}:where(.jtb-scope) .font-medium,.font-medium:where(.jtb-scope){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}:where(.jtb-scope) .font-normal,.font-normal:where(.jtb-scope){--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}:where(.jtb-scope) .font-semibold,.font-semibold:where(.jtb-scope){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}:where(.jtb-scope) .tracking-tight,.tracking-tight:where(.jtb-scope){--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}:where(.jtb-scope) .tracking-wide,.tracking-wide:where(.jtb-scope){--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}:where(.jtb-scope) .tracking-wider,.tracking-wider:where(.jtb-scope){--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}:where(.jtb-scope) .break-words,.break-words:where(.jtb-scope){overflow-wrap:break-word}:where(.jtb-scope) .whitespace-nowrap,.whitespace-nowrap:where(.jtb-scope){white-space:nowrap}:where(.jtb-scope) .whitespace-pre-wrap,.whitespace-pre-wrap:where(.jtb-scope){white-space:pre-wrap}:where(.jtb-scope) .text-amber-500,.text-amber-500:where(.jtb-scope){color:var(--color-amber-500)}:where(.jtb-scope) .text-amber-600,.text-amber-600:where(.jtb-scope){color:var(--color-amber-600)}:where(.jtb-scope) .text-amber-700,.text-amber-700:where(.jtb-scope){color:var(--color-amber-700)}:where(.jtb-scope) .text-amber-800,.text-amber-800:where(.jtb-scope){color:var(--color-amber-800)}:where(.jtb-scope) .text-brand,.text-brand:where(.jtb-scope){color:var(--color-brand)}:where(.jtb-scope) .text-brand-dark,.text-brand-dark:where(.jtb-scope){color:var(--color-brand-dark)}:where(.jtb-scope) .text-brand-gray,.text-brand-gray:where(.jtb-scope){color:var(--color-brand-gray)}:where(.jtb-scope) .text-emerald-500,.text-emerald-500:where(.jtb-scope){color:var(--color-emerald-500)}:where(.jtb-scope) .text-emerald-600,.text-emerald-600:where(.jtb-scope){color:var(--color-emerald-600)}:where(.jtb-scope) .text-red-500,.text-red-500:where(.jtb-scope){color:var(--color-red-500)}:where(.jtb-scope) .text-red-600,.text-red-600:where(.jtb-scope){color:var(--color-red-600)}:where(.jtb-scope) .text-red-700,.text-red-700:where(.jtb-scope){color:var(--color-red-700)}:where(.jtb-scope) .text-sky-700,.text-sky-700:where(.jtb-scope){color:var(--color-sky-700)}:where(.jtb-scope) .text-stone-300,.text-stone-300:where(.jtb-scope){color:var(--color-stone-300)}:where(.jtb-scope) .text-stone-400,.text-stone-400:where(.jtb-scope){color:var(--color-stone-400)}:where(.jtb-scope) .text-stone-500,.text-stone-500:where(.jtb-scope){color:var(--color-stone-500)}:where(.jtb-scope) .text-stone-600,.text-stone-600:where(.jtb-scope){color:var(--color-stone-600)}:where(.jtb-scope) .text-stone-700,.text-stone-700:where(.jtb-scope){color:var(--color-stone-700)}:where(.jtb-scope) .text-stone-800,.text-stone-800:where(.jtb-scope){color:var(--color-stone-800)}:where(.jtb-scope) .text-stone-900,.text-stone-900:where(.jtb-scope){color:var(--color-stone-900)}:where(.jtb-scope) .text-white,.text-white:where(.jtb-scope){color:var(--color-white)}:where(.jtb-scope) .uppercase,.uppercase:where(.jtb-scope){text-transform:uppercase}:where(.jtb-scope) .tabular-nums,.tabular-nums:where(.jtb-scope){--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}:where(.jtb-scope) .line-through,.line-through:where(.jtb-scope){text-decoration-line:line-through}:where(.jtb-scope) .opacity-0,.opacity-0:where(.jtb-scope){opacity:0}:where(.jtb-scope) .opacity-40,.opacity-40:where(.jtb-scope){opacity:.4}:where(.jtb-scope) .opacity-50,.opacity-50:where(.jtb-scope){opacity:.5}:where(.jtb-scope) .opacity-100,.opacity-100:where(.jtb-scope){opacity:1}:where(.jtb-scope) .shadow-2xl,.shadow-2xl:where(.jtb-scope){--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-\[-10px_0_30px_rgba\(0\,0\,0\,0\.07\)\],.shadow-\[-10px_0_30px_rgba\(0\,0\,0\,0\.07\)\]:where(.jtb-scope){--tw-shadow:-10px 0 30px var(--tw-shadow-color,#00000012);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-lg,.shadow-lg:where(.jtb-scope){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-sm,.shadow-sm:where(.jtb-scope){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-xl,.shadow-xl:where(.jtb-scope){--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .ring-1,.ring-1:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .ring-2,.ring-2:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-emerald-950\/10,.shadow-emerald-950\/10:where(.jtb-scope){--tw-shadow-color:#002c221a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .shadow-emerald-950\/10,.shadow-emerald-950\/10:where(.jtb-scope){--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-emerald-950) 10%, transparent) var(--tw-shadow-alpha), transparent)}}:where(.jtb-scope) .ring-black\/10,.ring-black\/10:where(.jtb-scope){--tw-ring-color:#0000001a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-black\/10,.ring-black\/10:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}:where(.jtb-scope) .ring-black\/\[0\.04\],.ring-black\/\[0\.04\]:where(.jtb-scope){--tw-ring-color:#0000000a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-black\/\[0\.04\],.ring-black\/\[0\.04\]:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-black) 4%, transparent)}}:where(.jtb-scope) .ring-black\/\[0\.05\],.ring-black\/\[0\.05\]:where(.jtb-scope){--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-black\/\[0\.05\],.ring-black\/\[0\.05\]:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}:where(.jtb-scope) .ring-black\/\[0\.06\],.ring-black\/\[0\.06\]:where(.jtb-scope){--tw-ring-color:#0000000f}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-black\/\[0\.06\],.ring-black\/\[0\.06\]:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-black) 6%, transparent)}}:where(.jtb-scope) .ring-brand,.ring-brand:where(.jtb-scope){--tw-ring-color:var(--color-brand)}:where(.jtb-scope) .ring-brand\/10,.ring-brand\/10:where(.jtb-scope){--tw-ring-color:#0088841a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-brand\/10,.ring-brand\/10:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 10%, transparent)}}:where(.jtb-scope) .ring-brand\/40,.ring-brand\/40:where(.jtb-scope){--tw-ring-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-brand\/40,.ring-brand\/40:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .ring-brand\/60,.ring-brand\/60:where(.jtb-scope){--tw-ring-color:#00888499}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-brand\/60,.ring-brand\/60:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 60%, transparent)}}:where(.jtb-scope) .ring-brand\/70,.ring-brand\/70:where(.jtb-scope){--tw-ring-color:#008884b3}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-brand\/70,.ring-brand\/70:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 70%, transparent)}}:where(.jtb-scope) .ring-stone-500,.ring-stone-500:where(.jtb-scope){--tw-ring-color:var(--color-stone-500)}:where(.jtb-scope) .ring-offset-1,.ring-offset-1:where(.jtb-scope){--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}:where(.jtb-scope) .ring-offset-2,.ring-offset-2:where(.jtb-scope){--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}:where(.jtb-scope) .filter,.filter:where(.jtb-scope){filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}:where(.jtb-scope) .backdrop-blur,.backdrop-blur:where(.jtb-scope){--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}:where(.jtb-scope) .transition,.transition:where(.jtb-scope){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:where(.jtb-scope) .transition-\[width\],.transition-\[width\]:where(.jtb-scope){transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:where(.jtb-scope) .transition-colors,.transition-colors:where(.jtb-scope){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:where(.jtb-scope) .transition-opacity,.transition-opacity:where(.jtb-scope){transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:where(.jtb-scope) .duration-200,.duration-200:where(.jtb-scope){--tw-duration:.2s;transition-duration:.2s}:where(.jtb-scope) .outline-none,.outline-none:where(.jtb-scope){--tw-outline-style:none;outline-style:none}:where(.jtb-scope) .select-none,.select-none:where(.jtb-scope){-webkit-user-select:none;user-select:none}:where(.jtb-scope) .\[--anchor-gap\:4px\],.\[--anchor-gap\:4px\]:where(.jtb-scope){--anchor-gap:4px}:where(.jtb-scope) .\[writing-mode\:vertical-rl\],.\[writing-mode\:vertical-rl\]:where(.jtb-scope){writing-mode:vertical-rl}@media (hover:hover){:where(.jtb-scope) .group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\:opacity-100:is(:where(.group):hover *):where(.jtb-scope),:where(.jtb-scope) .group-hover\/comment\:opacity-100:is(:where(.group\/comment):hover *),.group-hover\/comment\:opacity-100:is(:where(.group\/comment):hover *):where(.jtb-scope){opacity:1}}:where(.jtb-scope) .group-data-\[checked\]\:border-brand:is(:where(.group)[data-checked] *),.group-data-\[checked\]\:border-brand:is(:where(.group)[data-checked] *):where(.jtb-scope){border-color:var(--color-brand)}:where(.jtb-scope) .group-data-\[checked\]\:opacity-100:is(:where(.group)[data-checked] *),.group-data-\[checked\]\:opacity-100:is(:where(.group)[data-checked] *):where(.jtb-scope){opacity:1}:where(.jtb-scope) .focus-within\:bg-stone-50:focus-within,.focus-within\:bg-stone-50:focus-within:where(.jtb-scope){background-color:var(--color-stone-50)}:where(.jtb-scope) .focus-within\:opacity-100:focus-within,.focus-within\:opacity-100:focus-within:where(.jtb-scope){opacity:1}@media (hover:hover){:where(.jtb-scope) .hover\:border-brand:hover,.hover\:border-brand:hover:where(.jtb-scope){border-color:var(--color-brand)}:where(.jtb-scope) .hover\:border-brand\/30:hover,.hover\:border-brand\/30:hover:where(.jtb-scope){border-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:border-brand\/30:hover,.hover\:border-brand\/30:hover:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}:where(.jtb-scope) .hover\:border-brand\/40:hover,.hover\:border-brand\/40:hover:where(.jtb-scope){border-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:border-brand\/40:hover,.hover\:border-brand\/40:hover:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .hover\:bg-amber-100:hover,.hover\:bg-amber-100:hover:where(.jtb-scope){background-color:var(--color-amber-100)}:where(.jtb-scope) .hover\:bg-brand:hover,.hover\:bg-brand:hover:where(.jtb-scope){background-color:var(--color-brand)}:where(.jtb-scope) .hover\:bg-brand-soft:hover,.hover\:bg-brand-soft:hover:where(.jtb-scope){background-color:var(--color-brand-soft)}:where(.jtb-scope) .hover\:bg-brand-soft\/30:hover,.hover\:bg-brand-soft\/30:hover:where(.jtb-scope){background-color:#e8f6f24d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:bg-brand-soft\/30:hover,.hover\:bg-brand-soft\/30:hover:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 30%, transparent)}}:where(.jtb-scope) .hover\:bg-brand-soft\/40:hover,.hover\:bg-brand-soft\/40:hover:where(.jtb-scope){background-color:#e8f6f266}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:bg-brand-soft\/40:hover,.hover\:bg-brand-soft\/40:hover:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 40%, transparent)}}:where(.jtb-scope) .hover\:bg-brand\/40:hover,.hover\:bg-brand\/40:hover:where(.jtb-scope){background-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:bg-brand\/40:hover,.hover\:bg-brand\/40:hover:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .hover\:bg-red-50:hover,.hover\:bg-red-50:hover:where(.jtb-scope){background-color:var(--color-red-50)}:where(.jtb-scope) .hover\:bg-red-700:hover,.hover\:bg-red-700:hover:where(.jtb-scope){background-color:var(--color-red-700)}:where(.jtb-scope) .hover\:bg-stone-50:hover,.hover\:bg-stone-50:hover:where(.jtb-scope){background-color:var(--color-stone-50)}:where(.jtb-scope) .hover\:bg-stone-100:hover,.hover\:bg-stone-100:hover:where(.jtb-scope){background-color:var(--color-stone-100)}:where(.jtb-scope) .hover\:bg-white:hover,.hover\:bg-white:hover:where(.jtb-scope){background-color:var(--color-white)}:where(.jtb-scope) .hover\:text-amber-500:hover,.hover\:text-amber-500:hover:where(.jtb-scope){color:var(--color-amber-500)}:where(.jtb-scope) .hover\:text-amber-700:hover,.hover\:text-amber-700:hover:where(.jtb-scope){color:var(--color-amber-700)}:where(.jtb-scope) .hover\:text-brand-dark:hover,.hover\:text-brand-dark:hover:where(.jtb-scope){color:var(--color-brand-dark)}:where(.jtb-scope) .hover\:text-emerald-600:hover,.hover\:text-emerald-600:hover:where(.jtb-scope){color:var(--color-emerald-600)}:where(.jtb-scope) .hover\:text-red-600:hover,.hover\:text-red-600:hover:where(.jtb-scope){color:var(--color-red-600)}:where(.jtb-scope) .hover\:text-stone-400:hover,.hover\:text-stone-400:hover:where(.jtb-scope){color:var(--color-stone-400)}:where(.jtb-scope) .hover\:text-stone-500:hover,.hover\:text-stone-500:hover:where(.jtb-scope){color:var(--color-stone-500)}:where(.jtb-scope) .hover\:text-stone-600:hover,.hover\:text-stone-600:hover:where(.jtb-scope){color:var(--color-stone-600)}:where(.jtb-scope) .hover\:underline:hover,.hover\:underline:hover:where(.jtb-scope){text-decoration-line:underline}:where(.jtb-scope) .hover\:ring-brand\/30:hover,.hover\:ring-brand\/30:hover:where(.jtb-scope){--tw-ring-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:ring-brand\/30:hover,.hover\:ring-brand\/30:hover:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}}:where(.jtb-scope) .focus\:border-brand:focus,.focus\:border-brand:focus:where(.jtb-scope){border-color:var(--color-brand)}:where(.jtb-scope) .focus\:ring-1:focus,.focus\:ring-1:focus:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .focus\:ring-2:focus,.focus\:ring-2:focus:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .focus\:ring-brand:focus,.focus\:ring-brand:focus:where(.jtb-scope){--tw-ring-color:var(--color-brand)}:where(.jtb-scope) .focus\:ring-brand\/10:focus,.focus\:ring-brand\/10:focus:where(.jtb-scope){--tw-ring-color:#0088841a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .focus\:ring-brand\/10:focus,.focus\:ring-brand\/10:focus:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 10%, transparent)}}:where(.jtb-scope) .focus\:ring-brand\/20:focus,.focus\:ring-brand\/20:focus:where(.jtb-scope){--tw-ring-color:#00888433}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .focus\:ring-brand\/20:focus,.focus\:ring-brand\/20:focus:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 20%, transparent)}}:where(.jtb-scope) .focus\:ring-brand\/30:focus,.focus\:ring-brand\/30:focus:where(.jtb-scope){--tw-ring-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .focus\:ring-brand\/30:focus,.focus\:ring-brand\/30:focus:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}:where(.jtb-scope) .focus\:ring-brand\/40:focus,.focus\:ring-brand\/40:focus:where(.jtb-scope){--tw-ring-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .focus\:ring-brand\/40:focus,.focus\:ring-brand\/40:focus:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .focus\:outline-none:focus,.focus\:outline-none:focus:where(.jtb-scope){--tw-outline-style:none;outline-style:none}:where(.jtb-scope) .active\:translate-y-px:active,.active\:translate-y-px:active:where(.jtb-scope){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}:where(.jtb-scope) .active\:cursor-grabbing:active,.active\:cursor-grabbing:active:where(.jtb-scope){cursor:grabbing}:where(.jtb-scope) .disabled\:cursor-not-allowed:disabled,.disabled\:cursor-not-allowed:disabled:where(.jtb-scope){cursor:not-allowed}:where(.jtb-scope) .disabled\:cursor-wait:disabled,.disabled\:cursor-wait:disabled:where(.jtb-scope){cursor:wait}:where(.jtb-scope) .disabled\:bg-stone-50:disabled,.disabled\:bg-stone-50:disabled:where(.jtb-scope){background-color:var(--color-stone-50)}:where(.jtb-scope) .disabled\:opacity-40:disabled,.disabled\:opacity-40:disabled:where(.jtb-scope){opacity:.4}:where(.jtb-scope) .disabled\:opacity-50:disabled,.disabled\:opacity-50:disabled:where(.jtb-scope){opacity:.5}:where(.jtb-scope) .disabled\:opacity-60:disabled,.disabled\:opacity-60:disabled:where(.jtb-scope){opacity:.6}:where(.jtb-scope) .aria-disabled\:cursor-not-allowed[aria-disabled=true],.aria-disabled\:cursor-not-allowed[aria-disabled=true]:where(.jtb-scope){cursor:not-allowed}:where(.jtb-scope) .aria-disabled\:opacity-40[aria-disabled=true],.aria-disabled\:opacity-40[aria-disabled=true]:where(.jtb-scope){opacity:.4}:where(.jtb-scope) .aria-disabled\:opacity-50[aria-disabled=true],.aria-disabled\:opacity-50[aria-disabled=true]:where(.jtb-scope){opacity:.5}:where(.jtb-scope) .data-\[checked\]\:border-brand\/40[data-checked],.data-\[checked\]\:border-brand\/40[data-checked]:where(.jtb-scope){border-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .data-\[checked\]\:border-brand\/40[data-checked],.data-\[checked\]\:border-brand\/40[data-checked]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .data-\[checked\]\:bg-brand-soft\/40[data-checked],.data-\[checked\]\:bg-brand-soft\/40[data-checked]:where(.jtb-scope){background-color:#e8f6f266}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .data-\[checked\]\:bg-brand-soft\/40[data-checked],.data-\[checked\]\:bg-brand-soft\/40[data-checked]:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 40%, transparent)}}:where(.jtb-scope) .data-\[focus\]\:bg-red-50[data-focus],.data-\[focus\]\:bg-red-50[data-focus]:where(.jtb-scope){background-color:var(--color-red-50)}:where(.jtb-scope) .data-\[focus\]\:bg-stone-100[data-focus],.data-\[focus\]\:bg-stone-100[data-focus]:where(.jtb-scope){background-color:var(--color-stone-100)}:where(.jtb-scope) .data-\[focus\]\:ring-2[data-focus],.data-\[focus\]\:ring-2[data-focus]:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .data-\[focus\]\:ring-brand\/30[data-focus],.data-\[focus\]\:ring-brand\/30[data-focus]:where(.jtb-scope){--tw-ring-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .data-\[focus\]\:ring-brand\/30[data-focus],.data-\[focus\]\:ring-brand\/30[data-focus]:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}@media not all and (width>=48rem){:where(.jtb-scope) .max-md\:w-full,.max-md\:w-full:where(.jtb-scope){width:100%}}@media (width>=40rem){:where(.jtb-scope) .sm\:items-center,.sm\:items-center:where(.jtb-scope){align-items:center}}@media (width>=48rem){:where(.jtb-scope) .md\:flex,.md\:flex:where(.jtb-scope){display:flex}:where(.jtb-scope) .md\:cursor-grab,.md\:cursor-grab:where(.jtb-scope){cursor:grab}:where(.jtb-scope) .md\:opacity-0,.md\:opacity-0:where(.jtb-scope){opacity:0}@media (hover:hover){:where(.jtb-scope) .md\:group-hover\:opacity-100:is(:where(.group):hover *),.md\:group-hover\:opacity-100:is(:where(.group):hover *):where(.jtb-scope){opacity:1}}:where(.jtb-scope) .md\:data-\[open\]\:opacity-100[data-open],.md\:data-\[open\]\:opacity-100[data-open]:where(.jtb-scope){opacity:1}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}} +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){:where(.jtb-scope) *,*:where(.jtb-scope),:where(.jtb-scope) :before,:where(.jtb-scope):before,:where(.jtb-scope) :after,:where(.jtb-scope):after,:where(.jtb-scope) ::backdrop,:where(.jtb-scope)::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{.jtb-scope{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-950:oklch(26.2% .051 172.552);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-700:oklch(50% .134 242.749);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-100:oklch(97% .001 106.424);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-stone-950:oklch(14.7% .004 49.25);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-brand:#008884;--color-brand-dark:#006f6b;--color-brand-soft:#e8f6f2;--color-brand-gray:#6f817a;--color-line:#0d0d0c0f}}@layer base{.jtb-scope{color:#1c1917;-webkit-font-smoothing:antialiased;text-align:left;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;line-height:1.5}.jtb-root{isolation:isolate;height:100%;min-height:0;position:relative;overflow:hidden}:where(.jtb-scope) *,*:where(.jtb-scope),:where(.jtb-scope) :before,:where(.jtb-scope):before,:where(.jtb-scope) :after,:where(.jtb-scope):after{box-sizing:border-box;border:0 solid}:where(.jtb-scope) h1,h1:where(.jtb-scope),:where(.jtb-scope) h2,h2:where(.jtb-scope),:where(.jtb-scope) h3,h3:where(.jtb-scope),:where(.jtb-scope) h4,h4:where(.jtb-scope),:where(.jtb-scope) h5,h5:where(.jtb-scope),:where(.jtb-scope) h6,h6:where(.jtb-scope),:where(.jtb-scope) p,p:where(.jtb-scope),:where(.jtb-scope) blockquote,blockquote:where(.jtb-scope),:where(.jtb-scope) pre,pre:where(.jtb-scope),:where(.jtb-scope) dl,dl:where(.jtb-scope),:where(.jtb-scope) dd,dd:where(.jtb-scope),:where(.jtb-scope) figure,figure:where(.jtb-scope){margin:0}:where(.jtb-scope) h1,h1:where(.jtb-scope),:where(.jtb-scope) h2,h2:where(.jtb-scope),:where(.jtb-scope) h3,h3:where(.jtb-scope),:where(.jtb-scope) h4,h4:where(.jtb-scope),:where(.jtb-scope) h5,h5:where(.jtb-scope),:where(.jtb-scope) h6,h6:where(.jtb-scope){font-size:inherit;font-weight:inherit}:where(.jtb-scope) ul,ul:where(.jtb-scope),:where(.jtb-scope) ol,ol:where(.jtb-scope){margin:0;padding:0;list-style:none}:where(.jtb-scope) button,button:where(.jtb-scope),:where(.jtb-scope) input,input:where(.jtb-scope),:where(.jtb-scope) optgroup,optgroup:where(.jtb-scope),:where(.jtb-scope) select,select:where(.jtb-scope),:where(.jtb-scope) textarea,textarea:where(.jtb-scope){font:inherit;font-feature-settings:inherit;letter-spacing:inherit;color:inherit;background-color:#0000;margin:0;padding:0}:where(.jtb-scope) button,button:where(.jtb-scope),:where(.jtb-scope) [role=button],[role=button]:where(.jtb-scope){cursor:pointer}:where(.jtb-scope) button,button:where(.jtb-scope){text-transform:none;-webkit-appearance:button;background-image:none}:where(.jtb-scope) :disabled,:disabled:where(.jtb-scope){cursor:default}:where(.jtb-scope) input::placeholder,input:where(.jtb-scope)::placeholder,:where(.jtb-scope) textarea::placeholder,textarea:where(.jtb-scope)::placeholder{opacity:1;color:#a8a29e}:where(.jtb-scope) textarea,textarea:where(.jtb-scope){resize:vertical}:where(.jtb-scope) a,a:where(.jtb-scope){color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}:where(.jtb-scope) img,img:where(.jtb-scope),:where(.jtb-scope) svg,svg:where(.jtb-scope),:where(.jtb-scope) video,video:where(.jtb-scope),:where(.jtb-scope) canvas,canvas:where(.jtb-scope){vertical-align:middle;display:block}:where(.jtb-scope) img,img:where(.jtb-scope),:where(.jtb-scope) video,video:where(.jtb-scope){max-width:100%;height:auto}:where(.jtb-scope) table,table:where(.jtb-scope){text-indent:0;border-color:inherit;border-collapse:collapse}:where(.jtb-scope) [hidden],[hidden]:where(.jtb-scope){display:none!important}}@layer components;@layer utilities{:where(.jtb-scope) .pointer-events-none,.pointer-events-none:where(.jtb-scope){pointer-events:none}:where(.jtb-scope) .collapse,.collapse:where(.jtb-scope){visibility:collapse}:where(.jtb-scope) .visible,.visible:where(.jtb-scope){visibility:visible}:where(.jtb-scope) .sr-only,.sr-only:where(.jtb-scope){clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:where(.jtb-scope) .absolute,.absolute:where(.jtb-scope){position:absolute}:where(.jtb-scope) .fixed,.fixed:where(.jtb-scope){position:fixed}:where(.jtb-scope) .relative,.relative:where(.jtb-scope){position:relative}:where(.jtb-scope) .sticky,.sticky:where(.jtb-scope){position:sticky}:where(.jtb-scope) .inset-0,.inset-0:where(.jtb-scope){inset:0}:where(.jtb-scope) .top-0,.top-0:where(.jtb-scope){top:0}:where(.jtb-scope) .top-1,.top-1:where(.jtb-scope){top:var(--spacing)}:where(.jtb-scope) .top-1\/2,.top-1\/2:where(.jtb-scope){top:50%}:where(.jtb-scope) .right-0,.right-0:where(.jtb-scope){right:0}:where(.jtb-scope) .right-1,.right-1:where(.jtb-scope){right:var(--spacing)}:where(.jtb-scope) .right-2,.right-2:where(.jtb-scope){right:calc(var(--spacing) * 2)}:where(.jtb-scope) .bottom-2,.bottom-2:where(.jtb-scope){bottom:calc(var(--spacing) * 2)}:where(.jtb-scope) .bottom-4,.bottom-4:where(.jtb-scope){bottom:calc(var(--spacing) * 4)}:where(.jtb-scope) .left-0,.left-0:where(.jtb-scope){left:0}:where(.jtb-scope) .left-1\/2,.left-1\/2:where(.jtb-scope){left:50%}:where(.jtb-scope) .left-2,.left-2:where(.jtb-scope){left:calc(var(--spacing) * 2)}:where(.jtb-scope) .z-10,.z-10:where(.jtb-scope){z-index:10}:where(.jtb-scope) .z-20,.z-20:where(.jtb-scope){z-index:20}:where(.jtb-scope) .z-30,.z-30:where(.jtb-scope){z-index:30}:where(.jtb-scope) .z-40,.z-40:where(.jtb-scope){z-index:40}:where(.jtb-scope) .z-50,.z-50:where(.jtb-scope){z-index:50}:where(.jtb-scope) .z-\[60\],.z-\[60\]:where(.jtb-scope){z-index:60}:where(.jtb-scope) .col-span-full,.col-span-full:where(.jtb-scope){grid-column:1/-1}:where(.jtb-scope) .mx-1,.mx-1:where(.jtb-scope){margin-inline:var(--spacing)}:where(.jtb-scope) .mx-2,.mx-2:where(.jtb-scope){margin-inline:calc(var(--spacing) * 2)}:where(.jtb-scope) .mx-auto,.mx-auto:where(.jtb-scope){margin-inline:auto}:where(.jtb-scope) .my-1,.my-1:where(.jtb-scope){margin-block:var(--spacing)}:where(.jtb-scope) .mt-0\.5,.mt-0\.5:where(.jtb-scope){margin-top:calc(var(--spacing) * .5)}:where(.jtb-scope) .mt-1,.mt-1:where(.jtb-scope){margin-top:var(--spacing)}:where(.jtb-scope) .mt-1\.5,.mt-1\.5:where(.jtb-scope){margin-top:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .mt-2,.mt-2:where(.jtb-scope){margin-top:calc(var(--spacing) * 2)}:where(.jtb-scope) .mt-3,.mt-3:where(.jtb-scope){margin-top:calc(var(--spacing) * 3)}:where(.jtb-scope) .mt-4,.mt-4:where(.jtb-scope){margin-top:calc(var(--spacing) * 4)}:where(.jtb-scope) .mt-5,.mt-5:where(.jtb-scope){margin-top:calc(var(--spacing) * 5)}:where(.jtb-scope) .mr-1,.mr-1:where(.jtb-scope){margin-right:var(--spacing)}:where(.jtb-scope) .mb-0\.5,.mb-0\.5:where(.jtb-scope){margin-bottom:calc(var(--spacing) * .5)}:where(.jtb-scope) .mb-1,.mb-1:where(.jtb-scope){margin-bottom:var(--spacing)}:where(.jtb-scope) .mb-1\.5,.mb-1\.5:where(.jtb-scope){margin-bottom:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .-ml-1,.-ml-1:where(.jtb-scope){margin-left:calc(var(--spacing) * -1)}:where(.jtb-scope) .ml-1,.ml-1:where(.jtb-scope){margin-left:var(--spacing)}:where(.jtb-scope) .ml-auto,.ml-auto:where(.jtb-scope){margin-left:auto}:where(.jtb-scope) .block,.block:where(.jtb-scope){display:block}:where(.jtb-scope) .contents,.contents:where(.jtb-scope){display:contents}:where(.jtb-scope) .flex,.flex:where(.jtb-scope){display:flex}:where(.jtb-scope) .grid,.grid:where(.jtb-scope){display:grid}:where(.jtb-scope) .hidden,.hidden:where(.jtb-scope){display:none}:where(.jtb-scope) .inline,.inline:where(.jtb-scope){display:inline}:where(.jtb-scope) .inline-block,.inline-block:where(.jtb-scope){display:inline-block}:where(.jtb-scope) .inline-flex,.inline-flex:where(.jtb-scope){display:inline-flex}:where(.jtb-scope) .table,.table:where(.jtb-scope){display:table}:where(.jtb-scope) .h-0\.5,.h-0\.5:where(.jtb-scope){height:calc(var(--spacing) * .5)}:where(.jtb-scope) .h-1\.5,.h-1\.5:where(.jtb-scope){height:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .h-2,.h-2:where(.jtb-scope){height:calc(var(--spacing) * 2)}:where(.jtb-scope) .h-2\.5,.h-2\.5:where(.jtb-scope){height:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .h-3,.h-3:where(.jtb-scope){height:calc(var(--spacing) * 3)}:where(.jtb-scope) .h-3\.5,.h-3\.5:where(.jtb-scope){height:calc(var(--spacing) * 3.5)}:where(.jtb-scope) .h-4,.h-4:where(.jtb-scope){height:calc(var(--spacing) * 4)}:where(.jtb-scope) .h-4\.5,.h-4\.5:where(.jtb-scope){height:calc(var(--spacing) * 4.5)}:where(.jtb-scope) .h-5,.h-5:where(.jtb-scope){height:calc(var(--spacing) * 5)}:where(.jtb-scope) .h-6,.h-6:where(.jtb-scope){height:calc(var(--spacing) * 6)}:where(.jtb-scope) .h-7,.h-7:where(.jtb-scope){height:calc(var(--spacing) * 7)}:where(.jtb-scope) .h-8,.h-8:where(.jtb-scope){height:calc(var(--spacing) * 8)}:where(.jtb-scope) .h-9,.h-9:where(.jtb-scope){height:calc(var(--spacing) * 9)}:where(.jtb-scope) .h-10,.h-10:where(.jtb-scope){height:calc(var(--spacing) * 10)}:where(.jtb-scope) .h-11,.h-11:where(.jtb-scope){height:calc(var(--spacing) * 11)}:where(.jtb-scope) .h-14,.h-14:where(.jtb-scope){height:calc(var(--spacing) * 14)}:where(.jtb-scope) .h-full,.h-full:where(.jtb-scope){height:100%}:where(.jtb-scope) .max-h-56,.max-h-56:where(.jtb-scope){max-height:calc(var(--spacing) * 56)}:where(.jtb-scope) .max-h-\[88dvh\],.max-h-\[88dvh\]:where(.jtb-scope){max-height:88dvh}:where(.jtb-scope) .max-h-\[min\(70vh\,34rem\)\],.max-h-\[min\(70vh\,34rem\)\]:where(.jtb-scope){max-height:min(70vh,34rem)}:where(.jtb-scope) .max-h-full,.max-h-full:where(.jtb-scope){max-height:100%}:where(.jtb-scope) .min-h-0,.min-h-0:where(.jtb-scope){min-height:0}:where(.jtb-scope) .min-h-8,.min-h-8:where(.jtb-scope){min-height:calc(var(--spacing) * 8)}:where(.jtb-scope) .min-h-10,.min-h-10:where(.jtb-scope){min-height:calc(var(--spacing) * 10)}:where(.jtb-scope) .min-h-11,.min-h-11:where(.jtb-scope){min-height:calc(var(--spacing) * 11)}:where(.jtb-scope) .min-h-12,.min-h-12:where(.jtb-scope){min-height:calc(var(--spacing) * 12)}:where(.jtb-scope) .min-h-24,.min-h-24:where(.jtb-scope){min-height:calc(var(--spacing) * 24)}:where(.jtb-scope) .min-h-\[5\.5rem\],.min-h-\[5\.5rem\]:where(.jtb-scope){min-height:5.5rem}:where(.jtb-scope) .min-h-\[220px\],.min-h-\[220px\]:where(.jtb-scope){min-height:220px}:where(.jtb-scope) .w-1\.5,.w-1\.5:where(.jtb-scope){width:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .w-2,.w-2:where(.jtb-scope){width:calc(var(--spacing) * 2)}:where(.jtb-scope) .w-2\.5,.w-2\.5:where(.jtb-scope){width:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .w-3,.w-3:where(.jtb-scope){width:calc(var(--spacing) * 3)}:where(.jtb-scope) .w-3\.5,.w-3\.5:where(.jtb-scope){width:calc(var(--spacing) * 3.5)}:where(.jtb-scope) .w-4,.w-4:where(.jtb-scope){width:calc(var(--spacing) * 4)}:where(.jtb-scope) .w-4\.5,.w-4\.5:where(.jtb-scope){width:calc(var(--spacing) * 4.5)}:where(.jtb-scope) .w-5,.w-5:where(.jtb-scope){width:calc(var(--spacing) * 5)}:where(.jtb-scope) .w-6,.w-6:where(.jtb-scope){width:calc(var(--spacing) * 6)}:where(.jtb-scope) .w-7,.w-7:where(.jtb-scope){width:calc(var(--spacing) * 7)}:where(.jtb-scope) .w-8,.w-8:where(.jtb-scope){width:calc(var(--spacing) * 8)}:where(.jtb-scope) .w-9,.w-9:where(.jtb-scope){width:calc(var(--spacing) * 9)}:where(.jtb-scope) .w-10,.w-10:where(.jtb-scope){width:calc(var(--spacing) * 10)}:where(.jtb-scope) .w-11,.w-11:where(.jtb-scope){width:calc(var(--spacing) * 11)}:where(.jtb-scope) .w-44,.w-44:where(.jtb-scope){width:calc(var(--spacing) * 44)}:where(.jtb-scope) .w-48,.w-48:where(.jtb-scope){width:calc(var(--spacing) * 48)}:where(.jtb-scope) .w-52,.w-52:where(.jtb-scope){width:calc(var(--spacing) * 52)}:where(.jtb-scope) .w-56,.w-56:where(.jtb-scope){width:calc(var(--spacing) * 56)}:where(.jtb-scope) .w-72,.w-72:where(.jtb-scope){width:calc(var(--spacing) * 72)}:where(.jtb-scope) .w-80,.w-80:where(.jtb-scope){width:calc(var(--spacing) * 80)}:where(.jtb-scope) .w-\[232px\],.w-\[232px\]:where(.jtb-scope){width:232px}:where(.jtb-scope) .w-\[360px\],.w-\[360px\]:where(.jtb-scope){width:360px}:where(.jtb-scope) .w-\[min\(22rem\,calc\(100vw-1rem\)\)\],.w-\[min\(22rem\,calc\(100vw-1rem\)\)\]:where(.jtb-scope){width:min(22rem,100vw - 1rem)}:where(.jtb-scope) .w-\[var\(--button-width\)\],.w-\[var\(--button-width\)\]:where(.jtb-scope){width:var(--button-width)}:where(.jtb-scope) .w-full,.w-full:where(.jtb-scope){width:100%}:where(.jtb-scope) .max-w-2xl,.max-w-2xl:where(.jtb-scope){max-width:var(--container-2xl)}:where(.jtb-scope) .max-w-48,.max-w-48:where(.jtb-scope){max-width:calc(var(--spacing) * 48)}:where(.jtb-scope) .max-w-\[92\%\],.max-w-\[92\%\]:where(.jtb-scope){max-width:92%}:where(.jtb-scope) .max-w-\[260px\],.max-w-\[260px\]:where(.jtb-scope){max-width:260px}:where(.jtb-scope) .max-w-lg,.max-w-lg:where(.jtb-scope){max-width:var(--container-lg)}:where(.jtb-scope) .max-w-md,.max-w-md:where(.jtb-scope){max-width:var(--container-md)}:where(.jtb-scope) .max-w-sm,.max-w-sm:where(.jtb-scope){max-width:var(--container-sm)}:where(.jtb-scope) .max-w-xl,.max-w-xl:where(.jtb-scope){max-width:var(--container-xl)}:where(.jtb-scope) .min-w-0,.min-w-0:where(.jtb-scope){min-width:0}:where(.jtb-scope) .min-w-\[8rem\],.min-w-\[8rem\]:where(.jtb-scope){min-width:8rem}:where(.jtb-scope) .min-w-max,.min-w-max:where(.jtb-scope){min-width:max-content}:where(.jtb-scope) .flex-1,.flex-1:where(.jtb-scope){flex:1}:where(.jtb-scope) .shrink-0,.shrink-0:where(.jtb-scope){flex-shrink:0}:where(.jtb-scope) .border-collapse,.border-collapse:where(.jtb-scope){border-collapse:collapse}:where(.jtb-scope) .-translate-x-1\/2,.-translate-x-1\/2:where(.jtb-scope){--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}:where(.jtb-scope) .-translate-y-1\/2,.-translate-y-1\/2:where(.jtb-scope){--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}:where(.jtb-scope) .-rotate-90,.-rotate-90:where(.jtb-scope){rotate:-90deg}:where(.jtb-scope) .rotate-90,.rotate-90:where(.jtb-scope){rotate:90deg}:where(.jtb-scope) .animate-spin,.animate-spin:where(.jtb-scope){animation:var(--animate-spin)}:where(.jtb-scope) .cursor-col-resize,.cursor-col-resize:where(.jtb-scope){cursor:col-resize}:where(.jtb-scope) .cursor-grab,.cursor-grab:where(.jtb-scope){cursor:grab}:where(.jtb-scope) .cursor-pointer,.cursor-pointer:where(.jtb-scope){cursor:pointer}:where(.jtb-scope) .touch-none,.touch-none:where(.jtb-scope){touch-action:none}:where(.jtb-scope) .resize,.resize:where(.jtb-scope){resize:both}:where(.jtb-scope) .resize-none,.resize-none:where(.jtb-scope){resize:none}:where(.jtb-scope) .resize-y,.resize-y:where(.jtb-scope){resize:vertical}:where(.jtb-scope) .grid-cols-2,.grid-cols-2:where(.jtb-scope){grid-template-columns:repeat(2,minmax(0,1fr))}:where(.jtb-scope) .grid-cols-7,.grid-cols-7:where(.jtb-scope){grid-template-columns:repeat(7,minmax(0,1fr))}:where(.jtb-scope) .grid-cols-8,.grid-cols-8:where(.jtb-scope){grid-template-columns:repeat(8,minmax(0,1fr))}:where(.jtb-scope) .grid-cols-\[64px_minmax\(0\,1fr\)\],.grid-cols-\[64px_minmax\(0\,1fr\)\]:where(.jtb-scope){grid-template-columns:64px minmax(0,1fr)}:where(.jtb-scope) .grid-cols-\[88px_minmax\(0\,1fr\)\],.grid-cols-\[88px_minmax\(0\,1fr\)\]:where(.jtb-scope){grid-template-columns:88px minmax(0,1fr)}:where(.jtb-scope) .grid-rows-6,.grid-rows-6:where(.jtb-scope){grid-template-rows:repeat(6,minmax(0,1fr))}:where(.jtb-scope) .flex-col,.flex-col:where(.jtb-scope){flex-direction:column}:where(.jtb-scope) .flex-wrap,.flex-wrap:where(.jtb-scope){flex-wrap:wrap}:where(.jtb-scope) .items-baseline,.items-baseline:where(.jtb-scope){align-items:baseline}:where(.jtb-scope) .items-center,.items-center:where(.jtb-scope){align-items:center}:where(.jtb-scope) .items-end,.items-end:where(.jtb-scope){align-items:flex-end}:where(.jtb-scope) .items-start,.items-start:where(.jtb-scope){align-items:flex-start}:where(.jtb-scope) .items-stretch,.items-stretch:where(.jtb-scope){align-items:stretch}:where(.jtb-scope) .justify-between,.justify-between:where(.jtb-scope){justify-content:space-between}:where(.jtb-scope) .justify-center,.justify-center:where(.jtb-scope){justify-content:center}:where(.jtb-scope) .justify-end,.justify-end:where(.jtb-scope){justify-content:flex-end}:where(.jtb-scope) .gap-0\.5,.gap-0\.5:where(.jtb-scope){gap:calc(var(--spacing) * .5)}:where(.jtb-scope) .gap-1,.gap-1:where(.jtb-scope){gap:var(--spacing)}:where(.jtb-scope) .gap-1\.5,.gap-1\.5:where(.jtb-scope){gap:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .gap-2,.gap-2:where(.jtb-scope){gap:calc(var(--spacing) * 2)}:where(.jtb-scope) .gap-2\.5,.gap-2\.5:where(.jtb-scope){gap:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .gap-3,.gap-3:where(.jtb-scope){gap:calc(var(--spacing) * 3)}:where(.jtb-scope) :where(.space-y-0\.5>:not(:last-child)),:where(.space-y-0\.5>:not(:last-child)):where(.jtb-scope){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.jtb-scope) :where(.space-y-1>:not(:last-child)),:where(.space-y-1>:not(:last-child)):where(.jtb-scope){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.jtb-scope) :where(.space-y-2>:not(:last-child)),:where(.space-y-2>:not(:last-child)):where(.jtb-scope){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.jtb-scope) .gap-x-2,.gap-x-2:where(.jtb-scope){column-gap:calc(var(--spacing) * 2)}:where(.jtb-scope) .gap-y-1\.5,.gap-y-1\.5:where(.jtb-scope){row-gap:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .gap-y-2,.gap-y-2:where(.jtb-scope){row-gap:calc(var(--spacing) * 2)}:where(.jtb-scope) :where(.divide-y>:not(:last-child)),:where(.divide-y>:not(:last-child)):where(.jtb-scope){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.jtb-scope) :where(.divide-line>:not(:last-child)),:where(.divide-line>:not(:last-child)):where(.jtb-scope){border-color:var(--color-line)}:where(.jtb-scope) .self-start,.self-start:where(.jtb-scope){align-self:flex-start}:where(.jtb-scope) .truncate,.truncate:where(.jtb-scope){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:where(.jtb-scope) .overflow-auto,.overflow-auto:where(.jtb-scope){overflow:auto}:where(.jtb-scope) .overflow-hidden,.overflow-hidden:where(.jtb-scope){overflow:hidden}:where(.jtb-scope) .overflow-x-auto,.overflow-x-auto:where(.jtb-scope){overflow-x:auto}:where(.jtb-scope) .overflow-y-auto,.overflow-y-auto:where(.jtb-scope){overflow-y:auto}:where(.jtb-scope) .rounded,.rounded:where(.jtb-scope){border-radius:.25rem}:where(.jtb-scope) .rounded-2xl,.rounded-2xl:where(.jtb-scope){border-radius:var(--radius-2xl)}:where(.jtb-scope) .rounded-full,.rounded-full:where(.jtb-scope){border-radius:3.40282e38px}:where(.jtb-scope) .rounded-lg,.rounded-lg:where(.jtb-scope){border-radius:var(--radius-lg)}:where(.jtb-scope) .rounded-md,.rounded-md:where(.jtb-scope){border-radius:var(--radius-md)}:where(.jtb-scope) .rounded-xl,.rounded-xl:where(.jtb-scope){border-radius:var(--radius-xl)}:where(.jtb-scope) .rounded-t-2xl,.rounded-t-2xl:where(.jtb-scope){border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}:where(.jtb-scope) .rounded-t-xl,.rounded-t-xl:where(.jtb-scope){border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}:where(.jtb-scope) .border,.border:where(.jtb-scope){border-style:var(--tw-border-style);border-width:1px}:where(.jtb-scope) .border-2,.border-2:where(.jtb-scope){border-style:var(--tw-border-style);border-width:2px}:where(.jtb-scope) .border-t,.border-t:where(.jtb-scope){border-top-style:var(--tw-border-style);border-top-width:1px}:where(.jtb-scope) .border-r,.border-r:where(.jtb-scope){border-right-style:var(--tw-border-style);border-right-width:1px}:where(.jtb-scope) .border-b,.border-b:where(.jtb-scope){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}:where(.jtb-scope) .border-l,.border-l:where(.jtb-scope){border-left-style:var(--tw-border-style);border-left-width:1px}:where(.jtb-scope) .border-l-2,.border-l-2:where(.jtb-scope){border-left-style:var(--tw-border-style);border-left-width:2px}:where(.jtb-scope) .border-dashed,.border-dashed:where(.jtb-scope){--tw-border-style:dashed;border-style:dashed}:where(.jtb-scope) .border-black\/\[0\.04\],.border-black\/\[0\.04\]:where(.jtb-scope){border-color:#0000000a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-black\/\[0\.04\],.border-black\/\[0\.04\]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-black) 4%, transparent)}}:where(.jtb-scope) .border-black\/\[0\.05\],.border-black\/\[0\.05\]:where(.jtb-scope){border-color:#0000000d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-black\/\[0\.05\],.border-black\/\[0\.05\]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}:where(.jtb-scope) .border-black\/\[0\.06\],.border-black\/\[0\.06\]:where(.jtb-scope){border-color:#0000000f}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-black\/\[0\.06\],.border-black\/\[0\.06\]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-black) 6%, transparent)}}:where(.jtb-scope) .border-black\/\[0\.08\],.border-black\/\[0\.08\]:where(.jtb-scope){border-color:#00000014}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-black\/\[0\.08\],.border-black\/\[0\.08\]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-black) 8%, transparent)}}:where(.jtb-scope) .border-brand,.border-brand:where(.jtb-scope){border-color:var(--color-brand)}:where(.jtb-scope) .border-brand\/20,.border-brand\/20:where(.jtb-scope){border-color:#00888433}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/20,.border-brand\/20:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 20%, transparent)}}:where(.jtb-scope) .border-brand\/30,.border-brand\/30:where(.jtb-scope){border-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/30,.border-brand\/30:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}:where(.jtb-scope) .border-brand\/40,.border-brand\/40:where(.jtb-scope){border-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/40,.border-brand\/40:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .border-brand\/50,.border-brand\/50:where(.jtb-scope){border-color:#00888480}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/50,.border-brand\/50:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 50%, transparent)}}:where(.jtb-scope) .border-brand\/60,.border-brand\/60:where(.jtb-scope){border-color:#00888499}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .border-brand\/60,.border-brand\/60:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 60%, transparent)}}:where(.jtb-scope) .border-emerald-100,.border-emerald-100:where(.jtb-scope){border-color:var(--color-emerald-100)}:where(.jtb-scope) .border-line,.border-line:where(.jtb-scope){border-color:var(--color-line)}:where(.jtb-scope) .border-red-200,.border-red-200:where(.jtb-scope){border-color:var(--color-red-200)}:where(.jtb-scope) .border-stone-100,.border-stone-100:where(.jtb-scope){border-color:var(--color-stone-100)}:where(.jtb-scope) .border-stone-200,.border-stone-200:where(.jtb-scope){border-color:var(--color-stone-200)}:where(.jtb-scope) .border-stone-300,.border-stone-300:where(.jtb-scope){border-color:var(--color-stone-300)}:where(.jtb-scope) .bg-\[\#fbfdfb\],.bg-\[\#fbfdfb\]:where(.jtb-scope){background-color:#fbfdfb}:where(.jtb-scope) .bg-amber-50,.bg-amber-50:where(.jtb-scope){background-color:var(--color-amber-50)}:where(.jtb-scope) .bg-amber-100,.bg-amber-100:where(.jtb-scope){background-color:var(--color-amber-100)}:where(.jtb-scope) .bg-brand,.bg-brand:where(.jtb-scope){background-color:var(--color-brand)}:where(.jtb-scope) .bg-brand-dark,.bg-brand-dark:where(.jtb-scope){background-color:var(--color-brand-dark)}:where(.jtb-scope) .bg-brand-soft,.bg-brand-soft:where(.jtb-scope){background-color:var(--color-brand-soft)}:where(.jtb-scope) .bg-brand-soft\/20,.bg-brand-soft\/20:where(.jtb-scope){background-color:#e8f6f233}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/20,.bg-brand-soft\/20:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 20%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/30,.bg-brand-soft\/30:where(.jtb-scope){background-color:#e8f6f24d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/30,.bg-brand-soft\/30:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 30%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/40,.bg-brand-soft\/40:where(.jtb-scope){background-color:#e8f6f266}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/40,.bg-brand-soft\/40:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 40%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/45,.bg-brand-soft\/45:where(.jtb-scope){background-color:#e8f6f273}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/45,.bg-brand-soft\/45:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 45%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/50,.bg-brand-soft\/50:where(.jtb-scope){background-color:#e8f6f280}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/50,.bg-brand-soft\/50:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 50%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/60,.bg-brand-soft\/60:where(.jtb-scope){background-color:#e8f6f299}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/60,.bg-brand-soft\/60:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 60%, transparent)}}:where(.jtb-scope) .bg-brand-soft\/70,.bg-brand-soft\/70:where(.jtb-scope){background-color:#e8f6f2b3}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-brand-soft\/70,.bg-brand-soft\/70:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 70%, transparent)}}:where(.jtb-scope) .bg-emerald-50,.bg-emerald-50:where(.jtb-scope){background-color:var(--color-emerald-50)}:where(.jtb-scope) .bg-emerald-50\/30,.bg-emerald-50\/30:where(.jtb-scope){background-color:#ecfdf54d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-emerald-50\/30,.bg-emerald-50\/30:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-emerald-50) 30%, transparent)}}:where(.jtb-scope) .bg-emerald-500,.bg-emerald-500:where(.jtb-scope){background-color:var(--color-emerald-500)}:where(.jtb-scope) .bg-red-50,.bg-red-50:where(.jtb-scope){background-color:var(--color-red-50)}:where(.jtb-scope) .bg-red-100,.bg-red-100:where(.jtb-scope){background-color:var(--color-red-100)}:where(.jtb-scope) .bg-red-500,.bg-red-500:where(.jtb-scope){background-color:var(--color-red-500)}:where(.jtb-scope) .bg-red-600,.bg-red-600:where(.jtb-scope){background-color:var(--color-red-600)}:where(.jtb-scope) .bg-sky-100,.bg-sky-100:where(.jtb-scope){background-color:var(--color-sky-100)}:where(.jtb-scope) .bg-stone-50,.bg-stone-50:where(.jtb-scope){background-color:var(--color-stone-50)}:where(.jtb-scope) .bg-stone-50\/40,.bg-stone-50\/40:where(.jtb-scope){background-color:#fafaf966}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-50\/40,.bg-stone-50\/40:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-50) 40%, transparent)}}:where(.jtb-scope) .bg-stone-50\/60,.bg-stone-50\/60:where(.jtb-scope){background-color:#fafaf999}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-50\/60,.bg-stone-50\/60:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-50) 60%, transparent)}}:where(.jtb-scope) .bg-stone-100,.bg-stone-100:where(.jtb-scope){background-color:var(--color-stone-100)}:where(.jtb-scope) .bg-stone-100\/60,.bg-stone-100\/60:where(.jtb-scope){background-color:#f5f5f499}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-100\/60,.bg-stone-100\/60:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-100) 60%, transparent)}}:where(.jtb-scope) .bg-stone-100\/70,.bg-stone-100\/70:where(.jtb-scope){background-color:#f5f5f4b3}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-100\/70,.bg-stone-100\/70:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-100) 70%, transparent)}}:where(.jtb-scope) .bg-stone-300,.bg-stone-300:where(.jtb-scope){background-color:var(--color-stone-300)}:where(.jtb-scope) .bg-stone-400,.bg-stone-400:where(.jtb-scope){background-color:var(--color-stone-400)}:where(.jtb-scope) .bg-stone-950\/30,.bg-stone-950\/30:where(.jtb-scope){background-color:#0c0a094d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-stone-950\/30,.bg-stone-950\/30:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-stone-950) 30%, transparent)}}:where(.jtb-scope) .bg-transparent,.bg-transparent:where(.jtb-scope){background-color:#0000}:where(.jtb-scope) .bg-white,.bg-white:where(.jtb-scope){background-color:var(--color-white)}:where(.jtb-scope) .bg-white\/40,.bg-white\/40:where(.jtb-scope){background-color:#fff6}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-white\/40,.bg-white\/40:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-white) 40%, transparent)}}:where(.jtb-scope) .bg-white\/70,.bg-white\/70:where(.jtb-scope){background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-white\/70,.bg-white\/70:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}:where(.jtb-scope) .bg-white\/90,.bg-white\/90:where(.jtb-scope){background-color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-white\/90,.bg-white\/90:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-white) 90%, transparent)}}:where(.jtb-scope) .bg-white\/95,.bg-white\/95:where(.jtb-scope){background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .bg-white\/95,.bg-white\/95:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-white) 95%, transparent)}}:where(.jtb-scope) .p-0,.p-0:where(.jtb-scope){padding:0}:where(.jtb-scope) .p-0\.5,.p-0\.5:where(.jtb-scope){padding:calc(var(--spacing) * .5)}:where(.jtb-scope) .p-1,.p-1:where(.jtb-scope){padding:var(--spacing)}:where(.jtb-scope) .p-1\.5,.p-1\.5:where(.jtb-scope){padding:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .p-2,.p-2:where(.jtb-scope){padding:calc(var(--spacing) * 2)}:where(.jtb-scope) .p-2\.5,.p-2\.5:where(.jtb-scope){padding:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .p-3,.p-3:where(.jtb-scope){padding:calc(var(--spacing) * 3)}:where(.jtb-scope) .p-4,.p-4:where(.jtb-scope){padding:calc(var(--spacing) * 4)}:where(.jtb-scope) .p-6,.p-6:where(.jtb-scope){padding:calc(var(--spacing) * 6)}:where(.jtb-scope) .p-8,.p-8:where(.jtb-scope){padding:calc(var(--spacing) * 8)}:where(.jtb-scope) .px-0\.5,.px-0\.5:where(.jtb-scope){padding-inline:calc(var(--spacing) * .5)}:where(.jtb-scope) .px-1,.px-1:where(.jtb-scope){padding-inline:var(--spacing)}:where(.jtb-scope) .px-1\.5,.px-1\.5:where(.jtb-scope){padding-inline:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .px-2,.px-2:where(.jtb-scope){padding-inline:calc(var(--spacing) * 2)}:where(.jtb-scope) .px-2\.5,.px-2\.5:where(.jtb-scope){padding-inline:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .px-3,.px-3:where(.jtb-scope){padding-inline:calc(var(--spacing) * 3)}:where(.jtb-scope) .px-4,.px-4:where(.jtb-scope){padding-inline:calc(var(--spacing) * 4)}:where(.jtb-scope) .px-5,.px-5:where(.jtb-scope){padding-inline:calc(var(--spacing) * 5)}:where(.jtb-scope) .px-8,.px-8:where(.jtb-scope){padding-inline:calc(var(--spacing) * 8)}:where(.jtb-scope) .py-0\.5,.py-0\.5:where(.jtb-scope){padding-block:calc(var(--spacing) * .5)}:where(.jtb-scope) .py-1,.py-1:where(.jtb-scope){padding-block:var(--spacing)}:where(.jtb-scope) .py-1\.5,.py-1\.5:where(.jtb-scope){padding-block:calc(var(--spacing) * 1.5)}:where(.jtb-scope) .py-2,.py-2:where(.jtb-scope){padding-block:calc(var(--spacing) * 2)}:where(.jtb-scope) .py-2\.5,.py-2\.5:where(.jtb-scope){padding-block:calc(var(--spacing) * 2.5)}:where(.jtb-scope) .py-3,.py-3:where(.jtb-scope){padding-block:calc(var(--spacing) * 3)}:where(.jtb-scope) .py-4,.py-4:where(.jtb-scope){padding-block:calc(var(--spacing) * 4)}:where(.jtb-scope) .py-8,.py-8:where(.jtb-scope){padding-block:calc(var(--spacing) * 8)}:where(.jtb-scope) .py-10,.py-10:where(.jtb-scope){padding-block:calc(var(--spacing) * 10)}:where(.jtb-scope) .pt-1,.pt-1:where(.jtb-scope){padding-top:var(--spacing)}:where(.jtb-scope) .pt-3,.pt-3:where(.jtb-scope){padding-top:calc(var(--spacing) * 3)}:where(.jtb-scope) .pt-5,.pt-5:where(.jtb-scope){padding-top:calc(var(--spacing) * 5)}:where(.jtb-scope) .pr-5,.pr-5:where(.jtb-scope){padding-right:calc(var(--spacing) * 5)}:where(.jtb-scope) .pb-4,.pb-4:where(.jtb-scope){padding-bottom:calc(var(--spacing) * 4)}:where(.jtb-scope) .pl-2,.pl-2:where(.jtb-scope){padding-left:calc(var(--spacing) * 2)}:where(.jtb-scope) .pl-7,.pl-7:where(.jtb-scope){padding-left:calc(var(--spacing) * 7)}:where(.jtb-scope) .pl-10,.pl-10:where(.jtb-scope){padding-left:calc(var(--spacing) * 10)}:where(.jtb-scope) .text-center,.text-center:where(.jtb-scope){text-align:center}:where(.jtb-scope) .text-left,.text-left:where(.jtb-scope){text-align:left}:where(.jtb-scope) .align-\[-2px\],.align-\[-2px\]:where(.jtb-scope){vertical-align:-2px}:where(.jtb-scope) .align-middle,.align-middle:where(.jtb-scope){vertical-align:middle}:where(.jtb-scope) .font-mono,.font-mono:where(.jtb-scope){font-family:var(--font-mono)}:where(.jtb-scope) .text-base,.text-base:where(.jtb-scope){font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:where(.jtb-scope) .text-sm,.text-sm:where(.jtb-scope){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}:where(.jtb-scope) .text-xs,.text-xs:where(.jtb-scope){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}:where(.jtb-scope) .text-\[9px\],.text-\[9px\]:where(.jtb-scope){font-size:9px}:where(.jtb-scope) .text-\[10px\],.text-\[10px\]:where(.jtb-scope){font-size:10px}:where(.jtb-scope) .text-\[11px\],.text-\[11px\]:where(.jtb-scope){font-size:11px}:where(.jtb-scope) .text-\[12px\],.text-\[12px\]:where(.jtb-scope){font-size:12px}:where(.jtb-scope) .text-\[13px\],.text-\[13px\]:where(.jtb-scope){font-size:13px}:where(.jtb-scope) .leading-4,.leading-4:where(.jtb-scope){--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}:where(.jtb-scope) .leading-5,.leading-5:where(.jtb-scope){--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}:where(.jtb-scope) .leading-6,.leading-6:where(.jtb-scope){--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}:where(.jtb-scope) .leading-none,.leading-none:where(.jtb-scope){--tw-leading:1;line-height:1}:where(.jtb-scope) .font-medium,.font-medium:where(.jtb-scope){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}:where(.jtb-scope) .font-normal,.font-normal:where(.jtb-scope){--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}:where(.jtb-scope) .font-semibold,.font-semibold:where(.jtb-scope){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}:where(.jtb-scope) .tracking-tight,.tracking-tight:where(.jtb-scope){--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}:where(.jtb-scope) .tracking-wide,.tracking-wide:where(.jtb-scope){--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}:where(.jtb-scope) .tracking-wider,.tracking-wider:where(.jtb-scope){--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}:where(.jtb-scope) .break-words,.break-words:where(.jtb-scope){overflow-wrap:break-word}:where(.jtb-scope) .whitespace-nowrap,.whitespace-nowrap:where(.jtb-scope){white-space:nowrap}:where(.jtb-scope) .whitespace-pre-wrap,.whitespace-pre-wrap:where(.jtb-scope){white-space:pre-wrap}:where(.jtb-scope) .text-amber-500,.text-amber-500:where(.jtb-scope){color:var(--color-amber-500)}:where(.jtb-scope) .text-amber-600,.text-amber-600:where(.jtb-scope){color:var(--color-amber-600)}:where(.jtb-scope) .text-amber-700,.text-amber-700:where(.jtb-scope){color:var(--color-amber-700)}:where(.jtb-scope) .text-amber-800,.text-amber-800:where(.jtb-scope){color:var(--color-amber-800)}:where(.jtb-scope) .text-brand,.text-brand:where(.jtb-scope){color:var(--color-brand)}:where(.jtb-scope) .text-brand-dark,.text-brand-dark:where(.jtb-scope){color:var(--color-brand-dark)}:where(.jtb-scope) .text-brand-gray,.text-brand-gray:where(.jtb-scope){color:var(--color-brand-gray)}:where(.jtb-scope) .text-emerald-500,.text-emerald-500:where(.jtb-scope){color:var(--color-emerald-500)}:where(.jtb-scope) .text-emerald-600,.text-emerald-600:where(.jtb-scope){color:var(--color-emerald-600)}:where(.jtb-scope) .text-red-500,.text-red-500:where(.jtb-scope){color:var(--color-red-500)}:where(.jtb-scope) .text-red-600,.text-red-600:where(.jtb-scope){color:var(--color-red-600)}:where(.jtb-scope) .text-red-700,.text-red-700:where(.jtb-scope){color:var(--color-red-700)}:where(.jtb-scope) .text-sky-700,.text-sky-700:where(.jtb-scope){color:var(--color-sky-700)}:where(.jtb-scope) .text-stone-300,.text-stone-300:where(.jtb-scope){color:var(--color-stone-300)}:where(.jtb-scope) .text-stone-400,.text-stone-400:where(.jtb-scope){color:var(--color-stone-400)}:where(.jtb-scope) .text-stone-500,.text-stone-500:where(.jtb-scope){color:var(--color-stone-500)}:where(.jtb-scope) .text-stone-600,.text-stone-600:where(.jtb-scope){color:var(--color-stone-600)}:where(.jtb-scope) .text-stone-700,.text-stone-700:where(.jtb-scope){color:var(--color-stone-700)}:where(.jtb-scope) .text-stone-800,.text-stone-800:where(.jtb-scope){color:var(--color-stone-800)}:where(.jtb-scope) .text-stone-900,.text-stone-900:where(.jtb-scope){color:var(--color-stone-900)}:where(.jtb-scope) .text-white,.text-white:where(.jtb-scope){color:var(--color-white)}:where(.jtb-scope) .uppercase,.uppercase:where(.jtb-scope){text-transform:uppercase}:where(.jtb-scope) .tabular-nums,.tabular-nums:where(.jtb-scope){--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}:where(.jtb-scope) .line-through,.line-through:where(.jtb-scope){text-decoration-line:line-through}:where(.jtb-scope) .opacity-0,.opacity-0:where(.jtb-scope){opacity:0}:where(.jtb-scope) .opacity-40,.opacity-40:where(.jtb-scope){opacity:.4}:where(.jtb-scope) .opacity-50,.opacity-50:where(.jtb-scope){opacity:.5}:where(.jtb-scope) .opacity-100,.opacity-100:where(.jtb-scope){opacity:1}:where(.jtb-scope) .shadow-2xl,.shadow-2xl:where(.jtb-scope){--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-\[-10px_0_30px_rgba\(0\,0\,0\,0\.07\)\],.shadow-\[-10px_0_30px_rgba\(0\,0\,0\,0\.07\)\]:where(.jtb-scope){--tw-shadow:-10px 0 30px var(--tw-shadow-color,#00000012);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-lg,.shadow-lg:where(.jtb-scope){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-sm,.shadow-sm:where(.jtb-scope){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-xl,.shadow-xl:where(.jtb-scope){--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .ring-1,.ring-1:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .ring-2,.ring-2:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .shadow-emerald-950\/10,.shadow-emerald-950\/10:where(.jtb-scope){--tw-shadow-color:#002c221a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .shadow-emerald-950\/10,.shadow-emerald-950\/10:where(.jtb-scope){--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-emerald-950) 10%, transparent) var(--tw-shadow-alpha), transparent)}}:where(.jtb-scope) .ring-black\/10,.ring-black\/10:where(.jtb-scope){--tw-ring-color:#0000001a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-black\/10,.ring-black\/10:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}:where(.jtb-scope) .ring-black\/\[0\.04\],.ring-black\/\[0\.04\]:where(.jtb-scope){--tw-ring-color:#0000000a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-black\/\[0\.04\],.ring-black\/\[0\.04\]:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-black) 4%, transparent)}}:where(.jtb-scope) .ring-black\/\[0\.05\],.ring-black\/\[0\.05\]:where(.jtb-scope){--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-black\/\[0\.05\],.ring-black\/\[0\.05\]:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}:where(.jtb-scope) .ring-black\/\[0\.06\],.ring-black\/\[0\.06\]:where(.jtb-scope){--tw-ring-color:#0000000f}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-black\/\[0\.06\],.ring-black\/\[0\.06\]:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-black) 6%, transparent)}}:where(.jtb-scope) .ring-brand,.ring-brand:where(.jtb-scope){--tw-ring-color:var(--color-brand)}:where(.jtb-scope) .ring-brand\/10,.ring-brand\/10:where(.jtb-scope){--tw-ring-color:#0088841a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-brand\/10,.ring-brand\/10:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 10%, transparent)}}:where(.jtb-scope) .ring-brand\/40,.ring-brand\/40:where(.jtb-scope){--tw-ring-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-brand\/40,.ring-brand\/40:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .ring-brand\/60,.ring-brand\/60:where(.jtb-scope){--tw-ring-color:#00888499}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-brand\/60,.ring-brand\/60:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 60%, transparent)}}:where(.jtb-scope) .ring-brand\/70,.ring-brand\/70:where(.jtb-scope){--tw-ring-color:#008884b3}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .ring-brand\/70,.ring-brand\/70:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 70%, transparent)}}:where(.jtb-scope) .ring-stone-500,.ring-stone-500:where(.jtb-scope){--tw-ring-color:var(--color-stone-500)}:where(.jtb-scope) .ring-offset-1,.ring-offset-1:where(.jtb-scope){--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}:where(.jtb-scope) .ring-offset-2,.ring-offset-2:where(.jtb-scope){--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}:where(.jtb-scope) .filter,.filter:where(.jtb-scope){filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}:where(.jtb-scope) .backdrop-blur,.backdrop-blur:where(.jtb-scope){--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}:where(.jtb-scope) .transition,.transition:where(.jtb-scope){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:where(.jtb-scope) .transition-\[width\],.transition-\[width\]:where(.jtb-scope){transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:where(.jtb-scope) .transition-colors,.transition-colors:where(.jtb-scope){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:where(.jtb-scope) .transition-opacity,.transition-opacity:where(.jtb-scope){transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:where(.jtb-scope) .duration-200,.duration-200:where(.jtb-scope){--tw-duration:.2s;transition-duration:.2s}:where(.jtb-scope) .outline-none,.outline-none:where(.jtb-scope){--tw-outline-style:none;outline-style:none}:where(.jtb-scope) .select-none,.select-none:where(.jtb-scope){-webkit-user-select:none;user-select:none}:where(.jtb-scope) .\[--anchor-gap\:4px\],.\[--anchor-gap\:4px\]:where(.jtb-scope){--anchor-gap:4px}:where(.jtb-scope) .\[--anchor-gap\:6px\],.\[--anchor-gap\:6px\]:where(.jtb-scope){--anchor-gap:6px}:where(.jtb-scope) .\[writing-mode\:vertical-rl\],.\[writing-mode\:vertical-rl\]:where(.jtb-scope){writing-mode:vertical-rl}@media (hover:hover){:where(.jtb-scope) .group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\:opacity-100:is(:where(.group):hover *):where(.jtb-scope),:where(.jtb-scope) .group-hover\/comment\:opacity-100:is(:where(.group\/comment):hover *),.group-hover\/comment\:opacity-100:is(:where(.group\/comment):hover *):where(.jtb-scope){opacity:1}}:where(.jtb-scope) .group-data-\[checked\]\:border-brand:is(:where(.group)[data-checked] *),.group-data-\[checked\]\:border-brand:is(:where(.group)[data-checked] *):where(.jtb-scope){border-color:var(--color-brand)}:where(.jtb-scope) .group-data-\[checked\]\:opacity-100:is(:where(.group)[data-checked] *),.group-data-\[checked\]\:opacity-100:is(:where(.group)[data-checked] *):where(.jtb-scope){opacity:1}:where(.jtb-scope) .first\:border-t-0:first-child,.first\:border-t-0:first-child:where(.jtb-scope){border-top-style:var(--tw-border-style);border-top-width:0}:where(.jtb-scope) .focus-within\:bg-stone-50:focus-within,.focus-within\:bg-stone-50:focus-within:where(.jtb-scope){background-color:var(--color-stone-50)}:where(.jtb-scope) .focus-within\:opacity-100:focus-within,.focus-within\:opacity-100:focus-within:where(.jtb-scope){opacity:1}@media (hover:hover){:where(.jtb-scope) .hover\:border-brand:hover,.hover\:border-brand:hover:where(.jtb-scope){border-color:var(--color-brand)}:where(.jtb-scope) .hover\:border-brand\/30:hover,.hover\:border-brand\/30:hover:where(.jtb-scope){border-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:border-brand\/30:hover,.hover\:border-brand\/30:hover:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}:where(.jtb-scope) .hover\:border-brand\/40:hover,.hover\:border-brand\/40:hover:where(.jtb-scope){border-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:border-brand\/40:hover,.hover\:border-brand\/40:hover:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .hover\:bg-amber-100:hover,.hover\:bg-amber-100:hover:where(.jtb-scope){background-color:var(--color-amber-100)}:where(.jtb-scope) .hover\:bg-brand:hover,.hover\:bg-brand:hover:where(.jtb-scope){background-color:var(--color-brand)}:where(.jtb-scope) .hover\:bg-brand-soft:hover,.hover\:bg-brand-soft:hover:where(.jtb-scope){background-color:var(--color-brand-soft)}:where(.jtb-scope) .hover\:bg-brand-soft\/30:hover,.hover\:bg-brand-soft\/30:hover:where(.jtb-scope){background-color:#e8f6f24d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:bg-brand-soft\/30:hover,.hover\:bg-brand-soft\/30:hover:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 30%, transparent)}}:where(.jtb-scope) .hover\:bg-brand-soft\/40:hover,.hover\:bg-brand-soft\/40:hover:where(.jtb-scope){background-color:#e8f6f266}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:bg-brand-soft\/40:hover,.hover\:bg-brand-soft\/40:hover:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 40%, transparent)}}:where(.jtb-scope) .hover\:bg-brand\/40:hover,.hover\:bg-brand\/40:hover:where(.jtb-scope){background-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:bg-brand\/40:hover,.hover\:bg-brand\/40:hover:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .hover\:bg-red-50:hover,.hover\:bg-red-50:hover:where(.jtb-scope){background-color:var(--color-red-50)}:where(.jtb-scope) .hover\:bg-red-700:hover,.hover\:bg-red-700:hover:where(.jtb-scope){background-color:var(--color-red-700)}:where(.jtb-scope) .hover\:bg-stone-50:hover,.hover\:bg-stone-50:hover:where(.jtb-scope){background-color:var(--color-stone-50)}:where(.jtb-scope) .hover\:bg-stone-100:hover,.hover\:bg-stone-100:hover:where(.jtb-scope){background-color:var(--color-stone-100)}:where(.jtb-scope) .hover\:bg-white:hover,.hover\:bg-white:hover:where(.jtb-scope){background-color:var(--color-white)}:where(.jtb-scope) .hover\:text-amber-500:hover,.hover\:text-amber-500:hover:where(.jtb-scope){color:var(--color-amber-500)}:where(.jtb-scope) .hover\:text-amber-700:hover,.hover\:text-amber-700:hover:where(.jtb-scope){color:var(--color-amber-700)}:where(.jtb-scope) .hover\:text-brand-dark:hover,.hover\:text-brand-dark:hover:where(.jtb-scope){color:var(--color-brand-dark)}:where(.jtb-scope) .hover\:text-emerald-600:hover,.hover\:text-emerald-600:hover:where(.jtb-scope){color:var(--color-emerald-600)}:where(.jtb-scope) .hover\:text-red-600:hover,.hover\:text-red-600:hover:where(.jtb-scope){color:var(--color-red-600)}:where(.jtb-scope) .hover\:text-stone-400:hover,.hover\:text-stone-400:hover:where(.jtb-scope){color:var(--color-stone-400)}:where(.jtb-scope) .hover\:text-stone-500:hover,.hover\:text-stone-500:hover:where(.jtb-scope){color:var(--color-stone-500)}:where(.jtb-scope) .hover\:text-stone-600:hover,.hover\:text-stone-600:hover:where(.jtb-scope){color:var(--color-stone-600)}:where(.jtb-scope) .hover\:underline:hover,.hover\:underline:hover:where(.jtb-scope){text-decoration-line:underline}:where(.jtb-scope) .hover\:ring-brand\/30:hover,.hover\:ring-brand\/30:hover:where(.jtb-scope){--tw-ring-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .hover\:ring-brand\/30:hover,.hover\:ring-brand\/30:hover:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}}:where(.jtb-scope) .focus\:border-brand:focus,.focus\:border-brand:focus:where(.jtb-scope){border-color:var(--color-brand)}:where(.jtb-scope) .focus\:ring-1:focus,.focus\:ring-1:focus:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .focus\:ring-2:focus,.focus\:ring-2:focus:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .focus\:ring-brand:focus,.focus\:ring-brand:focus:where(.jtb-scope){--tw-ring-color:var(--color-brand)}:where(.jtb-scope) .focus\:ring-brand\/10:focus,.focus\:ring-brand\/10:focus:where(.jtb-scope){--tw-ring-color:#0088841a}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .focus\:ring-brand\/10:focus,.focus\:ring-brand\/10:focus:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 10%, transparent)}}:where(.jtb-scope) .focus\:ring-brand\/20:focus,.focus\:ring-brand\/20:focus:where(.jtb-scope){--tw-ring-color:#00888433}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .focus\:ring-brand\/20:focus,.focus\:ring-brand\/20:focus:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 20%, transparent)}}:where(.jtb-scope) .focus\:ring-brand\/30:focus,.focus\:ring-brand\/30:focus:where(.jtb-scope){--tw-ring-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .focus\:ring-brand\/30:focus,.focus\:ring-brand\/30:focus:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}:where(.jtb-scope) .focus\:ring-brand\/40:focus,.focus\:ring-brand\/40:focus:where(.jtb-scope){--tw-ring-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .focus\:ring-brand\/40:focus,.focus\:ring-brand\/40:focus:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .focus\:outline-none:focus,.focus\:outline-none:focus:where(.jtb-scope){--tw-outline-style:none;outline-style:none}:where(.jtb-scope) .active\:translate-y-px:active,.active\:translate-y-px:active:where(.jtb-scope){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}:where(.jtb-scope) .active\:cursor-grabbing:active,.active\:cursor-grabbing:active:where(.jtb-scope){cursor:grabbing}:where(.jtb-scope) .disabled\:cursor-not-allowed:disabled,.disabled\:cursor-not-allowed:disabled:where(.jtb-scope){cursor:not-allowed}:where(.jtb-scope) .disabled\:cursor-wait:disabled,.disabled\:cursor-wait:disabled:where(.jtb-scope){cursor:wait}:where(.jtb-scope) .disabled\:bg-stone-50:disabled,.disabled\:bg-stone-50:disabled:where(.jtb-scope){background-color:var(--color-stone-50)}:where(.jtb-scope) .disabled\:opacity-40:disabled,.disabled\:opacity-40:disabled:where(.jtb-scope){opacity:.4}:where(.jtb-scope) .disabled\:opacity-50:disabled,.disabled\:opacity-50:disabled:where(.jtb-scope){opacity:.5}:where(.jtb-scope) .disabled\:opacity-60:disabled,.disabled\:opacity-60:disabled:where(.jtb-scope){opacity:.6}:where(.jtb-scope) .aria-disabled\:cursor-not-allowed[aria-disabled=true],.aria-disabled\:cursor-not-allowed[aria-disabled=true]:where(.jtb-scope){cursor:not-allowed}:where(.jtb-scope) .aria-disabled\:opacity-40[aria-disabled=true],.aria-disabled\:opacity-40[aria-disabled=true]:where(.jtb-scope){opacity:.4}:where(.jtb-scope) .aria-disabled\:opacity-50[aria-disabled=true],.aria-disabled\:opacity-50[aria-disabled=true]:where(.jtb-scope){opacity:.5}:where(.jtb-scope) .data-\[checked\]\:border-brand\/40[data-checked],.data-\[checked\]\:border-brand\/40[data-checked]:where(.jtb-scope){border-color:#00888466}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .data-\[checked\]\:border-brand\/40[data-checked],.data-\[checked\]\:border-brand\/40[data-checked]:where(.jtb-scope){border-color:color-mix(in oklab, var(--color-brand) 40%, transparent)}}:where(.jtb-scope) .data-\[checked\]\:bg-brand-soft\/40[data-checked],.data-\[checked\]\:bg-brand-soft\/40[data-checked]:where(.jtb-scope){background-color:#e8f6f266}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .data-\[checked\]\:bg-brand-soft\/40[data-checked],.data-\[checked\]\:bg-brand-soft\/40[data-checked]:where(.jtb-scope){background-color:color-mix(in oklab, var(--color-brand-soft) 40%, transparent)}}:where(.jtb-scope) .data-\[focus\]\:bg-red-50[data-focus],.data-\[focus\]\:bg-red-50[data-focus]:where(.jtb-scope){background-color:var(--color-red-50)}:where(.jtb-scope) .data-\[focus\]\:bg-stone-100[data-focus],.data-\[focus\]\:bg-stone-100[data-focus]:where(.jtb-scope){background-color:var(--color-stone-100)}:where(.jtb-scope) .data-\[focus\]\:ring-2[data-focus],.data-\[focus\]\:ring-2[data-focus]:where(.jtb-scope){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:where(.jtb-scope) .data-\[focus\]\:ring-brand\/30[data-focus],.data-\[focus\]\:ring-brand\/30[data-focus]:where(.jtb-scope){--tw-ring-color:#0088844d}@supports (color:color-mix(in lab, red, red)){:where(.jtb-scope) .data-\[focus\]\:ring-brand\/30[data-focus],.data-\[focus\]\:ring-brand\/30[data-focus]:where(.jtb-scope){--tw-ring-color:color-mix(in oklab, var(--color-brand) 30%, transparent)}}@media not all and (width>=48rem){:where(.jtb-scope) .max-md\:w-full,.max-md\:w-full:where(.jtb-scope){width:100%}}@media (width>=40rem){:where(.jtb-scope) .sm\:items-center,.sm\:items-center:where(.jtb-scope){align-items:center}}@media (width>=48rem){:where(.jtb-scope) .md\:flex,.md\:flex:where(.jtb-scope){display:flex}:where(.jtb-scope) .md\:cursor-grab,.md\:cursor-grab:where(.jtb-scope){cursor:grab}:where(.jtb-scope) .md\:opacity-0,.md\:opacity-0:where(.jtb-scope){opacity:0}@media (hover:hover){:where(.jtb-scope) .md\:group-hover\:opacity-100:is(:where(.group):hover *),.md\:group-hover\:opacity-100:is(:where(.group):hover *):where(.jtb-scope){opacity:1}}:where(.jtb-scope) .md\:data-\[open\]\:opacity-100[data-open],.md\:data-\[open\]\:opacity-100[data-open]:where(.jtb-scope){opacity:1}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}} /*$vite$:1*/ \ No newline at end of file diff --git a/packages/board-react/src/JTypeBoard.tsx b/packages/board-react/src/JTypeBoard.tsx index c6bd5427..2dc4fa99 100644 --- a/packages/board-react/src/JTypeBoard.tsx +++ b/packages/board-react/src/JTypeBoard.tsx @@ -40,6 +40,8 @@ export type JTypeBoardProps = { 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 @@ -75,6 +77,7 @@ export function JTypeBoard({ token, client: injectedClient, readOnly = false, + currentUser, live = true, pollIntervalMs = 30000, onCardOpen, @@ -460,6 +463,7 @@ export function JTypeBoard({ actions={actions} error={banner || undefined} readOnly={readOnly} + currentUser={currentUser} onCardOpen={handleCardOpen} // Dropdown panels mount in body-level portals; carry the scope // class so ONLY our portals pick up the package styles (never the diff --git a/packages/board-react/src/strings.ts b/packages/board-react/src/strings.ts index ebf963b5..13aba5f4 100644 --- a/packages/board-react/src/strings.ts +++ b/packages/board-react/src/strings.ts @@ -46,7 +46,7 @@ const en: UiStrings = { close: 'Close', cardReadOnlyHint: 'Read-only card view', status: 'Status', - swimlane: 'Swimlane', + swimlane: 'Row', unassigned: 'Unassigned', priority: 'Priority', assignee: 'Assignee', @@ -77,7 +77,7 @@ const zh: UiStrings = { close: '关闭', cardReadOnlyHint: '只读卡片视图', status: '状态', - swimlane: '泳道', + swimlane: '横向分组', unassigned: '未分配', priority: '优先级', assignee: '负责人', @@ -108,7 +108,7 @@ const ja: UiStrings = { close: '閉じる', cardReadOnlyHint: '読み取り専用のカード表示', status: 'ステータス', - swimlane: 'スイムレーン', + swimlane: '行グループ', unassigned: '未割り当て', priority: '優先度', assignee: '担当者', @@ -139,7 +139,7 @@ const ko: UiStrings = { close: '닫기', cardReadOnlyHint: '읽기 전용 카드 보기', status: '상태', - swimlane: '스윔레인', + swimlane: '행 그룹', unassigned: '미할당', priority: '우선순위', assignee: '담당자', diff --git a/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.en.md b/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.en.md index 19719009..5e2a0149 100644 --- a/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.en.md +++ b/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.en.md @@ -1,10 +1,12 @@ -Kanban in JType lives in a **cloud workspace**. Once your vault is bound to a workspace, that same workspace can hold **boards** — visual lanes for tracking work — right next to your notes. A board is made of **columns**, and each column holds **cards**. That's the whole model. +Kanban in JType is local-first. A board is a `.board` document in your **vault**, next to the Markdown notes that act as its cards. The Desktop app edits that board offline; bind the vault to a **cloud workspace** to open and collaborate on the same board in the Web app. A board is made of **status columns**, and each column holds **cards**. -If you haven't connected a workspace yet, start with [Cloud workspaces & binding](/help/c/sync-workspaces/cloud-workspaces). Everything below assumes you have a workspace. +If you want Web or team access and haven't connected a workspace yet, start with [Cloud workspaces & binding](/help/c/sync-workspaces/cloud-workspaces). Local Desktop boards do not require a cloud connection. ## Boards and columns -A **board** belongs to one workspace and groups related work — a roadmap, a sprint, a content calendar. Every new board starts with three columns: **To do**, **Doing**, and **Done**. Columns are simply named lanes; you can rename them, recolor them, reorder them, and give them an optional WIP (work-in-progress) limit as a gentle hint. The limit is advisory only — JType never blocks you from adding one more card. +A **board** belongs to one workspace and groups related work — a roadmap, a sprint, a content calendar. Every new board starts with three statuses: **To do**, **Doing**, and **Done**, normally displayed as columns. You can rename, recolor, and reorder statuses, and give each one an optional WIP (work-in-progress) limit as a gentle hint. The limit is advisory only — JType never blocks you from adding one more card. + +Each status has a stable ID stored in the card's `status` frontmatter field, so renaming a status does not disconnect its cards. The visual board can also add optional horizontal **Rows** by priority, assignee, status, or a custom row ID. Rows organize the view; they do not replace status. To see the boards in a workspace from the terminal: diff --git a/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.ts b/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.ts index 88e7734f..2afe4abb 100644 --- a/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.ts +++ b/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.ts @@ -6,14 +6,14 @@ const article: ArticleMeta = { id: 'boards-and-cards', categoryId: 'kanban', order: 1, - updated: '2026-06-14', + updated: '2026-07-30', title: { en: 'Boards & cards: turning a workspace into kanban', zh: '看板与卡片:把工作区变成看板', }, summary: { - en: 'Create boards with columns, add cards with priority and an assignee, move them across columns, and see how cards relate to your notes.', - zh: '创建带列的看板、为卡片设置优先级与负责人、在列之间移动卡片,并了解卡片与笔记的关系。', + en: 'Create boards with status columns, optional horizontal rows, and cards that remain ordinary Markdown notes.', + zh: '创建带状态列和可选横向分组的看板,并了解卡片如何保持为普通 Markdown 笔记。', }, body: { en, zh }, } diff --git a/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.zh.md b/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.zh.md index b5a6472a..71dd9ccb 100644 --- a/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.zh.md +++ b/services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.zh.md @@ -1,10 +1,12 @@ -JType 的看板存在于**云端工作区**中。当你的仓库绑定到某个工作区后,这个工作区就能在笔记旁边承载**看板**——一种用来追踪工作的可视化泳道。一个看板由若干**列**组成,每一列里放着若干**卡片**。整个模型就这么简单。 +JType 的看板是 local-first 的。看板是**仓库(vault)**中的 `.board` 文档,与充当卡片的 Markdown 笔记放在一起。桌面端可以离线编辑;把仓库绑定到**云端工作区**后,就能在网页端打开并协作编辑同一块看板。一个看板由若干**状态列**组成,每一列里放着若干**卡片**。 -如果你还没有连接工作区,请先阅读[云端工作区与绑定](/help/c/sync-workspaces/cloud-workspaces)。下文都假设你已经有了一个工作区。 +如果你需要网页端或团队访问、但还没有连接工作区,请先阅读[云端工作区与绑定](/help/c/sync-workspaces/cloud-workspaces)。仅在桌面端使用本地看板不需要连接云端。 ## 看板与列 -一个**看板**属于某一个工作区,用来归类相关的工作——路线图、迭代、内容日历等等。每个新建的看板都自带三列:**To do**、**Doing** 和 **Done**。列其实就是命名好的泳道;你可以重命名、改颜色、调整顺序,还能给它设一个可选的 WIP(在制品)上限作为温和提示。这个上限仅供参考——JType 永远不会因此阻止你再加一张卡片。 +一个**看板**属于某一个工作区,用来归类相关的工作——路线图、迭代、内容日历等等。每个新建的看板都自带三个状态:**To do**、**Doing** 和 **Done**,通常显示为纵向列。你可以重命名、改颜色、调整状态顺序,还能给每个状态设置一个可选的 WIP(在制品)上限作为温和提示。这个上限仅供参考——JType 永远不会因此阻止你再加一张卡片。 + +每个状态都有稳定的 ID,存放在卡片的 `status` frontmatter 字段中,所以重命名状态不会让卡片失去映射。看板还可以按优先级、负责人、状态或自定义 ID 添加可选的**横向分组(Rows)**。横向分组只组织当前视图,不会取代状态。 在终端里查看某个工作区中的看板: diff --git a/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.en.md b/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.en.md index f48cdd10..8bb09624 100644 --- a/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.en.md +++ b/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.en.md @@ -43,5 +43,6 @@ An `mcp` token is an **account credential**: whoever holds it can read and write ## Good to know - **Read-only embeds**: set `readOnly` to show a board without any edit or drag affordances. -- **What renders today**: columns, cards, drag to move/reorder, board/table/calendar and swimlane views, search/filter/sort, and a read-only card detail. Card notes show as plain text, and members, versions, comments and ticket badges aren't in the embed yet. +- **What renders today**: editable status columns, cards, drag to move/reorder, board/table/calendar, optional horizontal rows, multi-select filters, search/sort, and a read-only card detail. Card notes show as plain text, and members, versions, comments and ticket badges aren't in the embed yet. +- **Personal filter**: pass `currentUser` to enable **My cards** in the filter popover. - **Revoking access**: because the embed uses an ordinary token, you can revoke it any time from your token list — the embed simply stops loading and shows an error state, never stale data. diff --git a/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.ts b/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.ts index b4b6ba93..72b6f7b0 100644 --- a/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.ts +++ b/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.ts @@ -6,14 +6,14 @@ const article: ArticleMeta = { id: 'embed-your-board', categoryId: 'kanban', order: 3, - updated: '2026-07-11', + updated: '2026-07-30', title: { en: 'Embed a board in your own app', zh: '把看板嵌入你自己的应用', }, summary: { - en: 'Drop a live, interactive JType board into your own website or app with the jtype-board-react package — same data, columns and drag-to-move, with a scoped token.', - zh: '用 jtype-board-react 包,把一块实时可交互的 JType 看板嵌进你自己的网站或应用——同一份数据、列与拖拽移动,凭一枚受限令牌即可。', + en: 'Embed the shared JType board with status management, optional rows, lightweight filters, and drag-to-move.', + zh: '嵌入共享的 JType 看板,支持状态管理、可选横向分组、轻量筛选与拖拽移动。', }, body: { en, zh }, } diff --git a/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.zh.md b/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.zh.md index 6d11171f..6d46bb12 100644 --- a/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.zh.md +++ b/services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.zh.md @@ -43,5 +43,6 @@ export function MyBoard() { ## 值得一提 - **只读嵌入**:设置 `readOnly` 即可展示一块没有任何编辑/拖拽入口的看板。 -- **当前能渲染什么**:列、卡片、拖拽移动/排序、Board/Table/Calendar 与泳道视图、搜索/过滤/排序,以及只读的卡片详情。卡片正文暂以纯文本显示;成员、版本、评论与 ticket 徽章尚未进入嵌入版。 +- **当前能渲染什么**:可编辑状态列、卡片、拖拽移动/排序、Board/Table/Calendar、可选横向分组、多选筛选、搜索/排序,以及只读的卡片详情。卡片正文暂以纯文本显示;成员、版本、评论与 ticket 徽章尚未进入嵌入版。 +- **个人筛选**:传入 `currentUser` 即可在筛选面板中启用**我的卡片**。 - **撤销访问**:因为嵌入用的是一枚普通令牌,你随时可以在令牌列表里吊销它——嵌入的看板会随即停止加载并显示错误态,绝不会展示过时数据。 diff --git a/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.en.md b/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.en.md index 398376d5..3537b09c 100644 --- a/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.en.md +++ b/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.en.md @@ -15,6 +15,12 @@ Moving work is a drag. Press on a card and drag it: When you drop a card, JType saves the move immediately and tightens the order so there are no gaps. Behind the scenes this is the same operation as `jtype card move --board B --to-column C` — the board view just gives you a pointer-driven way to do it. +## Manage the status workflow + +Statuses are the normal columns of a JType board. Open **Manage statuses** beside the **Columns** control to add, rename, reorder, recolor, or delete them, set a WIP limit, and choose which status counts as done. + +Each status has a stable internal ID. Renaming **Doing** to **In progress**, for example, changes the label without losing its cards. When you delete a status that still has cards, JType asks where those cards should move before it removes the status. + ## Realtime updates A board is live. When a teammate moves a card, renames a column, or edits a description, your board updates on its own — no refresh needed. Each change streams over a live connection and lands on every open board in the workspace within moments. @@ -23,16 +29,17 @@ Your own actions never echo back to you as a flicker: the board knows which chan > Tip: open the same board on two screens — say your laptop and a meeting display — and drag a card on one. It moves on the other almost instantly. That's the realtime layer doing its job. -## Filter, sort, group, and search +## Filter, sort, arrange, and search -A real board gets crowded. The toolbar above the columns gives you four ways to focus, and they stack: +A real board gets crowded. The toolbar above the columns gives you several ways to focus, and they stack: -- **Filter** — show only cards matching priority, assignee, label, or due date. +- **Filters** — combine multiple priorities, assignees, labels, due-date ranges, blocked cards, and **My cards**. Choices within one section match any selected value; different sections must all match. - **Sort** — order cards within each column, e.g. by priority or due date. -- **Group** — regroup the whole board by status, priority, or assignee. +- **Columns** — arrange the vertical columns by status (the normal workflow), priority, or assignee. +- **Rows** — optionally add a second horizontal grouping by priority, assignee, status, or custom rows. Rows organize a view; they do not replace card status. - **Search** — type to narrow to cards whose title or text matches. -There's also a **Table** view if you'd rather scan everything as rows than as lanes. All of these run instantly in your browser and are personal: filtering or grouping changes *your* view only — it never moves anyone's cards or affects what a teammate sees. Your view preferences are remembered per board, so the board comes back the way you left it. +Active filters appear as removable chips, and the filter panel shows how many cards remain visible. There's also a **Table** view if you'd rather scan everything as records. Filters and search run instantly in your browser and are personal: they change *your* view only and never move cards. ## Where to go next diff --git a/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.ts b/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.ts index 20735280..086b50b5 100644 --- a/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.ts +++ b/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.ts @@ -6,14 +6,14 @@ const article: ArticleMeta = { id: 'web-board-view', categoryId: 'kanban', order: 2, - updated: '2026-06-14', + updated: '2026-07-30', title: { en: 'The web board view', zh: '网页看板视图', }, summary: { - en: 'Open a board in the web app: drag cards across columns, watch realtime updates from teammates, and filter, sort, group, or search to focus.', - zh: '在网页应用中打开看板:在列之间拖拽卡片、实时看到队友的更新,并通过筛选、排序、分组或搜索来聚焦。', + en: 'Open a board in the web app: manage status columns, drag cards, add optional rows, and combine lightweight filters.', + zh: '在网页应用中打开看板:管理状态列、拖拽卡片、添加可选横向分组,并组合轻量筛选。', }, body: { en, zh }, } diff --git a/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.zh.md b/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.zh.md index f35ef7e5..1f72496f 100644 --- a/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.zh.md +++ b/services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.zh.md @@ -15,6 +15,12 @@ 当你松开卡片时,JType 会立即保存这次移动,并压实顺序,确保没有空隙。在底层,这与 `jtype card move --board B --to-column C` 是同一个操作——看板视图只是给了你一种用指针拖拽的方式来完成它。 +## 管理状态工作流 + +状态是 JType 看板最常规的列。在**列(Columns)**控件旁打开**管理状态**,可以添加、重命名、排序、改色或删除状态,也可以设置 WIP 上限以及指定哪个状态代表完成。 + +每个状态都有稳定的内部 ID。例如,把 **Doing** 重命名为 **In progress** 只会改变显示名称,卡片仍然保留在原状态中。删除仍有卡片的状态时,JType 会先要求你选择这些卡片要迁移到的目标状态。 + ## 实时更新 看板是实时的。当队友移动一张卡片、重命名一列或编辑某段描述时,你的看板会自动更新——无需刷新。每一次变更都通过实时连接推送,并在片刻之内落到该工作区中所有打开着的看板上。 @@ -23,16 +29,17 @@ > 提示:在两块屏幕上打开同一个看板——比如你的笔记本和会议室显示屏——然后在其中一块上拖动一张卡片。它几乎会立刻在另一块上移动。这正是实时层在发挥作用。 -## 筛选、排序、分组与搜索 +## 筛选、排序、排列与搜索 -一块真实的看板会变得拥挤。列上方的工具栏给了你四种聚焦方式,而且它们可以叠加使用: +一块真实的看板会变得拥挤。列上方的工具栏提供了多种聚焦方式,而且它们可以叠加使用: -- **筛选(Filter)**——只显示匹配优先级、负责人、标签或截止日期的卡片。 +- **筛选(Filters)**——组合多个优先级、负责人、标签、截止日期范围、被阻塞卡片以及**我的卡片**。同一分组内匹配任一已选值,不同分组之间需要同时满足。 - **排序(Sort)**——在每一列内对卡片排序,例如按优先级或截止日期。 -- **分组(Group)**——把整块看板按状态、优先级或负责人重新分组。 +- **列(Columns)**——按状态(常规工作流)、优先级或负责人排列纵向列。 +- **横向分组(Rows)**——可选地按优先级、负责人、状态或自定义行增加第二层横向分组。横向分组只组织当前视图,不会取代卡片状态。 - **搜索(Search)**——输入关键字,快速缩小到标题或正文匹配的卡片。 -如果你更习惯把所有内容当作一行行扫描而不是泳道,还有**表格(Table)**视图可用。以上所有操作都在你的浏览器中即时完成,而且是个人化的:筛选或分组只改变*你自己*的视图——它绝不会移动任何人的卡片,也不会影响队友看到的内容。你的视图偏好会按看板分别记住,所以下次打开时看板还是你离开时的样子。 +启用的筛选会显示为可单独移除的标签,筛选面板也会显示当前可见卡片数。如果你更习惯按记录扫描,还有**表格(Table)**视图可用。筛选和搜索都在浏览器中即时执行,只改变*你自己*看到的内容,不会移动任何卡片。 ## 下一步 diff --git a/shared/components/board/BoardFilterPopover.tsx b/shared/components/board/BoardFilterPopover.tsx new file mode 100644 index 00000000..af04d9eb --- /dev/null +++ b/shared/components/board/BoardFilterPopover.tsx @@ -0,0 +1,321 @@ +import { Fragment, type ReactNode } from "react"; +import { t } from "@lingui/core/macro"; +import { Trans } from "@lingui/react/macro"; +import { Popover, PopoverButton, PopoverPanel } from "@headlessui/react"; +import { + CheckIcon, + ChevronDownIcon, + FunnelIcon, + LockClosedIcon, + UserCircleIcon, + XMarkIcon, +} from "@heroicons/react/24/outline"; +import { + PRIORITY_ORDER, + activeBoardFilterCount, + type BoardDueFilter, + type BoardFilters, +} from "../../lib/board"; + +type FilterDimension = + | "priorities" + | "assignees" + | "tags" + | "due" + | "blocked" + | "mine" + | "missingRow"; + +function toggleValue(values: string[] | undefined, value: string): string[] | undefined { + const next = new Set(values ?? []); + if (next.has(value)) next.delete(value); + else next.add(value); + return next.size > 0 ? [...next] : undefined; +} + +function OptionButton({ + selected, + children, + onClick, + selectionRole = "checkbox", +}: { + selected: boolean; + children: ReactNode; + onClick: () => void; + selectionRole?: "checkbox" | "radio"; +}) { + return ( + + ); +} + +function FilterSection({ + title, + children, +}: { + title: ReactNode; + children: ReactNode; +}) { + return ( +

+

+ {title} +

+ {children} +
+ ); +} + +function dueLabel(due: BoardDueFilter): string { + if (due === "overdue") return t`Overdue`; + if (due === "today") return t`Due today`; + if (due === "nextSevenDays") return t`Next 7 days`; + return t`No due date`; +} + +export function BoardFilterPopover({ + filters, + onChange, + assignees, + tags, + currentUser, + visibleCount, + totalCount, + portalClassName, +}: { + filters: BoardFilters; + onChange: (filters: BoardFilters) => void; + assignees: string[]; + tags: string[]; + currentUser?: string; + visibleCount: number; + totalCount: number; + portalClassName?: string; +}) { + const activeCount = activeBoardFilterCount(filters); + const portal = portalClassName ? ` ${portalClassName}` : ""; + const update = (key: K, value: BoardFilters[K]) => + onChange({ ...filters, [key]: value }); + const clearDimension = (dimension: FilterDimension) => { + const next = { ...filters }; + delete next[dimension]; + onChange(next); + }; + + const chips: Array<{ key: FilterDimension; label: string }> = []; + if (filters.priorities?.length) { + const priorities = filters.priorities.map((priority) => + priority === "none" ? t`No priority` : priority, + ); + chips.push({ key: "priorities", label: t`Priority: ${priorities.join(", ")}` }); + } + if (filters.assignees?.length) { + chips.push({ + key: "assignees", + label: t`Assignee: ${filters.assignees + .map((assignee) => assignee || t`Unassigned`) + .join(", ")}`, + }); + } + if (filters.tags?.length) { + chips.push({ key: "tags", label: t`Labels: ${filters.tags.join(", ")}` }); + } + if (filters.due) chips.push({ key: "due", label: dueLabel(filters.due) }); + if (filters.blocked) chips.push({ key: "blocked", label: t`Blocked` }); + if (filters.mine) chips.push({ key: "mine", label: t`My cards` }); + if (filters.missingRow) chips.push({ key: "missingRow", label: t`Missing row` }); + + return ( + + + 0 + ? "border-brand/40 bg-brand-soft/60 font-medium text-brand-dark" + : "border-stone-200 bg-white text-stone-600 hover:border-brand/40 hover:text-brand-dark" + }`} + aria-label={activeCount > 0 ? t`Filters, ${activeCount} active` : t`Filters`} + > + + Filters + {activeCount > 0 && ( + + {activeCount} + + )} + + + +
+ + + Filter cards + + + + {visibleCount} of {totalCount} cards shown + + + + {activeCount > 0 && ( + + )} +
+ +
+ Priority}> +
+ {PRIORITY_ORDER.map((priority) => ( + + update("priorities", toggleValue(filters.priorities, priority)) + } + > + {priority === "none" ? t`No priority` : priority} + + ))} +
+
+ + Assignee}> +
+ {currentUser && ( + update("mine", filters.mine ? undefined : true)} + > + + + My cards + + + )} + + update("assignees", toggleValue(filters.assignees, "")) + } + > + Unassigned + + {assignees.map((assignee) => ( + + update("assignees", toggleValue(filters.assignees, assignee)) + } + > + {assignee} + + ))} +
+
+ + {tags.length > 0 && ( + Labels}> +
+ {tags.map((tag) => ( + update("tags", toggleValue(filters.tags, tag))} + > + {tag} + + ))} +
+
+ )} + + Due date}> +
+ {(["overdue", "today", "nextSevenDays", "none"] as BoardDueFilter[]).map( + (due) => ( + update("due", due)} + > + {dueLabel(due)} + + ), + )} +
+
+ + Card state}> + update("blocked", filters.blocked ? undefined : true)} + > + + + Blocked cards + + + {filters.missingRow && ( +
+ update("missingRow", undefined)} + > + Cards with a missing row + +
+ )} +
+
+
+
+ + {chips.map((chip) => ( + + ))} +
+ ); +} diff --git a/shared/components/board/BoardPeek.tsx b/shared/components/board/BoardPeek.tsx index 6b2151ee..bbc1f001 100644 --- a/shared/components/board/BoardPeek.tsx +++ b/shared/components/board/BoardPeek.tsx @@ -288,7 +288,7 @@ export function BoardPeek({ {swimlaneOptions && ( <> - Swimlane + Row ("manual"); - const [filter, setFilter] = useState(null); + const [filters, setFilters] = useState({}); const [peekWidth, setPeekWidth] = useState(360); const [draggingId, setDraggingId] = useState(null); const [draggingCol, setDraggingCol] = useState(null); @@ -153,7 +156,7 @@ export function BoardSurface({ editableColumns && viewType === "board" && !search.trim() && - !filter; + !hasBoardFilters(filters); const today = todayStr(); // Escape exits fullscreen — but only when no card peek is open (BoardPeek @@ -191,9 +194,18 @@ export function BoardSurface({ () => (swimlaneKey ? effectiveSwimlanes(config, cards, swimlaneKey, t`Unassigned`) : []), [config, cards, swimlaneKey], ); - const vis = useMemo(() => visibleCardsFn(cards, search, filter, config), [cards, search, filter, config]); // Blocker counts resolve against ALL cards (a blocker may be filtered out of view). const blockers = useMemo(() => blockedCounts(cards, config.doneColumn), [cards, config.doneColumn]); + const blockedCardIds = useMemo(() => new Set(blockers.keys()), [blockers]); + const vis = useMemo( + () => + visibleCardsFn(cards, search, filters, config, { + currentUser, + today, + blockedCardIds, + }), + [cards, search, filters, config, currentUser, today, blockedCardIds], + ); // Sub-cards resolve against ALL cards too (children may be filtered from view). const childrenMap = useMemo(() => childCardsByParent(cards), [cards]); const assignees = useMemo(() => [...new Set(cards.map((c) => c.assignee).filter(Boolean) as string[])], [cards]); @@ -447,7 +459,7 @@ export function BoardSurface({ }); }; const showMissingSwimlanes = () => { - setFilter({ prop: "swimlaneIssue", value: "dangling" }); + setFilters((current) => ({ ...current, missingRow: true })); window.setTimeout(() => { document .querySelector("[data-swimlane-unassigned]") @@ -731,12 +743,24 @@ export function BoardSurface({ disabled={conversionRequested} onChange={(e) => setConfigSafely({ groupBy: e.target.value as BoardGroupKey })} > - - - + + + )} + {viewType === "board" && !readOnly && ( + + )} {viewType === "board" && ( )} - {viewType === "board" && swimlaneKey && !readOnly && ( + {viewType === "board" && swimlaneKey && swimlaneKey !== "status" && !readOnly && ( - -
- - )} -
- Priority -
- {PRIORITY_ORDER.map((p) => ( - - - - ))} - {assignees.length > 0 && ( - <> -
- Assignee -
- {assignees.map((a) => ( - - - - ))} - - )} - {allTags.length > 0 && ( - <> -
- Tags -
- {allTags.map((tag) => ( - - - - ))} - - )} - - +
@@ -1325,7 +1285,7 @@ export function BoardSurface({ setColDraft(e.target.value)} onKeyDown={(e) => { @@ -1357,7 +1317,7 @@ export function BoardSurface({ }} > - Add column + Add status ))}
@@ -1466,7 +1426,7 @@ export function BoardSurface({ ? [ { value: selected.swimlaneKey, - label: t`Previous swimlane missing`, + label: t`Previous row missing`, warning: true, }, ] diff --git a/shared/components/board/BoardSwimlanes.tsx b/shared/components/board/BoardSwimlanes.tsx index c8d77dc1..70ed139a 100644 --- a/shared/components/board/BoardSwimlanes.tsx +++ b/shared/components/board/BoardSwimlanes.tsx @@ -195,7 +195,7 @@ export function BoardSwimlanes({ @@ -293,7 +293,7 @@ export function BoardSwimlanes({

- Create your first swimlane + Create your first custom row

Add stable horizontal groups that stay visible even when they have no cards. @@ -305,7 +305,7 @@ export function BoardSwimlanes({ className="mt-5 inline-flex min-h-10 items-center gap-1.5 rounded-lg bg-brand-dark px-3 text-xs font-semibold text-white hover:bg-brand" > - Add swimlane + Add row )} @@ -322,7 +322,7 @@ export function BoardSwimlanes({

- Swimlane + Rows {swimlaneKey === "custom" @@ -452,8 +452,8 @@ export function BoardSwimlanes({
diff --git a/shared/components/board/SwimlaneManagerDialog.tsx b/shared/components/board/SwimlaneManagerDialog.tsx index 03a3b30d..ab05bc4b 100644 --- a/shared/components/board/SwimlaneManagerDialog.tsx +++ b/shared/components/board/SwimlaneManagerDialog.tsx @@ -307,10 +307,10 @@ export function SwimlaneManagerDialog({
- Manage swimlanes + Manage custom rows

- Horizontal groups for this board. Names can change; card mapping stays attached. + Optional horizontal groups for this board. Names can change; cards stay mapped by row ID.

{announcement}
@@ -329,7 +329,7 @@ export function SwimlaneManagerDialog({
-
    +
      {lanes.map((lane, index) => { const error = rowError?.key === lane.key ? rowError.message : null; return ( @@ -367,7 +367,7 @@ export function SwimlaneManagerDialog({ className={`z-50 w-52 rounded-xl border border-line bg-white p-3 shadow-lg shadow-emerald-950/10 [--anchor-gap:4px] focus:outline-none${portal}`} >

      - Swimlane color + Row color

      {COLUMN_COLORS.map((color) => ( @@ -416,7 +416,7 @@ export function SwimlaneManagerDialog({ setRowError(null); } }} - aria-label={t`Swimlane name`} + aria-label={t`Row name`} className="h-8 w-full rounded-lg border border-brand/40 bg-white px-2 text-xs font-medium text-stone-800 outline-none ring-2 ring-brand/10" /> @@ -437,7 +437,7 @@ export function SwimlaneManagerDialog({ @@ -540,8 +540,8 @@ export function SwimlaneManagerDialog({ setRowError(null); } }} - placeholder={t`Swimlane name`} - aria-label={t`Swimlane name`} + placeholder={t`Row name`} + aria-label={t`Row name`} className="h-8 min-w-0 flex-1 rounded-lg border border-stone-200 bg-white px-2 text-xs text-stone-800 outline-none focus:border-brand focus:ring-2 focus:ring-brand/10" /> )} @@ -599,8 +599,8 @@ export function SwimlaneManagerDialog({ {issue.kind === "duplicate_swimlane_key" - ? t`Duplicate lane ID "${issue.key}". The first definition is used.` - : t`Duplicate swimlane name "${issue.name}". Names should be unique.`} + ? t`Duplicate row ID "${issue.key}". The first definition is used.` + : t`Duplicate row name "${issue.name}". Names should be unique.`}
      ))} @@ -608,7 +608,7 @@ export function SwimlaneManagerDialog({
      - {t`${danglingCount} card(s) refer to deleted swimlanes.`} + {t`${danglingCount} card(s) refer to deleted rows.`}
      )} diff --git a/shared/components/board/BoardPeek.tsx b/shared/components/board/BoardPeek.tsx index bbc1f001..6b2151ee 100644 --- a/shared/components/board/BoardPeek.tsx +++ b/shared/components/board/BoardPeek.tsx @@ -288,7 +288,7 @@ export function BoardPeek({ {swimlaneOptions && ( <> - Row + Swimlane (null); const [swimlaneManagerOpen, setSwimlaneManagerOpen] = useState(false); const [statusManagerOpen, setStatusManagerOpen] = useState(false); - const [laneFocusRequest, setLaneFocusRequest] = useState<{ - id: number; - laneKey: string; - action: "rename" | "delete"; - }>(); const [conversionOpen, setConversionOpen] = useState(false); const [conversionSource, setConversionSource] = useState<"priority" | "assignee">("priority"); const [conversionRequested, setConversionRequested] = useState(false); const [conversionProgress, setConversionProgress] = useState<{ completed: number; total: number } | null>(null); const [conversionError, setConversionError] = useState(""); const [conversionPass, setConversionPass] = useState(0); - const [customLaneMutationPending, setCustomLaneMutationPending] = useState(false); const cardDrag = useRef<{ id: string; startX: number; startY: number; moved: boolean } | null>(null); const colDrag = useRef<{ key: string; startX: number; startY: number; moved: boolean } | null>(null); const conversionStepBusy = useRef(false); const conversionAttemptRef = useRef<{ signature: string; writes: number } | null>(null); - const customLaneMutationBusy = useRef(false); - const groupKey: BoardGroupKey = config.groupBy ?? "status"; + const groupKey = activeBoardLaneKey(config); const editableColumns = groupKey === "status"; + const customSwimlanes = groupKey === "custom"; const viewType = config.viewType ?? "board"; const doneKey = config.doneColumn ?? DEFAULT_DONE_COLUMN; const colorColumns = (config.colorColumns ?? false) && editableColumns && viewType === "board"; @@ -181,19 +173,12 @@ export function BoardSurface({ }, [multiSel.size]); const columns = useMemo( - () => effectiveColumns(config, cards, groupKey, t`Unassigned`), + () => + groupKey === "custom" + ? effectiveSwimlanes(config, cards, groupKey, t`Unassigned`) + : effectiveColumns(config, cards, groupKey, t`Unassigned`), [config, cards, groupKey], ); - // Swimlanes: a second grouping dimension rendered as rows (must differ from - // the column dimension). Only meaningful in the board view. - const normalizedSwimlaneBy = normalizeSwimlaneBy(config.swimlaneBy); - const swimlaneKey: BoardSwimlaneGroupKey | null = - normalizedSwimlaneBy && normalizedSwimlaneBy !== groupKey ? normalizedSwimlaneBy : null; - const swimlaneActive = viewType === "board" && !!swimlaneKey; - const lanes = useMemo( - () => (swimlaneKey ? effectiveSwimlanes(config, cards, swimlaneKey, t`Unassigned`) : []), - [config, cards, swimlaneKey], - ); // Blocker counts resolve against ALL cards (a blocker may be filtered out of view). const blockers = useMemo(() => blockedCounts(cards, config.doneColumn), [cards, config.doneColumn]); const blockedCardIds = useMemo(() => new Set(blockers.keys()), [blockers]); @@ -374,6 +359,7 @@ export function BoardSurface({ } await actions.setConfig({ + groupBy: "status", swimlanes: definitions, swimlaneBy: "custom", swimlaneMigration: undefined, @@ -419,50 +405,11 @@ export function BoardSurface({ const saveCustomLanes = async (next: BoardSwimlane[]) => { await actions.setConfig({ swimlanes: next }); }; - const moveCustomLane = (laneKey: string, delta: -1 | 1) => { - if (customLaneMutationBusy.current) return; - const definitions = [...(config.swimlanes ?? [])]; - const from = definitions.findIndex((lane) => lane.key === laneKey); - const to = from + delta; - if (from < 0 || to < 0 || to >= definitions.length) return; - const [lane] = definitions.splice(from, 1); - if (!lane) return; - definitions.splice(to, 0, lane); - customLaneMutationBusy.current = true; - setCustomLaneMutationPending(true); - void Promise.resolve(actions.setConfig({ swimlanes: definitions })) - .catch(() => { - // Platform adapter surfaces the save failure. - }) - .finally(() => { - customLaneMutationBusy.current = false; - setCustomLaneMutationPending(false); - }); - }; - const setCustomLaneColor = (laneKey: string, color: string | null) => { - if (customLaneMutationBusy.current) return; - customLaneMutationBusy.current = true; - setCustomLaneMutationPending(true); - void Promise.resolve( - actions.setConfig({ - swimlanes: (config.swimlanes ?? []).map((lane) => - lane.key === laneKey ? { ...lane, color } : lane, - ), - }), - ) - .catch(() => { - // Platform adapter surfaces the save failure. - }) - .finally(() => { - customLaneMutationBusy.current = false; - setCustomLaneMutationPending(false); - }); - }; const showMissingSwimlanes = () => { setFilters((current) => ({ ...current, missingRow: true })); window.setTimeout(() => { document - .querySelector("[data-swimlane-unassigned]") + .querySelector('[data-col-key=""]') ?.scrollIntoView({ block: "nearest", inline: "nearest", behavior: "smooth" }); }, 80); }; @@ -541,7 +488,7 @@ export function BoardSurface({ ? cards.filter( (candidate) => candidate.id !== card.id && - groupValueOf(candidate, groupKey) === target.col, + boardLaneValueOf(candidate, config) === target.col, ).length : target.index; void actions.moveCard(card.id, target.col, targetIndex); @@ -739,17 +686,38 @@ export function BoardSurface({ )} - {viewType === "board" && !readOnly && ( + {viewType === "board" && groupKey === "status" && !readOnly && ( )} - {viewType === "board" && ( - - )} - {viewType === "board" && swimlaneKey && swimlaneKey !== "status" && !readOnly && ( + {viewType === "board" && groupKey !== "status" && !readOnly && ( ))} + {customSwimlanes && !readOnly && ( + + )}
)} @@ -1426,7 +1347,7 @@ export function BoardSurface({ ? [ { value: selected.swimlaneKey, - label: t`Previous row missing`, + label: t`Previous swimlane missing`, warning: true, }, ] @@ -1463,9 +1384,13 @@ export function BoardSurface({ readOnly ? undefined : async (title) => { - // Sub-cards start in the first status column, not the parent's. - const startCol = editableColumns ? config.columns[0]?.key ?? selected.columnKey : selected.columnKey; - const newId = await actions.createCard(startCol, title); + // Status sub-cards enter the first workflow state; other + // dimensions keep the new card beside its parent. + const startLane = + groupKey === "status" + ? config.columns[0]?.key ?? selected.columnKey + : boardLaneValueOf(selected, config); + const newId = await actions.createCard(startLane, title); if (typeof newId === "string") { await actions.updateCard(newId, { parent: cardSlug(selected) }); } @@ -1493,12 +1418,8 @@ export function BoardSurface({ open={swimlaneManagerOpen} lanes={config.swimlanes ?? []} cards={cards} - focusRequest={laneFocusRequest} portalClassName={portalClassName} - onClose={() => { - setSwimlaneManagerOpen(false); - setLaneFocusRequest(undefined); - }} + onClose={() => setSwimlaneManagerOpen(false)} onSaveLanes={saveCustomLanes} onUpdateCards={updateManyCards} onShowAffected={showMissingSwimlanes} diff --git a/shared/components/board/BoardSwimlanes.tsx b/shared/components/board/BoardSwimlanes.tsx deleted file mode 100644 index 70ed139a..00000000 --- a/shared/components/board/BoardSwimlanes.tsx +++ /dev/null @@ -1,507 +0,0 @@ -import { Fragment, useMemo, useState } from "react"; -import { t } from "@lingui/core/macro"; -import { Plural, Trans } from "@lingui/react/macro"; -import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/react"; -import { - ArrowDownIcon, - ArrowUpIcon, - CalendarDaysIcon, - CheckCircleIcon, - EllipsisHorizontalIcon, - ExclamationTriangleIcon, - PencilIcon, - PlusIcon, - RectangleGroupIcon, - TrashIcon, - XMarkIcon, -} from "@heroicons/react/24/outline"; -import { - COLUMN_COLORS, - PRIORITY_STYLE, - partitionSwimlanes, - sortCards, - type BoardGroupKey, - type BoardSortKey, - type BoardSwimlaneGroupKey, - type BoardViewCard, - type BoardViewColumn, - type BoardViewConfig, -} from "../../lib/board"; -import { LaneDetailsPopover } from "./LaneDetailsPopover"; -import { StatusActionsMenu } from "./StatusActionsMenu"; -import type { BoardActions } from "./types"; - -type LaneManagerRequest = { - laneKey: string; - action: "rename" | "delete"; -}; - -/** - * Two-dimensional board view rendered as one scrollport + one CSS grid. The - * top headers, left lane rails, and corner share the same grid so they stay - * aligned while both axes scroll. - */ -export function BoardSwimlanes({ - cards, - columns, - lanes, - config, - groupKey, - swimlaneKey, - sortBy, - today, - doneKey, - selectedId, - actions, - readOnly, - customLaneMutationPending, - portalClassName, - onSelect, - onOpenManager, - onManageLane, - onMoveCustomLane, - onSetCustomLaneColor, - onShowMissing, -}: { - cards: BoardViewCard[]; - columns: BoardViewColumn[]; - lanes: BoardViewColumn[]; - config: BoardViewConfig; - groupKey: BoardGroupKey; - swimlaneKey: BoardSwimlaneGroupKey; - sortBy: BoardSortKey; - today: string; - doneKey: string; - selectedId?: string; - actions: BoardActions; - readOnly?: boolean; - customLaneMutationPending?: boolean; - portalClassName?: string; - onSelect: (card: BoardViewCard) => void; - onOpenManager: () => void; - onManageLane: (request: LaneManagerRequest) => void; - onMoveCustomLane: (laneKey: string, delta: -1 | 1) => void; - onSetCustomLaneColor: (laneKey: string, color: string | null) => void; - onShowMissing: () => void; -}) { - const [addingColumn, setAddingColumn] = useState(false); - const [columnDraft, setColumnDraft] = useState(""); - const portal = portalClassName ? ` ${portalClassName}` : ""; - const grid = useMemo( - () => partitionSwimlanes(cards, groupKey, swimlaneKey, config.swimlanes), - [cards, config.swimlanes, groupKey, swimlaneKey], - ); - const gridStyle = { - gridTemplateColumns: `9rem repeat(${Math.max(columns.length, 1)}, minmax(15rem, 1fr))`, - }; - const customLanes = useMemo( - () => - (config.swimlanes ?? []).filter( - (lane, index, all) => all.findIndex((candidate) => candidate.key === lane.key) === index, - ), - [config.swimlanes], - ); - const customByKey = useMemo( - () => new Map(customLanes.map((lane) => [lane.key, lane])), - [customLanes], - ); - const missingCount = - swimlaneKey === "custom" - ? cards.filter( - (card) => - !!card.swimlaneKey && !customByKey.has(card.swimlaneKey), - ).length - : 0; - - const laneTotals = useMemo(() => { - const totals = new Map(); - for (const [laneKey, row] of grid) { - totals.set( - laneKey, - [...row.values()].reduce((total, cell) => total + cell.length, 0), - ); - } - return totals; - }, [grid]); - const columnTotals = useMemo(() => { - const totals = new Map(columns.map((column) => [column.key, 0])); - for (const row of grid.values()) { - for (const [columnKey, cell] of row) { - if (totals.has(columnKey)) totals.set(columnKey, (totals.get(columnKey) ?? 0) + cell.length); - } - } - return totals; - }, [columns, grid]); - const laneTotal = (laneKey: string) => laneTotals.get(laneKey) ?? 0; - const visibleLanes = lanes.filter((lane) => lane.key !== "" || laneTotal(lane.key) > 0); - - const cardChip = (card: BoardViewCard) => { - const overdue = card.due && card.due < today && card.columnKey !== doneKey; - return ( - - ); - }; - - const customLaneMenu = (lane: BoardViewColumn, index: number) => { - const definition = customByKey.get(lane.key); - if (!definition || readOnly) return null; - return ( - - - - - - - - - - - - - - -
-
- - Color - -
- {COLUMN_COLORS.map((color) => ( - -
-
-
- - - - -
- ); - }; - - if (swimlaneKey === "custom" && customLanes.length === 0) { - return ( -
-
- - - -

- Create your first custom row -

-

- Add stable horizontal groups that stay visible even when they have no cards. -

- {!readOnly && ( - - )} -
-
- ); - } - - return ( -
-
-
- - - Rows - - - {swimlaneKey === "custom" - ? t`Custom` - : swimlaneKey === "status" - ? t`Status` - : swimlaneKey === "priority" - ? t`Priority` - : t`Assignee`} - - - {groupKey === "status" && actions.addColumn && !readOnly && ( - - )} -
- - {columns.map((col) => { - const count = columnTotals.get(col.key) ?? 0; - const overLimit = col.limit != null && count > col.limit; - return ( -
- {col.name} - {doneKey === col.key && groupKey === "status" && ( - - )} - - {count} - {col.limit != null ? `/${col.limit}` : ""} - - {groupKey === "status" && !readOnly && ( - - )} -
- ); - })} - - {addingColumn && ( -
{ - event.preventDefault(); - const name = columnDraft.trim(); - if (!name) return; - setAddingColumn(false); - setColumnDraft(""); - void actions.addColumn?.(name); - }} - > - - setColumnDraft(event.target.value)} - onKeyDown={(event) => { - if (event.key === "Escape") { - setAddingColumn(false); - setColumnDraft(""); - } - }} - placeholder={t`Status name`} - aria-label={t`Status name`} - className="h-8 w-56 rounded-lg border border-stone-200 bg-white px-2 text-xs outline-none focus:border-brand focus:ring-2 focus:ring-brand/10" - /> - - - - )} - - {visibleLanes.map((lane) => { - const row = grid.get(lane.key); - const total = laneTotal(lane.key); - const isUnassigned = lane.key === ""; - const customDefinitionIndex = customLanes.findIndex((item) => item.key === lane.key); - return ( - -
- - -

- {isUnassigned && missingCount > 0 && ( - - )} - {lane.name} -

- - - -
- {swimlaneKey === "custom" && - !isUnassigned && - customLaneMenu(lane, customDefinitionIndex)} - {swimlaneKey === "custom" && !isUnassigned && customByKey.get(lane.key) && ( - - )} - {swimlaneKey === "status" && !readOnly && ( - - )} -
- - {columns.map((col) => { - const cell = sortCards(row?.get(col.key) ?? [], sortBy); - return ( -
- {cell.map(cardChip)} -
- ); - })} -
- ); - })} -
-
- ); -} diff --git a/shared/components/board/LaneDetailsPopover.tsx b/shared/components/board/LaneDetailsPopover.tsx index c9460a55..5319d254 100644 --- a/shared/components/board/LaneDetailsPopover.tsx +++ b/shared/components/board/LaneDetailsPopover.tsx @@ -50,8 +50,8 @@ export function LaneDetailsPopover({ return ( @@ -62,7 +62,7 @@ export function LaneDetailsPopover({ >

- Row details + Swimlane details

@@ -70,7 +70,7 @@ export function LaneDetailsPopover({
{lane.name}
- Row ID + Swimlane ID
@@ -78,8 +78,8 @@ export function LaneDetailsPopover({ diff --git a/shared/components/board/SwimlaneManagerDialog.tsx b/shared/components/board/SwimlaneManagerDialog.tsx index ab05bc4b..8997f5ea 100644 --- a/shared/components/board/SwimlaneManagerDialog.tsx +++ b/shared/components/board/SwimlaneManagerDialog.tsx @@ -307,10 +307,10 @@ export function SwimlaneManagerDialog({
- Manage custom rows + Manage custom swimlanes

- Optional horizontal groups for this board. Names can change; cards stay mapped by row ID. + Vertical columns for this board. Names can change; cards stay mapped by swimlane ID.

{announcement}
@@ -329,7 +329,7 @@ export function SwimlaneManagerDialog({
-
    +
      {lanes.map((lane, index) => { const error = rowError?.key === lane.key ? rowError.message : null; return ( @@ -367,7 +367,7 @@ export function SwimlaneManagerDialog({ className={`z-50 w-52 rounded-xl border border-line bg-white p-3 shadow-lg shadow-emerald-950/10 [--anchor-gap:4px] focus:outline-none${portal}`} >

      - Row color + Swimlane color

      {COLUMN_COLORS.map((color) => ( @@ -416,7 +416,7 @@ export function SwimlaneManagerDialog({ setRowError(null); } }} - aria-label={t`Row name`} + aria-label={t`Swimlane name`} className="h-8 w-full rounded-lg border border-brand/40 bg-white px-2 text-xs font-medium text-stone-800 outline-none ring-2 ring-brand/10" /> @@ -437,7 +437,7 @@ export function SwimlaneManagerDialog({ @@ -540,8 +540,8 @@ export function SwimlaneManagerDialog({ setRowError(null); } }} - placeholder={t`Row name`} - aria-label={t`Row name`} + placeholder={t`Swimlane name`} + aria-label={t`Swimlane name`} className="h-8 min-w-0 flex-1 rounded-lg border border-stone-200 bg-white px-2 text-xs text-stone-800 outline-none focus:border-brand focus:ring-2 focus:ring-brand/10" /> )} @@ -599,8 +599,8 @@ export function SwimlaneManagerDialog({ {issue.kind === "duplicate_swimlane_key" - ? t`Duplicate row ID "${issue.key}". The first definition is used.` - : t`Duplicate row name "${issue.name}". Names should be unique.`} + ? t`Duplicate swimlane ID "${issue.key}". The first definition is used.` + : t`Duplicate swimlane name "${issue.name}". Names should be unique.`}
      ))} @@ -608,7 +608,7 @@ export function SwimlaneManagerDialog({
      - {t`${danglingCount} card(s) refer to deleted rows.`} + {t`${danglingCount} card(s) refer to deleted swimlanes.`}