@neuronection/assistant-ui 0.3.0 → 0.4.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 CHANGED
@@ -1,5 +1,21 @@
1
1
  # @neuronection/assistant-ui
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`5b2ff4c`](https://github.com/neuronection/assistant-ui/commit/5b2ff4cc6304c90fa8b15497fd554fd0a14ced21) Thanks [@constLiakos](https://github.com/constLiakos)! - Phase-3 groundwork for health-assistant adoption: `FormModal` gains
8
+ `headerActions`, `onReject`/`rejectLabel`, `hideFooter` and `bodyClassName`
9
+ (health's HITL flows need them); new `CopyButton` (clipboard with legacy
10
+ fallback, copied state, `onCopied`/`onCopyError` callbacks — apps own
11
+ toasts/i18n) and `Breadcrumbs` (router-free: `linkComponent` prop for SPA
12
+ links); `themes/health.css` now matches health's real blue-600 accent with a
13
+ `.dark` token block for its class-based dark mode. New `PanelModal`:
14
+ header (icon/title/actions/close) + scrollable body + sticky footer,
15
+ full-screen on mobile — the shared shape both career and health used as
16
+ their hand-rolled `Modal`. `DatePicker` gains `variant="unstyled"` for
17
+ inline dense usage.
18
+
3
19
  ## 0.3.0
4
20
 
5
21
  ### Minor Changes
package/README.md CHANGED
@@ -88,6 +88,7 @@ files in the package's `dist/`. Visual reference:
88
88
  | `check-indicator` / `selection-bar` / `view-toggle` | `CheckIndicator` (tri-state) · `SelectionBar` (bulk-select bar) · `ViewToggle` (grid/list) |
89
89
  | `error-banner` / `undo-notice` / `empty-state` / `spinner` | presentational feedback: alert banner with `action` slot · undo toast · `EmptyState` · `Spinner` |
90
90
  | `info-button` / `field-label` | `InfoButton` (info popover) · `FieldLabel` (label + info affordance) |
91
+ | `copy-button` / `breadcrumbs` | `CopyButton` (clipboard + copied state) · `Breadcrumbs` (SPA links via `linkComponent`) |
91
92
  | `marquee` | `useMarquee`, `MarqueeSurface`, `MarqueeBand` (rubber-band selection) |
92
93
  | `portal` / `theme-scope` / `tokens` | `Portal` · `ThemeScope` · token name lists + types |
93
94
 
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+
3
+ interface BreadcrumbItem {
4
+ label: string;
5
+ href?: string;
6
+ icon?: React.ReactNode;
7
+ }
8
+ interface BreadcrumbLinkProps {
9
+ href: string;
10
+ className?: string;
11
+ title?: string;
12
+ 'aria-label'?: string;
13
+ children: React.ReactNode;
14
+ }
15
+ interface BreadcrumbsProps extends React.ComponentProps<'nav'> {
16
+ items?: BreadcrumbItem[];
17
+ currentLabel?: string;
18
+ homeHref?: string;
19
+ homeLabel?: string;
20
+ linkComponent?: React.ComponentType<BreadcrumbLinkProps>;
21
+ }
22
+ declare const Breadcrumbs: React.ForwardRefExoticComponent<Omit<BreadcrumbsProps, "ref"> & React.RefAttributes<HTMLElement>>;
23
+
24
+ export { type BreadcrumbItem, type BreadcrumbLinkProps, Breadcrumbs, type BreadcrumbsProps };
@@ -0,0 +1,3 @@
1
+ export { Breadcrumbs } from './chunk-TFS2NUET.js';
2
+ //# sourceMappingURL=breadcrumbs.js.map
3
+ //# sourceMappingURL=breadcrumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"breadcrumbs.js"}
@@ -9,6 +9,7 @@ function FormModal({
9
9
  title,
10
10
  description,
11
11
  icon: Icon,
12
+ headerActions,
12
13
  children,
13
14
  onSubmit,
14
15
  submitting = false,
@@ -18,7 +19,11 @@ function FormModal({
18
19
  closeLabel = "Close",
19
20
  size = "md",
20
21
  contentClassName,
21
- footer
22
+ bodyClassName,
23
+ footer,
24
+ hideFooter = false,
25
+ onReject,
26
+ rejectLabel = "Reject"
22
27
  }) {
23
28
  return /* @__PURE__ */ jsx(Modal, { open, onOpenChange, children: /* @__PURE__ */ jsx(ModalContent, { size, closeLabel, "aria-describedby": void 0, children: /* @__PURE__ */ jsxs(
24
29
  "form",
@@ -35,12 +40,24 @@ function FormModal({
35
40
  /* @__PURE__ */ jsxs(ModalHeader, { children: [
36
41
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
37
42
  Icon ? /* @__PURE__ */ jsx("span", { className: "rounded-[var(--as-radius)] bg-[var(--as-secondary)] p-2 text-[var(--as-fg)]", children: /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "size-5" }) }) : null,
38
- /* @__PURE__ */ jsx(ModalTitle, { children: title })
43
+ /* @__PURE__ */ jsx(ModalTitle, { children: title }),
44
+ headerActions ? /* @__PURE__ */ jsx("span", { className: "ml-auto flex items-center gap-1.5", children: headerActions }) : null
39
45
  ] }),
40
46
  description ? /* @__PURE__ */ jsx(ModalDescription, { children: description }) : null
41
47
  ] }),
42
- /* @__PURE__ */ jsx("div", { className: "px-6 pb-2", children }),
43
- footer ?? /* @__PURE__ */ jsxs(ModalFooter, { children: [
48
+ /* @__PURE__ */ jsx("div", { className: cn("px-6 pb-2", bodyClassName), children }),
49
+ footer ?? (hideFooter ? null : /* @__PURE__ */ jsxs(ModalFooter, { children: [
50
+ onReject ? /* @__PURE__ */ jsx(
51
+ Button,
52
+ {
53
+ type: "button",
54
+ variant: "destructive",
55
+ onClick: onReject,
56
+ disabled: submitting,
57
+ className: "sm:mr-auto",
58
+ children: rejectLabel
59
+ }
60
+ ) : null,
44
61
  /* @__PURE__ */ jsx(
45
62
  Button,
46
63
  {
@@ -52,12 +69,12 @@ function FormModal({
52
69
  }
53
70
  ),
54
71
  onSubmit ? /* @__PURE__ */ jsx(Button, { type: "submit", disabled: submitDisabled || submitting, loading: submitting, children: submitLabel }) : null
55
- ] })
72
+ ] }))
56
73
  ]
57
74
  }
58
75
  ) }) });
59
76
  }
60
77
 
61
78
  export { FormModal };
