@invergent/ui-sdk 0.0.0-stage → 2.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -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-group.cjs +80 -0
- package/dist/button-group.cjs.map +1 -0
- package/dist/button-group.d.cts +17 -0
- package/dist/button-group.d.ts +17 -0
- package/dist/button-group.js +75 -0
- package/dist/button-group.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-NSK344BJ.js +80 -0
- package/dist/chunk-NSK344BJ.js.map +1 -0
- package/dist/chunk-OAVCB3MR.cjs +26 -0
- package/dist/chunk-OAVCB3MR.cjs.map +1 -0
- package/dist/chunk-PH733KDD.js +141 -0
- package/dist/chunk-PH733KDD.js.map +1 -0
- package/dist/chunk-QEBQ5NUN.cjs +148 -0
- package/dist/chunk-QEBQ5NUN.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-UXSDDJXM.cjs +88 -0
- package/dist/chunk-UXSDDJXM.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/command.cjs +177 -0
- package/dist/command.cjs.map +1 -0
- package/dist/command.d.cts +22 -0
- package/dist/command.d.ts +22 -0
- package/dist/command.js +167 -0
- package/dist/command.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/hover-card.cjs +43 -0
- package/dist/hover-card.cjs.map +1 -0
- package/dist/hover-card.d.cts +9 -0
- package/dist/hover-card.d.ts +9 -0
- package/dist/hover-card.js +39 -0
- package/dist/hover-card.js.map +1 -0
- package/dist/input-group.cjs +36 -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 +7 -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/item.cjs +196 -0
- package/dist/item.cjs.map +1 -0
- package/dist/item.d.cts +28 -0
- package/dist/item.d.ts +28 -0
- package/dist/item.js +185 -0
- package/dist/item.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 +37 -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 +4 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress-bar.cjs +40 -0
- package/dist/progress-bar.cjs.map +1 -0
- package/dist/progress-bar.d.cts +12 -0
- package/dist/progress-bar.d.ts +12 -0
- package/dist/progress-bar.js +38 -0
- package/dist/progress-bar.js.map +1 -0
- package/dist/rabbit-mark.cjs +30 -0
- package/dist/rabbit-mark.cjs.map +1 -0
- package/dist/rabbit-mark.d.cts +16 -0
- package/dist/rabbit-mark.d.ts +16 -0
- package/dist/rabbit-mark.js +26 -0
- package/dist/rabbit-mark.js.map +1 -0
- package/dist/responsive-panel.cjs +85 -0
- package/dist/responsive-panel.cjs.map +1 -0
- package/dist/responsive-panel.d.cts +33 -0
- package/dist/responsive-panel.d.ts +33 -0
- package/dist/responsive-panel.js +83 -0
- package/dist/responsive-panel.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/timeline.cjs +171 -0
- package/dist/timeline.cjs.map +1 -0
- package/dist/timeline.d.cts +28 -0
- package/dist/timeline.d.ts +28 -0
- package/dist/timeline.js +162 -0
- package/dist/timeline.js.map +1 -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 +61 -4
package/dist/label.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"label.js"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk6YHDDRIM_cjs = require('../chunk-6YHDDRIM.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "cn", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () { return chunk6YHDDRIM_cjs.cn; }
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=utils.cjs.map
|
|
12
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"utils.cjs"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"utils.js"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk2UHRDVPT_cjs = require('./chunk-2UHRDVPT.cjs');
|
|
4
|
+
var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
7
|
+
var radixUi = require('radix-ui');
|
|
8
|
+
var lucideReact = require('lucide-react');
|
|
9
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
10
|
+
|
|
11
|
+
function _interopNamespace(e) {
|
|
12
|
+
if (e && e.__esModule) return e;
|
|
13
|
+
var n = Object.create(null);
|
|
14
|
+
if (e) {
|
|
15
|
+
Object.keys(e).forEach(function (k) {
|
|
16
|
+
if (k !== 'default') {
|
|
17
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return e[k]; }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
n.default = e;
|
|
26
|
+
return Object.freeze(n);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
30
|
+
|
|
31
|
+
var listRowVariants = classVarianceAuthority.cva(
|
|
32
|
+
"group/list-row flex w-full items-center text-left font-sans no-underline transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50",
|
|
33
|
+
{
|
|
34
|
+
variants: {
|
|
35
|
+
size: {
|
|
36
|
+
default: "gap-2.5 rounded-lg px-3 py-2.25 text-sm font-medium pointer-coarse:min-h-11 pointer-coarse:gap-3 pointer-coarse:rounded-xl pointer-coarse:px-3.5 pointer-coarse:text-[15px]",
|
|
37
|
+
sm: "gap-2.25 rounded-[7px] px-2 py-1.75 text-[13px] pointer-coarse:min-h-11 pointer-coarse:gap-2.5 pointer-coarse:rounded-lg pointer-coarse:px-2.5 pointer-coarse:text-[14px]",
|
|
38
|
+
lg: "min-h-14 gap-3 px-4 py-3 pointer-fine:min-h-0"
|
|
39
|
+
},
|
|
40
|
+
active: { true: "", false: "" }
|
|
41
|
+
},
|
|
42
|
+
compoundVariants: [
|
|
43
|
+
{ size: "default", active: true, className: "bg-foreground/5 text-foreground" },
|
|
44
|
+
{
|
|
45
|
+
size: "default",
|
|
46
|
+
active: false,
|
|
47
|
+
className: "text-muted-foreground hover:bg-foreground/5 hover:text-foreground"
|
|
48
|
+
},
|
|
49
|
+
{ size: "sm", active: true, className: "bg-foreground/6 font-medium text-foreground" },
|
|
50
|
+
{
|
|
51
|
+
size: "sm",
|
|
52
|
+
active: false,
|
|
53
|
+
className: "font-normal text-foreground/80 hover:bg-foreground/6 hover:text-foreground"
|
|
54
|
+
},
|
|
55
|
+
{ size: "lg", active: true, className: "bg-foreground/[0.04]" },
|
|
56
|
+
{
|
|
57
|
+
size: "lg",
|
|
58
|
+
active: false,
|
|
59
|
+
className: "hover:bg-foreground/[0.04] active:bg-foreground/[0.04]"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
defaultVariants: { size: "default", active: false }
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
var ICON_CLASS = {
|
|
66
|
+
default: "size-4.5 pointer-coarse:size-5",
|
|
67
|
+
// Quieter than the label while idle, the row's own colour once active.
|
|
68
|
+
sm: "size-4 pointer-coarse:size-4.5 group-data-[active=false]/list-row:text-muted-foreground",
|
|
69
|
+
lg: "size-5 text-muted-foreground"
|
|
70
|
+
};
|
|
71
|
+
function ListRow({
|
|
72
|
+
icon: Icon,
|
|
73
|
+
label,
|
|
74
|
+
description,
|
|
75
|
+
meta,
|
|
76
|
+
badge,
|
|
77
|
+
trailing,
|
|
78
|
+
chevron = false,
|
|
79
|
+
isActive = false,
|
|
80
|
+
activityPulse = false,
|
|
81
|
+
size = "default",
|
|
82
|
+
asChild = false,
|
|
83
|
+
className,
|
|
84
|
+
children,
|
|
85
|
+
...props
|
|
86
|
+
}) {
|
|
87
|
+
const Comp = asChild ? radixUi.Slot.Root : "button";
|
|
88
|
+
const isSmall = size !== "lg";
|
|
89
|
+
const { collapsed } = chunk2UHRDVPT_cjs.useSidebar();
|
|
90
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
91
|
+
Comp,
|
|
92
|
+
{
|
|
93
|
+
"data-slot": "list-row",
|
|
94
|
+
"data-size": size,
|
|
95
|
+
"data-active": isActive,
|
|
96
|
+
...asChild ? {} : { type: "button" },
|
|
97
|
+
"aria-label": collapsed && typeof label === "string" ? label : void 0,
|
|
98
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
99
|
+
listRowVariants({ size, active: isActive }),
|
|
100
|
+
!asChild && "cursor-pointer bg-transparent",
|
|
101
|
+
collapsed && "justify-center gap-0 px-0 pointer-coarse:px-0",
|
|
102
|
+
className
|
|
103
|
+
),
|
|
104
|
+
...props,
|
|
105
|
+
children: [
|
|
106
|
+
asChild && /* @__PURE__ */ jsxRuntime.jsx(radixUi.Slot.Slottable, { children }),
|
|
107
|
+
Icon && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative flex shrink-0", children: [
|
|
108
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { className: ICON_CLASS[size], strokeWidth: 1.75 }),
|
|
109
|
+
activityPulse && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "absolute -top-1 -right-1 flex size-2", children: [
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute inline-flex size-full animate-ping rounded-full bg-green-500 opacity-75" }),
|
|
111
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative inline-flex size-2 rounded-full bg-green-500" })
|
|
112
|
+
] })
|
|
113
|
+
] }),
|
|
114
|
+
!collapsed && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
115
|
+
description ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
116
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
117
|
+
"span",
|
|
118
|
+
{
|
|
119
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
120
|
+
"truncate",
|
|
121
|
+
size === "lg" && "text-[15px] font-medium text-foreground"
|
|
122
|
+
),
|
|
123
|
+
children: label
|
|
124
|
+
}
|
|
125
|
+
),
|
|
126
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-[12px] font-normal text-muted-foreground", children: description })
|
|
127
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
128
|
+
"span",
|
|
129
|
+
{
|
|
130
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
131
|
+
"min-w-0 flex-1 truncate",
|
|
132
|
+
size === "lg" && "text-[15px] font-medium text-foreground"
|
|
133
|
+
),
|
|
134
|
+
children: label
|
|
135
|
+
}
|
|
136
|
+
),
|
|
137
|
+
meta && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-[12px] font-normal text-muted-foreground", children: meta }),
|
|
138
|
+
!badge ? null : typeof badge === "string" || typeof badge === "number" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
139
|
+
"span",
|
|
140
|
+
{
|
|
141
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
142
|
+
"shrink-0 rounded bg-foreground/10 px-1.5 py-px text-xs font-normal text-muted-foreground",
|
|
143
|
+
isSmall && "pointer-coarse:rounded-md pointer-coarse:px-2 pointer-coarse:py-0.5 pointer-coarse:text-[13px]"
|
|
144
|
+
),
|
|
145
|
+
children: badge
|
|
146
|
+
}
|
|
147
|
+
) : badge,
|
|
148
|
+
trailing,
|
|
149
|
+
chevron && /* @__PURE__ */ jsxRuntime.jsx(
|
|
150
|
+
lucideReact.ChevronRight,
|
|
151
|
+
{
|
|
152
|
+
"aria-hidden": true,
|
|
153
|
+
className: "size-4 shrink-0 text-muted-foreground/60",
|
|
154
|
+
strokeWidth: 2
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
] })
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
function ListGroup({
|
|
163
|
+
className,
|
|
164
|
+
children,
|
|
165
|
+
...props
|
|
166
|
+
}) {
|
|
167
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
168
|
+
"ul",
|
|
169
|
+
{
|
|
170
|
+
"data-slot": "list-group",
|
|
171
|
+
className: chunk6YHDDRIM_cjs.cn(
|
|
172
|
+
"overflow-hidden rounded-2xl border border-border bg-card",
|
|
173
|
+
className
|
|
174
|
+
),
|
|
175
|
+
...props,
|
|
176
|
+
children: React__namespace.Children.toArray(children).map((child, index) => /* @__PURE__ */ jsxRuntime.jsxs("li", { children: [
|
|
177
|
+
index > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": "true", className: "ml-[52px] h-px bg-foreground/[0.06]" }),
|
|
178
|
+
child
|
|
179
|
+
] }, React__namespace.isValidElement(child) && child.key != null ? child.key : index))
|
|
180
|
+
}
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
exports.ListGroup = ListGroup;
|
|
185
|
+
exports.ListRow = ListRow;
|
|
186
|
+
exports.listRowVariants = listRowVariants;
|
|
187
|
+
//# sourceMappingURL=list-row.cjs.map
|
|
188
|
+
//# sourceMappingURL=list-row.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/list-row.tsx"],"names":["cva","Slot","useSidebar","jsxs","cn","jsx","Fragment","ChevronRight","React"],"mappings":"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","file":"list-row.cjs","sourcesContent":["import * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\nimport { ChevronRight, type LucideIcon } from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { useSidebar } from \"./sidebar\"\n\n// The Work console's list rows, in its three densities:\n// default — the navbar row (Agents, Sessions, Skills & Tools): a rounded\n// pill in muted text, filled faintly when hovered or active.\n// sm — the row under an expanded agent (Overview, Configure, Inbox):\n// tighter, 13px, the label a step brighter than the icon.\n// lg — the section-index row (agent sections, Configure on a phone):\n// a full-width row with a one-line description and a chevron,\n// meant for a bordered list (see ListGroup).\n// Touch sizing keys off the pointer, not the width: a finger needs the 44px\n// target at any screen size.\nconst listRowVariants = cva(\n \"group/list-row flex w-full items-center text-left font-sans no-underline transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n size: {\n default:\n \"gap-2.5 rounded-lg px-3 py-2.25 text-sm font-medium pointer-coarse:min-h-11 pointer-coarse:gap-3 pointer-coarse:rounded-xl pointer-coarse:px-3.5 pointer-coarse:text-[15px]\",\n sm: \"gap-2.25 rounded-[7px] px-2 py-1.75 text-[13px] pointer-coarse:min-h-11 pointer-coarse:gap-2.5 pointer-coarse:rounded-lg pointer-coarse:px-2.5 pointer-coarse:text-[14px]\",\n lg: \"min-h-14 gap-3 px-4 py-3 pointer-fine:min-h-0\",\n },\n active: { true: \"\", false: \"\" },\n },\n compoundVariants: [\n { size: \"default\", active: true, className: \"bg-foreground/5 text-foreground\" },\n {\n size: \"default\",\n active: false,\n className: \"text-muted-foreground hover:bg-foreground/5 hover:text-foreground\",\n },\n { size: \"sm\", active: true, className: \"bg-foreground/6 font-medium text-foreground\" },\n {\n size: \"sm\",\n active: false,\n className: \"font-normal text-foreground/80 hover:bg-foreground/6 hover:text-foreground\",\n },\n { size: \"lg\", active: true, className: \"bg-foreground/[0.04]\" },\n {\n size: \"lg\",\n active: false,\n className: \"hover:bg-foreground/[0.04] active:bg-foreground/[0.04]\",\n },\n ],\n defaultVariants: { size: \"default\", active: false },\n }\n)\n\nconst ICON_CLASS = {\n default: \"size-4.5 pointer-coarse:size-5\",\n // Quieter than the label while idle, the row's own colour once active.\n sm: \"size-4 pointer-coarse:size-4.5 group-data-[active=false]/list-row:text-muted-foreground\",\n lg: \"size-5 text-muted-foreground\",\n} as const\n\ntype ListRowProps = Omit<React.ComponentProps<\"button\">, \"children\"> & {\n icon?: LucideIcon\n label: React.ReactNode\n /** One line under the label, so a list of sections is scannable. */\n description?: React.ReactNode\n /** Quiet text at the end of the row (a time, a size). */\n meta?: React.ReactNode\n /** A count at the end of the row, hidden when falsy (0 included). A string\n * or number gets the muted pill; pass an element (e.g. an amber `Badge`)\n * to draw it yourself. */\n badge?: React.ReactNode\n /** Anything else at the end of the row. Interactive content cannot live\n * inside a button: render the row as a `div` (`asChild`) to hold it. */\n trailing?: React.ReactNode\n /** A chevron at the end: the row drills into something. */\n chevron?: boolean\n isActive?: boolean\n /** A pulsing activity dot on the icon (e.g. running workloads). */\n activityPulse?: boolean\n size?: \"default\" | \"sm\" | \"lg\"\n /** Render as the single child element (a router link, an `<a>`, a `div`)\n * instead of a button. The row's content is placed inside it. */\n asChild?: boolean\n children?: React.ReactElement\n}\n\n/**\n * A single Work list entry: icon, label, optional description, and a\n * trailing count, meta text or chevron. A button by default; any link (or a\n * plain `div`) with `asChild`:\n *\n * <ListRow asChild icon={Zap} label=\"Skills & Tools\" isActive={active}>\n * <Link to=\"/work/skills\" />\n * </ListRow>\n */\nfunction ListRow({\n icon: Icon,\n label,\n description,\n meta,\n badge,\n trailing,\n chevron = false,\n isActive = false,\n activityPulse = false,\n size = \"default\",\n asChild = false,\n className,\n children,\n ...props\n}: ListRowProps) {\n const Comp = asChild ? Slot.Root : \"button\"\n const isSmall = size !== \"lg\"\n // In a collapsed sidebar rail the row is its icon alone, centred, and the\n // label it no longer shows names it.\n const { collapsed } = useSidebar()\n\n return (\n <Comp\n data-slot=\"list-row\"\n data-size={size}\n data-active={isActive}\n {...(asChild ? {} : { type: \"button\" as const })}\n aria-label={collapsed && typeof label === \"string\" ? label : undefined}\n className={cn(\n listRowVariants({ size, active: isActive }),\n !asChild && \"cursor-pointer bg-transparent\",\n collapsed && \"justify-center gap-0 px-0 pointer-coarse:px-0\",\n className\n )}\n {...props}\n >\n {asChild && <Slot.Slottable>{children}</Slot.Slottable>}\n {Icon && (\n <span className=\"relative flex shrink-0\">\n <Icon className={ICON_CLASS[size]} strokeWidth={1.75} />\n {activityPulse && (\n <span className=\"absolute -top-1 -right-1 flex size-2\">\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-green-500 opacity-75\" />\n <span className=\"relative inline-flex size-2 rounded-full bg-green-500\" />\n </span>\n )}\n </span>\n )}\n {!collapsed && (\n <>\n {description ? (\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span\n className={cn(\n \"truncate\",\n size === \"lg\" && \"text-[15px] font-medium text-foreground\"\n )}\n >\n {label}\n </span>\n <span className=\"truncate text-[12px] font-normal text-muted-foreground\">\n {description}\n </span>\n </span>\n ) : (\n <span\n className={cn(\n \"min-w-0 flex-1 truncate\",\n size === \"lg\" && \"text-[15px] font-medium text-foreground\"\n )}\n >\n {label}\n </span>\n )}\n {meta && (\n <span className=\"shrink-0 text-[12px] font-normal text-muted-foreground\">\n {meta}\n </span>\n )}\n {/* Falsy hides it: an empty string or a zero count says nothing. A\n ternary, not &&, or a 0 would render as text. */}\n {!badge ? null : typeof badge === \"string\" || typeof badge === \"number\" ? (\n <span\n className={cn(\n \"shrink-0 rounded bg-foreground/10 px-1.5 py-px text-xs font-normal text-muted-foreground\",\n isSmall && \"pointer-coarse:rounded-md pointer-coarse:px-2 pointer-coarse:py-0.5 pointer-coarse:text-[13px]\"\n )}\n >\n {badge}\n </span>\n ) : (\n badge\n )}\n {trailing}\n {chevron && (\n <ChevronRight\n aria-hidden={true}\n className=\"size-4 shrink-0 text-muted-foreground/60\"\n strokeWidth={2}\n />\n )}\n </>\n )}\n </Comp>\n )\n}\n\n/**\n * The bordered list the `lg` rows sit in, with dividers inset past the icon\n * column. Pass the rows as children; each is wrapped in an `<li>`.\n */\nfunction ListGroup({\n className,\n children,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"list-group\"\n className={cn(\n \"overflow-hidden rounded-2xl border border-border bg-card\",\n className\n )}\n {...props}\n >\n {React.Children.toArray(children).map((child, index) => (\n <li key={React.isValidElement(child) && child.key != null ? child.key : index}>\n {index > 0 && (\n <div aria-hidden=\"true\" className=\"ml-[52px] h-px bg-foreground/[0.06]\" />\n )}\n {child}\n </li>\n ))}\n </ul>\n )\n}\n\nexport { ListRow, ListGroup, listRowVariants }\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { LucideIcon } from 'lucide-react';
|
|
5
|
+
|
|
6
|
+
declare const listRowVariants: (props?: ({
|
|
7
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
8
|
+
active?: boolean | null | undefined;
|
|
9
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
10
|
+
type ListRowProps = Omit<React.ComponentProps<"button">, "children"> & {
|
|
11
|
+
icon?: LucideIcon;
|
|
12
|
+
label: React.ReactNode;
|
|
13
|
+
/** One line under the label, so a list of sections is scannable. */
|
|
14
|
+
description?: React.ReactNode;
|
|
15
|
+
/** Quiet text at the end of the row (a time, a size). */
|
|
16
|
+
meta?: React.ReactNode;
|
|
17
|
+
/** A count at the end of the row, hidden when falsy (0 included). A string
|
|
18
|
+
* or number gets the muted pill; pass an element (e.g. an amber `Badge`)
|
|
19
|
+
* to draw it yourself. */
|
|
20
|
+
badge?: React.ReactNode;
|
|
21
|
+
/** Anything else at the end of the row. Interactive content cannot live
|
|
22
|
+
* inside a button: render the row as a `div` (`asChild`) to hold it. */
|
|
23
|
+
trailing?: React.ReactNode;
|
|
24
|
+
/** A chevron at the end: the row drills into something. */
|
|
25
|
+
chevron?: boolean;
|
|
26
|
+
isActive?: boolean;
|
|
27
|
+
/** A pulsing activity dot on the icon (e.g. running workloads). */
|
|
28
|
+
activityPulse?: boolean;
|
|
29
|
+
size?: "default" | "sm" | "lg";
|
|
30
|
+
/** Render as the single child element (a router link, an `<a>`, a `div`)
|
|
31
|
+
* instead of a button. The row's content is placed inside it. */
|
|
32
|
+
asChild?: boolean;
|
|
33
|
+
children?: React.ReactElement;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* A single Work list entry: icon, label, optional description, and a
|
|
37
|
+
* trailing count, meta text or chevron. A button by default; any link (or a
|
|
38
|
+
* plain `div`) with `asChild`:
|
|
39
|
+
*
|
|
40
|
+
* <ListRow asChild icon={Zap} label="Skills & Tools" isActive={active}>
|
|
41
|
+
* <Link to="/work/skills" />
|
|
42
|
+
* </ListRow>
|
|
43
|
+
*/
|
|
44
|
+
declare function ListRow({ icon: Icon, label, description, meta, badge, trailing, chevron, isActive, activityPulse, size, asChild, className, children, ...props }: ListRowProps): react_jsx_runtime.JSX.Element;
|
|
45
|
+
/**
|
|
46
|
+
* The bordered list the `lg` rows sit in, with dividers inset past the icon
|
|
47
|
+
* column. Pass the rows as children; each is wrapped in an `<li>`.
|
|
48
|
+
*/
|
|
49
|
+
declare function ListGroup({ className, children, ...props }: React.ComponentProps<"ul">): react_jsx_runtime.JSX.Element;
|
|
50
|
+
|
|
51
|
+
export { ListGroup, ListRow, listRowVariants };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { LucideIcon } from 'lucide-react';
|
|
5
|
+
|
|
6
|
+
declare const listRowVariants: (props?: ({
|
|
7
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
8
|
+
active?: boolean | null | undefined;
|
|
9
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
10
|
+
type ListRowProps = Omit<React.ComponentProps<"button">, "children"> & {
|
|
11
|
+
icon?: LucideIcon;
|
|
12
|
+
label: React.ReactNode;
|
|
13
|
+
/** One line under the label, so a list of sections is scannable. */
|
|
14
|
+
description?: React.ReactNode;
|
|
15
|
+
/** Quiet text at the end of the row (a time, a size). */
|
|
16
|
+
meta?: React.ReactNode;
|
|
17
|
+
/** A count at the end of the row, hidden when falsy (0 included). A string
|
|
18
|
+
* or number gets the muted pill; pass an element (e.g. an amber `Badge`)
|
|
19
|
+
* to draw it yourself. */
|
|
20
|
+
badge?: React.ReactNode;
|
|
21
|
+
/** Anything else at the end of the row. Interactive content cannot live
|
|
22
|
+
* inside a button: render the row as a `div` (`asChild`) to hold it. */
|
|
23
|
+
trailing?: React.ReactNode;
|
|
24
|
+
/** A chevron at the end: the row drills into something. */
|
|
25
|
+
chevron?: boolean;
|
|
26
|
+
isActive?: boolean;
|
|
27
|
+
/** A pulsing activity dot on the icon (e.g. running workloads). */
|
|
28
|
+
activityPulse?: boolean;
|
|
29
|
+
size?: "default" | "sm" | "lg";
|
|
30
|
+
/** Render as the single child element (a router link, an `<a>`, a `div`)
|
|
31
|
+
* instead of a button. The row's content is placed inside it. */
|
|
32
|
+
asChild?: boolean;
|
|
33
|
+
children?: React.ReactElement;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* A single Work list entry: icon, label, optional description, and a
|
|
37
|
+
* trailing count, meta text or chevron. A button by default; any link (or a
|
|
38
|
+
* plain `div`) with `asChild`:
|
|
39
|
+
*
|
|
40
|
+
* <ListRow asChild icon={Zap} label="Skills & Tools" isActive={active}>
|
|
41
|
+
* <Link to="/work/skills" />
|
|
42
|
+
* </ListRow>
|
|
43
|
+
*/
|
|
44
|
+
declare function ListRow({ icon: Icon, label, description, meta, badge, trailing, chevron, isActive, activityPulse, size, asChild, className, children, ...props }: ListRowProps): react_jsx_runtime.JSX.Element;
|
|
45
|
+
/**
|
|
46
|
+
* The bordered list the `lg` rows sit in, with dividers inset past the icon
|
|
47
|
+
* column. Pass the rows as children; each is wrapped in an `<li>`.
|
|
48
|
+
*/
|
|
49
|
+
declare function ListGroup({ className, children, ...props }: React.ComponentProps<"ul">): react_jsx_runtime.JSX.Element;
|
|
50
|
+
|
|
51
|
+
export { ListGroup, ListRow, listRowVariants };
|
package/dist/list-row.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { useSidebar } from './chunk-L73QIINW.js';
|
|
2
|
+
import { cn } from './chunk-LZGII7SX.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { Slot } from 'radix-ui';
|
|
6
|
+
import { ChevronRight } from 'lucide-react';
|
|
7
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
var listRowVariants = cva(
|
|
10
|
+
"group/list-row flex w-full items-center text-left font-sans no-underline transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50",
|
|
11
|
+
{
|
|
12
|
+
variants: {
|
|
13
|
+
size: {
|
|
14
|
+
default: "gap-2.5 rounded-lg px-3 py-2.25 text-sm font-medium pointer-coarse:min-h-11 pointer-coarse:gap-3 pointer-coarse:rounded-xl pointer-coarse:px-3.5 pointer-coarse:text-[15px]",
|
|
15
|
+
sm: "gap-2.25 rounded-[7px] px-2 py-1.75 text-[13px] pointer-coarse:min-h-11 pointer-coarse:gap-2.5 pointer-coarse:rounded-lg pointer-coarse:px-2.5 pointer-coarse:text-[14px]",
|
|
16
|
+
lg: "min-h-14 gap-3 px-4 py-3 pointer-fine:min-h-0"
|
|
17
|
+
},
|
|
18
|
+
active: { true: "", false: "" }
|
|
19
|
+
},
|
|
20
|
+
compoundVariants: [
|
|
21
|
+
{ size: "default", active: true, className: "bg-foreground/5 text-foreground" },
|
|
22
|
+
{
|
|
23
|
+
size: "default",
|
|
24
|
+
active: false,
|
|
25
|
+
className: "text-muted-foreground hover:bg-foreground/5 hover:text-foreground"
|
|
26
|
+
},
|
|
27
|
+
{ size: "sm", active: true, className: "bg-foreground/6 font-medium text-foreground" },
|
|
28
|
+
{
|
|
29
|
+
size: "sm",
|
|
30
|
+
active: false,
|
|
31
|
+
className: "font-normal text-foreground/80 hover:bg-foreground/6 hover:text-foreground"
|
|
32
|
+
},
|
|
33
|
+
{ size: "lg", active: true, className: "bg-foreground/[0.04]" },
|
|
34
|
+
{
|
|
35
|
+
size: "lg",
|
|
36
|
+
active: false,
|
|
37
|
+
className: "hover:bg-foreground/[0.04] active:bg-foreground/[0.04]"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
defaultVariants: { size: "default", active: false }
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
var ICON_CLASS = {
|
|
44
|
+
default: "size-4.5 pointer-coarse:size-5",
|
|
45
|
+
// Quieter than the label while idle, the row's own colour once active.
|
|
46
|
+
sm: "size-4 pointer-coarse:size-4.5 group-data-[active=false]/list-row:text-muted-foreground",
|
|
47
|
+
lg: "size-5 text-muted-foreground"
|
|
48
|
+
};
|
|
49
|
+
function ListRow({
|
|
50
|
+
icon: Icon,
|
|
51
|
+
label,
|
|
52
|
+
description,
|
|
53
|
+
meta,
|
|
54
|
+
badge,
|
|
55
|
+
trailing,
|
|
56
|
+
chevron = false,
|
|
57
|
+
isActive = false,
|
|
58
|
+
activityPulse = false,
|
|
59
|
+
size = "default",
|
|
60
|
+
asChild = false,
|
|
61
|
+
className,
|
|
62
|
+
children,
|
|
63
|
+
...props
|
|
64
|
+
}) {
|
|
65
|
+
const Comp = asChild ? Slot.Root : "button";
|
|
66
|
+
const isSmall = size !== "lg";
|
|
67
|
+
const { collapsed } = useSidebar();
|
|
68
|
+
return /* @__PURE__ */ jsxs(
|
|
69
|
+
Comp,
|
|
70
|
+
{
|
|
71
|
+
"data-slot": "list-row",
|
|
72
|
+
"data-size": size,
|
|
73
|
+
"data-active": isActive,
|
|
74
|
+
...asChild ? {} : { type: "button" },
|
|
75
|
+
"aria-label": collapsed && typeof label === "string" ? label : void 0,
|
|
76
|
+
className: cn(
|
|
77
|
+
listRowVariants({ size, active: isActive }),
|
|
78
|
+
!asChild && "cursor-pointer bg-transparent",
|
|
79
|
+
collapsed && "justify-center gap-0 px-0 pointer-coarse:px-0",
|
|
80
|
+
className
|
|
81
|
+
),
|
|
82
|
+
...props,
|
|
83
|
+
children: [
|
|
84
|
+
asChild && /* @__PURE__ */ jsx(Slot.Slottable, { children }),
|
|
85
|
+
Icon && /* @__PURE__ */ jsxs("span", { className: "relative flex shrink-0", children: [
|
|
86
|
+
/* @__PURE__ */ jsx(Icon, { className: ICON_CLASS[size], strokeWidth: 1.75 }),
|
|
87
|
+
activityPulse && /* @__PURE__ */ jsxs("span", { className: "absolute -top-1 -right-1 flex size-2", children: [
|
|
88
|
+
/* @__PURE__ */ jsx("span", { className: "absolute inline-flex size-full animate-ping rounded-full bg-green-500 opacity-75" }),
|
|
89
|
+
/* @__PURE__ */ jsx("span", { className: "relative inline-flex size-2 rounded-full bg-green-500" })
|
|
90
|
+
] })
|
|
91
|
+
] }),
|
|
92
|
+
!collapsed && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
93
|
+
description ? /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
94
|
+
/* @__PURE__ */ jsx(
|
|
95
|
+
"span",
|
|
96
|
+
{
|
|
97
|
+
className: cn(
|
|
98
|
+
"truncate",
|
|
99
|
+
size === "lg" && "text-[15px] font-medium text-foreground"
|
|
100
|
+
),
|
|
101
|
+
children: label
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
/* @__PURE__ */ jsx("span", { className: "truncate text-[12px] font-normal text-muted-foreground", children: description })
|
|
105
|
+
] }) : /* @__PURE__ */ jsx(
|
|
106
|
+
"span",
|
|
107
|
+
{
|
|
108
|
+
className: cn(
|
|
109
|
+
"min-w-0 flex-1 truncate",
|
|
110
|
+
size === "lg" && "text-[15px] font-medium text-foreground"
|
|
111
|
+
),
|
|
112
|
+
children: label
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
meta && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-[12px] font-normal text-muted-foreground", children: meta }),
|
|
116
|
+
!badge ? null : typeof badge === "string" || typeof badge === "number" ? /* @__PURE__ */ jsx(
|
|
117
|
+
"span",
|
|
118
|
+
{
|
|
119
|
+
className: cn(
|
|
120
|
+
"shrink-0 rounded bg-foreground/10 px-1.5 py-px text-xs font-normal text-muted-foreground",
|
|
121
|
+
isSmall && "pointer-coarse:rounded-md pointer-coarse:px-2 pointer-coarse:py-0.5 pointer-coarse:text-[13px]"
|
|
122
|
+
),
|
|
123
|
+
children: badge
|
|
124
|
+
}
|
|
125
|
+
) : badge,
|
|
126
|
+
trailing,
|
|
127
|
+
chevron && /* @__PURE__ */ jsx(
|
|
128
|
+
ChevronRight,
|
|
129
|
+
{
|
|
130
|
+
"aria-hidden": true,
|
|
131
|
+
className: "size-4 shrink-0 text-muted-foreground/60",
|
|
132
|
+
strokeWidth: 2
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
] })
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
function ListGroup({
|
|
141
|
+
className,
|
|
142
|
+
children,
|
|
143
|
+
...props
|
|
144
|
+
}) {
|
|
145
|
+
return /* @__PURE__ */ jsx(
|
|
146
|
+
"ul",
|
|
147
|
+
{
|
|
148
|
+
"data-slot": "list-group",
|
|
149
|
+
className: cn(
|
|
150
|
+
"overflow-hidden rounded-2xl border border-border bg-card",
|
|
151
|
+
className
|
|
152
|
+
),
|
|
153
|
+
...props,
|
|
154
|
+
children: React.Children.toArray(children).map((child, index) => /* @__PURE__ */ jsxs("li", { children: [
|
|
155
|
+
index > 0 && /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: "ml-[52px] h-px bg-foreground/[0.06]" }),
|
|
156
|
+
child
|
|
157
|
+
] }, React.isValidElement(child) && child.key != null ? child.key : index))
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export { ListGroup, ListRow, listRowVariants };
|
|
163
|
+
//# sourceMappingURL=list-row.js.map
|
|
164
|
+
//# sourceMappingURL=list-row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/list-row.tsx"],"names":[],"mappings":"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","file":"list-row.js","sourcesContent":["import * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\nimport { ChevronRight, type LucideIcon } from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { useSidebar } from \"./sidebar\"\n\n// The Work console's list rows, in its three densities:\n// default — the navbar row (Agents, Sessions, Skills & Tools): a rounded\n// pill in muted text, filled faintly when hovered or active.\n// sm — the row under an expanded agent (Overview, Configure, Inbox):\n// tighter, 13px, the label a step brighter than the icon.\n// lg — the section-index row (agent sections, Configure on a phone):\n// a full-width row with a one-line description and a chevron,\n// meant for a bordered list (see ListGroup).\n// Touch sizing keys off the pointer, not the width: a finger needs the 44px\n// target at any screen size.\nconst listRowVariants = cva(\n \"group/list-row flex w-full items-center text-left font-sans no-underline transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n size: {\n default:\n \"gap-2.5 rounded-lg px-3 py-2.25 text-sm font-medium pointer-coarse:min-h-11 pointer-coarse:gap-3 pointer-coarse:rounded-xl pointer-coarse:px-3.5 pointer-coarse:text-[15px]\",\n sm: \"gap-2.25 rounded-[7px] px-2 py-1.75 text-[13px] pointer-coarse:min-h-11 pointer-coarse:gap-2.5 pointer-coarse:rounded-lg pointer-coarse:px-2.5 pointer-coarse:text-[14px]\",\n lg: \"min-h-14 gap-3 px-4 py-3 pointer-fine:min-h-0\",\n },\n active: { true: \"\", false: \"\" },\n },\n compoundVariants: [\n { size: \"default\", active: true, className: \"bg-foreground/5 text-foreground\" },\n {\n size: \"default\",\n active: false,\n className: \"text-muted-foreground hover:bg-foreground/5 hover:text-foreground\",\n },\n { size: \"sm\", active: true, className: \"bg-foreground/6 font-medium text-foreground\" },\n {\n size: \"sm\",\n active: false,\n className: \"font-normal text-foreground/80 hover:bg-foreground/6 hover:text-foreground\",\n },\n { size: \"lg\", active: true, className: \"bg-foreground/[0.04]\" },\n {\n size: \"lg\",\n active: false,\n className: \"hover:bg-foreground/[0.04] active:bg-foreground/[0.04]\",\n },\n ],\n defaultVariants: { size: \"default\", active: false },\n }\n)\n\nconst ICON_CLASS = {\n default: \"size-4.5 pointer-coarse:size-5\",\n // Quieter than the label while idle, the row's own colour once active.\n sm: \"size-4 pointer-coarse:size-4.5 group-data-[active=false]/list-row:text-muted-foreground\",\n lg: \"size-5 text-muted-foreground\",\n} as const\n\ntype ListRowProps = Omit<React.ComponentProps<\"button\">, \"children\"> & {\n icon?: LucideIcon\n label: React.ReactNode\n /** One line under the label, so a list of sections is scannable. */\n description?: React.ReactNode\n /** Quiet text at the end of the row (a time, a size). */\n meta?: React.ReactNode\n /** A count at the end of the row, hidden when falsy (0 included). A string\n * or number gets the muted pill; pass an element (e.g. an amber `Badge`)\n * to draw it yourself. */\n badge?: React.ReactNode\n /** Anything else at the end of the row. Interactive content cannot live\n * inside a button: render the row as a `div` (`asChild`) to hold it. */\n trailing?: React.ReactNode\n /** A chevron at the end: the row drills into something. */\n chevron?: boolean\n isActive?: boolean\n /** A pulsing activity dot on the icon (e.g. running workloads). */\n activityPulse?: boolean\n size?: \"default\" | \"sm\" | \"lg\"\n /** Render as the single child element (a router link, an `<a>`, a `div`)\n * instead of a button. The row's content is placed inside it. */\n asChild?: boolean\n children?: React.ReactElement\n}\n\n/**\n * A single Work list entry: icon, label, optional description, and a\n * trailing count, meta text or chevron. A button by default; any link (or a\n * plain `div`) with `asChild`:\n *\n * <ListRow asChild icon={Zap} label=\"Skills & Tools\" isActive={active}>\n * <Link to=\"/work/skills\" />\n * </ListRow>\n */\nfunction ListRow({\n icon: Icon,\n label,\n description,\n meta,\n badge,\n trailing,\n chevron = false,\n isActive = false,\n activityPulse = false,\n size = \"default\",\n asChild = false,\n className,\n children,\n ...props\n}: ListRowProps) {\n const Comp = asChild ? Slot.Root : \"button\"\n const isSmall = size !== \"lg\"\n // In a collapsed sidebar rail the row is its icon alone, centred, and the\n // label it no longer shows names it.\n const { collapsed } = useSidebar()\n\n return (\n <Comp\n data-slot=\"list-row\"\n data-size={size}\n data-active={isActive}\n {...(asChild ? {} : { type: \"button\" as const })}\n aria-label={collapsed && typeof label === \"string\" ? label : undefined}\n className={cn(\n listRowVariants({ size, active: isActive }),\n !asChild && \"cursor-pointer bg-transparent\",\n collapsed && \"justify-center gap-0 px-0 pointer-coarse:px-0\",\n className\n )}\n {...props}\n >\n {asChild && <Slot.Slottable>{children}</Slot.Slottable>}\n {Icon && (\n <span className=\"relative flex shrink-0\">\n <Icon className={ICON_CLASS[size]} strokeWidth={1.75} />\n {activityPulse && (\n <span className=\"absolute -top-1 -right-1 flex size-2\">\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-green-500 opacity-75\" />\n <span className=\"relative inline-flex size-2 rounded-full bg-green-500\" />\n </span>\n )}\n </span>\n )}\n {!collapsed && (\n <>\n {description ? (\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span\n className={cn(\n \"truncate\",\n size === \"lg\" && \"text-[15px] font-medium text-foreground\"\n )}\n >\n {label}\n </span>\n <span className=\"truncate text-[12px] font-normal text-muted-foreground\">\n {description}\n </span>\n </span>\n ) : (\n <span\n className={cn(\n \"min-w-0 flex-1 truncate\",\n size === \"lg\" && \"text-[15px] font-medium text-foreground\"\n )}\n >\n {label}\n </span>\n )}\n {meta && (\n <span className=\"shrink-0 text-[12px] font-normal text-muted-foreground\">\n {meta}\n </span>\n )}\n {/* Falsy hides it: an empty string or a zero count says nothing. A\n ternary, not &&, or a 0 would render as text. */}\n {!badge ? null : typeof badge === \"string\" || typeof badge === \"number\" ? (\n <span\n className={cn(\n \"shrink-0 rounded bg-foreground/10 px-1.5 py-px text-xs font-normal text-muted-foreground\",\n isSmall && \"pointer-coarse:rounded-md pointer-coarse:px-2 pointer-coarse:py-0.5 pointer-coarse:text-[13px]\"\n )}\n >\n {badge}\n </span>\n ) : (\n badge\n )}\n {trailing}\n {chevron && (\n <ChevronRight\n aria-hidden={true}\n className=\"size-4 shrink-0 text-muted-foreground/60\"\n strokeWidth={2}\n />\n )}\n </>\n )}\n </Comp>\n )\n}\n\n/**\n * The bordered list the `lg` rows sit in, with dividers inset past the icon\n * column. Pass the rows as children; each is wrapped in an `<li>`.\n */\nfunction ListGroup({\n className,\n children,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"list-group\"\n className={cn(\n \"overflow-hidden rounded-2xl border border-border bg-card\",\n className\n )}\n {...props}\n >\n {React.Children.toArray(children).map((child, index) => (\n <li key={React.isValidElement(child) && child.key != null ? child.key : index}>\n {index > 0 && (\n <div aria-hidden=\"true\" className=\"ml-[52px] h-px bg-foreground/[0.06]\" />\n )}\n {child}\n </li>\n ))}\n </ul>\n )\n}\n\nexport { ListRow, ListGroup, listRowVariants }\n"]}
|