@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,117 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import React__default, { forwardRef, useState, useCallback, useRef, useEffect } from 'react';
|
|
3
|
+
import { c as cva } from '../index-D7Zy7P05.js';
|
|
4
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
5
|
+
import { HoverCard, HoverCardTrigger, HoverCardContent } from '../primitives/HoverCard.js';
|
|
6
|
+
import '../index-DNzunGHb.js';
|
|
7
|
+
import '../index-CiyxEyB0.js';
|
|
8
|
+
import '../index-Cor698lu.js';
|
|
9
|
+
import '../index-DOzu5J1s.js';
|
|
10
|
+
import '../index-BtkPdosV.js';
|
|
11
|
+
import '../index-ByEpUy7w.js';
|
|
12
|
+
import '../floating-ui.react-dom-CcGbtPEK.js';
|
|
13
|
+
import 'react-dom';
|
|
14
|
+
import '../index-DhnfW8wQ.js';
|
|
15
|
+
import '../index-CSUSJzOJ.js';
|
|
16
|
+
import '../index-BYZaLNq1.js';
|
|
17
|
+
import '../index-fV_U4ZJM.js';
|
|
18
|
+
import '../index-yFgkK_AM.js';
|
|
19
|
+
import '../index-BNPynZWM.js';
|
|
20
|
+
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Variants
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
const popoverVariants = cva("flex flex-col gap-2.5", {
|
|
25
|
+
variants: {
|
|
26
|
+
variant: {
|
|
27
|
+
default: "",
|
|
28
|
+
primary: "bg-primary text-primary-foreground ring-0 shadow-lg",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
defaultVariants: {
|
|
32
|
+
variant: "default",
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Position mapping
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
const SIDE_MAP = {
|
|
39
|
+
top: "top",
|
|
40
|
+
bottom: "bottom",
|
|
41
|
+
left: "left",
|
|
42
|
+
right: "right",
|
|
43
|
+
"top-start": "top",
|
|
44
|
+
"top-end": "top",
|
|
45
|
+
"bottom-start": "bottom",
|
|
46
|
+
"bottom-end": "bottom",
|
|
47
|
+
"left-start": "left",
|
|
48
|
+
"left-end": "left",
|
|
49
|
+
"right-start": "right",
|
|
50
|
+
"right-end": "right",
|
|
51
|
+
auto: "bottom",
|
|
52
|
+
};
|
|
53
|
+
const ALIGN_MAP = {
|
|
54
|
+
top: "center",
|
|
55
|
+
bottom: "center",
|
|
56
|
+
left: "center",
|
|
57
|
+
right: "center",
|
|
58
|
+
"top-start": "start",
|
|
59
|
+
"top-end": "end",
|
|
60
|
+
"bottom-start": "start",
|
|
61
|
+
"bottom-end": "end",
|
|
62
|
+
"left-start": "start",
|
|
63
|
+
"left-end": "end",
|
|
64
|
+
"right-start": "start",
|
|
65
|
+
"right-end": "end",
|
|
66
|
+
auto: "center",
|
|
67
|
+
};
|
|
68
|
+
const Title = forwardRef(({ children, className, ...otherProps }, ref) => (jsx("div", { ref: ref, "data-slot": "popover-title", className: cn("text-sm font-semibold", className), ...otherProps, children: children })));
|
|
69
|
+
Title.displayName = "Popover.Title";
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// Component
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
const Popover = forwardRef(({ children, trigger, variant = "default", disabled = false, position = "auto", className, open: openProp, onOpenChange: onOpenChangeProp, hideAfter = -1, hideOnTargetExit = false, defaultOpen, openDelay = 200, closeDelay = 200,
|
|
74
|
+
// Radix HoverCardContent props forwarded
|
|
75
|
+
...contentProps }, ref) => {
|
|
76
|
+
// Internal state for uncontrolled mode + hideAfter / hideOnTargetExit
|
|
77
|
+
const [internalOpen, setInternalOpen] = useState(false);
|
|
78
|
+
const isControlled = openProp !== undefined;
|
|
79
|
+
const open = isControlled ? openProp : internalOpen;
|
|
80
|
+
const handleOpenChange = useCallback((next) => {
|
|
81
|
+
if (!isControlled)
|
|
82
|
+
setInternalOpen(next);
|
|
83
|
+
onOpenChangeProp?.(next);
|
|
84
|
+
}, [isControlled, onOpenChangeProp]);
|
|
85
|
+
const triggerRef = useRef(null);
|
|
86
|
+
// Auto-hide after hideAfter ms
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
if (!open || hideAfter <= 0)
|
|
89
|
+
return;
|
|
90
|
+
const timer = setTimeout(() => handleOpenChange(false), hideAfter);
|
|
91
|
+
return () => clearTimeout(timer);
|
|
92
|
+
}, [open, hideAfter, handleOpenChange]);
|
|
93
|
+
// Hide popover when trigger exits viewport
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (!hideOnTargetExit || !open || !triggerRef.current)
|
|
96
|
+
return;
|
|
97
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
98
|
+
if (!entry.isIntersecting)
|
|
99
|
+
handleOpenChange(false);
|
|
100
|
+
});
|
|
101
|
+
observer.observe(triggerRef.current);
|
|
102
|
+
return () => observer.disconnect();
|
|
103
|
+
}, [hideOnTargetExit, open, handleOpenChange]);
|
|
104
|
+
if (disabled) {
|
|
105
|
+
return jsx(Fragment, { children: trigger });
|
|
106
|
+
}
|
|
107
|
+
const side = SIDE_MAP[position] ?? "bottom";
|
|
108
|
+
const align = ALIGN_MAP[position] ?? "center";
|
|
109
|
+
// Wrap non-element trigger in a span
|
|
110
|
+
const triggerElement = React__default.isValidElement(trigger) ? (trigger) : (jsx("span", { children: trigger }));
|
|
111
|
+
return (jsxs(HoverCard, { open: open, onOpenChange: handleOpenChange, defaultOpen: defaultOpen, openDelay: openDelay, closeDelay: closeDelay, children: [jsx(HoverCardTrigger, { ref: triggerRef, asChild: true, children: triggerElement }), jsx(HoverCardContent, { ref: ref, side: side, align: align, className: cn(popoverVariants({ variant }), className), ...contentProps, children: children })] }));
|
|
112
|
+
});
|
|
113
|
+
Popover.displayName = "Popover";
|
|
114
|
+
Popover.Title = Title;
|
|
115
|
+
|
|
116
|
+
export { Popover };
|
|
117
|
+
//# sourceMappingURL=Popover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.js","sources":["../../src/components/Popover.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from \"src/primitives/HoverCard\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype PopoverPosition =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom-start\"\n | \"bottom-end\"\n | \"left-start\"\n | \"left-end\"\n | \"right-start\"\n | \"right-end\"\n | \"auto\";\n\n// ---------------------------------------------------------------------------\n// Variants\n// ---------------------------------------------------------------------------\n\nconst popoverVariants = cva(\"flex flex-col gap-2.5\", {\n variants: {\n variant: {\n default: \"\",\n primary: \"bg-primary text-primary-foreground ring-0 shadow-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\ntype PopoverVariant = NonNullable<\n VariantProps<typeof popoverVariants>[\"variant\"]\n>;\n\n/** Radix HoverCard.Content props we forward via ...otherProps. */\ntype HoverCardContentProps = React.ComponentProps<typeof HoverCardContent>;\n\nexport interface PopoverProps extends Omit<\n HoverCardContentProps,\n \"children\" | \"className\" | \"side\" | \"align\"\n> {\n /** Content rendered inside the popover. */\n children?: ReactNode;\n /** The trigger element that opens the popover on hover. */\n trigger?: ReactNode;\n /** Color variant of the popover. */\n variant?: PopoverVariant;\n /** Disable the popover. */\n disabled?: boolean;\n /** Placement of the popover relative to the trigger. */\n position?: PopoverPosition;\n /** Additional CSS class names for the popover content. */\n className?: string;\n /** Whether the popover is open (controlled). */\n open?: boolean;\n /** Callback when open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Auto-hide after N milliseconds. Use -1 to disable. */\n hideAfter?: number;\n /** Auto-hide the popover when the trigger scrolls out of the viewport. */\n hideOnTargetExit?: boolean;\n /** Radix HoverCard `defaultOpen` prop. */\n defaultOpen?: boolean;\n /** Delay in ms before the popover opens on hover. */\n openDelay?: number;\n /** Delay in ms before the popover closes after hover leaves. */\n closeDelay?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Position mapping\n// ---------------------------------------------------------------------------\n\nconst 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 auto: \"bottom\",\n};\n\nconst ALIGN_MAP: Record<string, \"start\" | \"center\" | \"end\"> = {\n top: \"center\",\n bottom: \"center\",\n left: \"center\",\n right: \"center\",\n \"top-start\": \"start\",\n \"top-end\": \"end\",\n \"bottom-start\": \"start\",\n \"bottom-end\": \"end\",\n \"left-start\": \"start\",\n \"left-end\": \"end\",\n \"right-start\": \"start\",\n \"right-end\": \"end\",\n auto: \"center\",\n};\n\n// ---------------------------------------------------------------------------\n// Subcomponents\n// ---------------------------------------------------------------------------\n\ninterface PopoverTitleProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst Title = forwardRef<HTMLDivElement, PopoverTitleProps>(\n ({ children, className, ...otherProps }, ref) => (\n <div\n ref={ref}\n data-slot=\"popover-title\"\n className={cn(\"text-sm font-semibold\", className)}\n {...otherProps}\n >\n {children}\n </div>\n )\n);\nTitle.displayName = \"Popover.Title\";\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n children,\n trigger,\n variant = \"default\",\n disabled = false,\n position = \"auto\",\n className,\n open: openProp,\n onOpenChange: onOpenChangeProp,\n hideAfter = -1,\n hideOnTargetExit = false,\n defaultOpen,\n openDelay = 200,\n closeDelay = 200,\n // Radix HoverCardContent props forwarded\n ...contentProps\n },\n ref\n ) => {\n // Internal state for uncontrolled mode + hideAfter / hideOnTargetExit\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChangeProp?.(next);\n },\n [isControlled, onOpenChangeProp]\n );\n\n const triggerRef = useRef<HTMLElement | null>(null);\n\n // Auto-hide after hideAfter ms\n useEffect(() => {\n if (!open || hideAfter <= 0) return;\n const timer = setTimeout(() => handleOpenChange(false), hideAfter);\n return () => clearTimeout(timer);\n }, [open, hideAfter, handleOpenChange]);\n\n // Hide popover when trigger exits viewport\n useEffect(() => {\n if (!hideOnTargetExit || !open || !triggerRef.current) return;\n const observer = new IntersectionObserver(([entry]) => {\n if (!entry.isIntersecting) handleOpenChange(false);\n });\n observer.observe(triggerRef.current);\n return () => observer.disconnect();\n }, [hideOnTargetExit, open, handleOpenChange]);\n\n if (disabled) {\n return <>{trigger}</>;\n }\n\n const side = SIDE_MAP[position] ?? \"bottom\";\n const align = ALIGN_MAP[position] ?? \"center\";\n\n // Wrap non-element trigger in a span\n const triggerElement = React.isValidElement(trigger) ? (\n trigger\n ) : (\n <span>{trigger}</span>\n );\n\n return (\n <HoverCard\n open={open}\n onOpenChange={handleOpenChange}\n defaultOpen={defaultOpen}\n openDelay={openDelay}\n closeDelay={closeDelay}\n >\n <HoverCardTrigger\n ref={triggerRef as React.Ref<HTMLAnchorElement>}\n asChild\n >\n {triggerElement}\n </HoverCardTrigger>\n <HoverCardContent\n ref={ref}\n side={side}\n align={align}\n className={cn(popoverVariants({ variant }), className)}\n {...contentProps}\n >\n {children}\n </HoverCardContent>\n </HoverCard>\n );\n }\n) as React.ForwardRefExoticComponent<\n PopoverProps & React.RefAttributes<HTMLDivElement>\n> & {\n Title: typeof Title;\n};\n\nPopover.displayName = \"Popover\";\nPopover.Title = Title;\n\nexport { Popover };\n"],"names":["_jsx","_Fragment","React","_jsxs"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { RadioGroup as PrimitiveRadioGroup, RadioGroupItem as PrimitiveRadioGroupItem } from "src/primitives/RadioGroup";
|
|
3
|
+
export interface RadioGroupProps extends Omit<React.ComponentProps<typeof PrimitiveRadioGroup>, "children"> {
|
|
4
|
+
/** Group label displayed above the radio items. */
|
|
5
|
+
label?: string;
|
|
6
|
+
/** Error message displayed below the group. */
|
|
7
|
+
error?: string;
|
|
8
|
+
/** Helper text displayed below the group label. Accepts string or ReactNode. */
|
|
9
|
+
helpText?: React.ReactNode;
|
|
10
|
+
/** Layout orientation. Defaults to "horizontal". */
|
|
11
|
+
orientation?: "horizontal" | "vertical";
|
|
12
|
+
/** Additional class name for the outermost wrapper. */
|
|
13
|
+
className?: string;
|
|
14
|
+
/** RadioGroup.Item children. */
|
|
15
|
+
children?: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
interface RadioGroupItemProps extends React.ComponentProps<typeof PrimitiveRadioGroupItem> {
|
|
18
|
+
/** Label displayed next to the radio. */
|
|
19
|
+
label?: string;
|
|
20
|
+
/** Helper text displayed below the item label. Accepts string or ReactNode. */
|
|
21
|
+
helpText?: React.ReactNode;
|
|
22
|
+
/** Radio value (required). */
|
|
23
|
+
value: string;
|
|
24
|
+
/** Additional class name for the item wrapper. */
|
|
25
|
+
className?: string;
|
|
26
|
+
/** Optional id override; auto-generated if omitted. */
|
|
27
|
+
id?: string;
|
|
28
|
+
}
|
|
29
|
+
declare const RadioGroup: React.ForwardRefExoticComponent<Omit<RadioGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>> & {
|
|
30
|
+
Item: React.ForwardRefExoticComponent<Omit<RadioGroupItemProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
31
|
+
};
|
|
32
|
+
export { RadioGroup };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef, useId } from 'react';
|
|
3
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
4
|
+
import { RadioGroupItem as RadioGroupItem$1, RadioGroup as RadioGroup$1 } from '../primitives/RadioGroup.js';
|
|
5
|
+
import { Label } from '../primitives/Label.js';
|
|
6
|
+
import { FieldDescription, Field, FieldLabel, FieldContent, FieldError } from '../primitives/Field.js';
|
|
7
|
+
import '../index-DNzunGHb.js';
|
|
8
|
+
import '../index-BtkPdosV.js';
|
|
9
|
+
import '../index-CiyxEyB0.js';
|
|
10
|
+
import '../index-DhnfW8wQ.js';
|
|
11
|
+
import 'react-dom';
|
|
12
|
+
import '../index-j_qxDBFl.js';
|
|
13
|
+
import '../index-Dd1i1d2M.js';
|
|
14
|
+
import '../index-zW4GjM5L.js';
|
|
15
|
+
import '../index-DOzu5J1s.js';
|
|
16
|
+
import '../index-CSUSJzOJ.js';
|
|
17
|
+
import '../index-Cor698lu.js';
|
|
18
|
+
import '../index-BA158WEj.js';
|
|
19
|
+
import '../index-BYZaLNq1.js';
|
|
20
|
+
import '../index-30QpKM0j.js';
|
|
21
|
+
import '../index-yFgkK_AM.js';
|
|
22
|
+
import '../label-B4qDF3W1.js';
|
|
23
|
+
import '../index-D7Zy7P05.js';
|
|
24
|
+
import '../separator-BbhgePmX.js';
|
|
25
|
+
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// RadioGroup.Item
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
const RadioGroupItem = forwardRef(({ label, helpText, value, className, id: idProp, ...props }, ref) => {
|
|
30
|
+
const generatedId = useId();
|
|
31
|
+
const id = idProp ?? generatedId;
|
|
32
|
+
const helpTextId = `helpText_${id}`;
|
|
33
|
+
return (jsxs("div", { className: cn("flex gap-2", helpText ? "items-start" : "items-center", className), children: [jsx(RadioGroupItem$1, { ref: ref, id: id, value: value, "aria-describedby": helpText ? helpTextId : undefined, className: helpText ? "mt-0.5" : undefined, ...props }), (label || helpText) && (jsxs("div", { className: "flex flex-col gap-0.5", children: [label && (jsx(Label, { htmlFor: id, className: "cursor-pointer font-normal", children: label })), helpText && (jsx(FieldDescription, { id: helpTextId, children: helpText }))] }))] }));
|
|
34
|
+
});
|
|
35
|
+
RadioGroupItem.displayName = "RadioGroup.Item";
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// RadioGroup (root)
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
const RadioGroupRoot = forwardRef(({ label, error, helpText, orientation = "horizontal", className, disabled, required, children, ...props }, ref) => {
|
|
40
|
+
const generatedId = useId();
|
|
41
|
+
const errorId = `error_${generatedId}`;
|
|
42
|
+
const helpTextId = `helpText_${generatedId}`;
|
|
43
|
+
const hasField = !!(label || error || helpText);
|
|
44
|
+
const radioGroup = (jsx(RadioGroup$1, { ref: ref, disabled: disabled, required: required, "aria-invalid": !!error || undefined, "aria-describedby": [error ? errorId : null, helpText ? helpTextId : null]
|
|
45
|
+
.filter(Boolean)
|
|
46
|
+
.join(" ") || undefined, orientation: orientation, className: cn("data-[orientation=vertical]:grid data-[orientation=vertical]:gap-2 data-[orientation=horizontal]:flex data-[orientation=horizontal]:flex-row data-[orientation=horizontal]:flex-wrap data-[orientation=horizontal]:items-center data-[orientation=horizontal]:gap-4", !hasField && className), ...props, children: children }));
|
|
47
|
+
if (!hasField) {
|
|
48
|
+
return radioGroup;
|
|
49
|
+
}
|
|
50
|
+
return (jsxs(Field, { "data-disabled": disabled || undefined, "data-invalid": !!error || undefined, className: className, children: [(label || helpText) && (jsxs("div", { children: [label && (jsxs(FieldLabel, { children: [label, required && (jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }))] })), helpText && (jsx(FieldDescription, { id: helpTextId, children: helpText }))] })), jsxs(FieldContent, { children: [radioGroup, !!error && jsx(FieldError, { id: errorId, children: error })] })] }));
|
|
51
|
+
});
|
|
52
|
+
RadioGroupRoot.displayName = "RadioGroup";
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Compound component
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
const RadioGroup = Object.assign(RadioGroupRoot, {
|
|
57
|
+
Item: RadioGroupItem,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
export { RadioGroup };
|
|
61
|
+
//# sourceMappingURL=RadioGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup.js","sources":["../../src/components/RadioGroup.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n RadioGroup as PrimitiveRadioGroup,\n RadioGroupItem as PrimitiveRadioGroupItem,\n} from \"src/primitives/RadioGroup\";\nimport { Label } from \"src/primitives/Label\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface RadioGroupProps extends Omit<\n React.ComponentProps<typeof PrimitiveRadioGroup>,\n \"children\"\n> {\n /** Group label displayed above the radio items. */\n label?: string;\n /** Error message displayed below the group. */\n error?: string;\n /** Helper text displayed below the group label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Layout orientation. Defaults to \"horizontal\". */\n orientation?: \"horizontal\" | \"vertical\";\n /** Additional class name for the outermost wrapper. */\n className?: string;\n /** RadioGroup.Item children. */\n children?: React.ReactNode;\n}\n\ninterface RadioGroupItemProps extends React.ComponentProps<\n typeof PrimitiveRadioGroupItem\n> {\n /** Label displayed next to the radio. */\n label?: string;\n /** Helper text displayed below the item label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Radio value (required). */\n value: string;\n /** Additional class name for the item wrapper. */\n className?: string;\n /** Optional id override; auto-generated if omitted. */\n id?: string;\n}\n\n// ---------------------------------------------------------------------------\n// RadioGroup.Item\n// ---------------------------------------------------------------------------\n\nconst RadioGroupItem = forwardRef<\n React.ComponentRef<typeof PrimitiveRadioGroupItem>,\n RadioGroupItemProps\n>(({ label, helpText, value, className, id: idProp, ...props }, ref) => {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const helpTextId = `helpText_${id}`;\n\n return (\n <div\n className={cn(\n \"flex gap-2\",\n helpText ? \"items-start\" : \"items-center\",\n className\n )}\n >\n <PrimitiveRadioGroupItem\n ref={ref}\n id={id}\n value={value}\n aria-describedby={helpText ? helpTextId : undefined}\n className={helpText ? \"mt-0.5\" : undefined}\n {...props}\n />\n {(label || helpText) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <Label htmlFor={id} className=\"cursor-pointer font-normal\">\n {label}\n </Label>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </div>\n )}\n </div>\n );\n});\n\nRadioGroupItem.displayName = \"RadioGroup.Item\";\n\n// ---------------------------------------------------------------------------\n// RadioGroup (root)\n// ---------------------------------------------------------------------------\n\nconst RadioGroupRoot = forwardRef<\n React.ComponentRef<typeof PrimitiveRadioGroup>,\n RadioGroupProps\n>(\n (\n {\n label,\n error,\n helpText,\n orientation = \"horizontal\",\n className,\n disabled,\n required,\n children,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const errorId = `error_${generatedId}`;\n const helpTextId = `helpText_${generatedId}`;\n\n const hasField = !!(label || error || helpText);\n\n const radioGroup = (\n <PrimitiveRadioGroup\n ref={ref}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n orientation={orientation}\n className={cn(\n \"data-[orientation=vertical]:grid data-[orientation=vertical]:gap-2 data-[orientation=horizontal]:flex data-[orientation=horizontal]:flex-row data-[orientation=horizontal]:flex-wrap data-[orientation=horizontal]:items-center data-[orientation=horizontal]:gap-4\",\n !hasField && className\n )}\n {...props}\n >\n {children}\n </PrimitiveRadioGroup>\n );\n\n if (!hasField) {\n return radioGroup;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || helpText) && (\n <div>\n {label && (\n <FieldLabel>\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 </div>\n )}\n <FieldContent>\n {radioGroup}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n </FieldContent>\n </Field>\n );\n }\n);\n\nRadioGroupRoot.displayName = \"RadioGroup\";\n\n// ---------------------------------------------------------------------------\n// Compound component\n// ---------------------------------------------------------------------------\n\nconst RadioGroup = Object.assign(RadioGroupRoot, {\n Item: RadioGroupItem,\n});\n\nexport { RadioGroup };\n"],"names":["_jsxs","_jsx","PrimitiveRadioGroupItem","PrimitiveRadioGroup"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SelectProps } from "./Select.types";
|
|
2
|
+
export type { SelectProps, SelectOption, SelectOptionBase, SelectOptionGroup, } from "./Select.types";
|
|
3
|
+
declare const Select: import("react").ForwardRefExoticComponent<SelectProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
4
|
+
export { Select };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { FieldLabel } from "src/primitives/Field";
|
|
3
|
+
import type { SelectContent } from "src/primitives/Select";
|
|
4
|
+
import type { OptionBase, OptionGroup, Option } from "./shared.types";
|
|
5
|
+
type SelectSize = "small" | "medium" | "large";
|
|
6
|
+
type SelectPosition = "item-aligned" | "popper";
|
|
7
|
+
export type SelectOptionBase = OptionBase;
|
|
8
|
+
export type SelectOptionGroup = OptionGroup;
|
|
9
|
+
export type SelectOption = Option;
|
|
10
|
+
export interface SelectProps {
|
|
11
|
+
/** Unique identifier for the select. Auto-generated if omitted. */
|
|
12
|
+
id?: string;
|
|
13
|
+
/** Name attribute forwarded to the hidden native select. */
|
|
14
|
+
name?: string;
|
|
15
|
+
/** Size of the trigger button. */
|
|
16
|
+
size?: SelectSize;
|
|
17
|
+
/** Label displayed above the select. */
|
|
18
|
+
label?: string;
|
|
19
|
+
/** Error message displayed below the select. */
|
|
20
|
+
error?: string;
|
|
21
|
+
/** Help text displayed below the select. */
|
|
22
|
+
helpText?: React.ReactNode;
|
|
23
|
+
/** Placeholder text when no value is selected. */
|
|
24
|
+
placeholder?: string;
|
|
25
|
+
/** Flat or grouped option list. */
|
|
26
|
+
options?: SelectOption[];
|
|
27
|
+
/** Controlled selected value. */
|
|
28
|
+
value?: string;
|
|
29
|
+
/** Default selected value (uncontrolled). */
|
|
30
|
+
defaultValue?: string;
|
|
31
|
+
/** Callback fired when value changes. */
|
|
32
|
+
onChange?: (value: string) => void;
|
|
33
|
+
/** Disable the select. */
|
|
34
|
+
isDisabled?: boolean;
|
|
35
|
+
/** Show a clear/reset button when a value is selected. */
|
|
36
|
+
isClearable?: boolean;
|
|
37
|
+
/** Mark as required. */
|
|
38
|
+
required?: boolean;
|
|
39
|
+
/** Positioning strategy for the dropdown content. */
|
|
40
|
+
position?: SelectPosition;
|
|
41
|
+
/** Callback fired when the dropdown menu opens. */
|
|
42
|
+
onMenuOpen?: () => void;
|
|
43
|
+
/** Callback fired when the dropdown menu closes. */
|
|
44
|
+
onMenuClose?: () => void;
|
|
45
|
+
/** Custom data-testid prefix for the component tree. */
|
|
46
|
+
dataTestId?: string;
|
|
47
|
+
/** Props forwarded to the FieldLabel. */
|
|
48
|
+
labelProps?: Omit<React.ComponentProps<typeof FieldLabel>, "htmlFor" | "children">;
|
|
49
|
+
/** Props forwarded to the SelectContent. */
|
|
50
|
+
contentProps?: Omit<React.ComponentProps<typeof SelectContent>, "position" | "children">;
|
|
51
|
+
/** Additional CSS class names for the outermost wrapper. */
|
|
52
|
+
className?: string;
|
|
53
|
+
/** Additional CSS class names for the trigger element. */
|
|
54
|
+
triggerClassName?: string;
|
|
55
|
+
/** Children rendered inside the SelectContent (overrides `options`). */
|
|
56
|
+
children?: React.ReactNode;
|
|
57
|
+
}
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import { FieldLabel } from "src/primitives/Field";
|
|
3
|
+
interface SelectFieldWrapperProps {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
error: string;
|
|
7
|
+
helpText: React.ReactNode;
|
|
8
|
+
errorId: string;
|
|
9
|
+
helpTextId: string;
|
|
10
|
+
isDisabled: boolean;
|
|
11
|
+
required: boolean;
|
|
12
|
+
testIdPrefix?: string;
|
|
13
|
+
labelProps?: Omit<React.ComponentProps<typeof FieldLabel>, "htmlFor" | "children">;
|
|
14
|
+
className?: string;
|
|
15
|
+
children: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare function SelectFieldWrapper({ id, label, error, helpText, errorId, helpTextId, isDisabled, required, testIdPrefix, labelProps, className, children, }: SelectFieldWrapperProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Field, FieldLabel, FieldContent, FieldError, FieldDescription } from '../primitives/Field.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import '../index-D7Zy7P05.js';
|
|
5
|
+
import '../utils-DdHUxIdC.js';
|
|
6
|
+
import '../label-B4qDF3W1.js';
|
|
7
|
+
import '../index-DhnfW8wQ.js';
|
|
8
|
+
import 'react-dom';
|
|
9
|
+
import '../index-BtkPdosV.js';
|
|
10
|
+
import '../separator-BbhgePmX.js';
|
|
11
|
+
|
|
12
|
+
function SelectFieldWrapper({ id, label, error, helpText, errorId, helpTextId, isDisabled, required, testIdPrefix, labelProps, className, children, }) {
|
|
13
|
+
const hasField = !!(label || error || helpText);
|
|
14
|
+
if (!hasField) {
|
|
15
|
+
return (jsx("div", { className: className, ...(testIdPrefix
|
|
16
|
+
? { "data-testid": `${testIdPrefix}-select-container-wrapper` }
|
|
17
|
+
: {}), children: children }));
|
|
18
|
+
}
|
|
19
|
+
return (jsxs(Field, { "data-disabled": isDisabled || undefined, "data-invalid": !!error || undefined, className: className, ...(testIdPrefix
|
|
20
|
+
? { "data-testid": `${testIdPrefix}-select-container-wrapper` }
|
|
21
|
+
: {}), children: [label && (jsxs(FieldLabel, { htmlFor: id, ...labelProps, ...(testIdPrefix
|
|
22
|
+
? { "data-testid": `${testIdPrefix}-input-label` }
|
|
23
|
+
: {}), children: [label, required && (jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }))] })), jsxs(FieldContent, { children: [children, !!error && (jsx(FieldError, { id: errorId, ...(testIdPrefix
|
|
24
|
+
? { "data-testid": `${testIdPrefix}-select-error` }
|
|
25
|
+
: {}), children: error })), helpText && (jsx(FieldDescription, { id: helpTextId, ...(testIdPrefix
|
|
26
|
+
? { "data-testid": `${testIdPrefix}-select-help-text` }
|
|
27
|
+
: {}), children: helpText }))] })] }));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { SelectFieldWrapper };
|
|
31
|
+
//# sourceMappingURL=SelectFieldWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectFieldWrapper.js","sources":["../../src/components/SelectFieldWrapper.tsx"],"sourcesContent":["import type React from \"react\";\n\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\n\ninterface SelectFieldWrapperProps {\n id: string;\n label: string;\n error: string;\n helpText: React.ReactNode;\n errorId: string;\n helpTextId: string;\n isDisabled: boolean;\n required: boolean;\n testIdPrefix?: string;\n labelProps?: Omit<\n React.ComponentProps<typeof FieldLabel>,\n \"htmlFor\" | \"children\"\n >;\n className?: string;\n children: React.ReactNode;\n}\n\nexport function SelectFieldWrapper({\n id,\n label,\n error,\n helpText,\n errorId,\n helpTextId,\n isDisabled,\n required,\n testIdPrefix,\n labelProps,\n className,\n children,\n}: SelectFieldWrapperProps) {\n const hasField = !!(label || error || helpText);\n\n if (!hasField) {\n return (\n <div\n className={className}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-container-wrapper` }\n : {})}\n >\n {children}\n </div>\n );\n }\n\n return (\n <Field\n data-disabled={isDisabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-container-wrapper` }\n : {})}\n >\n {label && (\n <FieldLabel\n htmlFor={id}\n {...labelProps}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-input-label` }\n : {})}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n <FieldContent>\n {children}\n {!!error && (\n <FieldError\n id={errorId}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-error` }\n : {})}\n >\n {error}\n </FieldError>\n )}\n {helpText && (\n <FieldDescription\n id={helpTextId}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-help-text` }\n : {})}\n >\n {helpText}\n </FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n}\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;;AA4BM,SAAU,kBAAkB,CAAC,EACjC,EAAE,EACF,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,GACgB,EAAA;IACxB,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,IAAI,KAAK,IAAI,QAAQ,CAAC;IAE/C,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,SAAS,EAAA,IACf;AACH,kBAAE,EAAE,aAAa,EAAE,CAAA,EAAG,YAAY,2BAA2B;AAC7D,kBAAE,EAAE,CAAC,YAEN,QAAQ,EAAA,CACL;IAEV;AAEA,IAAA,QACEC,IAAA,CAAC,KAAK,qBACW,UAAU,IAAI,SAAS,EAAA,cAAA,EACxB,CAAC,CAAC,KAAK,IAAI,SAAS,EAClC,SAAS,EAAE,SAAS,EAAA,IACf;AACH,cAAE,EAAE,aAAa,EAAE,CAAA,EAAG,YAAY,2BAA2B;AAC7D,cAAE,EAAE,CAAC,EAAA,QAAA,EAAA,CAEN,KAAK,KACJA,IAAA,CAAC,UAAU,EAAA,EACT,OAAO,EAAE,EAAE,KACP,UAAU,EAAA,IACT;AACH,sBAAE,EAAE,aAAa,EAAE,CAAA,EAAG,YAAY,cAAc;AAChD,sBAAE,EAAE,CAAC,EAAA,QAAA,EAAA,CAEN,KAAK,EACL,QAAQ,KACPD,GAAA,CAAA,MAAA,EAAA,EAAA,aAAA,EAAkB,MAAM,EAAC,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,GAAA,EAAA,CAE9C,CACR,CAAA,EAAA,CACU,CACd,EACDC,IAAA,CAAC,YAAY,EAAA,EAAA,QAAA,EAAA,CACV,QAAQ,EACR,CAAC,CAAC,KAAK,KACND,GAAA,CAAC,UAAU,EAAA,EACT,EAAE,EAAE,OAAO,EAAA,IACN;AACH,8BAAE,EAAE,aAAa,EAAE,CAAA,EAAG,YAAY,eAAe;AACjD,8BAAE,EAAE,CAAC,YAEN,KAAK,EAAA,CACK,CACd,EACA,QAAQ,KACPA,GAAA,CAAC,gBAAgB,EAAA,EACf,EAAE,EAAE,UAAU,EAAA,IACT;AACH,8BAAE,EAAE,aAAa,EAAE,CAAA,EAAG,YAAY,mBAAmB;8BACnD,EAAE,CAAC,EAAA,QAAA,EAEN,QAAQ,GACQ,CACpB,CAAA,EAAA,CACY,CAAA,EAAA,CACT;AAEZ;;;;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { SelectGroup, SelectLabel, SelectItem } from '../primitives/Select.js';
|
|
3
|
+
import { isOptionGroup } from './shared.js';
|
|
4
|
+
import '../utils-DdHUxIdC.js';
|
|
5
|
+
import '../chevron-down-BNi0ntys.js';
|
|
6
|
+
import '../createLucideIcon-C8ycilSN.js';
|
|
7
|
+
import 'react';
|
|
8
|
+
import '../chevron-up-Bf2G3AAU.js';
|
|
9
|
+
import '../check-Cpkv29p1.js';
|
|
10
|
+
import 'react-dom';
|
|
11
|
+
import '../index-BfAAoDv6.js';
|
|
12
|
+
import '../index-DNzunGHb.js';
|
|
13
|
+
import '../index-Dd1i1d2M.js';
|
|
14
|
+
import '../index-CiyxEyB0.js';
|
|
15
|
+
import '../index-BtkPdosV.js';
|
|
16
|
+
import '../index-BA158WEj.js';
|
|
17
|
+
import '../index-BNPynZWM.js';
|
|
18
|
+
import '../index-DhnfW8wQ.js';
|
|
19
|
+
import '../index-CSUSJzOJ.js';
|
|
20
|
+
import '../index-B4_fVWDx.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-Cor698lu.js';
|
|
28
|
+
import '../index-30QpKM0j.js';
|
|
29
|
+
import '../index-CSggBaQF.js';
|
|
30
|
+
|
|
31
|
+
function renderOptions(options, testId) {
|
|
32
|
+
return options.map(opt => {
|
|
33
|
+
if (isOptionGroup(opt)) {
|
|
34
|
+
return (jsxs(SelectGroup, { children: [jsx(SelectLabel, { children: opt.label }), opt.options.map(item => (jsx(SelectItem, { value: item.value, disabled: item.disabled, ...(testId ? { "data-testid": `${testId}-select-option` } : {}), children: item.label }, item.value)))] }, opt.label));
|
|
35
|
+
}
|
|
36
|
+
return (jsx(SelectItem, { value: opt.value, disabled: opt.disabled, ...(testId ? { "data-testid": `${testId}-select-option` } : {}), children: opt.label }, opt.value));
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export { renderOptions };
|
|
41
|
+
//# sourceMappingURL=SelectOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectOptions.js","sources":["../../src/components/SelectOptions.tsx"],"sourcesContent":["import { SelectGroup, SelectItem, SelectLabel } from \"src/primitives/Select\";\nimport { isOptionGroup } from \"./shared.types\";\nimport type { SelectOption } from \"./Select.types\";\n\nexport function renderOptions(options: SelectOption[], testId?: string) {\n return options.map(opt => {\n if (isOptionGroup(opt)) {\n return (\n <SelectGroup key={opt.label}>\n <SelectLabel>{opt.label}</SelectLabel>\n {opt.options.map(item => (\n <SelectItem\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n {...(testId ? { \"data-testid\": `${testId}-select-option` } : {})}\n >\n {item.label}\n </SelectItem>\n ))}\n </SelectGroup>\n );\n }\n\n return (\n <SelectItem\n key={opt.value}\n value={opt.value}\n disabled={opt.disabled}\n {...(testId ? { \"data-testid\": `${testId}-select-option` } : {})}\n >\n {opt.label}\n </SelectItem>\n );\n });\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIM,SAAU,aAAa,CAAC,OAAuB,EAAE,MAAe,EAAA;AACpE,IAAA,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,IAAG;AACvB,QAAA,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,QACEA,IAAA,CAAC,WAAW,EAAA,EAAA,QAAA,EAAA,CACVC,IAAC,WAAW,EAAA,EAAA,QAAA,EAAE,GAAG,CAAC,KAAK,EAAA,CAAe,EACrC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KACnBA,IAAC,UAAU,EAAA,EAET,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAA,IAClB,MAAM,GAAG,EAAE,aAAa,EAAE,CAAA,EAAG,MAAM,CAAA,cAAA,CAAgB,EAAE,GAAG,EAAE,CAAC,EAAA,QAAA,EAE/D,IAAI,CAAC,KAAK,EAAA,EALN,IAAI,CAAC,KAAK,CAMJ,CACd,CAAC,KAXc,GAAG,CAAC,KAAK,CAYb;QAElB;AAEA,QAAA,QACEA,GAAA,CAAC,UAAU,IAET,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ,MACjB,MAAM,GAAG,EAAE,aAAa,EAAE,GAAG,MAAM,CAAA,cAAA,CAAgB,EAAE,GAAG,EAAE,CAAC,YAE/D,GAAG,CAAC,KAAK,EAAA,EALL,GAAG,CAAC,KAAK,CAMH;AAEjB,IAAA,CAAC,CAAC;AACJ;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface SelectTriggerContentProps {
|
|
3
|
+
id: string;
|
|
4
|
+
sizeConfig: {
|
|
5
|
+
trigger: string;
|
|
6
|
+
size: "sm" | "default";
|
|
7
|
+
clearBtn: string;
|
|
8
|
+
};
|
|
9
|
+
error: string;
|
|
10
|
+
ariaDescribedBy?: string;
|
|
11
|
+
triggerClassName?: string;
|
|
12
|
+
testIdPrefix?: string;
|
|
13
|
+
placeholder: string;
|
|
14
|
+
showClearButton: boolean;
|
|
15
|
+
handleClear: (e: React.MouseEvent) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare const SelectTriggerContent: React.ForwardRefExoticComponent<SelectTriggerContentProps & React.RefAttributes<HTMLButtonElement>>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
4
|
+
import { SelectTrigger, SelectValue } from '../primitives/Select.js';
|
|
5
|
+
import { X } from '../x-_o2T3n6D.js';
|
|
6
|
+
import '../chevron-down-BNi0ntys.js';
|
|
7
|
+
import '../createLucideIcon-C8ycilSN.js';
|
|
8
|
+
import '../chevron-up-Bf2G3AAU.js';
|
|
9
|
+
import '../check-Cpkv29p1.js';
|
|
10
|
+
import 'react-dom';
|
|
11
|
+
import '../index-BfAAoDv6.js';
|
|
12
|
+
import '../index-DNzunGHb.js';
|
|
13
|
+
import '../index-Dd1i1d2M.js';
|
|
14
|
+
import '../index-CiyxEyB0.js';
|
|
15
|
+
import '../index-BtkPdosV.js';
|
|
16
|
+
import '../index-BA158WEj.js';
|
|
17
|
+
import '../index-BNPynZWM.js';
|
|
18
|
+
import '../index-DhnfW8wQ.js';
|
|
19
|
+
import '../index-CSUSJzOJ.js';
|
|
20
|
+
import '../index-B4_fVWDx.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-Cor698lu.js';
|
|
28
|
+
import '../index-30QpKM0j.js';
|
|
29
|
+
import '../index-CSggBaQF.js';
|
|
30
|
+
|
|
31
|
+
const SelectTriggerContent = forwardRef(({ id, sizeConfig, error, ariaDescribedBy, triggerClassName, testIdPrefix, placeholder, showClearButton, handleClear, }, ref) => (jsxs(SelectTrigger, { ref: ref, id: id, size: sizeConfig.size, "aria-invalid": !!error || undefined, "aria-describedby": ariaDescribedBy, className: cn("w-full", sizeConfig.trigger, triggerClassName), ...(testIdPrefix
|
|
32
|
+
? { "data-testid": `${testIdPrefix}-select-container` }
|
|
33
|
+
: {}), children: [jsx(SelectValue, { placeholder: placeholder, ...(testIdPrefix
|
|
34
|
+
? { "data-testid": `${testIdPrefix}-select-value` }
|
|
35
|
+
: {}) }), showClearButton && (jsx("button", { type: "button", "aria-label": "Clear selection", tabIndex: -1, className: cn("ms-auto shrink-0 rounded-sm opacity-50", "hover:opacity-100 focus-visible:outline-none"), onClick: handleClear, onPointerDown: e => e.preventDefault(), ...(testIdPrefix
|
|
36
|
+
? { "data-testid": `${testIdPrefix}-clear-indicator` }
|
|
37
|
+
: {}), children: jsx(X, { "aria-hidden": "true", className: sizeConfig.clearBtn }) }))] })));
|
|
38
|
+
SelectTriggerContent.displayName = "SelectTriggerContent";
|
|
39
|
+
|
|
40
|
+
export { SelectTriggerContent };
|
|
41
|
+
//# sourceMappingURL=SelectTriggerContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectTriggerContent.js","sources":["../../src/components/SelectTriggerContent.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { X } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { SelectTrigger, SelectValue } from \"src/primitives/Select\";\n\ninterface SelectTriggerContentProps {\n id: string;\n sizeConfig: { trigger: string; size: \"sm\" | \"default\"; clearBtn: string };\n error: string;\n ariaDescribedBy?: string;\n triggerClassName?: string;\n testIdPrefix?: string;\n placeholder: string;\n showClearButton: boolean;\n handleClear: (e: React.MouseEvent) => void;\n}\n\nexport const SelectTriggerContent = forwardRef<\n HTMLButtonElement,\n SelectTriggerContentProps\n>(\n (\n {\n id,\n sizeConfig,\n error,\n ariaDescribedBy,\n triggerClassName,\n testIdPrefix,\n placeholder,\n showClearButton,\n handleClear,\n },\n ref\n ) => (\n <SelectTrigger\n ref={ref}\n id={id}\n size={sizeConfig.size}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\"w-full\", sizeConfig.trigger, triggerClassName)}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-container` }\n : {})}\n >\n <SelectValue\n placeholder={placeholder}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-value` }\n : {})}\n />\n {showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear selection\"\n tabIndex={-1}\n className={cn(\n \"ms-auto shrink-0 rounded-sm opacity-50\",\n \"hover:opacity-100 focus-visible:outline-none\"\n )}\n onClick={handleClear}\n onPointerDown={e => e.preventDefault()}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-clear-indicator` }\n : {})}\n >\n <X aria-hidden=\"true\" className={sizeConfig.clearBtn} />\n </button>\n )}\n </SelectTrigger>\n )\n);\n\nSelectTriggerContent.displayName = \"SelectTriggerContent\";\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,MAAM,oBAAoB,GAAG,UAAU,CAI5C,CACE,EACE,EAAE,EACF,UAAU,EACV,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,GACZ,EACD,GAAG,MAEHA,KAAC,aAAa,EAAA,EACZ,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,UAAU,CAAC,IAAI,EAAA,cAAA,EACP,CAAC,CAAC,KAAK,IAAI,SAAS,EAAA,kBAAA,EAChB,eAAe,EACjC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAA,IACxD;AACH,UAAE,EAAE,aAAa,EAAE,CAAA,EAAG,YAAY,mBAAmB;AACrD,UAAE,EAAE,CAAC,EAAA,QAAA,EAAA,CAEPC,GAAA,CAAC,WAAW,EAAA,EACV,WAAW,EAAE,WAAW,EAAA,IACnB;AACH,kBAAE,EAAE,aAAa,EAAE,CAAA,EAAG,YAAY,eAAe;kBAC/C,EAAE,CAAC,EAAA,CACP,EACD,eAAe,KACdA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EAAA,YAAA,EACF,iBAAiB,EAC5B,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAE,EAAE,CACX,wCAAwC,EACxC,8CAA8C,CAC/C,EACD,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAA,IACjC;AACH,kBAAE,EAAE,aAAa,EAAE,CAAA,EAAG,YAAY,kBAAkB;kBAClD,EAAE,CAAC,EAAA,QAAA,EAEPA,IAAC,CAAC,EAAA,EAAA,aAAA,EAAa,MAAM,EAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAA,CAAI,EAAA,CACjD,CACV,CAAA,EAAA,CACa,CACjB;AAGH,oBAAoB,CAAC,WAAW,GAAG,sBAAsB;;;;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React, { type ReactNode, type RefObject } from "react";
|
|
2
|
+
import { SheetContent as PrimitiveSheetContent } from "src/primitives/Sheet";
|
|
3
|
+
type SheetSize = "small" | "large" | "extraLarge";
|
|
4
|
+
/** Radix Sheet.Content props we forward via ...otherProps. */
|
|
5
|
+
type SheetContentProps = React.ComponentProps<typeof PrimitiveSheetContent>;
|
|
6
|
+
export interface SheetProps extends Omit<SheetContentProps, "children" | "className" | "side" | "showCloseButton" | "onEscapeKeyDown" | "onInteractOutside"> {
|
|
7
|
+
/** Size of the sheet. */
|
|
8
|
+
size?: SheetSize;
|
|
9
|
+
/** Whether the sheet is open. */
|
|
10
|
+
isOpen?: boolean;
|
|
11
|
+
/** Callback invoked when the sheet is closed. */
|
|
12
|
+
onClose?: () => void;
|
|
13
|
+
/** Content rendered inside the sheet. */
|
|
14
|
+
children?: ReactNode;
|
|
15
|
+
/** Additional CSS class names applied to the sheet 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 sheet. */
|
|
24
|
+
closeOnOutsideClick?: boolean;
|
|
25
|
+
/** Ref of the element to receive focus when the sheet opens. */
|
|
26
|
+
initialFocusRef?: RefObject<HTMLElement | null>;
|
|
27
|
+
/** Ref of the element to receive focus when the sheet closes. */
|
|
28
|
+
finalFocusRef?: RefObject<HTMLElement | null>;
|
|
29
|
+
/** Which side the sheet slides in from. */
|
|
30
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
31
|
+
/** Radix Dialog `modal` prop — controls modal vs non-modal behaviour. */
|
|
32
|
+
modal?: boolean;
|
|
33
|
+
/** Radix Dialog `defaultOpen` prop. */
|
|
34
|
+
defaultOpen?: boolean;
|
|
35
|
+
}
|
|
36
|
+
interface SheetSubcomponentProps extends React.ComponentProps<"div"> {
|
|
37
|
+
children?: ReactNode;
|
|
38
|
+
className?: string;
|
|
39
|
+
}
|
|
40
|
+
declare const SheetHeader: React.ForwardRefExoticComponent<Omit<SheetSubcomponentProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
41
|
+
declare const SheetBody: React.ForwardRefExoticComponent<Omit<SheetSubcomponentProps & {
|
|
42
|
+
hasFooter?: boolean;
|
|
43
|
+
}, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
44
|
+
declare const SheetFooter: React.ForwardRefExoticComponent<Omit<SheetSubcomponentProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
45
|
+
declare const SheetTitle: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-dialog").DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
46
|
+
declare const SheetDescription: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-dialog").DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
47
|
+
declare const Sheet: React.ForwardRefExoticComponent<SheetProps & React.RefAttributes<HTMLDivElement>> & {
|
|
48
|
+
Header: typeof SheetHeader;
|
|
49
|
+
Body: typeof SheetBody;
|
|
50
|
+
Footer: typeof SheetFooter;
|
|
51
|
+
Title: typeof SheetTitle;
|
|
52
|
+
Description: typeof SheetDescription;
|
|
53
|
+
};
|
|
54
|
+
export { Sheet };
|