62
- //# sourceMappingURL=chunk-GPIN2ITX.js.map
63
- //# sourceMappingURL=chunk-GPIN2ITX.js.map
79
+ //# sourceMappingURL=chunk-5HXDKOBY.js.map
80
+ //# sourceMappingURL=chunk-5HXDKOBY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form-modal/FormModal.tsx"],"names":[],"mappings":"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","file":"chunk-5HXDKOBY.js","sourcesContent":["import * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button/Button'\nimport {\n Modal,\n ModalContent,\n ModalDescription,\n ModalFooter,\n ModalHeader,\n ModalTitle,\n} from '../modal/Modal'\n\nexport interface FormModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: React.ReactNode\n description?: React.ReactNode\n icon?: LucideIcon\n headerActions?: React.ReactNode\n children: React.ReactNode\n onSubmit?: () => void\n submitting?: boolean\n submitDisabled?: boolean\n submitLabel?: string\n cancelLabel?: string\n closeLabel?: string\n size?: 'sm' | 'md' | 'lg' | 'xl'\n contentClassName?: string\n bodyClassName?: string\n footer?: React.ReactNode\n hideFooter?: boolean\n onReject?: () => void\n rejectLabel?: string\n}\n\nexport function FormModal({\n open,\n onOpenChange,\n title,\n description,\n icon: Icon,\n headerActions,\n children,\n onSubmit,\n submitting = false,\n submitDisabled = false,\n submitLabel = 'Save',\n cancelLabel = 'Cancel',\n closeLabel = 'Close',\n size = 'md',\n contentClassName,\n bodyClassName,\n footer,\n hideFooter = false,\n onReject,\n rejectLabel = 'Reject',\n}: FormModalProps) {\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size={size} closeLabel={closeLabel} aria-describedby={undefined}>\n <form\n data-as=\"form-modal\"\n className={cn('contents', contentClassName)}\n onSubmit={(event) => {\n event.preventDefault()\n if (!submitting && !submitDisabled) {\n onSubmit?.()\n }\n }}\n >\n <ModalHeader>\n <div className=\"flex items-center gap-3\">\n {Icon ? (\n <span className=\"rounded-[var(--as-radius)] bg-[var(--as-secondary)] p-2 text-[var(--as-fg)]\">\n <Icon aria-hidden=\"true\" className=\"size-5\" />\n </span>\n ) : null}\n <ModalTitle>{title}</ModalTitle>\n {headerActions ? (\n <span className=\"ml-auto flex items-center gap-1.5\">{headerActions}</span>\n ) : null}\n </div>\n {description ? <ModalDescription>{description}</ModalDescription> : null}\n </ModalHeader>\n <div className={cn('px-6 pb-2', bodyClassName)}>{children}</div>\n {footer ?? (hideFooter ? null : (\n <ModalFooter>\n {onReject ? (\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={onReject}\n disabled={submitting}\n className=\"sm:mr-auto\"\n >\n {rejectLabel}\n </Button>\n ) : null}\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={submitting}\n >\n {cancelLabel}\n </Button>\n {onSubmit ? (\n <Button type=\"submit\" disabled={submitDisabled || submitting} loading={submitting}>\n {submitLabel}\n </Button>\n ) : null}\n </ModalFooter>\n ))}\n </form>\n </ModalContent>\n </Modal>\n )\n}\n"]}
@@ -0,0 +1,89 @@
1
+ import { cn } from './chunk-BLJWR4ZV.js';
2
+ import * as React from 'react';
3
+ import { Check, Copy } from 'lucide-react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ function writeClipboard(value) {
7
+ if (navigator?.clipboard?.writeText) {
8
+ return navigator.clipboard.writeText(value);
9
+ }
10
+ return new Promise((resolve, reject) => {
11
+ try {
12
+ const textarea = document.createElement("textarea");
13
+ textarea.value = value;
14
+ textarea.style.position = "fixed";
15
+ textarea.style.opacity = "0";
16
+ document.body.appendChild(textarea);
17
+ textarea.select();
18
+ document.execCommand("copy");
19
+ document.body.removeChild(textarea);
20
+ resolve();
21
+ } catch (error) {
22
+ reject(error);
23
+ }
24
+ });
25
+ }
26
+ var CopyButton = React.forwardRef(
27
+ function CopyButton2({
28
+ value,
29
+ label = "Copy",
30
+ size = 14,
31
+ hideWhenEmpty = true,
32
+ copiedDuration = 1500,
33
+ onCopied,
34
+ onCopyError,
35
+ className,
36
+ onClick,
37
+ ...props
38
+ }, ref) {
39
+ const [copied, setCopied] = React.useState(false);
40
+ const timer = React.useRef(null);
41
+ React.useEffect(
42
+ () => () => {
43
+ if (timer.current) clearTimeout(timer.current);
44
+ },
45
+ []
46
+ );
47
+ if (hideWhenEmpty && !value) return null;
48
+ const Icon = copied ? Check : Copy;
49
+ return /* @__PURE__ */ jsx(
50
+ "button",
51
+ {
52
+ ref,
53
+ type: "button",
54
+ "data-as": "copy-button",
55
+ "data-copied": copied || void 0,
56
+ "aria-label": label,
57
+ title: label,
58
+ onClick: (event) => {
59
+ onClick?.(event);
60
+ if (event.defaultPrevented || !value) return;
61
+ event.preventDefault();
62
+ event.stopPropagation();
63
+ writeClipboard(value).then(
64
+ () => {
65
+ setCopied(true);
66
+ if (timer.current) clearTimeout(timer.current);
67
+ timer.current = setTimeout(() => setCopied(false), copiedDuration);
68
+ onCopied?.();
69
+ },
70
+ (error) => {
71
+ onCopyError?.(error);
72
+ }
73
+ );
74
+ },
75
+ className: cn(
76
+ "inline-flex cursor-pointer items-center justify-center rounded-[var(--as-radius-sm)] p-0.5 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]",
77
+ copied && "text-[var(--as-success)] hover:text-[var(--as-success)]",
78
+ className
79
+ ),
80
+ ...props,
81
+ children: /* @__PURE__ */ jsx(Icon, { style: { width: size, height: size }, "aria-hidden": true })
82
+ }
83
+ );
84
+ }
85
+ );
86
+
87
+ export { CopyButton };
88
+ //# sourceMappingURL=chunk-CZ2BL2ZL.js.map
89
+ //# sourceMappingURL=chunk-CZ2BL2ZL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/copy-button/CopyButton.tsx"],"names":["CopyButton"],"mappings":";;;;;AAeA,SAAS,eAAe,KAAA,EAA8B;AACpD,EAAA,IAAI,SAAA,EAAW,WAAW,SAAA,EAAW;AACnC,IAAA,OAAO,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,KAAK,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,MAAA,QAAA,CAAS,KAAA,GAAQ,KAAA;AACjB,MAAA,QAAA,CAAS,MAAM,QAAA,GAAW,OAAA;AAC1B,MAAA,QAAA,CAAS,MAAM,OAAA,GAAU,GAAA;AACzB,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAClC,MAAA,QAAA,CAAS,MAAA,EAAO;AAChB,MAAA,QAAA,CAAS,YAAY,MAAM,CAAA;AAC3B,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAClC,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAK,CAAA;AAAA,IACd;AAAA,EACF,CAAC,CAAA;AACH;AAEO,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EAC9B,SAASA,WAAAA,CACP;AAAA,IACE,KAAA;AAAA,IACA,KAAA,GAAQ,MAAA;AAAA,IACR,IAAA,GAAO,EAAA;AAAA,IACP,aAAA,GAAgB,IAAA;AAAA,IAChB,cAAA,GAAiB,IAAA;AAAA,IACjB,QAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,eAAS,KAAK,CAAA;AAChD,IAAA,MAAM,KAAA,GAAc,aAA6C,IAAI,CAAA;AAErE,IAAM,KAAA,CAAA,SAAA;AAAA,MACJ,MAAM,MAAM;AACV,QAAA,IAAI,KAAA,CAAM,OAAA,EAAS,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA;AAAA,MAC/C,CAAA;AAAA,MACA;AAAC,KACH;AAEA,IAAA,IAAI,aAAA,IAAiB,CAAC,KAAA,EAAO,OAAO,IAAA;AAEpC,IAAA,MAAM,IAAA,GAAO,SAAS,KAAA,GAAQ,IAAA;AAE9B,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAQ,aAAA;AAAA,QACR,eAAa,MAAA,IAAU,MAAA;AAAA,QACvB,YAAA,EAAY,KAAA;AAAA,QACZ,KAAA,EAAO,KAAA;AAAA,QACP,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,UAAA,OAAA,GAAU,KAAK,CAAA;AACf,UAAA,IAAI,KAAA,CAAM,gBAAA,IAAoB,CAAC,KAAA,EAAO;AACtC,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,UAAA,cAAA,CAAe,KAAK,CAAA,CAAE,IAAA;AAAA,YACpB,MAAM;AACJ,cAAA,SAAA,CAAU,IAAI,CAAA;AACd,cAAA,IAAI,KAAA,CAAM,OAAA,EAAS,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA;AAC7C,cAAA,KAAA,CAAM,UAAU,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,GAAG,cAAc,CAAA;AACjE,cAAA,QAAA,IAAW;AAAA,YACb,CAAA;AAAA,YACA,CAAC,KAAA,KAAU;AACT,cAAA,WAAA,GAAc,KAAK,CAAA;AAAA,YACrB;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,2QAAA;AAAA,UACA,MAAA,IAAU,yDAAA;AAAA,UACV;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,MAAM,MAAA,EAAQ,IAAA,EAAK,EAAG,aAAA,EAAW,IAAA,EAAC;AAAA;AAAA,KAC1D;AAAA,EAEJ;AACF","file":"chunk-CZ2BL2ZL.js","sourcesContent":["import * as React from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface CopyButtonProps\n extends Omit<React.ComponentProps<'button'>, 'value' | 'children'> {\n value: string\n label?: string\n size?: number\n hideWhenEmpty?: boolean\n copiedDuration?: number\n onCopied?: () => void\n onCopyError?: (error: unknown) => void\n}\n\nfunction writeClipboard(value: string): Promise<void> {\n if (navigator?.clipboard?.writeText) {\n return navigator.clipboard.writeText(value)\n }\n return new Promise((resolve, reject) => {\n try {\n const textarea = document.createElement('textarea')\n textarea.value = value\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n document.body.removeChild(textarea)\n resolve()\n } catch (error) {\n reject(error)\n }\n })\n}\n\nexport const CopyButton = React.forwardRef<HTMLButtonElement, CopyButtonProps>(\n function CopyButton(\n {\n value,\n label = 'Copy',\n size = 14,\n hideWhenEmpty = true,\n copiedDuration = 1500,\n onCopied,\n onCopyError,\n className,\n onClick,\n ...props\n },\n ref,\n ) {\n const [copied, setCopied] = React.useState(false)\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n React.useEffect(\n () => () => {\n if (timer.current) clearTimeout(timer.current)\n },\n [],\n )\n\n if (hideWhenEmpty && !value) return null\n\n const Icon = copied ? Check : Copy\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-as=\"copy-button\"\n data-copied={copied || undefined}\n aria-label={label}\n title={label}\n onClick={(event) => {\n onClick?.(event)\n if (event.defaultPrevented || !value) return\n event.preventDefault()\n event.stopPropagation()\n writeClipboard(value).then(\n () => {\n setCopied(true)\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => setCopied(false), copiedDuration)\n onCopied?.()\n },\n (error) => {\n onCopyError?.(error)\n },\n )\n }}\n className={cn(\n 'inline-flex cursor-pointer items-center justify-center rounded-[var(--as-radius-sm)] p-0.5 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n copied && 'text-[var(--as-success)] hover:text-[var(--as-success)]',\n className,\n )}\n {...props}\n >\n <Icon style={{ width: size, height: size }} aria-hidden />\n </button>\n )\n },\n)\n"]}
@@ -22,6 +22,7 @@ var DatePicker = React.forwardRef(
22
22
  weekStartsOn = 1,
23
23
  disabled = false,
24
24
  required,
25
+ variant = "default",
25
26
  id,
26
27
  name,
27
28
  label = "Choose date",
@@ -148,23 +149,24 @@ var DatePicker = React.forwardRef(
148
149
  type: "button",
149
150
  "aria-label": label,
150
151
  className: cn(
151
- "flex h-9 w-full items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-left text-sm text-[var(--as-fg)] transition-colors hover:border-[var(--as-fg)]/30 focus-visible:border-[var(--as-focus-ring)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50",
152
- allowClear && selectedDate && !disabled && "pr-8"
152
+ "disabled:cursor-not-allowed disabled:opacity-50",
153
+ variant === "default" ? "flex h-9 w-full items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-left text-sm text-[var(--as-fg)] transition-colors hover:border-[var(--as-fg)]/30 focus-visible:border-[var(--as-focus-ring)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]" : "flex items-center gap-1 text-left text-sm text-[var(--as-fg)] outline-none focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]",
154
+ variant === "default" && allowClear && selectedDate && !disabled && "pr-8"
153
155
  ),
154
156
  children: [
155
- /* @__PURE__ */ jsx(
157
+ variant === "default" ? /* @__PURE__ */ jsx(
156
158
  Calendar,
157
159
  {
158
160
  className: "size-4 shrink-0 text-[var(--as-muted-fg)]",
159
161
  "aria-hidden": true
160
162
  }
161
- ),
163
+ ) : null,
162
164
  /* @__PURE__ */ jsx(
163
165
  "span",
164
166
  {
165
167
  className: cn(
166
168
  "flex-1 truncate text-left",
167
- !selectedDate && "text-[var(--as-muted-fg)]"
169
+ !selectedDate && (variant === "default" ? "text-[var(--as-muted-fg)]" : "opacity-70")
168
170
  ),
169
171
  children: selectedDate ? format(selectedDate, displayFormat) : placeholder
170
172
  }
@@ -353,5 +355,5 @@ var DatePicker = React.forwardRef(
353
355
  );
354
356
 
355
357
  export { DatePicker };
356
- //# sourceMappingURL=chunk-2KO2YIZN.js.map
357
- //# sourceMappingURL=chunk-2KO2YIZN.js.map
358
+ //# sourceMappingURL=chunk-MEBOS2FX.js.map
359
+ //# sourceMappingURL=chunk-MEBOS2FX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/date-picker/DatePicker.tsx"],"names":["DatePicker","CalendarIcon"],"mappings":"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","file":"chunk-MEBOS2FX.js","sourcesContent":["import * as React from 'react'\nimport {\n addDays,\n addMonths,\n addYears,\n endOfMonth,\n endOfWeek,\n format,\n isSameDay,\n isSameMonth,\n isValid,\n parseISO,\n setMonth,\n setYear,\n startOfDay,\n startOfMonth,\n startOfWeek,\n subMonths,\n subYears,\n} from 'date-fns'\nimport {\n Calendar as CalendarIcon,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n X,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../popover'\n\ntype ViewMode = 'days' | 'months' | 'years'\n\nexport interface DatePickerProps {\n value: string | null | undefined\n onChange: (value: string) => void\n onClear?: () => void\n allowClear?: boolean\n clearLabel?: string\n placeholder?: string\n displayFormat?: string\n minDate?: Date\n maxDate?: Date\n weekStartsOn?: 0 | 1\n disabled?: boolean\n required?: boolean\n variant?: 'default' | 'unstyled'\n id?: string\n name?: string\n label?: string\n prevLabel?: string\n nextLabel?: string\n className?: string\n panelClassName?: string\n}\n\nfunction dayKey(date: Date): string {\n return format(date, 'yyyy-MM-dd')\n}\n\nexport const DatePicker = React.forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePicker(\n {\n value,\n onChange,\n onClear,\n allowClear = false,\n clearLabel = 'Clear',\n placeholder = 'Select date',\n displayFormat = 'dd/MM/yyyy',\n minDate,\n maxDate,\n weekStartsOn = 1,\n disabled = false,\n required,\n variant = 'default',\n id,\n name,\n label = 'Choose date',\n prevLabel = 'Previous',\n nextLabel = 'Next',\n className,\n panelClassName,\n },\n ref,\n ) {\n const autoId = React.useId()\n const hiddenId = id ?? `date-picker-${autoId}`\n const [open, setOpen] = React.useState(false)\n const [viewMode, setViewMode] = React.useState<ViewMode>('days')\n const [currentDate, setCurrentDate] = React.useState<Date>(() => new Date())\n const [focusedDay, setFocusedDay] = React.useState<Date>(() => new Date())\n const [yearPage, setYearPage] = React.useState(() => new Date().getFullYear())\n const gridRef = React.useRef<HTMLDivElement>(null)\n\n const selectedDate = React.useMemo(() => {\n if (!value) return null\n const parsed = parseISO(value)\n return isValid(parsed) ? parsed : null\n }, [value])\n\n const isDisabled = React.useCallback(\n (date: Date) =>\n Boolean(minDate && date < startOfDay(minDate)) ||\n Boolean(maxDate && date > startOfDay(maxDate)),\n [minDate, maxDate],\n )\n\n const handleOpenChange = (next: boolean) => {\n setOpen(next)\n if (next) {\n const base = selectedDate ?? new Date()\n setCurrentDate(base)\n setFocusedDay(base)\n setYearPage(base.getFullYear())\n setViewMode('days')\n }\n }\n\n const handleSelect = (date: Date) => {\n if (isDisabled(date)) return\n onChange(format(date, 'yyyy-MM-dd'))\n setOpen(false)\n }\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation()\n onChange('')\n onClear?.()\n setOpen(false)\n }\n\n const moveFocus = (next: Date) => {\n if (isDisabled(next)) return\n setFocusedDay(next)\n setCurrentDate((current) =>\n isSameMonth(current, next) ? current : startOfMonth(next),\n )\n }\n\n const handleGridKeyDown = (event: React.KeyboardEvent) => {\n const step =\n event.key === 'ArrowLeft'\n ? -1\n : event.key === 'ArrowRight'\n ? 1\n : event.key === 'ArrowUp'\n ? -7\n : event.key === 'ArrowDown'\n ? 7\n : 0\n if (step !== 0) {\n event.preventDefault()\n moveFocus(addDays(focusedDay, step))\n return\n }\n if (event.key === 'PageUp' || event.key === 'PageDown') {\n event.preventDefault()\n const direction = event.key === 'PageUp' ? -1 : 1\n moveFocus(addMonths(focusedDay, direction))\n return\n }\n if (event.key === 'Home') {\n event.preventDefault()\n moveFocus(startOfMonth(focusedDay))\n } else if (event.key === 'End') {\n event.preventDefault()\n moveFocus(endOfMonth(focusedDay))\n }\n }\n\n React.useEffect(() => {\n if (!open || viewMode !== 'days') return\n const target = gridRef.current?.querySelector<HTMLButtonElement>(\n `[data-day=\"${dayKey(focusedDay)}\"]`,\n )\n target?.focus()\n }, [open, viewMode, focusedDay])\n\n const monthStart = startOfMonth(currentDate)\n const monthEnd = endOfMonth(monthStart)\n const gridStart = startOfWeek(monthStart, { weekStartsOn })\n const gridEnd = endOfWeek(monthEnd, { weekStartsOn })\n\n const weeks: Date[][] = []\n let cursor = gridStart\n while (cursor <= gridEnd) {\n const week: Date[] = []\n for (let i = 0; i < 7; i++) {\n week.push(cursor)\n cursor = addDays(cursor, 1)\n }\n weeks.push(week)\n }\n\n const today = new Date()\n const weekdayStart = startOfWeek(new Date(), { weekStartsOn })\n\n const headerTitle =\n viewMode === 'days'\n ? format(currentDate, 'MMMM yyyy')\n : viewMode === 'months'\n ? format(currentDate, 'yyyy')\n : `${Math.floor(yearPage / 12) * 12} – ${Math.floor(yearPage / 12) * 12 + 11}`\n\n const handlePrev = () => {\n if (viewMode === 'days') setCurrentDate(subMonths(currentDate, 1))\n else if (viewMode === 'months') setCurrentDate(subYears(currentDate, 1))\n else setYearPage(yearPage - 12)\n }\n\n const handleNext = () => {\n if (viewMode === 'days') setCurrentDate(addMonths(currentDate, 1))\n else if (viewMode === 'months') setCurrentDate(addYears(currentDate, 1))\n else setYearPage(yearPage + 12)\n }\n\n const toggleViewMode = () => {\n if (viewMode !== 'years') setViewMode('years')\n }\n\n const navButtonClass =\n 'cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]'\n\n return (\n <div\n ref={ref}\n data-as=\"date-picker\"\n className={cn('relative w-full', className)}\n >\n <Popover open={open} onOpenChange={handleOpenChange}>\n <span className=\"relative inline-flex w-full\">\n <PopoverTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n aria-label={label}\n className={cn(\n 'disabled:cursor-not-allowed disabled:opacity-50',\n variant === 'default'\n ? 'flex h-9 w-full items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-left text-sm text-[var(--as-fg)] transition-colors hover:border-[var(--as-fg)]/30 focus-visible:border-[var(--as-focus-ring)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]'\n : 'flex items-center gap-1 text-left text-sm text-[var(--as-fg)] outline-none focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n variant === 'default' &&\n allowClear &&\n selectedDate &&\n !disabled &&\n 'pr-8',\n )}\n >\n {variant === 'default' ? (\n <CalendarIcon\n className=\"size-4 shrink-0 text-[var(--as-muted-fg)]\"\n aria-hidden\n />\n ) : null}\n <span\n className={cn(\n 'flex-1 truncate text-left',\n !selectedDate &&\n (variant === 'default' ? 'text-[var(--as-muted-fg)]' : 'opacity-70'),\n )}\n >\n {selectedDate\n ? format(selectedDate, displayFormat)\n : placeholder}\n </span>\n </button>\n </PopoverTrigger>\n {allowClear && selectedDate && !disabled ? (\n <button\n type=\"button\"\n aria-label={clearLabel}\n onClick={handleClear}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 cursor-pointer rounded-full p-0.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X className=\"size-3.5\" aria-hidden />\n </button>\n ) : null}\n </span>\n\n <input\n type=\"hidden\"\n id={hiddenId}\n name={name ?? hiddenId}\n value={value ?? ''}\n required={required}\n />\n\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n aria-label={label}\n onOpenAutoFocus={(event) => {\n event.preventDefault()\n const panel = event.currentTarget as HTMLElement | null\n const target = panel?.querySelector<HTMLButtonElement>(\n '[data-day][tabindex=\"0\"]',\n )\n target?.focus()\n }}\n className={cn(\n 'as-anim-pop z-50 w-[280px] rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-2 text-[var(--as-fg)] shadow-[var(--as-shadow-3)] outline-none',\n panelClassName,\n )}\n >\n <div className=\"mb-2 flex items-center justify-between px-1 pt-1\">\n <button\n type=\"button\"\n aria-label={prevLabel}\n onClick={handlePrev}\n className={navButtonClass}\n >\n <ChevronLeft className=\"size-5\" aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={toggleViewMode}\n className=\"flex cursor-pointer items-center rounded-[var(--as-radius-sm)] px-3 py-1.5 text-sm font-semibold transition-colors hover:bg-[var(--as-muted)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <span>{headerTitle}</span>\n {viewMode !== 'years' ? (\n <ChevronDown className=\"ml-1 size-4\" aria-hidden />\n ) : null}\n </button>\n <button\n type=\"button\"\n aria-label={nextLabel}\n onClick={handleNext}\n className={navButtonClass}\n >\n <ChevronRight className=\"size-5\" aria-hidden />\n </button>\n </div>\n\n {viewMode === 'days' ? (\n <div className=\"px-2 pb-2\">\n <div\n ref={gridRef}\n role=\"grid\"\n aria-label={label}\n onKeyDown={handleGridKeyDown}\n >\n <div role=\"row\" className=\"mb-2 grid grid-cols-7 gap-1\">\n {Array.from({ length: 7 }, (_, i) => (\n <div\n key={i}\n role=\"columnheader\"\n className=\"py-1 text-center text-xs font-medium text-[var(--as-muted-fg)]\"\n >\n {format(addDays(weekdayStart, i), 'EEEEE')}\n </div>\n ))}\n </div>\n {weeks.map((week, weekIndex) => (\n <div key={weekIndex} role=\"row\" className=\"grid grid-cols-7 gap-1\">\n {week.map((day) => {\n const isSelected = selectedDate\n ? isSameDay(day, selectedDate)\n : false\n const isFocused = isSameDay(day, focusedDay)\n const outside = !isSameMonth(day, monthStart)\n const isToday = isSameDay(day, today)\n const dayDisabled = isDisabled(day)\n return (\n <div\n key={dayKey(day)}\n role=\"gridcell\"\n aria-selected={isSelected}\n className=\"p-0\"\n >\n <button\n type=\"button\"\n data-day={dayKey(day)}\n tabIndex={isFocused ? 0 : -1}\n disabled={dayDisabled}\n aria-current={isToday ? 'date' : undefined}\n onClick={() => handleSelect(day)}\n className={cn(\n 'flex size-8 cursor-pointer items-center justify-center rounded-full text-sm transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n outside\n ? 'text-[var(--as-muted-fg)] opacity-50'\n : 'text-[var(--as-fg)]',\n isSelected &&\n 'bg-[var(--as-primary)] font-medium text-[var(--as-primary-fg)] hover:brightness-110',\n !isSelected &&\n isToday &&\n 'bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] font-medium text-[var(--as-primary)]',\n !isSelected && !dayDisabled && 'hover:bg-[var(--as-muted)]',\n dayDisabled &&\n 'cursor-not-allowed opacity-30 hover:bg-transparent',\n )}\n >\n {format(day, 'd')}\n </button>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n\n {viewMode === 'months' ? (\n <div className=\"grid grid-cols-3 gap-2 p-2\">\n {Array.from({ length: 12 }, (_, i) => {\n const isSelected =\n selectedDate?.getMonth() === i &&\n selectedDate?.getFullYear() === currentDate.getFullYear()\n return (\n <button\n key={i}\n type=\"button\"\n onClick={() => {\n setCurrentDate(setMonth(currentDate, i))\n setViewMode('days')\n }}\n className={cn(\n 'cursor-pointer rounded-[var(--as-radius)] py-3 text-sm font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n isSelected\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'text-[var(--as-fg)] hover:bg-[var(--as-muted)]',\n )}\n >\n {format(setMonth(new Date(), i), 'MMM')}\n </button>\n )\n })}\n </div>\n ) : null}\n\n {viewMode === 'years' ? (\n <div className=\"grid grid-cols-3 gap-2 p-2\">\n {Array.from({ length: 12 }, (_, i) => {\n const year = Math.floor(yearPage / 12) * 12 + i\n const isSelected = selectedDate?.getFullYear() === year\n return (\n <button\n key={year}\n type=\"button\"\n onClick={() => {\n setCurrentDate(setYear(currentDate, year))\n setFocusedDay((current) => setYear(current, year))\n setViewMode('months')\n }}\n className={cn(\n 'cursor-pointer rounded-[var(--as-radius)] py-3 text-sm font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n isSelected\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'text-[var(--as-fg)] hover:bg-[var(--as-muted)]',\n )}\n >\n {year}\n </button>\n )\n })}\n </div>\n ) : null}\n </PopoverContent>\n </Popover>\n </div>\n )\n },\n)\n"]}
@@ -0,0 +1,66 @@
1
+ import { cn } from './chunk-BLJWR4ZV.js';
2
+ import * as React from 'react';
3
+ import { House, ChevronRight } from 'lucide-react';
4
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
5
+
6
+ var linkClass = "text-[10px] font-bold uppercase tracking-wider text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-primary)]";
7
+ var Breadcrumbs = React.forwardRef(
8
+ function Breadcrumbs2({
9
+ items = [],
10
+ currentLabel,
11
+ homeHref,
12
+ homeLabel = "Home",
13
+ linkComponent: LinkComponent = "a",
14
+ className,
15
+ ...props
16
+ }, ref) {
17
+ if (items.length === 0 && !currentLabel && !homeHref) return null;
18
+ return /* @__PURE__ */ jsxs(
19
+ "nav",
20
+ {
21
+ ref,
22
+ "data-as": "breadcrumbs",
23
+ "aria-label": "Breadcrumb",
24
+ className: cn(
25
+ "flex flex-wrap items-center gap-x-1.5 gap-y-0.5 leading-tight",
26
+ className
27
+ ),
28
+ ...props,
29
+ children: [
30
+ homeHref ? /* @__PURE__ */ jsxs(Fragment, { children: [
31
+ /* @__PURE__ */ jsx(LinkComponent, { href: homeHref, className: "shrink-0 p-0.5 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-primary)]", "aria-label": homeLabel, title: homeLabel, children: /* @__PURE__ */ jsx(House, { className: "size-3", "aria-hidden": true }) }),
32
+ items.length > 0 || currentLabel ? /* @__PURE__ */ jsx(ChevronRight, { className: "size-2.5 shrink-0 text-[var(--as-muted-fg)] opacity-60", "aria-hidden": true }) : null
33
+ ] }) : null,
34
+ items.map((item, index) => {
35
+ const isLast = index === items.length - 1 && !currentLabel;
36
+ return /* @__PURE__ */ jsxs(React.Fragment, { children: [
37
+ index > 0 || homeHref ? /* @__PURE__ */ jsx(ChevronRight, { className: "size-2.5 shrink-0 text-[var(--as-muted-fg)] opacity-60", "aria-hidden": true }) : null,
38
+ item.href && !isLast ? /* @__PURE__ */ jsxs(LinkComponent, { href: item.href, className: linkClass, children: [
39
+ item.icon,
40
+ item.label
41
+ ] }) : /* @__PURE__ */ jsxs("span", { className: linkClass, children: [
42
+ item.icon,
43
+ item.label
44
+ ] })
45
+ ] }, `${item.label}-${index}`);
46
+ }),
47
+ currentLabel ? /* @__PURE__ */ jsxs(Fragment, { children: [
48
+ items.length > 0 || homeHref ? /* @__PURE__ */ jsx(ChevronRight, { className: "size-2.5 shrink-0 text-[var(--as-muted-fg)] opacity-60", "aria-hidden": true }) : null,
49
+ /* @__PURE__ */ jsx(
50
+ "span",
51
+ {
52
+ "aria-current": "page",
53
+ className: "text-[10px] font-black uppercase tracking-wider text-[var(--as-fg)]",
54
+ children: currentLabel
55
+ }
56
+ )
57
+ ] }) : null
58
+ ]
59
+ }
60
+ );
61
+ }
62
+ );
63
+
64
+ export { Breadcrumbs };
65
+ //# sourceMappingURL=chunk-TFS2NUET.js.map
66
+ //# sourceMappingURL=chunk-TFS2NUET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/breadcrumbs/Breadcrumbs.tsx"],"names":["Breadcrumbs","Fragment"],"mappings":";;;;;AA0BA,IAAM,SAAA,GACJ,2HAAA;AAEK,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASA,YAAAA,CACP;AAAA,IACE,QAAQ,EAAC;AAAA,IACT,YAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,GAAY,MAAA;AAAA,IACZ,eAAe,aAAA,GAAgB,GAAA;AAAA,IAC/B,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAK,CAAC,YAAA,IAAgB,CAAC,UAAU,OAAO,IAAA;AAE7D,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,aAAA;AAAA,QACR,YAAA,EAAW,YAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACT,+DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA,mBACC,IAAA,CAAAC,UAAA,EACE,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,6FAA4F,YAAA,EAAY,SAAA,EAAW,KAAA,EAAO,SAAA,EACjK,8BAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,aAAA,EAAW,MAAC,CAAA,EACxC,CAAA;AAAA,YACC,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,YAAA,mBACnB,GAAA,CAAC,gBAAa,SAAA,EAAU,wDAAA,EAAyD,aAAA,EAAW,IAAA,EAAC,CAAA,GAC3F;AAAA,WAAA,EACN,CAAA,GACE,IAAA;AAAA,UACH,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAC1B,YAAA,MAAM,MAAA,GAAS,KAAA,KAAU,KAAA,CAAM,MAAA,GAAS,KAAK,CAAC,YAAA;AAC9C,YAAA,uBACE,IAAA,CAAO,gBAAN,EACE,QAAA,EAAA;AAAA,cAAA,KAAA,GAAQ,CAAA,IAAK,2BACZ,GAAA,CAAC,YAAA,EAAA,EAAa,WAAU,wDAAA,EAAyD,aAAA,EAAW,MAAC,CAAA,GAC3F,IAAA;AAAA,cACH,IAAA,CAAK,IAAA,IAAQ,CAAC,MAAA,mBACb,IAAA,CAAC,iBAAc,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAA,EAAW,SAAA,EACxC,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,IAAA;AAAA,gBACL,IAAA,CAAK;AAAA,eAAA,EACR,CAAA,mBAEA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,SAAA,EACd,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,IAAA;AAAA,gBACL,IAAA,CAAK;AAAA,eAAA,EACR;AAAA,aAAA,EAAA,EAbiB,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAe3C,CAAA;AAAA,UAEJ,CAAC,CAAA;AAAA,UACA,YAAA,mBACC,IAAA,CAAAA,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,MAAA,GAAS,KAAK,QAAA,mBACnB,GAAA,CAAC,gBAAa,SAAA,EAAU,wDAAA,EAAyD,aAAA,EAAW,IAAA,EAAC,CAAA,GAC3F,IAAA;AAAA,4BACJ,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,cAAA,EAAa,MAAA;AAAA,gBACb,SAAA,EAAU,qEAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA;AACH,WAAA,EACF,CAAA,GACE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-TFS2NUET.js","sourcesContent":["import * as React from 'react'\nimport { ChevronRight, House } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface BreadcrumbItem {\n label: string\n href?: string\n icon?: React.ReactNode\n}\n\nexport interface BreadcrumbLinkProps {\n href: string\n className?: string\n title?: string\n 'aria-label'?: string\n children: React.ReactNode\n}\n\nexport interface BreadcrumbsProps extends React.ComponentProps<'nav'> {\n items?: BreadcrumbItem[]\n currentLabel?: string\n homeHref?: string\n homeLabel?: string\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>\n}\n\nconst linkClass =\n 'text-[10px] font-bold uppercase tracking-wider text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-primary)]'\n\nexport const Breadcrumbs = React.forwardRef<HTMLElement, BreadcrumbsProps>(\n function Breadcrumbs(\n {\n items = [],\n currentLabel,\n homeHref,\n homeLabel = 'Home',\n linkComponent: LinkComponent = 'a',\n className,\n ...props\n },\n ref,\n ) {\n if (items.length === 0 && !currentLabel && !homeHref) return null\n\n return (\n <nav\n ref={ref}\n data-as=\"breadcrumbs\"\n aria-label=\"Breadcrumb\"\n className={cn(\n 'flex flex-wrap items-center gap-x-1.5 gap-y-0.5 leading-tight',\n className,\n )}\n {...props}\n >\n {homeHref ? (\n <>\n <LinkComponent href={homeHref} className=\"shrink-0 p-0.5 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-primary)]\" aria-label={homeLabel} title={homeLabel}>\n <House className=\"size-3\" aria-hidden />\n </LinkComponent>\n {items.length > 0 || currentLabel ? (\n <ChevronRight className=\"size-2.5 shrink-0 text-[var(--as-muted-fg)] opacity-60\" aria-hidden />\n ) : null}\n </>\n ) : null}\n {items.map((item, index) => {\n const isLast = index === items.length - 1 && !currentLabel\n return (\n <React.Fragment key={`${item.label}-${index}`}>\n {index > 0 || homeHref ? (\n <ChevronRight className=\"size-2.5 shrink-0 text-[var(--as-muted-fg)] opacity-60\" aria-hidden />\n ) : null}\n {item.href && !isLast ? (\n <LinkComponent href={item.href} className={linkClass}>\n {item.icon}\n {item.label}\n </LinkComponent>\n ) : (\n <span className={linkClass}>\n {item.icon}\n {item.label}\n </span>\n )}\n </React.Fragment>\n )\n })}\n {currentLabel ? (\n <>\n {items.length > 0 || homeHref ? (\n <ChevronRight className=\"size-2.5 shrink-0 text-[var(--as-muted-fg)] opacity-60\" aria-hidden />\n ) : null}\n <span\n aria-current=\"page\"\n className=\"text-[10px] font-black uppercase tracking-wider text-[var(--as-fg)]\"\n >\n {currentLabel}\n </span>\n </>\n ) : null}\n </nav>\n )\n },\n)\n"]}
@@ -0,0 +1,92 @@
1
+ import { cn } from './chunk-BLJWR4ZV.js';
2
+ import * as React from 'react';
3
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
4
+ import { X } from 'lucide-react';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ var panelModalVariants = cva("", {
9
+ variants: {
10
+ size: {
11
+ sm: "sm:max-w-md",
12
+ md: "sm:max-w-2xl",
13
+ lg: "sm:max-w-4xl",
14
+ xl: "sm:max-w-6xl"
15
+ }
16
+ },
17
+ defaultVariants: {
18
+ size: "md"
19
+ }
20
+ });
21
+ var PanelModal = React.forwardRef(function PanelModal2({
22
+ open,
23
+ onOpenChange,
24
+ title,
25
+ headerIcon,
26
+ headerActions,
27
+ footer,
28
+ hideHeader = false,
29
+ bodyClassName,
30
+ closeLabel = "Close",
31
+ size,
32
+ className,
33
+ children,
34
+ ...props
35
+ }, ref) {
36
+ return /* @__PURE__ */ jsx(DialogPrimitive.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
37
+ /* @__PURE__ */ jsx(
38
+ DialogPrimitive.Overlay,
39
+ {
40
+ "data-as": "modal-overlay",
41
+ className: "as-anim-fade fixed inset-0 z-50 bg-[var(--as-overlay)]"
42
+ }
43
+ ),
44
+ /* @__PURE__ */ jsxs(
45
+ DialogPrimitive.Content,
46
+ {
47
+ ref,
48
+ "data-as": "panel-modal",
49
+ "aria-describedby": void 0,
50
+ className: cn(
51
+ "as-anim-pop fixed inset-0 z-50 flex flex-col overflow-y-auto bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none",
52
+ "sm:inset-auto sm:left-1/2 sm:top-1/2 sm:h-auto sm:max-h-[90vh] sm:w-auto sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-[var(--as-radius-lg)] sm:border sm:border-[var(--as-border)]",
53
+ panelModalVariants({ size }),
54
+ className
55
+ ),
56
+ ...props,
57
+ children: [
58
+ hideHeader ? /* @__PURE__ */ jsx(
59
+ DialogPrimitive.Close,
60
+ {
61
+ "aria-label": closeLabel,
62
+ className: "absolute right-3 top-3 z-10 rounded-[var(--as-radius-sm)] bg-[var(--as-surface-raised)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]",
63
+ children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", className: "size-4" })
64
+ }
65
+ ) : /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center justify-between gap-3 border-b border-[var(--as-border)] px-5 py-4 sm:px-6", children: [
66
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
67
+ headerIcon,
68
+ title ? /* @__PURE__ */ jsx(DialogPrimitive.Title, { className: "truncate font-semibold text-[var(--as-fg)]", children: title }) : null
69
+ ] }),
70
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
71
+ headerActions,
72
+ /* @__PURE__ */ jsx(
73
+ DialogPrimitive.Close,
74
+ {
75
+ "aria-label": closeLabel,
76
+ className: "rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]",
77
+ children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", className: "size-5" })
78
+ }
79
+ )
80
+ ] })
81
+ ] }),
82
+ /* @__PURE__ */ jsx("div", { className: cn("min-h-0 flex-1", hideHeader && "pt-10", bodyClassName ?? "p-5 sm:p-6"), children }),
83
+ footer ? /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-[var(--as-border)] px-5 py-4 sm:px-6", children: footer }) : null
84
+ ]
85
+ }
86
+ )
87
+ ] }) });
88
+ });
89
+
90
+ export { PanelModal };
91
+ //# sourceMappingURL=chunk-WPO6CDA4.js.map
92
+ //# sourceMappingURL=chunk-WPO6CDA4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/modal/PanelModal.tsx"],"names":["PanelModal"],"mappings":"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","file":"chunk-WPO6CDA4.js","sourcesContent":["import * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../lib/utils'\n\nconst panelModalVariants = cva('', {\n variants: {\n size: {\n sm: 'sm:max-w-md',\n md: 'sm:max-w-2xl',\n lg: 'sm:max-w-4xl',\n xl: 'sm:max-w-6xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport interface PanelModalProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n 'title'\n >,\n VariantProps<typeof panelModalVariants> {\n open: boolean\n onOpenChange: (open: boolean) => void\n title?: React.ReactNode\n headerIcon?: React.ReactNode\n headerActions?: React.ReactNode\n footer?: React.ReactNode\n hideHeader?: boolean\n bodyClassName?: string\n closeLabel?: string\n}\n\n/**\n * Dialog panel with a header (icon, title, actions, close), scrollable body\n * and optional sticky footer — full-screen on mobile, centered card on\n * desktop. For plain dialogs prefer the `Modal` parts; for forms prefer\n * `FormModal`.\n */\nexport const PanelModal = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n PanelModalProps\n>(function PanelModal(\n {\n open,\n onOpenChange,\n title,\n headerIcon,\n headerActions,\n footer,\n hideHeader = false,\n bodyClassName,\n closeLabel = 'Close',\n size,\n className,\n children,\n ...props\n },\n ref,\n) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n data-as=\"modal-overlay\"\n className=\"as-anim-fade fixed inset-0 z-50 bg-[var(--as-overlay)]\"\n />\n <DialogPrimitive.Content\n ref={ref}\n data-as=\"panel-modal\"\n aria-describedby={undefined}\n className={cn(\n 'as-anim-pop fixed inset-0 z-50 flex flex-col overflow-y-auto bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none',\n 'sm:inset-auto sm:left-1/2 sm:top-1/2 sm:h-auto sm:max-h-[90vh] sm:w-auto sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-[var(--as-radius-lg)] sm:border sm:border-[var(--as-border)]',\n panelModalVariants({ size }),\n className,\n )}\n {...props}\n >\n {hideHeader ? (\n <DialogPrimitive.Close\n aria-label={closeLabel}\n className=\"absolute right-3 top-3 z-10 rounded-[var(--as-radius-sm)] bg-[var(--as-surface-raised)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X aria-hidden=\"true\" className=\"size-4\" />\n </DialogPrimitive.Close>\n ) : (\n <div className=\"flex shrink-0 items-center justify-between gap-3 border-b border-[var(--as-border)] px-5 py-4 sm:px-6\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {headerIcon}\n {title ? (\n <DialogPrimitive.Title className=\"truncate font-semibold text-[var(--as-fg)]\">\n {title}\n </DialogPrimitive.Title>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {headerActions}\n <DialogPrimitive.Close\n aria-label={closeLabel}\n className=\"rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X aria-hidden=\"true\" className=\"size-5\" />\n </DialogPrimitive.Close>\n </div>\n </div>\n )}\n <div className={cn('min-h-0 flex-1', hideHeader && 'pt-10', bodyClassName ?? 'p-5 sm:p-6')}>\n {children}\n </div>\n {footer ? (\n <div className=\"shrink-0 border-t border-[var(--as-border)] px-5 py-4 sm:px-6\">\n {footer}\n </div>\n ) : null}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n})\n"]}
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+
3
+ interface CopyButtonProps extends Omit<React.ComponentProps<'button'>, 'value' | 'children'> {
4
+ value: string;
5
+ label?: string;
6
+ size?: number;
7
+ hideWhenEmpty?: boolean;
8
+ copiedDuration?: number;
9
+ onCopied?: () => void;
10
+ onCopyError?: (error: unknown) => void;
11
+ }
12
+ declare const CopyButton: React.ForwardRefExoticComponent<Omit<CopyButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
13
+
14
+ export { CopyButton, type CopyButtonProps };
@@ -0,0 +1,3 @@
1
+ export { CopyButton } from './chunk-CZ2BL2ZL.js';
2
+ //# sourceMappingURL=copy-button.js.map
3
+ //# sourceMappingURL=copy-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"copy-button.js"}
@@ -13,6 +13,7 @@ interface DatePickerProps {
13
13
  weekStartsOn?: 0 | 1;
14
14
  disabled?: boolean;
15
15
  required?: boolean;
16
+ variant?: 'default' | 'unstyled';
16
17
  id?: string;
17
18
  name?: string;
18
19
  label?: string;
@@ -1,3 +1,3 @@
1
- export { DatePicker } from './chunk-2KO2YIZN.js';
1
+ export { DatePicker } from './chunk-MEBOS2FX.js';
2
2
  //# sourceMappingURL=date-picker.js.map
3
3
  //# sourceMappingURL=date-picker.js.map
@@ -7,6 +7,7 @@ interface FormModalProps {
7
7
  title: React.ReactNode;
8
8
  description?: React.ReactNode;
9
9
  icon?: LucideIcon;
10
+ headerActions?: React.ReactNode;
10
11
  children: React.ReactNode;
11
12
  onSubmit?: () => void;
12
13
  submitting?: boolean;
@@ -16,8 +17,12 @@ interface FormModalProps {
16
17
  closeLabel?: string;
17
18
  size?: 'sm' | 'md' | 'lg' | 'xl';
18
19
  contentClassName?: string;
20
+ bodyClassName?: string;
19
21
  footer?: React.ReactNode;
22
+ hideFooter?: boolean;
23
+ onReject?: () => void;
24
+ rejectLabel?: string;
20
25
  }
21
- declare function FormModal({ open, onOpenChange, title, description, icon: Icon, children, onSubmit, submitting, submitDisabled, submitLabel, cancelLabel, closeLabel, size, contentClassName, footer, }: FormModalProps): React.JSX.Element;
26
+ declare function FormModal({ open, onOpenChange, title, description, icon: Icon, headerActions, children, onSubmit, submitting, submitDisabled, submitLabel, cancelLabel, closeLabel, size, contentClassName, bodyClassName, footer, hideFooter, onReject, rejectLabel, }: FormModalProps): React.JSX.Element;
22
27
 
23
28
  export { FormModal, type FormModalProps };
@@ -1,3 +1,3 @@
1
- export { FormModal } from './chunk-GPIN2ITX.js';
1
+ export { FormModal } from './chunk-5HXDKOBY.js';
2
2
  //# sourceMappingURL=form-modal.js.map
3
3
  //# sourceMappingURL=form-modal.js.map
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export { RawTokenName, SemanticTokenName, ThemeTokenName, ThemeTokens, rawTokens
4
4
  export { Portal, PortalProps } from './portal.js';
5
5
  export { ThemeScope, ThemeScopeProps } from './theme-scope.js';
6
6
  export { Badge, BadgeProps, badgeVariants } from './badge.js';
7
+ export { BreadcrumbItem, BreadcrumbLinkProps, Breadcrumbs, BreadcrumbsProps } from './breadcrumbs.js';
7
8
  export { Button, ButtonProps, buttonVariants } from './button.js';
8
9
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './card.js';
9
10
  export { CheckIndicator, CheckIndicatorProps } from './check-indicator.js';
@@ -11,6 +12,7 @@ export { ChipInput, ChipInputProps } from './chip-input.js';
11
12
  export { ChipList, ChipListProps, ChipVariant } from './chip-list.js';
12
13
  export { Combobox, ComboboxMulti, ComboboxMultiProps, ComboboxOption, ComboboxProps } from './combobox.js';
13
14
  export { ConfirmationModal, ConfirmationModalProps } from './confirmation-modal.js';
15
+ export { CopyButton, CopyButtonProps } from './copy-button.js';
14
16
  export { ContextMenu, ContextMenuItem, ContextMenuProps } from './context-menu.js';
15
17
  export { DatePicker, DatePickerProps } from './date-picker.js';
16
18
  export { EmptyState, EmptyStateProps } from './empty-state.js';
@@ -22,7 +24,7 @@ export { InfoButton, InfoButtonProps } from './info-button.js';
22
24
  export { Input, InputProps } from './input.js';
23
25
  export { MarqueeBand, MarqueePhase, MarqueeSelection, MarqueeSurface, MarqueeSurfaceProps, Rect, UseMarqueeOptions, hitTestIds, marqueeRect, rectsIntersect, useMarquee } from './marquee.js';
24
26
  export { ActionMenu, ActionMenuItem, ActionMenuProps, Menu, MenuContent, MenuGroup, MenuItem, MenuItemProps, MenuLabel, MenuSeparator, MenuTrigger } from './menu.js';
25
- export { Modal, ModalClose, ModalContent, ModalContentProps, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, modalContentVariants } from './modal.js';
27
+ export { Modal, ModalClose, ModalContent, ModalContentProps, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, PanelModal, PanelModalProps, modalContentVariants } from './modal.js';
26
28
  export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from './popover.js';
27
29
  export { PopoverButton, PopoverButtonProps } from './popover-button.js';
28
30
  export { RangeBar, RangeBarProps } from './range-bar.js';
package/dist/index.js CHANGED
@@ -1,3 +1,5 @@
1
+ export { Table } from './chunk-5X3RYDPC.js';
2
+ export { ThemeScope } from './chunk-TGU3PKNM.js';
1
3
  export { InfoTooltip, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './chunk-TJGX27YO.js';
2
4
  export { UndoNotice } from './chunk-OUHUVACM.js';
3
5
  export { ViewToggle } from './chunk-MXOBOS4Y.js';
@@ -7,32 +9,33 @@ export { RangeBar } from './chunk-5AVBKEDQ.js';
7
9
  export { ScaleSlider, scaleColorForValue } from './chunk-UIUALJNR.js';
8
10
  export { SearchInput } from './chunk-H5U4KNXF.js';
9
11
  export { SelectionBar } from './chunk-HSUCCANX.js';
10
- export { Table } from './chunk-5X3RYDPC.js';
11
- export { ThemeScope } from './chunk-TGU3PKNM.js';
12
- export { FormModal } from './chunk-GPIN2ITX.js';
12
+ export { ExpandableSearch } from './chunk-4SW3ESVI.js';
13
+ export { FieldLabel } from './chunk-ESUTPQDO.js';
14
+ export { FormModal } from './chunk-5HXDKOBY.js';
15
+ export { InfoButton } from './chunk-DV3MXDLN.js';
16
+ export { PopoverButton } from './chunk-N5KQRHXU.js';
13
17
  export { Input } from './chunk-COPPAHR5.js';
14
18
  export { MarqueeBand, MarqueeSurface, hitTestIds, marqueeRect, rectsIntersect, useMarquee } from './chunk-RU3DEF2O.js';
19
+ export { PanelModal } from './chunk-WPO6CDA4.js';
20
+ export { ChipList } from './chunk-XLD2BPTT.js';
15
21
  export { Combobox, ComboboxMulti } from './chunk-3522NABN.js';
16
22
  export { ConfirmationModal } from './chunk-GA3XIDVX.js';
17
23
  export { Modal, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, modalContentVariants } from './chunk-RHBQ3GZE.js';
24
+ export { CopyButton } from './chunk-CZ2BL2ZL.js';
18
25
  export { ContextMenu } from './chunk-WZSAUESL.js';
19
26
  export { ActionMenu, Menu, MenuContent, MenuGroup, MenuItem, MenuLabel, MenuSeparator, MenuTrigger } from './chunk-KXLMTAZ5.js';
20
- export { DatePicker } from './chunk-2KO2YIZN.js';
27
+ export { DatePicker } from './chunk-MEBOS2FX.js';
21
28
  export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from './chunk-CI56SSO2.js';
22
29
  export { EmptyState } from './chunk-KDJLYKR6.js';
23
30
  export { ErrorBanner } from './chunk-BJOY3XL7.js';
24
- export { ExpandableSearch } from './chunk-4SW3ESVI.js';
25
- export { FieldLabel } from './chunk-ESUTPQDO.js';
26
- export { InfoButton } from './chunk-DV3MXDLN.js';
27
- export { PopoverButton } from './chunk-N5KQRHXU.js';
28
31
  export { rawTokens, semanticTokens } from './chunk-3HFL3JGP.js';
29
32
  export { Badge, badgeVariants } from './chunk-SKTLC2XY.js';
33
+ export { Breadcrumbs } from './chunk-TFS2NUET.js';
30
34
  export { Button, buttonVariants } from './chunk-GTXGTQ6F.js';
31
35
  export { Spinner } from './chunk-INTST5VG.js';
32
36
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-HSWSYEFQ.js';
33
37
  export { CheckIndicator } from './chunk-XE4TFW63.js';
34
38
  export { ChipInput } from './chunk-TPLQL62V.js';
35
- export { ChipList } from './chunk-XLD2BPTT.js';
36
39
  export { cn } from './chunk-BLJWR4ZV.js';
37
40
  //# sourceMappingURL=index.js.map
38
41
  //# sourceMappingURL=index.js.map
package/dist/modal.d.ts CHANGED
@@ -18,4 +18,26 @@ declare const ModalTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.D
18
18
  declare const ModalDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
19
19
  declare const ModalFooter: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
20
20
 
21
- export { Modal, ModalClose, ModalContent, type ModalContentProps, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, modalContentVariants };
21
+ declare const panelModalVariants: (props?: ({
22
+ size?: "sm" | "md" | "lg" | "xl" | null | undefined;
23
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
24
+ interface PanelModalProps extends Omit<React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, 'title'>, VariantProps<typeof panelModalVariants> {
25
+ open: boolean;
26
+ onOpenChange: (open: boolean) => void;
27
+ title?: React.ReactNode;
28
+ headerIcon?: React.ReactNode;
29
+ headerActions?: React.ReactNode;
30
+ footer?: React.ReactNode;
31
+ hideHeader?: boolean;
32
+ bodyClassName?: string;
33
+ closeLabel?: string;
34
+ }
35
+ /**
36
+ * Dialog panel with a header (icon, title, actions, close), scrollable body
37
+ * and optional sticky footer — full-screen on mobile, centered card on
38
+ * desktop. For plain dialogs prefer the `Modal` parts; for forms prefer
39
+ * `FormModal`.
40
+ */
41
+ declare const PanelModal: React.ForwardRefExoticComponent<PanelModalProps & React.RefAttributes<HTMLDivElement>>;
42
+
43
+ export { Modal, ModalClose, ModalContent, type ModalContentProps, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, PanelModal, type PanelModalProps, modalContentVariants };
package/dist/modal.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { PanelModal } from './chunk-WPO6CDA4.js';
1
2
  export { Modal, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, modalContentVariants } from './chunk-RHBQ3GZE.js';
2
3
  //# sourceMappingURL=modal.js.map
3
4
  //# sourceMappingURL=modal.js.map
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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-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}}:root,:host{--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;--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);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--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-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-none{pointer-events:none}.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}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.right-7{right:calc(var(--spacing) * 7)}.left-1\/2{left:50%}.z-40{z-index:40}.z-50{z-index:50}.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}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.my-1{margin-block:var(--spacing)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.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}.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-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.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-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-9{min-height:calc(var(--spacing) * 9)}.w-4\/5{width:80%}.w-9{width:calc(var(--spacing) * 9)}.w-16{width:calc(var(--spacing) * 16)}.w-52{width:calc(var(--spacing) * 52)}.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-\[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-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-24{min-width:calc(var(--spacing) * 24)}.min-w-40{min-width:calc(var(--spacing) * 40)}.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-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.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-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}: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)))}: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)}.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-\[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}.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-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-\[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-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\)_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-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\)_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}.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)}.px-1{padding-inline:var(--spacing)}.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-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\.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-12{padding-block:calc(var(--spacing) * 12)}.pt-0{padding-top:0}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .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)}.text-center{text-align:center}.text-left{text-align:left}.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-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.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)}.whitespace-nowrap{white-space:nowrap}.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-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-fg\)\]{color:var(--as-warning-fg)}.text-inherit{color:inherit}.uppercase{text-transform:uppercase}.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)}.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-\[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-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-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\: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\: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\: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-\[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-fg\)\]:hover{color:var(--as-fg)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.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\: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-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-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}}.\[\&_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\]\:shrink-0 svg{flex-shrink:0}@keyframes as-fade-in{0%{opacity:0}to{opacity:1}}@keyframes as-zoom-in{0%{opacity:0;transform:translate(-50%,-50%)scale(.97)}to{opacity:1;transform:translate(-50%,-50%)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}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-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}@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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-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}}:root,:host{--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);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--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-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-none{pointer-events:none}.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}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:0}.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)}.left-1\/2{left:50%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.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}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.my-1{margin-block:var(--spacing)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.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-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.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-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)}.w-4\/5{width:80%}.w-9{width:calc(var(--spacing) * 9)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-52{width:calc(var(--spacing) * 52)}.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-\[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-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-24{min-width:calc(var(--spacing) * 24)}.min-w-40{min-width:calc(var(--spacing) * 40)}.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-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.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-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}: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-y-0\.5{row-gap:calc(var(--spacing) * .5)}: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)}.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-\[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}.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-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-\[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-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\)_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-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\)_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}.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)}.px-1{padding-inline:var(--spacing)}.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-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\.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-12{padding-block:calc(var(--spacing) * 12)}.pt-0{padding-top:0}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.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-8{padding-right:calc(var(--spacing) * 8)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .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)}.text-center{text-align:center}.text-left{text-align:left}.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-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.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-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.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)}.whitespace-nowrap{white-space:nowrap}.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-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-fg\)\]{color:var(--as-warning-fg)}.text-inherit{color:inherit}.uppercase{text-transform:uppercase}.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)}.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-\[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-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-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\: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\: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\: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-\[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-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\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.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\: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-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-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:40rem){.sm\:inset-auto{inset:auto}.sm\:top-1\/2{top:50%}.sm\:left-1\/2{left:50%}.sm\:mr-auto{margin-right:auto}.sm\:h-auto{height:auto}.sm\:max-h-\[90vh\]{max-height:90vh}.sm\:w-auto{width:auto}.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\:-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:flex-row{flex-direction:row}.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\:px-6{padding-inline:calc(var(--spacing) * 6)}}.\[\&_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\]\:shrink-0 svg{flex-shrink:0}@keyframes as-fade-in{0%{opacity:0}to{opacity:1}}@keyframes as-zoom-in{0%{opacity:0;transform:translate(-50%,-50%)scale(.97)}to{opacity:1;transform:translate(-50%,-50%)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}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-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}@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.0",
3
+ "version": "0.4.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",
@@ -26,6 +26,10 @@
26
26
  "types": "./dist/badge.d.ts",
27
27
  "import": "./dist/badge.js"
28
28
  },
