@neuronection/assistant-ui 0.6.0 → 0.7.1

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.
Files changed (71) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +2 -0
  3. package/dist/ai-magic-fill.js +1 -1
  4. package/dist/{chunk-TKKHWO6C.js → chunk-2YQSA5AE.js} +3 -3
  5. package/dist/{chunk-TKKHWO6C.js.map → chunk-2YQSA5AE.js.map} +1 -1
  6. package/dist/{chunk-W5WDGME5.js → chunk-3RDFWXX6.js} +9 -6
  7. package/dist/chunk-3RDFWXX6.js.map +1 -0
  8. package/dist/{chunk-2EPZAT3X.js → chunk-62GIJMWT.js} +3 -3
  9. package/dist/{chunk-2EPZAT3X.js.map → chunk-62GIJMWT.js.map} +1 -1
  10. package/dist/{chunk-UU2V5FGF.js → chunk-6VCJX4CP.js} +3 -3
  11. package/dist/{chunk-UU2V5FGF.js.map → chunk-6VCJX4CP.js.map} +1 -1
  12. package/dist/chunk-AHLNXCP2.js +74 -0
  13. package/dist/chunk-AHLNXCP2.js.map +1 -0
  14. package/dist/{chunk-L4NM55XW.js → chunk-EODV6JK7.js} +3 -3
  15. package/dist/{chunk-L4NM55XW.js.map → chunk-EODV6JK7.js.map} +1 -1
  16. package/dist/{chunk-BWPNEQ3T.js → chunk-G6557MEN.js} +3 -3
  17. package/dist/{chunk-BWPNEQ3T.js.map → chunk-G6557MEN.js.map} +1 -1
  18. package/dist/chunk-IQKP2BWE.js +78 -0
  19. package/dist/chunk-IQKP2BWE.js.map +1 -0
  20. package/dist/chunk-J4OELYDR.js +125 -0
  21. package/dist/chunk-J4OELYDR.js.map +1 -0
  22. package/dist/chunk-OPTH3VUY.js +63 -0
  23. package/dist/chunk-OPTH3VUY.js.map +1 -0
  24. package/dist/{chunk-5AVBKEDQ.js → chunk-PFAH25VU.js} +3 -3
  25. package/dist/{chunk-5AVBKEDQ.js.map → chunk-PFAH25VU.js.map} +1 -1
  26. package/dist/chunk-RJSN4TVT.js +89 -0
  27. package/dist/chunk-RJSN4TVT.js.map +1 -0
  28. package/dist/chunk-RLFND34I.js +3 -0
  29. package/dist/chunk-RLFND34I.js.map +1 -0
  30. package/dist/chunk-TN35RR2R.js +92 -0
  31. package/dist/chunk-TN35RR2R.js.map +1 -0
  32. package/dist/chunk-UWHUCQC6.js +73 -0
  33. package/dist/chunk-UWHUCQC6.js.map +1 -0
  34. package/dist/chunk-VKV464ZF.js +3 -0
  35. package/dist/chunk-VKV464ZF.js.map +1 -0
  36. package/dist/{chunk-SXVOJ7WE.js → chunk-Y7BKBG57.js} +3 -3
  37. package/dist/{chunk-SXVOJ7WE.js.map → chunk-Y7BKBG57.js.map} +1 -1
  38. package/dist/{chunk-75QQR2VT.js → chunk-YMCMUAIF.js} +3 -3
  39. package/dist/{chunk-75QQR2VT.js.map → chunk-YMCMUAIF.js.map} +1 -1
  40. package/dist/combobox.d.ts +1 -0
  41. package/dist/combobox.js +1 -1
  42. package/dist/confirmation-modal.js +1 -1
  43. package/dist/connection-test-row.js +1 -71
  44. package/dist/connection-test-row.js.map +1 -1
  45. package/dist/date-picker.js +1 -1
  46. package/dist/file-card.d.ts +25 -0
  47. package/dist/file-card.js +3 -0
  48. package/dist/file-card.js.map +1 -0
  49. package/dist/file-queue.d.ts +32 -0
  50. package/dist/file-queue.js +3 -0
  51. package/dist/file-queue.js.map +1 -0
  52. package/dist/form-modal.js +1 -1
  53. package/dist/index.d.ts +30 -2
  54. package/dist/index.js +149 -11
  55. package/dist/index.js.map +1 -1
  56. package/dist/modal.js +2 -2
  57. package/dist/model-picker.d.ts +38 -0
  58. package/dist/model-picker.js +3 -0
  59. package/dist/model-picker.js.map +1 -0
  60. package/dist/provider-form.js +1 -87
  61. package/dist/provider-form.js.map +1 -1
  62. package/dist/range-bar.js +1 -1
  63. package/dist/settings-shell.js +1 -72
  64. package/dist/settings-shell.js.map +1 -1
  65. package/dist/styles.css +1 -1
  66. package/dist/task-assignment-picker.d.ts +27 -0
  67. package/dist/task-assignment-picker.js +3 -0
  68. package/dist/task-assignment-picker.js.map +1 -0
  69. package/dist/wizard.js +1 -1
  70. package/package.json +21 -1
  71. package/dist/chunk-W5WDGME5.js.map +0 -1
