@neuronection/assistant-ui 0.2.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.
Files changed (57) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +26 -5
  3. package/dist/breadcrumbs.d.ts +24 -0
  4. package/dist/breadcrumbs.js +3 -0
  5. package/dist/breadcrumbs.js.map +1 -0
  6. package/dist/chip-input.d.ts +14 -0
  7. package/dist/chip-input.js +3 -0
  8. package/dist/chip-input.js.map +1 -0
  9. package/dist/chip-list.d.ts +15 -0
  10. package/dist/chip-list.js +3 -0
  11. package/dist/chip-list.js.map +1 -0
  12. package/dist/chunk-5AVBKEDQ.js +74 -0
  13. package/dist/chunk-5AVBKEDQ.js.map +1 -0
  14. package/dist/{chunk-GPIN2ITX.js → chunk-5HXDKOBY.js} +24 -7
  15. package/dist/chunk-5HXDKOBY.js.map +1 -0
  16. package/dist/chunk-5X3RYDPC.js +54 -0
  17. package/dist/chunk-5X3RYDPC.js.map +1 -0
  18. package/dist/chunk-CZ2BL2ZL.js +89 -0
  19. package/dist/chunk-CZ2BL2ZL.js.map +1 -0
  20. package/dist/chunk-MEBOS2FX.js +359 -0
  21. package/dist/chunk-MEBOS2FX.js.map +1 -0
  22. package/dist/chunk-TFS2NUET.js +66 -0
  23. package/dist/chunk-TFS2NUET.js.map +1 -0
  24. package/dist/chunk-TPLQL62V.js +124 -0
  25. package/dist/chunk-TPLQL62V.js.map +1 -0
  26. package/dist/chunk-UIUALJNR.js +110 -0
  27. package/dist/chunk-UIUALJNR.js.map +1 -0
  28. package/dist/chunk-WPO6CDA4.js +92 -0
  29. package/dist/chunk-WPO6CDA4.js.map +1 -0
  30. package/dist/chunk-XLD2BPTT.js +82 -0
  31. package/dist/chunk-XLD2BPTT.js.map +1 -0
  32. package/dist/copy-button.d.ts +14 -0
  33. package/dist/copy-button.js +3 -0
  34. package/dist/copy-button.js.map +1 -0
  35. package/dist/date-picker.d.ts +27 -0
  36. package/dist/date-picker.js +3 -0
  37. package/dist/date-picker.js.map +1 -0
  38. package/dist/form-modal.d.ts +6 -1
  39. package/dist/form-modal.js +1 -1
  40. package/dist/index.d.ts +10 -2
  41. package/dist/index.js +20 -11
  42. package/dist/modal.d.ts +23 -1
  43. package/dist/modal.js +1 -0
  44. package/dist/range-bar.d.ts +15 -0
  45. package/dist/range-bar.js +3 -0
  46. package/dist/range-bar.js.map +1 -0
  47. package/dist/scale-slider.d.ts +18 -0
  48. package/dist/scale-slider.js +3 -0
  49. package/dist/scale-slider.js.map +1 -0
  50. package/dist/styles.css +1 -1
  51. package/dist/table.d.ts +10 -0
  52. package/dist/table.js +3 -0
  53. package/dist/table.js.map +1 -0
  54. package/package.json +36 -2
  55. package/dist/chunk-GPIN2ITX.js.map +0 -1
  56. package/dist/chunk-IFNT6JSQ.js +0 -3
  57. package/dist/chunk-IFNT6JSQ.js.map +0 -1