29
+ "./breadcrumbs": {
30
+ "types": "./dist/breadcrumbs.d.ts",
31
+ "import": "./dist/breadcrumbs.js"
32
+ },
29
33
  "./button": {
30
34
  "types": "./dist/button.d.ts",
31
35
  "import": "./dist/button.js"
@@ -58,6 +62,10 @@
58
62
  "types": "./dist/context-menu.d.ts",
59
63
  "import": "./dist/context-menu.js"
60
64
  },
65
+ "./copy-button": {
66
+ "types": "./dist/copy-button.d.ts",
67
+ "import": "./dist/copy-button.js"
68
+ },
61
69
  "./date-picker": {
62
70
  "types": "./dist/date-picker.d.ts",
63
71
  "import": "./dist/date-picker.js"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/date-picker/DatePicker.tsx"],"names":["DatePicker","CalendarIcon"],"mappings":"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","file":"chunk-2KO2YIZN.js","sourcesContent":["import * as React from 'react'\nimport {\n addDays,\n addMonths,\n addYears,\n endOfMonth,\n endOfWeek,\n format,\n isSameDay,\n isSameMonth,\n isValid,\n parseISO,\n setMonth,\n setYear,\n startOfDay,\n startOfMonth,\n startOfWeek,\n subMonths,\n subYears,\n} from 'date-fns'\nimport {\n Calendar as CalendarIcon,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n X,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../popover'\n\ntype ViewMode = 'days' | 'months' | 'years'\n\nexport interface DatePickerProps {\n value: string | null | undefined\n onChange: (value: string) => void\n onClear?: () => void\n allowClear?: boolean\n clearLabel?: string\n placeholder?: string\n displayFormat?: string\n minDate?: Date\n maxDate?: Date\n weekStartsOn?: 0 | 1\n disabled?: boolean\n required?: boolean\n id?: string\n name?: string\n label?: string\n prevLabel?: string\n nextLabel?: string\n className?: string\n panelClassName?: string\n}\n\nfunction dayKey(date: Date): string {\n return format(date, 'yyyy-MM-dd')\n}\n\nexport const DatePicker = React.forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePicker(\n {\n value,\n onChange,\n onClear,\n allowClear = false,\n clearLabel = 'Clear',\n placeholder = 'Select date',\n displayFormat = 'dd/MM/yyyy',\n minDate,\n maxDate,\n weekStartsOn = 1,\n disabled = false,\n required,\n id,\n name,\n label = 'Choose date',\n prevLabel = 'Previous',\n nextLabel = 'Next',\n className,\n panelClassName,\n },\n ref,\n ) {\n const autoId = React.useId()\n const hiddenId = id ?? `date-picker-${autoId}`\n const [open, setOpen] = React.useState(false)\n const [viewMode, setViewMode] = React.useState<ViewMode>('days')\n const [currentDate, setCurrentDate] = React.useState<Date>(() => new Date())\n const [focusedDay, setFocusedDay] = React.useState<Date>(() => new Date())\n const [yearPage, setYearPage] = React.useState(() => new Date().getFullYear())\n const gridRef = React.useRef<HTMLDivElement>(null)\n\n const selectedDate = React.useMemo(() => {\n if (!value) return null\n const parsed = parseISO(value)\n return isValid(parsed) ? parsed : null\n }, [value])\n\n const isDisabled = React.useCallback(\n (date: Date) =>\n Boolean(minDate && date < startOfDay(minDate)) ||\n Boolean(maxDate && date > startOfDay(maxDate)),\n [minDate, maxDate],\n )\n\n const handleOpenChange = (next: boolean) => {\n setOpen(next)\n if (next) {\n const base = selectedDate ?? new Date()\n setCurrentDate(base)\n setFocusedDay(base)\n setYearPage(base.getFullYear())\n setViewMode('days')\n }\n }\n\n const handleSelect = (date: Date) => {\n if (isDisabled(date)) return\n onChange(format(date, 'yyyy-MM-dd'))\n setOpen(false)\n }\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation()\n onChange('')\n onClear?.()\n setOpen(false)\n }\n\n const moveFocus = (next: Date) => {\n if (isDisabled(next)) return\n setFocusedDay(next)\n setCurrentDate((current) =>\n isSameMonth(current, next) ? current : startOfMonth(next),\n )\n }\n\n const handleGridKeyDown = (event: React.KeyboardEvent) => {\n const step =\n event.key === 'ArrowLeft'\n ? -1\n : event.key === 'ArrowRight'\n ? 1\n : event.key === 'ArrowUp'\n ? -7\n : event.key === 'ArrowDown'\n ? 7\n : 0\n if (step !== 0) {\n event.preventDefault()\n moveFocus(addDays(focusedDay, step))\n return\n }\n if (event.key === 'PageUp' || event.key === 'PageDown') {\n event.preventDefault()\n const direction = event.key === 'PageUp' ? -1 : 1\n moveFocus(addMonths(focusedDay, direction))\n return\n }\n if (event.key === 'Home') {\n event.preventDefault()\n moveFocus(startOfMonth(focusedDay))\n } else if (event.key === 'End') {\n event.preventDefault()\n moveFocus(endOfMonth(focusedDay))\n }\n }\n\n React.useEffect(() => {\n if (!open || viewMode !== 'days') return\n const target = gridRef.current?.querySelector<HTMLButtonElement>(\n `[data-day=\"${dayKey(focusedDay)}\"]`,\n )\n target?.focus()\n }, [open, viewMode, focusedDay])\n\n const monthStart = startOfMonth(currentDate)\n const monthEnd = endOfMonth(monthStart)\n const gridStart = startOfWeek(monthStart, { weekStartsOn })\n const gridEnd = endOfWeek(monthEnd, { weekStartsOn })\n\n const weeks: Date[][] = []\n let cursor = gridStart\n while (cursor <= gridEnd) {\n const week: Date[] = []\n for (let i = 0; i < 7; i++) {\n week.push(cursor)\n cursor = addDays(cursor, 1)\n }\n weeks.push(week)\n }\n\n const today = new Date()\n const weekdayStart = startOfWeek(new Date(), { weekStartsOn })\n\n const headerTitle =\n viewMode === 'days'\n ? format(currentDate, 'MMMM yyyy')\n : viewMode === 'months'\n ? format(currentDate, 'yyyy')\n : `${Math.floor(yearPage / 12) * 12} – ${Math.floor(yearPage / 12) * 12 + 11}`\n\n const handlePrev = () => {\n if (viewMode === 'days') setCurrentDate(subMonths(currentDate, 1))\n else if (viewMode === 'months') setCurrentDate(subYears(currentDate, 1))\n else setYearPage(yearPage - 12)\n }\n\n const handleNext = () => {\n if (viewMode === 'days') setCurrentDate(addMonths(currentDate, 1))\n else if (viewMode === 'months') setCurrentDate(addYears(currentDate, 1))\n else setYearPage(yearPage + 12)\n }\n\n const toggleViewMode = () => {\n if (viewMode !== 'years') setViewMode('years')\n }\n\n const navButtonClass =\n 'cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]'\n\n return (\n <div\n ref={ref}\n data-as=\"date-picker\"\n className={cn('relative w-full', className)}\n >\n <Popover open={open} onOpenChange={handleOpenChange}>\n <span className=\"relative inline-flex w-full\">\n <PopoverTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n aria-label={label}\n className={cn(\n 'flex h-9 w-full items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-left text-sm text-[var(--as-fg)] transition-colors hover:border-[var(--as-fg)]/30 focus-visible:border-[var(--as-focus-ring)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50',\n allowClear && selectedDate && !disabled && 'pr-8',\n )}\n >\n <CalendarIcon\n className=\"size-4 shrink-0 text-[var(--as-muted-fg)]\"\n aria-hidden\n />\n <span\n className={cn(\n 'flex-1 truncate text-left',\n !selectedDate && 'text-[var(--as-muted-fg)]',\n )}\n >\n {selectedDate\n ? format(selectedDate, displayFormat)\n : placeholder}\n </span>\n </button>\n </PopoverTrigger>\n {allowClear && selectedDate && !disabled ? (\n <button\n type=\"button\"\n aria-label={clearLabel}\n onClick={handleClear}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 cursor-pointer rounded-full p-0.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X className=\"size-3.5\" aria-hidden />\n </button>\n ) : null}\n </span>\n\n <input\n type=\"hidden\"\n id={hiddenId}\n name={name ?? hiddenId}\n value={value ?? ''}\n required={required}\n />\n\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n aria-label={label}\n onOpenAutoFocus={(event) => {\n event.preventDefault()\n const panel = event.currentTarget as HTMLElement | null\n const target = panel?.querySelector<HTMLButtonElement>(\n '[data-day][tabindex=\"0\"]',\n )\n target?.focus()\n }}\n className={cn(\n 'as-anim-pop z-50 w-[280px] rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-2 text-[var(--as-fg)] shadow-[var(--as-shadow-3)] outline-none',\n panelClassName,\n )}\n >\n <div className=\"mb-2 flex items-center justify-between px-1 pt-1\">\n <button\n type=\"button\"\n aria-label={prevLabel}\n onClick={handlePrev}\n className={navButtonClass}\n >\n <ChevronLeft className=\"size-5\" aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={toggleViewMode}\n className=\"flex cursor-pointer items-center rounded-[var(--as-radius-sm)] px-3 py-1.5 text-sm font-semibold transition-colors hover:bg-[var(--as-muted)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <span>{headerTitle}</span>\n {viewMode !== 'years' ? (\n <ChevronDown className=\"ml-1 size-4\" aria-hidden />\n ) : null}\n </button>\n <button\n type=\"button\"\n aria-label={nextLabel}\n onClick={handleNext}\n className={navButtonClass}\n >\n <ChevronRight className=\"size-5\" aria-hidden />\n </button>\n </div>\n\n {viewMode === 'days' ? (\n <div className=\"px-2 pb-2\">\n <div\n ref={gridRef}\n role=\"grid\"\n aria-label={label}\n onKeyDown={handleGridKeyDown}\n >\n <div role=\"row\" className=\"mb-2 grid grid-cols-7 gap-1\">\n {Array.from({ length: 7 }, (_, i) => (\n <div\n key={i}\n role=\"columnheader\"\n className=\"py-1 text-center text-xs font-medium text-[var(--as-muted-fg)]\"\n >\n {format(addDays(weekdayStart, i), 'EEEEE')}\n </div>\n ))}\n </div>\n {weeks.map((week, weekIndex) => (\n <div key={weekIndex} role=\"row\" className=\"grid grid-cols-7 gap-1\">\n {week.map((day) => {\n const isSelected = selectedDate\n ? isSameDay(day, selectedDate)\n : false\n const isFocused = isSameDay(day, focusedDay)\n const outside = !isSameMonth(day, monthStart)\n const isToday = isSameDay(day, today)\n const dayDisabled = isDisabled(day)\n return (\n <div\n key={dayKey(day)}\n role=\"gridcell\"\n aria-selected={isSelected}\n className=\"p-0\"\n >\n <button\n type=\"button\"\n data-day={dayKey(day)}\n tabIndex={isFocused ? 0 : -1}\n disabled={dayDisabled}\n aria-current={isToday ? 'date' : undefined}\n onClick={() => handleSelect(day)}\n className={cn(\n 'flex size-8 cursor-pointer items-center justify-center rounded-full text-sm transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n outside\n ? 'text-[var(--as-muted-fg)] opacity-50'\n : 'text-[var(--as-fg)]',\n isSelected &&\n 'bg-[var(--as-primary)] font-medium text-[var(--as-primary-fg)] hover:brightness-110',\n !isSelected &&\n isToday &&\n 'bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] font-medium text-[var(--as-primary)]',\n !isSelected && !dayDisabled && 'hover:bg-[var(--as-muted)]',\n dayDisabled &&\n 'cursor-not-allowed opacity-30 hover:bg-transparent',\n )}\n >\n {format(day, 'd')}\n </button>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n\n {viewMode === 'months' ? (\n <div className=\"grid grid-cols-3 gap-2 p-2\">\n {Array.from({ length: 12 }, (_, i) => {\n const isSelected =\n selectedDate?.getMonth() === i &&\n selectedDate?.getFullYear() === currentDate.getFullYear()\n return (\n <button\n key={i}\n type=\"button\"\n onClick={() => {\n setCurrentDate(setMonth(currentDate, i))\n setViewMode('days')\n }}\n className={cn(\n 'cursor-pointer rounded-[var(--as-radius)] py-3 text-sm font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n isSelected\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'text-[var(--as-fg)] hover:bg-[var(--as-muted)]',\n )}\n >\n {format(setMonth(new Date(), i), 'MMM')}\n </button>\n )\n })}\n </div>\n ) : null}\n\n {viewMode === 'years' ? (\n <div className=\"grid grid-cols-3 gap-2 p-2\">\n {Array.from({ length: 12 }, (_, i) => {\n const year = Math.floor(yearPage / 12) * 12 + i\n const isSelected = selectedDate?.getFullYear() === year\n return (\n <button\n key={year}\n type=\"button\"\n onClick={() => {\n setCurrentDate(setYear(currentDate, year))\n setFocusedDay((current) => setYear(current, year))\n setViewMode('months')\n }}\n className={cn(\n 'cursor-pointer rounded-[var(--as-radius)] py-3 text-sm font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n isSelected\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'text-[var(--as-fg)] hover:bg-[var(--as-muted)]',\n )}\n >\n {year}\n </button>\n )\n })}\n </div>\n ) : null}\n </PopoverContent>\n </Popover>\n </div>\n )\n },\n)\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form-modal/FormModal.tsx"],"names":[],"mappings":";;;;;AA+BO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA,EAAM,IAAA;AAAA,EACN,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,cAAA,GAAiB,KAAA;AAAA,EACjB,WAAA,GAAc,MAAA;AAAA,EACd,WAAA,GAAc,QAAA;AAAA,EACd,UAAA,GAAa,OAAA;AAAA,EACb,IAAA,GAAO,IAAA;AAAA,EACP,gBAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,uBACE,GAAA,CAAC,SAAM,IAAA,EAAY,YAAA,EACjB,8BAAC,YAAA,EAAA,EAAa,IAAA,EAAY,UAAA,EAAwB,kBAAA,EAAkB,MAAA,EAClE,QAAA,kBAAA,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAQ,YAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,gBAAgB,CAAA;AAAA,MAC1C,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,IAAI,CAAC,UAAA,IAAc,CAAC,cAAA,EAAgB;AAClC,UAAA,QAAA,IAAW;AAAA,QACb;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,IAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6EAAA,EACd,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,QAAA,EAAS,CAAA,EAC9C,CAAA,GACE,IAAA;AAAA,4BACJ,GAAA,CAAC,cAAY,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EACrB,CAAA;AAAA,UACC,WAAA,mBAAc,GAAA,CAAC,gBAAA,EAAA,EAAkB,QAAA,EAAA,WAAA,EAAY,CAAA,GAAsB;AAAA,SAAA,EACtE,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAa,QAAA,EAAS,CAAA;AAAA,QACpC,MAAA,yBACE,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,cACjC,QAAA,EAAU,UAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UACC,QAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,cAAA,IAAkB,UAAA,EAAY,OAAA,EAAS,UAAA,EACpE,QAAA,EAAA,WAAA,EACH,CAAA,GACE;AAAA,SAAA,EACN;AAAA;AAAA;AAAA,KAGN,CAAA,EACF,CAAA;AAEJ","file":"chunk-GPIN2ITX.js","sourcesContent":["import * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button/Button'\nimport {\n Modal,\n ModalContent,\n ModalDescription,\n ModalFooter,\n ModalHeader,\n ModalTitle,\n} from '../modal/Modal'\n\nexport interface FormModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: React.ReactNode\n description?: React.ReactNode\n icon?: LucideIcon\n children: React.ReactNode\n onSubmit?: () => void\n submitting?: boolean\n submitDisabled?: boolean\n submitLabel?: string\n cancelLabel?: string\n closeLabel?: string\n size?: 'sm' | 'md' | 'lg' | 'xl'\n contentClassName?: string\n footer?: React.ReactNode\n}\n\nexport function FormModal({\n open,\n onOpenChange,\n title,\n description,\n icon: Icon,\n children,\n onSubmit,\n submitting = false,\n submitDisabled = false,\n submitLabel = 'Save',\n cancelLabel = 'Cancel',\n closeLabel = 'Close',\n size = 'md',\n contentClassName,\n footer,\n}: FormModalProps) {\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size={size} closeLabel={closeLabel} aria-describedby={undefined}>\n <form\n data-as=\"form-modal\"\n className={cn('contents', contentClassName)}\n onSubmit={(event) => {\n event.preventDefault()\n if (!submitting && !submitDisabled) {\n onSubmit?.()\n }\n }}\n >\n <ModalHeader>\n <div className=\"flex items-center gap-3\">\n {Icon ? (\n <span className=\"rounded-[var(--as-radius)] bg-[var(--as-secondary)] p-2 text-[var(--as-fg)]\">\n <Icon aria-hidden=\"true\" className=\"size-5\" />\n </span>\n ) : null}\n <ModalTitle>{title}</ModalTitle>\n </div>\n {description ? <ModalDescription>{description}</ModalDescription> : null}\n </ModalHeader>\n <div className=\"px-6 pb-2\">{children}</div>\n {footer ?? (\n <ModalFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={submitting}\n >\n {cancelLabel}\n </Button>\n {onSubmit ? (\n <Button type=\"submit\" disabled={submitDisabled || submitting} loading={submitting}>\n {submitLabel}\n </Button>\n ) : null}\n </ModalFooter>\n )}\n </form>\n </ModalContent>\n </Modal>\n )\n}\n"]}
@@ -1,3 +0,0 @@
1
-
2
- //# sourceMappingURL=chunk-IFNT6JSQ.js.map
3
- //# sourceMappingURL=chunk-IFNT6JSQ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-IFNT6JSQ.js"}