@bigbinary/neeto-atoms 1.0.7 → 1.0.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/ColorPicker-BPvxDGDM.js +276 -0
- package/dist/ColorPicker-BPvxDGDM.js.map +1 -0
- package/dist/{DataTable-Y4POx0WN.js → DataTable-BKe9K5XP.js} +136 -136
- package/dist/DataTable-BKe9K5XP.js.map +1 -0
- package/dist/cjs/ColorPicker-DN8aynGh.js +282 -0
- package/dist/cjs/ColorPicker-DN8aynGh.js.map +1 -0
- package/dist/cjs/{DataTable-DJw2SZ7b.js → DataTable-BQt_mXDX.js} +136 -136
- package/dist/cjs/DataTable-BQt_mXDX.js.map +1 -0
- package/dist/cjs/components/Accordion.js +49 -0
- package/dist/cjs/components/Accordion.js.map +1 -0
- package/dist/cjs/components/Alert.js +101 -0
- package/dist/cjs/components/Alert.js.map +1 -0
- package/dist/cjs/components/Badge.js +71 -0
- package/dist/cjs/components/Badge.js.map +1 -0
- package/dist/cjs/components/Button.js +121 -0
- package/dist/cjs/components/Button.js.map +1 -0
- package/dist/cjs/components/Checkbox.js +44 -0
- package/dist/cjs/components/Checkbox.js.map +1 -0
- package/dist/cjs/components/ColorPicker.js +34 -0
- package/dist/cjs/components/ColorPicker.js.map +1 -0
- package/dist/cjs/components/DataTable.js +3 -3
- package/dist/cjs/components/Dialog.js +88 -0
- package/dist/cjs/components/Dialog.js.map +1 -0
- package/dist/cjs/components/DropdownMenu.js +180 -0
- package/dist/cjs/components/DropdownMenu.js.map +1 -0
- package/dist/cjs/components/Input.js +167 -0
- package/dist/cjs/components/Input.js.map +1 -0
- package/dist/cjs/components/MultiSelect.js +13 -0
- package/dist/cjs/components/MultiSelect.js.map +1 -0
- package/dist/cjs/components/MultiSelectCombobox.js +3 -0
- package/dist/cjs/components/MultiSelectCombobox.js.map +1 -0
- package/dist/cjs/components/MultiSelectDropdown.js +37 -0
- package/dist/cjs/components/MultiSelectDropdown.js.map +1 -0
- package/dist/cjs/components/OptionItem.js +34 -0
- package/dist/cjs/components/OptionItem.js.map +1 -0
- package/dist/cjs/components/Popover.js +123 -0
- package/dist/cjs/components/Popover.js.map +1 -0
- package/dist/cjs/components/RadioGroup.js +63 -0
- package/dist/cjs/components/RadioGroup.js.map +1 -0
- package/dist/cjs/components/Select.js +3 -0
- package/dist/cjs/components/Select.js.map +1 -0
- package/dist/cjs/components/SelectFieldWrapper.js +33 -0
- package/dist/cjs/components/SelectFieldWrapper.js.map +1 -0
- package/dist/cjs/components/SelectOptions.js +43 -0
- package/dist/cjs/components/SelectOptions.js.map +1 -0
- package/dist/cjs/components/SelectTriggerContent.js +43 -0
- package/dist/cjs/components/SelectTriggerContent.js.map +1 -0
- package/dist/cjs/components/Sheet.js +90 -0
- package/dist/cjs/components/Sheet.js.map +1 -0
- package/dist/cjs/components/Switch.js +35 -0
- package/dist/cjs/components/Switch.js.map +1 -0
- package/dist/cjs/components/Tabs.js +74 -0
- package/dist/cjs/components/Tabs.js.map +1 -0
- package/dist/cjs/components/Textarea.js +89 -0
- package/dist/cjs/components/Textarea.js.map +1 -0
- package/dist/cjs/components/Toastr.js +133 -0
- package/dist/cjs/components/Toastr.js.map +1 -0
- package/dist/cjs/components/Tooltip.js +109 -0
- package/dist/cjs/components/Tooltip.js.map +1 -0
- package/dist/cjs/{primitives → components}/Typography.js +6 -6
- package/dist/cjs/components/Typography.js.map +1 -0
- package/dist/cjs/components/shared.js +8 -0
- package/dist/cjs/components/shared.js.map +1 -0
- package/dist/cjs/{dialog-DzNWLbJ6.js → dialog-CF2GBHOG.js} +2 -2
- package/dist/cjs/{dialog-DzNWLbJ6.js.map → dialog-CF2GBHOG.js.map} +1 -1
- package/dist/cjs/{index-DAds6mf_.js → index-BLGrl3PF.js} +31 -31
- package/dist/cjs/{index-DAds6mf_.js.map → index-BLGrl3PF.js.map} +1 -1
- package/dist/cjs/{index-BqCr1H3u.js → index-BiGm7NEA.js} +11 -11
- package/dist/cjs/{index-BqCr1H3u.js.map → index-BiGm7NEA.js.map} +1 -1
- package/dist/cjs/{index-CGet1HH4.js → index-PdtYHwPi.js} +66 -66
- package/dist/cjs/{index-CGet1HH4.js.map → index-PdtYHwPi.js.map} +1 -1
- package/dist/cjs/index-Vlwnyfvs.js +1145 -0
- package/dist/cjs/index-Vlwnyfvs.js.map +1 -0
- package/dist/cjs/{index-DR7GJU4J.js → index-hQmfI1O7.js} +17 -17
- package/dist/cjs/{index-DR7GJU4J.js.map → index-hQmfI1O7.js.map} +1 -1
- package/dist/cjs/index.js +463 -26
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/primitives/Accordion.js +16 -16
- package/dist/cjs/primitives/Accordion.js.map +1 -1
- package/dist/cjs/primitives/AlertDialog.js +1 -1
- package/dist/cjs/primitives/Badge.js +58 -6
- package/dist/cjs/primitives/Badge.js.map +1 -1
- package/dist/cjs/primitives/Chart.js +137 -137
- package/dist/cjs/primitives/Chart.js.map +1 -1
- package/dist/cjs/primitives/Collapsible.js +1 -1
- package/dist/cjs/primitives/Combobox.js +4 -4
- package/dist/cjs/primitives/Combobox.js.map +1 -1
- package/dist/cjs/primitives/Command.js +2 -2
- package/dist/cjs/primitives/ContextMenu.js +2 -2
- package/dist/cjs/primitives/Dialog.js +10 -6
- package/dist/cjs/primitives/Dialog.js.map +1 -1
- package/dist/cjs/primitives/Drawer.js +1 -1
- package/dist/cjs/primitives/DropdownMenu.js +38 -38
- package/dist/cjs/primitives/DropdownMenu.js.map +1 -1
- package/dist/cjs/primitives/HoverCard.js +16 -16
- package/dist/cjs/primitives/Menubar.js +2 -2
- package/dist/cjs/primitives/Popover.js +13 -13
- package/dist/cjs/primitives/RadioGroup.js +27 -26
- package/dist/cjs/primitives/RadioGroup.js.map +1 -1
- package/dist/cjs/primitives/Select.js +77 -77
- package/dist/cjs/primitives/Sheet.js +10 -6
- package/dist/cjs/primitives/Sheet.js.map +1 -1
- package/dist/cjs/primitives/Sidebar.js +3 -3
- package/dist/cjs/primitives/Sonner.js +12 -1138
- package/dist/cjs/primitives/Sonner.js.map +1 -1
- package/dist/cjs/primitives/Switch.js +4 -8
- package/dist/cjs/primitives/Switch.js.map +1 -1
- package/dist/cjs/primitives/Tabs.js +11 -11
- package/dist/cjs/primitives/ToggleGroup.js +1 -1
- package/dist/cjs/primitives/Tooltip.js +1 -1
- package/dist/cjs/primitives/index.js +9 -11
- package/dist/cjs/primitives/index.js.map +1 -1
- package/dist/cjs/renderIcon-fLF3odqg.js +26 -0
- package/dist/cjs/renderIcon-fLF3odqg.js.map +1 -0
- package/dist/cjs/{sheet-nHSYZxAA.js → sheet-CkCrHmVA.js} +2 -2
- package/dist/cjs/{sheet-nHSYZxAA.js.map → sheet-CkCrHmVA.js.map} +1 -1
- package/dist/cjs/{tooltip-CRkOMh1b.js → tooltip-C-568jEL.js} +17 -17
- package/dist/cjs/{tooltip-CRkOMh1b.js.map → tooltip-C-568jEL.js.map} +1 -1
- package/dist/cjs/useCreatableItems-BTHtd7uo.js +100 -0
- package/dist/cjs/useCreatableItems-BTHtd7uo.js.map +1 -0
- package/dist/cjs/{reselect-CeyIIDM-.js → with-selector-u4xTSzCv.js} +111 -111
- package/dist/cjs/with-selector-u4xTSzCv.js.map +1 -0
- package/dist/components/Accordion.d.ts +18 -0
- package/dist/components/Accordion.js +43 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/Alert.d.ts +51 -0
- package/dist/components/Alert.js +99 -0
- package/dist/components/Alert.js.map +1 -0
- package/dist/components/Badge.d.ts +29 -0
- package/dist/components/Badge.js +69 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Button.d.ts +47 -0
- package/dist/components/Button.js +119 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Checkbox.d.ts +16 -0
- package/dist/components/Checkbox.js +42 -0
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts +4 -0
- package/dist/components/ColorPicker/Palette.d.ts +12 -0
- package/dist/components/ColorPicker/Target.d.ts +15 -0
- package/dist/components/ColorPicker/constants.d.ts +10 -0
- package/dist/components/ColorPicker/hooks/useEyeDropper.d.ts +15 -0
- package/dist/components/ColorPicker/hooks/useRecentlyUsedColors.d.ts +11 -0
- package/dist/components/ColorPicker/index.d.ts +2 -0
- package/dist/components/ColorPicker/types.d.ts +42 -0
- package/dist/components/ColorPicker/utils.d.ts +31 -0
- package/dist/components/ColorPicker.js +28 -0
- package/dist/components/ColorPicker.js.map +1 -0
- package/dist/components/DataTable.js +2 -2
- package/dist/components/Dialog.d.ts +56 -0
- package/dist/components/Dialog.js +86 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/DropdownMenu/Divider.d.ts +3 -0
- package/dist/components/DropdownMenu/DropdownBase.d.ts +3 -0
- package/dist/components/DropdownMenu/Label.d.ts +7 -0
- package/dist/components/DropdownMenu/Menu.d.ts +7 -0
- package/dist/components/DropdownMenu/MenuItem.d.ts +10 -0
- package/dist/components/DropdownMenu/MenuItemButton.d.ts +4 -0
- package/dist/components/DropdownMenu/SplitTrigger.d.ts +13 -0
- package/dist/components/DropdownMenu/SubMenu.d.ts +10 -0
- package/dist/components/DropdownMenu/TriggerButton.d.ts +10 -0
- package/dist/components/DropdownMenu/constants.d.ts +7 -0
- package/dist/components/DropdownMenu/index.d.ts +16 -0
- package/dist/components/DropdownMenu/types.d.ts +88 -0
- package/dist/components/DropdownMenu.js +178 -0
- package/dist/components/DropdownMenu.js.map +1 -0
- package/dist/components/Input.d.ts +39 -0
- package/dist/components/Input.js +165 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/MultiSelect.constants.d.ts +5 -0
- package/dist/components/MultiSelect.d.ts +4 -0
- package/dist/components/MultiSelect.js +4 -0
- package/dist/components/MultiSelect.js.map +1 -0
- package/dist/components/MultiSelect.types.d.ts +121 -0
- package/dist/components/MultiSelect.utils.d.ts +18 -0
- package/dist/components/MultiSelectCombobox.d.ts +3 -0
- package/dist/components/MultiSelectCombobox.js +2 -0
- package/dist/components/MultiSelectCombobox.js.map +1 -0
- package/dist/components/MultiSelectCombobox.types.d.ts +52 -0
- package/dist/components/MultiSelectDropdown.d.ts +9 -0
- package/dist/components/MultiSelectDropdown.js +35 -0
- package/dist/components/MultiSelectDropdown.js.map +1 -0
- package/dist/components/OptionItem.d.ts +9 -0
- package/dist/components/OptionItem.js +32 -0
- package/dist/components/OptionItem.js.map +1 -0
- package/dist/components/Popover.d.ts +47 -0
- package/dist/components/Popover.js +117 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/RadioGroup.d.ts +32 -0
- package/dist/components/RadioGroup.js +61 -0
- package/dist/components/RadioGroup.js.map +1 -0
- package/dist/components/Select.constants.d.ts +5 -0
- package/dist/components/Select.d.ts +4 -0
- package/dist/components/Select.js +2 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/Select.types.d.ts +58 -0
- package/dist/components/SelectFieldWrapper.d.ts +18 -0
- package/dist/components/SelectFieldWrapper.js +31 -0
- package/dist/components/SelectFieldWrapper.js.map +1 -0
- package/dist/components/SelectOptions.d.ts +2 -0
- package/dist/components/SelectOptions.js +41 -0
- package/dist/components/SelectOptions.js.map +1 -0
- package/dist/components/SelectTriggerContent.d.ts +18 -0
- package/dist/components/SelectTriggerContent.js +41 -0
- package/dist/components/SelectTriggerContent.js.map +1 -0
- package/dist/components/Sheet.d.ts +54 -0
- package/dist/components/Sheet.js +88 -0
- package/dist/components/Sheet.js.map +1 -0
- package/dist/components/Switch.d.ts +18 -0
- package/dist/components/Switch.js +33 -0
- package/dist/components/Switch.js.map +1 -0
- package/dist/components/Tabs.d.ts +20 -0
- package/dist/components/Tabs.js +72 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/Textarea.d.ts +36 -0
- package/dist/components/Textarea.js +87 -0
- package/dist/components/Textarea.js.map +1 -0
- package/dist/components/Toastr.d.ts +30 -0
- package/dist/components/Toastr.js +131 -0
- package/dist/components/Toastr.js.map +1 -0
- package/dist/components/Tooltip.d.ts +29 -0
- package/dist/components/Tooltip.js +103 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/{primitives → components}/Typography.d.ts +2 -2
- package/dist/{primitives → components}/Typography.js +6 -6
- package/dist/components/Typography.js.map +1 -0
- package/dist/components/shared.js +6 -0
- package/dist/components/shared.js.map +1 -0
- package/dist/components/shared.types.d.ts +16 -0
- package/dist/{dialog-C97DOTvO.js → dialog-Civ9r6wD.js} +3 -3
- package/dist/{dialog-C97DOTvO.js.map → dialog-Civ9r6wD.js.map} +1 -1
- package/dist/hooks/useAsyncOptions.d.ts +13 -0
- package/dist/hooks/useCreatableItems.d.ts +30 -0
- package/dist/hooks/useLazyLoadSentinel.d.ts +6 -0
- package/dist/hooks/useMultiSelectOptions.d.ts +15 -0
- package/dist/hooks/useMultiSelectState.d.ts +37 -0
- package/dist/hooks/useSelectState.d.ts +27 -0
- package/dist/{index-PF0ms7Xn.js → index-9HvIbmnI.js} +3 -3
- package/dist/{index-PF0ms7Xn.js.map → index-9HvIbmnI.js.map} +1 -1
- package/dist/index-D_roZz8G.js +1137 -0
- package/dist/index-D_roZz8G.js.map +1 -0
- package/dist/{index-BwxI_qgh.js → index-KzJfsx-e.js} +3 -3
- package/dist/{index-BwxI_qgh.js.map → index-KzJfsx-e.js.map} +1 -1
- package/dist/index.css +25 -1
- package/dist/index.d.ts +40 -0
- package/dist/index.js +440 -24
- package/dist/index.js.map +1 -1
- package/dist/{input-group-CDBpz6Pb.js → input-group-ytECR3Hw.js} +2 -2
- package/dist/{input-group-CDBpz6Pb.js.map → input-group-ytECR3Hw.js.map} +1 -1
- package/dist/lib/renderIcon.d.ts +5 -0
- package/dist/primitives/Accordion.js +1 -1
- package/dist/primitives/AlertDialog.js +1 -1
- package/dist/primitives/Badge.d.ts +13 -3
- package/dist/primitives/Badge.js +54 -2
- package/dist/primitives/Badge.js.map +1 -1
- package/dist/primitives/Chart.js +1 -1
- package/dist/primitives/Combobox.js +3 -3
- package/dist/primitives/Command.js +3 -3
- package/dist/primitives/ContextMenu.js +1 -1
- package/dist/primitives/Dialog.d.ts +11 -3
- package/dist/primitives/Dialog.js +11 -7
- package/dist/primitives/Dialog.js.map +1 -1
- package/dist/primitives/Drawer.js +1 -1
- package/dist/primitives/DropdownMenu.js +2 -2
- package/dist/primitives/InputGroup.js +1 -1
- package/dist/primitives/Menubar.js +1 -1
- package/dist/primitives/RadioGroup.d.ts +8 -3
- package/dist/primitives/RadioGroup.js +9 -8
- package/dist/primitives/RadioGroup.js.map +1 -1
- package/dist/primitives/Select.js +3 -3
- package/dist/primitives/Sheet.d.ts +12 -3
- package/dist/primitives/Sheet.js +11 -7
- package/dist/primitives/Sheet.js.map +1 -1
- package/dist/primitives/Sidebar.js +3 -3
- package/dist/primitives/Sonner.js +11 -1135
- package/dist/primitives/Sonner.js.map +1 -1
- package/dist/primitives/Switch.d.ts +6 -3
- package/dist/primitives/Switch.js +4 -8
- package/dist/primitives/Switch.js.map +1 -1
- package/dist/primitives/Tooltip.js +1 -1
- package/dist/primitives/index.d.ts +0 -1
- package/dist/primitives/index.js +8 -8
- package/dist/renderIcon-tlvMyboj.js +20 -0
- package/dist/renderIcon-tlvMyboj.js.map +1 -0
- package/dist/shadcn/components/typography.d.ts +4 -4
- package/dist/{sheet-D1ngftfX.js → sheet-COcn22fC.js} +3 -3
- package/dist/{sheet-D1ngftfX.js.map → sheet-COcn22fC.js.map} +1 -1
- package/dist/{tooltip-D5soNrAP.js → tooltip-DzjIJacP.js} +3 -3
- package/dist/{tooltip-D5soNrAP.js.map → tooltip-DzjIJacP.js.map} +1 -1
- package/dist/useCreatableItems-B0seQA1_.js +89 -0
- package/dist/useCreatableItems-B0seQA1_.js.map +1 -0
- package/dist/utils/fieldIds.d.ts +2 -0
- package/dist/utils/hyphenize.d.ts +1 -0
- package/dist/{reselect-CABQm5hA.js → with-selector--fY1NrB9.js} +111 -111
- package/dist/with-selector--fY1NrB9.js.map +1 -0
- package/package.json +2 -1
- package/dist/DataTable-Y4POx0WN.js.map +0 -1
- package/dist/cjs/DataTable-DJw2SZ7b.js.map +0 -1
- package/dist/cjs/primitives/Typography.js.map +0 -1
- package/dist/cjs/reselect-CeyIIDM-.js.map +0 -1
- package/dist/primitives/Typography.js.map +0 -1
- package/dist/reselect-CABQm5hA.js.map +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
4
|
+
import { r as renderIcon } from '../renderIcon-tlvMyboj.js';
|
|
5
|
+
import { Badge as Badge$1 } from '../primitives/Badge.js';
|
|
6
|
+
import { X } from '../x-_o2T3n6D.js';
|
|
7
|
+
import '../index-D7Zy7P05.js';
|
|
8
|
+
import '../index-CfriMyrd.js';
|
|
9
|
+
import '../index-BtkPdosV.js';
|
|
10
|
+
import '../createLucideIcon-C8ycilSN.js';
|
|
11
|
+
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Size config
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
const SIZE_CONFIG = {
|
|
16
|
+
sm: {
|
|
17
|
+
iconPl: "pl-1",
|
|
18
|
+
iconPr: "pr-1",
|
|
19
|
+
dismissPr: "pr-0.5",
|
|
20
|
+
btnSize: "size-3",
|
|
21
|
+
iconSize: "size-2",
|
|
22
|
+
},
|
|
23
|
+
default: {
|
|
24
|
+
iconPl: "pl-1.5",
|
|
25
|
+
iconPr: "pr-1.5",
|
|
26
|
+
dismissPr: "pr-1",
|
|
27
|
+
btnSize: "size-3.5",
|
|
28
|
+
iconSize: "size-2.5",
|
|
29
|
+
},
|
|
30
|
+
lg: {
|
|
31
|
+
iconPl: "pl-2",
|
|
32
|
+
iconPr: "pr-2",
|
|
33
|
+
dismissPr: "pr-1",
|
|
34
|
+
btnSize: "size-4.5",
|
|
35
|
+
iconSize: "size-3",
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Indicator colors
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
const INDICATOR_COLORS = {
|
|
42
|
+
default: "bg-primary",
|
|
43
|
+
secondary: "bg-muted-foreground",
|
|
44
|
+
destructive: "bg-destructive",
|
|
45
|
+
blue: "bg-blue-600",
|
|
46
|
+
green: "bg-green-600",
|
|
47
|
+
amber: "bg-amber-400",
|
|
48
|
+
red: "bg-red-600",
|
|
49
|
+
purple: "bg-purple-700",
|
|
50
|
+
pink: "bg-pink-600",
|
|
51
|
+
teal: "bg-teal-600",
|
|
52
|
+
gray: "bg-gray-400",
|
|
53
|
+
};
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Component
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
const Badge = forwardRef(({ variant = "default", size = "default", label, icon, iconPosition = "left", indicator, onDismiss, disabled = false, className, asChild = false, children, ...otherProps }, ref) => {
|
|
58
|
+
if (asChild) {
|
|
59
|
+
return (jsx(Badge$1, { ref: ref, asChild: true, variant: variant, size: size, className: className, ...otherProps, children: children }));
|
|
60
|
+
}
|
|
61
|
+
const renderLabel = label || children;
|
|
62
|
+
const iconElement = icon ? renderIcon(icon) : null;
|
|
63
|
+
const hasDismiss = !!onDismiss && !disabled;
|
|
64
|
+
return (jsxs(Badge$1, { ref: ref, variant: variant, size: size, className: cn(disabled && "opacity-50 pointer-events-none", icon && iconPosition === "left" && SIZE_CONFIG[size].iconPl, icon && iconPosition === "right" && SIZE_CONFIG[size].iconPr, hasDismiss && SIZE_CONFIG[size].dismissPr, className), ...otherProps, children: [indicator && (jsx("span", { "aria-hidden": "true", className: cn("size-1.5 shrink-0 rounded-full", INDICATOR_COLORS[indicator]) })), iconPosition === "left" && iconElement, renderLabel, iconPosition === "right" && iconElement, onDismiss && !disabled && (jsx("button", { type: "button", "aria-label": "Dismiss", onClick: onDismiss, className: cn("inline-flex shrink-0 items-center justify-center rounded-full bg-current/15 transition-[background-color,opacity] hover:bg-current/25 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1", SIZE_CONFIG[size].btnSize), children: jsx(X, { className: SIZE_CONFIG[size].iconSize }) }))] }));
|
|
65
|
+
});
|
|
66
|
+
Badge.displayName = "Badge";
|
|
67
|
+
|
|
68
|
+
export { Badge };
|
|
69
|
+
//# sourceMappingURL=Badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.js","sources":["../../src/components/Badge.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\nimport { Badge as PrimitiveBadge } from \"src/primitives/Badge\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype BadgeVariant =\n | \"default\"\n | \"secondary\"\n | \"destructive\"\n | \"outline\"\n | \"ghost\"\n | \"link\"\n | \"gray\"\n | \"gray-subtle\"\n | \"blue\"\n | \"blue-subtle\"\n | \"purple\"\n | \"purple-subtle\"\n | \"amber\"\n | \"amber-subtle\"\n | \"red\"\n | \"red-subtle\"\n | \"pink\"\n | \"pink-subtle\"\n | \"green\"\n | \"green-subtle\"\n | \"teal\"\n | \"teal-subtle\";\n\ntype BadgeSize = \"sm\" | \"default\" | \"lg\";\n\ntype IndicatorVariant =\n | \"default\"\n | \"secondary\"\n | \"destructive\"\n | \"blue\"\n | \"green\"\n | \"amber\"\n | \"red\"\n | \"purple\"\n | \"pink\"\n | \"teal\"\n | \"gray\";\n\nexport interface BadgeProps extends Omit<\n React.ComponentProps<\"span\">,\n \"children\"\n> {\n /** Visual variant of the badge. */\n variant?: BadgeVariant;\n /** Size of the badge. */\n size?: BadgeSize;\n /** Text label rendered inside the badge. */\n label?: string;\n /** Icon component, element, or class-name string. */\n icon?: IconProp;\n /** Placement of the icon relative to the label. */\n iconPosition?: \"left\" | \"right\";\n /** Colored status indicator dot. */\n indicator?: IndicatorVariant;\n /** Callback when the badge is dismissed. Renders a dismiss button when provided. */\n onDismiss?: () => void;\n /** Disables the badge and hides the dismiss button. */\n disabled?: boolean;\n /** Render as a custom element (polymorphic via Radix Slot). */\n asChild?: boolean;\n /** Children rendered inside the badge (fallback for `label`). */\n children?: ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Size config\n// ---------------------------------------------------------------------------\n\nconst SIZE_CONFIG = {\n sm: {\n iconPl: \"pl-1\",\n iconPr: \"pr-1\",\n dismissPr: \"pr-0.5\",\n btnSize: \"size-3\",\n iconSize: \"size-2\",\n },\n default: {\n iconPl: \"pl-1.5\",\n iconPr: \"pr-1.5\",\n dismissPr: \"pr-1\",\n btnSize: \"size-3.5\",\n iconSize: \"size-2.5\",\n },\n lg: {\n iconPl: \"pl-2\",\n iconPr: \"pr-2\",\n dismissPr: \"pr-1\",\n btnSize: \"size-4.5\",\n iconSize: \"size-3\",\n },\n};\n\n// ---------------------------------------------------------------------------\n// Indicator colors\n// ---------------------------------------------------------------------------\n\nconst INDICATOR_COLORS: Record<IndicatorVariant, string> = {\n default: \"bg-primary\",\n secondary: \"bg-muted-foreground\",\n destructive: \"bg-destructive\",\n blue: \"bg-blue-600\",\n green: \"bg-green-600\",\n amber: \"bg-amber-400\",\n red: \"bg-red-600\",\n purple: \"bg-purple-700\",\n pink: \"bg-pink-600\",\n teal: \"bg-teal-600\",\n gray: \"bg-gray-400\",\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n variant = \"default\",\n size = \"default\",\n label,\n icon,\n iconPosition = \"left\",\n indicator,\n onDismiss,\n disabled = false,\n className,\n asChild = false,\n children,\n ...otherProps\n },\n ref\n ) => {\n if (asChild) {\n return (\n <PrimitiveBadge\n ref={ref}\n asChild\n variant={variant}\n size={size}\n className={className}\n {...otherProps}\n >\n {children}\n </PrimitiveBadge>\n );\n }\n\n const renderLabel = label || children;\n const iconElement = icon ? renderIcon(icon) : null;\n\n const hasDismiss = !!onDismiss && !disabled;\n\n return (\n <PrimitiveBadge\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n disabled && \"opacity-50 pointer-events-none\",\n icon && iconPosition === \"left\" && SIZE_CONFIG[size].iconPl,\n icon && iconPosition === \"right\" && SIZE_CONFIG[size].iconPr,\n hasDismiss && SIZE_CONFIG[size].dismissPr,\n className\n )}\n {...otherProps}\n >\n {indicator && (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"size-1.5 shrink-0 rounded-full\",\n INDICATOR_COLORS[indicator]\n )}\n />\n )}\n {iconPosition === \"left\" && iconElement}\n {renderLabel}\n {iconPosition === \"right\" && iconElement}\n {onDismiss && !disabled && (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={onDismiss}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center rounded-full bg-current/15 transition-[background-color,opacity] hover:bg-current/25 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n SIZE_CONFIG[size].btnSize\n )}\n >\n <X className={SIZE_CONFIG[size].iconSize} />\n </button>\n )}\n </PrimitiveBadge>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n\nexport { Badge };\n"],"names":["_jsx","PrimitiveBadge","_jsxs"],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React, { type ReactNode, type MouseEvent } from "react";
|
|
2
|
+
import { type IconProp } from "src/lib/renderIcon";
|
|
3
|
+
type ButtonVariant = "default" | "secondary" | "destructive" | "outline" | "ghost" | "link";
|
|
4
|
+
type ButtonSize = "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg";
|
|
5
|
+
type IconPosition = "left" | "right";
|
|
6
|
+
type ButtonType = "button" | "reset" | "submit";
|
|
7
|
+
interface ButtonTooltipProps {
|
|
8
|
+
content?: ReactNode;
|
|
9
|
+
position?: string;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ButtonProps {
|
|
13
|
+
/** Visual variant of the button. */
|
|
14
|
+
variant?: ButtonVariant;
|
|
15
|
+
/** Size of the button. */
|
|
16
|
+
size?: ButtonSize;
|
|
17
|
+
/** Text label rendered inside the button. */
|
|
18
|
+
label?: string;
|
|
19
|
+
/** Icon component, element, or class-name string. */
|
|
20
|
+
icon?: IconProp;
|
|
21
|
+
/** Placement of the icon relative to the label. */
|
|
22
|
+
iconPosition?: IconPosition;
|
|
23
|
+
/** Show a loading spinner and prevent clicks. */
|
|
24
|
+
loading?: boolean;
|
|
25
|
+
/** Disable the button. */
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
/** Click handler. */
|
|
28
|
+
onClick?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;
|
|
29
|
+
/** Internal route (react-router `Link`). */
|
|
30
|
+
to?: string;
|
|
31
|
+
/** External URL (renders an anchor tag). */
|
|
32
|
+
href?: string;
|
|
33
|
+
/** HTML button type attribute. */
|
|
34
|
+
type?: ButtonType;
|
|
35
|
+
/** Stretch the button to fill its container. */
|
|
36
|
+
fullWidth?: boolean;
|
|
37
|
+
/** Additional CSS class names. */
|
|
38
|
+
className?: string;
|
|
39
|
+
/** Props forwarded to a wrapping Tooltip. */
|
|
40
|
+
tooltipProps?: ButtonTooltipProps | null;
|
|
41
|
+
/** Render as a custom element (polymorphic). */
|
|
42
|
+
asChild?: boolean;
|
|
43
|
+
/** Children rendered inside the button (fallback for `label`). */
|
|
44
|
+
children?: ReactNode;
|
|
45
|
+
}
|
|
46
|
+
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
47
|
+
export { Button };
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
4
|
+
import { r as renderIcon } from '../renderIcon-tlvMyboj.js';
|
|
5
|
+
import { Button as Button$1 } from '../primitives/Button.js';
|
|
6
|
+
import { Spinner } from '../primitives/Spinner.js';
|
|
7
|
+
import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '../primitives/Tooltip.js';
|
|
8
|
+
import '../button-COIbN8dg.js';
|
|
9
|
+
import '../index-D7Zy7P05.js';
|
|
10
|
+
import '../index-CfriMyrd.js';
|
|
11
|
+
import '../index-BtkPdosV.js';
|
|
12
|
+
import '../loader-circle-DycHUAWN.js';
|
|
13
|
+
import '../createLucideIcon-C8ycilSN.js';
|
|
14
|
+
import '../tooltip-DzjIJacP.js';
|
|
15
|
+
import '../index-DNzunGHb.js';
|
|
16
|
+
import '../index-CiyxEyB0.js';
|
|
17
|
+
import '../index-BNPynZWM.js';
|
|
18
|
+
import '../index-DhnfW8wQ.js';
|
|
19
|
+
import 'react-dom';
|
|
20
|
+
import '../index-CSUSJzOJ.js';
|
|
21
|
+
import '../index-zW4GjM5L.js';
|
|
22
|
+
import '../index-DOzu5J1s.js';
|
|
23
|
+
import '../index-ByEpUy7w.js';
|
|
24
|
+
import '../floating-ui.react-dom-CcGbtPEK.js';
|
|
25
|
+
import '../index-BYZaLNq1.js';
|
|
26
|
+
import '../index-fV_U4ZJM.js';
|
|
27
|
+
import '../index-yFgkK_AM.js';
|
|
28
|
+
import '../index-Cor698lu.js';
|
|
29
|
+
import '../index-CSggBaQF.js';
|
|
30
|
+
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Mappings
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
const ICON_ONLY_SIZE_MAP = {
|
|
35
|
+
xs: "icon-xs",
|
|
36
|
+
sm: "icon-sm",
|
|
37
|
+
default: "icon",
|
|
38
|
+
lg: "icon-lg",
|
|
39
|
+
};
|
|
40
|
+
const SPINNER_SIZE_MAP = {
|
|
41
|
+
xs: "size-3",
|
|
42
|
+
sm: "size-3.5",
|
|
43
|
+
default: "size-3.5",
|
|
44
|
+
lg: "size-4",
|
|
45
|
+
icon: "size-3.5",
|
|
46
|
+
"icon-xs": "size-3",
|
|
47
|
+
"icon-sm": "size-3.5",
|
|
48
|
+
"icon-lg": "size-4",
|
|
49
|
+
};
|
|
50
|
+
// Map NeetoUI tooltip `position` values to Radix side values
|
|
51
|
+
const TOOLTIP_SIDE_MAP = {
|
|
52
|
+
top: "top",
|
|
53
|
+
bottom: "bottom",
|
|
54
|
+
left: "left",
|
|
55
|
+
right: "right",
|
|
56
|
+
"top-start": "top",
|
|
57
|
+
"top-end": "top",
|
|
58
|
+
"bottom-start": "bottom",
|
|
59
|
+
"bottom-end": "bottom",
|
|
60
|
+
"left-start": "left",
|
|
61
|
+
"left-end": "left",
|
|
62
|
+
"right-start": "right",
|
|
63
|
+
"right-end": "right",
|
|
64
|
+
};
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Component
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
const Button = forwardRef(({ variant = "default", size = "default", label, icon = null, iconPosition = "right", loading = false, disabled = false, onClick, to, href, type = "button", fullWidth = false, className, tooltipProps = null, asChild = false, children, ...otherProps }, ref) => {
|
|
69
|
+
const isIconSize = size.startsWith("icon");
|
|
70
|
+
const renderLabel = isIconSize ? null : label || children;
|
|
71
|
+
const isIconOnly = !renderLabel && !!icon;
|
|
72
|
+
const resolvedSize = isIconOnly ? (ICON_ONLY_SIZE_MAP[size] ?? size) : size;
|
|
73
|
+
// --- Loading / disabled state ---
|
|
74
|
+
const isDisabled = disabled || loading;
|
|
75
|
+
// --- Click handler ---
|
|
76
|
+
const handleClick = (e) => {
|
|
77
|
+
if (loading || disabled) {
|
|
78
|
+
e.preventDefault();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
onClick?.(e);
|
|
82
|
+
};
|
|
83
|
+
// --- Icon elements ---
|
|
84
|
+
const iconElement = icon ? renderIcon(icon) : null;
|
|
85
|
+
// --- Build the inner content ---
|
|
86
|
+
const buttonContent = (jsxs(Fragment, { children: [loading && (jsx("span", { className: "absolute inset-0 flex items-center justify-center", children: jsx(Spinner, { "aria-hidden": "true", className: SPINNER_SIZE_MAP[resolvedSize] }) })), jsxs("span", { className: cn("inline-flex items-center gap-1.5", loading && "invisible"), children: [iconPosition === "left" && iconElement && (jsx("span", { "data-icon": "inline-start", children: iconElement })), renderLabel && jsx("span", { children: renderLabel }), iconPosition === "right" && iconElement && (jsx("span", { "data-icon": "inline-end", children: iconElement }))] })] }));
|
|
87
|
+
// --- Merged className ---
|
|
88
|
+
const mergedClassName = cn(fullWidth && "w-full", loading && "relative pointer-events-none", className);
|
|
89
|
+
// --- Determine render element ---
|
|
90
|
+
let buttonElement;
|
|
91
|
+
if (asChild) {
|
|
92
|
+
buttonElement = (jsx(Button$1, { ref: ref, asChild: true, variant: variant, size: resolvedSize, className: mergedClassName, disabled: isDisabled, ...otherProps, children: children }));
|
|
93
|
+
}
|
|
94
|
+
else if (!disabled && to) {
|
|
95
|
+
buttonElement = (jsx(Button$1, { asChild: true, variant: variant, size: resolvedSize, className: mergedClassName, disabled: isDisabled, ...otherProps, children: jsx("a", { ref: ref, href: to, onClick: handleClick, children: buttonContent }) }));
|
|
96
|
+
}
|
|
97
|
+
else if (!disabled && href) {
|
|
98
|
+
buttonElement = (jsx(Button$1, { asChild: true, variant: variant, size: resolvedSize, className: mergedClassName, disabled: isDisabled, ...otherProps, children: jsx("a", { ref: ref, href: href, onClick: handleClick, children: buttonContent }) }));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
buttonElement = (jsx(Button$1, { ref: ref, type: type, variant: variant, size: resolvedSize, className: mergedClassName, disabled: isDisabled, onClick: handleClick, ...otherProps, children: buttonContent }));
|
|
102
|
+
}
|
|
103
|
+
// --- Tooltip wrapper ---
|
|
104
|
+
if (tooltipProps) {
|
|
105
|
+
const { content, position, disabled: tooltipDisabled } = tooltipProps;
|
|
106
|
+
if (tooltipDisabled || !content) {
|
|
107
|
+
return jsx(Fragment, { children: buttonElement });
|
|
108
|
+
}
|
|
109
|
+
const side = position ? TOOLTIP_SIDE_MAP[position] : undefined;
|
|
110
|
+
// Wrap disabled buttons in a span so tooltip still triggers
|
|
111
|
+
const triggerContent = isDisabled ? (jsx("span", { className: "inline-flex", children: buttonElement })) : (buttonElement);
|
|
112
|
+
return (jsx(TooltipProvider, { children: jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: triggerContent }), jsx(TooltipContent, { side: side, children: content })] }) }));
|
|
113
|
+
}
|
|
114
|
+
return jsx(Fragment, { children: buttonElement });
|
|
115
|
+
});
|
|
116
|
+
Button.displayName = "Button";
|
|
117
|
+
|
|
118
|
+
export { Button };
|
|
119
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../src/components/Button.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode, type MouseEvent } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\nimport { Spinner } from \"src/primitives/Spinner\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype ButtonVariant =\n | \"default\"\n | \"secondary\"\n | \"destructive\"\n | \"outline\"\n | \"ghost\"\n | \"link\";\n\ntype ButtonSize =\n | \"default\"\n | \"xs\"\n | \"sm\"\n | \"lg\"\n | \"icon\"\n | \"icon-xs\"\n | \"icon-sm\"\n | \"icon-lg\";\n\ntype IconPosition = \"left\" | \"right\";\n\ntype ButtonType = \"button\" | \"reset\" | \"submit\";\n\ninterface ButtonTooltipProps {\n content?: ReactNode;\n position?: string;\n disabled?: boolean;\n}\n\nexport interface ButtonProps {\n /** Visual variant of the button. */\n variant?: ButtonVariant;\n /** Size of the button. */\n size?: ButtonSize;\n /** Text label rendered inside the button. */\n label?: string;\n /** Icon component, element, or class-name string. */\n icon?: IconProp;\n /** Placement of the icon relative to the label. */\n iconPosition?: IconPosition;\n /** Show a loading spinner and prevent clicks. */\n loading?: boolean;\n /** Disable the button. */\n disabled?: boolean;\n /** Click handler. */\n onClick?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;\n /** Internal route (react-router `Link`). */\n to?: string;\n /** External URL (renders an anchor tag). */\n href?: string;\n /** HTML button type attribute. */\n type?: ButtonType;\n /** Stretch the button to fill its container. */\n fullWidth?: boolean;\n /** Additional CSS class names. */\n className?: string;\n /** Props forwarded to a wrapping Tooltip. */\n tooltipProps?: ButtonTooltipProps | null;\n /** Render as a custom element (polymorphic). */\n asChild?: boolean;\n /** Children rendered inside the button (fallback for `label`). */\n children?: ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Mappings\n// ---------------------------------------------------------------------------\n\nconst ICON_ONLY_SIZE_MAP: Partial<Record<ButtonSize, ButtonSize>> = {\n xs: \"icon-xs\",\n sm: \"icon-sm\",\n default: \"icon\",\n lg: \"icon-lg\",\n};\n\nconst SPINNER_SIZE_MAP: Record<ButtonSize, string> = {\n xs: \"size-3\",\n sm: \"size-3.5\",\n default: \"size-3.5\",\n lg: \"size-4\",\n icon: \"size-3.5\",\n \"icon-xs\": \"size-3\",\n \"icon-sm\": \"size-3.5\",\n \"icon-lg\": \"size-4\",\n};\n\n// Map NeetoUI tooltip `position` values to Radix side values\nconst TOOLTIP_SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = \"default\",\n size = \"default\",\n label,\n icon = null,\n iconPosition = \"right\",\n loading = false,\n disabled = false,\n onClick,\n to,\n href,\n type = \"button\",\n fullWidth = false,\n className,\n tooltipProps = null,\n asChild = false,\n children,\n ...otherProps\n },\n ref\n ) => {\n const isIconSize = size.startsWith(\"icon\");\n const renderLabel = isIconSize ? null : label || children;\n const isIconOnly = !renderLabel && !!icon;\n const resolvedSize = isIconOnly ? (ICON_ONLY_SIZE_MAP[size] ?? size) : size;\n\n // --- Loading / disabled state ---\n const isDisabled = disabled || loading;\n\n // --- Click handler ---\n const handleClick = (\n e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>\n ) => {\n if (loading || disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n // --- Icon elements ---\n const iconElement = icon ? renderIcon(icon) : null;\n\n // --- Build the inner content ---\n const buttonContent = (\n <>\n {loading && (\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <Spinner\n aria-hidden=\"true\"\n className={SPINNER_SIZE_MAP[resolvedSize]}\n />\n </span>\n )}\n <span\n className={cn(\n \"inline-flex items-center gap-1.5\",\n loading && \"invisible\"\n )}\n >\n {iconPosition === \"left\" && iconElement && (\n <span data-icon=\"inline-start\">{iconElement}</span>\n )}\n {renderLabel && <span>{renderLabel}</span>}\n {iconPosition === \"right\" && iconElement && (\n <span data-icon=\"inline-end\">{iconElement}</span>\n )}\n </span>\n </>\n );\n\n // --- Merged className ---\n const mergedClassName = cn(\n fullWidth && \"w-full\",\n loading && \"relative pointer-events-none\",\n className\n );\n\n // --- Determine render element ---\n let buttonElement: ReactNode;\n\n if (asChild) {\n buttonElement = (\n <PrimitiveButton\n ref={ref}\n asChild\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n {...otherProps}\n >\n {children}\n </PrimitiveButton>\n );\n } else if (!disabled && to) {\n buttonElement = (\n <PrimitiveButton\n asChild\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n {...otherProps}\n >\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={to}\n onClick={handleClick}\n >\n {buttonContent}\n </a>\n </PrimitiveButton>\n );\n } else if (!disabled && href) {\n buttonElement = (\n <PrimitiveButton\n asChild\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n {...otherProps}\n >\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n onClick={handleClick}\n >\n {buttonContent}\n </a>\n </PrimitiveButton>\n );\n } else {\n buttonElement = (\n <PrimitiveButton\n ref={ref}\n type={type}\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n onClick={handleClick}\n {...otherProps}\n >\n {buttonContent}\n </PrimitiveButton>\n );\n }\n\n // --- Tooltip wrapper ---\n if (tooltipProps) {\n const { content, position, disabled: tooltipDisabled } = tooltipProps;\n\n if (tooltipDisabled || !content) {\n return <>{buttonElement}</>;\n }\n\n const side = position ? TOOLTIP_SIDE_MAP[position] : undefined;\n\n // Wrap disabled buttons in a span so tooltip still triggers\n const triggerContent = isDisabled ? (\n <span className=\"inline-flex\">{buttonElement}</span>\n ) : (\n buttonElement\n );\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{triggerContent}</TooltipTrigger>\n <TooltipContent side={side}>{content}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return <>{buttonElement}</>;\n }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button };\n"],"names":["_jsxs","_Fragment","_jsx","PrimitiveButton"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Checkbox as PrimitiveCheckbox } from "src/primitives/Checkbox";
|
|
3
|
+
export interface CheckboxProps extends React.ComponentProps<typeof PrimitiveCheckbox> {
|
|
4
|
+
/** Text displayed next to the checkbox. */
|
|
5
|
+
label?: string;
|
|
6
|
+
/** Error message displayed below the checkbox. */
|
|
7
|
+
error?: string;
|
|
8
|
+
/** Helper text displayed below the label. Accepts string or ReactNode. */
|
|
9
|
+
helpText?: React.ReactNode;
|
|
10
|
+
/** Shows a required indicator next to the label. */
|
|
11
|
+
required?: boolean;
|
|
12
|
+
/** Additional class name for the outermost wrapper. */
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
declare const Checkbox: React.ForwardRefExoticComponent<Omit<CheckboxProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
16
|
+
export { Checkbox };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef, useId } from 'react';
|
|
3
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
4
|
+
import { Checkbox as Checkbox$1 } from '../primitives/Checkbox.js';
|
|
5
|
+
import { Field, FieldContent, FieldLabel, FieldDescription, FieldError } from '../primitives/Field.js';
|
|
6
|
+
import '../check-Cpkv29p1.js';
|
|
7
|
+
import '../createLucideIcon-C8ycilSN.js';
|
|
8
|
+
import '../index-BtkPdosV.js';
|
|
9
|
+
import '../index-CiyxEyB0.js';
|
|
10
|
+
import '../index-DNzunGHb.js';
|
|
11
|
+
import '../index-Cor698lu.js';
|
|
12
|
+
import '../index-DOzu5J1s.js';
|
|
13
|
+
import '../index-30QpKM0j.js';
|
|
14
|
+
import '../index-BYZaLNq1.js';
|
|
15
|
+
import '../index-yFgkK_AM.js';
|
|
16
|
+
import '../index-DhnfW8wQ.js';
|
|
17
|
+
import 'react-dom';
|
|
18
|
+
import '../index-D7Zy7P05.js';
|
|
19
|
+
import '../label-B4qDF3W1.js';
|
|
20
|
+
import '../separator-BbhgePmX.js';
|
|
21
|
+
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Component
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
const Checkbox = forwardRef(({ label, error, helpText, required = false, disabled = false, className, ...otherProps }, ref) => {
|
|
26
|
+
const generatedId = useId();
|
|
27
|
+
const id = otherProps.id ?? generatedId;
|
|
28
|
+
const errorId = `error_${id}`;
|
|
29
|
+
const helpTextId = `helpText_${id}`;
|
|
30
|
+
const ariaDescribedBy = [error ? errorId : null, helpText ? helpTextId : null]
|
|
31
|
+
.filter(Boolean)
|
|
32
|
+
.join(" ") || undefined;
|
|
33
|
+
const hasField = !!(label || error || helpText);
|
|
34
|
+
if (!hasField) {
|
|
35
|
+
return (jsx(Checkbox$1, { ref: ref, id: id, disabled: disabled, "aria-invalid": !!error || undefined, "aria-required": required || undefined, "aria-describedby": ariaDescribedBy, className: className, ...otherProps }));
|
|
36
|
+
}
|
|
37
|
+
return (jsxs("div", { className: cn("flex flex-col gap-1", className), "data-disabled": disabled || undefined, "data-invalid": !!error || undefined, children: [jsxs(Field, { orientation: "horizontal", children: [jsx(Checkbox$1, { ref: ref, id: id, disabled: disabled, "aria-invalid": !!error || undefined, "aria-required": required || undefined, "aria-describedby": ariaDescribedBy, ...otherProps }), jsxs(FieldContent, { children: [label && (jsxs(FieldLabel, { htmlFor: id, children: [label, required && (jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }))] })), helpText && (jsx(FieldDescription, { id: helpTextId, children: helpText }))] })] }), error && jsx(FieldError, { id: errorId, children: error })] }));
|
|
38
|
+
});
|
|
39
|
+
Checkbox.displayName = "Checkbox";
|
|
40
|
+
|
|
41
|
+
export { Checkbox };
|
|
42
|
+
//# sourceMappingURL=Checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sources":["../../src/components/Checkbox.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Checkbox as PrimitiveCheckbox } from \"src/primitives/Checkbox\";\nimport {\n Field,\n FieldContent,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface CheckboxProps extends React.ComponentProps<\n typeof PrimitiveCheckbox\n> {\n /** Text displayed next to the checkbox. */\n label?: string;\n /** Error message displayed below the checkbox. */\n error?: string;\n /** Helper text displayed below the label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Shows a required indicator next to the label. */\n required?: boolean;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Checkbox = forwardRef<\n React.ComponentRef<typeof PrimitiveCheckbox>,\n CheckboxProps\n>(\n (\n {\n label,\n error,\n helpText,\n required = false,\n disabled = false,\n className,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = otherProps.id ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const hasField = !!(label || error || helpText);\n\n if (!hasField) {\n return (\n <PrimitiveCheckbox\n ref={ref}\n id={id}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n aria-required={required || undefined}\n aria-describedby={ariaDescribedBy}\n className={className}\n {...otherProps}\n />\n );\n }\n\n return (\n <div\n className={cn(\"flex flex-col gap-1\", className)}\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n >\n <Field orientation=\"horizontal\">\n <PrimitiveCheckbox\n ref={ref}\n id={id}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n aria-required={required || undefined}\n aria-describedby={ariaDescribedBy}\n {...otherProps}\n />\n <FieldContent>\n {label && (\n <FieldLabel htmlFor={id}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n {error && <FieldError id={errorId}>{error}</FieldError>}\n </div>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n"],"names":["_jsx","PrimitiveCheckbox","_jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA+BA;AACA;AACA;AAEA,MAAM,QAAQ,GAAG,UAAU,CAIzB,CACE,EACE,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,GAAG,UAAU,EACd,EACD,GAAG,KACD;AACF,IAAA,MAAM,WAAW,GAAG,KAAK,EAAE;AAC3B,IAAA,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,IAAI,WAAW;AACvC,IAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,EAAE,EAAE;AAC7B,IAAA,MAAM,UAAU,GAAG,CAAA,SAAA,EAAY,EAAE,EAAE;IAEnC,MAAM,eAAe,GACnB,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI;SAClD,MAAM,CAAC,OAAO;AACd,SAAA,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;IAE3B,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,IAAI,KAAK,IAAI,QAAQ,CAAC;IAE/C,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,QACEA,GAAA,CAACC,UAAiB,EAAA,EAChB,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAAA,cAAA,EACJ,CAAC,CAAC,KAAK,IAAI,SAAS,EAAA,eAAA,EACnB,QAAQ,IAAI,SAAS,EAAA,kBAAA,EAClB,eAAe,EACjC,SAAS,EAAE,SAAS,EAAA,GAChB,UAAU,EAAA,CACd;IAEN;IAEA,QACEC,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,EAAA,eAAA,EAChC,QAAQ,IAAI,SAAS,EAAA,cAAA,EACtB,CAAC,CAAC,KAAK,IAAI,SAAS,EAAA,QAAA,EAAA,CAElCA,IAAA,CAAC,KAAK,EAAA,EAAC,WAAW,EAAC,YAAY,EAAA,QAAA,EAAA,CAC7BF,IAACC,UAAiB,EAAA,EAChB,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAAA,cAAA,EACJ,CAAC,CAAC,KAAK,IAAI,SAAS,EAAA,eAAA,EACnB,QAAQ,IAAI,SAAS,EAAA,kBAAA,EAClB,eAAe,EAAA,GAC7B,UAAU,EAAA,CACd,EACFC,KAAC,YAAY,EAAA,EAAA,QAAA,EAAA,CACV,KAAK,KACJA,IAAA,CAAC,UAAU,EAAA,EAAC,OAAO,EAAE,EAAE,EAAA,QAAA,EAAA,CACpB,KAAK,EACL,QAAQ,KACPF,GAAA,CAAA,MAAA,EAAA,EAAA,aAAA,EAAkB,MAAM,EAAC,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,GAAA,EAAA,CAE9C,CACR,CAAA,EAAA,CACU,CACd,EACA,QAAQ,KACPA,GAAA,CAAC,gBAAgB,EAAA,EAAC,EAAE,EAAE,UAAU,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAoB,CAChE,CAAA,EAAA,CACY,CAAA,EAAA,CACT,EACP,KAAK,IAAIA,GAAA,CAAC,UAAU,EAAA,EAAC,EAAE,EAAE,OAAO,EAAA,QAAA,EAAG,KAAK,EAAA,CAAc,CAAA,EAAA,CACnD;AAEV,CAAC;AAGH,QAAQ,CAAC,WAAW,GAAG,UAAU;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { PaletteColor } from "./types";
|
|
3
|
+
export interface PaletteProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
/** Currently selected color. */
|
|
5
|
+
color?: string;
|
|
6
|
+
/** List of colors to render. */
|
|
7
|
+
colorList?: PaletteColor[];
|
|
8
|
+
/** Callback when a color swatch is clicked. */
|
|
9
|
+
onChange?: (color: string) => void;
|
|
10
|
+
}
|
|
11
|
+
declare const Palette: React.ForwardRefExoticComponent<PaletteProps & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
export { Palette };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const targetVariants: (props?: ({
|
|
4
|
+
size?: "small" | "medium" | "large" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
export interface TargetProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "size">, VariantProps<typeof targetVariants> {
|
|
7
|
+
/** Show hex code text beside the color swatch. */
|
|
8
|
+
showHexValue?: boolean;
|
|
9
|
+
/** The original color prop value. */
|
|
10
|
+
color?: string;
|
|
11
|
+
/** The resolved color value to display. */
|
|
12
|
+
colorValue?: string;
|
|
13
|
+
}
|
|
14
|
+
declare const Target: React.ForwardRefExoticComponent<TargetProps & React.RefAttributes<HTMLButtonElement>>;
|
|
15
|
+
export { Target };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const DEFAULT_PALETTE_COLORS: {
|
|
2
|
+
hex: string;
|
|
3
|
+
}[];
|
|
4
|
+
export declare const RECENTLY_USED_STORAGE_KEY = "recently-used-colors";
|
|
5
|
+
export declare const TARGET_SIZES: {
|
|
6
|
+
readonly small: "small";
|
|
7
|
+
readonly medium: "medium";
|
|
8
|
+
readonly large: "large";
|
|
9
|
+
};
|
|
10
|
+
export declare const PICKER_HEIGHT: Record<string, string>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface EyeDropperResult {
|
|
2
|
+
sRGBHex: string;
|
|
3
|
+
}
|
|
4
|
+
declare global {
|
|
5
|
+
interface Window {
|
|
6
|
+
EyeDropper?: new () => {
|
|
7
|
+
open: () => Promise<EyeDropperResult>;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export declare const useEyeDropper: () => {
|
|
12
|
+
isSupported: boolean;
|
|
13
|
+
open: () => Promise<string>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { PopoverContent } from "src/primitives/Popover";
|
|
3
|
+
export type ColorPickerSize = "small" | "medium" | "large";
|
|
4
|
+
export interface ColorValue {
|
|
5
|
+
hex: string;
|
|
6
|
+
rgb: {
|
|
7
|
+
r: number;
|
|
8
|
+
g: number;
|
|
9
|
+
b: number;
|
|
10
|
+
a: number;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface PaletteColor {
|
|
14
|
+
hex?: string;
|
|
15
|
+
rgb?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ColorPickerProps {
|
|
18
|
+
/** Current color value (hex string). */
|
|
19
|
+
color?: string;
|
|
20
|
+
/** Size of the trigger target. */
|
|
21
|
+
size?: ColorPickerSize;
|
|
22
|
+
/** Callback when color changes. */
|
|
23
|
+
onChange?: (value: ColorValue) => void;
|
|
24
|
+
/** Custom palette colors. */
|
|
25
|
+
colorPalette?: PaletteColor[];
|
|
26
|
+
/** Show eye dropper button. */
|
|
27
|
+
showEyeDropper?: boolean;
|
|
28
|
+
/** Show hex value text in the trigger. */
|
|
29
|
+
showHexValue?: boolean;
|
|
30
|
+
/** Enable alpha/transparency control. */
|
|
31
|
+
showTransparencyControl?: boolean;
|
|
32
|
+
/** Show the color picker (gradient area + input). */
|
|
33
|
+
showPicker?: boolean;
|
|
34
|
+
/** Show the hex gradient picker area. */
|
|
35
|
+
showHexPicker?: boolean;
|
|
36
|
+
/** Show recently used colors section. */
|
|
37
|
+
showRecentlyUsedColors?: boolean;
|
|
38
|
+
/** Props forwarded to the Popover content. */
|
|
39
|
+
dropdownProps?: Omit<React.ComponentProps<typeof PopoverContent>, "children">;
|
|
40
|
+
/** Additional CSS class names. */
|
|
41
|
+
className?: string;
|
|
42
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates a hex color string (3, 4, 6, or 8 digits with optional #).
|
|
3
|
+
*/
|
|
4
|
+
export declare const isValidHex: (hex: string) => boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Parses a hex color string into RGBA components.
|
|
7
|
+
* Returns { r: 0, g: 0, b: 0, a: 1 } for invalid inputs.
|
|
8
|
+
*/
|
|
9
|
+
export declare const hexToRgb: (hex: string) => {
|
|
10
|
+
r: number;
|
|
11
|
+
g: number;
|
|
12
|
+
b: number;
|
|
13
|
+
a: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Converts a hex color to an 8-digit hex string (#RRGGBBAA).
|
|
17
|
+
*/
|
|
18
|
+
export declare const hexToHex8: (hex: string) => string;
|
|
19
|
+
/**
|
|
20
|
+
* Converts a color value to a normalized { hex, rgb } object.
|
|
21
|
+
* Handles transparency and validity checks.
|
|
22
|
+
*/
|
|
23
|
+
export declare const getColor: (colorValue: string, showTransparencyControl: boolean) => {
|
|
24
|
+
hex: string;
|
|
25
|
+
rgb: {
|
|
26
|
+
r: number;
|
|
27
|
+
g: number;
|
|
28
|
+
b: number;
|
|
29
|
+
a: number;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { C as ColorPicker } from '../ColorPicker-BPvxDGDM.js';
|
|
2
|
+
import 'react/jsx-runtime';
|
|
3
|
+
import 'react';
|
|
4
|
+
import '../primitives/Button.js';
|
|
5
|
+
import '../button-COIbN8dg.js';
|
|
6
|
+
import '../index-D7Zy7P05.js';
|
|
7
|
+
import '../utils-DdHUxIdC.js';
|
|
8
|
+
import '../index-CfriMyrd.js';
|
|
9
|
+
import '../index-BtkPdosV.js';
|
|
10
|
+
import '../primitives/Popover.js';
|
|
11
|
+
import '../index-DNzunGHb.js';
|
|
12
|
+
import '../index-CiyxEyB0.js';
|
|
13
|
+
import '../index-BNPynZWM.js';
|
|
14
|
+
import '../index-DhnfW8wQ.js';
|
|
15
|
+
import 'react-dom';
|
|
16
|
+
import '../index-CSUSJzOJ.js';
|
|
17
|
+
import '../index-B4_fVWDx.js';
|
|
18
|
+
import '../index-zW4GjM5L.js';
|
|
19
|
+
import '../index-DOzu5J1s.js';
|
|
20
|
+
import '../index-ByEpUy7w.js';
|
|
21
|
+
import '../floating-ui.react-dom-CcGbtPEK.js';
|
|
22
|
+
import '../index-BYZaLNq1.js';
|
|
23
|
+
import '../index-fV_U4ZJM.js';
|
|
24
|
+
import '../index-yFgkK_AM.js';
|
|
25
|
+
import '../index-Cor698lu.js';
|
|
26
|
+
import '../chevron-down-BNi0ntys.js';
|
|
27
|
+
import '../createLucideIcon-C8ycilSN.js';
|
|
28
|
+
//# sourceMappingURL=ColorPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorPicker.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { D as DataTable, u as useColumnOrdering, a as useColumnPinning, b as useColumnVisibility, c as useTablePagination, d as useTableSelection, e as useTableSort } from '../DataTable-
|
|
1
|
+
export { D as DataTable, u as useColumnOrdering, a as useColumnPinning, b as useColumnVisibility, c as useTablePagination, d as useTableSelection, e as useTableSort } from '../DataTable-BKe9K5XP.js';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '../primitives/Table.js';
|
|
@@ -27,7 +27,7 @@ import '../ellipsis-lb8Ws6br.js';
|
|
|
27
27
|
import '../chevron-right-DQnrO-ek.js';
|
|
28
28
|
import '../chevron-left-BDoT8E2-.js';
|
|
29
29
|
import '../primitives/DropdownMenu.js';
|
|
30
|
-
import '../index-
|
|
30
|
+
import '../index-KzJfsx-e.js';
|
|
31
31
|
import '../index-Dd1i1d2M.js';
|
|
32
32
|
import '../index-BA158WEj.js';
|
|
33
33
|
import '../index-BNPynZWM.js';
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React, { type ReactNode, type RefObject } from "react";
|
|
2
|
+
import { DialogContent as PrimitiveDialogContent } from "src/primitives/Dialog";
|
|
3
|
+
type DialogSize = "small" | "medium" | "large" | "fullScreen";
|
|
4
|
+
/** Radix Dialog.Content props we forward via ...otherProps. */
|
|
5
|
+
type DialogContentProps = React.ComponentProps<typeof PrimitiveDialogContent>;
|
|
6
|
+
export interface DialogProps extends Omit<DialogContentProps, "children" | "className" | "showCloseButton" | "onEscapeKeyDown" | "onInteractOutside"> {
|
|
7
|
+
/** Size of the dialog. */
|
|
8
|
+
size?: DialogSize;
|
|
9
|
+
/** Whether the dialog is open. */
|
|
10
|
+
isOpen?: boolean;
|
|
11
|
+
/** Callback invoked when the dialog is closed. */
|
|
12
|
+
onClose?: () => void;
|
|
13
|
+
/** Content rendered inside the dialog. */
|
|
14
|
+
children?: ReactNode;
|
|
15
|
+
/** Additional CSS class names applied to the dialog content. */
|
|
16
|
+
className?: string;
|
|
17
|
+
/** Close on pressing the Esc key. */
|
|
18
|
+
closeOnEsc?: boolean;
|
|
19
|
+
/** Show the close button. */
|
|
20
|
+
closeButton?: boolean;
|
|
21
|
+
/** Additional CSS class names applied to the backdrop/overlay. */
|
|
22
|
+
backdropClassName?: string;
|
|
23
|
+
/** Close on clicking outside the dialog. */
|
|
24
|
+
closeOnOutsideClick?: boolean;
|
|
25
|
+
/** Ref of the element to receive focus when the dialog opens. */
|
|
26
|
+
initialFocusRef?: RefObject<HTMLElement | null>;
|
|
27
|
+
/** Ref of the element to receive focus when the dialog closes. */
|
|
28
|
+
finalFocusRef?: RefObject<HTMLElement | null>;
|
|
29
|
+
/** Whether to block body scroll when the dialog is mounted. Maps to Radix `modal` prop. */
|
|
30
|
+
blockScrollOnMount?: boolean;
|
|
31
|
+
/** Force children to re-render even when the dialog is closed. */
|
|
32
|
+
forceRender?: boolean;
|
|
33
|
+
/** Radix Dialog `modal` prop — takes precedence over blockScrollOnMount. */
|
|
34
|
+
modal?: boolean;
|
|
35
|
+
/** Radix Dialog `defaultOpen` prop. */
|
|
36
|
+
defaultOpen?: boolean;
|
|
37
|
+
}
|
|
38
|
+
interface DialogSubcomponentProps extends React.ComponentProps<"div"> {
|
|
39
|
+
children?: ReactNode;
|
|
40
|
+
className?: string;
|
|
41
|
+
/** Custom data-testid attribute. */
|
|
42
|
+
dataTestid?: string;
|
|
43
|
+
}
|
|
44
|
+
declare const DialogHeader: React.ForwardRefExoticComponent<Omit<DialogSubcomponentProps & {
|
|
45
|
+
description?: string;
|
|
46
|
+
}, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
47
|
+
declare const DialogBody: React.ForwardRefExoticComponent<Omit<DialogSubcomponentProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
48
|
+
declare const DialogFooter: React.ForwardRefExoticComponent<Omit<DialogSubcomponentProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
49
|
+
declare const DialogTitle: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-dialog").DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
50
|
+
declare const Dialog: React.ForwardRefExoticComponent<DialogProps & React.RefAttributes<HTMLDivElement>> & {
|
|
51
|
+
Header: typeof DialogHeader;
|
|
52
|
+
Body: typeof DialogBody;
|
|
53
|
+
Footer: typeof DialogFooter;
|
|
54
|
+
Title: typeof DialogTitle;
|
|
55
|
+
};
|
|
56
|
+
export { Dialog };
|