@@ -0,0 +1,110 @@
1
+ import { cn } from './chunk-BLJWR4ZV.js';
2
+ import * as React from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ function scaleColorForValue(min, max, value) {
6
+ if (value === "" || value === null || value === void 0) {
7
+ return "var(--as-muted-fg)";
8
+ }
9
+ const numeric = Number(value);
10
+ if (Number.isNaN(numeric)) return "var(--as-muted-fg)";
11
+ return positionColor((numeric - min) / (max - min));
12
+ }
13
+ function positionColor(position) {
14
+ const clamped = Math.max(0, Math.min(1, position));
15
+ const hue = 142 * (1 - clamped);
16
+ return `hsl(${hue.toFixed(0)}, 72%, 48%)`;
17
+ }
18
+ var ScaleSlider = React.forwardRef(
19
+ function ScaleSlider2({
20
+ value,
21
+ onChange,
22
+ min,
23
+ max,
24
+ step = 1,
25
+ lowLabel,
26
+ highLabel,
27
+ showInput = true,
28
+ disabled = false,
29
+ ariaLabel = "Scale",
30
+ className,
31
+ ...props
32
+ }, ref) {
33
+ const numericValue = value === "" || value === null || value === void 0 || Number.isNaN(value) ? null : Number(value);
34
+ const thumbColor = scaleColorForValue(min, max, value);
35
+ const sliderValue = numericValue === null ? min : numericValue;
36
+ const handleSlider = (event) => {
37
+ const numeric = Number(event.target.value);
38
+ onChange(Number.isNaN(numeric) ? "" : numeric);
39
+ };
40
+ const handleInputChange = (event) => {
41
+ const raw = event.target.value;
42
+ if (raw === "") {
43
+ onChange("");
44
+ return;
45
+ }
46
+ const numeric = Number(raw);
47
+ onChange(Number.isNaN(numeric) ? "" : numeric);
48
+ };
49
+ const handleInputBlur = () => {
50
+ if (numericValue === null) return;
51
+ const clamped = Math.max(min, Math.min(max, numericValue));
52
+ if (clamped !== numericValue) onChange(clamped);
53
+ };
54
+ const showLabels = Boolean(lowLabel || highLabel);
55
+ return /* @__PURE__ */ jsxs(
56
+ "div",
57
+ {
58
+ ref,
59
+ "data-as": "scale-slider",
60
+ className: cn("flex flex-col gap-1.5", className),
61
+ ...props,
62
+ children: [
63
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
64
+ /* @__PURE__ */ jsx(
65
+ "input",
66
+ {
67
+ type: "range",
68
+ "aria-label": ariaLabel,
69
+ className: cn(
70
+ "h-1.5 flex-1 cursor-pointer accent-[var(--as-primary)]",
71
+ disabled && "cursor-not-allowed opacity-50"
72
+ ),
73
+ min,
74
+ max,
75
+ step,
76
+ value: sliderValue,
77
+ disabled,
78
+ onChange: handleSlider
79
+ }
80
+ ),
81
+ showInput ? /* @__PURE__ */ jsx(
82
+ "input",
83
+ {
84
+ type: "number",
85
+ "aria-label": `${ariaLabel} value`,
86
+ min,
87
+ max,
88
+ step,
89
+ value: value ?? "",
90
+ disabled,
91
+ onChange: handleInputChange,
92
+ onBlur: handleInputBlur,
93
+ style: { borderColor: thumbColor },
94
+ className: "w-16 rounded-[var(--as-radius-sm)] border-2 bg-[var(--as-surface-raised)] px-2 py-1.5 text-center text-sm font-bold text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:opacity-50"
95
+ }
96
+ ) : null
97
+ ] }),
98
+ showLabels ? /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-[9px] font-bold uppercase tracking-wider opacity-50", children: [
99
+ /* @__PURE__ */ jsx("span", { style: { color: positionColor(0) }, children: lowLabel }),
100
+ /* @__PURE__ */ jsx("span", { style: { color: positionColor(1) }, children: highLabel })
101
+ ] }) : null
102
+ ]
103
+ }
104
+ );
105
+ }
106
+ );
107
+
108
+ export { ScaleSlider, scaleColorForValue };
109
+ //# sourceMappingURL=chunk-UIUALJNR.js.map
110
+ //# sourceMappingURL=chunk-UIUALJNR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/scale-slider/ScaleSlider.tsx"],"names":["ScaleSlider"],"mappings":";;;;AAiBO,SAAS,kBAAA,CACd,GAAA,EACA,GAAA,EACA,KAAA,EACQ;AACR,EAAA,IAAI,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AACzD,IAAA,OAAO,oBAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAC5B,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,EAAG,OAAO,oBAAA;AAClC,EAAA,OAAO,aAAA,CAAA,CAAe,OAAA,GAAU,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAI,CAAA;AACpD;AAEA,SAAS,cAAc,QAAA,EAA0B;AAC/C,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAA;AACjD,EAAA,MAAM,GAAA,GAAM,OAAO,CAAA,GAAI,OAAA,CAAA;AACvB,EAAA,OAAO,CAAA,IAAA,EAAO,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC,CAAA,WAAA,CAAA;AAC9B;AAEO,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASA,YAAAA,CACP;AAAA,IACE,KAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA,GAAO,CAAA;AAAA,IACP,QAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA,GAAY,IAAA;AAAA,IACZ,QAAA,GAAW,KAAA;AAAA,IACX,SAAA,GAAY,OAAA;AAAA,IACZ,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,YAAA,GACJ,KAAA,KAAU,EAAA,IACV,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,MAAA,IACV,MAAA,CAAO,KAAA,CAAM,KAAe,CAAA,GACxB,IAAA,GACA,OAAO,KAAK,CAAA;AAClB,IAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,GAAA,EAAK,GAAA,EAAK,KAAK,CAAA;AACrD,IAAA,MAAM,WAAA,GAAc,YAAA,KAAiB,IAAA,GAAO,GAAA,GAAM,YAAA;AAElD,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAA+C;AACnE,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AACzC,MAAA,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,KAAK,OAAO,CAAA;AAAA,IAC/C,CAAA;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAA+C;AACxE,MAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,KAAA;AACzB,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,QAAA,CAAS,EAAE,CAAA;AACX,QAAA;AAAA,MACF;AACA,MAAA,MAAM,OAAA,GAAU,OAAO,GAAG,CAAA;AAC1B,MAAA,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,KAAK,OAAO,CAAA;AAAA,IAC/C,CAAA;AAEA,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,IAAI,iBAAiB,IAAA,EAAM;AAC3B,MAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA,EAAK,YAAY,CAAC,CAAA;AACzD,MAAA,IAAI,OAAA,KAAY,YAAA,EAAc,QAAA,CAAS,OAAO,CAAA;AAAA,IAChD,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,SAAS,CAAA;AAEhD,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,cAAA;AAAA,QACR,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,QAC/C,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,OAAA;AAAA,gBACL,YAAA,EAAY,SAAA;AAAA,gBACZ,SAAA,EAAW,EAAA;AAAA,kBACT,wDAAA;AAAA,kBACA,QAAA,IAAY;AAAA,iBACd;AAAA,gBACA,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,IAAA;AAAA,gBACA,KAAA,EAAO,WAAA;AAAA,gBACP,QAAA;AAAA,gBACA,QAAA,EAAU;AAAA;AAAA,aACZ;AAAA,YACC,SAAA,mBACC,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,YAAA,EAAY,GAAG,SAAS,CAAA,MAAA,CAAA;AAAA,gBACxB,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,IAAA;AAAA,gBACA,OAAO,KAAA,IAAS,EAAA;AAAA,gBAChB,QAAA;AAAA,gBACA,QAAA,EAAU,iBAAA;AAAA,gBACV,MAAA,EAAQ,eAAA;AAAA,gBACR,KAAA,EAAO,EAAE,WAAA,EAAa,UAAA,EAAW;AAAA,gBACjC,SAAA,EAAU;AAAA;AAAA,aACZ,GACE;AAAA,WAAA,EACN,CAAA;AAAA,UACC,UAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+EAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,OAAO,EAAE,KAAA,EAAO,cAAc,CAAC,CAAA,IAAM,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,4BACpD,GAAA,CAAC,UAAK,KAAA,EAAO,EAAE,OAAO,aAAA,CAAc,CAAC,CAAA,EAAE,EAAI,QAAA,EAAA,SAAA,EAAU;AAAA,WAAA,EACvD,CAAA,GACE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-UIUALJNR.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface ScaleSliderProps\n extends Omit<React.ComponentProps<'div'>, 'onChange'> {\n value: number | '' | null | undefined\n onChange: (value: number | '') => void\n min: number\n max: number\n step?: number\n lowLabel?: string\n highLabel?: string\n showInput?: boolean\n disabled?: boolean\n ariaLabel?: string\n}\n\nexport function scaleColorForValue(\n min: number,\n max: number,\n value: number | '' | null | undefined,\n): string {\n if (value === '' || value === null || value === undefined) {\n return 'var(--as-muted-fg)'\n }\n const numeric = Number(value)\n if (Number.isNaN(numeric)) return 'var(--as-muted-fg)'\n return positionColor((numeric - min) / (max - min))\n}\n\nfunction positionColor(position: number): string {\n const clamped = Math.max(0, Math.min(1, position))\n const hue = 142 * (1 - clamped)\n return `hsl(${hue.toFixed(0)}, 72%, 48%)`\n}\n\nexport const ScaleSlider = React.forwardRef<HTMLDivElement, ScaleSliderProps>(\n function ScaleSlider(\n {\n value,\n onChange,\n min,\n max,\n step = 1,\n lowLabel,\n highLabel,\n showInput = true,\n disabled = false,\n ariaLabel = 'Scale',\n className,\n ...props\n },\n ref,\n ) {\n const numericValue =\n value === '' ||\n value === null ||\n value === undefined ||\n Number.isNaN(value as number)\n ? null\n : Number(value)\n const thumbColor = scaleColorForValue(min, max, value)\n const sliderValue = numericValue === null ? min : numericValue\n\n const handleSlider = (event: React.ChangeEvent<HTMLInputElement>) => {\n const numeric = Number(event.target.value)\n onChange(Number.isNaN(numeric) ? '' : numeric)\n }\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const raw = event.target.value\n if (raw === '') {\n onChange('')\n return\n }\n const numeric = Number(raw)\n onChange(Number.isNaN(numeric) ? '' : numeric)\n }\n\n const handleInputBlur = () => {\n if (numericValue === null) return\n const clamped = Math.max(min, Math.min(max, numericValue))\n if (clamped !== numericValue) onChange(clamped)\n }\n\n const showLabels = Boolean(lowLabel || highLabel)\n\n return (\n <div\n ref={ref}\n data-as=\"scale-slider\"\n className={cn('flex flex-col gap-1.5', className)}\n {...props}\n >\n <div className=\"flex items-center gap-3\">\n <input\n type=\"range\"\n aria-label={ariaLabel}\n className={cn(\n 'h-1.5 flex-1 cursor-pointer accent-[var(--as-primary)]',\n disabled && 'cursor-not-allowed opacity-50',\n )}\n min={min}\n max={max}\n step={step}\n value={sliderValue}\n disabled={disabled}\n onChange={handleSlider}\n />\n {showInput ? (\n <input\n type=\"number\"\n aria-label={`${ariaLabel} value`}\n min={min}\n max={max}\n step={step}\n value={value ?? ''}\n disabled={disabled}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n style={{ borderColor: thumbColor }}\n className=\"w-16 rounded-[var(--as-radius-sm)] border-2 bg-[var(--as-surface-raised)] px-2 py-1.5 text-center text-sm font-bold text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:opacity-50\"\n />\n ) : null}\n </div>\n {showLabels ? (\n <div className=\"flex justify-between text-[9px] font-bold uppercase tracking-wider opacity-50\">\n <span style={{ color: positionColor(0) }}>{lowLabel}</span>\n <span style={{ color: positionColor(1) }}>{highLabel}</span>\n </div>\n ) : null}\n </div>\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,82 @@
1
+ import { cn } from './chunk-BLJWR4ZV.js';
2
+ import * as React from 'react';
3
+ import { X, ChevronRight } from 'lucide-react';
4
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
+
6
+ var chipTints = {
7
+ primary: "bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] text-[var(--as-primary)]",
8
+ success: "bg-[color-mix(in_srgb,var(--as-success)_14%,transparent)] text-[var(--as-success)]",
9
+ warning: "bg-[color-mix(in_srgb,var(--as-warning)_18%,transparent)] text-[color-mix(in_srgb,var(--as-warning)_72%,var(--as-fg))]",
10
+ danger: "bg-[color-mix(in_srgb,var(--as-danger)_12%,transparent)] text-[var(--as-danger)]"
11
+ };
12
+ var ChipList = React.forwardRef(
13
+ function ChipList2({
14
+ items,
15
+ onRemove,
16
+ onItemClick,
17
+ variant = "neutral",
18
+ emptyText,
19
+ showChevron = false,
20
+ removeLabel = "Remove",
21
+ className,
22
+ ...props
23
+ }, ref) {
24
+ const cleaned = items.filter((item) => Boolean(item));
25
+ if (cleaned.length === 0) {
26
+ if (!emptyText) return null;
27
+ return /* @__PURE__ */ jsx("p", { className: cn("text-sm text-[var(--as-muted-fg)]", className), children: emptyText });
28
+ }
29
+ return /* @__PURE__ */ jsx(
30
+ "div",
31
+ {
32
+ ref,
33
+ "data-as": "chip-list",
34
+ className: cn("flex flex-wrap gap-1.5", className),
35
+ ...props,
36
+ children: cleaned.map((item, index) => {
37
+ const tint = variant === "neutral" ? "bg-[var(--as-secondary)] text-[var(--as-secondary-fg)]" : chipTints[variant];
38
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
39
+ item,
40
+ onItemClick && showChevron ? /* @__PURE__ */ jsx(ChevronRight, { className: "size-3 opacity-60", "aria-hidden": true }) : null
41
+ ] });
42
+ return /* @__PURE__ */ jsxs(
43
+ "span",
44
+ {
45
+ className: cn(
46
+ "inline-flex items-center gap-1 rounded-[calc(var(--as-radius-sm)-2px)] py-0.5 pl-2.5 pr-1.5 text-xs font-medium",
47
+ onItemClick && "cursor-pointer transition-[filter] hover:brightness-95 focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]",
48
+ tint
49
+ ),
50
+ children: [
51
+ onItemClick ? /* @__PURE__ */ jsx(
52
+ "button",
53
+ {
54
+ type: "button",
55
+ onClick: () => onItemClick(item, index),
56
+ className: "cursor-pointer bg-transparent p-0 text-inherit outline-none",
57
+ children: content
58
+ }
59
+ ) : content,
60
+ onRemove ? /* @__PURE__ */ jsx(
61
+ "button",
62
+ {
63
+ type: "button",
64
+ "aria-label": `${removeLabel} ${item}`,
65
+ onClick: () => onRemove(item),
66
+ className: "cursor-pointer opacity-70 transition-colors hover:text-[var(--as-danger)] hover:opacity-100 focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]",
67
+ children: /* @__PURE__ */ jsx(X, { className: "size-3", "aria-hidden": true })
68
+ }
69
+ ) : null
70
+ ]
71
+ },
72
+ `${item}-${index}`
73
+ );
74
+ })
75
+ }
76
+ );
77
+ }
78
+ );
79
+
80
+ export { ChipList };
81
+ //# sourceMappingURL=chunk-XLD2BPTT.js.map
82
+ //# sourceMappingURL=chunk-XLD2BPTT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chip-list/ChipList.tsx"],"names":["ChipList"],"mappings":";;;;;AAgBA,IAAM,SAAA,GAA6D;AAAA,EACjE,OAAA,EAAS,oFAAA;AAAA,EACT,OAAA,EACE,oFAAA;AAAA,EACF,OAAA,EACE,wHAAA;AAAA,EACF,MAAA,EAAQ;AACV,CAAA;AAEO,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EAC5B,SAASA,SAAAA,CACP;AAAA,IACE,KAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA,GAAU,SAAA;AAAA,IACV,SAAA;AAAA,IACA,WAAA,GAAc,KAAA;AAAA,IACd,WAAA,GAAc,QAAA;AAAA,IACd,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,UAAU,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAyB,OAAA,CAAQ,IAAI,CAAC,CAAA;AAEpE,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,MAAA,2BACG,GAAA,EAAA,EAAE,SAAA,EAAW,GAAG,mCAAA,EAAqC,SAAS,GAC5D,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,IAEJ;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,WAAA;AAAA,QACR,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,QAChD,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAC5B,UAAA,MAAM,IAAA,GACJ,OAAA,KAAY,SAAA,GACR,wDAAA,GACA,UAAU,OAAO,CAAA;AACvB,UAAA,MAAM,0BACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,IAAA;AAAA,YACA,WAAA,IAAe,8BACd,GAAA,CAAC,YAAA,EAAA,EAAa,WAAU,mBAAA,EAAoB,aAAA,EAAW,MAAC,CAAA,GACtD;AAAA,WAAA,EACN,CAAA;AAEF,UAAA,uBACE,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,EAAA;AAAA,gBACT,iHAAA;AAAA,gBACA,WAAA,IACE,4JAAA;AAAA,gBACF;AAAA,eACF;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,WAAA,mBACC,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAS,MAAM,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA;AAAA,oBACtC,SAAA,EAAU,6DAAA;AAAA,oBAET,QAAA,EAAA;AAAA;AAAA,iBACH,GAEA,OAAA;AAAA,gBAED,QAAA,mBACC,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,YAAA,EAAY,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,oBAClC,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,oBAC5B,SAAA,EAAU,iMAAA;AAAA,oBAEV,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,iBACpC,GACE;AAAA;AAAA,aAAA;AAAA,YA5BC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,WA6BvB;AAAA,QAEJ,CAAC;AAAA;AAAA,KACH;AAAA,EAEJ;AACF","file":"chunk-XLD2BPTT.js","sourcesContent":["import * as React from 'react'\nimport { ChevronRight, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport type ChipVariant = 'neutral' | 'primary' | 'success' | 'warning' | 'danger'\n\nexport interface ChipListProps extends React.ComponentProps<'div'> {\n items: ReadonlyArray<string | null | undefined>\n onRemove?: (item: string) => void\n onItemClick?: (value: string, index: number) => void\n variant?: ChipVariant\n emptyText?: string\n showChevron?: boolean\n removeLabel?: string\n}\n\nconst chipTints: Record<Exclude<ChipVariant, 'neutral'>, string> = {\n primary: 'bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] text-[var(--as-primary)]',\n success:\n 'bg-[color-mix(in_srgb,var(--as-success)_14%,transparent)] text-[var(--as-success)]',\n warning:\n 'bg-[color-mix(in_srgb,var(--as-warning)_18%,transparent)] text-[color-mix(in_srgb,var(--as-warning)_72%,var(--as-fg))]',\n danger: 'bg-[color-mix(in_srgb,var(--as-danger)_12%,transparent)] text-[var(--as-danger)]',\n}\n\nexport const ChipList = React.forwardRef<HTMLDivElement, ChipListProps>(\n function ChipList(\n {\n items,\n onRemove,\n onItemClick,\n variant = 'neutral',\n emptyText,\n showChevron = false,\n removeLabel = 'Remove',\n className,\n ...props\n },\n ref,\n ) {\n const cleaned = items.filter((item): item is string => Boolean(item))\n\n if (cleaned.length === 0) {\n if (!emptyText) return null\n return (\n <p className={cn('text-sm text-[var(--as-muted-fg)]', className)}>\n {emptyText}\n </p>\n )\n }\n\n return (\n <div\n ref={ref}\n data-as=\"chip-list\"\n className={cn('flex flex-wrap gap-1.5', className)}\n {...props}\n >\n {cleaned.map((item, index) => {\n const tint =\n variant === 'neutral'\n ? 'bg-[var(--as-secondary)] text-[var(--as-secondary-fg)]'\n : chipTints[variant]\n const content = (\n <>\n {item}\n {onItemClick && showChevron ? (\n <ChevronRight className=\"size-3 opacity-60\" aria-hidden />\n ) : null}\n </>\n )\n return (\n <span\n key={`${item}-${index}`}\n className={cn(\n 'inline-flex items-center gap-1 rounded-[calc(var(--as-radius-sm)-2px)] py-0.5 pl-2.5 pr-1.5 text-xs font-medium',\n onItemClick &&\n 'cursor-pointer transition-[filter] hover:brightness-95 focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n tint,\n )}\n >\n {onItemClick ? (\n <button\n type=\"button\"\n onClick={() => onItemClick(item, index)}\n className=\"cursor-pointer bg-transparent p-0 text-inherit outline-none\"\n >\n {content}\n </button>\n ) : (\n content\n )}\n {onRemove ? (\n <button\n type=\"button\"\n aria-label={`${removeLabel} ${item}`}\n onClick={() => onRemove(item)}\n className=\"cursor-pointer opacity-70 transition-colors hover:text-[var(--as-danger)] hover:opacity-100 focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X className=\"size-3\" aria-hidden />\n </button>\n ) : null}\n </span>\n )\n })}\n </div>\n )\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"}
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+
3
+ interface DatePickerProps {
4
+ value: string | null | undefined;
5
+ onChange: (value: string) => void;
6
+ onClear?: () => void;
7
+ allowClear?: boolean;
8
+ clearLabel?: string;
9
+ placeholder?: string;
10
+ displayFormat?: string;
11
+ minDate?: Date;
12
+ maxDate?: Date;
13
+ weekStartsOn?: 0 | 1;
14
+ disabled?: boolean;
15
+ required?: boolean;
16
+ variant?: 'default' | 'unstyled';
17
+ id?: string;
18
+ name?: string;
19
+ label?: string;
20
+ prevLabel?: string;
21
+ nextLabel?: string;
22
+ className?: string;
23
+ panelClassName?: string;
24
+ }
25
+ declare const DatePicker: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<HTMLDivElement>>;
26
+
27
+ export { DatePicker, type DatePickerProps };
@@ -0,0 +1,3 @@
1
+ export { DatePicker } from './chunk-MEBOS2FX.js';
2
+ //# sourceMappingURL=date-picker.js.map
3
+ //# sourceMappingURL=date-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"date-picker.js"}
@@ -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,12 +4,17 @@ 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
+ export { ChipInput, ChipInputProps } from './chip-input.js';
12
+ export { ChipList, ChipListProps, ChipVariant } from './chip-list.js';
10
13
  export { Combobox, ComboboxMulti, ComboboxMultiProps, ComboboxOption, ComboboxProps } from './combobox.js';
