@neuronection/assistant-ui 0.1.0 → 0.3.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 +40 -0
- package/README.md +40 -9
- package/dist/badge.js +1 -1
- package/dist/button.js +1 -1
- package/dist/check-indicator.d.ts +12 -0
- package/dist/check-indicator.js +3 -0
- package/dist/check-indicator.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-2KO2YIZN.js +357 -0
- package/dist/chunk-2KO2YIZN.js.map +1 -0
- package/dist/chunk-3522NABN.js +452 -0
- package/dist/chunk-3522NABN.js.map +1 -0
- package/dist/chunk-4SW3ESVI.js +111 -0
- package/dist/chunk-4SW3ESVI.js.map +1 -0
- package/dist/chunk-5AVBKEDQ.js +74 -0
- package/dist/chunk-5AVBKEDQ.js.map +1 -0
- package/dist/chunk-5X3RYDPC.js +54 -0
- package/dist/chunk-5X3RYDPC.js.map +1 -0
- package/dist/chunk-BJOY3XL7.js +27 -0
- package/dist/chunk-BJOY3XL7.js.map +1 -0
- package/dist/chunk-BPTGPF3L.js +3 -0
- package/dist/chunk-BPTGPF3L.js.map +1 -0
- package/dist/chunk-DV3MXDLN.js +46 -0
- package/dist/chunk-DV3MXDLN.js.map +1 -0
- package/dist/chunk-ESUTPQDO.js +21 -0
- package/dist/chunk-ESUTPQDO.js.map +1 -0
- package/dist/{chunk-TLTKWLMN.js → chunk-GA3XIDVX.js} +3 -3
- package/dist/{chunk-TLTKWLMN.js.map → chunk-GA3XIDVX.js.map} +1 -1
- package/dist/chunk-GPIN2ITX.js +63 -0
- package/dist/chunk-GPIN2ITX.js.map +1 -0
- package/dist/{chunk-56VRWCLJ.js → chunk-GTXGTQ6F.js} +2 -2
- package/dist/{chunk-56VRWCLJ.js.map → chunk-GTXGTQ6F.js.map} +1 -1
- package/dist/chunk-H5U4KNXF.js +63 -0
- package/dist/chunk-H5U4KNXF.js.map +1 -0
- package/dist/chunk-HSUCCANX.js +44 -0
- package/dist/chunk-HSUCCANX.js.map +1 -0
- package/dist/chunk-KXLMTAZ5.js +109 -0
- package/dist/chunk-KXLMTAZ5.js.map +1 -0
- package/dist/chunk-LEDQQBVV.js +184 -0
- package/dist/chunk-LEDQQBVV.js.map +1 -0
- package/dist/chunk-MXOBOS4Y.js +60 -0
- package/dist/chunk-MXOBOS4Y.js.map +1 -0
- package/dist/chunk-N5KQRHXU.js +107 -0
- package/dist/chunk-N5KQRHXU.js.map +1 -0
- package/dist/chunk-OAR74ML4.js +3 -0
- package/dist/chunk-OAR74ML4.js.map +1 -0
- package/dist/chunk-OUHUVACM.js +45 -0
- package/dist/chunk-OUHUVACM.js.map +1 -0
- package/dist/chunk-PPH3G7AL.js +3 -0
- package/dist/chunk-PPH3G7AL.js.map +1 -0
- package/dist/chunk-RU3DEF2O.js +186 -0
- package/dist/chunk-RU3DEF2O.js.map +1 -0
- package/dist/{chunk-NQQNTK6L.js → chunk-SKTLC2XY.js} +2 -2
- package/dist/{chunk-NQQNTK6L.js.map → chunk-SKTLC2XY.js.map} +1 -1
- 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-WZSAUESL.js +58 -0
- package/dist/chunk-WZSAUESL.js.map +1 -0
- package/dist/chunk-XE4TFW63.js +34 -0
- package/dist/chunk-XE4TFW63.js.map +1 -0
- package/dist/chunk-XLD2BPTT.js +82 -0
- package/dist/chunk-XLD2BPTT.js.map +1 -0
- package/dist/combobox.d.ts +54 -0
- package/dist/combobox.js +3 -0
- package/dist/combobox.js.map +1 -0
- package/dist/confirmation-modal.js +1 -1
- package/dist/context-menu.d.ts +22 -0
- package/dist/context-menu.js +3 -0
- package/dist/context-menu.js.map +1 -0
- package/dist/date-picker.d.ts +26 -0
- package/dist/date-picker.js +3 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/error-banner.d.ts +10 -0
- package/dist/error-banner.js +3 -0
- package/dist/error-banner.js.map +1 -0
- package/dist/expandable-search.d.ts +16 -0
- package/dist/expandable-search.js +3 -0
- package/dist/expandable-search.js.map +1 -0
- package/dist/field-label.d.ts +13 -0
- package/dist/field-label.js +3 -0
- package/dist/field-label.js.map +1 -0
- package/dist/form-modal.d.ts +23 -0
- package/dist/form-modal.js +3 -0
- package/dist/form-modal.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +30 -8
- package/dist/info-button.d.ts +13 -0
- package/dist/info-button.js +3 -0
- package/dist/info-button.js.map +1 -0
- package/dist/marquee.d.ts +39 -0
- package/dist/marquee.js +3 -0
- package/dist/marquee.js.map +1 -0
- package/dist/menu.d.ts +38 -0
- package/dist/menu.js +3 -0
- package/dist/menu.js.map +1 -0
- package/dist/popover-button.d.ts +23 -0
- package/dist/popover-button.js +3 -0
- package/dist/popover-button.js.map +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/search-input.d.ts +15 -0
- package/dist/search-input.js +3 -0
- package/dist/search-input.js.map +1 -0
- package/dist/selection-bar.d.ts +13 -0
- package/dist/selection-bar.js +3 -0
- package/dist/selection-bar.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/dist/undo-notice.d.ts +14 -0
- package/dist/undo-notice.js +3 -0
- package/dist/undo-notice.js.map +1 -0
- package/dist/view-toggle.d.ts +13 -0
- package/dist/view-toggle.js +3 -0
- package/dist/view-toggle.js.map +1 -0
- package/dist/wizard.d.ts +57 -0
- package/dist/wizard.js +3 -0
- package/dist/wizard.js.map +1 -0
- package/package.json +97 -4
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function pct(value, domainMin, domainMax) {
|
|
6
|
+
if (domainMax === domainMin) return 0;
|
|
7
|
+
return (value - domainMin) / (domainMax - domainMin) * 100;
|
|
8
|
+
}
|
|
9
|
+
function fmt(value) {
|
|
10
|
+
return Number.isInteger(value) ? value.toLocaleString() : value.toFixed(1).replace(/\.0$/, "");
|
|
11
|
+
}
|
|
12
|
+
var RangeBar = React.forwardRef(
|
|
13
|
+
function RangeBar2({ low, high, min, max, value, unit, label, valueLabel = "You", className, ...props }, ref) {
|
|
14
|
+
if (!Number.isFinite(low) || !Number.isFinite(high) || high <= low) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const span = high - low;
|
|
18
|
+
let domainMin = min ?? low - span;
|
|
19
|
+
let domainMax = max ?? high + span;
|
|
20
|
+
if (domainMin < 0 && low >= 0) {
|
|
21
|
+
const shift = -domainMin;
|
|
22
|
+
domainMin = 0;
|
|
23
|
+
domainMax += shift;
|
|
24
|
+
}
|
|
25
|
+
if (domainMax <= domainMin) domainMax = domainMin + span;
|
|
26
|
+
const left = Math.max(0, Math.min(100, pct(low, domainMin, domainMax)));
|
|
27
|
+
const right = Math.max(0, Math.min(100, pct(high, domainMin, domainMax)));
|
|
28
|
+
const valuePct = value !== null && value !== void 0 && Number.isFinite(value) ? Math.max(0, Math.min(100, pct(value, domainMin, domainMax))) : null;
|
|
29
|
+
return /* @__PURE__ */ jsxs(
|
|
30
|
+
"div",
|
|
31
|
+
{
|
|
32
|
+
ref,
|
|
33
|
+
"data-as": "range-bar",
|
|
34
|
+
className: cn("w-full", className),
|
|
35
|
+
...props,
|
|
36
|
+
children: [
|
|
37
|
+
label ? /* @__PURE__ */ jsx("p", { className: "mb-1 text-xs text-[var(--as-muted-fg)]", children: label }) : null,
|
|
38
|
+
/* @__PURE__ */ jsxs("div", { className: "relative h-3.5 w-full rounded-full bg-[var(--as-muted)]", children: [
|
|
39
|
+
/* @__PURE__ */ jsx(
|
|
40
|
+
"div",
|
|
41
|
+
{
|
|
42
|
+
className: "absolute h-full rounded-full bg-[color-mix(in_srgb,var(--as-primary)_30%,transparent)]",
|
|
43
|
+
style: { left: `${left}%`, width: `${Math.max(0, right - left)}%` },
|
|
44
|
+
title: `${label ? `${label}: ` : ""}${fmt(low)} \u2013 ${fmt(high)}${unit ? ` ${unit}` : ""}`
|
|
45
|
+
}
|
|
46
|
+
),
|
|
47
|
+
valuePct !== null ? /* @__PURE__ */ jsx(
|
|
48
|
+
"div",
|
|
49
|
+
{
|
|
50
|
+
className: "absolute top-1/2 size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-[var(--as-surface-raised)] bg-[var(--as-primary)] shadow-[var(--as-shadow-1)]",
|
|
51
|
+
style: { left: `${valuePct}%` },
|
|
52
|
+
title: `${valueLabel}: ${fmt(value)}${unit ? ` ${unit}` : ""}`
|
|
53
|
+
}
|
|
54
|
+
) : null
|
|
55
|
+
] }),
|
|
56
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-0.5 flex justify-between text-[10px] text-[var(--as-muted-fg)]", children: [
|
|
57
|
+
/* @__PURE__ */ jsx("span", { children: fmt(domainMin) }),
|
|
58
|
+
/* @__PURE__ */ jsxs("span", { className: "font-medium", children: [
|
|
59
|
+
fmt(low),
|
|
60
|
+
" \u2013 ",
|
|
61
|
+
fmt(high),
|
|
62
|
+
unit ? ` ${unit}` : ""
|
|
63
|
+
] }),
|
|
64
|
+
/* @__PURE__ */ jsx("span", { children: fmt(domainMax) })
|
|
65
|
+
] })
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
export { RangeBar };
|
|
73
|
+
//# sourceMappingURL=chunk-5AVBKEDQ.js.map
|
|
74
|
+
//# sourceMappingURL=chunk-5AVBKEDQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/range-bar/RangeBar.tsx"],"names":["RangeBar"],"mappings":"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","file":"chunk-5AVBKEDQ.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface RangeBarProps extends React.ComponentProps<'div'> {\n low: number\n high: number\n min?: number\n max?: number\n value?: number | null\n unit?: string\n label?: string\n valueLabel?: string\n}\n\nfunction pct(value: number, domainMin: number, domainMax: number): number {\n if (domainMax === domainMin) return 0\n return ((value - domainMin) / (domainMax - domainMin)) * 100\n}\n\nfunction fmt(value: number): string {\n return Number.isInteger(value)\n ? value.toLocaleString()\n : value.toFixed(1).replace(/\\.0$/, '')\n}\n\nexport const RangeBar = React.forwardRef<HTMLDivElement, RangeBarProps>(\n function RangeBar(\n { low, high, min, max, value, unit, label, valueLabel = 'You', className, ...props },\n ref,\n ) {\n if (!Number.isFinite(low) || !Number.isFinite(high) || high <= low) {\n return null\n }\n\n const span = high - low\n let domainMin = min ?? low - span\n let domainMax = max ?? high + span\n if (domainMin < 0 && low >= 0) {\n const shift = -domainMin\n domainMin = 0\n domainMax += shift\n }\n if (domainMax <= domainMin) domainMax = domainMin + span\n\n const left = Math.max(0, Math.min(100, pct(low, domainMin, domainMax)))\n const right = Math.max(0, Math.min(100, pct(high, domainMin, domainMax)))\n const valuePct =\n value !== null && value !== undefined && Number.isFinite(value)\n ? Math.max(0, Math.min(100, pct(value, domainMin, domainMax)))\n : null\n\n return (\n <div\n ref={ref}\n data-as=\"range-bar\"\n className={cn('w-full', className)}\n {...props}\n >\n {label ? (\n <p className=\"mb-1 text-xs text-[var(--as-muted-fg)]\">{label}</p>\n ) : null}\n <div className=\"relative h-3.5 w-full rounded-full bg-[var(--as-muted)]\">\n <div\n className=\"absolute h-full rounded-full bg-[color-mix(in_srgb,var(--as-primary)_30%,transparent)]\"\n style={{ left: `${left}%`, width: `${Math.max(0, right - left)}%` }}\n title={`${label ? `${label}: ` : ''}${fmt(low)} – ${fmt(high)}${unit ? ` ${unit}` : ''}`}\n />\n {valuePct !== null ? (\n <div\n className=\"absolute top-1/2 size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-[var(--as-surface-raised)] bg-[var(--as-primary)] shadow-[var(--as-shadow-1)]\"\n style={{ left: `${valuePct}%` }}\n title={`${valueLabel}: ${fmt(value as number)}${unit ? ` ${unit}` : ''}`}\n />\n ) : null}\n </div>\n <div className=\"mt-0.5 flex justify-between text-[10px] text-[var(--as-muted-fg)]\">\n <span>{fmt(domainMin)}</span>\n <span className=\"font-medium\">\n {fmt(low)} – {fmt(high)}\n {unit ? ` ${unit}` : ''}\n </span>\n <span>{fmt(domainMax)}</span>\n </div>\n </div>\n )\n },\n)\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var Table = React.forwardRef(
|
|
6
|
+
function Table2({ headers, rows, emptyText = "Nothing here yet", className, ...props }, ref) {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
ref,
|
|
11
|
+
"data-as": "table",
|
|
12
|
+
className: cn("overflow-x-auto", className),
|
|
13
|
+
...props,
|
|
14
|
+
children: /* @__PURE__ */ jsxs("table", { className: "min-w-full divide-y divide-[var(--as-border)]", children: [
|
|
15
|
+
/* @__PURE__ */ jsx("thead", { className: "bg-[var(--as-muted)]", children: /* @__PURE__ */ jsx("tr", { children: headers.map((header, index) => /* @__PURE__ */ jsx(
|
|
16
|
+
"th",
|
|
17
|
+
{
|
|
18
|
+
scope: "col",
|
|
19
|
+
className: "px-4 py-2.5 text-left text-xs font-medium uppercase tracking-wider text-[var(--as-muted-fg)]",
|
|
20
|
+
children: header
|
|
21
|
+
},
|
|
22
|
+
index
|
|
23
|
+
)) }) }),
|
|
24
|
+
/* @__PURE__ */ jsx("tbody", { className: "divide-y divide-[color-mix(in_srgb,var(--as-border)_55%,transparent)] bg-[var(--as-surface-raised)]", children: rows.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
|
|
25
|
+
"td",
|
|
26
|
+
{
|
|
27
|
+
colSpan: headers.length,
|
|
28
|
+
className: "px-4 py-6 text-center text-sm text-[var(--as-muted-fg)]",
|
|
29
|
+
children: emptyText
|
|
30
|
+
}
|
|
31
|
+
) }) : rows.map((row, rowIndex) => /* @__PURE__ */ jsx(
|
|
32
|
+
"tr",
|
|
33
|
+
{
|
|
34
|
+
className: "transition-colors hover:bg-[color-mix(in_srgb,var(--as-muted)_60%,transparent)]",
|
|
35
|
+
children: row.map((cell, cellIndex) => /* @__PURE__ */ jsx(
|
|
36
|
+
"td",
|
|
37
|
+
{
|
|
38
|
+
className: "whitespace-nowrap px-4 py-3 text-sm text-[var(--as-fg)]",
|
|
39
|
+
children: cell
|
|
40
|
+
},
|
|
41
|
+
cellIndex
|
|
42
|
+
))
|
|
43
|
+
},
|
|
44
|
+
rowIndex
|
|
45
|
+
)) })
|
|
46
|
+
] })
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
export { Table };
|
|
53
|
+
//# sourceMappingURL=chunk-5X3RYDPC.js.map
|
|
54
|
+
//# sourceMappingURL=chunk-5X3RYDPC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/table/Table.tsx"],"names":["Table"],"mappings":";;;;AASO,IAAM,KAAA,GAAc,KAAA,CAAA,UAAA;AAAA,EACzB,SAASA,MAAAA,CAAM,EAAE,OAAA,EAAS,IAAA,EAAM,SAAA,GAAY,kBAAA,EAAoB,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,EAAK;AAC1F,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA;AAAA,QACzC,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,+CAAA,EACf,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAA,EAAA,EAAM,WAAU,sBAAA,EACf,QAAA,kBAAA,GAAA,CAAC,QACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBACpB,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAM,KAAA;AAAA,cACN,SAAA,EAAU,8FAAA;AAAA,cAET,QAAA,EAAA;AAAA,aAAA;AAAA,YAJI;AAAA,WAMR,GACH,CAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,WAAM,SAAA,EAAU,qGAAA,EACd,eAAK,MAAA,KAAW,CAAA,uBACd,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,SAAS,OAAA,CAAQ,MAAA;AAAA,cACjB,SAAA,EAAU,yDAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,aAEL,CAAA,GAEA,IAAA,CAAK,GAAA,CAAI,CAAC,KAAK,QAAA,qBACb,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAU,iFAAA;AAAA,cAET,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,CAAC,IAAA,EAAM,SAAA,qBACd,GAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAU,yDAAA;AAAA,kBAET,QAAA,EAAA;AAAA,iBAAA;AAAA,gBAHI;AAAA,eAKR;AAAA,aAAA;AAAA,YAVI;AAAA,WAYR,CAAA,EAEL;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF","file":"chunk-5X3RYDPC.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface TableProps extends React.ComponentProps<'div'> {\n headers: string[]\n rows: React.ReactNode[][]\n emptyText?: string\n}\n\nexport const Table = React.forwardRef<HTMLDivElement, TableProps>(\n function Table({ headers, rows, emptyText = 'Nothing here yet', className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-as=\"table\"\n className={cn('overflow-x-auto', className)}\n {...props}\n >\n <table className=\"min-w-full divide-y divide-[var(--as-border)]\">\n <thead className=\"bg-[var(--as-muted)]\">\n <tr>\n {headers.map((header, index) => (\n <th\n key={index}\n scope=\"col\"\n className=\"px-4 py-2.5 text-left text-xs font-medium uppercase tracking-wider text-[var(--as-muted-fg)]\"\n >\n {header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-[color-mix(in_srgb,var(--as-border)_55%,transparent)] bg-[var(--as-surface-raised)]\">\n {rows.length === 0 ? (\n <tr>\n <td\n colSpan={headers.length}\n className=\"px-4 py-6 text-center text-sm text-[var(--as-muted-fg)]\"\n >\n {emptyText}\n </td>\n </tr>\n ) : (\n rows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className=\"transition-colors hover:bg-[color-mix(in_srgb,var(--as-muted)_60%,transparent)]\"\n >\n {row.map((cell, cellIndex) => (\n <td\n key={cellIndex}\n className=\"whitespace-nowrap px-4 py-3 text-sm text-[var(--as-fg)]\"\n >\n {cell}\n </td>\n ))}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n )\n },\n)\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
function ErrorBanner({ message, action, className }) {
|
|
5
|
+
if (!message) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
return /* @__PURE__ */ jsxs(
|
|
9
|
+
"div",
|
|
10
|
+
{
|
|
11
|
+
role: "alert",
|
|
12
|
+
"data-as": "error-banner",
|
|
13
|
+
className: cn(
|
|
14
|
+
"flex items-center gap-3 rounded-[var(--as-radius)] border border-[var(--as-danger)]/40 bg-[var(--as-danger)]/10 px-3 py-2 text-xs text-[var(--as-danger)]",
|
|
15
|
+
className
|
|
16
|
+
),
|
|
17
|
+
children: [
|
|
18
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children: message }),
|
|
19
|
+
action ?? null
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { ErrorBanner };
|
|
26
|
+
//# sourceMappingURL=chunk-BJOY3XL7.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-BJOY3XL7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/error-banner/ErrorBanner.tsx"],"names":[],"mappings":";;;AASO,SAAS,WAAA,CAAY,EAAE,OAAA,EAAS,MAAA,EAAQ,WAAU,EAAqB;AAC5E,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAQ,cAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,2JAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,QACzC,MAAA,IAAU;AAAA;AAAA;AAAA,GACb;AAEJ","file":"chunk-BJOY3XL7.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface ErrorBannerProps {\n message: string | null | undefined\n action?: React.ReactNode\n className?: string\n}\n\nexport function ErrorBanner({ message, action, className }: ErrorBannerProps) {\n if (!message) {\n return null\n }\n return (\n <div\n role=\"alert\"\n data-as=\"error-banner\"\n className={cn(\n 'flex items-center gap-3 rounded-[var(--as-radius)] border border-[var(--as-danger)]/40 bg-[var(--as-danger)]/10 px-3 py-2 text-xs text-[var(--as-danger)]',\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\">{message}</span>\n {action ?? null}\n </div>\n )\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-BPTGPF3L.js"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { PopoverButton } from './chunk-N5KQRHXU.js';
|
|
2
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
3
|
+
import { Info } from 'lucide-react';
|
|
4
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function InfoButton({
|
|
7
|
+
children,
|
|
8
|
+
title,
|
|
9
|
+
label = "Information",
|
|
10
|
+
showOnHover = true,
|
|
11
|
+
openOnHover = true,
|
|
12
|
+
className
|
|
13
|
+
}) {
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
15
|
+
"span",
|
|
16
|
+
{
|
|
17
|
+
"data-as": "info-button",
|
|
18
|
+
className: cn(
|
|
19
|
+
"shrink-0",
|
|
20
|
+
showOnHover && "opacity-0 transition-opacity focus-within:opacity-100 group-hover:opacity-100",
|
|
21
|
+
className
|
|
22
|
+
),
|
|
23
|
+
onMouseDown: (event) => event.stopPropagation(),
|
|
24
|
+
onClick: (event) => event.stopPropagation(),
|
|
25
|
+
onDoubleClick: (event) => event.stopPropagation(),
|
|
26
|
+
children: /* @__PURE__ */ jsx(
|
|
27
|
+
PopoverButton,
|
|
28
|
+
{
|
|
29
|
+
trigger: /* @__PURE__ */ jsx(Info, { className: "size-4", "aria-hidden": true }),
|
|
30
|
+
label,
|
|
31
|
+
triggerClassName: "size-6 text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]",
|
|
32
|
+
openOnHover,
|
|
33
|
+
panelClassName: "max-w-xs",
|
|
34
|
+
children: /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
35
|
+
title ? /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: title }) : null,
|
|
36
|
+
/* @__PURE__ */ jsx("div", { className: "text-xs text-[var(--as-muted-fg)]", children })
|
|
37
|
+
] })
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { InfoButton };
|
|
45
|
+
//# sourceMappingURL=chunk-DV3MXDLN.js.map
|
|
46
|
+
//# sourceMappingURL=chunk-DV3MXDLN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/info-button/InfoButton.tsx"],"names":[],"mappings":";;;;;AAcO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,aAAA;AAAA,EACR,WAAA,GAAc,IAAA;AAAA,EACd,WAAA,GAAc,IAAA;AAAA,EACd;AACF,CAAA,EAAoB;AAClB,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAQ,aAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,UAAA;AAAA,QACA,WAAA,IACE,+EAAA;AAAA,QACF;AAAA,OACF;AAAA,MACA,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAC9C,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAC1C,aAAA,EAAe,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAEhD,QAAA,kBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,yBAAS,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC,CAAA;AAAA,UAC9C,KAAA;AAAA,UACA,gBAAA,EAAiB,4DAAA;AAAA,UACjB,WAAA;AAAA,UACA,cAAA,EAAe,UAAA;AAAA,UAEf,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA;AAAA,YAAA,KAAA,mBAAQ,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAuB,iBAAM,CAAA,GAAO,IAAA;AAAA,4BAC1D,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAS;AAAA,WAAA,EAC/D;AAAA;AAAA;AACF;AAAA,GACF;AAEJ","file":"chunk-DV3MXDLN.js","sourcesContent":["import * as React from 'react'\nimport { Info } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { PopoverButton } from '../popover-button/PopoverButton'\n\nexport interface InfoButtonProps {\n children: React.ReactNode\n title?: React.ReactNode\n label?: string\n showOnHover?: boolean\n openOnHover?: boolean\n className?: string\n}\n\nexport function InfoButton({\n children,\n title,\n label = 'Information',\n showOnHover = true,\n openOnHover = true,\n className,\n}: InfoButtonProps) {\n return (\n <span\n data-as=\"info-button\"\n className={cn(\n 'shrink-0',\n showOnHover &&\n 'opacity-0 transition-opacity focus-within:opacity-100 group-hover:opacity-100',\n className,\n )}\n onMouseDown={(event) => event.stopPropagation()}\n onClick={(event) => event.stopPropagation()}\n onDoubleClick={(event) => event.stopPropagation()}\n >\n <PopoverButton\n trigger={<Info className=\"size-4\" aria-hidden />}\n label={label}\n triggerClassName=\"size-6 text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n openOnHover={openOnHover}\n panelClassName=\"max-w-xs\"\n >\n <div className=\"space-y-1.5\">\n {title ? <p className=\"text-sm font-medium\">{title}</p> : null}\n <div className=\"text-xs text-[var(--as-muted-fg)]\">{children}</div>\n </div>\n </PopoverButton>\n </span>\n )\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { InfoButton } from './chunk-DV3MXDLN.js';
|
|
2
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function FieldLabel({
|
|
6
|
+
children,
|
|
7
|
+
info,
|
|
8
|
+
infoTitle,
|
|
9
|
+
label,
|
|
10
|
+
showOnHover,
|
|
11
|
+
className
|
|
12
|
+
}) {
|
|
13
|
+
return /* @__PURE__ */ jsxs("span", { "data-as": "field-label", className: cn("group flex items-center gap-1 text-xs", className), children: [
|
|
14
|
+
/* @__PURE__ */ jsx("span", { children }),
|
|
15
|
+
/* @__PURE__ */ jsx(InfoButton, { title: infoTitle, label, showOnHover, children: info })
|
|
16
|
+
] });
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { FieldLabel };
|
|
20
|
+
//# sourceMappingURL=chunk-ESUTPQDO.js.map
|
|
21
|
+
//# sourceMappingURL=chunk-ESUTPQDO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/field-label/FieldLabel.tsx"],"names":[],"mappings":";;;;AAaO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACE,IAAA,CAAC,UAAK,SAAA,EAAQ,aAAA,EAAc,WAAW,EAAA,CAAG,uCAAA,EAAyC,SAAS,CAAA,EAC1F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAM,QAAA,EAAS,CAAA;AAAA,wBACf,UAAA,EAAA,EAAW,KAAA,EAAO,SAAA,EAAW,KAAA,EAAc,aACzC,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-ESUTPQDO.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport { InfoButton } from '../info-button/InfoButton'\n\nexport interface FieldLabelProps {\n children: React.ReactNode\n info: React.ReactNode\n infoTitle?: React.ReactNode\n label?: string\n showOnHover?: boolean\n className?: string\n}\n\nexport function FieldLabel({\n children,\n info,\n infoTitle,\n label,\n showOnHover,\n className,\n}: FieldLabelProps) {\n return (\n <span data-as=\"field-label\" className={cn('group flex items-center gap-1 text-xs', className)}>\n <span>{children}</span>\n <InfoButton title={infoTitle} label={label} showOnHover={showOnHover}>\n {info}\n </InfoButton>\n </span>\n )\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription } from './chunk-RHBQ3GZE.js';
|
|
2
|
-
import { Button } from './chunk-
|
|
2
|
+
import { Button } from './chunk-GTXGTQ6F.js';
|
|
3
3
|
import { cn } from './chunk-BLJWR4ZV.js';
|
|
4
4
|
import { AlertTriangle } from 'lucide-react';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -51,5 +51,5 @@ function ConfirmationModal({
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
export { ConfirmationModal };
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
55
|
-
//# sourceMappingURL=chunk-
|
|
54
|
+
//# sourceMappingURL=chunk-GA3XIDVX.js.map
|
|
55
|
+
//# sourceMappingURL=chunk-GA3XIDVX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/confirmation-modal/ConfirmationModal.tsx"],"names":[],"mappings":";;;;;;AA2BO,SAAS,iBAAA,CAAkB;AAAA,EAChC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA,GAAc,QAAA;AAAA,EACd,WAAA,GAAc,KAAA;AAAA,EACd,IAAA,GAAO,KAAA;AAAA,EACP,SAAA;AAAA,EACA,MAAM,IAAA,GAAO,aAAA;AAAA,EACb,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa;AACf,CAAA,EAA2B;AACzB,EAAA,uBACE,GAAA,CAAC,SAAM,IAAA,EAAY,YAAA,EACjB,+BAAC,YAAA,EAAA,EAAa,IAAA,EAAY,UAAA,EAAwB,kBAAA,EAAkB,MAAA,EAClE,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,gCAAA;AAAA,cACA,cACI,kDAAA,GACA;AAAA,aACN;AAAA,YAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,WAAU,QAAA,EAAS;AAAA;AAAA,SAC9C;AAAA,wBACA,GAAA,CAAC,cAAY,QAAA,EAAA,KAAA,EAAM;AAAA,OAAA,EACrB,CAAA;AAAA,MACC,WAAA,mBAAc,GAAA,CAAC,gBAAA,EAAA,EAAkB,QAAA,EAAA,WAAA,EAAY,CAAA,GAAsB;AAAA,KAAA,EACtE,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,MAAM,aAAa,KAAK,CAAA,EAAG,QAAA,EAAU,IAAA,EACrE,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,cAAc,aAAA,GAAgB,SAAA;AAAA,UACvC,OAAA,EAAS,MAAM,SAAA,EAAU;AAAA,UACzB,OAAA,EAAS,IAAA;AAAA,UAER,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/confirmation-modal/ConfirmationModal.tsx"],"names":[],"mappings":";;;;;;AA2BO,SAAS,iBAAA,CAAkB;AAAA,EAChC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA,GAAc,QAAA;AAAA,EACd,WAAA,GAAc,KAAA;AAAA,EACd,IAAA,GAAO,KAAA;AAAA,EACP,SAAA;AAAA,EACA,MAAM,IAAA,GAAO,aAAA;AAAA,EACb,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa;AACf,CAAA,EAA2B;AACzB,EAAA,uBACE,GAAA,CAAC,SAAM,IAAA,EAAY,YAAA,EACjB,+BAAC,YAAA,EAAA,EAAa,IAAA,EAAY,UAAA,EAAwB,kBAAA,EAAkB,MAAA,EAClE,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,gCAAA;AAAA,cACA,cACI,kDAAA,GACA;AAAA,aACN;AAAA,YAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,WAAU,QAAA,EAAS;AAAA;AAAA,SAC9C;AAAA,wBACA,GAAA,CAAC,cAAY,QAAA,EAAA,KAAA,EAAM;AAAA,OAAA,EACrB,CAAA;AAAA,MACC,WAAA,mBAAc,GAAA,CAAC,gBAAA,EAAA,EAAkB,QAAA,EAAA,WAAA,EAAY,CAAA,GAAsB;AAAA,KAAA,EACtE,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,MAAM,aAAa,KAAK,CAAA,EAAG,QAAA,EAAU,IAAA,EACrE,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,cAAc,aAAA,GAAgB,SAAA;AAAA,UACvC,OAAA,EAAS,MAAM,SAAA,EAAU;AAAA,UACzB,OAAA,EAAS,IAAA;AAAA,UAER,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ","file":"chunk-GA3XIDVX.js","sourcesContent":["import * as React from 'react'\nimport { AlertTriangle, type LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button/Button'\nimport {\n Modal,\n ModalContent,\n ModalDescription,\n ModalHeader,\n ModalTitle,\n} from '../modal/Modal'\n\nexport interface ConfirmationModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: string\n description?: string\n confirmLabel?: string\n cancelLabel?: string\n destructive?: boolean\n busy?: boolean\n onConfirm: () => void\n icon?: LucideIcon\n size?: 'sm' | 'md' | 'lg' | 'xl'\n closeLabel?: string\n}\n\nexport function ConfirmationModal({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n destructive = false,\n busy = false,\n onConfirm,\n icon: Icon = AlertTriangle,\n size = 'sm',\n closeLabel = 'Close',\n}: ConfirmationModalProps) {\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size={size} closeLabel={closeLabel} aria-describedby={undefined}>\n <ModalHeader>\n <div className=\"flex items-center gap-3\">\n <span\n className={cn(\n 'rounded-[var(--as-radius)] p-2',\n destructive\n ? 'bg-[var(--as-danger)]/10 text-[var(--as-danger)]'\n : 'bg-[var(--as-secondary)] text-[var(--as-fg)]',\n )}\n >\n <Icon aria-hidden=\"true\" className=\"size-5\" />\n </span>\n <ModalTitle>{title}</ModalTitle>\n </div>\n {description ? <ModalDescription>{description}</ModalDescription> : null}\n </ModalHeader>\n <div className=\"flex flex-col-reverse gap-2 p-6 pt-0 sm:flex-row sm:justify-end\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)} disabled={busy}>\n {cancelLabel}\n </Button>\n <Button\n variant={destructive ? 'destructive' : 'default'}\n onClick={() => onConfirm()}\n loading={busy}\n >\n {confirmLabel}\n </Button>\n </div>\n </ModalContent>\n </Modal>\n )\n}\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalFooter } from './chunk-RHBQ3GZE.js';
|
|
2
|
+
import { Button } from './chunk-GTXGTQ6F.js';
|
|
3
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
4
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function FormModal({
|
|
7
|
+
open,
|
|
8
|
+
onOpenChange,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
icon: Icon,
|
|
12
|
+
children,
|
|
13
|
+
onSubmit,
|
|
14
|
+
submitting = false,
|
|
15
|
+
submitDisabled = false,
|
|
16
|
+
submitLabel = "Save",
|
|
17
|
+
cancelLabel = "Cancel",
|
|
18
|
+
closeLabel = "Close",
|
|
19
|
+
size = "md",
|
|
20
|
+
contentClassName,
|
|
21
|
+
footer
|
|
22
|
+
}) {
|
|
23
|
+
return /* @__PURE__ */ jsx(Modal, { open, onOpenChange, children: /* @__PURE__ */ jsx(ModalContent, { size, closeLabel, "aria-describedby": void 0, children: /* @__PURE__ */ jsxs(
|
|
24
|
+
"form",
|
|
25
|
+
{
|
|
26
|
+
"data-as": "form-modal",
|
|
27
|
+
className: cn("contents", contentClassName),
|
|
28
|
+
onSubmit: (event) => {
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
if (!submitting && !submitDisabled) {
|
|
31
|
+
onSubmit?.();
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ jsxs(ModalHeader, { children: [
|
|
36
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
37
|
+
Icon ? /* @__PURE__ */ jsx("span", { className: "rounded-[var(--as-radius)] bg-[var(--as-secondary)] p-2 text-[var(--as-fg)]", children: /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "size-5" }) }) : null,
|
|
38
|
+
/* @__PURE__ */ jsx(ModalTitle, { children: title })
|
|
39
|
+
] }),
|
|
40
|
+
description ? /* @__PURE__ */ jsx(ModalDescription, { children: description }) : null
|
|
41
|
+
] }),
|
|
42
|
+
/* @__PURE__ */ jsx("div", { className: "px-6 pb-2", children }),
|
|
43
|
+
footer ?? /* @__PURE__ */ jsxs(ModalFooter, { children: [
|
|
44
|
+
/* @__PURE__ */ jsx(
|
|
45
|
+
Button,
|
|
46
|
+
{
|
|
47
|
+
type: "button",
|
|
48
|
+
variant: "outline",
|
|
49
|
+
onClick: () => onOpenChange(false),
|
|
50
|
+
disabled: submitting,
|
|
51
|
+
children: cancelLabel
|
|
52
|
+
}
|
|
53
|
+
),
|
|
54
|
+
onSubmit ? /* @__PURE__ */ jsx(Button, { type: "submit", disabled: submitDisabled || submitting, loading: submitting, children: submitLabel }) : null
|
|
55
|
+
] })
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
) }) });
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export { FormModal };
|
|
62
|
+
//# sourceMappingURL=chunk-GPIN2ITX.js.map
|
|
63
|
+
//# sourceMappingURL=chunk-GPIN2ITX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/form-modal/FormModal.tsx"],"names":[],"mappings":";;;;;AA+BO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA,EAAM,IAAA;AAAA,EACN,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,cAAA,GAAiB,KAAA;AAAA,EACjB,WAAA,GAAc,MAAA;AAAA,EACd,WAAA,GAAc,QAAA;AAAA,EACd,UAAA,GAAa,OAAA;AAAA,EACb,IAAA,GAAO,IAAA;AAAA,EACP,gBAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,uBACE,GAAA,CAAC,SAAM,IAAA,EAAY,YAAA,EACjB,8BAAC,YAAA,EAAA,EAAa,IAAA,EAAY,UAAA,EAAwB,kBAAA,EAAkB,MAAA,EAClE,QAAA,kBAAA,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAQ,YAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,gBAAgB,CAAA;AAAA,MAC1C,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,IAAI,CAAC,UAAA,IAAc,CAAC,cAAA,EAAgB;AAClC,UAAA,QAAA,IAAW;AAAA,QACb;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,IAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6EAAA,EACd,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,QAAA,EAAS,CAAA,EAC9C,CAAA,GACE,IAAA;AAAA,4BACJ,GAAA,CAAC,cAAY,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EACrB,CAAA;AAAA,UACC,WAAA,mBAAc,GAAA,CAAC,gBAAA,EAAA,EAAkB,QAAA,EAAA,WAAA,EAAY,CAAA,GAAsB;AAAA,SAAA,EACtE,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAa,QAAA,EAAS,CAAA;AAAA,QACpC,MAAA,yBACE,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,cACjC,QAAA,EAAU,UAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UACC,QAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,cAAA,IAAkB,UAAA,EAAY,OAAA,EAAS,UAAA,EACpE,QAAA,EAAA,WAAA,EACH,CAAA,GACE;AAAA,SAAA,EACN;AAAA;AAAA;AAAA,KAGN,CAAA,EACF,CAAA;AAEJ","file":"chunk-GPIN2ITX.js","sourcesContent":["import * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button/Button'\nimport {\n Modal,\n ModalContent,\n ModalDescription,\n ModalFooter,\n ModalHeader,\n ModalTitle,\n} from '../modal/Modal'\n\nexport interface FormModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: React.ReactNode\n description?: React.ReactNode\n icon?: LucideIcon\n children: React.ReactNode\n onSubmit?: () => void\n submitting?: boolean\n submitDisabled?: boolean\n submitLabel?: string\n cancelLabel?: string\n closeLabel?: string\n size?: 'sm' | 'md' | 'lg' | 'xl'\n contentClassName?: string\n footer?: React.ReactNode\n}\n\nexport function FormModal({\n open,\n onOpenChange,\n title,\n description,\n icon: Icon,\n children,\n onSubmit,\n submitting = false,\n submitDisabled = false,\n submitLabel = 'Save',\n cancelLabel = 'Cancel',\n closeLabel = 'Close',\n size = 'md',\n contentClassName,\n footer,\n}: FormModalProps) {\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size={size} closeLabel={closeLabel} aria-describedby={undefined}>\n <form\n data-as=\"form-modal\"\n className={cn('contents', contentClassName)}\n onSubmit={(event) => {\n event.preventDefault()\n if (!submitting && !submitDisabled) {\n onSubmit?.()\n }\n }}\n >\n <ModalHeader>\n <div className=\"flex items-center gap-3\">\n {Icon ? (\n <span className=\"rounded-[var(--as-radius)] bg-[var(--as-secondary)] p-2 text-[var(--as-fg)]\">\n <Icon aria-hidden=\"true\" className=\"size-5\" />\n </span>\n ) : null}\n <ModalTitle>{title}</ModalTitle>\n </div>\n {description ? <ModalDescription>{description}</ModalDescription> : null}\n </ModalHeader>\n <div className=\"px-6 pb-2\">{children}</div>\n {footer ?? (\n <ModalFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={submitting}\n >\n {cancelLabel}\n </Button>\n {onSubmit ? (\n <Button type=\"submit\" disabled={submitDisabled || submitting} loading={submitting}>\n {submitLabel}\n </Button>\n ) : null}\n </ModalFooter>\n )}\n </form>\n </ModalContent>\n </Modal>\n )\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/button/Button.tsx"],"names":["Button"],"mappings":";;;;;;;AAMA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,uWAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,qEAAA;AAAA,QACT,SAAA,EAAW,yEAAA;AAAA,QACX,OAAA,EACE,wFAAA;AAAA,QACF,KAAA,EAAO,gCAAA;AAAA,QACP,WAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,eAAA;AAAA,QACT,EAAA,EAAI,gDAAA;AAAA,QACJ,EAAA,EAAI,yCAAA;AAAA,QACJ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AASO,IAAM,MAAA,GAAe,KAAA,CAAA,UAAA;AAAA,EAC1B,SAASA,OAAAA,
|
|
1
|
+
{"version":3,"sources":["../src/components/button/Button.tsx"],"names":["Button"],"mappings":";;;;;;;AAMA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,uWAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,qEAAA;AAAA,QACT,SAAA,EAAW,yEAAA;AAAA,QACX,OAAA,EACE,wFAAA;AAAA,QACF,KAAA,EAAO,gCAAA;AAAA,QACP,WAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,eAAA;AAAA,QACT,EAAA,EAAI,gDAAA;AAAA,QACJ,EAAA,EAAI,yCAAA;AAAA,QACJ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AASO,IAAM,MAAA,GAAe,KAAA,CAAA,UAAA;AAAA,EAC1B,SAASA,OAAAA,CAEP,EAAE,SAAA,EAAW,SAAS,IAAA,EAAM,OAAA,GAAU,KAAA,EAAO,OAAA,GAAU,OAAO,QAAA,EAAU,QAAA,EAAU,GAAG,KAAA,IACrF,GAAA,EACA;AACA,IAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,QAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,OAAA,GACd,QAAA,mBAEA,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,OAAA,mBAAU,GAAA,CAAC,WAAQ,CAAA,GAAK,IAAA;AAAA,MACxB;AAAA,KAAA,EACH,CAAA;AAEF,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,QAC1D,UAAU,OAAA,IAAW,QAAA;AAAA,QACrB,aAAW,OAAA,IAAW,MAAA;AAAA,QACrB,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF","file":"chunk-GTXGTQ6F.js","sourcesContent":["import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../lib/utils'\nimport { Spinner } from '../spinner/Spinner'\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-[var(--as-radius)] text-sm font-medium text-[var(--as-fg)] transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: 'bg-[var(--as-primary)] text-[var(--as-primary-fg)] hover:opacity-90',\n secondary: 'bg-[var(--as-secondary)] text-[var(--as-secondary-fg)] hover:opacity-80',\n outline:\n 'border border-[var(--as-border)] bg-[var(--as-surface)] hover:bg-[var(--as-secondary)]',\n ghost: 'hover:bg-[var(--as-secondary)]',\n destructive:\n 'bg-[var(--as-danger)] text-[var(--as-danger-fg)] hover:opacity-90',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-[var(--as-radius-sm)] px-3 text-xs',\n lg: 'h-10 rounded-[var(--as-radius-lg)] px-6',\n icon: 'size-9 rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nexport interface ButtonProps\n extends React.ComponentProps<'button'>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n loading?: boolean\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n function Button(\n /* */\n { className, variant, size, asChild = false, loading = false, disabled, children, ...props },\n ref,\n ) {\n const Comp = asChild ? Slot : 'button'\n const content = asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner /> : null}\n {children}\n </>\n )\n return (\n <Comp\n ref={ref}\n data-as=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n disabled={loading || disabled}\n aria-busy={loading || undefined}\n {...props}\n >\n {content}\n </Comp>\n )\n },\n)\n\nexport { buttonVariants }\n\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Search, X } from 'lucide-react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var SearchInput = React.forwardRef(
|
|
7
|
+
function SearchInput2({
|
|
8
|
+
value,
|
|
9
|
+
onChange,
|
|
10
|
+
onSubmit,
|
|
11
|
+
placeholder,
|
|
12
|
+
ariaLabel,
|
|
13
|
+
autoFocus = false,
|
|
14
|
+
clearLabel = "Clear search",
|
|
15
|
+
className
|
|
16
|
+
}, ref) {
|
|
17
|
+
return /* @__PURE__ */ jsxs(
|
|
18
|
+
"form",
|
|
19
|
+
{
|
|
20
|
+
"data-as": "search-input",
|
|
21
|
+
role: "search",
|
|
22
|
+
className: cn(
|
|
23
|
+
"flex items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 focus-within:border-[var(--as-focus-ring)]",
|
|
24
|
+
className
|
|
25
|
+
),
|
|
26
|
+
onSubmit: (event) => {
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
onSubmit?.(value);
|
|
29
|
+
},
|
|
30
|
+
children: [
|
|
31
|
+
/* @__PURE__ */ jsx(Search, { className: "size-4 shrink-0 text-[var(--as-muted-fg)]", "aria-hidden": true }),
|
|
32
|
+
/* @__PURE__ */ jsx(
|
|
33
|
+
"input",
|
|
34
|
+
{
|
|
35
|
+
ref,
|
|
36
|
+
type: "text",
|
|
37
|
+
autoFocus,
|
|
38
|
+
className: "min-w-0 flex-1 bg-transparent text-sm text-[var(--as-fg)] outline-none placeholder:text-[var(--as-muted-fg)]",
|
|
39
|
+
placeholder,
|
|
40
|
+
"aria-label": ariaLabel,
|
|
41
|
+
value,
|
|
42
|
+
onChange: (event) => onChange(event.target.value)
|
|
43
|
+
}
|
|
44
|
+
),
|
|
45
|
+
value ? /* @__PURE__ */ jsx(
|
|
46
|
+
"button",
|
|
47
|
+
{
|
|
48
|
+
type: "button",
|
|
49
|
+
className: "rounded-[var(--as-radius-sm)] p-0.5 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]",
|
|
50
|
+
onClick: () => onChange(""),
|
|
51
|
+
"aria-label": clearLabel,
|
|
52
|
+
children: /* @__PURE__ */ jsx(X, { className: "size-4", "aria-hidden": true })
|
|
53
|
+
}
|
|
54
|
+
) : null
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
export { SearchInput };
|
|
62
|
+
//# sourceMappingURL=chunk-H5U4KNXF.js.map
|
|
63
|
+
//# sourceMappingURL=chunk-H5U4KNXF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/search-input/SearchInput.tsx"],"names":["SearchInput"],"mappings":";;;;;AAeO,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASA,YAAAA,CACP;AAAA,IACE,KAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,UAAA,GAAa,cAAA;AAAA,IACb;AAAA,KAEF,GAAA,EACA;AACA,IAAA,uBACE,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,iKAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,QAAA,GAAW,KAAK,CAAA;AAAA,QAClB,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,2CAAA,EAA4C,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,0BAC1E,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,IAAA,EAAK,MAAA;AAAA,cACL,SAAA;AAAA,cACA,SAAA,EAAU,8GAAA;AAAA,cACV,WAAA;AAAA,cACA,YAAA,EAAY,SAAA;AAAA,cACZ,KAAA;AAAA,cACA,UAAU,CAAC,KAAA,KAAU,QAAA,CAAS,KAAA,CAAM,OAAO,KAAK;AAAA;AAAA,WAClD;AAAA,UACC,KAAA,mBACC,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,+MAAA;AAAA,cACV,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,CAAA;AAAA,cAC1B,YAAA,EAAY,UAAA;AAAA,cAEZ,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,WACpC,GACE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-H5U4KNXF.js","sourcesContent":["import * as React from 'react'\nimport { Search, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface SearchInputProps {\n value: string\n onChange: (value: string) => void\n onSubmit?: (value: string) => void\n placeholder: string\n ariaLabel: string\n autoFocus?: boolean\n clearLabel?: string\n className?: string\n}\n\nexport const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n value,\n onChange,\n onSubmit,\n placeholder,\n ariaLabel,\n autoFocus = false,\n clearLabel = 'Clear search',\n className,\n },\n ref,\n ) {\n return (\n <form\n data-as=\"search-input\"\n role=\"search\"\n className={cn(\n 'flex items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 focus-within:border-[var(--as-focus-ring)]',\n className,\n )}\n onSubmit={(event) => {\n event.preventDefault()\n onSubmit?.(value)\n }}\n >\n <Search className=\"size-4 shrink-0 text-[var(--as-muted-fg)]\" aria-hidden />\n <input\n ref={ref}\n type=\"text\"\n autoFocus={autoFocus}\n className=\"min-w-0 flex-1 bg-transparent text-sm text-[var(--as-fg)] outline-none placeholder:text-[var(--as-muted-fg)]\"\n placeholder={placeholder}\n aria-label={ariaLabel}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n />\n {value ? (\n <button\n type=\"button\"\n className=\"rounded-[var(--as-radius-sm)] p-0.5 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n onClick={() => onChange('')}\n aria-label={clearLabel}\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </form>\n )\n },\n)\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
|
+
import { X } from 'lucide-react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function SelectionBar({
|
|
6
|
+
count,
|
|
7
|
+
onClear,
|
|
8
|
+
countLabel,
|
|
9
|
+
clearLabel = "Clear selection",
|
|
10
|
+
children,
|
|
11
|
+
className
|
|
12
|
+
}) {
|
|
13
|
+
if (count === 0) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return /* @__PURE__ */ jsxs(
|
|
17
|
+
"div",
|
|
18
|
+
{
|
|
19
|
+
"data-as": "selection-bar",
|
|
20
|
+
className: cn(
|
|
21
|
+
"flex flex-wrap items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-primary)]/30 bg-[var(--as-primary)]/10 px-3 py-1.5 text-sm text-[var(--as-fg)]",
|
|
22
|
+
className
|
|
23
|
+
),
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium text-[var(--as-primary)]", children: countLabel ?? `${count} selected` }),
|
|
26
|
+
children,
|
|
27
|
+
/* @__PURE__ */ jsx(
|
|
28
|
+
"button",
|
|
29
|
+
{
|
|
30
|
+
type: "button",
|
|
31
|
+
className: "ml-auto cursor-pointer rounded-[var(--as-radius-sm)] p-1 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]",
|
|
32
|
+
"aria-label": clearLabel,
|
|
33
|
+
onClick: onClear,
|
|
34
|
+
children: /* @__PURE__ */ jsx(X, { className: "size-4", "aria-hidden": true })
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { SelectionBar };
|
|
43
|
+
//# sourceMappingURL=chunk-HSUCCANX.js.map
|
|
44
|
+
//# sourceMappingURL=chunk-HSUCCANX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/selection-bar/SelectionBar.tsx"],"names":[],"mappings":";;;;AAaO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA,GAAa,iBAAA;AAAA,EACb,QAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAQ,eAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,qKAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAK,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA,UAAA,IAAc,CAAA,EAAG,KAAK,CAAA,SAAA,CAAA,EACzB,CAAA;AAAA,QACC,QAAA;AAAA,wBACD,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,oOAAA;AAAA,YACV,YAAA,EAAY,UAAA;AAAA,YACZ,OAAA,EAAS,OAAA;AAAA,YAET,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA;AACpC;AAAA;AAAA,GACF;AAEJ","file":"chunk-HSUCCANX.js","sourcesContent":["import * as React from 'react'\nimport { X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface SelectionBarProps {\n count: number\n onClear: () => void\n countLabel?: React.ReactNode\n clearLabel?: string\n children?: React.ReactNode\n className?: string\n}\n\nexport function SelectionBar({\n count,\n onClear,\n countLabel,\n clearLabel = 'Clear selection',\n children,\n className,\n}: SelectionBarProps) {\n if (count === 0) {\n return null\n }\n return (\n <div\n data-as=\"selection-bar\"\n className={cn(\n 'flex flex-wrap items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-primary)]/30 bg-[var(--as-primary)]/10 px-3 py-1.5 text-sm text-[var(--as-fg)]',\n className,\n )}\n >\n <span className=\"font-medium text-[var(--as-primary)]\">\n {countLabel ?? `${count} selected`}\n </span>\n {children}\n <button\n type=\"button\"\n className=\"ml-auto cursor-pointer rounded-[var(--as-radius-sm)] p-1 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n aria-label={clearLabel}\n onClick={onClear}\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n </div>\n )\n}\n"]}
|