@invergent/ui-sdk 0.0.0-stage → 2.19.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/README.md +62 -2
- package/dist/accordion.cjs +97 -0
- package/dist/accordion.cjs.map +1 -0
- package/dist/accordion.d.cts +10 -0
- package/dist/accordion.d.ts +10 -0
- package/dist/accordion.js +92 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert.cjs +82 -0
- package/dist/alert.cjs.map +1 -0
- package/dist/alert.d.cts +14 -0
- package/dist/alert.d.ts +14 -0
- package/dist/alert.js +77 -0
- package/dist/alert.js.map +1 -0
- package/dist/avatar.cjs +110 -0
- package/dist/avatar.cjs.map +1 -0
- package/dist/avatar.d.cts +14 -0
- package/dist/avatar.d.ts +14 -0
- package/dist/avatar.js +103 -0
- package/dist/avatar.js.map +1 -0
- package/dist/badge.cjs +47 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.d.cts +13 -0
- package/dist/badge.d.ts +13 -0
- package/dist/badge.js +44 -0
- package/dist/badge.js.map +1 -0
- package/dist/brand-beam.cjs +2303 -0
- package/dist/brand-beam.cjs.map +1 -0
- package/dist/brand-beam.d.cts +36 -0
- package/dist/brand-beam.d.ts +36 -0
- package/dist/brand-beam.js +2301 -0
- package/dist/brand-beam.js.map +1 -0
- package/dist/button.cjs +17 -0
- package/dist/button.cjs.map +1 -0
- package/dist/button.d.cts +14 -0
- package/dist/button.d.ts +14 -0
- package/dist/button.js +4 -0
- package/dist/button.js.map +1 -0
- package/dist/card.cjs +109 -0
- package/dist/card.cjs.map +1 -0
- package/dist/card.d.cts +14 -0
- package/dist/card.d.ts +14 -0
- package/dist/card.js +101 -0
- package/dist/card.js.map +1 -0
- package/dist/chart.cjs +275 -0
- package/dist/chart.cjs.map +1 -0
- package/dist/chart.d.cts +47 -0
- package/dist/chart.d.ts +47 -0
- package/dist/chart.js +247 -0
- package/dist/chart.js.map +1 -0
- package/dist/checkbox.cjs +41 -0
- package/dist/checkbox.cjs.map +1 -0
- package/dist/checkbox.d.cts +7 -0
- package/dist/checkbox.d.ts +7 -0
- package/dist/checkbox.js +39 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chip.cjs +92 -0
- package/dist/chip.cjs.map +1 -0
- package/dist/chip.d.cts +33 -0
- package/dist/chip.d.ts +33 -0
- package/dist/chip.js +86 -0
- package/dist/chip.js.map +1 -0
- package/dist/choice-card.cjs +127 -0
- package/dist/choice-card.cjs.map +1 -0
- package/dist/choice-card.d.cts +20 -0
- package/dist/choice-card.d.ts +20 -0
- package/dist/choice-card.js +124 -0
- package/dist/choice-card.js.map +1 -0
- package/dist/chunk-2UHRDVPT.cjs +183 -0
- package/dist/chunk-2UHRDVPT.cjs.map +1 -0
- package/dist/chunk-5CRE35VX.js +20 -0
- package/dist/chunk-5CRE35VX.js.map +1 -0
- package/dist/chunk-6ARYCL4L.cjs +30 -0
- package/dist/chunk-6ARYCL4L.cjs.map +1 -0
- package/dist/chunk-6JCVTRUK.js +21 -0
- package/dist/chunk-6JCVTRUK.js.map +1 -0
- package/dist/chunk-6YHDDRIM.cjs +13 -0
- package/dist/chunk-6YHDDRIM.cjs.map +1 -0
- package/dist/chunk-A44JJ6NH.js +58 -0
- package/dist/chunk-A44JJ6NH.js.map +1 -0
- package/dist/chunk-CPAFEXKR.js +63 -0
- package/dist/chunk-CPAFEXKR.js.map +1 -0
- package/dist/chunk-CTIEUG5L.js +28 -0
- package/dist/chunk-CTIEUG5L.js.map +1 -0
- package/dist/chunk-DSDDDYG3.cjs +60 -0
- package/dist/chunk-DSDDDYG3.cjs.map +1 -0
- package/dist/chunk-IB7LTHEQ.js +55 -0
- package/dist/chunk-IB7LTHEQ.js.map +1 -0
- package/dist/chunk-ID7MWMJO.cjs +162 -0
- package/dist/chunk-ID7MWMJO.cjs.map +1 -0
- package/dist/chunk-IVMZANP7.cjs +67 -0
- package/dist/chunk-IVMZANP7.cjs.map +1 -0
- package/dist/chunk-L73QIINW.js +157 -0
- package/dist/chunk-L73QIINW.js.map +1 -0
- package/dist/chunk-LZGII7SX.js +11 -0
- package/dist/chunk-LZGII7SX.js.map +1 -0
- package/dist/chunk-M677T75H.js +24 -0
- package/dist/chunk-M677T75H.js.map +1 -0
- package/dist/chunk-OAVCB3MR.cjs +26 -0
- package/dist/chunk-OAVCB3MR.cjs.map +1 -0
- package/dist/chunk-RVX6SN4U.cjs +23 -0
- package/dist/chunk-RVX6SN4U.cjs.map +1 -0
- package/dist/chunk-T74Z3WTK.js +151 -0
- package/dist/chunk-T74Z3WTK.js.map +1 -0
- package/dist/chunk-UOUXW63J.cjs +22 -0
- package/dist/chunk-UOUXW63J.cjs.map +1 -0
- package/dist/chunk-VBICNC43.cjs +61 -0
- package/dist/chunk-VBICNC43.cjs.map +1 -0
- package/dist/collapsible-header.cjs +66 -0
- package/dist/collapsible-header.cjs.map +1 -0
- package/dist/collapsible-header.d.cts +15 -0
- package/dist/collapsible-header.d.ts +15 -0
- package/dist/collapsible-header.js +63 -0
- package/dist/collapsible-header.js.map +1 -0
- package/dist/collapsible.cjs +38 -0
- package/dist/collapsible.cjs.map +1 -0
- package/dist/collapsible.d.cts +8 -0
- package/dist/collapsible.d.ts +8 -0
- package/dist/collapsible.js +34 -0
- package/dist/collapsible.js.map +1 -0
- package/dist/color-picker.cjs +60 -0
- package/dist/color-picker.cjs.map +1 -0
- package/dist/color-picker.d.cts +12 -0
- package/dist/color-picker.d.ts +12 -0
- package/dist/color-picker.js +57 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/confirm-dialog.cjs +72 -0
- package/dist/confirm-dialog.cjs.map +1 -0
- package/dist/confirm-dialog.d.cts +19 -0
- package/dist/confirm-dialog.d.ts +19 -0
- package/dist/confirm-dialog.js +70 -0
- package/dist/confirm-dialog.js.map +1 -0
- package/dist/control-styles.cjs +16 -0
- package/dist/control-styles.cjs.map +1 -0
- package/dist/control-styles.d.cts +7 -0
- package/dist/control-styles.d.ts +7 -0
- package/dist/control-styles.js +10 -0
- package/dist/control-styles.js.map +1 -0
- package/dist/dialog.cjs +50 -0
- package/dist/dialog.cjs.map +1 -0
- package/dist/dialog.d.cts +20 -0
- package/dist/dialog.d.ts +20 -0
- package/dist/dialog.js +5 -0
- package/dist/dialog.js.map +1 -0
- package/dist/dropdown-menu.cjs +265 -0
- package/dist/dropdown-menu.cjs.map +1 -0
- package/dist/dropdown-menu.d.cts +32 -0
- package/dist/dropdown-menu.d.ts +32 -0
- package/dist/dropdown-menu.js +249 -0
- package/dist/dropdown-menu.js.map +1 -0
- package/dist/empty-state.cjs +50 -0
- package/dist/empty-state.cjs.map +1 -0
- package/dist/empty-state.d.cts +23 -0
- package/dist/empty-state.d.ts +23 -0
- package/dist/empty-state.js +47 -0
- package/dist/empty-state.js.map +1 -0
- package/dist/field.cjs +221 -0
- package/dist/field.cjs.map +1 -0
- package/dist/field.d.cts +30 -0
- package/dist/field.d.ts +30 -0
- package/dist/field.js +210 -0
- package/dist/field.js.map +1 -0
- package/dist/input-group.cjs +148 -0
- package/dist/input-group.cjs.map +1 -0
- package/dist/input-group.d.cts +20 -0
- package/dist/input-group.d.ts +20 -0
- package/dist/input-group.js +141 -0
- package/dist/input-group.js.map +1 -0
- package/dist/input.cjs +13 -0
- package/dist/input.cjs.map +1 -0
- package/dist/input.d.cts +6 -0
- package/dist/input.d.ts +6 -0
- package/dist/input.js +4 -0
- package/dist/input.js.map +1 -0
- package/dist/label.cjs +13 -0
- package/dist/label.cjs.map +1 -0
- package/dist/label.d.cts +7 -0
- package/dist/label.d.ts +7 -0
- package/dist/label.js +4 -0
- package/dist/label.js.map +1 -0
- package/dist/lib/utils.cjs +12 -0
- package/dist/lib/utils.cjs.map +1 -0
- package/dist/lib/utils.d.cts +5 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +3 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/list-row.cjs +188 -0
- package/dist/list-row.cjs.map +1 -0
- package/dist/list-row.d.cts +51 -0
- package/dist/list-row.d.ts +51 -0
- package/dist/list-row.js +164 -0
- package/dist/list-row.js.map +1 -0
- package/dist/pill-tabs.cjs +109 -0
- package/dist/pill-tabs.cjs.map +1 -0
- package/dist/pill-tabs.d.cts +24 -0
- package/dist/pill-tabs.d.ts +24 -0
- package/dist/pill-tabs.js +107 -0
- package/dist/pill-tabs.js.map +1 -0
- package/dist/popover.cjs +88 -0
- package/dist/popover.cjs.map +1 -0
- package/dist/popover.d.cts +13 -0
- package/dist/popover.d.ts +13 -0
- package/dist/popover.js +80 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress-bar.cjs +28 -0
- package/dist/progress-bar.cjs.map +1 -0
- package/dist/progress-bar.d.cts +11 -0
- package/dist/progress-bar.d.ts +11 -0
- package/dist/progress-bar.js +26 -0
- package/dist/progress-bar.js.map +1 -0
- package/dist/scroll-area.cjs +63 -0
- package/dist/scroll-area.cjs.map +1 -0
- package/dist/scroll-area.d.cts +8 -0
- package/dist/scroll-area.d.ts +8 -0
- package/dist/scroll-area.js +60 -0
- package/dist/scroll-area.js.map +1 -0
- package/dist/section-label.cjs +30 -0
- package/dist/section-label.cjs.map +1 -0
- package/dist/section-label.d.cts +13 -0
- package/dist/section-label.d.ts +13 -0
- package/dist/section-label.js +28 -0
- package/dist/section-label.js.map +1 -0
- package/dist/segmented-control.cjs +75 -0
- package/dist/segmented-control.cjs.map +1 -0
- package/dist/segmented-control.d.cts +26 -0
- package/dist/segmented-control.d.ts +26 -0
- package/dist/segmented-control.js +53 -0
- package/dist/segmented-control.js.map +1 -0
- package/dist/select.cjs +193 -0
- package/dist/select.cjs.map +1 -0
- package/dist/select.d.cts +18 -0
- package/dist/select.d.ts +18 -0
- package/dist/select.js +182 -0
- package/dist/select.js.map +1 -0
- package/dist/separator.cjs +13 -0
- package/dist/separator.cjs.map +1 -0
- package/dist/separator.d.cts +7 -0
- package/dist/separator.d.ts +7 -0
- package/dist/separator.js +4 -0
- package/dist/separator.js.map +1 -0
- package/dist/sidebar.cjs +29 -0
- package/dist/sidebar.cjs.map +1 -0
- package/dist/sidebar.d.cts +58 -0
- package/dist/sidebar.d.ts +58 -0
- package/dist/sidebar.js +4 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/skeleton.cjs +19 -0
- package/dist/skeleton.cjs.map +1 -0
- package/dist/skeleton.d.cts +5 -0
- package/dist/skeleton.d.ts +5 -0
- package/dist/skeleton.js +17 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/sonner.cjs +40 -0
- package/dist/sonner.cjs.map +1 -0
- package/dist/sonner.d.cts +6 -0
- package/dist/sonner.d.ts +6 -0
- package/dist/sonner.js +38 -0
- package/dist/sonner.js.map +1 -0
- package/dist/sparkline.cjs +44 -0
- package/dist/sparkline.cjs.map +1 -0
- package/dist/sparkline.d.cts +12 -0
- package/dist/sparkline.d.ts +12 -0
- package/dist/sparkline.js +42 -0
- package/dist/sparkline.js.map +1 -0
- package/dist/spinner.cjs +13 -0
- package/dist/spinner.cjs.map +1 -0
- package/dist/spinner.d.cts +5 -0
- package/dist/spinner.d.ts +5 -0
- package/dist/spinner.js +11 -0
- package/dist/spinner.js.map +1 -0
- package/dist/stat-card.cjs +65 -0
- package/dist/stat-card.cjs.map +1 -0
- package/dist/stat-card.d.cts +22 -0
- package/dist/stat-card.d.ts +22 -0
- package/dist/stat-card.js +61 -0
- package/dist/stat-card.js.map +1 -0
- package/dist/status-dot.cjs +32 -0
- package/dist/status-dot.cjs.map +1 -0
- package/dist/status-dot.d.cts +11 -0
- package/dist/status-dot.d.ts +11 -0
- package/dist/status-dot.js +29 -0
- package/dist/status-dot.js.map +1 -0
- package/dist/switch.cjs +38 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.d.cts +9 -0
- package/dist/switch.d.ts +9 -0
- package/dist/switch.js +36 -0
- package/dist/switch.js.map +1 -0
- package/dist/table.cjs +118 -0
- package/dist/table.cjs.map +1 -0
- package/dist/table.d.cts +13 -0
- package/dist/table.d.ts +13 -0
- package/dist/table.js +109 -0
- package/dist/table.js.map +1 -0
- package/dist/tabs.cjs +124 -0
- package/dist/tabs.cjs.map +1 -0
- package/dist/tabs.d.cts +15 -0
- package/dist/tabs.d.ts +15 -0
- package/dist/tabs.js +118 -0
- package/dist/tabs.js.map +1 -0
- package/dist/text-link.cjs +51 -0
- package/dist/text-link.cjs.map +1 -0
- package/dist/text-link.d.cts +15 -0
- package/dist/text-link.d.ts +15 -0
- package/dist/text-link.js +48 -0
- package/dist/text-link.js.map +1 -0
- package/dist/textarea.cjs +13 -0
- package/dist/textarea.cjs.map +1 -0
- package/dist/textarea.d.cts +6 -0
- package/dist/textarea.d.ts +6 -0
- package/dist/textarea.js +4 -0
- package/dist/textarea.js.map +1 -0
- package/dist/theme.css +109 -0
- package/dist/toggle-group.cjs +155 -0
- package/dist/toggle-group.cjs.map +1 -0
- package/dist/toggle-group.d.cts +31 -0
- package/dist/toggle-group.d.ts +31 -0
- package/dist/toggle-group.js +130 -0
- package/dist/toggle-group.js.map +1 -0
- package/dist/toggle.cjs +21 -0
- package/dist/toggle.cjs.map +1 -0
- package/dist/toggle.d.cts +23 -0
- package/dist/toggle.d.ts +23 -0
- package/dist/toggle.js +4 -0
- package/dist/toggle.js.map +1 -0
- package/dist/tokens.css +77 -0
- package/dist/tooltip.cjs +25 -0
- package/dist/tooltip.cjs.map +1 -0
- package/dist/tooltip.d.cts +10 -0
- package/dist/tooltip.d.ts +10 -0
- package/dist/tooltip.js +4 -0
- package/dist/tooltip.js.map +1 -0
- package/package.json +60 -4
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface SparklineProps {
|
|
4
|
+
data: number[];
|
|
5
|
+
color?: string;
|
|
6
|
+
height?: number;
|
|
7
|
+
width?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
declare function Sparkline({ data, color, height, width, className, }: SparklineProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
export { Sparkline };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
// src/sparkline.tsx
|
|
4
|
+
function Sparkline({
|
|
5
|
+
data,
|
|
6
|
+
color = "var(--primary)",
|
|
7
|
+
height = 28,
|
|
8
|
+
width = 80,
|
|
9
|
+
className
|
|
10
|
+
}) {
|
|
11
|
+
const max = Math.max(...data);
|
|
12
|
+
const min = Math.min(...data);
|
|
13
|
+
const range = max - min || 1;
|
|
14
|
+
const points = data.map(
|
|
15
|
+
(v, i) => `${i / (data.length - 1) * width},${height - (v - min) / range * (height - 4) - 2}`
|
|
16
|
+
).join(" ");
|
|
17
|
+
return /* @__PURE__ */ jsx(
|
|
18
|
+
"svg",
|
|
19
|
+
{
|
|
20
|
+
viewBox: `0 0 ${width} ${height}`,
|
|
21
|
+
width: className ? void 0 : width,
|
|
22
|
+
height,
|
|
23
|
+
preserveAspectRatio: "none",
|
|
24
|
+
className: className ?? "block",
|
|
25
|
+
children: /* @__PURE__ */ jsx(
|
|
26
|
+
"polyline",
|
|
27
|
+
{
|
|
28
|
+
points,
|
|
29
|
+
fill: "none",
|
|
30
|
+
stroke: color,
|
|
31
|
+
strokeWidth: "1.5",
|
|
32
|
+
strokeLinecap: "round",
|
|
33
|
+
strokeLinejoin: "round"
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export { Sparkline };
|
|
41
|
+
//# sourceMappingURL=sparkline.js.map
|
|
42
|
+
//# sourceMappingURL=sparkline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sparkline.tsx"],"names":[],"mappings":";;;AAYO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,KAAA,GAAQ,gBAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,KAAA,GAAQ,EAAA;AAAA,EACR;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,IAAO,CAAA;AAC3B,EAAA,MAAM,SAAS,IAAA,CACZ,GAAA;AAAA,IACC,CAAC,CAAA,EAAG,CAAA,KACF,CAAA,EAAI,CAAA,IAAK,KAAK,MAAA,GAAS,CAAA,CAAA,GAAM,KAAK,CAAA,CAAA,EAAI,UAAW,CAAA,GAAI,GAAA,IAAO,KAAA,IAAU,MAAA,GAAS,KAAK,CAAC,CAAA;AAAA,GACzF,CACC,KAAK,GAAG,CAAA;AAEX,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,KAAA,EAAO,YAAY,MAAA,GAAY,KAAA;AAAA,MAC/B,MAAA;AAAA,MACA,mBAAA,EAAoB,MAAA;AAAA,MACpB,WAAW,SAAA,IAAa,OAAA;AAAA,MAExB,QAAA,kBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAQ,KAAA;AAAA,UACR,WAAA,EAAY,KAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA,GACF;AAEJ","file":"sparkline.js","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\n\ninterface SparklineProps {\n data: number[];\n color?: string;\n height?: number;\n width?: number;\n className?: string;\n}\n\nexport function Sparkline({\n data,\n color = \"var(--primary)\",\n height = 28,\n width = 80,\n className,\n}: SparklineProps) {\n const max = Math.max(...data);\n const min = Math.min(...data);\n const range = max - min || 1;\n const points = data\n .map(\n (v, i) =>\n `${(i / (data.length - 1)) * width},${height - ((v - min) / range) * (height - 4) - 2}`,\n )\n .join(\" \");\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n width={className ? undefined : width}\n height={height}\n preserveAspectRatio=\"none\"\n className={className ?? \"block\"}\n >\n <polyline\n points={points}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n"]}
|
package/dist/spinner.cjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
|
|
4
|
+
var lucideReact = require('lucide-react');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
function Spinner({ className, ...props }) {
|
|
8
|
+
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2Icon, { role: "status", "aria-label": "Loading", className: chunk6YHDDRIM_cjs.cn("size-4 animate-spin", className), ...props });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
exports.Spinner = Spinner;
|
|
12
|
+
//# sourceMappingURL=spinner.cjs.map
|
|
13
|
+
//# sourceMappingURL=spinner.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/spinner.tsx"],"names":["jsx","Loader2Icon","cn"],"mappings":";;;;;;AAGA,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACrE,EAAA,uBACEA,cAAA,CAACC,uBAAA,EAAA,EAAY,IAAA,EAAK,QAAA,EAAS,YAAA,EAAW,SAAA,EAAU,SAAA,EAAWC,oBAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEhH","file":"spinner.cjs","sourcesContent":["import { cn } from \"./lib/utils\"\nimport { Loader2Icon } from \"lucide-react\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon role=\"status\" aria-label=\"Loading\" className={cn(\"size-4 animate-spin\", className)} {...props} />\n )\n}\n\nexport { Spinner }\n"]}
|
package/dist/spinner.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { cn } from './chunk-LZGII7SX.js';
|
|
2
|
+
import { Loader2Icon } from 'lucide-react';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function Spinner({ className, ...props }) {
|
|
6
|
+
return /* @__PURE__ */ jsx(Loader2Icon, { role: "status", "aria-label": "Loading", className: cn("size-4 animate-spin", className), ...props });
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { Spinner };
|
|
10
|
+
//# sourceMappingURL=spinner.js.map
|
|
11
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/spinner.tsx"],"names":[],"mappings":";;;;AAGA,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACrE,EAAA,uBACE,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAK,QAAA,EAAS,YAAA,EAAW,SAAA,EAAU,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEhH","file":"spinner.js","sourcesContent":["import { cn } from \"./lib/utils\"\nimport { Loader2Icon } from \"lucide-react\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon role=\"status\" aria-label=\"Loading\" className={cn(\"size-4 animate-spin\", className)} {...props} />\n )\n}\n\nexport { Spinner }\n"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkDSDDDYG3_cjs = require('./chunk-DSDDDYG3.cjs');
|
|
4
|
+
var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
|
|
5
|
+
var lucideReact = require('lucide-react');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
function InfoHint({ text }) {
|
|
9
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkDSDDDYG3_cjs.TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkDSDDDYG3_cjs.Tooltip, { children: [
|
|
10
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkDSDDDYG3_cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
11
|
+
"span",
|
|
12
|
+
{
|
|
13
|
+
"aria-label": "More info",
|
|
14
|
+
tabIndex: 0,
|
|
15
|
+
className: "inline-flex cursor-help text-muted-foreground/60",
|
|
16
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Info, { className: "size-3.5" })
|
|
17
|
+
}
|
|
18
|
+
) }),
|
|
19
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkDSDDDYG3_cjs.TooltipContent, { className: "max-w-72 text-[12px] leading-relaxed", children: text })
|
|
20
|
+
] }) });
|
|
21
|
+
}
|
|
22
|
+
function StatCard({
|
|
23
|
+
label,
|
|
24
|
+
info,
|
|
25
|
+
value,
|
|
26
|
+
hint,
|
|
27
|
+
detail,
|
|
28
|
+
className,
|
|
29
|
+
children
|
|
30
|
+
}) {
|
|
31
|
+
return (
|
|
32
|
+
// Label above value, always. Putting them on one line to save height
|
|
33
|
+
// only works while the tile is full-width; inside the 2-up phone grid
|
|
34
|
+
// the label wraps and the value collides with the info icon, which is
|
|
35
|
+
// how this tile ended up looking broken on the Metrics tab.
|
|
36
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "stat-card", className: chunk6YHDDRIM_cjs.cn("flex h-full flex-col", className), children: [
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
38
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11.5px] font-medium uppercase leading-tight tracking-wide text-muted-foreground/80", children: label }),
|
|
39
|
+
info && /* @__PURE__ */ jsxRuntime.jsx(InfoHint, { text: info })
|
|
40
|
+
] }),
|
|
41
|
+
value !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1.5 flex items-baseline gap-2", children: [
|
|
42
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[22px] font-semibold leading-tight text-foreground", children: value }),
|
|
43
|
+
hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] text-muted-foreground", children: hint })
|
|
44
|
+
] }),
|
|
45
|
+
children,
|
|
46
|
+
detail && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto pt-1.5 text-[12px] leading-snug text-muted-foreground", children: detail })
|
|
47
|
+
] })
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
function ChannelChip({ label }) {
|
|
51
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
52
|
+
"span",
|
|
53
|
+
{
|
|
54
|
+
"data-slot": "channel-chip",
|
|
55
|
+
className: "inline-flex items-center rounded-[6px] bg-foreground/[0.07] px-1.5 py-0.5 text-[10.5px] font-medium uppercase tracking-wide text-muted-foreground",
|
|
56
|
+
children: label
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
exports.ChannelChip = ChannelChip;
|
|
62
|
+
exports.InfoHint = InfoHint;
|
|
63
|
+
exports.StatCard = StatCard;
|
|
64
|
+
//# sourceMappingURL=stat-card.cjs.map
|
|
65
|
+
//# sourceMappingURL=stat-card.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/stat-card.tsx"],"names":["jsx","TooltipProvider","Tooltip","TooltipTrigger","Info","TooltipContent","jsxs","cn"],"mappings":";;;;;;;AAkBO,SAAS,QAAA,CAAS,EAAE,IAAA,EAAK,EAAwB;AACtD,EAAA,uBACEA,cAAA,CAACC,iCAAA,EAAA,EAAgB,aAAA,EAAe,GAAA,EAC9B,0CAACC,yBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAF,cAAA,CAACG,gCAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAAH,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAW,WAAA;AAAA,QACX,QAAA,EAAU,CAAA;AAAA,QACV,SAAA,EAAU,kDAAA;AAAA,QAEV,QAAA,kBAAAA,cAAA,CAACI,gBAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,KAC7B,EACF,CAAA;AAAA,oBACAJ,cAAA,CAACK,gCAAA,EAAA,EAAe,SAAA,EAAU,sCAAA,EACvB,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAUG;AACD,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKEC,eAAA,CAAC,SAAI,WAAA,EAAU,WAAA,EAAY,WAAWC,oBAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA,EACxE,QAAA,EAAA;AAAA,sBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0FAAA,EACV,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,IAAA,oBAAQA,cAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,IAAA,EAAM;AAAA,OAAA,EACjC,CAAA;AAAA,MACC,KAAA,KAAU,MAAA,oBACTM,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kCAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yDAAA,EACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,IAAA,oBACCA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAqC,QAAA,EAAA,IAAA,EAAK;AAAA,OAAA,EAE9D,CAAA;AAAA,MAED,QAAA;AAAA,MACA,MAAA,oBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEACZ,QAAA,EAAA,MAAA,EACH;AAAA,KAAA,EAEJ;AAAA;AAEJ;AAEO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAM,EAAsB;AACxD,EAAA,uBACEA,cAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAU,mJAAA;AAAA,MAET,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ","file":"stat-card.cjs","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\n// Shared stat-tile primitives used by the agent Metrics tab and the\n// agent Users page: label / big value / baseline hint / bottom-pinned\n// detail, with an optional info tooltip on the label.\n\nimport { Info } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"./lib/utils\";\n\nexport function InfoHint({ text }: { text: ReactNode }) {\n return (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n aria-label=\"More info\"\n tabIndex={0}\n className=\"inline-flex cursor-help text-muted-foreground/60\"\n >\n <Info className=\"size-3.5\" />\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-72 text-[12px] leading-relaxed\">\n {text}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nexport function StatCard({\n label,\n info,\n value,\n hint,\n detail,\n className,\n children,\n}: {\n label: string;\n info?: ReactNode;\n value?: ReactNode;\n hint?: ReactNode;\n detail?: ReactNode;\n /** Card-shell classes (border, background, padding). Omit to render\n * the bare tile inside an existing card. */\n className?: string;\n children?: ReactNode;\n}) {\n return (\n // Label above value, always. Putting them on one line to save height\n // only works while the tile is full-width; inside the 2-up phone grid\n // the label wraps and the value collides with the info icon, which is\n // how this tile ended up looking broken on the Metrics tab.\n <div data-slot=\"stat-card\" className={cn(\"flex h-full flex-col\", className)}>\n <div className=\"flex items-center gap-1.5\">\n <p className=\"text-[11.5px] font-medium uppercase leading-tight tracking-wide text-muted-foreground/80\">\n {label}\n </p>\n {info && <InfoHint text={info} />}\n </div>\n {value !== undefined && (\n <div className=\"mt-1.5 flex items-baseline gap-2\">\n <span className=\"text-[22px] font-semibold leading-tight text-foreground\">\n {value}\n </span>\n {hint && (\n <span className=\"text-[12px] text-muted-foreground\">{hint}</span>\n )}\n </div>\n )}\n {children}\n {detail && (\n <div className=\"mt-auto pt-1.5 text-[12px] leading-snug text-muted-foreground\">\n {detail}\n </div>\n )}\n </div>\n );\n}\n\nexport function ChannelChip({ label }: { label: string }) {\n return (\n <span\n data-slot=\"channel-chip\"\n className=\"inline-flex items-center rounded-[6px] bg-foreground/[0.07] px-1.5 py-0.5 text-[10.5px] font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {label}\n </span>\n );\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
declare function InfoHint({ text }: {
|
|
5
|
+
text: ReactNode;
|
|
6
|
+
}): react_jsx_runtime.JSX.Element;
|
|
7
|
+
declare function StatCard({ label, info, value, hint, detail, className, children, }: {
|
|
8
|
+
label: string;
|
|
9
|
+
info?: ReactNode;
|
|
10
|
+
value?: ReactNode;
|
|
11
|
+
hint?: ReactNode;
|
|
12
|
+
detail?: ReactNode;
|
|
13
|
+
/** Card-shell classes (border, background, padding). Omit to render
|
|
14
|
+
* the bare tile inside an existing card. */
|
|
15
|
+
className?: string;
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
}): react_jsx_runtime.JSX.Element;
|
|
18
|
+
declare function ChannelChip({ label }: {
|
|
19
|
+
label: string;
|
|
20
|
+
}): react_jsx_runtime.JSX.Element;
|
|
21
|
+
|
|
22
|
+
export { ChannelChip, InfoHint, StatCard };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
declare function InfoHint({ text }: {
|
|
5
|
+
text: ReactNode;
|
|
6
|
+
}): react_jsx_runtime.JSX.Element;
|
|
7
|
+
declare function StatCard({ label, info, value, hint, detail, className, children, }: {
|
|
8
|
+
label: string;
|
|
9
|
+
info?: ReactNode;
|
|
10
|
+
value?: ReactNode;
|
|
11
|
+
hint?: ReactNode;
|
|
12
|
+
detail?: ReactNode;
|
|
13
|
+
/** Card-shell classes (border, background, padding). Omit to render
|
|
14
|
+
* the bare tile inside an existing card. */
|
|
15
|
+
className?: string;
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
}): react_jsx_runtime.JSX.Element;
|
|
18
|
+
declare function ChannelChip({ label }: {
|
|
19
|
+
label: string;
|
|
20
|
+
}): react_jsx_runtime.JSX.Element;
|
|
21
|
+
|
|
22
|
+
export { ChannelChip, InfoHint, StatCard };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from './chunk-IB7LTHEQ.js';
|
|
2
|
+
import { cn } from './chunk-LZGII7SX.js';
|
|
3
|
+
import { Info } from 'lucide-react';
|
|
4
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function InfoHint({ text }) {
|
|
7
|
+
return /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
8
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
9
|
+
"span",
|
|
10
|
+
{
|
|
11
|
+
"aria-label": "More info",
|
|
12
|
+
tabIndex: 0,
|
|
13
|
+
className: "inline-flex cursor-help text-muted-foreground/60",
|
|
14
|
+
children: /* @__PURE__ */ jsx(Info, { className: "size-3.5" })
|
|
15
|
+
}
|
|
16
|
+
) }),
|
|
17
|
+
/* @__PURE__ */ jsx(TooltipContent, { className: "max-w-72 text-[12px] leading-relaxed", children: text })
|
|
18
|
+
] }) });
|
|
19
|
+
}
|
|
20
|
+
function StatCard({
|
|
21
|
+
label,
|
|
22
|
+
info,
|
|
23
|
+
value,
|
|
24
|
+
hint,
|
|
25
|
+
detail,
|
|
26
|
+
className,
|
|
27
|
+
children
|
|
28
|
+
}) {
|
|
29
|
+
return (
|
|
30
|
+
// Label above value, always. Putting them on one line to save height
|
|
31
|
+
// only works while the tile is full-width; inside the 2-up phone grid
|
|
32
|
+
// the label wraps and the value collides with the info icon, which is
|
|
33
|
+
// how this tile ended up looking broken on the Metrics tab.
|
|
34
|
+
/* @__PURE__ */ jsxs("div", { "data-slot": "stat-card", className: cn("flex h-full flex-col", className), children: [
|
|
35
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
36
|
+
/* @__PURE__ */ jsx("p", { className: "text-[11.5px] font-medium uppercase leading-tight tracking-wide text-muted-foreground/80", children: label }),
|
|
37
|
+
info && /* @__PURE__ */ jsx(InfoHint, { text: info })
|
|
38
|
+
] }),
|
|
39
|
+
value !== void 0 && /* @__PURE__ */ jsxs("div", { className: "mt-1.5 flex items-baseline gap-2", children: [
|
|
40
|
+
/* @__PURE__ */ jsx("span", { className: "text-[22px] font-semibold leading-tight text-foreground", children: value }),
|
|
41
|
+
hint && /* @__PURE__ */ jsx("span", { className: "text-[12px] text-muted-foreground", children: hint })
|
|
42
|
+
] }),
|
|
43
|
+
children,
|
|
44
|
+
detail && /* @__PURE__ */ jsx("div", { className: "mt-auto pt-1.5 text-[12px] leading-snug text-muted-foreground", children: detail })
|
|
45
|
+
] })
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
function ChannelChip({ label }) {
|
|
49
|
+
return /* @__PURE__ */ jsx(
|
|
50
|
+
"span",
|
|
51
|
+
{
|
|
52
|
+
"data-slot": "channel-chip",
|
|
53
|
+
className: "inline-flex items-center rounded-[6px] bg-foreground/[0.07] px-1.5 py-0.5 text-[10.5px] font-medium uppercase tracking-wide text-muted-foreground",
|
|
54
|
+
children: label
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { ChannelChip, InfoHint, StatCard };
|
|
60
|
+
//# sourceMappingURL=stat-card.js.map
|
|
61
|
+
//# sourceMappingURL=stat-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/stat-card.tsx"],"names":[],"mappings":";;;;;AAkBO,SAAS,QAAA,CAAS,EAAE,IAAA,EAAK,EAAwB;AACtD,EAAA,uBACE,GAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,GAAA,EAC9B,+BAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAW,WAAA;AAAA,QACX,QAAA,EAAU,CAAA;AAAA,QACV,SAAA,EAAU,kDAAA;AAAA,QAEV,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,KAC7B,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,sCAAA,EACvB,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAUG;AACD,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKE,IAAA,CAAC,SAAI,WAAA,EAAU,WAAA,EAAY,WAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA,EACxE,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0FAAA,EACV,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,IAAA,oBAAQ,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,IAAA,EAAM;AAAA,OAAA,EACjC,CAAA;AAAA,MACC,KAAA,KAAU,MAAA,oBACT,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kCAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yDAAA,EACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,IAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAqC,QAAA,EAAA,IAAA,EAAK;AAAA,OAAA,EAE9D,CAAA;AAAA,MAED,QAAA;AAAA,MACA,MAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEACZ,QAAA,EAAA,MAAA,EACH;AAAA,KAAA,EAEJ;AAAA;AAEJ;AAEO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAM,EAAsB;AACxD,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAU,mJAAA;AAAA,MAET,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ","file":"stat-card.js","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\n// Shared stat-tile primitives used by the agent Metrics tab and the\n// agent Users page: label / big value / baseline hint / bottom-pinned\n// detail, with an optional info tooltip on the label.\n\nimport { Info } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"./lib/utils\";\n\nexport function InfoHint({ text }: { text: ReactNode }) {\n return (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n aria-label=\"More info\"\n tabIndex={0}\n className=\"inline-flex cursor-help text-muted-foreground/60\"\n >\n <Info className=\"size-3.5\" />\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-72 text-[12px] leading-relaxed\">\n {text}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nexport function StatCard({\n label,\n info,\n value,\n hint,\n detail,\n className,\n children,\n}: {\n label: string;\n info?: ReactNode;\n value?: ReactNode;\n hint?: ReactNode;\n detail?: ReactNode;\n /** Card-shell classes (border, background, padding). Omit to render\n * the bare tile inside an existing card. */\n className?: string;\n children?: ReactNode;\n}) {\n return (\n // Label above value, always. Putting them on one line to save height\n // only works while the tile is full-width; inside the 2-up phone grid\n // the label wraps and the value collides with the info icon, which is\n // how this tile ended up looking broken on the Metrics tab.\n <div data-slot=\"stat-card\" className={cn(\"flex h-full flex-col\", className)}>\n <div className=\"flex items-center gap-1.5\">\n <p className=\"text-[11.5px] font-medium uppercase leading-tight tracking-wide text-muted-foreground/80\">\n {label}\n </p>\n {info && <InfoHint text={info} />}\n </div>\n {value !== undefined && (\n <div className=\"mt-1.5 flex items-baseline gap-2\">\n <span className=\"text-[22px] font-semibold leading-tight text-foreground\">\n {value}\n </span>\n {hint && (\n <span className=\"text-[12px] text-muted-foreground\">{hint}</span>\n )}\n </div>\n )}\n {children}\n {detail && (\n <div className=\"mt-auto pt-1.5 text-[12px] leading-snug text-muted-foreground\">\n {detail}\n </div>\n )}\n </div>\n );\n}\n\nexport function ChannelChip({ label }: { label: string }) {\n return (\n <span\n data-slot=\"channel-chip\"\n className=\"inline-flex items-center rounded-[6px] bg-foreground/[0.07] px-1.5 py-0.5 text-[10.5px] font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {label}\n </span>\n );\n}\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
|
|
6
|
+
var STATUS_COLORS = {
|
|
7
|
+
running: "#22C55E",
|
|
8
|
+
serving: "#22C55E",
|
|
9
|
+
completed: "#3B82F6",
|
|
10
|
+
deploying: "#F59E0B",
|
|
11
|
+
error: "#EF4444",
|
|
12
|
+
stopped: "#6B7280"
|
|
13
|
+
};
|
|
14
|
+
var GLOW_STATUSES = /* @__PURE__ */ new Set(["running", "serving"]);
|
|
15
|
+
function StatusDot({ status, className }) {
|
|
16
|
+
const color = STATUS_COLORS[status] ?? "#6B7280";
|
|
17
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
18
|
+
"span",
|
|
19
|
+
{
|
|
20
|
+
className: chunk6YHDDRIM_cjs.cn("inline-block w-[7px] h-[7px] rounded-full shrink-0 mr-1.5", className),
|
|
21
|
+
style: {
|
|
22
|
+
backgroundColor: color,
|
|
23
|
+
boxShadow: GLOW_STATUSES.has(status) ? `0 0 6px ${color}` : "none"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
exports.STATUS_COLORS = STATUS_COLORS;
|
|
30
|
+
exports.StatusDot = StatusDot;
|
|
31
|
+
//# sourceMappingURL=status-dot.cjs.map
|
|
32
|
+
//# sourceMappingURL=status-dot.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/status-dot.tsx"],"names":["jsx","cn"],"mappings":";;;;;AAaO,IAAM,aAAA,GAAwC;AAAA,EACnD,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EACX,SAAA,EAAW,SAAA;AAAA,EACX,KAAA,EAAO,SAAA;AAAA,EACP,OAAA,EAAS;AACX;AAEA,IAAM,gCAAgB,IAAI,GAAA,CAAY,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA;AAOrD,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,SAAA,EAAU,EAAmB;AAC/D,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,MAAM,CAAA,IAAK,SAAA;AAEvC,EAAA,uBACEA,cAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,oBAAA,CAAG,2DAAA,EAA6D,SAAS,CAAA;AAAA,MACpF,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,KAAA;AAAA,QACjB,WAAW,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA,GAAI,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,GAAK;AAAA;AAC9D;AAAA,GACF;AAEJ","file":"status-dot.cjs","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\nimport { cn } from \"./lib/utils\";\n\ntype Status =\n | \"running\"\n | \"serving\"\n | \"completed\"\n | \"deploying\"\n | \"error\"\n | \"stopped\";\n\nexport const STATUS_COLORS: Record<Status, string> = {\n running: \"#22C55E\",\n serving: \"#22C55E\",\n completed: \"#3B82F6\",\n deploying: \"#F59E0B\",\n error: \"#EF4444\",\n stopped: \"#6B7280\",\n};\n\nconst GLOW_STATUSES = new Set<Status>([\"running\", \"serving\"]);\n\ninterface StatusDotProps {\n status: Status;\n className?: string;\n}\n\nexport function StatusDot({ status, className }: StatusDotProps) {\n const color = STATUS_COLORS[status] ?? \"#6B7280\";\n\n return (\n <span\n className={cn(\"inline-block w-[7px] h-[7px] rounded-full shrink-0 mr-1.5\", className)}\n style={{\n backgroundColor: color,\n boxShadow: GLOW_STATUSES.has(status) ? `0 0 6px ${color}` : \"none\",\n }}\n />\n );\n}\n\nexport type { Status };\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type Status = "running" | "serving" | "completed" | "deploying" | "error" | "stopped";
|
|
4
|
+
declare const STATUS_COLORS: Record<Status, string>;
|
|
5
|
+
interface StatusDotProps {
|
|
6
|
+
status: Status;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
declare function StatusDot({ status, className }: StatusDotProps): react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { STATUS_COLORS, type Status, StatusDot };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type Status = "running" | "serving" | "completed" | "deploying" | "error" | "stopped";
|
|
4
|
+
declare const STATUS_COLORS: Record<Status, string>;
|
|
5
|
+
interface StatusDotProps {
|
|
6
|
+
status: Status;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
declare function StatusDot({ status, className }: StatusDotProps): react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { STATUS_COLORS, type Status, StatusDot };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { cn } from './chunk-LZGII7SX.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
var STATUS_COLORS = {
|
|
5
|
+
running: "#22C55E",
|
|
6
|
+
serving: "#22C55E",
|
|
7
|
+
completed: "#3B82F6",
|
|
8
|
+
deploying: "#F59E0B",
|
|
9
|
+
error: "#EF4444",
|
|
10
|
+
stopped: "#6B7280"
|
|
11
|
+
};
|
|
12
|
+
var GLOW_STATUSES = /* @__PURE__ */ new Set(["running", "serving"]);
|
|
13
|
+
function StatusDot({ status, className }) {
|
|
14
|
+
const color = STATUS_COLORS[status] ?? "#6B7280";
|
|
15
|
+
return /* @__PURE__ */ jsx(
|
|
16
|
+
"span",
|
|
17
|
+
{
|
|
18
|
+
className: cn("inline-block w-[7px] h-[7px] rounded-full shrink-0 mr-1.5", className),
|
|
19
|
+
style: {
|
|
20
|
+
backgroundColor: color,
|
|
21
|
+
boxShadow: GLOW_STATUSES.has(status) ? `0 0 6px ${color}` : "none"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { STATUS_COLORS, StatusDot };
|
|
28
|
+
//# sourceMappingURL=status-dot.js.map
|
|
29
|
+
//# sourceMappingURL=status-dot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/status-dot.tsx"],"names":[],"mappings":";;;AAaO,IAAM,aAAA,GAAwC;AAAA,EACnD,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EACX,SAAA,EAAW,SAAA;AAAA,EACX,KAAA,EAAO,SAAA;AAAA,EACP,OAAA,EAAS;AACX;AAEA,IAAM,gCAAgB,IAAI,GAAA,CAAY,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA;AAOrD,SAAS,SAAA,CAAU,EAAE,MAAA,EAAQ,SAAA,EAAU,EAAmB;AAC/D,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,MAAM,CAAA,IAAK,SAAA;AAEvC,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,2DAAA,EAA6D,SAAS,CAAA;AAAA,MACpF,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,KAAA;AAAA,QACjB,WAAW,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA,GAAI,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,GAAK;AAAA;AAC9D;AAAA,GACF;AAEJ","file":"status-dot.js","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\nimport { cn } from \"./lib/utils\";\n\ntype Status =\n | \"running\"\n | \"serving\"\n | \"completed\"\n | \"deploying\"\n | \"error\"\n | \"stopped\";\n\nexport const STATUS_COLORS: Record<Status, string> = {\n running: \"#22C55E\",\n serving: \"#22C55E\",\n completed: \"#3B82F6\",\n deploying: \"#F59E0B\",\n error: \"#EF4444\",\n stopped: \"#6B7280\",\n};\n\nconst GLOW_STATUSES = new Set<Status>([\"running\", \"serving\"]);\n\ninterface StatusDotProps {\n status: Status;\n className?: string;\n}\n\nexport function StatusDot({ status, className }: StatusDotProps) {\n const color = STATUS_COLORS[status] ?? \"#6B7280\";\n\n return (\n <span\n className={cn(\"inline-block w-[7px] h-[7px] rounded-full shrink-0 mr-1.5\", className)}\n style={{\n backgroundColor: color,\n boxShadow: GLOW_STATUSES.has(status) ? `0 0 6px ${color}` : \"none\",\n }}\n />\n );\n}\n\nexport type { Status };\n"]}
|
package/dist/switch.cjs
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
|
|
4
|
+
var radixUi = require('radix-ui');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
function Switch({
|
|
8
|
+
className,
|
|
9
|
+
size = "default",
|
|
10
|
+
...props
|
|
11
|
+
}) {
|
|
12
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
13
|
+
radixUi.Switch.Root,
|
|
14
|
+
{
|
|
15
|
+
"data-slot": "switch",
|
|
16
|
+
"data-size": size,
|
|
17
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
18
|
+
// The track is 14–18px tall, far under the 44px touch minimum, so the
|
|
19
|
+
// ::after overlay carries the real hit area — widened further where the
|
|
20
|
+
// pointer is a finger.
|
|
21
|
+
"peer group/switch relative inline-flex shrink-0 items-center rounded-full border transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 pointer-coarse:after:-inset-x-4 pointer-coarse:after:-inset-y-3.5 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-[size=default]:h-4.5 data-[size=default]:w-8.25 data-[size=sm]:h-3.5 data-[size=sm]:w-6.25 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-amber-500 data-checked:bg-amber-500 data-unchecked:border-input/50 data-unchecked:bg-input data-disabled:cursor-not-allowed data-disabled:opacity-50",
|
|
22
|
+
className
|
|
23
|
+
),
|
|
24
|
+
...props,
|
|
25
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
26
|
+
radixUi.Switch.Thumb,
|
|
27
|
+
{
|
|
28
|
+
"data-slot": "switch-thumb",
|
|
29
|
+
className: "pointer-events-none block rounded-full bg-white ring-0 transition-transform group-data-[size=default]/switch:size-3.5 group-data-[size=sm]/switch:size-2.5 data-checked:translate-x-[calc(100%+2px)] data-unchecked:translate-x-0.25"
|
|
30
|
+
}
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.Switch = Switch;
|
|
37
|
+
//# sourceMappingURL=switch.cjs.map
|
|
38
|
+
//# sourceMappingURL=switch.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/switch.tsx"],"names":["jsx","SwitchPrimitive","cn"],"mappings":";;;;;;AAKA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEA,cAAA;AAAA,IAACC,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAWC,oBAAA;AAAA;AAAA;AAAA;AAAA,QAIT,utBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAF,cAAA;AAAA,QAACC,cAAA,CAAgB,KAAA;AAAA,QAAhB;AAAA,UACC,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,GACF;AAEJ","file":"switch.cjs","sourcesContent":["import * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n // The track is 14–18px tall, far under the 44px touch minimum, so the\n // ::after overlay carries the real hit area — widened further where the\n // pointer is a finger.\n \"peer group/switch relative inline-flex shrink-0 items-center rounded-full border transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 pointer-coarse:after:-inset-x-4 pointer-coarse:after:-inset-y-3.5 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-[size=default]:h-4.5 data-[size=default]:w-8.25 data-[size=sm]:h-3.5 data-[size=sm]:w-6.25 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-amber-500 data-checked:bg-amber-500 data-unchecked:border-input/50 data-unchecked:bg-input data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block rounded-full bg-white ring-0 transition-transform group-data-[size=default]/switch:size-3.5 group-data-[size=sm]/switch:size-2.5 data-checked:translate-x-[calc(100%+2px)] data-unchecked:translate-x-0.25\"\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Switch as Switch$1 } from 'radix-ui';
|
|
4
|
+
|
|
5
|
+
declare function Switch({ className, size, ...props }: React.ComponentProps<typeof Switch$1.Root> & {
|
|
6
|
+
size?: "sm" | "default";
|
|
7
|
+
}): react_jsx_runtime.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { Switch };
|
package/dist/switch.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Switch as Switch$1 } from 'radix-ui';
|
|
4
|
+
|
|
5
|
+
declare function Switch({ className, size, ...props }: React.ComponentProps<typeof Switch$1.Root> & {
|
|
6
|
+
size?: "sm" | "default";
|
|
7
|
+
}): react_jsx_runtime.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { Switch };
|
package/dist/switch.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { cn } from './chunk-LZGII7SX.js';
|
|
2
|
+
import { Switch as Switch$1 } from 'radix-ui';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function Switch({
|
|
6
|
+
className,
|
|
7
|
+
size = "default",
|
|
8
|
+
...props
|
|
9
|
+
}) {
|
|
10
|
+
return /* @__PURE__ */ jsx(
|
|
11
|
+
Switch$1.Root,
|
|
12
|
+
{
|
|
13
|
+
"data-slot": "switch",
|
|
14
|
+
"data-size": size,
|
|
15
|
+
className: cn(
|
|
16
|
+
// The track is 14–18px tall, far under the 44px touch minimum, so the
|
|
17
|
+
// ::after overlay carries the real hit area — widened further where the
|
|
18
|
+
// pointer is a finger.
|
|
19
|
+
"peer group/switch relative inline-flex shrink-0 items-center rounded-full border transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 pointer-coarse:after:-inset-x-4 pointer-coarse:after:-inset-y-3.5 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-[size=default]:h-4.5 data-[size=default]:w-8.25 data-[size=sm]:h-3.5 data-[size=sm]:w-6.25 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-amber-500 data-checked:bg-amber-500 data-unchecked:border-input/50 data-unchecked:bg-input data-disabled:cursor-not-allowed data-disabled:opacity-50",
|
|
20
|
+
className
|
|
21
|
+
),
|
|
22
|
+
...props,
|
|
23
|
+
children: /* @__PURE__ */ jsx(
|
|
24
|
+
Switch$1.Thumb,
|
|
25
|
+
{
|
|
26
|
+
"data-slot": "switch-thumb",
|
|
27
|
+
className: "pointer-events-none block rounded-full bg-white ring-0 transition-transform group-data-[size=default]/switch:size-3.5 group-data-[size=sm]/switch:size-2.5 data-checked:translate-x-[calc(100%+2px)] data-unchecked:translate-x-0.25"
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { Switch };
|
|
35
|
+
//# sourceMappingURL=switch.js.map
|
|
36
|
+
//# sourceMappingURL=switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/switch.tsx"],"names":["SwitchPrimitive"],"mappings":";;;;AAKA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA;AAAA;AAAA;AAAA,QAIT,utBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAACA,QAAA,CAAgB,KAAA;AAAA,QAAhB;AAAA,UACC,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,GACF;AAEJ","file":"switch.js","sourcesContent":["import * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n // The track is 14–18px tall, far under the 44px touch minimum, so the\n // ::after overlay carries the real hit area — widened further where the\n // pointer is a finger.\n \"peer group/switch relative inline-flex shrink-0 items-center rounded-full border transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 pointer-coarse:after:-inset-x-4 pointer-coarse:after:-inset-y-3.5 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-[size=default]:h-4.5 data-[size=default]:w-8.25 data-[size=sm]:h-3.5 data-[size=sm]:w-6.25 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-amber-500 data-checked:bg-amber-500 data-unchecked:border-input/50 data-unchecked:bg-input data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block rounded-full bg-white ring-0 transition-transform group-data-[size=default]/switch:size-3.5 group-data-[size=sm]/switch:size-2.5 data-checked:translate-x-[calc(100%+2px)] data-unchecked:translate-x-0.25\"\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n"]}
|