@hoardodile/ui 0.1.7 → 0.1.8
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/dist/chunk-2BVZEYNW.js +97 -0
- package/dist/chunk-2BVZEYNW.js.map +1 -0
- package/dist/chunk-2DTR6CD5.js +47 -0
- package/dist/chunk-2DTR6CD5.js.map +1 -0
- package/dist/chunk-2HWSCY4T.js +20 -0
- package/dist/chunk-2HWSCY4T.js.map +1 -0
- package/dist/chunk-363CCKQ7.js +75 -0
- package/dist/chunk-363CCKQ7.js.map +1 -0
- package/dist/chunk-3ZQJWBVB.js +30 -0
- package/dist/chunk-3ZQJWBVB.js.map +1 -0
- package/dist/chunk-4D36OO5W.js +277 -0
- package/dist/chunk-4D36OO5W.js.map +1 -0
- package/dist/chunk-4UITFLIN.js +31 -0
- package/dist/chunk-4UITFLIN.js.map +1 -0
- package/dist/chunk-6HAIUXNZ.js +11 -0
- package/dist/chunk-6HAIUXNZ.js.map +1 -0
- package/dist/chunk-7JMMFY67.js +62 -0
- package/dist/chunk-7JMMFY67.js.map +1 -0
- package/dist/chunk-7MWWHI6T.js +1149 -0
- package/dist/chunk-7MWWHI6T.js.map +1 -0
- package/dist/chunk-AEHTAUAQ.js +65 -0
- package/dist/chunk-AEHTAUAQ.js.map +1 -0
- package/dist/chunk-ASRGQ5BD.js +130 -0
- package/dist/chunk-ASRGQ5BD.js.map +1 -0
- package/dist/chunk-BFGOE5AI.js +187 -0
- package/dist/chunk-BFGOE5AI.js.map +1 -0
- package/dist/chunk-BRT25IDQ.js +46 -0
- package/dist/chunk-BRT25IDQ.js.map +1 -0
- package/dist/chunk-BU5DQOPM.js +29 -0
- package/dist/chunk-BU5DQOPM.js.map +1 -0
- package/dist/chunk-BWASOT5X.js +266 -0
- package/dist/chunk-BWASOT5X.js.map +1 -0
- package/dist/chunk-F32V4Z7Q.js +26 -0
- package/dist/chunk-F32V4Z7Q.js.map +1 -0
- package/dist/chunk-F7RHDRRJ.js +24 -0
- package/dist/chunk-F7RHDRRJ.js.map +1 -0
- package/dist/chunk-FH5RNCFR.js +21 -0
- package/dist/chunk-FH5RNCFR.js.map +1 -0
- package/dist/chunk-GKSX5ULZ.js +513 -0
- package/dist/chunk-GKSX5ULZ.js.map +1 -0
- package/dist/chunk-JPFDNRCA.js +26 -0
- package/dist/chunk-JPFDNRCA.js.map +1 -0
- package/dist/chunk-KNPRUZ4H.js +13 -0
- package/dist/chunk-KNPRUZ4H.js.map +1 -0
- package/dist/chunk-KOFWEPPB.js +254 -0
- package/dist/chunk-KOFWEPPB.js.map +1 -0
- package/dist/chunk-M5OJN54O.js +10 -0
- package/dist/chunk-M5OJN54O.js.map +1 -0
- package/dist/chunk-OEVALKQ5.js +51 -0
- package/dist/chunk-OEVALKQ5.js.map +1 -0
- package/dist/chunk-OW5FWLPH.js +33 -0
- package/dist/chunk-OW5FWLPH.js.map +1 -0
- package/dist/chunk-POX7TXBH.js +41 -0
- package/dist/chunk-POX7TXBH.js.map +1 -0
- package/dist/chunk-PWJBHUM2.js +58 -0
- package/dist/chunk-PWJBHUM2.js.map +1 -0
- package/dist/chunk-QGMDWGJT.js +23 -0
- package/dist/chunk-QGMDWGJT.js.map +1 -0
- package/dist/chunk-QGTQQNUL.js +36 -0
- package/dist/chunk-QGTQQNUL.js.map +1 -0
- package/dist/chunk-SAY52ZKI.js +152 -0
- package/dist/chunk-SAY52ZKI.js.map +1 -0
- package/dist/chunk-SKDPGSRL.js +166 -0
- package/dist/chunk-SKDPGSRL.js.map +1 -0
- package/dist/chunk-T56ARCUK.js +38 -0
- package/dist/chunk-T56ARCUK.js.map +1 -0
- package/dist/chunk-TDDHQZ62.js +227 -0
- package/dist/chunk-TDDHQZ62.js.map +1 -0
- package/dist/chunk-TMQ5OMBK.js +29 -0
- package/dist/chunk-TMQ5OMBK.js.map +1 -0
- package/dist/chunk-UEVND7AS.js +23 -0
- package/dist/chunk-UEVND7AS.js.map +1 -0
- package/dist/chunk-UPWHCG4S.js +40 -0
- package/dist/chunk-UPWHCG4S.js.map +1 -0
- package/dist/chunk-VWUNF7VX.js +3 -0
- package/dist/chunk-VWUNF7VX.js.map +1 -0
- package/dist/chunk-WI6O7GZK.js +45 -0
- package/dist/chunk-WI6O7GZK.js.map +1 -0
- package/dist/chunk-WVEK3WCX.js +21 -0
- package/dist/chunk-WVEK3WCX.js.map +1 -0
- package/dist/chunk-XBPQEZES.js +48 -0
- package/dist/chunk-XBPQEZES.js.map +1 -0
- package/dist/chunk-ZYAGKKR7.js +142 -0
- package/dist/chunk-ZYAGKKR7.js.map +1 -0
- package/dist/components/alert.js +2 -21
- package/dist/components/alert.js.map +1 -1
- package/dist/components/app-dialog.js +10 -654
- package/dist/components/app-dialog.js.map +1 -1
- package/dist/components/badge.js +2 -23
- package/dist/components/badge.js.map +1 -1
- package/dist/components/breadcrumb.js +5 -504
- package/dist/components/breadcrumb.js.map +1 -1
- package/dist/components/button.js +3 -76
- package/dist/components/button.js.map +1 -1
- package/dist/components/caption-bar.js +7 -521
- package/dist/components/caption-bar.js.map +1 -1
- package/dist/components/checkbox.js +4 -74
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/chip-button.js +4 -85
- package/dist/components/chip-button.js.map +1 -1
- package/dist/components/close-confirm-dialog.js +12 -662
- package/dist/components/close-confirm-dialog.js.map +1 -1
- package/dist/components/color-picker.js +7 -533
- package/dist/components/color-picker.js.map +1 -1
- package/dist/components/combobox.js +15 -937
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/confirm-by-typing-dialog.js +12 -669
- package/dist/components/confirm-by-typing-dialog.js.map +1 -1
- package/dist/components/confirm-dialog.js +11 -637
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/count-badge.js +2 -21
- package/dist/components/count-badge.js.map +1 -1
- package/dist/components/dialog.js +8 -569
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/dropdown-menu.js +9 -1007
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/dropdown-select.js +9 -883
- package/dist/components/dropdown-select.js.map +1 -1
- package/dist/components/empty.js +2 -21
- package/dist/components/empty.js.map +1 -1
- package/dist/components/filter-rail.js +7 -145
- package/dist/components/filter-rail.js.map +1 -1
- package/dist/components/fixed-action-bar.js +2 -21
- package/dist/components/fixed-action-bar.js.map +1 -1
- package/dist/components/font-picker.js +11 -589
- package/dist/components/font-picker.js.map +1 -1
- package/dist/components/form.js +9 -66
- package/dist/components/form.js.map +1 -1
- package/dist/components/icon-tile.js +3 -43
- package/dist/components/icon-tile.js.map +1 -1
- package/dist/components/icon-toggle.js +3 -43
- package/dist/components/icon-toggle.js.map +1 -1
- package/dist/components/icon.js +3 -47
- package/dist/components/icon.js.map +1 -1
- package/dist/components/image-crop-panel.js +19 -775
- package/dist/components/image-crop-panel.js.map +1 -1
- package/dist/components/image-cropper.js +1 -164
- package/dist/components/image-cropper.js.map +1 -1
- package/dist/components/input-group.js +6 -268
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/input.js +3 -58
- package/dist/components/input.js.map +1 -1
- package/dist/components/label.js +3 -38
- package/dist/components/label.js.map +1 -1
- package/dist/components/list-empty-row.js +2 -21
- package/dist/components/list-empty-row.js.map +1 -1
- package/dist/components/management-empty.js +2 -21
- package/dist/components/management-empty.js.map +1 -1
- package/dist/components/management-skeleton.js +4 -59
- package/dist/components/management-skeleton.js.map +1 -1
- package/dist/components/meta-chip.js +2 -21
- package/dist/components/meta-chip.js.map +1 -1
- package/dist/components/mobile-drawer.js +7 -268
- package/dist/components/mobile-drawer.js.map +1 -1
- package/dist/components/page-header.js +3 -42
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/page-scaffold.js +5 -76
- package/dist/components/page-scaffold.js.map +1 -1
- package/dist/components/pagination-bar.js +13 -617
- package/dist/components/pagination-bar.js.map +1 -1
- package/dist/components/pagination.js +6 -684
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/panel-toolbar.js +11 -716
- package/dist/components/panel-toolbar.js.map +1 -1
- package/dist/components/pill-tabs.js +2 -21
- package/dist/components/pill-tabs.js.map +1 -1
- package/dist/components/plugin-download-consent.js +13 -663
- package/dist/components/plugin-download-consent.js.map +1 -1
- package/dist/components/popover.js +5 -242
- package/dist/components/popover.js.map +1 -1
- package/dist/components/preview-card.js +2 -21
- package/dist/components/preview-card.js.map +1 -1
- package/dist/components/progress.js +2 -20
- package/dist/components/progress.js.map +1 -1
- package/dist/components/radio-group.js +2 -21
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/scroll-area.js +2 -21
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/search-field.js +6 -590
- package/dist/components/search-field.js.map +1 -1
- package/dist/components/secondary-stat.js +3 -40
- package/dist/components/secondary-stat.js.map +1 -1
- package/dist/components/section-header.js +3 -43
- package/dist/components/section-header.js.map +1 -1
- package/dist/components/section-label.js +3 -44
- package/dist/components/section-label.js.map +1 -1
- package/dist/components/section-tabs.js +2 -21
- package/dist/components/section-tabs.js.map +1 -1
- package/dist/components/separator.js +3 -47
- package/dist/components/separator.js.map +1 -1
- package/dist/components/sheet.js +8 -467
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/sidebar.js +24 -1047
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/skeleton.js +3 -39
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.js +2 -21
- package/dist/components/slider.js.map +1 -1
- package/dist/components/sortable-chip-list.js +2 -21
- package/dist/components/sortable-chip-list.js.map +1 -1
- package/dist/components/special-tag-surface.js +3 -531
- package/dist/components/special-tag-surface.js.map +1 -1
- package/dist/components/spinner.js +3 -63
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/surface.js +3 -49
- package/dist/components/surface.js.map +1 -1
- package/dist/components/switch.js +3 -51
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table.js +2 -20
- package/dist/components/table.js.map +1 -1
- package/dist/components/tag-chip.js +6 -617
- package/dist/components/tag-chip.js.map +1 -1
- package/dist/components/textarea.js +3 -56
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/toast.js +8 -809
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle.js +2 -20
- package/dist/components/toggle.js.map +1 -1
- package/dist/components/tooltip.js +3 -80
- package/dist/components/tooltip.js.map +1 -1
- package/dist/hooks/use-dialog-footer-actions.js +1 -9
- package/dist/hooks/use-dialog-footer-actions.js.map +1 -1
- package/dist/hooks/use-form-field.js +1 -34
- package/dist/hooks/use-form-field.js.map +1 -1
- package/dist/hooks/use-mobile.js +2 -27
- package/dist/hooks/use-mobile.js.map +1 -1
- package/dist/hooks/useMobileBackToClose.js +3 -232
- package/dist/hooks/useMobileBackToClose.js.map +1 -1
- package/dist/icons/actions.js +4 -524
- package/dist/icons/actions.js.map +1 -1
- package/dist/icons/icon-style.js +1 -49
- package/dist/icons/icon-style.js.map +1 -1
- package/dist/icons/marks.js +1 -46
- package/dist/icons/marks.js.map +1 -1
- package/dist/icons/registry.js +2 -1194
- package/dist/icons/registry.js.map +1 -1
- package/dist/index.js +10 -651
- package/dist/index.js.map +1 -1
- package/dist/lib/colors.js +1 -63
- package/dist/lib/colors.js.map +1 -1
- package/dist/lib/merge-config.js +1 -18
- package/dist/lib/merge-config.js.map +1 -1
- package/dist/lib/pagination.js +1 -24
- package/dist/lib/pagination.js.map +1 -1
- package/dist/lib/tag-surface.js +5 -613
- package/dist/lib/tag-surface.js.map +1 -1
- package/dist/lib/utils.js +2 -24
- package/dist/lib/utils.js.map +1 -1
- package/dist/res-card-template/format.js +1 -21
- package/dist/res-card-template/format.js.map +1 -1
- package/dist/res-card-template/icon.js +1 -39
- package/dist/res-card-template/icon.js.map +1 -1
- package/dist/res-card-template/index.js +3 -329
- package/dist/res-card-template/index.js.map +1 -1
- package/dist/res-card-template/template.js +3 -331
- package/dist/res-card-template/template.js.map +1 -1
- package/dist/viewport.js +1 -11
- package/dist/viewport.js.map +1 -1
- package/package.json +3 -3
- package/src/components/image-crop-panel.dist.test.tsx +54 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { Spinner } from './chunk-WI6O7GZK.js';
|
|
2
|
+
import { Cross } from './chunk-XBPQEZES.js';
|
|
3
|
+
import { Button } from './chunk-PWJBHUM2.js';
|
|
4
|
+
import { CheckCircle, InfoCircle, DangerTriangle, ForbiddenCircle } from './chunk-7MWWHI6T.js';
|
|
5
|
+
import { cn } from './chunk-M5OJN54O.js';
|
|
6
|
+
import 'react';
|
|
7
|
+
import { Toast as Toast$1 } from '@base-ui/react/toast';
|
|
8
|
+
import { useTranslation } from 'react-i18next';
|
|
9
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
10
|
+
|
|
11
|
+
var toast = Toast$1.createToastManager();
|
|
12
|
+
function ToastProvider({ ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(Toast$1.Provider, { ...props });
|
|
14
|
+
}
|
|
15
|
+
function ToastPortal({ ...props }) {
|
|
16
|
+
return /* @__PURE__ */ jsx(Toast$1.Portal, { "data-slot": "toast-portal", ...props });
|
|
17
|
+
}
|
|
18
|
+
function ToastViewport({ className, ...props }) {
|
|
19
|
+
return /* @__PURE__ */ jsx(
|
|
20
|
+
Toast$1.Viewport,
|
|
21
|
+
{
|
|
22
|
+
"data-slot": "toast-viewport",
|
|
23
|
+
className: cn(
|
|
24
|
+
"pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full",
|
|
25
|
+
className
|
|
26
|
+
),
|
|
27
|
+
...props
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
function Toast({ className, ...props }) {
|
|
32
|
+
return /* @__PURE__ */ jsx(
|
|
33
|
+
Toast$1.Root,
|
|
34
|
+
{
|
|
35
|
+
"data-slot": "toast",
|
|
36
|
+
className: cn(
|
|
37
|
+
"group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
|
|
38
|
+
"[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]",
|
|
39
|
+
"h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]",
|
|
40
|
+
"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']",
|
|
41
|
+
"data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]",
|
|
42
|
+
"data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]",
|
|
43
|
+
"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]",
|
|
44
|
+
"data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]",
|
|
45
|
+
"data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]",
|
|
46
|
+
"data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]",
|
|
47
|
+
"data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",
|
|
48
|
+
"data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]",
|
|
49
|
+
"data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]",
|
|
50
|
+
"data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]",
|
|
51
|
+
"data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",
|
|
52
|
+
className
|
|
53
|
+
),
|
|
54
|
+
...props
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
function ToastContent({ className, ...props }) {
|
|
59
|
+
return /* @__PURE__ */ jsx(
|
|
60
|
+
Toast$1.Content,
|
|
61
|
+
{
|
|
62
|
+
"data-slot": "toast-content",
|
|
63
|
+
className: cn(
|
|
64
|
+
"flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] data-behind:opacity-0 data-expanded:opacity-100",
|
|
65
|
+
className
|
|
66
|
+
),
|
|
67
|
+
...props
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
function ToastTitle({ className, ...props }) {
|
|
72
|
+
return /* @__PURE__ */ jsx(
|
|
73
|
+
Toast$1.Title,
|
|
74
|
+
{
|
|
75
|
+
"data-slot": "toast-title",
|
|
76
|
+
className: cn("text-sm font-medium", className),
|
|
77
|
+
...props
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
function ToastDescription({
|
|
82
|
+
className,
|
|
83
|
+
...props
|
|
84
|
+
}) {
|
|
85
|
+
return /* @__PURE__ */ jsx(
|
|
86
|
+
Toast$1.Description,
|
|
87
|
+
{
|
|
88
|
+
"data-slot": "toast-description",
|
|
89
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
90
|
+
...props
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
function ToastAction({
|
|
95
|
+
className,
|
|
96
|
+
render = /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm" }),
|
|
97
|
+
...props
|
|
98
|
+
}) {
|
|
99
|
+
return /* @__PURE__ */ jsx(
|
|
100
|
+
Toast$1.Action,
|
|
101
|
+
{
|
|
102
|
+
"data-slot": "toast-action",
|
|
103
|
+
render,
|
|
104
|
+
className: cn("shrink-0", className),
|
|
105
|
+
...props
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
function ToastClose({
|
|
110
|
+
className,
|
|
111
|
+
children,
|
|
112
|
+
render = /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon-sm" }),
|
|
113
|
+
...props
|
|
114
|
+
}) {
|
|
115
|
+
const { t } = useTranslation("ui", { useSuspense: false });
|
|
116
|
+
return /* @__PURE__ */ jsx(
|
|
117
|
+
Toast$1.Close,
|
|
118
|
+
{
|
|
119
|
+
"data-slot": "toast-close",
|
|
120
|
+
"aria-label": t("aria.closeToast"),
|
|
121
|
+
render,
|
|
122
|
+
className: cn(
|
|
123
|
+
"relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground",
|
|
124
|
+
className
|
|
125
|
+
),
|
|
126
|
+
...props,
|
|
127
|
+
children: children ?? /* @__PURE__ */ jsx(Cross, { "aria-hidden": "true" })
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
function ToastIcon({ type }) {
|
|
132
|
+
let icon = null;
|
|
133
|
+
if (type === "success") {
|
|
134
|
+
icon = /* @__PURE__ */ jsx(CheckCircle, { className: "text-emerald-500", "aria-hidden": "true" });
|
|
135
|
+
}
|
|
136
|
+
if (type === "info") {
|
|
137
|
+
icon = /* @__PURE__ */ jsx(InfoCircle, { "aria-hidden": "true" });
|
|
138
|
+
}
|
|
139
|
+
if (type === "warning") {
|
|
140
|
+
icon = /* @__PURE__ */ jsx(DangerTriangle, { className: "text-amber-500", "aria-hidden": "true" });
|
|
141
|
+
}
|
|
142
|
+
if (type === "error") {
|
|
143
|
+
icon = /* @__PURE__ */ jsx(ForbiddenCircle, { className: "text-destructive", "aria-hidden": "true" });
|
|
144
|
+
}
|
|
145
|
+
if (type === "loading") {
|
|
146
|
+
icon = /* @__PURE__ */ jsx(Spinner, { className: "size-4", "aria-hidden": "true" });
|
|
147
|
+
}
|
|
148
|
+
if (!icon) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
return /* @__PURE__ */ jsx(
|
|
152
|
+
"span",
|
|
153
|
+
{
|
|
154
|
+
"data-slot": "toast-icon",
|
|
155
|
+
className: "shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
|
|
156
|
+
children: icon
|
|
157
|
+
}
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
function ToastList() {
|
|
161
|
+
const { toasts } = Toast$1.useToastManager();
|
|
162
|
+
return toasts.map((toastItem) => /* @__PURE__ */ jsx(Toast, { toast: toastItem, children: /* @__PURE__ */ jsxs(ToastContent, { children: [
|
|
163
|
+
/* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }),
|
|
164
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
165
|
+
/* @__PURE__ */ jsx(ToastTitle, {}),
|
|
166
|
+
/* @__PURE__ */ jsx(ToastDescription, {})
|
|
167
|
+
] }),
|
|
168
|
+
/* @__PURE__ */ jsx(ToastAction, {}),
|
|
169
|
+
/* @__PURE__ */ jsx(ToastClose, {})
|
|
170
|
+
] }) }, toastItem.id));
|
|
171
|
+
}
|
|
172
|
+
function Toaster({
|
|
173
|
+
children,
|
|
174
|
+
toastManager = toast,
|
|
175
|
+
...props
|
|
176
|
+
}) {
|
|
177
|
+
return /* @__PURE__ */ jsxs(ToastProvider, { toastManager, ...props, children: [
|
|
178
|
+
children,
|
|
179
|
+
/* @__PURE__ */ jsx(ToastPortal, { children: /* @__PURE__ */ jsx(ToastViewport, { children: /* @__PURE__ */ jsx(ToastList, {}) }) })
|
|
180
|
+
] });
|
|
181
|
+
}
|
|
182
|
+
var createToastManager = Toast$1.createToastManager;
|
|
183
|
+
var useToastManager = Toast$1.useToastManager;
|
|
184
|
+
|
|
185
|
+
export { Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, createToastManager, toast, useToastManager };
|
|
186
|
+
//# sourceMappingURL=chunk-BFGOE5AI.js.map
|
|
187
|
+
//# sourceMappingURL=chunk-BFGOE5AI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/toast.tsx"],"names":["ToastPrimitive"],"mappings":"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","file":"chunk-BFGOE5AI.js","sourcesContent":["import { CheckCircle } from \"@hoardodile/ui/icons/registry\"\nimport { DangerTriangle } from \"@hoardodile/ui/icons/registry\"\nimport { ForbiddenCircle } from \"@hoardodile/ui/icons/registry\"\nimport { InfoCircle } from \"@hoardodile/ui/icons/registry\"\nimport * as React from \"react\"\nimport { Toast as ToastPrimitive } from \"@base-ui/react/toast\"\nimport { useTranslation } from \"react-i18next\"\n\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport { Button } from \"@hoardodile/ui/components/button\"\nimport { Cross } from \"@hoardodile/ui/icons/marks\"\nimport { Spinner } from \"@hoardodile/ui/components/spinner\"\n\nconst toast = ToastPrimitive.createToastManager()\n\nfunction ToastProvider({ ...props }: ToastPrimitive.Provider.Props) {\n return <ToastPrimitive.Provider {...props} />\n}\n\nfunction ToastPortal({ ...props }: ToastPrimitive.Portal.Props) {\n return <ToastPrimitive.Portal data-slot=\"toast-portal\" {...props} />\n}\n\nfunction ToastViewport({ className, ...props }: ToastPrimitive.Viewport.Props) {\n return (\n <ToastPrimitive.Viewport\n data-slot=\"toast-viewport\"\n className={cn(\n \"pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction Toast({ className, ...props }: ToastPrimitive.Root.Props) {\n return (\n <ToastPrimitive.Root\n data-slot=\"toast\"\n className={cn(\n \"group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]\",\n \"h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]\",\n \"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\n \"data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]\",\n \"data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]\",\n \"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]\",\n \"data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\n \"data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\n \"data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\n \"data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ToastContent({ className, ...props }: ToastPrimitive.Content.Props) {\n return (\n <ToastPrimitive.Content\n data-slot=\"toast-content\"\n className={cn(\n \"flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] data-behind:opacity-0 data-expanded:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ToastTitle({ className, ...props }: ToastPrimitive.Title.Props) {\n return (\n <ToastPrimitive.Title\n data-slot=\"toast-title\"\n className={cn(\"text-sm font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction ToastDescription({\n className,\n ...props\n}: ToastPrimitive.Description.Props) {\n return (\n <ToastPrimitive.Description\n data-slot=\"toast-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction ToastAction({\n className,\n render = <Button variant=\"outline\" size=\"sm\" />,\n ...props\n}: ToastPrimitive.Action.Props) {\n return (\n <ToastPrimitive.Action\n data-slot=\"toast-action\"\n render={render}\n className={cn(\"shrink-0\", className)}\n {...props}\n />\n )\n}\n\nfunction ToastClose({\n className,\n children,\n render = <Button variant=\"ghost\" size=\"icon-sm\" />,\n ...props\n}: ToastPrimitive.Close.Props) {\n const { t } = useTranslation(\"ui\", { useSuspense: false })\n return (\n <ToastPrimitive.Close\n data-slot=\"toast-close\"\n aria-label={t(\"aria.closeToast\")}\n render={render}\n className={cn(\n \"relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground\",\n className\n )}\n {...props}\n >\n {children ?? (\n <Cross aria-hidden=\"true\" />\n )}\n </ToastPrimitive.Close>\n )\n}\n\nfunction ToastIcon({ type }: { type: string | undefined }) {\n let icon: React.ReactNode = null\n\n if (type === \"success\") {\n icon = (\n <CheckCircle className=\"text-emerald-500\" aria-hidden=\"true\" />\n )\n }\n\n if (type === \"info\") {\n icon = (\n <InfoCircle aria-hidden=\"true\" />\n )\n }\n\n if (type === \"warning\") {\n icon = (\n <DangerTriangle className=\"text-amber-500\" aria-hidden=\"true\" />\n )\n }\n\n if (type === \"error\") {\n icon = (\n <ForbiddenCircle className=\"text-destructive\" aria-hidden=\"true\" />\n )\n }\n\n if (type === \"loading\") {\n icon = (\n <Spinner className=\"size-4\" aria-hidden=\"true\" />\n )\n }\n\n if (!icon) {\n return null\n }\n\n return (\n <span\n data-slot=\"toast-icon\"\n className=\"shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\"\n >\n {icon}\n </span>\n )\n}\n\nfunction ToastList() {\n const { toasts } = ToastPrimitive.useToastManager()\n\n return toasts.map((toastItem) => (\n <Toast key={toastItem.id} toast={toastItem}>\n <ToastContent>\n <ToastIcon type={toastItem.type} />\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <ToastTitle />\n <ToastDescription />\n </div>\n <ToastAction />\n <ToastClose />\n </ToastContent>\n </Toast>\n ))\n}\n\nfunction Toaster({\n children,\n toastManager = toast,\n ...props\n}: ToastPrimitive.Provider.Props) {\n return (\n <ToastProvider toastManager={toastManager} {...props}>\n {children}\n <ToastPortal>\n <ToastViewport>\n <ToastList />\n </ToastViewport>\n </ToastPortal>\n </ToastProvider>\n )\n}\n\nconst createToastManager = ToastPrimitive.createToastManager\nconst useToastManager = ToastPrimitive.useToastManager\n\nexport {\n Toaster,\n Toast,\n ToastAction,\n ToastClose,\n ToastContent,\n ToastDescription,\n ToastPortal,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n createToastManager,\n toast,\n useToastManager,\n}\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Icon } from './chunk-TMQ5OMBK.js';
|
|
2
|
+
import { cn } from './chunk-M5OJN54O.js';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function ChipButton(props) {
|
|
6
|
+
const {
|
|
7
|
+
icon,
|
|
8
|
+
active,
|
|
9
|
+
dashed,
|
|
10
|
+
disabled,
|
|
11
|
+
children,
|
|
12
|
+
className,
|
|
13
|
+
onClick,
|
|
14
|
+
testId
|
|
15
|
+
} = props;
|
|
16
|
+
return /* @__PURE__ */ jsxs(
|
|
17
|
+
"button",
|
|
18
|
+
{
|
|
19
|
+
type: "button",
|
|
20
|
+
onClick: disabled ? void 0 : onClick,
|
|
21
|
+
"data-testid": testId,
|
|
22
|
+
disabled,
|
|
23
|
+
className: cn(
|
|
24
|
+
"inline-flex h-chip shrink-0 items-center gap-1.5 rounded-md px-2.5 text-xs whitespace-nowrap",
|
|
25
|
+
!dashed && "font-medium",
|
|
26
|
+
disabled ? "cursor-default" : "cursor-pointer",
|
|
27
|
+
active && "bg-accent text-foreground",
|
|
28
|
+
// The dashed outline keeps a 1px transparent border when
|
|
29
|
+
// active so the width never moves with the state.
|
|
30
|
+
active && dashed && "border border-transparent",
|
|
31
|
+
!active && disabled && "text-muted-foreground",
|
|
32
|
+
!active && !disabled && dashed && "border border-dashed border-border-strong bg-card text-muted-foreground hover:text-secondary-foreground",
|
|
33
|
+
!active && !disabled && !dashed && "text-secondary-foreground hover:text-foreground",
|
|
34
|
+
className
|
|
35
|
+
),
|
|
36
|
+
children: [
|
|
37
|
+
icon !== void 0 ? /* @__PURE__ */ jsx(Icon, { icon }) : null,
|
|
38
|
+
children
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { ChipButton };
|
|
45
|
+
//# sourceMappingURL=chunk-BRT25IDQ.js.map
|
|
46
|
+
//# sourceMappingURL=chunk-BRT25IDQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/chip-button.tsx"],"names":[],"mappings":";;;;AA2BO,SAAS,WAAW,KAAA,EAAwB;AAClD,EAAA,MAAM;AAAA,IACL,IAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,GAAI,KAAA;AACJ,EAAA,uBACC,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,WAAW,MAAA,GAAY,OAAA;AAAA,MAChC,aAAA,EAAa,MAAA;AAAA,MACb,QAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACV,8FAAA;AAAA,QACA,CAAC,MAAA,IAAU,aAAA;AAAA,QACX,WAAW,gBAAA,GAAmB,gBAAA;AAAA,QAC9B,MAAA,IAAU,2BAAA;AAAA;AAAA;AAAA,QAGV,UAAU,MAAA,IAAU,2BAAA;AAAA,QACpB,CAAC,UAAU,QAAA,IAAY,uBAAA;AAAA,QACvB,CAAC,MAAA,IACA,CAAC,QAAA,IACD,MAAA,IACA,yGAAA;AAAA,QACD,CAAC,MAAA,IACA,CAAC,QAAA,IACD,CAAC,MAAA,IACD,iDAAA;AAAA,QACD;AAAA,OACD;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,KAAS,MAAA,mBAAY,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAY,CAAA,GAAK,IAAA;AAAA,QAC5C;AAAA;AAAA;AAAA,GACF;AAEF","file":"chunk-BRT25IDQ.js","sourcesContent":["import type { IconType } from \"@hoardodile/ui/components/icon\"\nimport { Icon } from \"@hoardodile/ui/components/icon\"\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport type { ReactNode } from \"react\"\n\nexport type ChipButtonProps = {\n\treadonly icon?: IconType\n\t/** Latched-toggle state — accent fill, no hover shift. */\n\treadonly active?: boolean\n\t/** The dashed outline (the Unused triage filter) instead of the quiet\n\t text idle state. */\n\treadonly dashed?: boolean\n\treadonly disabled?: boolean\n\treadonly children: ReactNode\n\treadonly className?: string\n\treadonly onClick?: () => void\n\treadonly testId?: string\n}\n\n/**\n * Chip button: the toolbar's compact toggle, h-chip height. Two kinds:\n * the quiet toggle (Reorder) wears medium weight in both states so its\n * width never moves; the dashed filter (Unused) is an indicator, not a\n * toggle, so it stays regular weight with a dashed outline. `active`\n * latches the accent fill on both; the dashed outline keeps a transparent\n * border when active so the width never shifts.\n */\nexport function ChipButton(props: ChipButtonProps) {\n\tconst {\n\t\ticon,\n\t\tactive,\n\t\tdashed,\n\t\tdisabled,\n\t\tchildren,\n\t\tclassName,\n\t\tonClick,\n\t\ttestId,\n\t} = props\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={disabled ? undefined : onClick}\n\t\t\tdata-testid={testId}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex h-chip shrink-0 items-center gap-1.5 rounded-md px-2.5 text-xs whitespace-nowrap\",\n\t\t\t\t!dashed && \"font-medium\",\n\t\t\t\tdisabled ? \"cursor-default\" : \"cursor-pointer\",\n\t\t\t\tactive && \"bg-accent text-foreground\",\n\t\t\t\t// The dashed outline keeps a 1px transparent border when\n\t\t\t\t// active so the width never moves with the state.\n\t\t\t\tactive && dashed && \"border border-transparent\",\n\t\t\t\t!active && disabled && \"text-muted-foreground\",\n\t\t\t\t!active &&\n\t\t\t\t\t!disabled &&\n\t\t\t\t\tdashed &&\n\t\t\t\t\t\"border border-dashed border-border-strong bg-card text-muted-foreground hover:text-secondary-foreground\",\n\t\t\t\t!active &&\n\t\t\t\t\t!disabled &&\n\t\t\t\t\t!dashed &&\n\t\t\t\t\t\"text-secondary-foreground hover:text-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{icon !== undefined ? <Icon icon={icon} /> : null}\n\t\t\t{children}\n\t\t</button>\n\t)\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { cn } from './chunk-M5OJN54O.js';
|
|
2
|
+
import { Separator as Separator$1 } from '@base-ui/react/separator';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function Separator({
|
|
6
|
+
className,
|
|
7
|
+
orientation = "horizontal",
|
|
8
|
+
size = "hairline",
|
|
9
|
+
...props
|
|
10
|
+
}) {
|
|
11
|
+
const thickness = size === "seam" ? "data-horizontal:h-0.5 data-vertical:w-0.5" : "data-horizontal:h-px data-vertical:w-px";
|
|
12
|
+
return /* @__PURE__ */ jsx(
|
|
13
|
+
Separator$1,
|
|
14
|
+
{
|
|
15
|
+
"data-slot": "separator",
|
|
16
|
+
orientation,
|
|
17
|
+
className: cn(
|
|
18
|
+
"shrink-0 bg-border data-horizontal:w-full data-vertical:self-stretch",
|
|
19
|
+
thickness,
|
|
20
|
+
className
|
|
21
|
+
),
|
|
22
|
+
...props
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { Separator };
|
|
28
|
+
//# sourceMappingURL=chunk-BU5DQOPM.js.map
|
|
29
|
+
//# sourceMappingURL=chunk-BU5DQOPM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/separator.tsx"],"names":["SeparatorPrimitive"],"mappings":";;;;AAWA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,IAAA,GAAO,UAAA;AAAA,EACP,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,SAAA,GACJ,IAAA,KAAS,MAAA,GACL,2CAAA,GACA,yCAAA;AACN,EAAA,uBACE,GAAA;AAAA,IAACA,WAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,sEAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-BU5DQOPM.js","sourcesContent":["import { Separator as SeparatorPrimitive } from \"@base-ui/react/separator\"\n\nimport { cn } from \"@hoardodile/ui/lib/utils\"\n\nexport type SeparatorSize = \"hairline\" | \"seam\"\n\n/**\n * Horizontal/vertical divider: hairlines are 1px and quiet; the 2px\n * `seam` tier marks only structural seams (tab bars, panel sections,\n * pinned action bars).\n */\nfunction Separator({\n className,\n orientation = \"horizontal\",\n size = \"hairline\",\n ...props\n}: SeparatorPrimitive.Props & {\n readonly size?: SeparatorSize\n}) {\n const thickness =\n size === \"seam\"\n ? \"data-horizontal:h-0.5 data-vertical:w-0.5\"\n : \"data-horizontal:h-px data-vertical:w-px\"\n return (\n <SeparatorPrimitive\n data-slot=\"separator\"\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-horizontal:w-full data-vertical:self-stretch\",\n thickness,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n"]}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { useMobileBackToClose } from './chunk-TDDHQZ62.js';
|
|
2
|
+
import { Check } from './chunk-XBPQEZES.js';
|
|
3
|
+
import { AltArrowRight } from './chunk-7MWWHI6T.js';
|
|
4
|
+
import { cn } from './chunk-M5OJN54O.js';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
import { Menu } from '@base-ui/react/menu';
|
|
7
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
function DropdownMenu({
|
|
10
|
+
open,
|
|
11
|
+
defaultOpen,
|
|
12
|
+
onOpenChange,
|
|
13
|
+
...props
|
|
14
|
+
}) {
|
|
15
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React.useState(
|
|
16
|
+
defaultOpen ?? false
|
|
17
|
+
);
|
|
18
|
+
const isControlled = open !== void 0;
|
|
19
|
+
const currentOpen = isControlled ? open : uncontrolledOpen;
|
|
20
|
+
function handleOpenChange(next, eventDetails) {
|
|
21
|
+
if (!isControlled) setUncontrolledOpen(next);
|
|
22
|
+
onOpenChange?.(next, eventDetails);
|
|
23
|
+
}
|
|
24
|
+
useMobileBackToClose(currentOpen, handleOpenChange);
|
|
25
|
+
return /* @__PURE__ */ jsx(
|
|
26
|
+
Menu.Root,
|
|
27
|
+
{
|
|
28
|
+
"data-slot": "dropdown-menu",
|
|
29
|
+
open: currentOpen,
|
|
30
|
+
onOpenChange: handleOpenChange,
|
|
31
|
+
...props
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
function DropdownMenuPortal({ ...props }) {
|
|
36
|
+
return /* @__PURE__ */ jsx(Menu.Portal, { "data-slot": "dropdown-menu-portal", ...props });
|
|
37
|
+
}
|
|
38
|
+
function DropdownMenuTrigger({ ...props }) {
|
|
39
|
+
return /* @__PURE__ */ jsx(Menu.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
40
|
+
}
|
|
41
|
+
function DropdownMenuContent({
|
|
42
|
+
align = "start",
|
|
43
|
+
alignOffset = 0,
|
|
44
|
+
side = "bottom",
|
|
45
|
+
sideOffset = 4,
|
|
46
|
+
className,
|
|
47
|
+
container,
|
|
48
|
+
...props
|
|
49
|
+
}) {
|
|
50
|
+
return /* @__PURE__ */ jsx(Menu.Portal, { container, children: /* @__PURE__ */ jsx(
|
|
51
|
+
Menu.Positioner,
|
|
52
|
+
{
|
|
53
|
+
className: "isolate z-50 outline-none",
|
|
54
|
+
align,
|
|
55
|
+
alignOffset,
|
|
56
|
+
side,
|
|
57
|
+
sideOffset,
|
|
58
|
+
children: /* @__PURE__ */ jsx(
|
|
59
|
+
Menu.Popup,
|
|
60
|
+
{
|
|
61
|
+
"data-slot": "dropdown-menu-content",
|
|
62
|
+
className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
63
|
+
...props
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
) });
|
|
68
|
+
}
|
|
69
|
+
function DropdownMenuGroup({ ...props }) {
|
|
70
|
+
return /* @__PURE__ */ jsx(Menu.Group, { "data-slot": "dropdown-menu-group", ...props });
|
|
71
|
+
}
|
|
72
|
+
function DropdownMenuLabel({
|
|
73
|
+
className,
|
|
74
|
+
inset,
|
|
75
|
+
...props
|
|
76
|
+
}) {
|
|
77
|
+
return /* @__PURE__ */ jsx(
|
|
78
|
+
Menu.GroupLabel,
|
|
79
|
+
{
|
|
80
|
+
"data-slot": "dropdown-menu-label",
|
|
81
|
+
"data-inset": inset,
|
|
82
|
+
className: cn(
|
|
83
|
+
"px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8",
|
|
84
|
+
className
|
|
85
|
+
),
|
|
86
|
+
...props
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
function DropdownMenuItem({
|
|
91
|
+
className,
|
|
92
|
+
inset,
|
|
93
|
+
variant = "default",
|
|
94
|
+
...props
|
|
95
|
+
}) {
|
|
96
|
+
return /* @__PURE__ */ jsx(
|
|
97
|
+
Menu.Item,
|
|
98
|
+
{
|
|
99
|
+
"data-slot": "dropdown-menu-item",
|
|
100
|
+
"data-inset": inset,
|
|
101
|
+
"data-variant": variant,
|
|
102
|
+
className: cn(
|
|
103
|
+
"group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
|
|
104
|
+
className
|
|
105
|
+
),
|
|
106
|
+
...props
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
function DropdownMenuSub({ ...props }) {
|
|
111
|
+
return /* @__PURE__ */ jsx(Menu.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
|
|
112
|
+
}
|
|
113
|
+
function DropdownMenuSubTrigger({
|
|
114
|
+
className,
|
|
115
|
+
inset,
|
|
116
|
+
children,
|
|
117
|
+
...props
|
|
118
|
+
}) {
|
|
119
|
+
return /* @__PURE__ */ jsxs(
|
|
120
|
+
Menu.SubmenuTrigger,
|
|
121
|
+
{
|
|
122
|
+
"data-slot": "dropdown-menu-sub-trigger",
|
|
123
|
+
"data-inset": inset,
|
|
124
|
+
className: cn(
|
|
125
|
+
"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
126
|
+
className
|
|
127
|
+
),
|
|
128
|
+
...props,
|
|
129
|
+
children: [
|
|
130
|
+
children,
|
|
131
|
+
/* @__PURE__ */ jsx(AltArrowRight, { className: "ml-auto" })
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
function DropdownMenuSubContent({
|
|
137
|
+
align = "start",
|
|
138
|
+
alignOffset = -3,
|
|
139
|
+
side = "right",
|
|
140
|
+
sideOffset = 0,
|
|
141
|
+
className,
|
|
142
|
+
...props
|
|
143
|
+
}) {
|
|
144
|
+
return /* @__PURE__ */ jsx(
|
|
145
|
+
DropdownMenuContent,
|
|
146
|
+
{
|
|
147
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
148
|
+
className: cn("w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
149
|
+
align,
|
|
150
|
+
alignOffset,
|
|
151
|
+
side,
|
|
152
|
+
sideOffset,
|
|
153
|
+
...props
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
function DropdownMenuCheckboxItem({
|
|
158
|
+
className,
|
|
159
|
+
children,
|
|
160
|
+
checked,
|
|
161
|
+
inset,
|
|
162
|
+
...props
|
|
163
|
+
}) {
|
|
164
|
+
return /* @__PURE__ */ jsxs(
|
|
165
|
+
Menu.CheckboxItem,
|
|
166
|
+
{
|
|
167
|
+
"data-slot": "dropdown-menu-checkbox-item",
|
|
168
|
+
"data-inset": inset,
|
|
169
|
+
className: cn(
|
|
170
|
+
"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
171
|
+
className
|
|
172
|
+
),
|
|
173
|
+
checked,
|
|
174
|
+
...props,
|
|
175
|
+
children: [
|
|
176
|
+
/* @__PURE__ */ jsx(
|
|
177
|
+
"span",
|
|
178
|
+
{
|
|
179
|
+
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
180
|
+
"data-slot": "dropdown-menu-checkbox-item-indicator",
|
|
181
|
+
children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(
|
|
182
|
+
Check,
|
|
183
|
+
{}
|
|
184
|
+
) })
|
|
185
|
+
}
|
|
186
|
+
),
|
|
187
|
+
children
|
|
188
|
+
]
|
|
189
|
+
}
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
function DropdownMenuRadioGroup({ ...props }) {
|
|
193
|
+
return /* @__PURE__ */ jsx(
|
|
194
|
+
Menu.RadioGroup,
|
|
195
|
+
{
|
|
196
|
+
"data-slot": "dropdown-menu-radio-group",
|
|
197
|
+
...props
|
|
198
|
+
}
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
function DropdownMenuRadioItem({
|
|
202
|
+
className,
|
|
203
|
+
children,
|
|
204
|
+
inset,
|
|
205
|
+
...props
|
|
206
|
+
}) {
|
|
207
|
+
return /* @__PURE__ */ jsxs(
|
|
208
|
+
Menu.RadioItem,
|
|
209
|
+
{
|
|
210
|
+
"data-slot": "dropdown-menu-radio-item",
|
|
211
|
+
"data-inset": inset,
|
|
212
|
+
className: cn(
|
|
213
|
+
"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
214
|
+
className
|
|
215
|
+
),
|
|
216
|
+
...props,
|
|
217
|
+
children: [
|
|
218
|
+
/* @__PURE__ */ jsx(
|
|
219
|
+
"span",
|
|
220
|
+
{
|
|
221
|
+
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
222
|
+
"data-slot": "dropdown-menu-radio-item-indicator",
|
|
223
|
+
children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(
|
|
224
|
+
Check,
|
|
225
|
+
{}
|
|
226
|
+
) })
|
|
227
|
+
}
|
|
228
|
+
),
|
|
229
|
+
children
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
function DropdownMenuSeparator({
|
|
235
|
+
className,
|
|
236
|
+
...props
|
|
237
|
+
}) {
|
|
238
|
+
return /* @__PURE__ */ jsx(
|
|
239
|
+
Menu.Separator,
|
|
240
|
+
{
|
|
241
|
+
"data-slot": "dropdown-menu-separator",
|
|
242
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
243
|
+
...props
|
|
244
|
+
}
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
function DropdownMenuShortcut({
|
|
248
|
+
className,
|
|
249
|
+
...props
|
|
250
|
+
}) {
|
|
251
|
+
return /* @__PURE__ */ jsx(
|
|
252
|
+
"span",
|
|
253
|
+
{
|
|
254
|
+
"data-slot": "dropdown-menu-shortcut",
|
|
255
|
+
className: cn(
|
|
256
|
+
"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
|
|
257
|
+
className
|
|
258
|
+
),
|
|
259
|
+
...props
|
|
260
|
+
}
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
|
|
265
|
+
//# sourceMappingURL=chunk-BWASOT5X.js.map
|
|
266
|
+
//# sourceMappingURL=chunk-BWASOT5X.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/dropdown-menu.tsx"],"names":["MenuPrimitive"],"mappings":"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","file":"chunk-BWASOT5X.js","sourcesContent":["import * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport { useMobileBackToClose } from \"@hoardodile/ui/hooks/useMobileBackToClose\"\nimport { AltArrowRight } from \"@hoardodile/ui/icons/registry\"\nimport { Check } from \"@hoardodile/ui/icons/marks\"\n\nfunction DropdownMenu({\n open,\n defaultOpen,\n onOpenChange,\n ...props\n}: Omit<MenuPrimitive.Root.Props, \"onOpenChange\"> & {\n /**\n * `eventDetails` is absent for closes triggered by the mobile back\n * gesture (a synthetic close with no underlying Base UI event).\n */\n onOpenChange?: (\n open: boolean,\n eventDetails?: MenuPrimitive.Root.ChangeEventDetails,\n ) => void\n}) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(\n defaultOpen ?? false,\n )\n const isControlled = open !== undefined\n const currentOpen = isControlled ? open : uncontrolledOpen\n function handleOpenChange(\n next: boolean,\n eventDetails?: MenuPrimitive.Root.ChangeEventDetails,\n ) {\n if (!isControlled) setUncontrolledOpen(next)\n onOpenChange?.(next, eventDetails)\n }\n useMobileBackToClose(currentOpen, handleOpenChange)\n return (\n <MenuPrimitive.Root\n data-slot=\"dropdown-menu\"\n open={currentOpen}\n onOpenChange={handleOpenChange}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n container,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n > & {\n /**\n * Override the portal target. Mirrors the escape hatch on\n * `SelectContent` / `PopoverContent`: the video player provides\n * its own fullscreen container so the menu stays interactive in\n * fullscreen mode.\n */\n container?: MenuPrimitive.Portal.Props[\"container\"]\n }) {\n return (\n <MenuPrimitive.Portal container={container}>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\"z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <AltArrowRight className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator>\n <Check\n />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator>\n <Check\n />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { cn } from './chunk-M5OJN54O.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
function SectionLabel({
|
|
5
|
+
tone = "muted",
|
|
6
|
+
size = "xs",
|
|
7
|
+
className,
|
|
8
|
+
children
|
|
9
|
+
}) {
|
|
10
|
+
return /* @__PURE__ */ jsx(
|
|
11
|
+
"div",
|
|
12
|
+
{
|
|
13
|
+
className: cn(
|
|
14
|
+
size === "tiny" ? "text-tiny leading-none" : "text-xs",
|
|
15
|
+
"font-semibold tracking-label uppercase",
|
|
16
|
+
tone === "foreground" ? "text-foreground" : tone === "danger" ? "text-destructive" : "text-muted-foreground",
|
|
17
|
+
className
|
|
18
|
+
),
|
|
19
|
+
children
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SectionLabel };
|
|
25
|
+
//# sourceMappingURL=chunk-F32V4Z7Q.js.map
|
|
26
|
+
//# sourceMappingURL=chunk-F32V4Z7Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/section-label.tsx"],"names":[],"mappings":";;;AAYO,SAAS,YAAA,CAAa;AAAA,EAC5B,IAAA,GAAO,OAAA;AAAA,EACP,IAAA,GAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA;AACD,CAAA,EAKG;AACF,EAAA,uBACC,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACV,IAAA,KAAS,SAAS,wBAAA,GAA2B,SAAA;AAAA,QAC7C,wCAAA;AAAA,QACA,IAAA,KAAS,YAAA,GACN,iBAAA,GACA,IAAA,KAAS,WACR,kBAAA,GACA,uBAAA;AAAA,QACJ;AAAA,OACD;AAAA,MAEC;AAAA;AAAA,GACF;AAEF","file":"chunk-F32V4Z7Q.js","sourcesContent":["import { cn } from \"@hoardodile/ui/lib/utils\"\nimport type { ReactNode } from \"react\"\n\n/**\n * Section label — the 12px uppercase tracking-label voice (DESIGN.md —\n * Typography), one component instead of a class string repeated across\n * panels, rails, dialogs and settings. Ink tones: `muted` (default, the\n * quiet section voice), `foreground` (structural headings), `danger`\n * (the dialog eyebrow of a destructive ritual). Callers with a\n * right-aligned count arrange it inside `children` (flex via\n * `className`) — the voice is the unit.\n */\nexport function SectionLabel({\n\ttone = \"muted\",\n\tsize = \"xs\",\n\tclassName,\n\tchildren,\n}: {\n\ttone?: \"muted\" | \"foreground\" | \"danger\"\n\tsize?: \"xs\" | \"tiny\"\n\tclassName?: string\n\tchildren: ReactNode\n}) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tsize === \"tiny\" ? \"text-tiny leading-none\" : \"text-xs\",\n\t\t\t\t\"font-semibold tracking-label uppercase\",\n\t\t\t\ttone === \"foreground\"\n\t\t\t\t\t? \"text-foreground\"\n\t\t\t\t\t: tone === \"danger\"\n\t\t\t\t\t\t? \"text-destructive\"\n\t\t\t\t\t\t: \"text-muted-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n"]}
|