11
14
  export { ConfirmationModal, ConfirmationModalProps } from './confirmation-modal.js';
15
+ export { CopyButton, CopyButtonProps } from './copy-button.js';
12
16
  export { ContextMenu, ContextMenuItem, ContextMenuProps } from './context-menu.js';
17
+ export { DatePicker, DatePickerProps } from './date-picker.js';
13
18
  export { EmptyState, EmptyStateProps } from './empty-state.js';
14
19
  export { ErrorBanner, ErrorBannerProps } from './error-banner.js';
15
20
  export { ExpandableSearch, ExpandableSearchProps } from './expandable-search.js';
@@ -19,12 +24,15 @@ export { InfoButton, InfoButtonProps } from './info-button.js';
19
24
  export { Input, InputProps } from './input.js';
20
25
  export { MarqueeBand, MarqueePhase, MarqueeSelection, MarqueeSurface, MarqueeSurfaceProps, Rect, UseMarqueeOptions, hitTestIds, marqueeRect, rectsIntersect, useMarquee } from './marquee.js';
21
26
  export { ActionMenu, ActionMenuItem, ActionMenuProps, Menu, MenuContent, MenuGroup, MenuItem, MenuItemProps, MenuLabel, MenuSeparator, MenuTrigger } from './menu.js';