@@ -0,0 +1,73 @@
1
+ import { Spinner } from './chunk-INTST5VG.js';
2
+ import { cn } from './chunk-BLJWR4ZV.js';
3
+ import * as React from 'react';
4
+ import { X, Check, TriangleAlert } from 'lucide-react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var ConnectionTestRow = React.forwardRef(function ConnectionTestRow2({
8
+ status,
9
+ latencyMs,
10
+ label = "Connection",
11
+ testLabel = "Test",
12
+ okLabel = "Connected",
13
+ failLabel = "Failed",
14
+ latencyLabel = "ms",
15
+ errorMessage,
16
+ onTest,
17
+ disabled = false,
18
+ className
19
+ }, ref) {
20
+ const state = status === "ok" ? { text: okLabel, icon: /* @__PURE__ */ jsx(Check, { className: "size-3.5", "aria-hidden": true }), tone: "text-[var(--as-success)]" } : status === "fail" ? {
21
+ text: failLabel,
22
+ icon: /* @__PURE__ */ jsx(TriangleAlert, { className: "size-3.5", "aria-hidden": true }),
23
+ tone: "text-[var(--as-danger)]"
24
+ } : null;
25
+ return /* @__PURE__ */ jsxs(
26
+ "div",
27
+ {
28
+ ref,
29
+ "data-as": "connection-test-row",
30
+ "data-status": status,
31
+ className: cn(
32
+ "flex items-center justify-between gap-3 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2",
33
+ className
34
+ ),
35
+ children: [
36
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2 text-sm", children: [
37
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-[var(--as-fg)]", children: label }),
38
+ status === "testing" ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5 text-[var(--as-muted-fg)]", role: "status", children: [
39
+ /* @__PURE__ */ jsx(Spinner, { size: "sm" }),
40
+ testLabel,
41
+ "\u2026"
42
+ ] }) : state ? /* @__PURE__ */ jsxs("span", { className: cn("flex items-center gap-1 font-medium", state.tone), children: [
43
+ state.icon,
44
+ state.text,
45
+ status === "ok" && latencyMs != null ? /* @__PURE__ */ jsxs("span", { className: "font-normal text-[var(--as-muted-fg)]", children: [
46
+ "\xB7 ",
47
+ latencyMs,
48
+ latencyLabel
49
+ ] }) : null
50
+ ] }) : null,
51
+ status === "fail" && errorMessage ? /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-[var(--as-danger)]", children: errorMessage }) : null
52
+ ] }),
53
+ onTest ? /* @__PURE__ */ jsxs(
54
+ "button",
55
+ {
56
+ type: "button",
57
+ onClick: onTest,
58
+ disabled: disabled || status === "testing",
59
+ className: "shrink-0 cursor-pointer rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-2.5 py-1 text-xs font-medium text-[var(--as-fg)] transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50",
60
+ children: [
61
+ status === "fail" ? /* @__PURE__ */ jsx(X, { className: "mr-1 inline size-3", "aria-hidden": true }) : null,
62
+ testLabel
63
+ ]
64
+ }
65
+ ) : null
66
+ ]
67
+ }
68
+ );
69
+ });
70
+
71
+ export { ConnectionTestRow };
72
+ //# sourceMappingURL=chunk-UWHUCQC6.js.map
73
+ //# sourceMappingURL=chunk-UWHUCQC6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/connection-test-row/ConnectionTestRow.tsx"],"names":["ConnectionTestRow"],"mappings":";;;;;;AAyBO,IAAM,iBAAA,GAA0B,KAAA,CAAA,UAAA,CAGrC,SAASA,kBAAAA,CACT;AAAA,EACE,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,YAAA;AAAA,EACR,SAAA,GAAY,MAAA;AAAA,EACZ,OAAA,GAAU,WAAA;AAAA,EACV,SAAA,GAAY,QAAA;AAAA,EACZ,YAAA,GAAe,IAAA;AAAA,EACf,YAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,QACJ,MAAA,KAAW,IAAA,GACP,EAAE,IAAA,EAAM,OAAA,EAAS,sBAAM,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA,EAAI,MAAM,0BAAA,EAA2B,GACpG,WAAW,MAAA,GACT;AAAA,IACE,IAAA,EAAM,SAAA;AAAA,IACN,sBAAM,GAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,IACtD,IAAA,EAAM;AAAA,GACR,GACA,IAAA;AAER,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,sIAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EAAmC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACxD,WAAW,SAAA,mBACV,IAAA,CAAC,UAAK,SAAA,EAAU,qDAAA,EAAsD,MAAK,QAAA,EACzE,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,MAAK,IAAA,EAAK,CAAA;AAAA,YAClB,SAAA;AAAA,YAAU;AAAA,WAAA,EACb,CAAA,GACE,wBACF,IAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,qCAAA,EAAuC,KAAA,CAAM,IAAI,CAAA,EAClE,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,IAAA;AAAA,YACN,KAAA,CAAM,IAAA;AAAA,YACN,WAAW,IAAA,IAAQ,SAAA,IAAa,uBAC/B,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uCAAA,EAAwC,QAAA,EAAA;AAAA,cAAA,OAAA;AAAA,cACnD,SAAA;AAAA,cACF;AAAA,aAAA,EACH,CAAA,GACE;AAAA,WAAA,EACN,CAAA,GACE,IAAA;AAAA,UACH,MAAA,KAAW,UAAU,YAAA,mBACpB,GAAA,CAAC,UAAK,SAAA,EAAU,0CAAA,EACb,wBACH,CAAA,GACE;AAAA,SAAA,EACN,CAAA;AAAA,QACC,MAAA,mBACC,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,QAAA,EAAU,YAAY,MAAA,KAAW,SAAA;AAAA,YACjC,SAAA,EAAU,kVAAA;AAAA,YAET,QAAA,EAAA;AAAA,cAAA,MAAA,KAAW,yBAAS,GAAA,CAAC,CAAA,EAAA,EAAE,WAAU,oBAAA,EAAqB,aAAA,EAAW,MAAC,CAAA,GAAK,IAAA;AAAA,cACvE;AAAA;AAAA;AAAA,SACH,GACE;AAAA;AAAA;AAAA,GACN;AAEJ,CAAC","file":"chunk-UWHUCQC6.js","sourcesContent":["import * as React from 'react'\nimport { Check, TriangleAlert, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Spinner } from '../spinner/Spinner'\n\nexport type ConnectionTestStatus = 'idle' | 'testing' | 'ok' | 'fail'\n\nexport interface ConnectionTestRowProps {\n status: ConnectionTestStatus\n latencyMs?: number | null\n label?: string\n testLabel?: string\n okLabel?: string\n failLabel?: string\n latencyLabel?: string\n errorMessage?: string | null\n onTest?: () => void\n disabled?: boolean\n className?: string\n}\n\n/**\n * Presentational connection-test row (idle/testing/ok/fail + latency).\n * The actual ping is app-side: flip `status` from the test handler.\n */\nexport const ConnectionTestRow = React.forwardRef<\n HTMLDivElement,\n ConnectionTestRowProps\n>(function ConnectionTestRow(\n {\n status,\n latencyMs,\n label = 'Connection',\n testLabel = 'Test',\n okLabel = 'Connected',\n failLabel = 'Failed',\n latencyLabel = 'ms',\n errorMessage,\n onTest,\n disabled = false,\n className,\n },\n ref,\n) {\n const state =\n status === 'ok'\n ? { text: okLabel, icon: <Check className=\"size-3.5\" aria-hidden />, tone: 'text-[var(--as-success)]' }\n : status === 'fail'\n ? {\n text: failLabel,\n icon: <TriangleAlert className=\"size-3.5\" aria-hidden />,\n tone: 'text-[var(--as-danger)]',\n }\n : null\n\n return (\n <div\n ref={ref}\n data-as=\"connection-test-row\"\n data-status={status}\n className={cn(\n 'flex items-center justify-between gap-3 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2',\n className,\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2 text-sm\">\n <span className=\"font-medium text-[var(--as-fg)]\">{label}</span>\n {status === 'testing' ? (\n <span className=\"flex items-center gap-1.5 text-[var(--as-muted-fg)]\" role=\"status\">\n <Spinner size=\"sm\" />\n {testLabel}…\n </span>\n ) : state ? (\n <span className={cn('flex items-center gap-1 font-medium', state.tone)}>\n {state.icon}\n {state.text}\n {status === 'ok' && latencyMs != null ? (\n <span className=\"font-normal text-[var(--as-muted-fg)]\">\n · {latencyMs}\n {latencyLabel}\n </span>\n ) : null}\n </span>\n ) : null}\n {status === 'fail' && errorMessage ? (\n <span className=\"truncate text-xs text-[var(--as-danger)]\">\n {errorMessage}\n </span>\n ) : null}\n </div>\n {onTest ? (\n <button\n type=\"button\"\n onClick={onTest}\n disabled={disabled || status === 'testing'}\n className=\"shrink-0 cursor-pointer rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-2.5 py-1 text-xs font-medium text-[var(--as-fg)] transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n {status === 'fail' ? <X className=\"mr-1 inline size-3\" aria-hidden /> : null}\n {testLabel}\n </button>\n ) : null}\n </div>\n )\n})\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-VKV464ZF.js.map
3
+ //# sourceMappingURL=chunk-VKV464ZF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-VKV464ZF.js"}
@@ -36,7 +36,7 @@ var ModalContent = React.forwardRef(function ModalContent2({ className, children
36
36
  ref,
37
37
  "data-as": "modal",
38
38
  className: cn(
39
- "as-anim-modal fixed left-1/2 top-1/2 z-[var(--as-z-modal)] flex max-h-[85vh] w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-y-auto rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none",
39
+ "as-anim-modal fixed inset-0 z-[var(--as-z-modal)] m-auto flex h-fit max-h-[85vh] w-[calc(100%-2rem)] flex-col overflow-y-auto rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none",
40
40
  modalContentVariants({ size }),
41
41
  className
42
42
  ),
@@ -109,5 +109,5 @@ var ModalFooter = React.forwardRef(
109
109
  );
110
110
 
111
111
  export { Modal, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, modalContentVariants };
112
- //# sourceMappingURL=chunk-SXVOJ7WE.js.map
113
- //# sourceMappingURL=chunk-SXVOJ7WE.js.map
112
+ //# sourceMappingURL=chunk-Y7BKBG57.js.map
113
+ //# sourceMappingURL=chunk-Y7BKBG57.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/modal/Modal.tsx"],"names":["ModalContent","ModalHeader","ModalTitle","ModalDescription","ModalFooter"],"mappings":"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","file":"chunk-SXVOJ7WE.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\nexport const Modal = DialogPrimitive.Root\nexport const ModalTrigger = DialogPrimitive.Trigger\nexport const ModalClose = DialogPrimitive.Close\n\nconst modalContentVariants = cva('', {\n variants: {\n size: {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport interface ModalContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof modalContentVariants> {\n closeLabel?: string\n}\n\nexport const ModalContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n ModalContentProps\n>(function ModalContent({ className, children, size, closeLabel = 'Close', ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n data-as=\"modal-overlay\"\n className={cn('as-anim-fade fixed inset-0 z-[var(--as-z-modal)] bg-[var(--as-overlay)]')}\n />\n <DialogPrimitive.Content\n ref={ref}\n data-as=\"modal\"\n className={cn(\n 'as-anim-modal fixed left-1/2 top-1/2 z-[var(--as-z-modal)] flex max-h-[85vh] w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-y-auto rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none',\n modalContentVariants({ size }),\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n aria-label={closeLabel}\n className=\"absolute right-4 top-4 rounded-[var(--as-radius-sm)] p-1 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 </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n )\n})\n\nexport const ModalHeader = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n function ModalHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-as=\"modal-header\"\n className={cn('flex flex-col gap-1.5 p-6 pb-4', className)}\n {...props}\n />\n )\n },\n)\n\nexport const ModalTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function ModalTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-as=\"modal-title\"\n className={cn('pr-8 text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n )\n})\n\nexport const ModalDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function ModalDescription({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-as=\"modal-description\"\n className={cn('text-sm text-[var(--as-muted-fg)]', className)}\n {...props}\n />\n )\n})\n\nexport const ModalFooter = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n function ModalFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-as=\"modal-footer\"\n className={cn(\n 'flex flex-col-reverse gap-2 p-6 pt-0 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n )\n },\n)\n\nexport { modalContentVariants }\n"]}
1
+ {"version":3,"sources":["../src/components/modal/Modal.tsx"],"names":["ModalContent","ModalHeader","ModalTitle","ModalDescription","ModalFooter"],"mappings":"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","file":"chunk-Y7BKBG57.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\nexport const Modal = DialogPrimitive.Root\nexport const ModalTrigger = DialogPrimitive.Trigger\nexport const ModalClose = DialogPrimitive.Close\n\nconst modalContentVariants = cva('', {\n variants: {\n size: {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport interface ModalContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof modalContentVariants> {\n closeLabel?: string\n}\n\nexport const ModalContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n ModalContentProps\n>(function ModalContent({ className, children, size, closeLabel = 'Close', ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n data-as=\"modal-overlay\"\n className={cn('as-anim-fade fixed inset-0 z-[var(--as-z-modal)] bg-[var(--as-overlay)]')}\n />\n <DialogPrimitive.Content\n ref={ref}\n data-as=\"modal\"\n className={cn(\n 'as-anim-modal fixed inset-0 z-[var(--as-z-modal)] m-auto flex h-fit max-h-[85vh] w-[calc(100%-2rem)] flex-col overflow-y-auto rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none',\n modalContentVariants({ size }),\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n aria-label={closeLabel}\n className=\"absolute right-4 top-4 rounded-[var(--as-radius-sm)] p-1 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 </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n )\n})\n\nexport const ModalHeader = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n function ModalHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-as=\"modal-header\"\n className={cn('flex flex-col gap-1.5 p-6 pb-4', className)}\n {...props}\n />\n )\n },\n)\n\nexport const ModalTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function ModalTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-as=\"modal-title\"\n className={cn('pr-8 text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n )\n})\n\nexport const ModalDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function ModalDescription({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-as=\"modal-description\"\n className={cn('text-sm text-[var(--as-muted-fg)]', className)}\n {...props}\n />\n )\n})\n\nexport const ModalFooter = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n function ModalFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-as=\"modal-footer\"\n className={cn(\n 'flex flex-col-reverse gap-2 p-6 pt-0 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n )\n },\n)\n\nexport { modalContentVariants }\n"]}
@@ -126,7 +126,7 @@ function Wizard({
126
126
  "aria-describedby": void 0,
127
127
  className: cn(
128
128
  "flex flex-col overflow-hidden border border-[var(--as-border)] bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none",
129
- variant === "drawer" ? "as-anim-drawer fixed inset-y-0 right-0 z-[var(--as-z-modal)] h-full w-4/5 max-w-md border-l" : "as-anim-modal fixed left-1/2 top-1/2 z-[var(--as-z-modal)] max-h-[92vh] w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 rounded-[var(--as-radius-lg)]",
129
+ variant === "drawer" ? "as-anim-drawer fixed inset-y-0 right-0 z-[var(--as-z-modal)] h-full w-4/5 max-w-md border-l" : "as-anim-modal fixed inset-0 z-[var(--as-z-modal)] mx-auto my-auto h-fit max-h-[92vh] w-[calc(100%-2rem)] rounded-[var(--as-radius-lg)]",
130
130
  variant === "modal" && cn(
131
131
  size === "sm" && "max-w-sm",
132
132
  size === "md" && "max-w-md",
@@ -180,5 +180,5 @@ function Wizard({
180
180
  }
181
181
 
182
182
  export { Stepper, Wizard };
183
- //# sourceMappingURL=chunk-75QQR2VT.js.map
184
- //# sourceMappingURL=chunk-75QQR2VT.js.map
183
+ //# sourceMappingURL=chunk-YMCMUAIF.js.map
184
+ //# sourceMappingURL=chunk-YMCMUAIF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/wizard/Wizard.tsx"],"names":[],"mappings":";;;;;;;AAoBO,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,WAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,6BAA6B,SAAS,CAAA,EAAG,WAAQ,SAAA,EAClE,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,SAAA,EAAU,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QAClB,IAAA,CAAK,GAAA,CAAI,OAAA,GAAU,CAAA,EAAG,MAAM,MAAM,CAAA;AAAA,QAAE,MAAA;AAAA,QAAK,KAAA,CAAM;AAAA,OAAA,EACvD,CAAA;AAAA,sBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA4B,aAAA,EAAW,MACnD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAChB,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAW,EAAA;AAAA,YACT,qBAAA;AAAA,YACA,KAAA,KAAU,OAAA,GACN,wBAAA,GACA,KAAA,GAAQ,UACN,2BAAA,GACA;AAAA;AACR,SAAA;AAAA,QARK,IAAA,CAAK;AAAA,OAUb,CAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACA,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA,EAAG,SAAA,EAAQ,SAAA,EAC9D,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAC1B,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,QAAQ,KAAA,GAAQ,OAAA,GAAU,MAAA,GAAS,KAAA,KAAU,UAAU,SAAA,GAAY,MAAA;AACzE,IAAA,MAAM,QAAA,GAAW,WAAA,KAAgB,MAAA,IAAa,KAAA,KAAU,SAAA;AACxD,IAAA,2BACG,IAAA,EAAA,EACC,QAAA,kBAAA,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,cAAA,EAAc,KAAA,KAAU,SAAA,GAAY,MAAA,GAAS,MAAA;AAAA,QAC7C,QAAA;AAAA,QACA,OAAA,EAAS,MAAM,WAAA,GAAc,KAAK,CAAA;AAAA,QAClC,SAAA,EAAW,EAAA;AAAA,UACT,yOAAA;AAAA,UACA,UAAU,SAAA,IAAa,gEAAA;AAAA,UACvB,UAAU,MAAA,IAAU,oDAAA;AAAA,UACpB,UAAU,MAAA,IAAU;AAAA,SACtB;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,IAAA,uBAAQ,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,aAAA,EAAW,MAAC,CAAA,GAAK,IAAA;AAAA,UACjD,IAAA,CAAK;AAAA;AAAA;AAAA,KACR,EAAA,EAfO,KAAK,EAgBd,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AA2CO,SAAS,MAAA,CAAO;AAAA,EACrB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA,GAAc,CAAA;AAAA,EACd,IAAA,EAAM,QAAA;AAAA,EACN,YAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,MAAA;AAAA,EACZ,SAAA,GAAY,MAAA;AAAA,EACZ,SAAA,GAAY,MAAA;AAAA,EACZ,eAAA,GAAkB,aAAA;AAAA,EAClB,UAAA,GAAa,OAAA;AAAA,EACb,OAAA,GAAU,OAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP;AACF,CAAA,EAAgB;AACd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,eAAS,WAAW,CAAA;AAClE,EAAA,MAAM,eAAe,QAAA,KAAa,MAAA;AAClC,EAAA,MAAM,IAAA,GAAO,eAAe,QAAA,GAAW,YAAA;AACvC,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,GAAS,GAAG,CAAC,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,EAAM,CAAC,GAAG,QAAQ,CAAA;AACpD,EAAA,MAAM,OAAA,GAAkC,MAAM,OAAO,CAAA;AACrD,EAAA,MAAM,QAAA,GAAW,SAAS,IAAA,IAAQ,QAAA;AAElC,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,YAAA,EAAc;AAC1B,MAAA,eAAA,CAAgB,WAAW,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,YAAA,EAAc,WAAW,CAAC,CAAA;AAEpC,EAAA,MAAM,IAAA,GAAa,KAAA,CAAA,WAAA;AAAA,IACjB,CAAC,KAAA,KAAkB;AACjB,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAA,EAAO,CAAC,GAAG,QAAQ,CAAA;AAClD,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AACA,MAAA,YAAA,GAAe,IAAI,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,QAAA,EAAU,YAAY;AAAA,GACvC;AAEA,EAAA,MAAM,GAAA,GAAqB;AAAA,IACzB,EAAA,EAAI,SAAS,EAAA,IAAM,EAAA;AAAA,IACnB,KAAA,EAAO,OAAA;AAAA,IACP,IAAA,EAAM,OAAA,IAAW,EAAE,EAAA,EAAI,OAAA,EAAQ;AAAA,IAC/B,SAAS,OAAA,KAAY,CAAA;AAAA,IACrB,QAAQ,OAAA,KAAY,QAAA;AAAA,IACpB,IAAA,EAAM,MAAM,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAAA,IAC5B,IAAA,EAAM,MAAM,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAAA,IAC5B;AAAA,GACF;AAEA,EAAA,MAAM,IAAA,GAAO,MAAA,KAAW,MAAM,YAAA,CAAa,KAAK,CAAA,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,EAAE,OAAA,EAAS,UAAA,IAAc,OAAA,KAAY,QAAA,CAAA;AACxD,EAAA,MAAM,WAAA,GAAc,SAAS,WAAA,KAAgB,KAAA;AAE7C,EAAA,2BACmB,eAAA,CAAA,IAAA,EAAhB,EAAqB,MAAY,YAAA,EAChC,QAAA,kBAAA,IAAA,CAAiB,wBAAhB,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAiB,eAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACC,SAAA,EAAQ,gBAAA;AAAA,QACR,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBACA,IAAA;AAAA,MAAiB,eAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACC,SAAA,EAAQ,QAAA;AAAA,QACR,kBAAA,EAAkB,MAAA;AAAA,QAClB,SAAA,EAAW,EAAA;AAAA,UACT,iKAAA;AAAA,UACA,OAAA,KAAY,WACR,6FAAA,GACA,6JAAA;AAAA,UACJ,YAAY,OAAA,IACV,EAAA;AAAA,YACE,SAAS,IAAA,IAAQ,UAAA;AAAA,YACjB,SAAS,IAAA,IAAQ,UAAA;AAAA,YACjB,SAAS,IAAA,IAAQ,WAAA;AAAA,YACjB,SAAS,IAAA,IAAQ;AAAA,WACnB;AAAA,UACF;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sEAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gIAAA,EACd,QAAA,kBAAA,GAAA,CAAC,YAAS,SAAA,EAAU,QAAA,EAAS,aAAA,EAAW,IAAA,EAAC,CAAA,EAC3C,CAAA;AAAA,4BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAiB,eAAA,CAAA,KAAA,EAAhB,EAAsB,SAAA,EAAU,gCAAA,EAC9B,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,cACC,OAAA,EAAS,aAAa,MAAA,mBACrB,GAAA,CAAC,OAAE,SAAA,EAAU,4CAAA,EACV,QAAA,EAAA,OAAA,CAAQ,QAAA,EACX,CAAA,GACE;AAAA,aAAA,EACN,CAAA;AAAA,gCACC,OAAA,EAAA,EAAQ,KAAA,EAAc,OAAA,EAAS,OAAA,EAAS,SAAQ,MAAA,EAAO,CAAA;AAAA,4BACxD,GAAA,CAAiB,eAAA,CAAA,KAAA,EAAhB,EAAsB,OAAA,EAAO,IAAA,EAC5B,QAAA,kBAAA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,KAAA,EAAO,UAAA;AAAA,gBACP,YAAA,EAAY,UAAA;AAAA,gBACZ,OAAA,EAAS,IAAA;AAAA,gBAET,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,aACpC,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EAAmC,WAAQ,aAAA,EACvD,QAAA,EAAA;AAAA,YAAA,OAAA,EAAS,KAAA,KAAU,yBAClB,GAAA,CAAC,IAAA,EAAA,EAAG,WAAU,4BAAA,EAA8B,QAAA,EAAA,OAAA,CAAQ,OAAM,CAAA,GACxD,IAAA;AAAA,YACH,IAAA,GAAO,UAAA,CAAW,GAAG,CAAA,GAAI;AAAA,WAAA,EAC5B,CAAA;AAAA,UACC,UAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,QAAA,EAAU,OAAA,KAAY,CAAA,EAAG,OAAA,EAAS,GAAA,CAAI,IAAA,EACrE,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,4BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,YACvB,SAAA,KAAc,IAAA,mBACb,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,IAAA,EACxC,QAAA,EAAA,SAAA,EACH,CAAA,GACE,IAAA;AAAA,4BACJ,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,IAAA;AAAA,gBACL,UAAU,CAAC,WAAA;AAAA,gBACX,SAAS,GAAA,CAAI,IAAA;AAAA,gBAEZ,QAAA,EAAA,OAAA,KAAY,CAAA,GAAI,eAAA,GAAmB,OAAA,EAAS,SAAA,IAAa;AAAA;AAAA;AAC5D,WAAA,EACF,CAAA,GACE;AAAA;AAAA;AAAA;AACN,GAAA,EACF,CAAA,EACF,CAAA;AAEJ","file":"chunk-75QQR2VT.js","sourcesContent":["import * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { Sparkles, X, type LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button/Button'\n\nexport interface StepperStep {\n id: string\n label?: React.ReactNode\n icon?: LucideIcon\n}\n\nexport interface StepperProps {\n steps: StepperStep[]\n current: number\n variant?: 'dots' | 'labels'\n onStepClick?: (index: number) => void\n className?: string\n}\n\nexport function Stepper({\n steps,\n current,\n variant = 'dots',\n onStepClick,\n className,\n}: StepperProps) {\n if (variant === 'dots') {\n return (\n <div className={cn('flex items-center gap-1.5', className)} data-as=\"stepper\">\n <span className=\"sr-only\">\n Step {Math.min(current + 1, steps.length)} of {steps.length}\n </span>\n <div className=\"flex items-center gap-1.5\" aria-hidden>\n {steps.map((step, index) => (\n <span\n key={step.id}\n className={cn(\n 'size-2 rounded-full',\n index === current\n ? 'bg-[var(--as-primary)]'\n : index < current\n ? 'bg-[var(--as-primary)]/50'\n : 'bg-[var(--as-border)]',\n )}\n />\n ))}\n </div>\n </div>\n )\n }\n return (\n <ol className={cn('flex items-center gap-1', className)} data-as=\"stepper\">\n {steps.map((step, index) => {\n const Icon = step.icon\n const state = index < current ? 'done' : index === current ? 'current' : 'todo'\n const disabled = onStepClick === undefined || state === 'current'\n return (\n <li key={step.id}>\n <button\n type=\"button\"\n aria-current={state === 'current' ? 'step' : undefined}\n disabled={disabled}\n onClick={() => onStepClick?.(index)}\n className={cn(\n 'flex cursor-pointer items-center gap-1.5 rounded-[var(--as-radius)] px-2.5 py-1.5 text-sm transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)] disabled:cursor-default',\n state === 'current' && 'bg-[var(--as-primary)]/10 font-medium text-[var(--as-primary)]',\n state === 'done' && 'text-[var(--as-fg)] hover:bg-[var(--as-secondary)]',\n state === 'todo' && 'text-[var(--as-muted-fg)] hover:bg-[var(--as-secondary)]',\n )}\n >\n {Icon ? <Icon className=\"size-4\" aria-hidden /> : null}\n {step.label}\n </button>\n </li>\n )\n })}\n </ol>\n )\n}\n\nexport interface WizardStep {\n id: string\n icon?: LucideIcon\n title?: React.ReactNode\n subtitle?: React.ReactNode\n canContinue?: boolean\n nextLabel?: string\n hideFooter?: boolean\n}\n\nexport interface WizardContext {\n id: string\n index: number\n step: WizardStep\n isFirst: boolean\n isLast: boolean\n next: () => void\n back: () => void\n goTo: (index: number) => void\n}\n\nexport interface WizardProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: React.ReactNode\n steps: WizardStep[]\n renderStep: (ctx: WizardContext) => React.ReactNode\n initialStep?: number\n step?: number\n onStepChange?: (index: number) => void\n onSkip?: () => void\n skipLabel?: string | null\n backLabel?: string\n nextLabel?: string\n getStartedLabel?: string\n closeLabel?: string\n variant?: 'modal' | 'drawer'\n size?: 'sm' | 'md' | 'lg' | 'xl'\n contentClassName?: string\n}\n\nexport function Wizard({\n open,\n onOpenChange,\n title,\n steps,\n renderStep,\n initialStep = 0,\n step: stepProp,\n onStepChange,\n onSkip,\n skipLabel = 'Skip',\n backLabel = 'Back',\n nextLabel = 'Next',\n getStartedLabel = 'Get started',\n closeLabel = 'Close',\n variant = 'modal',\n size = 'lg',\n contentClassName,\n}: WizardProps) {\n const [internalStep, setInternalStep] = React.useState(initialStep)\n const isControlled = stepProp !== undefined\n const step = isControlled ? stepProp : internalStep\n const lastStep = Math.max(steps.length - 1, 0)\n const clamped = Math.min(Math.max(step, 0), lastStep)\n const current: WizardStep | undefined = steps[clamped]\n const StepIcon = current?.icon ?? Sparkles\n\n React.useEffect(() => {\n if (!open && !isControlled) {\n setInternalStep(initialStep)\n }\n }, [open, isControlled, initialStep])\n\n const goTo = React.useCallback(\n (index: number) => {\n const next = Math.min(Math.max(index, 0), lastStep)\n if (!isControlled) {\n setInternalStep(next)\n }\n onStepChange?.(next)\n },\n [isControlled, lastStep, onStepChange],\n )\n\n const ctx: WizardContext = {\n id: current?.id ?? '',\n index: clamped,\n step: current ?? { id: 'empty' },\n isFirst: clamped === 0,\n isLast: clamped === lastStep,\n next: () => goTo(clamped + 1),\n back: () => goTo(clamped - 1),\n goTo,\n }\n\n const skip = onSkip ?? (() => onOpenChange(false))\n const showFooter = !(current?.hideFooter ?? clamped === lastStep)\n const canContinue = current?.canContinue !== false\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n data-as=\"wizard-overlay\"\n className=\"as-anim-fade fixed inset-0 z-[var(--as-z-modal)] bg-[var(--as-overlay)]\"\n />\n <DialogPrimitive.Content\n data-as=\"wizard\"\n aria-describedby={undefined}\n className={cn(\n 'flex flex-col overflow-hidden border border-[var(--as-border)] bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none',\n variant === 'drawer'\n ? 'as-anim-drawer fixed inset-y-0 right-0 z-[var(--as-z-modal)] h-full w-4/5 max-w-md border-l'\n : 'as-anim-modal fixed left-1/2 top-1/2 z-[var(--as-z-modal)] max-h-[92vh] w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 rounded-[var(--as-radius-lg)]',\n variant === 'modal' &&\n cn(\n size === 'sm' && 'max-w-sm',\n size === 'md' && 'max-w-md',\n size === 'lg' && 'max-w-2xl',\n size === 'xl' && 'max-w-4xl',\n ),\n contentClassName,\n )}\n >\n <div className=\"flex items-center gap-3 border-b border-[var(--as-border)] px-5 py-4\">\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] bg-[var(--as-primary)]/10 text-[var(--as-primary)]\">\n <StepIcon className=\"size-5\" aria-hidden />\n </span>\n <div className=\"min-w-0 flex-1\">\n <DialogPrimitive.Title className=\"truncate text-sm font-semibold\">\n {title}\n </DialogPrimitive.Title>\n {current?.subtitle !== undefined ? (\n <p className=\"truncate text-xs text-[var(--as-muted-fg)]\">\n {current.subtitle}\n </p>\n ) : null}\n </div>\n <Stepper steps={steps} current={clamped} variant=\"dots\" />\n <DialogPrimitive.Close asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={closeLabel}\n aria-label={closeLabel}\n onClick={skip}\n >\n <X className=\"size-4\" aria-hidden />\n </Button>\n </DialogPrimitive.Close>\n </div>\n <div className=\"flex-1 overflow-y-auto px-5 py-4\" data-as=\"wizard-body\">\n {current?.title !== undefined ? (\n <h2 className=\"mb-3 text-lg font-semibold\">{current.title}</h2>\n ) : null}\n {open ? renderStep(ctx) : null}\n </div>\n {showFooter ? (\n <div className=\"flex items-center gap-2 border-t border-[var(--as-border)] px-5 py-3\">\n <Button variant=\"ghost\" size=\"sm\" disabled={clamped === 0} onClick={ctx.back}>\n {backLabel}\n </Button>\n <div className=\"flex-1\" />\n {skipLabel !== null ? (\n <Button variant=\"ghost\" size=\"sm\" onClick={skip}>\n {skipLabel}\n </Button>\n ) : null}\n <Button\n size=\"sm\"\n disabled={!canContinue}\n onClick={ctx.next}\n >\n {clamped === 0 ? getStartedLabel : (current?.nextLabel ?? nextLabel)}\n </Button>\n </div>\n ) : null}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/components/wizard/Wizard.tsx"],"names":[],"mappings":"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","file":"chunk-YMCMUAIF.js","sourcesContent":["import * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { Sparkles, X, type LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button/Button'\n\nexport interface StepperStep {\n id: string\n label?: React.ReactNode\n icon?: LucideIcon\n}\n\nexport interface StepperProps {\n steps: StepperStep[]\n current: number\n variant?: 'dots' | 'labels'\n onStepClick?: (index: number) => void\n className?: string\n}\n\nexport function Stepper({\n steps,\n current,\n variant = 'dots',\n onStepClick,\n className,\n}: StepperProps) {\n if (variant === 'dots') {\n return (\n <div className={cn('flex items-center gap-1.5', className)} data-as=\"stepper\">\n <span className=\"sr-only\">\n Step {Math.min(current + 1, steps.length)} of {steps.length}\n </span>\n <div className=\"flex items-center gap-1.5\" aria-hidden>\n {steps.map((step, index) => (\n <span\n key={step.id}\n className={cn(\n 'size-2 rounded-full',\n index === current\n ? 'bg-[var(--as-primary)]'\n : index < current\n ? 'bg-[var(--as-primary)]/50'\n : 'bg-[var(--as-border)]',\n )}\n />\n ))}\n </div>\n </div>\n )\n }\n return (\n <ol className={cn('flex items-center gap-1', className)} data-as=\"stepper\">\n {steps.map((step, index) => {\n const Icon = step.icon\n const state = index < current ? 'done' : index === current ? 'current' : 'todo'\n const disabled = onStepClick === undefined || state === 'current'\n return (\n <li key={step.id}>\n <button\n type=\"button\"\n aria-current={state === 'current' ? 'step' : undefined}\n disabled={disabled}\n onClick={() => onStepClick?.(index)}\n className={cn(\n 'flex cursor-pointer items-center gap-1.5 rounded-[var(--as-radius)] px-2.5 py-1.5 text-sm transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)] disabled:cursor-default',\n state === 'current' && 'bg-[var(--as-primary)]/10 font-medium text-[var(--as-primary)]',\n state === 'done' && 'text-[var(--as-fg)] hover:bg-[var(--as-secondary)]',\n state === 'todo' && 'text-[var(--as-muted-fg)] hover:bg-[var(--as-secondary)]',\n )}\n >\n {Icon ? <Icon className=\"size-4\" aria-hidden /> : null}\n {step.label}\n </button>\n </li>\n )\n })}\n </ol>\n )\n}\n\nexport interface WizardStep {\n id: string\n icon?: LucideIcon\n title?: React.ReactNode\n subtitle?: React.ReactNode\n canContinue?: boolean\n nextLabel?: string\n hideFooter?: boolean\n}\n\nexport interface WizardContext {\n id: string\n index: number\n step: WizardStep\n isFirst: boolean\n isLast: boolean\n next: () => void\n back: () => void\n goTo: (index: number) => void\n}\n\nexport interface WizardProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: React.ReactNode\n steps: WizardStep[]\n renderStep: (ctx: WizardContext) => React.ReactNode\n initialStep?: number\n step?: number\n onStepChange?: (index: number) => void\n onSkip?: () => void\n skipLabel?: string | null\n backLabel?: string\n nextLabel?: string\n getStartedLabel?: string\n closeLabel?: string\n variant?: 'modal' | 'drawer'\n size?: 'sm' | 'md' | 'lg' | 'xl'\n contentClassName?: string\n}\n\nexport function Wizard({\n open,\n onOpenChange,\n title,\n steps,\n renderStep,\n initialStep = 0,\n step: stepProp,\n onStepChange,\n onSkip,\n skipLabel = 'Skip',\n backLabel = 'Back',\n nextLabel = 'Next',\n getStartedLabel = 'Get started',\n closeLabel = 'Close',\n variant = 'modal',\n size = 'lg',\n contentClassName,\n}: WizardProps) {\n const [internalStep, setInternalStep] = React.useState(initialStep)\n const isControlled = stepProp !== undefined\n const step = isControlled ? stepProp : internalStep\n const lastStep = Math.max(steps.length - 1, 0)\n const clamped = Math.min(Math.max(step, 0), lastStep)\n const current: WizardStep | undefined = steps[clamped]\n const StepIcon = current?.icon ?? Sparkles\n\n React.useEffect(() => {\n if (!open && !isControlled) {\n setInternalStep(initialStep)\n }\n }, [open, isControlled, initialStep])\n\n const goTo = React.useCallback(\n (index: number) => {\n const next = Math.min(Math.max(index, 0), lastStep)\n if (!isControlled) {\n setInternalStep(next)\n }\n onStepChange?.(next)\n },\n [isControlled, lastStep, onStepChange],\n )\n\n const ctx: WizardContext = {\n id: current?.id ?? '',\n index: clamped,\n step: current ?? { id: 'empty' },\n isFirst: clamped === 0,\n isLast: clamped === lastStep,\n next: () => goTo(clamped + 1),\n back: () => goTo(clamped - 1),\n goTo,\n }\n\n const skip = onSkip ?? (() => onOpenChange(false))\n const showFooter = !(current?.hideFooter ?? clamped === lastStep)\n const canContinue = current?.canContinue !== false\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n data-as=\"wizard-overlay\"\n className=\"as-anim-fade fixed inset-0 z-[var(--as-z-modal)] bg-[var(--as-overlay)]\"\n />\n <DialogPrimitive.Content\n data-as=\"wizard\"\n aria-describedby={undefined}\n className={cn(\n 'flex flex-col overflow-hidden border border-[var(--as-border)] bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none',\n variant === 'drawer'\n ? 'as-anim-drawer fixed inset-y-0 right-0 z-[var(--as-z-modal)] h-full w-4/5 max-w-md border-l'\n : 'as-anim-modal fixed inset-0 z-[var(--as-z-modal)] mx-auto my-auto h-fit max-h-[92vh] w-[calc(100%-2rem)] rounded-[var(--as-radius-lg)]',\n variant === 'modal' &&\n cn(\n size === 'sm' && 'max-w-sm',\n size === 'md' && 'max-w-md',\n size === 'lg' && 'max-w-2xl',\n size === 'xl' && 'max-w-4xl',\n ),\n contentClassName,\n )}\n >\n <div className=\"flex items-center gap-3 border-b border-[var(--as-border)] px-5 py-4\">\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] bg-[var(--as-primary)]/10 text-[var(--as-primary)]\">\n <StepIcon className=\"size-5\" aria-hidden />\n </span>\n <div className=\"min-w-0 flex-1\">\n <DialogPrimitive.Title className=\"truncate text-sm font-semibold\">\n {title}\n </DialogPrimitive.Title>\n {current?.subtitle !== undefined ? (\n <p className=\"truncate text-xs text-[var(--as-muted-fg)]\">\n {current.subtitle}\n </p>\n ) : null}\n </div>\n <Stepper steps={steps} current={clamped} variant=\"dots\" />\n <DialogPrimitive.Close asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={closeLabel}\n aria-label={closeLabel}\n onClick={skip}\n >\n <X className=\"size-4\" aria-hidden />\n </Button>\n </DialogPrimitive.Close>\n </div>\n <div className=\"flex-1 overflow-y-auto px-5 py-4\" data-as=\"wizard-body\">\n {current?.title !== undefined ? (\n <h2 className=\"mb-3 text-lg font-semibold\">{current.title}</h2>\n ) : null}\n {open ? renderStep(ctx) : null}\n </div>\n {showFooter ? (\n <div className=\"flex items-center gap-2 border-t border-[var(--as-border)] px-5 py-3\">\n <Button variant=\"ghost\" size=\"sm\" disabled={clamped === 0} onClick={ctx.back}>\n {backLabel}\n </Button>\n <div className=\"flex-1\" />\n {skipLabel !== null ? (\n <Button variant=\"ghost\" size=\"sm\" onClick={skip}>\n {skipLabel}\n </Button>\n ) : null}\n <Button\n size=\"sm\"\n disabled={!canContinue}\n onClick={ctx.next}\n >\n {clamped === 0 ? getStartedLabel : (current?.nextLabel ?? nextLabel)}\n </Button>\n </div>\n ) : null}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n"]}
@@ -5,6 +5,7 @@ interface ComboboxOption {
5
5
  label: string;
6
6
  description?: string;
7
7
  group?: string;
8
+ badge?: string;
8
9
  disabled?: boolean;
9
10
  }
10
11
  interface ComboboxProps {
package/dist/combobox.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Combobox, ComboboxMulti } from './chunk-W5WDGME5.js';
1
+ export { Combobox, ComboboxMulti } from './chunk-3RDFWXX6.js';
2
2
  //# sourceMappingURL=combobox.js.map
3
3
  //# sourceMappingURL=combobox.js.map
@@ -1,3 +1,3 @@
1
- export { ConfirmationModal } from './chunk-TKKHWO6C.js';
1
+ export { ConfirmationModal } from './chunk-2YQSA5AE.js';
2
2
  //# sourceMappingURL=confirmation-modal.js.map
3
3
  //# sourceMappingURL=confirmation-modal.js.map
@@ -1,73 +1,3 @@
1
- import { Spinner } from './chunk-INTST5VG.js';
2
- import { cn } from './chunk-BLJWR4ZV.js';
3
- import * as React from 'react';
4
- import { X, Check, TriangleAlert } from 'lucide-react';
5
- import { jsxs, jsx } from 'react/jsx-runtime';
6
-
7
- var ConnectionTestRow = React.forwardRef(function ConnectionTestRow2({
8
- status,
9
- latencyMs,
10
- label = "Connection",
11
- testLabel = "Test",
12
- okLabel = "Connected",
13
- failLabel = "Failed",
14
- latencyLabel = "ms",
15
- errorMessage,
16
- onTest,
17
- disabled = false,
18
- className
19
- }, ref) {
20
- const state = status === "ok" ? { text: okLabel, icon: /* @__PURE__ */ jsx(Check, { className: "size-3.5", "aria-hidden": true }), tone: "text-[var(--as-success)]" } : status === "fail" ? {
21
- text: failLabel,
22
- icon: /* @__PURE__ */ jsx(TriangleAlert, { className: "size-3.5", "aria-hidden": true }),
23
- tone: "text-[var(--as-danger)]"
24
- } : null;
25
- return /* @__PURE__ */ jsxs(
26
- "div",
27
- {
28
- ref,
29
- "data-as": "connection-test-row",
30
- "data-status": status,
31
- className: cn(
32
- "flex items-center justify-between gap-3 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2",
33
- className
34
- ),
35
- children: [
36
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2 text-sm", children: [
37
- /* @__PURE__ */ jsx("span", { className: "font-medium text-[var(--as-fg)]", children: label }),
38
- status === "testing" ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5 text-[var(--as-muted-fg)]", role: "status", children: [
39
- /* @__PURE__ */ jsx(Spinner, { size: "sm" }),
40
- testLabel,
41
- "\u2026"
42
- ] }) : state ? /* @__PURE__ */ jsxs("span", { className: cn("flex items-center gap-1 font-medium", state.tone), children: [
43
- state.icon,
44
- state.text,
45
- status === "ok" && latencyMs != null ? /* @__PURE__ */ jsxs("span", { className: "font-normal text-[var(--as-muted-fg)]", children: [
46
- "\xB7 ",
47
- latencyMs,
48
- latencyLabel
49
- ] }) : null
50
- ] }) : null,
51
- status === "fail" && errorMessage ? /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-[var(--as-danger)]", children: errorMessage }) : null
52
- ] }),
53
- onTest ? /* @__PURE__ */ jsxs(
54
- "button",
55
- {
56
- type: "button",
57
- onClick: onTest,
58
- disabled: disabled || status === "testing",
59
- className: "shrink-0 cursor-pointer rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-2.5 py-1 text-xs font-medium text-[var(--as-fg)] transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50",
60
- children: [
61
- status === "fail" ? /* @__PURE__ */ jsx(X, { className: "mr-1 inline size-3", "aria-hidden": true }) : null,
62
- testLabel
63
- ]
64
- }
65
- ) : null
66
- ]
67
- }
68
- );
69
- });
70
-
71
- export { ConnectionTestRow };
1
+ export { ConnectionTestRow } from './chunk-UWHUCQC6.js';
72
2
  //# sourceMappingURL=connection-test-row.js.map
73
3
  //# sourceMappingURL=connection-test-row.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/connection-test-row/ConnectionTestRow.tsx"],"names":["ConnectionTestRow"],"mappings":";;;;;;AAyBO,IAAM,iBAAA,GAA0B,KAAA,CAAA,UAAA,CAGrC,SAASA,kBAAAA,CACT;AAAA,EACE,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,YAAA;AAAA,EACR,SAAA,GAAY,MAAA;AAAA,EACZ,OAAA,GAAU,WAAA;AAAA,EACV,SAAA,GAAY,QAAA;AAAA,EACZ,YAAA,GAAe,IAAA;AAAA,EACf,YAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,QACJ,MAAA,KAAW,IAAA,GACP,EAAE,IAAA,EAAM,OAAA,EAAS,sBAAM,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA,EAAI,MAAM,0BAAA,EAA2B,GACpG,WAAW,MAAA,GACT;AAAA,IACE,IAAA,EAAM,SAAA;AAAA,IACN,sBAAM,GAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,IACtD,IAAA,EAAM;AAAA,GACR,GACA,IAAA;AAER,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAQ,qBAAA;AAAA,MACR,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,sIAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EAAmC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACxD,WAAW,SAAA,mBACV,IAAA,CAAC,UAAK,SAAA,EAAU,qDAAA,EAAsD,MAAK,QAAA,EACzE,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,MAAK,IAAA,EAAK,CAAA;AAAA,YAClB,SAAA;AAAA,YAAU;AAAA,WAAA,EACb,CAAA,GACE,wBACF,IAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,qCAAA,EAAuC,KAAA,CAAM,IAAI,CAAA,EAClE,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,IAAA;AAAA,YACN,KAAA,CAAM,IAAA;AAAA,YACN,WAAW,IAAA,IAAQ,SAAA,IAAa,uBAC/B,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uCAAA,EAAwC,QAAA,EAAA;AAAA,cAAA,OAAA;AAAA,cACnD,SAAA;AAAA,cACF;AAAA,aAAA,EACH,CAAA,GACE;AAAA,WAAA,EACN,CAAA,GACE,IAAA;AAAA,UACH,MAAA,KAAW,UAAU,YAAA,mBACpB,GAAA,CAAC,UAAK,SAAA,EAAU,0CAAA,EACb,wBACH,CAAA,GACE;AAAA,SAAA,EACN,CAAA;AAAA,QACC,MAAA,mBACC,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,QAAA,EAAU,YAAY,MAAA,KAAW,SAAA;AAAA,YACjC,SAAA,EAAU,kVAAA;AAAA,YAET,QAAA,EAAA;AAAA,cAAA,MAAA,KAAW,yBAAS,GAAA,CAAC,CAAA,EAAA,EAAE,WAAU,oBAAA,EAAqB,aAAA,EAAW,MAAC,CAAA,GAAK,IAAA;AAAA,cACvE;AAAA;AAAA;AAAA,SACH,GACE;AAAA;AAAA;AAAA,GACN;AAEJ,CAAC","file":"connection-test-row.js","sourcesContent":["import * as React from 'react'\nimport { Check, TriangleAlert, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Spinner } from '../spinner/Spinner'\n\nexport type ConnectionTestStatus = 'idle' | 'testing' | 'ok' | 'fail'\n\nexport interface ConnectionTestRowProps {\n status: ConnectionTestStatus\n latencyMs?: number | null\n label?: string\n testLabel?: string\n okLabel?: string\n failLabel?: string\n latencyLabel?: string\n errorMessage?: string | null\n onTest?: () => void\n disabled?: boolean\n className?: string\n}\n\n/**\n * Presentational connection-test row (idle/testing/ok/fail + latency).\n * The actual ping is app-side: flip `status` from the test handler.\n */\nexport const ConnectionTestRow = React.forwardRef<\n HTMLDivElement,\n ConnectionTestRowProps\n>(function ConnectionTestRow(\n {\n status,\n latencyMs,\n label = 'Connection',\n testLabel = 'Test',\n okLabel = 'Connected',\n failLabel = 'Failed',\n latencyLabel = 'ms',\n errorMessage,\n onTest,\n disabled = false,\n className,\n },\n ref,\n) {\n const state =\n status === 'ok'\n ? { text: okLabel, icon: <Check className=\"size-3.5\" aria-hidden />, tone: 'text-[var(--as-success)]' }\n : status === 'fail'\n ? {\n text: failLabel,\n icon: <TriangleAlert className=\"size-3.5\" aria-hidden />,\n tone: 'text-[var(--as-danger)]',\n }\n : null\n\n return (\n <div\n ref={ref}\n data-as=\"connection-test-row\"\n data-status={status}\n className={cn(\n 'flex items-center justify-between gap-3 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2',\n className,\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2 text-sm\">\n <span className=\"font-medium text-[var(--as-fg)]\">{label}</span>\n {status === 'testing' ? (\n <span className=\"flex items-center gap-1.5 text-[var(--as-muted-fg)]\" role=\"status\">\n <Spinner size=\"sm\" />\n {testLabel}…\n </span>\n ) : state ? (\n <span className={cn('flex items-center gap-1 font-medium', state.tone)}>\n {state.icon}\n {state.text}\n {status === 'ok' && latencyMs != null ? (\n <span className=\"font-normal text-[var(--as-muted-fg)]\">\n · {latencyMs}\n {latencyLabel}\n </span>\n ) : null}\n </span>\n ) : null}\n {status === 'fail' && errorMessage ? (\n <span className=\"truncate text-xs text-[var(--as-danger)]\">\n {errorMessage}\n </span>\n ) : null}\n </div>\n {onTest ? (\n <button\n type=\"button\"\n onClick={onTest}\n disabled={disabled || status === 'testing'}\n className=\"shrink-0 cursor-pointer rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-2.5 py-1 text-xs font-medium text-[var(--as-fg)] transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n {status === 'fail' ? <X className=\"mr-1 inline size-3\" aria-hidden /> : null}\n {testLabel}\n </button>\n ) : null}\n </div>\n )\n})\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"connection-test-row.js"}
@@ -1,3 +1,3 @@
1
- export { DatePicker } from './chunk-UU2V5FGF.js';
1
+ export { DatePicker } from './chunk-6VCJX4CP.js';
2
2
  //# sourceMappingURL=date-picker.js.map
3
3
  //# sourceMappingURL=date-picker.js.map
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+
3
+ type FileCardStatus = 'queued' | 'processing' | 'done' | 'failed';
4
+ declare function formatBytes(bytes: number): string;
5
+ interface FileCardProps {
6
+ name: string;
7
+ sizeBytes?: number;
8
+ status?: FileCardStatus;
9
+ error?: string | null;
10
+ /** Small preview URL (app owns object-URL lifecycle). */
11
+ thumbnailUrl?: string | null;
12
+ included?: boolean;
13
+ onToggleInclude?: () => void;
14
+ onRemove?: () => void;
15
+ onOpen?: () => void;
16
+ draggable?: boolean;
17
+ onDragStart?: () => void;
18
+ onDragEnd?: () => void;
19
+ removeLabel?: string;
20
+ includeLabel?: string;
21
+ className?: string;
22
+ }
23
+ declare const FileCard: React.ForwardRefExoticComponent<FileCardProps & React.RefAttributes<HTMLDivElement>>;
24
+
25
+ export { FileCard, type FileCardProps, type FileCardStatus, formatBytes };
@@ -0,0 +1,3 @@
1
+ export { FileCard, formatBytes } from './chunk-J4OELYDR.js';
2
+ //# sourceMappingURL=file-card.js.map
3
+ //# sourceMappingURL=file-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"file-card.js"}
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { FileCardStatus } from './file-card.js';
3
+
4
+ interface FileQueueItem {
5
+ id: string;
6
+ name: string;
7
+ sizeBytes?: number;
8
+ status?: FileCardStatus;
9
+ error?: string | null;
10
+ thumbnailUrl?: string | null;
11
+ included?: boolean;
12
+ }
13
+ interface FileQueueProps {
14
+ files: FileQueueItem[];
15
+ onRemove?: (id: string) => void;
16
+ onToggleInclude?: (id: string) => void;
17
+ onOpen?: (id: string) => void;
18
+ onReorder?: (fromId: string, toId: string) => void;
19
+ reorderable?: boolean;
20
+ emptyText?: string;
21
+ summary?: React.ReactNode;
22
+ removeLabel?: string;
23
+ includeLabel?: string;
24
+ className?: string;
25
+ }
26
+ /**
27
+ * FileCard grid with aggregate summary and optional drag-to-reorder
28
+ * (reports intent via `onReorder(fromId, toId)` — the app owns ordering).
29
+ */
30
+ declare const FileQueue: React.ForwardRefExoticComponent<FileQueueProps & React.RefAttributes<HTMLDivElement>>;
31
+
32
+ export { FileQueue, type FileQueueItem, type FileQueueProps };
@@ -0,0 +1,3 @@
1
+ export { FileQueue } from './chunk-IQKP2BWE.js';
2
+ //# sourceMappingURL=file-queue.js.map
3
+ //# sourceMappingURL=file-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"file-queue.js"}
@@ -1,3 +1,3 @@
1
- export { FormModal } from './chunk-2EPZAT3X.js';
1
+ export { FormModal } from './chunk-62GIJMWT.js';
2
2
  //# sourceMappingURL=form-modal.js.map
3
3
  //# sourceMappingURL=form-modal.js.map
package/dist/index.d.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  export { ClassValue } from 'clsx';
3
3
  export { RawTokenName, SemanticTokenName, ThemeTokenName, ThemeTokens, rawTokens, semanticTokens } from './tokens.js';
4
+ export { FileCard, FileCardProps, FileCardStatus, formatBytes } from './file-card.js';
5
+ export { FileQueue, FileQueueItem, FileQueueProps } from './file-queue.js';
4
6
  export { Portal, PortalProps } from './portal.js';
7
+ import * as React from 'react';
5
8
  export { ThemeScope, ThemeScopeProps } from './theme-scope.js';
6
9
  export { AiAction, AiActionsDropdown, AiActionsDropdownProps } from './ai-actions-dropdown.js';
7
10
  export { AiButton, AiButtonProps } from './ai-button.js';
@@ -9,6 +12,9 @@ export { AiMagicFill, AiMagicFillProps } from './ai-magic-fill.js';
9
12
  export { Badge, BadgeProps, badgeVariants } from './badge.js';
10
13
  export { BreadcrumbItem, BreadcrumbLinkProps, Breadcrumbs, BreadcrumbsProps } from './breadcrumbs.js';
11
14
  export { Button, ButtonProps, buttonVariants } from './button.js';
15
+ export { ConnectionTestRow, ConnectionTestRowProps, ConnectionTestStatus } from './connection-test-row.js';
16
+ export { ProviderForm, ProviderFormProps } from './provider-form.js';
17
+ export { SettingsNavItem, SettingsShell, SettingsShellProps } from './settings-shell.js';
12
18
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './card.js';
13
19
  export { CheckIndicator, CheckIndicatorProps } from './check-indicator.js';
14
20
  export { ChipInput, ChipInputProps } from './chip-input.js';
@@ -33,14 +39,15 @@ export { PopoverButton, PopoverButtonProps } from './popover-button.js';
33
39
  export { RangeBar, RangeBarProps } from './range-bar.js';
34
40
  export { ScaleSlider, ScaleSliderProps, scaleColorForValue } from './scale-slider.js';
35
41
  export { SearchInput, SearchInputProps } from './search-input.js';
42
+ export { ModelPicker, ModelPickerModel, ModelPickerProps, ModelPickerProvider } from './model-picker.js';
36
43
  export { SelectionBar, SelectionBarProps } from './selection-bar.js';
37
44
  export { Spinner, SpinnerProps } from './spinner.js';
45
+ export { TaskAssignmentPicker, TaskAssignmentPickerProps, TaskAssignmentTask } from './task-assignment-picker.js';
38
46
  export { Table, TableProps } from './table.js';
39
47
  export { InfoTooltip, InfoTooltipProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip.js';
40
48
  export { UndoNotice, UndoNoticeProps } from './undo-notice.js';
41
49
  export { ViewToggle, ViewToggleProps, ViewToggleView } from './view-toggle.js';
42
50
  export { Stepper, StepperProps, StepperStep, Wizard, WizardContext, WizardProps, WizardStep } from './wizard.js';
43
- import 'react';
44
51
  import 'lucide-react';
45
52
  import 'class-variance-authority/types';
46
53
  import 'class-variance-authority';
@@ -51,4 +58,25 @@ import '@radix-ui/react-tooltip';
51
58
 
52
59
  declare function cn(...inputs: ClassValue[]): string;
53
60
 
54
- export { cn };
61
+ interface UploadDropzoneProps {
62
+ onFiles: (files: File[]) => void;
63
+ uploading?: boolean;
64
+ variant?: 'block' | 'row';
65
+ label?: string;
66
+ hint?: string;
67
+ browseLabel?: string;
68
+ folderLabel?: string;
69
+ accept?: string;
70
+ multiple?: boolean;
71
+ allowFolders?: boolean;
72
+ disabled?: boolean;
73
+ className?: string;
74
+ }
75
+ /**
76
+ * Presentational dropzone: drag events and file-picker results go out via
77
+ * `onFiles` — uploading, storage and progress stay app-side. Pass
78
+ * `uploading` to render a busy state and suppress input.
79
+ */
80
+ declare const UploadDropzone: React.ForwardRefExoticComponent<UploadDropzoneProps & React.RefAttributes<HTMLDivElement>>;
81
+
82
+ export { UploadDropzone, type UploadDropzoneProps, cn };