@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.
- package/CHANGELOG.md +56 -0
- package/README.md +26 -5
- package/dist/breadcrumbs.d.ts +24 -0
- package/dist/breadcrumbs.js +3 -0
- package/dist/breadcrumbs.js.map +1 -0
- package/dist/chip-input.d.ts +14 -0
- package/dist/chip-input.js +3 -0
- package/dist/chip-input.js.map +1 -0
- package/dist/chip-list.d.ts +15 -0
- package/dist/chip-list.js +3 -0
- package/dist/chip-list.js.map +1 -0
- package/dist/chunk-5AVBKEDQ.js +74 -0
- package/dist/chunk-5AVBKEDQ.js.map +1 -0
- package/dist/{chunk-GPIN2ITX.js → chunk-5HXDKOBY.js} +24 -7
- package/dist/chunk-5HXDKOBY.js.map +1 -0
- package/dist/chunk-5X3RYDPC.js +54 -0
- package/dist/chunk-5X3RYDPC.js.map +1 -0
- package/dist/chunk-CZ2BL2ZL.js +89 -0
- package/dist/chunk-CZ2BL2ZL.js.map +1 -0
- package/dist/chunk-MEBOS2FX.js +359 -0
- package/dist/chunk-MEBOS2FX.js.map +1 -0
- package/dist/chunk-TFS2NUET.js +66 -0
- package/dist/chunk-TFS2NUET.js.map +1 -0
- package/dist/chunk-TPLQL62V.js +124 -0
- package/dist/chunk-TPLQL62V.js.map +1 -0
- package/dist/chunk-UIUALJNR.js +110 -0
- package/dist/chunk-UIUALJNR.js.map +1 -0
- package/dist/chunk-WPO6CDA4.js +92 -0
- package/dist/chunk-WPO6CDA4.js.map +1 -0
- package/dist/chunk-XLD2BPTT.js +82 -0
- package/dist/chunk-XLD2BPTT.js.map +1 -0
- package/dist/copy-button.d.ts +14 -0
- package/dist/copy-button.js +3 -0
- package/dist/copy-button.js.map +1 -0
- package/dist/date-picker.d.ts +27 -0
- package/dist/date-picker.js +3 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/form-modal.d.ts +6 -1
- package/dist/form-modal.js +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.js +20 -11
- package/dist/modal.d.ts +23 -1
- package/dist/modal.js +1 -0
- package/dist/range-bar.d.ts +15 -0
- package/dist/range-bar.js +3 -0
- package/dist/range-bar.js.map +1 -0
- package/dist/scale-slider.d.ts +18 -0
- package/dist/scale-slider.js +3 -0
- package/dist/scale-slider.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/table.d.ts +10 -0
- package/dist/table.js +3 -0
- package/dist/table.js.map +1 -0
- package/package.json +36 -2
- package/dist/chunk-GPIN2ITX.js.map +0 -1
- package/dist/chunk-IFNT6JSQ.js +0 -3
- 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":"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","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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"date-picker.js"}
|
package/dist/form-modal.d.ts
CHANGED
|
@@ -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 };
|
package/dist/form-modal.js
CHANGED
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-
|
|
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 {
|
|
22
|
-
export {
|
|
23
|
-
export {
|
|
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
|
-
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"scale-slider.js"}
|