22
- export { Modal, ModalClose, ModalContent, ModalContentProps, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, modalContentVariants } from './modal.js';
23
- export { PopoverButton, PopoverButtonProps } from './popover-button.js';
27
+ export { Modal, ModalClose, ModalContent, ModalContentProps, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, PanelModal, PanelModalProps, modalContentVariants } from './modal.js';
24
28
  export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from './popover.js';
29
+ export { PopoverButton, PopoverButtonProps } from './popover-button.js';
30
+ export { RangeBar, RangeBarProps } from './range-bar.js';
31
+ export { ScaleSlider, ScaleSliderProps, scaleColorForValue } from './scale-slider.js';
25
32
  export { SearchInput, SearchInputProps } from './search-input.js';
26
33
  export { SelectionBar, SelectionBarProps } from './selection-bar.js';
27
34
  export { Spinner, SpinnerProps } from './spinner.js';
35
+ export { Table, TableProps } from './table.js';
28
36
  export { InfoTooltip, InfoTooltipProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip.js';
29
37
  export { UndoNotice, UndoNoticeProps } from './undo-notice.js';
30
38
  export { ViewToggle, ViewToggleProps, ViewToggleView } from './view-toggle.js';
package/dist/index.js CHANGED
@@ -1,32 +1,41 @@
1
+ export { Table } from './chunk-5X3RYDPC.js';
1
2
  export { ThemeScope } from './chunk-TGU3PKNM.js';
2
3
  export { InfoTooltip, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './chunk-TJGX27YO.js';
3
4
  export { UndoNotice } from './chunk-OUHUVACM.js';
4
5
  export { ViewToggle } from './chunk-MXOBOS4Y.js';
5
6
  export { Stepper, Wizard } from './chunk-LEDQQBVV.js';
6
- export { MarqueeBand, MarqueeSurface, hitTestIds, marqueeRect, rectsIntersect, useMarquee } from './chunk-RU3DEF2O.js';
7
- export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from './chunk-CI56SSO2.js';
8
7
  export { Portal } from './chunk-7YLR4AGA.js';
8
+ export { RangeBar } from './chunk-5AVBKEDQ.js';
9
+ export { ScaleSlider, scaleColorForValue } from './chunk-UIUALJNR.js';
9
10
  export { SearchInput } from './chunk-H5U4KNXF.js';
10
11
  export { SelectionBar } from './chunk-HSUCCANX.js';
11
- export { ContextMenu } from './chunk-WZSAUESL.js';
12
- export { ActionMenu, Menu, MenuContent, MenuGroup, MenuItem, MenuLabel, MenuSeparator, MenuTrigger } from './chunk-KXLMTAZ5.js';
13
- export { EmptyState } from './chunk-KDJLYKR6.js';
14
- export { ErrorBanner } from './chunk-BJOY3XL7.js';
15
12
  export { ExpandableSearch } from './chunk-4SW3ESVI.js';
16
13
  export { FieldLabel } from './chunk-ESUTPQDO.js';
17
- export { FormModal } from './chunk-GPIN2ITX.js';
14
+ export { FormModal } from './chunk-5HXDKOBY.js';
18
15
  export { InfoButton } from './chunk-DV3MXDLN.js';
19
16
  export { PopoverButton } from './chunk-N5KQRHXU.js';
20
17
  export { Input } from './chunk-COPPAHR5.js';
21
- export { rawTokens, semanticTokens } from './chunk-3HFL3JGP.js';
22
- export { Badge, badgeVariants } from './chunk-SKTLC2XY.js';
23
- export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-HSWSYEFQ.js';
24
- export { CheckIndicator } from './chunk-XE4TFW63.js';
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';
25
21
  export { Combobox, ComboboxMulti } from './chunk-3522NABN.js';
26
22
  export { ConfirmationModal } from './chunk-GA3XIDVX.js';
27
23
  export { Modal, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalTitle, ModalTrigger, modalContentVariants } from './chunk-RHBQ3GZE.js';
24
+ export { CopyButton } from './chunk-CZ2BL2ZL.js';
25
+ export { ContextMenu } from './chunk-WZSAUESL.js';
26
+ export { ActionMenu, Menu, MenuContent, MenuGroup, MenuItem, MenuLabel, MenuSeparator, MenuTrigger } from './chunk-KXLMTAZ5.js';
27
+ export { DatePicker } from './chunk-MEBOS2FX.js';
28
+ export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from './chunk-CI56SSO2.js';
29
+ export { EmptyState } from './chunk-KDJLYKR6.js';
30
+ export { ErrorBanner } from './chunk-BJOY3XL7.js';
31
+ export { rawTokens, semanticTokens } from './chunk-3HFL3JGP.js';
32
+ export { Badge, badgeVariants } from './chunk-SKTLC2XY.js';
33
+ export { Breadcrumbs } from './chunk-TFS2NUET.js';
28
34
  export { Button, buttonVariants } from './chunk-GTXGTQ6F.js';
29
35
  export { Spinner } from './chunk-INTST5VG.js';
36
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-HSWSYEFQ.js';
37
+ export { CheckIndicator } from './chunk-XE4TFW63.js';
38
+ export { ChipInput } from './chunk-TPLQL62V.js';
30
39
  export { cn } from './chunk-BLJWR4ZV.js';
31
40
  //# sourceMappingURL=index.js.map
32
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
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+
3
+ interface RangeBarProps extends React.ComponentProps<'div'> {
4
+ low: number;
5
+ high: number;
6
+ min?: number;
7
+ max?: number;
8
+ value?: number | null;
9
+ unit?: string;
10
+ label?: string;
11
+ valueLabel?: string;
12
+ }
13
+ declare const RangeBar: React.ForwardRefExoticComponent<Omit<RangeBarProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
14
+
15
+ export { RangeBar, type RangeBarProps };
@@ -0,0 +1,3 @@
1
+ export { RangeBar } from './chunk-5AVBKEDQ.js';
2
+ //# sourceMappingURL=range-bar.js.map
3
+ //# sourceMappingURL=range-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"range-bar.js"}
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+
3
+ interface ScaleSliderProps extends Omit<React.ComponentProps<'div'>, 'onChange'> {
4
+ value: number | '' | null | undefined;
5
+ onChange: (value: number | '') => void;
6
+ min: number;
7
+ max: number;
8
+ step?: number;
9
+ lowLabel?: string;
10
+ highLabel?: string;
11
+ showInput?: boolean;
12
+ disabled?: boolean;
13
+ ariaLabel?: string;
14
+ }
15
+ declare function scaleColorForValue(min: number, max: number, value: number | '' | null | undefined): string;
16
+ declare const ScaleSlider: React.ForwardRefExoticComponent<Omit<ScaleSliderProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
17
+
18
+ export { ScaleSlider, type ScaleSliderProps, scaleColorForValue };
@@ -0,0 +1,3 @@
1
+ export { ScaleSlider, scaleColorForValue } from './chunk-UIUALJNR.js';
2
+ //# sourceMappingURL=scale-slider.js.map
3
+ //# sourceMappingURL=scale-slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"scale-slider.js"}