@neuronection/assistant-ui 0.16.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +1 -0
- package/dist/chunk-PRHTQBCP.js +123 -0
- package/dist/chunk-PRHTQBCP.js.map +1 -0
- package/dist/{chunk-3IXMZ6KG.js → chunk-SW3YNICQ.js} +38 -35
- package/dist/chunk-SW3YNICQ.js.map +1 -0
- package/dist/flow-status.d.ts +37 -0
- package/dist/flow-status.js +3 -0
- package/dist/flow-status.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/sidebar-nav.d.ts +5 -0
- package/dist/sidebar-nav.js +1 -1
- package/dist/styles.css +1 -1
- package/package.json +5 -1
- package/dist/chunk-3IXMZ6KG.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @neuronection/assistant-ui
|
|
2
2
|
|
|
3
|
+
## 0.18.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`f3f37bc`](https://github.com/neuronection/assistant-ui/commit/f3f37bc8ad65e3219e0d7997a786e8131c0de2c1) Thanks [@constLiakos](https://github.com/constLiakos)! - New `flow-status` module: `FlowStatusCard`, a presentational + controlled
|
|
8
|
+
card for multi-step AI flows (per-node status, current-step emphasis,
|
|
9
|
+
progress summary, error + `retryable`, controlled `onRetry`/`onCancel`/
|
|
10
|
+
`onResume`, `detail` payload slot). Apps map the family event vocabulary
|
|
11
|
+
(`flow_started`/`node_*`/`flow_failed`/`interrupt`) to props; the component
|
|
12
|
+
never sees transports.
|
|
13
|
+
|
|
14
|
+
## 0.17.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- [`6df699b`](https://github.com/neuronection/assistant-ui/commit/6df699b8070318b88a33ba124c7b9d2d90855241) Thanks [@constLiakos](https://github.com/constLiakos)! - SidebarNav: new `compact` prop — a denser layout for short viewports (tighter item padding, smaller icons/typography, slimmer list/pinned/footer regions, `data-as-compact` on the root). Presentational and controlled per ADR-006: the app owns the trigger (e.g. a `max-height` media query hook) and decides whether to hide its footer block in the same state. Composes with `collapsed`; keyboard traversal and the a11y contract are unchanged.
|
|
19
|
+
|
|
3
20
|
## 0.16.0
|
|
4
21
|
|
|
5
22
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -85,6 +85,7 @@ Visual reference: [gallery](https://neuronection.github.io/assistant-ui/).
|
|
|
85
85
|
| [`error-banner`](./docs/components/error-banner.md) / [`undo-notice`](./docs/components/undo-notice.md) / [`empty-state`](./docs/components/empty-state.md) / [`spinner`](./docs/components/spinner.md) | presentational feedback: alert banner with `action` slot · undo toast · `EmptyState` · `Spinner` | [stories](https://neuronection.github.io/assistant-ui/?story=feedback--errors) |
|
|
86
86
|
| [`info-button`](./docs/components/info-button.md) / [`field-label`](./docs/components/field-label.md) / [`copy-button`](./docs/components/copy-button.md) / [`breadcrumbs`](./docs/components/breadcrumbs.md) | `InfoButton` · `FieldLabel` · `CopyButton` (clipboard + copied state) · `Breadcrumbs` (SPA links via `linkComponent`) | [stories](https://neuronection.github.io/assistant-ui/?story=phase2--copy-buttons) |
|
|
87
87
|
| [`ai-button`](./docs/components/ai-button.md) / [`ai-actions-dropdown`](./docs/components/ai-actions-dropdown.md) / [`ai-magic-fill`](./docs/components/ai-magic-fill.md) | AI affordances: ask-with-suggestions (controlled open, icon-only mode) · action menu + custom prompt · describe-in-words fill modal — API calls stay app-side | [stories](https://neuronection.github.io/assistant-ui/?story=ai-patterns--ai-buttons) |
|
|
88
|
+
| [`flow-status`](./docs/components/flow-status.md) | `FlowStatusCard` (multi-step AI-flow progress from the family event vocabulary: per-node status, current-step emphasis, progress summary, error + retryable, controlled retry/cancel/resume, `detail` slot for HITL cards) | [stories](https://neuronection.github.io/assistant-ui/?story=flow-status--running) |
|
|
88
89
|
| [`settings-shell`](./docs/components/settings-shell.md) / [`provider-form`](./docs/components/provider-form.md) / [`connection-test-row`](./docs/components/connection-test-row.md) | `SettingsShell` (controlled two-pane nav) · `ProviderForm` (write-only API-key field) · `ConnectionTestRow` (idle/testing/ok/fail + latency, `inline` variant + meta slot) | [stories](https://neuronection.github.io/assistant-ui/?story=settings-trio--provider-form-story) |
|
|
89
90
|
| [`sidebar-nav`](./docs/components/sidebar-nav.md) | `SidebarNav` (family-standard vertical nav: groups + sections, badges, controlled active id, pinned secondary items, optional collapsed icon rail with hover flyouts, header/footer slots) | [stories](https://neuronection.github.io/assistant-ui/?story=sidebar-nav--groups-story) |
|
|
90
91
|
| [`user-menu`](./docs/components/user-menu.md) | `UserMenu` (avatar/identity trigger + action menu incl. checkable items; composed over `Menu`) | [stories](https://neuronection.github.io/assistant-ui/?story=user-menu--checkable-items-story) |
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Button } from './chunk-GTXGTQ6F.js';
|
|
2
|
+
import { Spinner } from './chunk-INTST5VG.js';
|
|
3
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { PauseCircle, TriangleAlert, Check, CircleDashed } from 'lucide-react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var stepIcons = {
|
|
9
|
+
pending: { icon: CircleDashed, tone: "text-[var(--as-muted-fg)]" },
|
|
10
|
+
running: { icon: null, tone: "text-[var(--as-primary)]" },
|
|
11
|
+
done: { icon: Check, tone: "text-[var(--as-success)]" },
|
|
12
|
+
failed: { icon: TriangleAlert, tone: "text-[var(--as-danger)]" },
|
|
13
|
+
interrupted: { icon: PauseCircle, tone: "text-[var(--as-warning)]" }
|
|
14
|
+
};
|
|
15
|
+
var FlowStatusCard = React.forwardRef(function FlowStatusCard2({
|
|
16
|
+
title,
|
|
17
|
+
steps,
|
|
18
|
+
status,
|
|
19
|
+
error,
|
|
20
|
+
onRetry,
|
|
21
|
+
onCancel,
|
|
22
|
+
onResume,
|
|
23
|
+
detail,
|
|
24
|
+
labels,
|
|
25
|
+
className
|
|
26
|
+
}, ref) {
|
|
27
|
+
const completed = steps.filter((step) => step.status === "done").length;
|
|
28
|
+
const current = steps.find((step) => step.status === "running");
|
|
29
|
+
const currentNumber = steps.findIndex((step) => step.id === current?.id) + 1;
|
|
30
|
+
const progress = steps.length > 0 ? `${status === "running" ? currentNumber : completed}/${steps.length}` : null;
|
|
31
|
+
const overall = stepIcons[status];
|
|
32
|
+
const showRetry = Boolean(onRetry && error?.retryable);
|
|
33
|
+
const showCancel = Boolean(onCancel && status === "running");
|
|
34
|
+
const showResume = Boolean(onResume && status === "interrupted");
|
|
35
|
+
return /* @__PURE__ */ jsxs(
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
ref,
|
|
39
|
+
"data-as": "flow-status-card",
|
|
40
|
+
"data-status": status,
|
|
41
|
+
className: cn(
|
|
42
|
+
"flex w-full flex-col gap-3 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-4",
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
47
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-[var(--as-fg)]", children: title }),
|
|
48
|
+
/* @__PURE__ */ jsxs(
|
|
49
|
+
"span",
|
|
50
|
+
{
|
|
51
|
+
role: "status",
|
|
52
|
+
className: cn(
|
|
53
|
+
"flex shrink-0 items-center gap-1.5 text-xs",
|
|
54
|
+
overall.tone
|
|
55
|
+
),
|
|
56
|
+
children: [
|
|
57
|
+
status === "running" ? /* @__PURE__ */ jsx(Spinner, { size: "sm", className: "text-[var(--as-primary)]" }) : overall.icon && /* @__PURE__ */ jsx(overall.icon, { className: "size-3.5", "aria-hidden": true }),
|
|
58
|
+
progress ? /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: progress }) : null
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
] }),
|
|
63
|
+
status === "running" && current ? /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--as-muted-fg)]", children: current.label }) : null,
|
|
64
|
+
steps.length > 0 ? /* @__PURE__ */ jsx("ol", { className: "flex flex-col gap-2", children: steps.map((step) => {
|
|
65
|
+
const stepIcon = stepIcons[step.status];
|
|
66
|
+
return /* @__PURE__ */ jsxs(
|
|
67
|
+
"li",
|
|
68
|
+
{
|
|
69
|
+
"data-status": step.status,
|
|
70
|
+
"aria-current": step.status === "running" && status === "running" ? "step" : void 0,
|
|
71
|
+
className: "flex items-center gap-2.5",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ jsx(
|
|
74
|
+
"span",
|
|
75
|
+
{
|
|
76
|
+
className: cn(
|
|
77
|
+
"flex size-4 shrink-0 items-center justify-center",
|
|
78
|
+
stepIcon.tone
|
|
79
|
+
),
|
|
80
|
+
children: step.status === "running" ? /* @__PURE__ */ jsx(Spinner, { size: "sm", className: "text-[var(--as-primary)]" }) : stepIcon.icon && /* @__PURE__ */ jsx(stepIcon.icon, { className: "size-4", "aria-hidden": true })
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
"span",
|
|
85
|
+
{
|
|
86
|
+
className: cn(
|
|
87
|
+
"text-sm",
|
|
88
|
+
step.status === "running" ? "font-medium text-[var(--as-fg)]" : "text-[var(--as-muted-fg)]"
|
|
89
|
+
),
|
|
90
|
+
children: step.label
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
step.id
|
|
96
|
+
);
|
|
97
|
+
}) }) : null,
|
|
98
|
+
status === "failed" && error ? /* @__PURE__ */ jsxs(
|
|
99
|
+
"div",
|
|
100
|
+
{
|
|
101
|
+
role: "alert",
|
|
102
|
+
"data-as": "flow-status-card-error",
|
|
103
|
+
className: "flex flex-col gap-1 rounded-[var(--as-radius)] border border-[var(--as-danger)]/40 bg-[var(--as-danger)]/10 px-3 py-2 text-xs text-[var(--as-danger)]",
|
|
104
|
+
children: [
|
|
105
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono font-semibold uppercase tracking-wide", children: error.code }),
|
|
106
|
+
/* @__PURE__ */ jsx("span", { className: "whitespace-pre-wrap break-words", children: error.message })
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
) : null,
|
|
110
|
+
detail ? /* @__PURE__ */ jsx("div", { children: detail }) : null,
|
|
111
|
+
showRetry || showCancel || showResume ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-end gap-2", children: [
|
|
112
|
+
showCancel ? /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: onCancel, children: labels?.cancel ?? "Cancel" }) : null,
|
|
113
|
+
showResume ? /* @__PURE__ */ jsx(Button, { size: "sm", onClick: onResume, children: labels?.resume ?? "Resume" }) : null,
|
|
114
|
+
showRetry ? /* @__PURE__ */ jsx(Button, { size: "sm", onClick: onRetry, children: labels?.retry ?? "Retry" }) : null
|
|
115
|
+
] }) : null
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
export { FlowStatusCard };
|
|
122
|
+
//# sourceMappingURL=chunk-PRHTQBCP.js.map
|
|
123
|
+
//# sourceMappingURL=chunk-PRHTQBCP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/flow-status/FlowStatusCard.tsx"],"names":["FlowStatusCard"],"mappings":"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","file":"chunk-PRHTQBCP.js","sourcesContent":["import * as React from 'react'\nimport { Check, CircleDashed, PauseCircle, TriangleAlert } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Spinner } from '../spinner/Spinner'\nimport { Button } from '../button/Button'\n\nexport type FlowStepStatus =\n | 'pending'\n | 'running'\n | 'done'\n | 'failed'\n | 'interrupted'\n\nexport interface FlowStep {\n id: string\n label: string\n status: FlowStepStatus\n}\n\nexport interface FlowError {\n code: string\n message: string\n retryable: boolean\n}\n\nexport interface FlowStatusCardProps {\n /** Flow name, e.g. \"Analyzing document\". */\n title: string\n /** Ordered steps, one per graph node. */\n steps: FlowStep[]\n /** Overall run status. */\n status: FlowStepStatus\n /** Set when `status === 'failed'`. */\n error?: FlowError\n /** Rendered only when `error?.retryable`. */\n onRetry?: () => void\n /** Rendered while `status === 'running'`. */\n onCancel?: () => void\n /** Rendered when `status === 'interrupted'`. */\n onResume?: () => void\n /** Payload slot: HITL card, references, extra info. */\n detail?: React.ReactNode\n /** Plain strings, i18n at call sites. */\n labels?: Partial<Record<'retry' | 'cancel' | 'resume', string>>\n className?: string\n}\n\nconst stepIcons: Record<\n FlowStepStatus,\n { icon: LucideIcon | null; tone: string }\n> = {\n pending: { icon: CircleDashed, tone: 'text-[var(--as-muted-fg)]' },\n running: { icon: null, tone: 'text-[var(--as-primary)]' },\n done: { icon: Check, tone: 'text-[var(--as-success)]' },\n failed: { icon: TriangleAlert, tone: 'text-[var(--as-danger)]' },\n interrupted: { icon: PauseCircle, tone: 'text-[var(--as-warning)]' },\n}\n\nexport const FlowStatusCard = React.forwardRef<\n HTMLDivElement,\n FlowStatusCardProps\n>(function FlowStatusCard(\n {\n title,\n steps,\n status,\n error,\n onRetry,\n onCancel,\n onResume,\n detail,\n labels,\n className,\n },\n ref,\n) {\n const completed = steps.filter((step) => step.status === 'done').length\n const current = steps.find((step) => step.status === 'running')\n const currentNumber = steps.findIndex((step) => step.id === current?.id) + 1\n const progress =\n steps.length > 0\n ? `${status === 'running' ? currentNumber : completed}/${steps.length}`\n : null\n const overall = stepIcons[status]\n\n const showRetry = Boolean(onRetry && error?.retryable)\n const showCancel = Boolean(onCancel && status === 'running')\n const showResume = Boolean(onResume && status === 'interrupted')\n\n return (\n <div\n ref={ref}\n data-as=\"flow-status-card\"\n data-status={status}\n className={cn(\n 'flex w-full flex-col gap-3 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-4',\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm font-semibold text-[var(--as-fg)]\">{title}</p>\n <span\n role=\"status\"\n className={cn(\n 'flex shrink-0 items-center gap-1.5 text-xs',\n overall.tone,\n )}\n >\n {status === 'running' ? (\n <Spinner size=\"sm\" className=\"text-[var(--as-primary)]\" />\n ) : (\n overall.icon && <overall.icon className=\"size-3.5\" aria-hidden />\n )}\n {progress ? <span className=\"tabular-nums\">{progress}</span> : null}\n </span>\n </div>\n {status === 'running' && current ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">{current.label}</p>\n ) : null}\n {steps.length > 0 ? (\n <ol className=\"flex flex-col gap-2\">\n {steps.map((step) => {\n const stepIcon = stepIcons[step.status]\n return (\n <li\n key={step.id}\n data-status={step.status}\n aria-current={\n step.status === 'running' && status === 'running'\n ? 'step'\n : undefined\n }\n className=\"flex items-center gap-2.5\"\n >\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center',\n stepIcon.tone,\n )}\n >\n {step.status === 'running' ? (\n <Spinner size=\"sm\" className=\"text-[var(--as-primary)]\" />\n ) : (\n stepIcon.icon && (\n <stepIcon.icon className=\"size-4\" aria-hidden />\n )\n )}\n </span>\n <span\n className={cn(\n 'text-sm',\n step.status === 'running'\n ? 'font-medium text-[var(--as-fg)]'\n : 'text-[var(--as-muted-fg)]',\n )}\n >\n {step.label}\n </span>\n </li>\n )\n })}\n </ol>\n ) : null}\n {status === 'failed' && error ? (\n <div\n role=\"alert\"\n data-as=\"flow-status-card-error\"\n className=\"flex flex-col gap-1 rounded-[var(--as-radius)] border border-[var(--as-danger)]/40 bg-[var(--as-danger)]/10 px-3 py-2 text-xs text-[var(--as-danger)]\"\n >\n <span className=\"font-mono font-semibold uppercase tracking-wide\">\n {error.code}\n </span>\n <span className=\"whitespace-pre-wrap break-words\">\n {error.message}\n </span>\n </div>\n ) : null}\n {detail ? <div>{detail}</div> : null}\n {showRetry || showCancel || showResume ? (\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n {showCancel ? (\n <Button variant=\"outline\" size=\"sm\" onClick={onCancel}>\n {labels?.cancel ?? 'Cancel'}\n </Button>\n ) : null}\n {showResume ? (\n <Button size=\"sm\" onClick={onResume}>\n {labels?.resume ?? 'Resume'}\n </Button>\n ) : null}\n {showRetry ? (\n <Button size=\"sm\" onClick={onRetry}>\n {labels?.retry ?? 'Retry'}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n})\n"]}
|
|
@@ -5,8 +5,9 @@ import { ChevronRight, ChevronLeft, ChevronDown } from 'lucide-react';
|
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
7
|
var FLYOUT_DELAY_MS = 150;
|
|
8
|
-
var itemButtonClass = (active) => cn(
|
|
9
|
-
"flex w-full cursor-pointer items-center
|
|
8
|
+
var itemButtonClass = (active, compact) => cn(
|
|
9
|
+
"flex w-full cursor-pointer items-center rounded-[var(--as-radius)] text-left transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50",
|
|
10
|
+
compact ? "gap-2 px-2.5 py-1.5 text-xs" : "gap-3 px-3 py-2.5 text-sm",
|
|
10
11
|
active ? "bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] font-bold text-[var(--as-primary)]" : "font-medium text-[var(--as-fg)] hover:bg-[var(--as-muted)]"
|
|
11
12
|
);
|
|
12
13
|
var flyoutContentClass = "as-anim-pop z-[var(--as-z-popover)] min-w-44 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-1 text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none";
|
|
@@ -39,6 +40,7 @@ var SidebarNav = React.forwardRef(
|
|
|
39
40
|
onExpandedIdsChange,
|
|
40
41
|
header,
|
|
41
42
|
footer,
|
|
43
|
+
compact = false,
|
|
42
44
|
labels,
|
|
43
45
|
className,
|
|
44
46
|
navClassName
|
|
@@ -179,19 +181,16 @@ var SidebarNav = React.forwardRef(
|
|
|
179
181
|
const navAria = labels?.navAria ?? "Main navigation";
|
|
180
182
|
const rail = collapsed;
|
|
181
183
|
const flyoutHeader = (text) => /* @__PURE__ */ jsx("div", { className: "border-b border-[var(--as-border)] px-2 py-1.5 text-xs font-bold text-[var(--as-muted-fg)]", children: text });
|
|
184
|
+
const sectionDividerClass = compact ? "mt-1 border-t border-[var(--as-border)] px-3 pb-0.5 pt-2 text-[10px] font-bold uppercase tracking-wide text-[var(--as-muted-fg)]" : "mt-2 border-t border-[var(--as-border)] px-3 pb-1 pt-3 text-[11px] font-bold uppercase tracking-wide text-[var(--as-muted-fg)]";
|
|
185
|
+
const listGapClass = compact ? "space-y-0.5" : "space-y-1";
|
|
186
|
+
const iconClass = compact ? "size-3.5" : "size-4";
|
|
187
|
+
const regionClass = compact ? "px-2.5 py-2" : "px-3 py-3";
|
|
182
188
|
const renderItem = (item, index, list) => {
|
|
183
189
|
if (item.children !== void 0 && item.children.length === 0) {
|
|
184
190
|
return null;
|
|
185
191
|
}
|
|
186
192
|
const sectionSeen = !rail && item.section !== void 0 && list.findIndex((i) => i.section === item.section) === index;
|
|
187
|
-
const sectionDivider = sectionSeen ? /* @__PURE__ */ jsx(
|
|
188
|
-
"div",
|
|
189
|
-
{
|
|
190
|
-
role: "presentation",
|
|
191
|
-
className: "mt-2 border-t border-[var(--as-border)] px-3 pb-1 pt-3 text-[11px] font-bold uppercase tracking-wide text-[var(--as-muted-fg)]",
|
|
192
|
-
children: item.section
|
|
193
|
-
}
|
|
194
|
-
) : null;
|
|
193
|
+
const sectionDivider = sectionSeen ? /* @__PURE__ */ jsx("div", { role: "presentation", className: sectionDividerClass, children: item.section }) : null;
|
|
195
194
|
const active = item.id === activeId;
|
|
196
195
|
const childActive = item.children?.some((c) => c.id === activeId) ?? false;
|
|
197
196
|
const isExpanded = expanded.includes(item.id);
|
|
@@ -227,7 +226,7 @@ var SidebarNav = React.forwardRef(
|
|
|
227
226
|
},
|
|
228
227
|
onMouseEnter: () => flyoutEnter(item.id),
|
|
229
228
|
onMouseLeave: flyoutLeave,
|
|
230
|
-
className: cn(itemButtonClass(active || childActive), "justify-center px-0"),
|
|
229
|
+
className: cn(itemButtonClass(active || childActive, compact), "justify-center px-0"),
|
|
231
230
|
children: Icon ? /* @__PURE__ */ jsx(
|
|
232
231
|
Icon,
|
|
233
232
|
{
|
|
@@ -296,13 +295,14 @@ var SidebarNav = React.forwardRef(
|
|
|
296
295
|
"aria-expanded": isExpanded,
|
|
297
296
|
"aria-controls": groupId,
|
|
298
297
|
onClick: () => toggleGroup(item.id),
|
|
299
|
-
className: itemButtonClass(active || childActive),
|
|
298
|
+
className: itemButtonClass(active || childActive, compact),
|
|
300
299
|
children: [
|
|
301
300
|
Icon ? /* @__PURE__ */ jsx(
|
|
302
301
|
Icon,
|
|
303
302
|
{
|
|
304
303
|
className: cn(
|
|
305
|
-
|
|
304
|
+
iconClass,
|
|
305
|
+
"shrink-0",
|
|
306
306
|
active || childActive ? "text-[var(--as-primary)]" : "text-[var(--as-muted-fg)]"
|
|
307
307
|
),
|
|
308
308
|
"aria-hidden": true
|
|
@@ -310,25 +310,18 @@ var SidebarNav = React.forwardRef(
|
|
|
310
310
|
) : null,
|
|
311
311
|
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: item.label }),
|
|
312
312
|
/* @__PURE__ */ jsx(ItemBadge, { badge: item.badge, active: active || childActive }),
|
|
313
|
-
isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { className: "
|
|
313
|
+
isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { className: cn(iconClass, "shrink-0 text-[var(--as-muted-fg)]"), "aria-hidden": true }) : /* @__PURE__ */ jsx(ChevronRight, { className: cn(iconClass, "shrink-0 text-[var(--as-muted-fg)]"), "aria-hidden": true })
|
|
314
314
|
]
|
|
315
315
|
}
|
|
316
316
|
),
|
|
317
|
-
/* @__PURE__ */ jsx("ul", { id: groupId, hidden: !isExpanded, className: "mt-1 space-y-0.5 pl-6", children: item.children.map((child) => {
|
|
317
|
+
/* @__PURE__ */ jsx("ul", { id: groupId, hidden: !isExpanded, className: cn("mt-1 space-y-0.5", compact ? "pl-4" : "pl-6"), children: item.children.map((child) => {
|
|
318
318
|
const childActiveItem = child.id === activeId;
|
|
319
319
|
const ChildIcon = child.icon;
|
|
320
320
|
const sectionSeen2 = child.section !== void 0 && item.children.findIndex(
|
|
321
321
|
(c) => c.section === child.section
|
|
322
322
|
) === item.children.indexOf(child);
|
|
323
323
|
return /* @__PURE__ */ jsxs("li", { children: [
|
|
324
|
-
sectionSeen2 ? /* @__PURE__ */ jsx(
|
|
325
|
-
"div",
|
|
326
|
-
{
|
|
327
|
-
role: "presentation",
|
|
328
|
-
className: "mt-2 border-t border-[var(--as-border)] px-3 pb-1 pt-3 text-[11px] font-bold uppercase tracking-wide text-[var(--as-muted-fg)]",
|
|
329
|
-
children: child.section
|
|
330
|
-
}
|
|
331
|
-
) : null,
|
|
324
|
+
sectionSeen2 ? /* @__PURE__ */ jsx("div", { role: "presentation", className: sectionDividerClass, children: child.section }) : null,
|
|
332
325
|
/* @__PURE__ */ jsxs(
|
|
333
326
|
"button",
|
|
334
327
|
{
|
|
@@ -339,11 +332,11 @@ var SidebarNav = React.forwardRef(
|
|
|
339
332
|
"aria-current": childActiveItem ? "page" : void 0,
|
|
340
333
|
onClick: () => navigate(child.id),
|
|
341
334
|
className: cn(
|
|
342
|
-
itemButtonClass(childActiveItem),
|
|
343
|
-
"py-2 pl-3 pr-2"
|
|
335
|
+
itemButtonClass(childActiveItem, compact),
|
|
336
|
+
compact ? "py-1.5 pl-2.5 pr-1.5" : "py-2 pl-3 pr-2"
|
|
344
337
|
),
|
|
345
338
|
children: [
|
|
346
|
-
ChildIcon ? /* @__PURE__ */ jsx(ChildIcon, { className: "
|
|
339
|
+
ChildIcon ? /* @__PURE__ */ jsx(ChildIcon, { className: cn(iconClass, "shrink-0"), "aria-hidden": true }) : null,
|
|
347
340
|
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: child.label }),
|
|
348
341
|
/* @__PURE__ */ jsx(ItemBadge, { badge: child.badge, active: childActiveItem })
|
|
349
342
|
]
|
|
@@ -365,14 +358,14 @@ var SidebarNav = React.forwardRef(
|
|
|
365
358
|
"aria-label": rail ? item.label : void 0,
|
|
366
359
|
"aria-current": active ? "page" : void 0,
|
|
367
360
|
onClick: () => navigate(item.id),
|
|
368
|
-
className: cn(itemButtonClass(active), rail && "justify-center px-0"),
|
|
361
|
+
className: cn(itemButtonClass(active, compact), rail && "justify-center px-0"),
|
|
369
362
|
children: [
|
|
370
363
|
Icon ? /* @__PURE__ */ jsx(
|
|
371
364
|
Icon,
|
|
372
365
|
{
|
|
373
366
|
className: cn(
|
|
374
367
|
"shrink-0",
|
|
375
|
-
rail ? "size-5" :
|
|
368
|
+
rail ? "size-5" : iconClass,
|
|
376
369
|
active ? "text-[var(--as-primary)]" : "text-[var(--as-muted-fg)]"
|
|
377
370
|
),
|
|
378
371
|
"aria-hidden": true
|
|
@@ -390,6 +383,7 @@ var SidebarNav = React.forwardRef(
|
|
|
390
383
|
{
|
|
391
384
|
ref,
|
|
392
385
|
"data-as": "sidebar-nav",
|
|
386
|
+
"data-as-compact": compact ? "" : void 0,
|
|
393
387
|
"aria-label": navAria,
|
|
394
388
|
className: cn(
|
|
395
389
|
"relative flex h-full flex-col border-r border-[var(--as-border)] bg-[var(--as-surface)] text-[var(--as-fg)] transition-[width] duration-200",
|
|
@@ -414,8 +408,8 @@ var SidebarNav = React.forwardRef(
|
|
|
414
408
|
{
|
|
415
409
|
ref: listRef,
|
|
416
410
|
onKeyDown: handleListKeyDown,
|
|
417
|
-
className: cn("min-h-0 flex-1 overflow-y-auto
|
|
418
|
-
children: /* @__PURE__ */ jsx("ul", { className:
|
|
411
|
+
className: cn("min-h-0 flex-1 overflow-y-auto", regionClass, navClassName),
|
|
412
|
+
children: /* @__PURE__ */ jsx("ul", { className: listGapClass, children: items.map((item, index) => renderItem(item, index, items)) })
|
|
419
413
|
}
|
|
420
414
|
),
|
|
421
415
|
secondaryItems && secondaryItems.length > 0 ? /* @__PURE__ */ jsx(
|
|
@@ -423,11 +417,20 @@ var SidebarNav = React.forwardRef(
|
|
|
423
417
|
{
|
|
424
418
|
ref: secondaryRef,
|
|
425
419
|
onKeyDown: handleListKeyDown,
|
|
426
|
-
className: "shrink-0 border-t border-[var(--as-border)]
|
|
427
|
-
children: /* @__PURE__ */ jsx("ul", { className:
|
|
420
|
+
className: cn("shrink-0 border-t border-[var(--as-border)]", regionClass),
|
|
421
|
+
children: /* @__PURE__ */ jsx("ul", { className: listGapClass, children: secondaryItems.map((item, index) => renderItem(item, index, secondaryItems)) })
|
|
428
422
|
}
|
|
429
423
|
) : null,
|
|
430
|
-
footer ? /* @__PURE__ */ jsx(
|
|
424
|
+
footer ? /* @__PURE__ */ jsx(
|
|
425
|
+
"div",
|
|
426
|
+
{
|
|
427
|
+
className: cn(
|
|
428
|
+
"shrink-0 border-t border-[var(--as-border)]",
|
|
429
|
+
compact ? "px-2.5 py-2" : "p-3"
|
|
430
|
+
),
|
|
431
|
+
children: footer
|
|
432
|
+
}
|
|
433
|
+
) : null
|
|
431
434
|
]
|
|
432
435
|
}
|
|
433
436
|
);
|
|
@@ -435,5 +438,5 @@ var SidebarNav = React.forwardRef(
|
|
|
435
438
|
);
|
|
436
439
|
|
|
437
440
|
export { SidebarNav };
|
|
438
|
-
//# sourceMappingURL=chunk-
|
|
439
|
-
//# sourceMappingURL=chunk-
|
|
441
|
+
//# sourceMappingURL=chunk-SW3YNICQ.js.map
|
|
442
|
+
//# sourceMappingURL=chunk-SW3YNICQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/sidebar-nav/SidebarNav.tsx"],"names":["SidebarNav","sectionSeen"],"mappings":"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","file":"chunk-SW3YNICQ.js","sourcesContent":["import * as React from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\nimport {\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n type LucideIcon,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface NavChild {\n id: string\n label: string\n icon?: LucideIcon\n badge?: string | number\n /** Divider label rendered above this child (first occurrence only). */\n section?: string\n disabled?: boolean\n}\n\nexport interface NavItem {\n id: string\n label: string\n icon?: LucideIcon\n badge?: string | number\n /** One nesting level; deeper trees stay app-side. */\n children?: NavChild[]\n disabled?: boolean\n /** Divider label rendered above this item (first occurrence only) —\n * for flat sidebars with visual groups. Ignored in the collapsed rail. */\n section?: string\n}\n\nexport interface SidebarNavLabels {\n /** aria-label on the <nav> element. */\n navAria?: string\n /** Collapsed-rail toggle title when collapsed. */\n expand?: string\n /** Collapsed-rail toggle title when expanded. */\n collapse?: string\n /** aria-label for a collapsed group's flyout trigger. */\n openGroup?: string\n}\n\nexport interface SidebarNavProps {\n /** Pre-filtered by the app (roles, feature flags); order = render order. */\n items: NavItem[]\n /** Flat items pinned below the scroll area, above `footer` (the\n * Settings/About pattern). Same rendering, active state, rail behavior\n * and keyboard traversal order as `items`. */\n secondaryItems?: NavItem[]\n /** The app resolves route → id; matching logic stays app-side. */\n activeId?: string | null\n /** Fires for leaves only; group triggers toggle expansion instead. */\n onNavigate?: (id: string) => void\n /** Controlled icon rail. */\n collapsed?: boolean\n onCollapsedChange?: (collapsed: boolean) => void\n /** Renders the rail collapse/expand toggle handle (desktop only). */\n collapsible?: boolean\n /** Controlled group expansion; uncontrolled defaults to internal\n * state + auto-expand when activeId enters a group. */\n expandedIds?: string[]\n onExpandedIdsChange?: (ids: string[]) => void\n /** Slot above the list (brand, logo). */\n header?: React.ReactNode\n /** Slot below the list and pinned items (version, legal links). */\n footer?: React.ReactNode\n /** Denser layout for short viewports: tighter item padding, smaller\n * icons/typography, slimmer regions. Presentational only — the app\n * decides when (e.g. a `max-height` media query). Composes with\n * `collapsed`. */\n compact?: boolean\n labels?: SidebarNavLabels\n className?: string\n /** Targets the scrollable list region. */\n navClassName?: string\n}\n\nconst FLYOUT_DELAY_MS = 150\n\nconst itemButtonClass = (active: boolean, compact: boolean) =>\n cn(\n 'flex w-full cursor-pointer items-center rounded-[var(--as-radius)] text-left transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50',\n compact\n ? 'gap-2 px-2.5 py-1.5 text-xs'\n : 'gap-3 px-3 py-2.5 text-sm',\n active\n ? 'bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] font-bold text-[var(--as-primary)]'\n : 'font-medium text-[var(--as-fg)] hover:bg-[var(--as-muted)]',\n )\n\nconst flyoutContentClass =\n 'as-anim-pop z-[var(--as-z-popover)] min-w-44 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-1 text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none'\n\nfunction Badge({ value, active }: { value: string | number; active: boolean }) {\n return (\n <span\n className={cn(\n 'inline-flex min-w-5 shrink-0 items-center justify-center rounded-full px-1.5 py-0.5 text-[11px] font-bold leading-none',\n active\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'bg-[var(--as-muted)] text-[var(--as-muted-fg)]',\n )}\n >\n {value}\n </span>\n )\n}\n\nfunction ItemBadge({ badge, active }: { badge?: string | number; active: boolean }) {\n if (badge === undefined) return null\n return (\n <span className=\"ml-auto\">\n <Badge value={badge} active={active} />\n </span>\n )\n}\n\nexport const SidebarNav = React.forwardRef<HTMLElement, SidebarNavProps>(\n function SidebarNav(\n {\n items,\n secondaryItems,\n activeId,\n onNavigate,\n collapsed = false,\n onCollapsedChange,\n collapsible = false,\n expandedIds,\n onExpandedIdsChange,\n header,\n footer,\n compact = false,\n labels,\n className,\n navClassName,\n },\n ref,\n ) {\n const baseId = React.useId()\n const listRef = React.useRef<HTMLDivElement>(null)\n const secondaryRef = React.useRef<HTMLDivElement>(null)\n const flyoutTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const [openFlyout, setOpenFlyout] = React.useState<string | null>(null)\n const [internalExpanded, setInternalExpanded] = React.useState<string[]>([])\n\n const controlledExpanded =\n expandedIds !== undefined && onExpandedIdsChange !== undefined\n const expanded = controlledExpanded ? (expandedIds as string[]) : internalExpanded\n\n const setExpandedList = React.useCallback(\n (next: string[]) => {\n if (controlledExpanded) onExpandedIdsChange?.(next)\n else setInternalExpanded(next)\n },\n [controlledExpanded, onExpandedIdsChange],\n )\n\n const toggleGroup = React.useCallback(\n (id: string) => {\n setExpandedList(\n expanded.includes(id)\n ? expanded.filter((g) => g !== id)\n : [...expanded, id],\n )\n },\n [expanded, setExpandedList],\n )\n\n // Auto-expand the group containing the active item so the highlighted\n // entry is always visible (uncontrolled mode only — the app owns\n // expansion when controlled).\n React.useEffect(() => {\n if (controlledExpanded || activeId == null) return\n const owner =\n items.find((it) => it.children?.some((c) => c.id === activeId)) ??\n secondaryItems?.find((it) => it.children?.some((c) => c.id === activeId))\n if (owner && !expanded.includes(owner.id)) {\n setExpandedList([...expanded, owner.id])\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeId, items, secondaryItems, controlledExpanded])\n\n React.useEffect(() => {\n return () => {\n if (flyoutTimer.current) clearTimeout(flyoutTimer.current)\n }\n }, [])\n\n const flyoutEnter = (id: string) => {\n if (flyoutTimer.current) clearTimeout(flyoutTimer.current)\n flyoutTimer.current = setTimeout(() => setOpenFlyout(id), FLYOUT_DELAY_MS)\n }\n const flyoutLeave = () => {\n if (flyoutTimer.current) clearTimeout(flyoutTimer.current)\n flyoutTimer.current = setTimeout(() => setOpenFlyout(null), FLYOUT_DELAY_MS)\n }\n const flyoutEnterCancel = () => {\n if (flyoutTimer.current) clearTimeout(flyoutTimer.current)\n }\n\n const navigate = (id: string) => {\n setOpenFlyout(null)\n onNavigate?.(id)\n }\n\n // ---- keyboard navigation over the visible list ----\n const navRegions = () =>\n [listRef.current, secondaryRef.current].filter(\n (r): r is HTMLDivElement => r !== null,\n )\n\n const visibleItems = (): HTMLButtonElement[] => {\n return navRegions().flatMap((region) =>\n Array.from(\n region.querySelectorAll<HTMLButtonElement>('[data-as-nav-item]'),\n ).filter((el) => el.closest('[hidden]') === null),\n )\n }\n\n const focusSibling = (current: HTMLElement, offset: number) => {\n const all = visibleItems()\n const index = all.indexOf(current as HTMLButtonElement)\n if (index === -1) return\n const next = all[Math.min(Math.max(index + offset, 0), all.length - 1)]\n next?.focus()\n }\n\n const handleFlyoutArrowKeys = (e: React.KeyboardEvent) => {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return\n e.preventDefault()\n const buttons = Array.from(\n (e.currentTarget as HTMLElement).querySelectorAll<HTMLButtonElement>(\n 'button[data-as-flyout-item]:not([disabled])',\n ),\n )\n const index = buttons.indexOf(document.activeElement as HTMLButtonElement)\n const step = e.key === 'ArrowDown' ? 1 : buttons.length - 1\n buttons[(index + step) % buttons.length]?.focus()\n }\n\n const groupTriggerFor = (id: string) =>\n navRegions()\n .flatMap((r) =>\n Array.from(r.querySelectorAll<HTMLButtonElement>('[data-as-nav-group-id]')),\n )\n .find((b) => b.dataset.asNavGroupId === id)\n\n const firstChildFor = (id: string) =>\n navRegions()\n .flatMap((r) =>\n Array.from(r.querySelectorAll<HTMLButtonElement>('[data-as-nav-parent-id]')),\n )\n .find((b) => b.dataset.asNavParentId === id && !b.disabled)\n\n const handleListKeyDown = (e: React.KeyboardEvent) => {\n const button = (e.target as HTMLElement).closest<HTMLButtonElement>(\n '[data-as-nav-item]',\n )\n if (!button) return\n const groupId = button.dataset.asNavGroupId\n const parentId = button.dataset.asNavParentId\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n focusSibling(button, 1)\n break\n case 'ArrowUp':\n e.preventDefault()\n focusSibling(button, -1)\n break\n case 'Home': {\n e.preventDefault()\n visibleItems()[0]?.focus()\n break\n }\n case 'End': {\n e.preventDefault()\n const all = visibleItems()\n all[all.length - 1]?.focus()\n break\n }\n case 'ArrowRight':\n if (groupId) {\n e.preventDefault()\n if (!expanded.includes(groupId)) {\n setExpandedList([...expanded, groupId])\n } else {\n firstChildFor(groupId)?.focus()\n }\n }\n break\n case 'ArrowLeft':\n if (parentId) {\n e.preventDefault()\n groupTriggerFor(parentId)?.focus()\n } else if (groupId && expanded.includes(groupId)) {\n e.preventDefault()\n toggleGroup(groupId)\n }\n break\n }\n }\n\n const navAria = labels?.navAria ?? 'Main navigation'\n const rail = collapsed\n\n const flyoutHeader = (text: string) => (\n <div className=\"border-b border-[var(--as-border)] px-2 py-1.5 text-xs font-bold text-[var(--as-muted-fg)]\">\n {text}\n </div>\n )\n\n const sectionDividerClass = compact\n ? 'mt-1 border-t border-[var(--as-border)] px-3 pb-0.5 pt-2 text-[10px] font-bold uppercase tracking-wide text-[var(--as-muted-fg)]'\n : 'mt-2 border-t border-[var(--as-border)] px-3 pb-1 pt-3 text-[11px] font-bold uppercase tracking-wide text-[var(--as-muted-fg)]'\n const listGapClass = compact ? 'space-y-0.5' : 'space-y-1'\n const iconClass = compact ? 'size-3.5' : 'size-4'\n const regionClass = compact ? 'px-2.5 py-2' : 'px-3 py-3'\n\n const renderItem = (item: NavItem, index: number, list: NavItem[]) => {\n // Group whose children were all filtered out app-side renders\n // nothing (presentational).\n if (item.children !== undefined && item.children.length === 0) {\n return null\n }\n const sectionSeen =\n !rail &&\n item.section !== undefined &&\n list.findIndex((i) => i.section === item.section) === index\n const sectionDivider = sectionSeen ? (\n <div role=\"presentation\" className={sectionDividerClass}>\n {item.section}\n </div>\n ) : null\n const active = item.id === activeId\n const childActive = item.children?.some((c) => c.id === activeId) ?? false\n const isExpanded = expanded.includes(item.id)\n const Icon = item.icon\n const groupId = `${baseId}-group-${item.id}`\n\n if (item.children && item.children.length > 0 && rail) {\n return (\n <li key={item.id}>\n {sectionDivider}\n <PopoverPrimitive.Root\n open={openFlyout === item.id}\n onOpenChange={(open) => {\n if (!open) setOpenFlyout(null)\n }}\n >\n <PopoverPrimitive.Anchor asChild>\n <button\n type=\"button\"\n data-as-nav-item\n data-as-nav-group-id={item.id}\n disabled={item.disabled}\n aria-label={labels?.openGroup ?? `Open ${item.label} menu`}\n aria-haspopup=\"true\"\n aria-expanded={openFlyout === item.id}\n onClick={() => setOpenFlyout(item.id)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setOpenFlyout(item.id)\n }\n }}\n onMouseEnter={() => flyoutEnter(item.id)}\n onMouseLeave={flyoutLeave}\n className={cn(itemButtonClass(active || childActive, compact), 'justify-center px-0')}\n >\n {Icon ? (\n <Icon\n className={cn(\n 'size-5 shrink-0',\n active || childActive\n ? 'text-[var(--as-primary)]'\n : 'text-[var(--as-muted-fg)]',\n )}\n aria-hidden\n />\n ) : null}\n </button>\n </PopoverPrimitive.Anchor>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side=\"right\"\n sideOffset={8}\n aria-label={item.label}\n onCloseAutoFocus={(e) => {\n // Menu-standard: focus returns to the trigger.\n e.preventDefault()\n groupTriggerFor(item.id)?.focus()\n }}\n onMouseEnter={flyoutEnterCancel}\n onMouseLeave={flyoutLeave}\n onKeyDown={handleFlyoutArrowKeys}\n className={flyoutContentClass}\n >\n {flyoutHeader(item.label)}\n <ul className=\"mt-1 space-y-0.5\">\n {item.children.map((child) => (\n <li key={child.id}>\n <button\n type=\"button\"\n data-as-flyout-item\n disabled={child.disabled}\n onClick={() => navigate(child.id)}\n aria-current={child.id === activeId ? 'page' : undefined}\n className={cn(\n 'flex w-full cursor-pointer items-center gap-2 rounded-[calc(var(--as-radius-sm)-2px)] px-2 py-1.5 text-left text-sm outline-none transition-colors focus:bg-[var(--as-secondary)] disabled:pointer-events-none disabled:opacity-50',\n child.id === activeId && 'font-bold text-[var(--as-primary)]',\n )}\n >\n {child.icon ? <child.icon aria-hidden /> : null}\n <span className=\"min-w-0 flex-1 truncate\">{child.label}</span>\n <ItemBadge badge={child.badge} active={child.id === activeId} />\n </button>\n </li>\n ))}\n </ul>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </li>\n )\n }\n\n if (item.children && item.children.length > 0) {\n return (\n <li key={item.id}>\n {sectionDivider}\n <button\n type=\"button\"\n data-as-nav-item\n data-as-nav-group-id={item.id}\n disabled={item.disabled}\n aria-expanded={isExpanded}\n aria-controls={groupId}\n onClick={() => toggleGroup(item.id)}\n className={itemButtonClass(active || childActive, compact)}\n >\n {Icon ? (\n <Icon\n className={cn(\n iconClass,\n 'shrink-0',\n active || childActive\n ? 'text-[var(--as-primary)]'\n : 'text-[var(--as-muted-fg)]',\n )}\n aria-hidden\n />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate\">{item.label}</span>\n <ItemBadge badge={item.badge} active={active || childActive} />\n {isExpanded ? (\n <ChevronDown className={cn(iconClass, 'shrink-0 text-[var(--as-muted-fg)]')} aria-hidden />\n ) : (\n <ChevronRight className={cn(iconClass, 'shrink-0 text-[var(--as-muted-fg)]')} aria-hidden />\n )}\n </button>\n <ul id={groupId} hidden={!isExpanded} className={cn(\"mt-1 space-y-0.5\", compact ? \"pl-4\" : \"pl-6\")}>\n {item.children.map((child) => {\n const childActiveItem = child.id === activeId\n const ChildIcon = child.icon\n const sectionSeen =\n child.section !== undefined &&\n item.children!.findIndex(\n (c) => c.section === child.section,\n ) === item.children!.indexOf(child)\n return (\n <li key={child.id}>\n {sectionSeen ? (\n <div role=\"presentation\" className={sectionDividerClass}>\n {child.section}\n </div>\n ) : null}\n <button\n type=\"button\"\n data-as-nav-item\n data-as-nav-parent-id={item.id}\n disabled={child.disabled}\n aria-current={childActiveItem ? 'page' : undefined}\n onClick={() => navigate(child.id)}\n className={cn(\n itemButtonClass(childActiveItem, compact),\n compact ? 'py-1.5 pl-2.5 pr-1.5' : 'py-2 pl-3 pr-2',\n )}\n >\n {ChildIcon ? (\n <ChildIcon className={cn(iconClass, 'shrink-0')} aria-hidden />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate\">{child.label}</span>\n <ItemBadge badge={child.badge} active={childActiveItem} />\n </button>\n </li>\n )\n })}\n </ul>\n </li>\n )\n }\n\n return (\n <li key={item.id}>\n {sectionDivider}\n <button\n type=\"button\"\n data-as-nav-item\n disabled={item.disabled}\n title={rail ? item.label : undefined}\n aria-label={rail ? item.label : undefined}\n aria-current={active ? 'page' : undefined}\n onClick={() => navigate(item.id)}\n className={cn(itemButtonClass(active, compact), rail && 'justify-center px-0')}\n >\n {Icon ? (\n <Icon\n className={cn(\n 'shrink-0',\n rail ? 'size-5' : iconClass,\n active ? 'text-[var(--as-primary)]' : 'text-[var(--as-muted-fg)]',\n )}\n aria-hidden\n />\n ) : null}\n {!rail ? <span className=\"min-w-0 flex-1 truncate\">{item.label}</span> : null}\n {!rail ? <ItemBadge badge={item.badge} active={active} /> : null}\n </button>\n </li>\n )\n }\n\n return (\n <nav\n ref={ref}\n data-as=\"sidebar-nav\"\n data-as-compact={compact ? '' : undefined}\n aria-label={navAria}\n className={cn(\n 'relative flex h-full flex-col border-r border-[var(--as-border)] bg-[var(--as-surface)] text-[var(--as-fg)] transition-[width] duration-200',\n rail ? 'w-20' : 'w-64',\n className,\n )}\n >\n {collapsible ? (\n <div className=\"pointer-events-none absolute inset-y-0 -right-3 z-10 hidden flex-col justify-center lg:flex\">\n <button\n type=\"button\"\n onClick={() => onCollapsedChange?.(!collapsed)}\n title={\n collapsed\n ? (labels?.expand ?? 'Expand sidebar')\n : (labels?.collapse ?? 'Collapse sidebar')\n }\n aria-label={\n collapsed\n ? (labels?.expand ?? 'Expand sidebar')\n : (labels?.collapse ?? 'Collapse sidebar')\n }\n className=\"pointer-events-auto flex size-6 items-center justify-center rounded-lg border border-[var(--as-border)] bg-[var(--as-surface-raised)] text-[var(--as-muted-fg)] shadow-[var(--as-shadow-2)] transition-colors hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n {collapsed ? (\n <ChevronRight className=\"size-3.5\" aria-hidden />\n ) : (\n <ChevronLeft className=\"size-3.5\" aria-hidden />\n )}\n </button>\n </div>\n ) : null}\n\n {header ? <div className=\"shrink-0\">{header}</div> : null}\n\n <div\n ref={listRef}\n onKeyDown={handleListKeyDown}\n className={cn('min-h-0 flex-1 overflow-y-auto', regionClass, navClassName)}\n >\n <ul className={listGapClass}>\n {items.map((item, index) => renderItem(item, index, items))}\n </ul>\n </div>\n\n {secondaryItems && secondaryItems.length > 0 ? (\n <div\n ref={secondaryRef}\n onKeyDown={handleListKeyDown}\n className={cn('shrink-0 border-t border-[var(--as-border)]', regionClass)}\n >\n <ul className={listGapClass}>\n {secondaryItems.map((item, index) => renderItem(item, index, secondaryItems))}\n </ul>\n </div>\n ) : null}\n\n {footer ? (\n <div\n className={cn(\n 'shrink-0 border-t border-[var(--as-border)]',\n compact ? 'px-2.5 py-2' : 'p-3',\n )}\n >\n {footer}\n </div>\n ) : null}\n </nav>\n )\n },\n)\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
type FlowStepStatus = 'pending' | 'running' | 'done' | 'failed' | 'interrupted';
|
|
4
|
+
interface FlowStep {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
status: FlowStepStatus;
|
|
8
|
+
}
|
|
9
|
+
interface FlowError {
|
|
10
|
+
code: string;
|
|
11
|
+
message: string;
|
|
12
|
+
retryable: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface FlowStatusCardProps {
|
|
15
|
+
/** Flow name, e.g. "Analyzing document". */
|
|
16
|
+
title: string;
|
|
17
|
+
/** Ordered steps, one per graph node. */
|
|
18
|
+
steps: FlowStep[];
|
|
19
|
+
/** Overall run status. */
|
|
20
|
+
status: FlowStepStatus;
|
|
21
|
+
/** Set when `status === 'failed'`. */
|
|
22
|
+
error?: FlowError;
|
|
23
|
+
/** Rendered only when `error?.retryable`. */
|
|
24
|
+
onRetry?: () => void;
|
|
25
|
+
/** Rendered while `status === 'running'`. */
|
|
26
|
+
onCancel?: () => void;
|
|
27
|
+
/** Rendered when `status === 'interrupted'`. */
|
|
28
|
+
onResume?: () => void;
|
|
29
|
+
/** Payload slot: HITL card, references, extra info. */
|
|
30
|
+
detail?: React.ReactNode;
|
|
31
|
+
/** Plain strings, i18n at call sites. */
|
|
32
|
+
labels?: Partial<Record<'retry' | 'cancel' | 'resume', string>>;
|
|
33
|
+
className?: string;
|
|
34
|
+
}
|
|
35
|
+
declare const FlowStatusCard: React.ForwardRefExoticComponent<FlowStatusCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
36
|
+
|
|
37
|
+
export { type FlowError, FlowStatusCard, type FlowStatusCardProps, type FlowStep, type FlowStepStatus };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"flow-status.js"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export { AboutCard, AboutCardProps, AboutCreator, AboutFooterLine, AboutFooterLi
|
|
|
12
12
|
export { AiAction, AiActionsDropdown, AiActionsDropdownProps } from './ai-actions-dropdown.js';
|
|
13
13
|
export { AiButton, AiButtonProps } from './ai-button.js';
|
|
14
14
|
export { AiMagicFill, AiMagicFillProps } from './ai-magic-fill.js';
|
|
15
|
+
export { FlowError, FlowStatusCard, FlowStatusCardProps, FlowStep, FlowStepStatus } from './flow-status.js';
|
|
15
16
|
export { Badge, BadgeProps, badgeVariants } from './badge.js';
|
|
16
17
|
export { BreadcrumbItem, BreadcrumbLinkProps, Breadcrumbs, BreadcrumbsProps } from './breadcrumbs.js';
|
|
17
18
|
export { Button, ButtonProps, buttonVariants } from './button.js';
|
package/dist/index.js
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
|
+
export { UndoNotice } from './chunk-OUHUVACM.js';
|
|
1
2
|
export { ViewToggle } from './chunk-MXOBOS4Y.js';
|
|
2
3
|
export { Stepper, Wizard } from './chunk-YMCMUAIF.js';
|
|
4
|
+
export { TaskAssignmentPicker } from './chunk-VULOVVKF.js';
|
|
3
5
|
export { SettingsShell } from './chunk-AHLNXCP2.js';
|
|
4
|
-
export { SidebarNav } from './chunk-
|
|
6
|
+
export { SidebarNav } from './chunk-SW3YNICQ.js';
|
|
5
7
|
export { UserMenu } from './chunk-535TM7SK.js';
|
|
6
8
|
export { ThemeScope } from './chunk-TGU3PKNM.js';
|
|
7
9
|
export { TimeList } from './chunk-GVOC3ARM.js';
|
|
8
10
|
export { TimePicker, TimePickerContent } from './chunk-CR42EAF4.js';
|
|
9
11
|
export { InfoTooltip, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './chunk-34NO2UOB.js';
|
|
10
|
-
export {
|
|
12
|
+
export { ScaleSlider, scaleColorForValue } from './chunk-PSFJN7WH.js';
|
|
11
13
|
export { SearchInput } from './chunk-H5U4KNXF.js';
|
|
12
14
|
export { ModelRegistry } from './chunk-RBEPQY2A.js';
|
|
13
15
|
export { CapabilityChips } from './chunk-G3DWN2DJ.js';
|
|
14
16
|
export { SelectionBar } from './chunk-HSUCCANX.js';
|
|
15
17
|
export { Table } from './chunk-5LRRVD27.js';
|
|
16
|
-
export { TaskAssignmentPicker } from './chunk-VULOVVKF.js';
|
|
17
18
|
export { ModelPicker } from './chunk-SVQK7TXU.js';
|
|
18
19
|
export { PanelModal } from './chunk-G6557MEN.js';
|
|
19
20
|
export { Portal } from './chunk-7YLR4AGA.js';
|
|
20
21
|
export { ProviderForm } from './chunk-4WDXLXHL.js';
|
|
21
22
|
export { RangeBar } from './chunk-PFAH25VU.js';
|
|
22
|
-
export {
|
|
23
|
+
export { FlowStatusCard } from './chunk-PRHTQBCP.js';
|
|
23
24
|
export { FieldLabel } from './chunk-I5J6SDLK.js';
|
|
24
25
|
export { InfoButton } from './chunk-OT6EQFMP.js';
|
|
25
26
|
export { PopoverButton } from './chunk-BE3XFZWU.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/upload-dropzone/UploadDropzone.tsx"],"names":["UploadDropzone"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/components/upload-dropzone/UploadDropzone.tsx"],"names":["UploadDropzone"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from 'react'\nimport { FolderUp, Loader2, Upload } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface UploadDropzoneProps {\n onFiles: (files: File[]) => void\n uploading?: boolean\n variant?: 'block' | 'row'\n label?: string\n hint?: string\n browseLabel?: string\n folderLabel?: string\n accept?: string\n multiple?: boolean\n allowFolders?: boolean\n disabled?: boolean\n className?: string\n}\n\n/**\n * Presentational dropzone: drag events and file-picker results go out via\n * `onFiles` — uploading, storage and progress stay app-side. Pass\n * `uploading` to render a busy state and suppress input.\n */\nexport const UploadDropzone = React.forwardRef<HTMLDivElement, UploadDropzoneProps>(\n function UploadDropzone(\n {\n onFiles,\n uploading = false,\n variant = 'block',\n label = 'Drop files here or click to browse',\n hint,\n browseLabel = 'Choose files',\n folderLabel = 'Choose folder',\n accept,\n multiple = true,\n allowFolders = false,\n disabled = false,\n className,\n },\n ref,\n ) {\n const [dragging, setDragging] = React.useState(false)\n const fileInput = React.useRef<HTMLInputElement>(null)\n const folderInput = React.useRef<HTMLInputElement>(null)\n\n const active = !disabled && !uploading\n\n const emit = (list: FileList | null) => {\n if (!active || !list || list.length === 0) return\n onFiles(Array.from(list))\n }\n\n const input = allowFolders ? (\n <>\n <input\n ref={fileInput}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n aria-hidden\n tabIndex={-1}\n onChange={(event) => {\n emit(event.target.files)\n event.target.value = ''\n }}\n />\n <input\n ref={folderInput}\n type=\"file\"\n multiple\n className=\"hidden\"\n // @ts-expect-error non-standard but universally supported directory picker\n webkitdirectory=\"\"\n aria-hidden\n tabIndex={-1}\n onChange={(event) => {\n emit(event.target.files)\n event.target.value = ''\n }}\n />\n </>\n ) : (\n <input\n ref={fileInput}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n aria-hidden\n tabIndex={-1}\n onChange={(event) => {\n emit(event.target.files)\n event.target.value = ''\n }}\n />\n )\n\n return (\n <>\n {input}\n <div\n ref={ref}\n data-as=\"upload-dropzone\"\n data-variant={variant}\n data-dragging={dragging || undefined}\n role=\"button\"\n tabIndex={active ? 0 : -1}\n aria-label={label}\n aria-disabled={disabled || uploading || undefined}\n onClick={() => active && fileInput.current?.click()}\n onKeyDown={(event) => {\n if (active && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault()\n fileInput.current?.click()\n }\n }}\n onDragOver={(event) => {\n event.preventDefault()\n if (active) setDragging(true)\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={(event) => {\n event.preventDefault()\n setDragging(false)\n emit(event.dataTransfer.files)\n }}\n className={cn(\n 'flex cursor-pointer items-center justify-center gap-3 border border-dashed border-[var(--as-border)] bg-[var(--as-surface)] text-[var(--as-muted-fg)] transition-colors',\n 'hover:border-[var(--as-primary)] hover:text-[var(--as-fg)]',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]',\n variant === 'block' ? 'rounded-[var(--as-radius-lg)] p-8' : 'rounded-[var(--as-radius)] px-4 py-3',\n dragging && 'border-[var(--as-primary)] bg-[color-mix(in_srgb,var(--as-primary)_8%,transparent)] text-[var(--as-fg)]',\n uploading && 'cursor-progress opacity-70',\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n >\n {uploading ? (\n <Loader2 className=\"size-5 shrink-0 animate-spin\" aria-hidden />\n ) : allowFolders ? (\n <FolderUp className=\"size-5 shrink-0\" aria-hidden />\n ) : (\n <Upload className=\"size-5 shrink-0\" aria-hidden />\n )}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-sm font-medium\" role={uploading ? 'status' : undefined}>\n {uploading ? `${browseLabel}…` : dragging ? folderLabel : label}\n </span>\n {hint ? <span className=\"truncate text-xs\">{hint}</span> : null}\n </span>\n </div>\n </>\n )\n },\n)\n"]}
|
package/dist/sidebar-nav.d.ts
CHANGED
|
@@ -56,6 +56,11 @@ interface SidebarNavProps {
|
|
|
56
56
|
header?: React.ReactNode;
|
|
57
57
|
/** Slot below the list and pinned items (version, legal links). */
|
|
58
58
|
footer?: React.ReactNode;
|
|
59
|
+
/** Denser layout for short viewports: tighter item padding, smaller
|
|
60
|
+
* icons/typography, slimmer regions. Presentational only — the app
|
|
61
|
+
* decides when (e.g. a `max-height` media query). Composes with
|
|
62
|
+
* `collapsed`. */
|
|
63
|
+
compact?: boolean;
|
|
59
64
|
labels?: SidebarNavLabels;
|
|
60
65
|
className?: string;
|
|
61
66
|
/** Targets the scrollable list region. */
|
package/dist/sidebar-nav.js
CHANGED
package/dist/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-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-outline-style:solid;--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-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-500:oklch(63.7% .237 25.331);--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-4xl:56rem;--container-6xl:72rem;--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);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-lg:.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}:root{--as-tone-0:oklch(100% 0 0);--as-tone-50:oklch(98.5% .003 90);--as-tone-100:oklch(94.8% .005 90);--as-tone-200:oklch(90.2% .005 90);--as-tone-300:oklch(83% .008 90);--as-tone-500:oklch(50% .012 90);--as-tone-700:oklch(37% .014 90);--as-tone-900:oklch(23.5% .012 90);--as-accent:oklch(55% .16 258);--as-accent-strong:oklch(48% .18 258);--as-success:oklch(62% .15 152);--as-warning:oklch(72% .15 78);--as-danger:oklch(58% .19 27);--as-ai:oklch(54.1% .247 293.009);--as-primary:var(--as-accent);--as-primary-fg:var(--as-tone-50);--as-secondary:var(--as-tone-100);--as-secondary-fg:var(--as-tone-900);--as-surface:var(--as-tone-50);--as-surface-raised:var(--as-tone-0);--as-border:var(--as-tone-200);--as-fg:var(--as-tone-900);--as-muted:var(--as-tone-100);--as-muted-fg:var(--as-tone-500);--as-success-fg:var(--as-tone-0);--as-warning-fg:var(--as-tone-900);--as-danger-fg:var(--as-tone-0);--as-ai-fg:var(--as-tone-0);--as-focus-ring:var(--as-accent);--as-overlay:oklch(0% 0 0/.6);--as-z-modal:50;--as-z-popover:50;--as-radius-sm:calc(var(--as-radius) - .25rem);--as-radius:.625rem;--as-radius-lg:calc(var(--as-radius) + .25rem);--as-font-sans:"Inter Variable", ui-sans-serif, system-ui, sans-serif;--as-font-mono:"JetBrains Mono", ui-monospace, "Cascadia Mono", monospace;--as-shadow-1:0 1px 2px 0 oklch(0% 0 0/.05);--as-shadow-2:0 4px 6px -1px oklch(0% 0 0/.07), 0 2px 4px -2px oklch(0% 0 0/.05);--as-shadow-3:0 10px 15px -3px oklch(0% 0 0/.08), 0 4px 6px -4px oklch(0% 0 0/.05)}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.-right-3{right:calc(var(--spacing) * -3)}.right-0{right:0}.right-1{right:var(--spacing)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-7{right:calc(var(--spacing) * 7)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-1{left:var(--spacing)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[var\(--as-z-modal\)\]{z-index:var(--as-z-modal)}.z-\[var\(--as-z-popover\)\]{z-index:var(--as-z-popover)}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-auto{margin-block:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-1{margin-left:var(--spacing)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-\[18px\]{width:18px;height:18px}.size-full{width:100%;height:100%}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[92vh\]{max-height:92vh}.min-h-0{min-height:0}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-16{min-height:calc(var(--spacing) * 16)}.w-4\/5{width:80%}.w-9{width:calc(var(--spacing) * 9)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[280px\]{width:280px}.w-\[300px\]{width:300px}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-\[var\(--radix-popover-trigger-width\)\]{width:var(--radix-popover-trigger-width)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-full{min-width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.\[translate\:-50\%_-50\%\]{translate:-50% -50%}.\[translate\:0_-50\%\]{translate:0 -50%}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-text{cursor:text}.resize-none{resize:none}.list-none{list-style-type:none}.\[appearance\:textfield\]{appearance:textfield}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-0\.5>:not(:last-child)){--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(.space-y-1>:not(:last-child)){--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(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-1\.5{column-gap:calc(var(--spacing) * 1.5)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}:where(.divide-y>:not(:last-child)){--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(.divide-\[color-mix\(in_srgb\,var\(--as-border\)_55\%\,transparent\)\]>:not(:last-child)){border-color:var(--as-border)}@supports (color:color-mix(in lab, red, red)){:where(.divide-\[color-mix\(in_srgb\,var\(--as-border\)_55\%\,transparent\)\]>:not(:last-child)){border-color:color-mix(in srgb,var(--as-border) 55%,transparent)}}:where(.divide-\[var\(--as-border\)\]>:not(:last-child)){border-color:var(--as-border)}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[calc\(var\(--as-radius\)-2px\)\]{border-radius:calc(var(--as-radius) - 2px)}.rounded-\[calc\(var\(--as-radius-sm\)-2px\)\]{border-radius:calc(var(--as-radius-sm) - 2px)}.rounded-\[var\(--as-radius\)\]{border-radius:var(--as-radius)}.rounded-\[var\(--as-radius-lg\)\]{border-radius:var(--as-radius-lg)}.rounded-\[var\(--as-radius-sm\)\]{border-radius:var(--as-radius-sm)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[color-mix\(in_srgb\,var\(--as-ai\)_25\%\,transparent\)\]{border-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-ai\)_25\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-ai) 25%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-primary\)_25\%\,transparent\)\]{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-primary\)_25\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-primary) 25%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-primary\)_40\%\,transparent\)\]{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-primary\)_40\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-primary) 40%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-warning\)_35\%\,transparent\)\]{border-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-warning\)_35\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-warning) 35%,transparent)}}.border-\[var\(--as-border\)\]{border-color:var(--as-border)}.border-\[var\(--as-danger\)\],.border-\[var\(--as-danger\)\]\/40{border-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--as-danger\)\]\/40{border-color:color-mix(in oklab, var(--as-danger) 40%, transparent)}}.border-\[var\(--as-primary\)\],.border-\[var\(--as-primary\)\]\/30{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--as-primary\)\]\/30{border-color:color-mix(in oklab, var(--as-primary) 30%, transparent)}}.border-\[var\(--as-surface-raised\)\]{border-color:var(--as-surface-raised)}.border-transparent{border-color:#0000}.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_8\%\,transparent\)\]{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-ai) 8%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_12\%\,transparent\)\]{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-ai) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-danger\)_12\%\,transparent\)\]{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-danger\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-danger) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_7\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_7\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 7%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_8\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 8%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_12\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_30\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_30\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 30%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_20\%\,transparent\)\]{background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_20\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary-fg) 20%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-success\)_14\%\,transparent\)\]{background-color:var(--as-success)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-success\)_14\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-success) 14%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_12\%\,transparent\)\]{background-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-warning) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_18\%\,transparent\)\]{background-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_18\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-warning) 18%,transparent)}}.bg-\[var\(--as-ai\)\]{background-color:var(--as-ai)}.bg-\[var\(--as-border\)\]{background-color:var(--as-border)}.bg-\[var\(--as-danger\)\],.bg-\[var\(--as-danger\)\]\/10{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-danger\)\]\/10{background-color:color-mix(in oklab, var(--as-danger) 10%, transparent)}}.bg-\[var\(--as-fg\)\]{background-color:var(--as-fg)}.bg-\[var\(--as-muted\)\]{background-color:var(--as-muted)}.bg-\[var\(--as-overlay\)\]{background-color:var(--as-overlay)}.bg-\[var\(--as-primary\)\],.bg-\[var\(--as-primary\)\]\/10{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-primary\)\]\/10{background-color:color-mix(in oklab, var(--as-primary) 10%, transparent)}}.bg-\[var\(--as-primary\)\]\/50{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-primary\)\]\/50{background-color:color-mix(in oklab, var(--as-primary) 50%, transparent)}}.bg-\[var\(--as-secondary\)\]{background-color:var(--as-secondary)}.bg-\[var\(--as-success\)\]{background-color:var(--as-success)}.bg-\[var\(--as-surface\)\]{background-color:var(--as-surface)}.bg-\[var\(--as-surface-raised\)\]{background-color:var(--as-surface-raised)}.bg-\[var\(--as-warning\)\]{background-color:var(--as-warning)}.bg-red-500{background-color:var(--color-red-500)}.bg-transparent{background-color:#0000}.fill-\[var\(--as-danger\)\]{fill:var(--as-danger)}.fill-\[var\(--as-fg\)\]{fill:var(--as-fg)}.fill-\[var\(--as-muted\)\]{fill:var(--as-muted)}.fill-\[var\(--as-primary\)\]{fill:var(--as-primary)}.fill-\[var\(--as-primary-fg\)\]{fill:var(--as-primary-fg)}.fill-\[var\(--as-surface-raised\)\]{fill:var(--as-surface-raised)}.stroke-\[var\(--as-border\)\]{stroke:var(--as-border)}.stroke-\[var\(--as-primary\)\]{stroke:var(--as-primary)}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:0}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-0{padding-top:0}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-7{padding-right:calc(var(--spacing) * 7)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pr-16{padding-right:calc(var(--spacing) * 16)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[color-mix\(in_srgb\,var\(--as-warning\)_72\%\,var\(--as-fg\)\)\]{color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.text-\[color-mix\(in_srgb\,var\(--as-warning\)_72\%\,var\(--as-fg\)\)\]{color:color-mix(in srgb,var(--as-warning) 72%,var(--as-fg))}}.text-\[var\(--as-ai\)\]{color:var(--as-ai)}.text-\[var\(--as-ai-fg\)\]{color:var(--as-ai-fg)}.text-\[var\(--as-danger\)\]{color:var(--as-danger)}.text-\[var\(--as-danger-fg\)\]{color:var(--as-danger-fg)}.text-\[var\(--as-fg\)\]{color:var(--as-fg)}.text-\[var\(--as-muted-fg\)\]{color:var(--as-muted-fg)}.text-\[var\(--as-primary\)\]{color:var(--as-primary)}.text-\[var\(--as-primary-fg\)\]{color:var(--as-primary-fg)}.text-\[var\(--as-secondary-fg\)\]{color:var(--as-secondary-fg)}.text-\[var\(--as-success\)\]{color:var(--as-success)}.text-\[var\(--as-success-fg\)\]{color:var(--as-success-fg)}.text-\[var\(--as-surface\)\]{color:var(--as-surface)}.text-\[var\(--as-warning\)\]{color:var(--as-warning)}.text-\[var\(--as-warning-fg\)\]{color:var(--as-warning-fg)}.text-inherit{color:inherit}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--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,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-transparent{text-decoration-color:#0000}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-\[var\(--as-primary\)\]{accent-color:var(--as-primary)}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--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)}.shadow-\[var\(--as-shadow-1\)\]{--tw-shadow:var(--as-shadow-1);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-2\)\]{--tw-shadow:var(--as-shadow-2);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-3\)\]{--tw-shadow:var(--as-shadow-3);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--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)}.ring-2{--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)}.ring-\[var\(--as-focus-ring\)\]{--tw-ring-color:var(--as-focus-ring)}.ring-\[var\(--as-primary\)\]{--tw-ring-color:var(--as-primary)}.ring-offset-2{--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)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);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,)}.filter{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,)}.transition-\[border-color\,box-shadow\,translate\]{transition-property:border-color,box-shadow,translate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[filter\]{transition-property:filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{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))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_32\%\,transparent\)\]:is(:where(.group):hover *){background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_32\%\,transparent\)\]:is(:where(.group):hover *){background-color:color-mix(in srgb,var(--as-primary-fg) 32%,transparent)}}.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-secondary-fg\)_14\%\,transparent\)\]:is(:where(.group):hover *){background-color:var(--as-secondary-fg)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-secondary-fg\)_14\%\,transparent\)\]:is(:where(.group):hover *){background-color:color-mix(in srgb,var(--as-secondary-fg) 14%,transparent)}}.group-hover\:bg-\[var\(--as-primary\)\]\/10:is(:where(.group):hover *){background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[var\(--as-primary\)\]\/10:is(:where(.group):hover *){background-color:color-mix(in oklab, var(--as-primary) 10%, transparent)}}.group-hover\:text-\[var\(--as-primary\)\]:is(:where(.group):hover *){color:var(--as-primary)}.group-hover\:decoration-current:is(:where(.group):hover *){text-decoration-color:currentColor}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-\[var\(--as-muted-fg\)\]::placeholder{color:var(--as-muted-fg)}.focus-within\:border-\[var\(--as-focus-ring\)\]:focus-within{border-color:var(--as-focus-ring)}.focus-within\:opacity-100:focus-within{opacity:1}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-within\:ring-\[var\(--as-focus-ring\)\]:focus-within{--tw-ring-color:var(--as-focus-ring)}@media (hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[var\(--as-fg\)\]\/30:hover{border-color:var(--as-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-fg\)\]\/30:hover{border-color:color-mix(in oklab, var(--as-fg) 30%, transparent)}}.hover\:border-\[var\(--as-fg\)\]\/40:hover{border-color:var(--as-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-fg\)\]\/40:hover{border-color:color-mix(in oklab, var(--as-fg) 40%, transparent)}}.hover\:border-\[var\(--as-muted-fg\)\]\/40:hover{border-color:var(--as-muted-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-muted-fg\)\]\/40:hover{border-color:color-mix(in oklab, var(--as-muted-fg) 40%, transparent)}}.hover\:border-\[var\(--as-primary\)\]:hover{border-color:var(--as-primary)}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-ai\)_14\%\,var\(--as-secondary\)\)\]:hover{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-ai\)_14\%\,var\(--as-secondary\)\)\]:hover{background-color:color-mix(in srgb,var(--as-ai) 14%,var(--as-secondary))}}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-muted\)_60\%\,transparent\)\]:hover{background-color:var(--as-muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-muted\)_60\%\,transparent\)\]:hover{background-color:color-mix(in srgb,var(--as-muted) 60%,transparent)}}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary\)_6\%\,transparent\)\]:hover{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary\)_6\%\,transparent\)\]:hover{background-color:color-mix(in srgb,var(--as-primary) 6%,transparent)}}.hover\:bg-\[var\(--as-danger\)\]:hover{background-color:var(--as-danger)}.hover\:bg-\[var\(--as-muted\)\]:hover{background-color:var(--as-muted)}.hover\:bg-\[var\(--as-secondary\)\]:hover{background-color:var(--as-secondary)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-\[var\(--as-danger\)\]:hover{color:var(--as-danger)}.hover\:text-\[var\(--as-danger-fg\)\]:hover{color:var(--as-danger-fg)}.hover\:text-\[var\(--as-fg\)\]:hover{color:var(--as-fg)}.hover\:text-\[var\(--as-primary\)\]:hover{color:var(--as-primary)}.hover\:text-\[var\(--as-success\)\]:hover{color:var(--as-success)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-85:hover{opacity:.85}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[var\(--as-shadow-2\)\]:hover{--tw-shadow:var(--as-shadow-2);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-\[var\(--as-shadow-3\)\]:hover{--tw-shadow:var(--as-shadow-3);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:brightness-95:hover{--tw-brightness:brightness(95%);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,)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);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,)}}.focus\:bg-\[var\(--as-danger\)\]\/10:focus{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.focus\:bg-\[var\(--as-danger\)\]\/10:focus{background-color:color-mix(in oklab, var(--as-danger) 10%, transparent)}}.focus\:bg-\[var\(--as-secondary\)\]:focus{background-color:var(--as-secondary)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-\[var\(--as-danger\)\]:focus-visible{border-color:var(--as-danger)}.focus-visible\:border-\[var\(--as-focus-ring\)\]:focus-visible{border-color:var(--as-focus-ring)}.focus-visible\:border-\[var\(--as-primary\)\]:focus-visible{border-color:var(--as-primary)}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-\[var\(--as-danger\)\]:focus-visible{--tw-ring-color:var(--as-danger)}.focus-visible\:ring-\[var\(--as-focus-ring\)\]:focus-visible{--tw-ring-color:var(--as-focus-ring)}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-1:focus-visible{outline-offset:1px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-offset-\[-2px\]:focus-visible{outline-offset:-2px}.focus-visible\:outline-\[var\(--as-focus-ring\)\]:focus-visible{outline-color:var(--as-focus-ring)}.focus-visible\:outline-\[var\(--as-primary\)\]:focus-visible{outline-color:var(--as-primary)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:40rem){.sm\:inset-0{inset:0}.sm\:mx-auto{margin-inline:auto}.sm\:my-auto{margin-block:auto}.sm\:mr-auto{margin-right:auto}.sm\:h-fit{height:fit-content}.sm\:max-h-\[90vh\]{max-height:90vh}.sm\:w-40{width:calc(var(--spacing) * 40)}.sm\:w-fit{width:fit-content}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-4xl{max-width:var(--container-4xl)}.sm\:max-w-6xl{max-width:var(--container-6xl)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:rounded-\[var\(--as-radius-lg\)\]{border-radius:var(--as-radius-lg)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}.sm\:border-\[var\(--as-border\)\]{border-color:var(--as-border)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:relative{position:relative}.lg\:sticky{position:sticky}.lg\:top-24{top:calc(var(--spacing) * 24)}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:flex{display:flex}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:size-5 svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button{appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{appearance:none}@keyframes as-fade-in{0%{opacity:0}to{opacity:1}}@keyframes as-zoom-in{0%{opacity:0;scale:.97}to{opacity:1;scale:1}}@keyframes as-pop-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes as-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}.as-anim-fade{animation:.15s ease-out as-fade-in}.as-anim-modal{animation:.15s ease-out as-zoom-in}.as-anim-pop{animation:.12s ease-out as-pop-in}.as-anim-drawer{animation:.2s ease-out as-drawer-in}[data-as=scale-slider] input[type=range]{appearance:none;background:0 0;height:1.125rem}[data-as=scale-slider] input[type=range]::-webkit-slider-runnable-track{background:linear-gradient(to right, var(--as-slider-color,var(--as-primary)) var(--as-slider-progress,0%), var(--as-muted) var(--as-slider-progress,0%));border-radius:999px;height:.375rem}[data-as=scale-slider] input[type=range]::-webkit-slider-thumb{appearance:none;border:3px solid var(--as-slider-color,var(--as-primary));background:var(--as-surface-raised);width:1.125rem;height:1.125rem;box-shadow:var(--as-shadow-2);border-radius:999px;margin-top:-.375rem}[data-as=scale-slider] input[type=range]::-moz-range-track{background:var(--as-muted);border-radius:999px;height:.375rem}[data-as=scale-slider] input[type=range]::-moz-range-progress{background:var(--as-slider-color,var(--as-primary));border-radius:999px;height:.375rem}[data-as=scale-slider] input[type=range]::-moz-range-thumb{border:3px solid var(--as-slider-color,var(--as-primary));background:var(--as-surface-raised);width:1.125rem;height:1.125rem;box-shadow:var(--as-shadow-2);border-radius:999px}[data-as=scale-slider] input[type=range]:focus-visible{outline:2px solid var(--as-focus-ring);outline-offset:2px}[data-as=scale-slider] input[type=range]:disabled{opacity:.5;cursor:not-allowed}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-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:"<percentage>";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:"<percentage>";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:"<length>";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-outline-style{syntax:"*";inherits:false;initial-value:solid}@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:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@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}@keyframes spin{to{transform:rotate(360deg)}}
|
|
2
|
+
@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-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-outline-style:solid;--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-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-500:oklch(63.7% .237 25.331);--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-4xl:56rem;--container-6xl:72rem;--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);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-lg:.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}:root{--as-tone-0:oklch(100% 0 0);--as-tone-50:oklch(98.5% .003 90);--as-tone-100:oklch(94.8% .005 90);--as-tone-200:oklch(90.2% .005 90);--as-tone-300:oklch(83% .008 90);--as-tone-500:oklch(50% .012 90);--as-tone-700:oklch(37% .014 90);--as-tone-900:oklch(23.5% .012 90);--as-accent:oklch(55% .16 258);--as-accent-strong:oklch(48% .18 258);--as-success:oklch(62% .15 152);--as-warning:oklch(72% .15 78);--as-danger:oklch(58% .19 27);--as-ai:oklch(54.1% .247 293.009);--as-primary:var(--as-accent);--as-primary-fg:var(--as-tone-50);--as-secondary:var(--as-tone-100);--as-secondary-fg:var(--as-tone-900);--as-surface:var(--as-tone-50);--as-surface-raised:var(--as-tone-0);--as-border:var(--as-tone-200);--as-fg:var(--as-tone-900);--as-muted:var(--as-tone-100);--as-muted-fg:var(--as-tone-500);--as-success-fg:var(--as-tone-0);--as-warning-fg:var(--as-tone-900);--as-danger-fg:var(--as-tone-0);--as-ai-fg:var(--as-tone-0);--as-focus-ring:var(--as-accent);--as-overlay:oklch(0% 0 0/.6);--as-z-modal:50;--as-z-popover:50;--as-radius-sm:calc(var(--as-radius) - .25rem);--as-radius:.625rem;--as-radius-lg:calc(var(--as-radius) + .25rem);--as-font-sans:"Inter Variable", ui-sans-serif, system-ui, sans-serif;--as-font-mono:"JetBrains Mono", ui-monospace, "Cascadia Mono", monospace;--as-shadow-1:0 1px 2px 0 oklch(0% 0 0/.05);--as-shadow-2:0 4px 6px -1px oklch(0% 0 0/.07), 0 2px 4px -2px oklch(0% 0 0/.05);--as-shadow-3:0 10px 15px -3px oklch(0% 0 0/.08), 0 4px 6px -4px oklch(0% 0 0/.05)}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.-right-3{right:calc(var(--spacing) * -3)}.right-0{right:0}.right-1{right:var(--spacing)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-7{right:calc(var(--spacing) * 7)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-1{left:var(--spacing)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[var\(--as-z-modal\)\]{z-index:var(--as-z-modal)}.z-\[var\(--as-z-popover\)\]{z-index:var(--as-z-popover)}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-auto{margin-block:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-1{margin-left:var(--spacing)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-\[18px\]{width:18px;height:18px}.size-full{width:100%;height:100%}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[92vh\]{max-height:92vh}.min-h-0{min-height:0}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-16{min-height:calc(var(--spacing) * 16)}.w-4\/5{width:80%}.w-9{width:calc(var(--spacing) * 9)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[280px\]{width:280px}.w-\[300px\]{width:300px}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-\[var\(--radix-popover-trigger-width\)\]{width:var(--radix-popover-trigger-width)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-full{min-width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.\[translate\:-50\%_-50\%\]{translate:-50% -50%}.\[translate\:0_-50\%\]{translate:0 -50%}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-text{cursor:text}.resize-none{resize:none}.list-none{list-style-type:none}.\[appearance\:textfield\]{appearance:textfield}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-0\.5>:not(:last-child)){--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(.space-y-1>:not(:last-child)){--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(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-1\.5{column-gap:calc(var(--spacing) * 1.5)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}:where(.divide-y>:not(:last-child)){--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(.divide-\[color-mix\(in_srgb\,var\(--as-border\)_55\%\,transparent\)\]>:not(:last-child)){border-color:var(--as-border)}@supports (color:color-mix(in lab, red, red)){:where(.divide-\[color-mix\(in_srgb\,var\(--as-border\)_55\%\,transparent\)\]>:not(:last-child)){border-color:color-mix(in srgb,var(--as-border) 55%,transparent)}}:where(.divide-\[var\(--as-border\)\]>:not(:last-child)){border-color:var(--as-border)}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[calc\(var\(--as-radius\)-2px\)\]{border-radius:calc(var(--as-radius) - 2px)}.rounded-\[calc\(var\(--as-radius-sm\)-2px\)\]{border-radius:calc(var(--as-radius-sm) - 2px)}.rounded-\[var\(--as-radius\)\]{border-radius:var(--as-radius)}.rounded-\[var\(--as-radius-lg\)\]{border-radius:var(--as-radius-lg)}.rounded-\[var\(--as-radius-sm\)\]{border-radius:var(--as-radius-sm)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[color-mix\(in_srgb\,var\(--as-ai\)_25\%\,transparent\)\]{border-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-ai\)_25\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-ai) 25%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-primary\)_25\%\,transparent\)\]{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-primary\)_25\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-primary) 25%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-primary\)_40\%\,transparent\)\]{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-primary\)_40\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-primary) 40%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-warning\)_35\%\,transparent\)\]{border-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-warning\)_35\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-warning) 35%,transparent)}}.border-\[var\(--as-border\)\]{border-color:var(--as-border)}.border-\[var\(--as-danger\)\],.border-\[var\(--as-danger\)\]\/40{border-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--as-danger\)\]\/40{border-color:color-mix(in oklab, var(--as-danger) 40%, transparent)}}.border-\[var\(--as-primary\)\],.border-\[var\(--as-primary\)\]\/30{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--as-primary\)\]\/30{border-color:color-mix(in oklab, var(--as-primary) 30%, transparent)}}.border-\[var\(--as-surface-raised\)\]{border-color:var(--as-surface-raised)}.border-transparent{border-color:#0000}.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_8\%\,transparent\)\]{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-ai) 8%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_12\%\,transparent\)\]{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-ai) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-danger\)_12\%\,transparent\)\]{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-danger\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-danger) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_7\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_7\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 7%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_8\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 8%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_12\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_30\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_30\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 30%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_20\%\,transparent\)\]{background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_20\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary-fg) 20%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-success\)_14\%\,transparent\)\]{background-color:var(--as-success)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-success\)_14\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-success) 14%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_12\%\,transparent\)\]{background-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-warning) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_18\%\,transparent\)\]{background-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_18\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-warning) 18%,transparent)}}.bg-\[var\(--as-ai\)\]{background-color:var(--as-ai)}.bg-\[var\(--as-border\)\]{background-color:var(--as-border)}.bg-\[var\(--as-danger\)\],.bg-\[var\(--as-danger\)\]\/10{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-danger\)\]\/10{background-color:color-mix(in oklab, var(--as-danger) 10%, transparent)}}.bg-\[var\(--as-fg\)\]{background-color:var(--as-fg)}.bg-\[var\(--as-muted\)\]{background-color:var(--as-muted)}.bg-\[var\(--as-overlay\)\]{background-color:var(--as-overlay)}.bg-\[var\(--as-primary\)\],.bg-\[var\(--as-primary\)\]\/10{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-primary\)\]\/10{background-color:color-mix(in oklab, var(--as-primary) 10%, transparent)}}.bg-\[var\(--as-primary\)\]\/50{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-primary\)\]\/50{background-color:color-mix(in oklab, var(--as-primary) 50%, transparent)}}.bg-\[var\(--as-secondary\)\]{background-color:var(--as-secondary)}.bg-\[var\(--as-success\)\]{background-color:var(--as-success)}.bg-\[var\(--as-surface\)\]{background-color:var(--as-surface)}.bg-\[var\(--as-surface-raised\)\]{background-color:var(--as-surface-raised)}.bg-\[var\(--as-warning\)\]{background-color:var(--as-warning)}.bg-red-500{background-color:var(--color-red-500)}.bg-transparent{background-color:#0000}.fill-\[var\(--as-danger\)\]{fill:var(--as-danger)}.fill-\[var\(--as-fg\)\]{fill:var(--as-fg)}.fill-\[var\(--as-muted\)\]{fill:var(--as-muted)}.fill-\[var\(--as-primary\)\]{fill:var(--as-primary)}.fill-\[var\(--as-primary-fg\)\]{fill:var(--as-primary-fg)}.fill-\[var\(--as-surface-raised\)\]{fill:var(--as-surface-raised)}.stroke-\[var\(--as-border\)\]{stroke:var(--as-border)}.stroke-\[var\(--as-primary\)\]{stroke:var(--as-primary)}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:0}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-0{padding-top:0}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-7{padding-right:calc(var(--spacing) * 7)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pr-16{padding-right:calc(var(--spacing) * 16)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[color-mix\(in_srgb\,var\(--as-warning\)_72\%\,var\(--as-fg\)\)\]{color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.text-\[color-mix\(in_srgb\,var\(--as-warning\)_72\%\,var\(--as-fg\)\)\]{color:color-mix(in srgb,var(--as-warning) 72%,var(--as-fg))}}.text-\[var\(--as-ai\)\]{color:var(--as-ai)}.text-\[var\(--as-ai-fg\)\]{color:var(--as-ai-fg)}.text-\[var\(--as-danger\)\]{color:var(--as-danger)}.text-\[var\(--as-danger-fg\)\]{color:var(--as-danger-fg)}.text-\[var\(--as-fg\)\]{color:var(--as-fg)}.text-\[var\(--as-muted-fg\)\]{color:var(--as-muted-fg)}.text-\[var\(--as-primary\)\]{color:var(--as-primary)}.text-\[var\(--as-primary-fg\)\]{color:var(--as-primary-fg)}.text-\[var\(--as-secondary-fg\)\]{color:var(--as-secondary-fg)}.text-\[var\(--as-success\)\]{color:var(--as-success)}.text-\[var\(--as-success-fg\)\]{color:var(--as-success-fg)}.text-\[var\(--as-surface\)\]{color:var(--as-surface)}.text-\[var\(--as-warning\)\]{color:var(--as-warning)}.text-\[var\(--as-warning-fg\)\]{color:var(--as-warning-fg)}.text-inherit{color:inherit}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--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,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-transparent{text-decoration-color:#0000}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-\[var\(--as-primary\)\]{accent-color:var(--as-primary)}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--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)}.shadow-\[var\(--as-shadow-1\)\]{--tw-shadow:var(--as-shadow-1);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-2\)\]{--tw-shadow:var(--as-shadow-2);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-3\)\]{--tw-shadow:var(--as-shadow-3);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--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)}.ring-2{--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)}.ring-\[var\(--as-focus-ring\)\]{--tw-ring-color:var(--as-focus-ring)}.ring-\[var\(--as-primary\)\]{--tw-ring-color:var(--as-primary)}.ring-offset-2{--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)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);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,)}.filter{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,)}.transition-\[border-color\,box-shadow\,translate\]{transition-property:border-color,box-shadow,translate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[filter\]{transition-property:filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{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))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_32\%\,transparent\)\]:is(:where(.group):hover *){background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_32\%\,transparent\)\]:is(:where(.group):hover *){background-color:color-mix(in srgb,var(--as-primary-fg) 32%,transparent)}}.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-secondary-fg\)_14\%\,transparent\)\]:is(:where(.group):hover *){background-color:var(--as-secondary-fg)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-secondary-fg\)_14\%\,transparent\)\]:is(:where(.group):hover *){background-color:color-mix(in srgb,var(--as-secondary-fg) 14%,transparent)}}.group-hover\:bg-\[var\(--as-primary\)\]\/10:is(:where(.group):hover *){background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[var\(--as-primary\)\]\/10:is(:where(.group):hover *){background-color:color-mix(in oklab, var(--as-primary) 10%, transparent)}}.group-hover\:text-\[var\(--as-primary\)\]:is(:where(.group):hover *){color:var(--as-primary)}.group-hover\:decoration-current:is(:where(.group):hover *){text-decoration-color:currentColor}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-\[var\(--as-muted-fg\)\]::placeholder{color:var(--as-muted-fg)}.focus-within\:border-\[var\(--as-focus-ring\)\]:focus-within{border-color:var(--as-focus-ring)}.focus-within\:opacity-100:focus-within{opacity:1}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-within\:ring-\[var\(--as-focus-ring\)\]:focus-within{--tw-ring-color:var(--as-focus-ring)}@media (hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[var\(--as-fg\)\]\/30:hover{border-color:var(--as-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-fg\)\]\/30:hover{border-color:color-mix(in oklab, var(--as-fg) 30%, transparent)}}.hover\:border-\[var\(--as-fg\)\]\/40:hover{border-color:var(--as-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-fg\)\]\/40:hover{border-color:color-mix(in oklab, var(--as-fg) 40%, transparent)}}.hover\:border-\[var\(--as-muted-fg\)\]\/40:hover{border-color:var(--as-muted-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-muted-fg\)\]\/40:hover{border-color:color-mix(in oklab, var(--as-muted-fg) 40%, transparent)}}.hover\:border-\[var\(--as-primary\)\]:hover{border-color:var(--as-primary)}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-ai\)_14\%\,var\(--as-secondary\)\)\]:hover{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-ai\)_14\%\,var\(--as-secondary\)\)\]:hover{background-color:color-mix(in srgb,var(--as-ai) 14%,var(--as-secondary))}}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-muted\)_60\%\,transparent\)\]:hover{background-color:var(--as-muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-muted\)_60\%\,transparent\)\]:hover{background-color:color-mix(in srgb,var(--as-muted) 60%,transparent)}}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary\)_6\%\,transparent\)\]:hover{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary\)_6\%\,transparent\)\]:hover{background-color:color-mix(in srgb,var(--as-primary) 6%,transparent)}}.hover\:bg-\[var\(--as-danger\)\]:hover{background-color:var(--as-danger)}.hover\:bg-\[var\(--as-muted\)\]:hover{background-color:var(--as-muted)}.hover\:bg-\[var\(--as-secondary\)\]:hover{background-color:var(--as-secondary)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-\[var\(--as-danger\)\]:hover{color:var(--as-danger)}.hover\:text-\[var\(--as-danger-fg\)\]:hover{color:var(--as-danger-fg)}.hover\:text-\[var\(--as-fg\)\]:hover{color:var(--as-fg)}.hover\:text-\[var\(--as-primary\)\]:hover{color:var(--as-primary)}.hover\:text-\[var\(--as-success\)\]:hover{color:var(--as-success)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-85:hover{opacity:.85}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[var\(--as-shadow-2\)\]:hover{--tw-shadow:var(--as-shadow-2);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-\[var\(--as-shadow-3\)\]:hover{--tw-shadow:var(--as-shadow-3);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:brightness-95:hover{--tw-brightness:brightness(95%);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,)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);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,)}}.focus\:bg-\[var\(--as-danger\)\]\/10:focus{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.focus\:bg-\[var\(--as-danger\)\]\/10:focus{background-color:color-mix(in oklab, var(--as-danger) 10%, transparent)}}.focus\:bg-\[var\(--as-secondary\)\]:focus{background-color:var(--as-secondary)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-\[var\(--as-danger\)\]:focus-visible{border-color:var(--as-danger)}.focus-visible\:border-\[var\(--as-focus-ring\)\]:focus-visible{border-color:var(--as-focus-ring)}.focus-visible\:border-\[var\(--as-primary\)\]:focus-visible{border-color:var(--as-primary)}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-\[var\(--as-danger\)\]:focus-visible{--tw-ring-color:var(--as-danger)}.focus-visible\:ring-\[var\(--as-focus-ring\)\]:focus-visible{--tw-ring-color:var(--as-focus-ring)}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-1:focus-visible{outline-offset:1px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-offset-\[-2px\]:focus-visible{outline-offset:-2px}.focus-visible\:outline-\[var\(--as-focus-ring\)\]:focus-visible{outline-color:var(--as-focus-ring)}.focus-visible\:outline-\[var\(--as-primary\)\]:focus-visible{outline-color:var(--as-primary)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:40rem){.sm\:inset-0{inset:0}.sm\:mx-auto{margin-inline:auto}.sm\:my-auto{margin-block:auto}.sm\:mr-auto{margin-right:auto}.sm\:h-fit{height:fit-content}.sm\:max-h-\[90vh\]{max-height:90vh}.sm\:w-40{width:calc(var(--spacing) * 40)}.sm\:w-fit{width:fit-content}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-4xl{max-width:var(--container-4xl)}.sm\:max-w-6xl{max-width:var(--container-6xl)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:rounded-\[var\(--as-radius-lg\)\]{border-radius:var(--as-radius-lg)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}.sm\:border-\[var\(--as-border\)\]{border-color:var(--as-border)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:relative{position:relative}.lg\:sticky{position:sticky}.lg\:top-24{top:calc(var(--spacing) * 24)}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:flex{display:flex}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:size-5 svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button{appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{appearance:none}@keyframes as-fade-in{0%{opacity:0}to{opacity:1}}@keyframes as-zoom-in{0%{opacity:0;scale:.97}to{opacity:1;scale:1}}@keyframes as-pop-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes as-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}.as-anim-fade{animation:.15s ease-out as-fade-in}.as-anim-modal{animation:.15s ease-out as-zoom-in}.as-anim-pop{animation:.12s ease-out as-pop-in}.as-anim-drawer{animation:.2s ease-out as-drawer-in}[data-as=scale-slider] input[type=range]{appearance:none;background:0 0;height:1.125rem}[data-as=scale-slider] input[type=range]::-webkit-slider-runnable-track{background:linear-gradient(to right, var(--as-slider-color,var(--as-primary)) var(--as-slider-progress,0%), var(--as-muted) var(--as-slider-progress,0%));border-radius:999px;height:.375rem}[data-as=scale-slider] input[type=range]::-webkit-slider-thumb{appearance:none;border:3px solid var(--as-slider-color,var(--as-primary));background:var(--as-surface-raised);width:1.125rem;height:1.125rem;box-shadow:var(--as-shadow-2);border-radius:999px;margin-top:-.375rem}[data-as=scale-slider] input[type=range]::-moz-range-track{background:var(--as-muted);border-radius:999px;height:.375rem}[data-as=scale-slider] input[type=range]::-moz-range-progress{background:var(--as-slider-color,var(--as-primary));border-radius:999px;height:.375rem}[data-as=scale-slider] input[type=range]::-moz-range-thumb{border:3px solid var(--as-slider-color,var(--as-primary));background:var(--as-surface-raised);width:1.125rem;height:1.125rem;box-shadow:var(--as-shadow-2);border-radius:999px}[data-as=scale-slider] input[type=range]:focus-visible{outline:2px solid var(--as-focus-ring);outline-offset:2px}[data-as=scale-slider] input[type=range]:disabled{opacity:.5;cursor:not-allowed}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-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:"<percentage>";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:"<percentage>";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:"<length>";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-outline-style{syntax:"*";inherits:false;initial-value:solid}@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:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@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}@keyframes spin{to{transform:rotate(360deg)}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neuronection/assistant-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Shared React component library for the Assistant family (career-, study-, health-assistant). Family look by default, app-flavored via CSS-variable tokens.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -102,6 +102,10 @@
|
|
|
102
102
|
"types": "./dist/file-queue.d.ts",
|
|
103
103
|
"import": "./dist/file-queue.js"
|
|
104
104
|
},
|
|
105
|
+
"./flow-status": {
|
|
106
|
+
"types": "./dist/flow-status.d.ts",
|
|
107
|
+
"import": "./dist/flow-status.js"
|
|
108
|
+
},
|
|
105
109
|
"./expandable-search": {
|
|
106
110
|
"types": "./dist/expandable-search.d.ts",
|
|
107
111
|
"import": "./dist/expandable-search.js"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/sidebar-nav/SidebarNav.tsx"],"names":["SidebarNav","sectionSeen"],"mappings":";;;;;;AA0EA,IAAM,eAAA,GAAkB,GAAA;AAExB,IAAM,eAAA,GAAkB,CAAC,MAAA,KACvB,EAAA;AAAA,EACE,+QAAA;AAAA,EACA,SACI,8FAAA,GACA;AACN,CAAA;AAEF,IAAM,kBAAA,GACJ,kNAAA;AAEF,SAAS,KAAA,CAAM,EAAE,KAAA,EAAO,MAAA,EAAO,EAAgD;AAC7E,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,wHAAA;AAAA,QACA,SACI,oDAAA,GACA;AAAA,OACN;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,MAAA,EAAO,EAAiD;AAClF,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,IAAA;AAChC,EAAA,uBACE,GAAA,CAAC,UAAK,SAAA,EAAU,SAAA,EACd,8BAAC,KAAA,EAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAgB,CAAA,EACvC,CAAA;AAEJ;AAEO,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EAC9B,SAASA,WAAAA,CACP;AAAA,IACE,KAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,iBAAA;AAAA,IACA,WAAA,GAAc,KAAA;AAAA,IACd,WAAA;AAAA,IACA,mBAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,KAEF,GAAA,EACA;AACA,IAAA,MAAM,SAAe,KAAA,CAAA,KAAA,EAAM;AAC3B,IAAA,MAAM,OAAA,GAAgB,aAAuB,IAAI,CAAA;AACjD,IAAA,MAAM,YAAA,GAAqB,aAAuB,IAAI,CAAA;AACtD,IAAA,MAAM,WAAA,GAAoB,aAA6C,IAAI,CAAA;AAC3E,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAU,eAAwB,IAAI,CAAA;AACtE,IAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAU,KAAA,CAAA,QAAA,CAAmB,EAAE,CAAA;AAE3E,IAAA,MAAM,kBAAA,GACJ,WAAA,KAAgB,MAAA,IAAa,mBAAA,KAAwB,MAAA;AACvD,IAAA,MAAM,QAAA,GAAW,qBAAsB,WAAA,GAA2B,gBAAA;AAElE,IAAA,MAAM,eAAA,GAAwB,KAAA,CAAA,WAAA;AAAA,MAC5B,CAAC,IAAA,KAAmB;AAClB,QAAA,IAAI,kBAAA,wBAA0C,IAAI,CAAA;AAAA,iCACzB,IAAI,CAAA;AAAA,MAC/B,CAAA;AAAA,MACA,CAAC,oBAAoB,mBAAmB;AAAA,KAC1C;AAEA,IAAA,MAAM,WAAA,GAAoB,KAAA,CAAA,WAAA;AAAA,MACxB,CAAC,EAAA,KAAe;AACd,QAAA,eAAA;AAAA,UACE,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA,GAChB,SAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA,GAC/B,CAAC,GAAG,UAAU,EAAE;AAAA,SACtB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,UAAU,eAAe;AAAA,KAC5B;AAKA,IAAM,gBAAU,MAAM;AACpB,MAAA,IAAI,kBAAA,IAAsB,YAAY,IAAA,EAAM;AAC5C,MAAA,MAAM,KAAA,GACJ,KAAA,CAAM,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,QAAQ,CAAC,CAAA,IAC9D,cAAA,EAAgB,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,QAAQ,CAAC,CAAA;AAC1E,MAAA,IAAI,SAAS,CAAC,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA,EAAG;AACzC,QAAA,eAAA,CAAgB,CAAC,GAAG,QAAA,EAAU,KAAA,CAAM,EAAE,CAAC,CAAA;AAAA,MACzC;AAAA,IAEF,GAAG,CAAC,QAAA,EAAU,KAAA,EAAO,cAAA,EAAgB,kBAAkB,CAAC,CAAA;AAExD,IAAM,gBAAU,MAAM;AACpB,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,WAAA,CAAY,OAAA,EAAS,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAAA,MAC3D,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,WAAA,GAAc,CAAC,EAAA,KAAe;AAClC,MAAA,IAAI,WAAA,CAAY,OAAA,EAAS,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AACzD,MAAA,WAAA,CAAY,UAAU,UAAA,CAAW,MAAM,aAAA,CAAc,EAAE,GAAG,eAAe,CAAA;AAAA,IAC3E,CAAA;AACA,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,WAAA,CAAY,OAAA,EAAS,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AACzD,MAAA,WAAA,CAAY,UAAU,UAAA,CAAW,MAAM,aAAA,CAAc,IAAI,GAAG,eAAe,CAAA;AAAA,IAC7E,CAAA;AACA,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAA,IAAI,WAAA,CAAY,OAAA,EAAS,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAAA,IAC3D,CAAA;AAEA,IAAA,MAAM,QAAA,GAAW,CAAC,EAAA,KAAe;AAC/B,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,UAAA,GAAa,EAAE,CAAA;AAAA,IACjB,CAAA;AAGA,IAAA,MAAM,aAAa,MACjB,CAAC,QAAQ,OAAA,EAAS,YAAA,CAAa,OAAO,CAAA,CAAE,MAAA;AAAA,MACtC,CAAC,MAA2B,CAAA,KAAM;AAAA,KACpC;AAEF,IAAA,MAAM,eAAe,MAA2B;AAC9C,MAAA,OAAO,YAAW,CAAE,OAAA;AAAA,QAAQ,CAAC,WAC3B,KAAA,CAAM,IAAA;AAAA,UACJ,MAAA,CAAO,iBAAoC,oBAAoB;AAAA,SACjE,CAAE,OAAO,CAAC,EAAA,KAAO,GAAG,OAAA,CAAQ,UAAU,MAAM,IAAI;AAAA,OAClD;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,EAAsB,MAAA,KAAmB;AAC7D,MAAA,MAAM,MAAM,YAAA,EAAa;AACzB,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,OAA4B,CAAA;AACtD,MAAA,IAAI,UAAU,EAAA,EAAI;AAClB,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,MAAA,EAAQ,CAAC,CAAA,EAAG,GAAA,CAAI,MAAA,GAAS,CAAC,CAAC,CAAA;AACtE,MAAA,IAAA,EAAM,KAAA,EAAM;AAAA,IACd,CAAA;AAEA,IAAA,MAAM,qBAAA,GAAwB,CAAC,CAAA,KAA2B;AACxD,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,WAAA,IAAe,CAAA,CAAE,QAAQ,SAAA,EAAW;AAClD,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,UAAU,KAAA,CAAM,IAAA;AAAA,QACnB,EAAE,aAAA,CAA8B,gBAAA;AAAA,UAC/B;AAAA;AACF,OACF;AACA,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,aAAkC,CAAA;AACzE,MAAA,MAAM,OAAO,CAAA,CAAE,GAAA,KAAQ,WAAA,GAAc,CAAA,GAAI,QAAQ,MAAA,GAAS,CAAA;AAC1D,MAAA,OAAA,CAAA,CAAS,KAAA,GAAQ,IAAA,IAAQ,OAAA,CAAQ,MAAM,GAAG,KAAA,EAAM;AAAA,IAClD,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,EAAA,KACvB,UAAA,EAAW,CACR,OAAA;AAAA,MAAQ,CAAC,CAAA,KACR,KAAA,CAAM,KAAK,CAAA,CAAE,gBAAA,CAAoC,wBAAwB,CAAC;AAAA,MAE3E,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,CAAQ,iBAAiB,EAAE,CAAA;AAE9C,IAAA,MAAM,aAAA,GAAgB,CAAC,EAAA,KACrB,UAAA,EAAW,CACR,OAAA;AAAA,MAAQ,CAAC,CAAA,KACR,KAAA,CAAM,KAAK,CAAA,CAAE,gBAAA,CAAoC,yBAAyB,CAAC;AAAA,KAC7E,CACC,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,aAAA,KAAkB,EAAA,IAAM,CAAC,CAAA,CAAE,QAAQ,CAAA;AAE9D,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAA2B;AACpD,MAAA,MAAM,MAAA,GAAU,EAAE,MAAA,CAAuB,OAAA;AAAA,QACvC;AAAA,OACF;AACA,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,YAAA;AAC/B,MAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,aAAA;AAChC,MAAA,QAAQ,EAAE,GAAA;AAAK,QACb,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,YAAA,CAAa,QAAQ,CAAC,CAAA;AACtB,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,YAAA,CAAa,QAAQ,EAAE,CAAA;AACvB,UAAA;AAAA,QACF,KAAK,MAAA,EAAQ;AACX,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,YAAA,EAAa,CAAE,CAAC,CAAA,EAAG,KAAA,EAAM;AACzB,UAAA;AAAA,QACF;AAAA,QACA,KAAK,KAAA,EAAO;AACV,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,MAAM,MAAM,YAAA,EAAa;AACzB,UAAA,GAAA,CAAI,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,EAAG,KAAA,EAAM;AAC3B,UAAA;AAAA,QACF;AAAA,QACA,KAAK,YAAA;AACH,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAG;AAC/B,cAAA,eAAA,CAAgB,CAAC,GAAG,QAAA,EAAU,OAAO,CAAC,CAAA;AAAA,YACxC,CAAA,MAAO;AACL,cAAA,aAAA,CAAc,OAAO,GAAG,KAAA,EAAM;AAAA,YAChC;AAAA,UACF;AACA,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,eAAA,CAAgB,QAAQ,GAAG,KAAA,EAAM;AAAA,UACnC,CAAA,MAAA,IAAW,OAAA,IAAW,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAG;AAChD,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,WAAA,CAAY,OAAO,CAAA;AAAA,UACrB;AACA,UAAA;AAAA;AACJ,IACF,CAAA;AAEA,IAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,iBAAA;AACnC,IAAA,MAAM,IAAA,GAAO,SAAA;AAEb,IAAA,MAAM,eAAe,CAAC,IAAA,yBACnB,KAAA,EAAA,EAAI,SAAA,EAAU,8FACZ,QAAA,EAAA,IAAA,EACH,CAAA;AAGF,IAAA,MAAM,UAAA,GAAa,CAAC,IAAA,EAAe,KAAA,EAAe,IAAA,KAAoB;AAGpE,MAAA,IAAI,KAAK,QAAA,KAAa,MAAA,IAAa,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAC7D,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,WAAA,GACJ,CAAC,IAAA,IACD,IAAA,CAAK,YAAY,MAAA,IACjB,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,IAAA,CAAK,OAAO,CAAA,KAAM,KAAA;AACxD,MAAA,MAAM,iBAAiB,WAAA,mBACrB,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,cAAA;AAAA,UACL,SAAA,EAAU,gIAAA;AAAA,UAET,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,OACR,GACE,IAAA;AACJ,MAAA,MAAM,MAAA,GAAS,KAAK,EAAA,KAAO,QAAA;AAC3B,MAAA,MAAM,WAAA,GAAc,KAAK,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,QAAQ,CAAA,IAAK,KAAA;AACrE,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA;AAC5C,MAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,MAAA,MAAM,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA,OAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AAE1C,MAAA,IAAI,KAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,KAAK,IAAA,EAAM;AACrD,QAAA,4BACG,IAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,cAAA;AAAA,0BACD,IAAA;AAAA,YAAkB,gBAAA,CAAA,IAAA;AAAA,YAAjB;AAAA,cACC,IAAA,EAAM,eAAe,IAAA,CAAK,EAAA;AAAA,cAC1B,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,gBAAA,IAAI,CAAC,IAAA,EAAM,aAAA,CAAc,IAAI,CAAA;AAAA,cAC/B,CAAA;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EAAwB,OAAA,EAAO,IAAA,EAC9B,QAAA,kBAAA,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,kBAAA,EAAgB,IAAA;AAAA,oBAChB,wBAAsB,IAAA,CAAK,EAAA;AAAA,oBAC3B,UAAU,IAAA,CAAK,QAAA;AAAA,oBACf,YAAA,EAAY,MAAA,EAAQ,SAAA,IAAa,CAAA,KAAA,EAAQ,KAAK,KAAK,CAAA,KAAA,CAAA;AAAA,oBACnD,eAAA,EAAc,MAAA;AAAA,oBACd,eAAA,EAAe,eAAe,IAAA,CAAK,EAAA;AAAA,oBACnC,OAAA,EAAS,MAAM,aAAA,CAAc,IAAA,CAAK,EAAE,CAAA;AAAA,oBACpC,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,sBAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,wBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,wBAAA,aAAA,CAAc,KAAK,EAAE,CAAA;AAAA,sBACvB;AAAA,oBACF,CAAA;AAAA,oBACA,YAAA,EAAc,MAAM,WAAA,CAAY,IAAA,CAAK,EAAE,CAAA;AAAA,oBACvC,YAAA,EAAc,WAAA;AAAA,oBACd,WAAW,EAAA,CAAG,eAAA,CAAgB,MAAA,IAAU,WAAW,GAAG,qBAAqB,CAAA;AAAA,oBAE1E,QAAA,EAAA,IAAA,mBACC,GAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAW,EAAA;AAAA,0BACT,iBAAA;AAAA,0BACA,MAAA,IAAU,cACN,0BAAA,GACA;AAAA,yBACN;AAAA,wBACA,aAAA,EAAW;AAAA;AAAA,qBACb,GACE;AAAA;AAAA,iBACN,EACF,CAAA;AAAA,gCACA,GAAA,CAAkB,yBAAjB,EACC,QAAA,kBAAA,IAAA;AAAA,kBAAkB,gBAAA,CAAA,OAAA;AAAA,kBAAjB;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,UAAA,EAAY,CAAA;AAAA,oBACZ,cAAY,IAAA,CAAK,KAAA;AAAA,oBACjB,gBAAA,EAAkB,CAAC,CAAA,KAAM;AAEvB,sBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,sBAAA,eAAA,CAAgB,IAAA,CAAK,EAAE,CAAA,EAAG,KAAA,EAAM;AAAA,oBAClC,CAAA;AAAA,oBACA,YAAA,EAAc,iBAAA;AAAA,oBACd,YAAA,EAAc,WAAA;AAAA,oBACd,SAAA,EAAW,qBAAA;AAAA,oBACX,SAAA,EAAW,kBAAA;AAAA,oBAEV,QAAA,EAAA;AAAA,sBAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,sCACxB,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kBAAA,EACX,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,CAAC,KAAA,qBAClB,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,IAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAK,QAAA;AAAA,0BACL,qBAAA,EAAmB,IAAA;AAAA,0BACnB,UAAU,KAAA,CAAM,QAAA;AAAA,0BAChB,OAAA,EAAS,MAAM,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA;AAAA,0BAChC,cAAA,EAAc,KAAA,CAAM,EAAA,KAAO,QAAA,GAAW,MAAA,GAAS,MAAA;AAAA,0BAC/C,SAAA,EAAW,EAAA;AAAA,4BACT,oOAAA;AAAA,4BACA,KAAA,CAAM,OAAO,QAAA,IAAY;AAAA,2BAC3B;AAAA,0BAEC,QAAA,EAAA;AAAA,4BAAA,KAAA,CAAM,uBAAO,GAAA,CAAC,KAAA,CAAM,MAAN,EAAW,aAAA,EAAW,MAAC,CAAA,GAAK,IAAA;AAAA,4CAC3C,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,gBAAM,KAAA,EAAM,CAAA;AAAA,4CACvD,GAAA,CAAC,aAAU,KAAA,EAAO,KAAA,CAAM,OAAO,MAAA,EAAQ,KAAA,CAAM,OAAO,QAAA,EAAU;AAAA;AAAA;AAAA,uBAChE,EAAA,EAfO,KAAA,CAAM,EAgBf,CACD,CAAA,EACH;AAAA;AAAA;AAAA,iBACF,EACF;AAAA;AAAA;AAAA;AACF,SAAA,EAAA,EAhFO,KAAK,EAiFd,CAAA;AAAA,MAEJ;AAEA,MAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC7C,QAAA,4BACG,IAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,cAAA;AAAA,0BACD,IAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,kBAAA,EAAgB,IAAA;AAAA,cAChB,wBAAsB,IAAA,CAAK,EAAA;AAAA,cAC3B,UAAU,IAAA,CAAK,QAAA;AAAA,cACf,eAAA,EAAe,UAAA;AAAA,cACf,eAAA,EAAe,OAAA;AAAA,cACf,OAAA,EAAS,MAAM,WAAA,CAAY,IAAA,CAAK,EAAE,CAAA;AAAA,cAClC,SAAA,EAAW,eAAA,CAAgB,MAAA,IAAU,WAAW,CAAA;AAAA,cAE/C,QAAA,EAAA;AAAA,gBAAA,IAAA,mBACC,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,iBAAA;AAAA,sBACA,MAAA,IAAU,cACN,0BAAA,GACA;AAAA,qBACN;AAAA,oBACA,aAAA,EAAW;AAAA;AAAA,iBACb,GACE,IAAA;AAAA,gCACJ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,eAAK,KAAA,EAAM,CAAA;AAAA,oCACrD,SAAA,EAAA,EAAU,KAAA,EAAO,KAAK,KAAA,EAAO,MAAA,EAAQ,UAAU,WAAA,EAAa,CAAA;AAAA,gBAC5D,UAAA,mBACC,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,2CAAA,EAA4C,aAAA,EAAW,IAAA,EAAC,CAAA,mBAE/E,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,2CAAA,EAA4C,eAAW,IAAA,EAAC;AAAA;AAAA;AAAA,WAEpF;AAAA,0BACA,GAAA,CAAC,IAAA,EAAA,EAAG,EAAA,EAAI,OAAA,EAAS,MAAA,EAAQ,CAAC,UAAA,EAAY,SAAA,EAAU,uBAAA,EAC7C,QAAA,EAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU;AAC5B,YAAA,MAAM,eAAA,GAAkB,MAAM,EAAA,KAAO,QAAA;AACrC,YAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,YAAA,MAAMC,YAAAA,GACJ,KAAA,CAAM,OAAA,KAAY,MAAA,IAClB,KAAK,QAAA,CAAU,SAAA;AAAA,cACb,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,KAAA,CAAM;AAAA,aAC7B,KAAM,IAAA,CAAK,QAAA,CAAU,OAAA,CAAQ,KAAK,CAAA;AACpC,YAAA,4BACG,IAAA,EAAA,EACE,QAAA,EAAA;AAAA,cAAAA,YAAAA,mBACC,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,cAAA;AAAA,kBACL,SAAA,EAAU,gIAAA;AAAA,kBAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,eACT,GACE,IAAA;AAAA,8BACJ,IAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,kBAAA,EAAgB,IAAA;AAAA,kBAChB,yBAAuB,IAAA,CAAK,EAAA;AAAA,kBAC5B,UAAU,KAAA,CAAM,QAAA;AAAA,kBAChB,cAAA,EAAc,kBAAkB,MAAA,GAAS,MAAA;AAAA,kBACzC,OAAA,EAAS,MAAM,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA;AAAA,kBAChC,SAAA,EAAW,EAAA;AAAA,oBACT,gBAAgB,eAAe,CAAA;AAAA,oBAC/B;AAAA,mBACF;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,SAAA,uBACE,SAAA,EAAA,EAAU,SAAA,EAAU,iBAAA,EAAkB,aAAA,EAAW,MAAC,CAAA,GACjD,IAAA;AAAA,oCACJ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,gBAAM,KAAA,EAAM,CAAA;AAAA,wCACtD,SAAA,EAAA,EAAU,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,QAAQ,eAAA,EAAiB;AAAA;AAAA;AAAA;AAC1D,aAAA,EAAA,EA1BO,MAAM,EA2Bf,CAAA;AAAA,UAEJ,CAAC,CAAA,EACH;AAAA,SAAA,EAAA,EAvEO,KAAK,EAwEd,CAAA;AAAA,MAEJ;AAEA,MAAA,4BACG,IAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,cAAA;AAAA,wBACD,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,kBAAA,EAAgB,IAAA;AAAA,YAChB,UAAU,IAAA,CAAK,QAAA;AAAA,YACf,KAAA,EAAO,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,YAC3B,YAAA,EAAY,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,YAChC,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,YAChC,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA;AAAA,YAC/B,WAAW,EAAA,CAAG,eAAA,CAAgB,MAAM,CAAA,EAAG,QAAQ,qBAAqB,CAAA;AAAA,YAEnE,QAAA,EAAA;AAAA,cAAA,IAAA,mBACC,GAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,UAAA;AAAA,oBACA,OAAO,QAAA,GAAW,QAAA;AAAA,oBAClB,SAAS,0BAAA,GAA6B;AAAA,mBACxC;AAAA,kBACA,aAAA,EAAW;AAAA;AAAA,eACb,GACE,IAAA;AAAA,cACH,CAAC,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yBAAA,EAA2B,QAAA,EAAA,IAAA,CAAK,OAAM,CAAA,GAAU,IAAA;AAAA,cACxE,CAAC,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAU,OAAO,IAAA,CAAK,KAAA,EAAO,QAAgB,CAAA,GAAK;AAAA;AAAA;AAAA;AAC9D,OAAA,EAAA,EAxBO,KAAK,EAyBd,CAAA;AAAA,IAEJ,CAAA;AAEA,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,aAAA;AAAA,QACR,YAAA,EAAY,OAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,UACT,6IAAA;AAAA,UACA,OAAO,MAAA,GAAS,MAAA;AAAA,UAChB;AAAA,SACF;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,WAAA,mBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6FAAA,EACb,QAAA,kBAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAM,iBAAA,GAAoB,CAAC,SAAS,CAAA;AAAA,cAC7C,OACE,SAAA,GACK,MAAA,EAAQ,MAAA,IAAU,gBAAA,GAClB,QAAQ,QAAA,IAAY,kBAAA;AAAA,cAE3B,cACE,SAAA,GACK,MAAA,EAAQ,MAAA,IAAU,gBAAA,GAClB,QAAQ,QAAA,IAAY,kBAAA;AAAA,cAE3B,SAAA,EAAU,6UAAA;AAAA,cAET,QAAA,EAAA,SAAA,mBACC,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,UAAA,EAAW,aAAA,EAAW,IAAA,EAAC,CAAA,mBAE/C,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC;AAAA;AAAA,aAGpD,CAAA,GACE,IAAA;AAAA,UAEH,yBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,kBAAO,CAAA,GAAS,IAAA;AAAA,0BAErD,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAW,iBAAA;AAAA,cACX,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,YAAY,CAAA;AAAA,cAEtE,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,WAAA,EACX,gBAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,KAAK,CAAC,CAAA,EAC5D;AAAA;AAAA,WACF;AAAA,UAEC,cAAA,IAAkB,cAAA,CAAe,MAAA,GAAS,CAAA,mBACzC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,YAAA;AAAA,cACL,SAAA,EAAW,iBAAA;AAAA,cACX,SAAA,EAAU,uDAAA;AAAA,cAEV,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,WAAA,EACX,yBAAe,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,cAAc,CAAC,CAAA,EAC9E;AAAA;AAAA,WACF,GACE,IAAA;AAAA,UAEH,yBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EAAmD,kBAAO,CAAA,GACvE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-3IXMZ6KG.js","sourcesContent":["import * as React from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\nimport {\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n type LucideIcon,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface NavChild {\n id: string\n label: string\n icon?: LucideIcon\n badge?: string | number\n /** Divider label rendered above this child (first occurrence only). */\n section?: string\n disabled?: boolean\n}\n\nexport interface NavItem {\n id: string\n label: string\n icon?: LucideIcon\n badge?: string | number\n /** One nesting level; deeper trees stay app-side. */\n children?: NavChild[]\n disabled?: boolean\n /** Divider label rendered above this item (first occurrence only) —\n * for flat sidebars with visual groups. Ignored in the collapsed rail. */\n section?: string\n}\n\nexport interface SidebarNavLabels {\n /** aria-label on the <nav> element. */\n navAria?: string\n /** Collapsed-rail toggle title when collapsed. */\n expand?: string\n /** Collapsed-rail toggle title when expanded. */\n collapse?: string\n /** aria-label for a collapsed group's flyout trigger. */\n openGroup?: string\n}\n\nexport interface SidebarNavProps {\n /** Pre-filtered by the app (roles, feature flags); order = render order. */\n items: NavItem[]\n /** Flat items pinned below the scroll area, above `footer` (the\n * Settings/About pattern). Same rendering, active state, rail behavior\n * and keyboard traversal order as `items`. */\n secondaryItems?: NavItem[]\n /** The app resolves route → id; matching logic stays app-side. */\n activeId?: string | null\n /** Fires for leaves only; group triggers toggle expansion instead. */\n onNavigate?: (id: string) => void\n /** Controlled icon rail. */\n collapsed?: boolean\n onCollapsedChange?: (collapsed: boolean) => void\n /** Renders the rail collapse/expand toggle handle (desktop only). */\n collapsible?: boolean\n /** Controlled group expansion; uncontrolled defaults to internal\n * state + auto-expand when activeId enters a group. */\n expandedIds?: string[]\n onExpandedIdsChange?: (ids: string[]) => void\n /** Slot above the list (brand, logo). */\n header?: React.ReactNode\n /** Slot below the list and pinned items (version, legal links). */\n footer?: React.ReactNode\n labels?: SidebarNavLabels\n className?: string\n /** Targets the scrollable list region. */\n navClassName?: string\n}\n\nconst FLYOUT_DELAY_MS = 150\n\nconst itemButtonClass = (active: boolean) =>\n cn(\n 'flex w-full cursor-pointer items-center gap-3 rounded-[var(--as-radius)] px-3 py-2.5 text-left text-sm transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50',\n active\n ? 'bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] font-bold text-[var(--as-primary)]'\n : 'font-medium text-[var(--as-fg)] hover:bg-[var(--as-muted)]',\n )\n\nconst flyoutContentClass =\n 'as-anim-pop z-[var(--as-z-popover)] min-w-44 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-1 text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none'\n\nfunction Badge({ value, active }: { value: string | number; active: boolean }) {\n return (\n <span\n className={cn(\n 'inline-flex min-w-5 shrink-0 items-center justify-center rounded-full px-1.5 py-0.5 text-[11px] font-bold leading-none',\n active\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'bg-[var(--as-muted)] text-[var(--as-muted-fg)]',\n )}\n >\n {value}\n </span>\n )\n}\n\nfunction ItemBadge({ badge, active }: { badge?: string | number; active: boolean }) {\n if (badge === undefined) return null\n return (\n <span className=\"ml-auto\">\n <Badge value={badge} active={active} />\n </span>\n )\n}\n\nexport const SidebarNav = React.forwardRef<HTMLElement, SidebarNavProps>(\n function SidebarNav(\n {\n items,\n secondaryItems,\n activeId,\n onNavigate,\n collapsed = false,\n onCollapsedChange,\n collapsible = false,\n expandedIds,\n onExpandedIdsChange,\n header,\n footer,\n labels,\n className,\n navClassName,\n },\n ref,\n ) {\n const baseId = React.useId()\n const listRef = React.useRef<HTMLDivElement>(null)\n const secondaryRef = React.useRef<HTMLDivElement>(null)\n const flyoutTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const [openFlyout, setOpenFlyout] = React.useState<string | null>(null)\n const [internalExpanded, setInternalExpanded] = React.useState<string[]>([])\n\n const controlledExpanded =\n expandedIds !== undefined && onExpandedIdsChange !== undefined\n const expanded = controlledExpanded ? (expandedIds as string[]) : internalExpanded\n\n const setExpandedList = React.useCallback(\n (next: string[]) => {\n if (controlledExpanded) onExpandedIdsChange?.(next)\n else setInternalExpanded(next)\n },\n [controlledExpanded, onExpandedIdsChange],\n )\n\n const toggleGroup = React.useCallback(\n (id: string) => {\n setExpandedList(\n expanded.includes(id)\n ? expanded.filter((g) => g !== id)\n : [...expanded, id],\n )\n },\n [expanded, setExpandedList],\n )\n\n // Auto-expand the group containing the active item so the highlighted\n // entry is always visible (uncontrolled mode only — the app owns\n // expansion when controlled).\n React.useEffect(() => {\n if (controlledExpanded || activeId == null) return\n const owner =\n items.find((it) => it.children?.some((c) => c.id === activeId)) ??\n secondaryItems?.find((it) => it.children?.some((c) => c.id === activeId))\n if (owner && !expanded.includes(owner.id)) {\n setExpandedList([...expanded, owner.id])\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeId, items, secondaryItems, controlledExpanded])\n\n React.useEffect(() => {\n return () => {\n if (flyoutTimer.current) clearTimeout(flyoutTimer.current)\n }\n }, [])\n\n const flyoutEnter = (id: string) => {\n if (flyoutTimer.current) clearTimeout(flyoutTimer.current)\n flyoutTimer.current = setTimeout(() => setOpenFlyout(id), FLYOUT_DELAY_MS)\n }\n const flyoutLeave = () => {\n if (flyoutTimer.current) clearTimeout(flyoutTimer.current)\n flyoutTimer.current = setTimeout(() => setOpenFlyout(null), FLYOUT_DELAY_MS)\n }\n const flyoutEnterCancel = () => {\n if (flyoutTimer.current) clearTimeout(flyoutTimer.current)\n }\n\n const navigate = (id: string) => {\n setOpenFlyout(null)\n onNavigate?.(id)\n }\n\n // ---- keyboard navigation over the visible list ----\n const navRegions = () =>\n [listRef.current, secondaryRef.current].filter(\n (r): r is HTMLDivElement => r !== null,\n )\n\n const visibleItems = (): HTMLButtonElement[] => {\n return navRegions().flatMap((region) =>\n Array.from(\n region.querySelectorAll<HTMLButtonElement>('[data-as-nav-item]'),\n ).filter((el) => el.closest('[hidden]') === null),\n )\n }\n\n const focusSibling = (current: HTMLElement, offset: number) => {\n const all = visibleItems()\n const index = all.indexOf(current as HTMLButtonElement)\n if (index === -1) return\n const next = all[Math.min(Math.max(index + offset, 0), all.length - 1)]\n next?.focus()\n }\n\n const handleFlyoutArrowKeys = (e: React.KeyboardEvent) => {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return\n e.preventDefault()\n const buttons = Array.from(\n (e.currentTarget as HTMLElement).querySelectorAll<HTMLButtonElement>(\n 'button[data-as-flyout-item]:not([disabled])',\n ),\n )\n const index = buttons.indexOf(document.activeElement as HTMLButtonElement)\n const step = e.key === 'ArrowDown' ? 1 : buttons.length - 1\n buttons[(index + step) % buttons.length]?.focus()\n }\n\n const groupTriggerFor = (id: string) =>\n navRegions()\n .flatMap((r) =>\n Array.from(r.querySelectorAll<HTMLButtonElement>('[data-as-nav-group-id]')),\n )\n .find((b) => b.dataset.asNavGroupId === id)\n\n const firstChildFor = (id: string) =>\n navRegions()\n .flatMap((r) =>\n Array.from(r.querySelectorAll<HTMLButtonElement>('[data-as-nav-parent-id]')),\n )\n .find((b) => b.dataset.asNavParentId === id && !b.disabled)\n\n const handleListKeyDown = (e: React.KeyboardEvent) => {\n const button = (e.target as HTMLElement).closest<HTMLButtonElement>(\n '[data-as-nav-item]',\n )\n if (!button) return\n const groupId = button.dataset.asNavGroupId\n const parentId = button.dataset.asNavParentId\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n focusSibling(button, 1)\n break\n case 'ArrowUp':\n e.preventDefault()\n focusSibling(button, -1)\n break\n case 'Home': {\n e.preventDefault()\n visibleItems()[0]?.focus()\n break\n }\n case 'End': {\n e.preventDefault()\n const all = visibleItems()\n all[all.length - 1]?.focus()\n break\n }\n case 'ArrowRight':\n if (groupId) {\n e.preventDefault()\n if (!expanded.includes(groupId)) {\n setExpandedList([...expanded, groupId])\n } else {\n firstChildFor(groupId)?.focus()\n }\n }\n break\n case 'ArrowLeft':\n if (parentId) {\n e.preventDefault()\n groupTriggerFor(parentId)?.focus()\n } else if (groupId && expanded.includes(groupId)) {\n e.preventDefault()\n toggleGroup(groupId)\n }\n break\n }\n }\n\n const navAria = labels?.navAria ?? 'Main navigation'\n const rail = collapsed\n\n const flyoutHeader = (text: string) => (\n <div className=\"border-b border-[var(--as-border)] px-2 py-1.5 text-xs font-bold text-[var(--as-muted-fg)]\">\n {text}\n </div>\n )\n\n const renderItem = (item: NavItem, index: number, list: NavItem[]) => {\n // Group whose children were all filtered out app-side renders\n // nothing (presentational).\n if (item.children !== undefined && item.children.length === 0) {\n return null\n }\n const sectionSeen =\n !rail &&\n item.section !== undefined &&\n list.findIndex((i) => i.section === item.section) === index\n const sectionDivider = sectionSeen ? (\n <div\n role=\"presentation\"\n className=\"mt-2 border-t border-[var(--as-border)] px-3 pb-1 pt-3 text-[11px] font-bold uppercase tracking-wide text-[var(--as-muted-fg)]\"\n >\n {item.section}\n </div>\n ) : null\n const active = item.id === activeId\n const childActive = item.children?.some((c) => c.id === activeId) ?? false\n const isExpanded = expanded.includes(item.id)\n const Icon = item.icon\n const groupId = `${baseId}-group-${item.id}`\n\n if (item.children && item.children.length > 0 && rail) {\n return (\n <li key={item.id}>\n {sectionDivider}\n <PopoverPrimitive.Root\n open={openFlyout === item.id}\n onOpenChange={(open) => {\n if (!open) setOpenFlyout(null)\n }}\n >\n <PopoverPrimitive.Anchor asChild>\n <button\n type=\"button\"\n data-as-nav-item\n data-as-nav-group-id={item.id}\n disabled={item.disabled}\n aria-label={labels?.openGroup ?? `Open ${item.label} menu`}\n aria-haspopup=\"true\"\n aria-expanded={openFlyout === item.id}\n onClick={() => setOpenFlyout(item.id)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setOpenFlyout(item.id)\n }\n }}\n onMouseEnter={() => flyoutEnter(item.id)}\n onMouseLeave={flyoutLeave}\n className={cn(itemButtonClass(active || childActive), 'justify-center px-0')}\n >\n {Icon ? (\n <Icon\n className={cn(\n 'size-5 shrink-0',\n active || childActive\n ? 'text-[var(--as-primary)]'\n : 'text-[var(--as-muted-fg)]',\n )}\n aria-hidden\n />\n ) : null}\n </button>\n </PopoverPrimitive.Anchor>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side=\"right\"\n sideOffset={8}\n aria-label={item.label}\n onCloseAutoFocus={(e) => {\n // Menu-standard: focus returns to the trigger.\n e.preventDefault()\n groupTriggerFor(item.id)?.focus()\n }}\n onMouseEnter={flyoutEnterCancel}\n onMouseLeave={flyoutLeave}\n onKeyDown={handleFlyoutArrowKeys}\n className={flyoutContentClass}\n >\n {flyoutHeader(item.label)}\n <ul className=\"mt-1 space-y-0.5\">\n {item.children.map((child) => (\n <li key={child.id}>\n <button\n type=\"button\"\n data-as-flyout-item\n disabled={child.disabled}\n onClick={() => navigate(child.id)}\n aria-current={child.id === activeId ? 'page' : undefined}\n className={cn(\n 'flex w-full cursor-pointer items-center gap-2 rounded-[calc(var(--as-radius-sm)-2px)] px-2 py-1.5 text-left text-sm outline-none transition-colors focus:bg-[var(--as-secondary)] disabled:pointer-events-none disabled:opacity-50',\n child.id === activeId && 'font-bold text-[var(--as-primary)]',\n )}\n >\n {child.icon ? <child.icon aria-hidden /> : null}\n <span className=\"min-w-0 flex-1 truncate\">{child.label}</span>\n <ItemBadge badge={child.badge} active={child.id === activeId} />\n </button>\n </li>\n ))}\n </ul>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </li>\n )\n }\n\n if (item.children && item.children.length > 0) {\n return (\n <li key={item.id}>\n {sectionDivider}\n <button\n type=\"button\"\n data-as-nav-item\n data-as-nav-group-id={item.id}\n disabled={item.disabled}\n aria-expanded={isExpanded}\n aria-controls={groupId}\n onClick={() => toggleGroup(item.id)}\n className={itemButtonClass(active || childActive)}\n >\n {Icon ? (\n <Icon\n className={cn(\n 'size-4 shrink-0',\n active || childActive\n ? 'text-[var(--as-primary)]'\n : 'text-[var(--as-muted-fg)]',\n )}\n aria-hidden\n />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate\">{item.label}</span>\n <ItemBadge badge={item.badge} active={active || childActive} />\n {isExpanded ? (\n <ChevronDown className=\"size-4 shrink-0 text-[var(--as-muted-fg)]\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-4 shrink-0 text-[var(--as-muted-fg)]\" aria-hidden />\n )}\n </button>\n <ul id={groupId} hidden={!isExpanded} className=\"mt-1 space-y-0.5 pl-6\">\n {item.children.map((child) => {\n const childActiveItem = child.id === activeId\n const ChildIcon = child.icon\n const sectionSeen =\n child.section !== undefined &&\n item.children!.findIndex(\n (c) => c.section === child.section,\n ) === item.children!.indexOf(child)\n return (\n <li key={child.id}>\n {sectionSeen ? (\n <div\n role=\"presentation\"\n className=\"mt-2 border-t border-[var(--as-border)] px-3 pb-1 pt-3 text-[11px] font-bold uppercase tracking-wide text-[var(--as-muted-fg)]\"\n >\n {child.section}\n </div>\n ) : null}\n <button\n type=\"button\"\n data-as-nav-item\n data-as-nav-parent-id={item.id}\n disabled={child.disabled}\n aria-current={childActiveItem ? 'page' : undefined}\n onClick={() => navigate(child.id)}\n className={cn(\n itemButtonClass(childActiveItem),\n 'py-2 pl-3 pr-2',\n )}\n >\n {ChildIcon ? (\n <ChildIcon className=\"size-4 shrink-0\" aria-hidden />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate\">{child.label}</span>\n <ItemBadge badge={child.badge} active={childActiveItem} />\n </button>\n </li>\n )\n })}\n </ul>\n </li>\n )\n }\n\n return (\n <li key={item.id}>\n {sectionDivider}\n <button\n type=\"button\"\n data-as-nav-item\n disabled={item.disabled}\n title={rail ? item.label : undefined}\n aria-label={rail ? item.label : undefined}\n aria-current={active ? 'page' : undefined}\n onClick={() => navigate(item.id)}\n className={cn(itemButtonClass(active), rail && 'justify-center px-0')}\n >\n {Icon ? (\n <Icon\n className={cn(\n 'shrink-0',\n rail ? 'size-5' : 'size-4',\n active ? 'text-[var(--as-primary)]' : 'text-[var(--as-muted-fg)]',\n )}\n aria-hidden\n />\n ) : null}\n {!rail ? <span className=\"min-w-0 flex-1 truncate\">{item.label}</span> : null}\n {!rail ? <ItemBadge badge={item.badge} active={active} /> : null}\n </button>\n </li>\n )\n }\n\n return (\n <nav\n ref={ref}\n data-as=\"sidebar-nav\"\n aria-label={navAria}\n className={cn(\n 'relative flex h-full flex-col border-r border-[var(--as-border)] bg-[var(--as-surface)] text-[var(--as-fg)] transition-[width] duration-200',\n rail ? 'w-20' : 'w-64',\n className,\n )}\n >\n {collapsible ? (\n <div className=\"pointer-events-none absolute inset-y-0 -right-3 z-10 hidden flex-col justify-center lg:flex\">\n <button\n type=\"button\"\n onClick={() => onCollapsedChange?.(!collapsed)}\n title={\n collapsed\n ? (labels?.expand ?? 'Expand sidebar')\n : (labels?.collapse ?? 'Collapse sidebar')\n }\n aria-label={\n collapsed\n ? (labels?.expand ?? 'Expand sidebar')\n : (labels?.collapse ?? 'Collapse sidebar')\n }\n className=\"pointer-events-auto flex size-6 items-center justify-center rounded-lg border border-[var(--as-border)] bg-[var(--as-surface-raised)] text-[var(--as-muted-fg)] shadow-[var(--as-shadow-2)] transition-colors hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n {collapsed ? (\n <ChevronRight className=\"size-3.5\" aria-hidden />\n ) : (\n <ChevronLeft className=\"size-3.5\" aria-hidden />\n )}\n </button>\n </div>\n ) : null}\n\n {header ? <div className=\"shrink-0\">{header}</div> : null}\n\n <div\n ref={listRef}\n onKeyDown={handleListKeyDown}\n className={cn('min-h-0 flex-1 overflow-y-auto px-3 py-3', navClassName)}\n >\n <ul className=\"space-y-1\">\n {items.map((item, index) => renderItem(item, index, items))}\n </ul>\n </div>\n\n {secondaryItems && secondaryItems.length > 0 ? (\n <div\n ref={secondaryRef}\n onKeyDown={handleListKeyDown}\n className=\"shrink-0 border-t border-[var(--as-border)] px-3 py-3\"\n >\n <ul className=\"space-y-1\">\n {secondaryItems.map((item, index) => renderItem(item, index, secondaryItems))}\n </ul>\n </div>\n ) : null}\n\n {footer ? (\n <div className=\"shrink-0 border-t border-[var(--as-border)] p-3\">{footer}</div>\n ) : null}\n </nav>\n )\n },\n)\n"]}
|