@baseplate-dev/ui-components 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/LICENSE +390 -0
  2. package/dist/components/Alert/Alert.d.ts +15 -0
  3. package/dist/components/Alert/Alert.d.ts.map +1 -0
  4. package/dist/components/Alert/Alert.js +32 -0
  5. package/dist/components/Alert/Alert.js.map +1 -0
  6. package/dist/components/Badge/Badge.d.ts +21 -0
  7. package/dist/components/Badge/Badge.d.ts.map +1 -0
  8. package/dist/components/Badge/Badge.js +33 -0
  9. package/dist/components/Badge/Badge.js.map +1 -0
  10. package/dist/components/Breadcrumb/Breadcrumb.d.ts +12 -0
  11. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  12. package/dist/components/Breadcrumb/Breadcrumb.js +28 -0
  13. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
  14. package/dist/components/Button/Button.d.ts +23 -0
  15. package/dist/components/Button/Button.d.ts.map +1 -0
  16. package/dist/components/Button/Button.js +22 -0
  17. package/dist/components/Button/Button.js.map +1 -0
  18. package/dist/components/ButtonGroup/ButtonGroup.d.ts +7 -0
  19. package/dist/components/ButtonGroup/ButtonGroup.d.ts.map +1 -0
  20. package/dist/components/ButtonGroup/ButtonGroup.js +10 -0
  21. package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -0
  22. package/dist/components/Card/Card.d.ts +15 -0
  23. package/dist/components/Card/Card.d.ts.map +1 -0
  24. package/dist/components/Card/Card.js +30 -0
  25. package/dist/components/Card/Card.js.map +1 -0
  26. package/dist/components/Checkbox/Checkbox.d.ts +10 -0
  27. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  28. package/dist/components/Checkbox/Checkbox.js +15 -0
  29. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  30. package/dist/components/CheckboxField/CheckboxField.d.ts +19 -0
  31. package/dist/components/CheckboxField/CheckboxField.d.ts.map +1 -0
  32. package/dist/components/CheckboxField/CheckboxField.js +20 -0
  33. package/dist/components/CheckboxField/CheckboxField.js.map +1 -0
  34. package/dist/components/ColorPicker/ColorPicker.d.ts +16 -0
  35. package/dist/components/ColorPicker/ColorPicker.d.ts.map +1 -0
  36. package/dist/components/ColorPicker/ColorPicker.js +19 -0
  37. package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
  38. package/dist/components/ColorPickerField/ColorPickerField.d.ts +36 -0
  39. package/dist/components/ColorPickerField/ColorPickerField.d.ts.map +1 -0
  40. package/dist/components/ColorPickerField/ColorPickerField.js +43 -0
  41. package/dist/components/ColorPickerField/ColorPickerField.js.map +1 -0
  42. package/dist/components/Combobox/Combobox.d.ts +71 -0
  43. package/dist/components/Combobox/Combobox.d.ts.map +1 -0
  44. package/dist/components/Combobox/Combobox.js +173 -0
  45. package/dist/components/Combobox/Combobox.js.map +1 -0
  46. package/dist/components/Combobox/Combobox.test.d.ts +2 -0
  47. package/dist/components/Combobox/Combobox.test.d.ts.map +1 -0
  48. package/dist/components/Combobox/Combobox.test.js +148 -0
  49. package/dist/components/Combobox/Combobox.test.js.map +1 -0
  50. package/dist/components/ComboboxField/ComboboxField.d.ts +20 -0
  51. package/dist/components/ComboboxField/ComboboxField.d.ts.map +1 -0
  52. package/dist/components/ComboboxField/ComboboxField.js +39 -0
  53. package/dist/components/ComboboxField/ComboboxField.js.map +1 -0
  54. package/dist/components/Command/Command.d.ts +22 -0
  55. package/dist/components/Command/Command.d.ts.map +1 -0
  56. package/dist/components/Command/Command.js +40 -0
  57. package/dist/components/Command/Command.js.map +1 -0
  58. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +8 -0
  59. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -0
  60. package/dist/components/ConfirmDialog/ConfirmDialog.js +48 -0
  61. package/dist/components/ConfirmDialog/ConfirmDialog.js.map +1 -0
  62. package/dist/components/Dialog/Dialog.d.ts +22 -0
  63. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  64. package/dist/components/Dialog/Dialog.js +42 -0
  65. package/dist/components/Dialog/Dialog.js.map +1 -0
  66. package/dist/components/Dropdown/Dropdown.d.ts +31 -0
  67. package/dist/components/Dropdown/Dropdown.d.ts.map +1 -0
  68. package/dist/components/Dropdown/Dropdown.js +57 -0
  69. package/dist/components/Dropdown/Dropdown.js.map +1 -0
  70. package/dist/components/EmptyDisplay/EmptyDisplay.d.ts +30 -0
  71. package/dist/components/EmptyDisplay/EmptyDisplay.d.ts.map +1 -0
  72. package/dist/components/EmptyDisplay/EmptyDisplay.js +14 -0
  73. package/dist/components/EmptyDisplay/EmptyDisplay.js.map +1 -0
  74. package/dist/components/ErrorDisplay/ErrorDisplay.d.ts +25 -0
  75. package/dist/components/ErrorDisplay/ErrorDisplay.d.ts.map +1 -0
  76. package/dist/components/ErrorDisplay/ErrorDisplay.js +16 -0
  77. package/dist/components/ErrorDisplay/ErrorDisplay.js.map +1 -0
  78. package/dist/components/ErrorableLoader/ErrorableLoader.d.ts +25 -0
  79. package/dist/components/ErrorableLoader/ErrorableLoader.d.ts.map +1 -0
  80. package/dist/components/ErrorableLoader/ErrorableLoader.js +14 -0
  81. package/dist/components/ErrorableLoader/ErrorableLoader.js.map +1 -0
  82. package/dist/components/FormActionBar/FormActionBar.d.ts +32 -0
  83. package/dist/components/FormActionBar/FormActionBar.d.ts.map +1 -0
  84. package/dist/components/FormActionBar/FormActionBar.js +28 -0
  85. package/dist/components/FormActionBar/FormActionBar.js.map +1 -0
  86. package/dist/components/FormItem/FormItem.d.ts +23 -0
  87. package/dist/components/FormItem/FormItem.d.ts.map +1 -0
  88. package/dist/components/FormItem/FormItem.js +57 -0
  89. package/dist/components/FormItem/FormItem.js.map +1 -0
  90. package/dist/components/Input/Input.d.ts +11 -0
  91. package/dist/components/Input/Input.d.ts.map +1 -0
  92. package/dist/components/Input/Input.js +15 -0
  93. package/dist/components/Input/Input.js.map +1 -0
  94. package/dist/components/InputField/InputField.d.ts +17 -0
  95. package/dist/components/InputField/InputField.d.ts.map +1 -0
  96. package/dist/components/InputField/InputField.js +18 -0
  97. package/dist/components/InputField/InputField.js.map +1 -0
  98. package/dist/components/Label/Label.d.ts +10 -0
  99. package/dist/components/Label/Label.d.ts.map +1 -0
  100. package/dist/components/Label/Label.js +14 -0
  101. package/dist/components/Label/Label.js.map +1 -0
  102. package/dist/components/Loader/Loader.d.ts +10 -0
  103. package/dist/components/Loader/Loader.d.ts.map +1 -0
  104. package/dist/components/Loader/Loader.js +10 -0
  105. package/dist/components/Loader/Loader.js.map +1 -0
  106. package/dist/components/MultiCombobox/MultiCombobox.d.ts +47 -0
  107. package/dist/components/MultiCombobox/MultiCombobox.d.ts.map +1 -0
  108. package/dist/components/MultiCombobox/MultiCombobox.js +114 -0
  109. package/dist/components/MultiCombobox/MultiCombobox.js.map +1 -0
  110. package/dist/components/MultiComboboxField/MultiComboboxField.d.ts +19 -0
  111. package/dist/components/MultiComboboxField/MultiComboboxField.d.ts.map +1 -0
  112. package/dist/components/MultiComboboxField/MultiComboboxField.js +38 -0
  113. package/dist/components/MultiComboboxField/MultiComboboxField.js.map +1 -0
  114. package/dist/components/MultiSwitchField/MultiSwitchField.d.ts +41 -0
  115. package/dist/components/MultiSwitchField/MultiSwitchField.d.ts.map +1 -0
  116. package/dist/components/MultiSwitchField/MultiSwitchField.js +44 -0
  117. package/dist/components/MultiSwitchField/MultiSwitchField.js.map +1 -0
  118. package/dist/components/NavigationMenu/NavigationMenu.d.ts +27 -0
  119. package/dist/components/NavigationMenu/NavigationMenu.d.ts.map +1 -0
  120. package/dist/components/NavigationMenu/NavigationMenu.js +50 -0
  121. package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -0
  122. package/dist/components/NavigationTabs/NavigationTabs.d.ts +9 -0
  123. package/dist/components/NavigationTabs/NavigationTabs.d.ts.map +1 -0
  124. package/dist/components/NavigationTabs/NavigationTabs.js +14 -0
  125. package/dist/components/NavigationTabs/NavigationTabs.js.map +1 -0
  126. package/dist/components/Popover/Popover.d.ts +17 -0
  127. package/dist/components/Popover/Popover.d.ts.map +1 -0
  128. package/dist/components/Popover/Popover.js +23 -0
  129. package/dist/components/Popover/Popover.js.map +1 -0
  130. package/dist/components/RecordView/RecordView.d.ts +24 -0
  131. package/dist/components/RecordView/RecordView.d.ts.map +1 -0
  132. package/dist/components/RecordView/RecordView.js +16 -0
  133. package/dist/components/RecordView/RecordView.js.map +1 -0
  134. package/dist/components/ScrollArea/ScrollArea.d.ts +11 -0
  135. package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -0
  136. package/dist/components/ScrollArea/ScrollArea.js +19 -0
  137. package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
  138. package/dist/components/SectionList/SectionList.d.ts +36 -0
  139. package/dist/components/SectionList/SectionList.d.ts.map +1 -0
  140. package/dist/components/SectionList/SectionList.js +25 -0
  141. package/dist/components/SectionList/SectionList.js.map +1 -0
  142. package/dist/components/Select/Select.d.ts +26 -0
  143. package/dist/components/Select/Select.d.ts.map +1 -0
  144. package/dist/components/Select/Select.js +51 -0
  145. package/dist/components/Select/Select.js.map +1 -0
  146. package/dist/components/SelectField/SelectField.d.ts +13 -0
  147. package/dist/components/SelectField/SelectField.d.ts.map +1 -0
  148. package/dist/components/SelectField/SelectField.js +30 -0
  149. package/dist/components/SelectField/SelectField.js.map +1 -0
  150. package/dist/components/Separator/Separator.d.ts +10 -0
  151. package/dist/components/Separator/Separator.d.ts.map +1 -0
  152. package/dist/components/Separator/Separator.js +14 -0
  153. package/dist/components/Separator/Separator.js.map +1 -0
  154. package/dist/components/Sheet/Sheet.d.ts +20 -0
  155. package/dist/components/Sheet/Sheet.d.ts.map +1 -0
  156. package/dist/components/Sheet/Sheet.js +46 -0
  157. package/dist/components/Sheet/Sheet.js.map +1 -0
  158. package/dist/components/SidebarLayout/SidebarLayout.d.ts +23 -0
  159. package/dist/components/SidebarLayout/SidebarLayout.d.ts.map +1 -0
  160. package/dist/components/SidebarLayout/SidebarLayout.js +22 -0
  161. package/dist/components/SidebarLayout/SidebarLayout.js.map +1 -0
  162. package/dist/components/Switch/Switch.d.ts +10 -0
  163. package/dist/components/Switch/Switch.d.ts.map +1 -0
  164. package/dist/components/Switch/Switch.js +13 -0
  165. package/dist/components/Switch/Switch.js.map +1 -0
  166. package/dist/components/SwitchField/SwitchField.d.ts +16 -0
  167. package/dist/components/SwitchField/SwitchField.d.ts.map +1 -0
  168. package/dist/components/SwitchField/SwitchField.js +15 -0
  169. package/dist/components/SwitchField/SwitchField.js.map +1 -0
  170. package/dist/components/Table/Table.d.ts +16 -0
  171. package/dist/components/Table/Table.d.ts.map +1 -0
  172. package/dist/components/Table/Table.js +33 -0
  173. package/dist/components/Table/Table.js.map +1 -0
  174. package/dist/components/Tabs/Tabs.d.ts +13 -0
  175. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  176. package/dist/components/Tabs/Tabs.js +23 -0
  177. package/dist/components/Tabs/Tabs.js.map +1 -0
  178. package/dist/components/Textarea/Textarea.d.ts +10 -0
  179. package/dist/components/Textarea/Textarea.d.ts.map +1 -0
  180. package/dist/components/Textarea/Textarea.js +12 -0
  181. package/dist/components/Textarea/Textarea.js.map +1 -0
  182. package/dist/components/TextareaField/TextareaField.d.ts +17 -0
  183. package/dist/components/TextareaField/TextareaField.d.ts.map +1 -0
  184. package/dist/components/TextareaField/TextareaField.js +18 -0
  185. package/dist/components/TextareaField/TextareaField.js.map +1 -0
  186. package/dist/components/Toaster/Toaster.d.ts +11 -0
  187. package/dist/components/Toaster/Toaster.d.ts.map +1 -0
  188. package/dist/components/Toaster/Toaster.js +29 -0
  189. package/dist/components/Toaster/Toaster.js.map +1 -0
  190. package/dist/components/Tooltip/Tooltip.d.ts +8 -0
  191. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  192. package/dist/components/Tooltip/Tooltip.js +18 -0
  193. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  194. package/dist/components/index.d.ts +48 -0
  195. package/dist/components/index.d.ts.map +1 -0
  196. package/dist/components/index.js +48 -0
  197. package/dist/components/index.js.map +1 -0
  198. package/dist/constants/strings.d.ts +14 -0
  199. package/dist/constants/strings.d.ts.map +1 -0
  200. package/dist/constants/strings.js +13 -0
  201. package/dist/constants/strings.js.map +1 -0
  202. package/dist/contexts/component-strings.d.ts +16 -0
  203. package/dist/contexts/component-strings.d.ts.map +1 -0
  204. package/dist/contexts/component-strings.js +9 -0
  205. package/dist/contexts/component-strings.js.map +1 -0
  206. package/dist/hooks/index.d.ts +5 -0
  207. package/dist/hooks/index.d.ts.map +1 -0
  208. package/dist/hooks/index.js +5 -0
  209. package/dist/hooks/index.js.map +1 -0
  210. package/dist/hooks/useConfirmDialog.d.ts +22 -0
  211. package/dist/hooks/useConfirmDialog.d.ts.map +1 -0
  212. package/dist/hooks/useConfirmDialog.js +20 -0
  213. package/dist/hooks/useConfirmDialog.js.map +1 -0
  214. package/dist/hooks/useControlledState.d.ts +6 -0
  215. package/dist/hooks/useControlledState.d.ts.map +1 -0
  216. package/dist/hooks/useControlledState.js +27 -0
  217. package/dist/hooks/useControlledState.js.map +1 -0
  218. package/dist/hooks/useControllerMerged.d.ts +22 -0
  219. package/dist/hooks/useControllerMerged.d.ts.map +1 -0
  220. package/dist/hooks/useControllerMerged.js +32 -0
  221. package/dist/hooks/useControllerMerged.js.map +1 -0
  222. package/dist/hooks/useEventCallback.d.ts +3 -0
  223. package/dist/hooks/useEventCallback.d.ts.map +1 -0
  224. package/dist/hooks/useEventCallback.js +15 -0
  225. package/dist/hooks/useEventCallback.js.map +1 -0
  226. package/dist/index.d.ts +7 -0
  227. package/dist/index.js +6 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/stories/button-icons.d.ts +15 -0
  230. package/dist/stories/button-icons.d.ts.map +1 -0
  231. package/dist/stories/button-icons.js +17 -0
  232. package/dist/stories/button-icons.js.map +1 -0
  233. package/dist/styles/button.d.ts +6 -0
  234. package/dist/styles/button.d.ts.map +1 -0
  235. package/dist/styles/button.js +33 -0
  236. package/dist/styles/button.js.map +1 -0
  237. package/dist/styles/index.d.ts +4 -0
  238. package/dist/styles/index.d.ts.map +1 -0
  239. package/dist/styles/index.js +4 -0
  240. package/dist/styles/index.js.map +1 -0
  241. package/dist/styles/input.d.ts +6 -0
  242. package/dist/styles/input.d.ts.map +1 -0
  243. package/dist/styles/input.js +24 -0
  244. package/dist/styles/input.js.map +1 -0
  245. package/dist/styles/select.d.ts +9 -0
  246. package/dist/styles/select.d.ts.map +1 -0
  247. package/dist/styles/select.js +22 -0
  248. package/dist/styles/select.js.map +1 -0
  249. package/dist/tests/render.test-helper.d.ts +4 -0
  250. package/dist/tests/render.test-helper.d.ts.map +1 -0
  251. package/dist/tests/render.test-helper.js +7 -0
  252. package/dist/tests/render.test-helper.js.map +1 -0
  253. package/dist/tests/setup.d.ts +2 -0
  254. package/dist/tests/setup.d.ts.map +1 -0
  255. package/dist/tests/setup.js +27 -0
  256. package/dist/tests/setup.js.map +1 -0
  257. package/dist/types/form.d.ts +40 -0
  258. package/dist/types/form.d.ts.map +1 -0
  259. package/dist/types/form.js +2 -0
  260. package/dist/types/form.js.map +1 -0
  261. package/dist/types/react.d.ts +3 -0
  262. package/dist/types/react.d.ts.map +1 -0
  263. package/dist/types/react.js +2 -0
  264. package/dist/types/react.js.map +1 -0
  265. package/dist/utils/cn.d.ts +3 -0
  266. package/dist/utils/cn.d.ts.map +1 -0
  267. package/dist/utils/cn.js +5 -0
  268. package/dist/utils/cn.js.map +1 -0
  269. package/dist/utils/generic-forward-ref.d.ts +8 -0
  270. package/dist/utils/generic-forward-ref.d.ts.map +1 -0
  271. package/dist/utils/generic-forward-ref.js +15 -0
  272. package/dist/utils/generic-forward-ref.js.map +1 -0
  273. package/dist/utils/index.d.ts +4 -0
  274. package/dist/utils/index.d.ts.map +1 -0
  275. package/dist/utils/index.js +4 -0
  276. package/dist/utils/index.js.map +1 -0
  277. package/dist/utils/refs.d.ts +10 -0
  278. package/dist/utils/refs.d.ts.map +1 -0
  279. package/dist/utils/refs.js +24 -0
  280. package/dist/utils/refs.js.map +1 -0
  281. package/package.json +127 -0
  282. package/src/theme.css +81 -0
@@ -0,0 +1,148 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { screen, waitFor } from '@testing-library/react';
3
+ import userEvent from '@testing-library/user-event';
4
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { renderWithProviders } from '#src/tests/render.test-helper.js';
6
+ import { Combobox, ComboboxContent, ComboboxInput, ComboboxItem, } from './Combobox.js';
7
+ const mockOptions = [
8
+ { value: 'apple', label: 'Apple' },
9
+ { value: 'banana', label: 'Banana' },
10
+ { value: 'orange', label: 'Orange' },
11
+ ];
12
+ const TestCombobox = ({ value, onChange = vi.fn(), disabled = false, placeholder = 'Select fruit...', options = mockOptions, }) => (_jsxs(Combobox, { value: value, onChange: onChange, disabled: disabled, children: [_jsx(ComboboxInput, { placeholder: placeholder }), _jsx(ComboboxContent, { children: options.map((option) => (_jsx(ComboboxItem, { value: option.value, label: option.label, children: option.label }, option.value))) })] }));
13
+ describe('Combobox', () => {
14
+ beforeEach(() => {
15
+ vi.clearAllMocks();
16
+ });
17
+ describe('Rendering', () => {
18
+ it('renders with placeholder when no value is selected', () => {
19
+ renderWithProviders(_jsx(TestCombobox, { value: null }));
20
+ expect(screen.getByPlaceholderText('Select fruit...')).toBeInTheDocument();
21
+ });
22
+ it('renders with selected value', () => {
23
+ renderWithProviders(_jsx(TestCombobox, { value: mockOptions[0] }));
24
+ expect(screen.getByText('Apple')).toBeInTheDocument();
25
+ });
26
+ it('renders in disabled state', () => {
27
+ renderWithProviders(_jsx(TestCombobox, { disabled: true, value: null }));
28
+ const input = screen.getByRole('combobox');
29
+ expect(input).toBeDisabled();
30
+ });
31
+ });
32
+ describe('User Interactions', () => {
33
+ it('opens dropdown on click', async () => {
34
+ renderWithProviders(_jsx(TestCombobox, { value: null }));
35
+ const input = screen.getByRole('combobox');
36
+ await userEvent.click(input);
37
+ await waitFor(() => {
38
+ for (const option of mockOptions) {
39
+ expect(screen.getByText(option.label)).toBeInTheDocument();
40
+ }
41
+ });
42
+ });
43
+ it('filters options based on input', async () => {
44
+ renderWithProviders(_jsx(TestCombobox, { value: null }));
45
+ const input = screen.getByRole('combobox');
46
+ await userEvent.click(input);
47
+ await userEvent.type(input, 'ap');
48
+ await waitFor(() => {
49
+ expect(screen.getByText('Apple')).toBeInTheDocument();
50
+ expect(screen.queryByText('Banana')).not.toBeInTheDocument();
51
+ });
52
+ });
53
+ it('selects option on click', async () => {
54
+ const onChange = vi.fn();
55
+ renderWithProviders(_jsx(TestCombobox, { value: null, onChange: onChange }));
56
+ const input = screen.getByRole('combobox');
57
+ await userEvent.click(input);
58
+ const option = await screen.findByText('Apple');
59
+ await userEvent.click(option);
60
+ expect(onChange).toHaveBeenCalledWith({
61
+ value: 'apple',
62
+ label: 'Apple',
63
+ });
64
+ });
65
+ it('clears search query after selection', async () => {
66
+ renderWithProviders(_jsx(TestCombobox, { value: null }));
67
+ const input = screen.getByRole('combobox');
68
+ await userEvent.click(input);
69
+ await userEvent.type(input, 'ap');
70
+ const option = await screen.findByText('Apple');
71
+ await userEvent.click(option);
72
+ expect(input).toHaveValue('');
73
+ });
74
+ });
75
+ describe('Keyboard Navigation', () => {
76
+ it('opens dropdown on arrow down', async () => {
77
+ renderWithProviders(_jsx(TestCombobox, { value: null }));
78
+ const input = screen.getByRole('combobox');
79
+ input.focus();
80
+ await userEvent.keyboard('{ArrowDown}');
81
+ await waitFor(() => {
82
+ for (const option of mockOptions) {
83
+ expect(screen.getByText(option.label)).toBeInTheDocument();
84
+ }
85
+ });
86
+ });
87
+ it('closes dropdown on escape', async () => {
88
+ renderWithProviders(_jsx(TestCombobox, { value: null }));
89
+ const input = screen.getByRole('combobox');
90
+ // Open dropdown
91
+ await userEvent.click(input);
92
+ // Verify it's open
93
+ expect(await screen.findByText('Apple')).toBeInTheDocument();
94
+ // Press escape
95
+ await userEvent.keyboard('{Escape}');
96
+ // Verify it's closed
97
+ await waitFor(() => {
98
+ expect(screen.queryByText('Apple')).not.toBeInTheDocument();
99
+ });
100
+ });
101
+ it('selects option with enter key', async () => {
102
+ const onChange = vi.fn();
103
+ renderWithProviders(_jsx(TestCombobox, { value: null, onChange: onChange }));
104
+ const input = screen.getByRole('combobox');
105
+ input.focus();
106
+ await userEvent.keyboard('{ArrowDown}');
107
+ expect(await screen.findByText('Apple')).toBeInTheDocument();
108
+ await userEvent.keyboard('{Enter}');
109
+ expect(onChange).toHaveBeenCalled();
110
+ });
111
+ it('selects a specific option with enter key', async () => {
112
+ const onChange = vi.fn();
113
+ renderWithProviders(_jsx(TestCombobox, { options: [
114
+ { value: 'apple', label: 'Apple' },
115
+ { value: 'banana', label: 'Banana' },
116
+ { value: 'orange', label: 'Orange' },
117
+ ], value: null, onChange: onChange }));
118
+ const input = screen.getByRole('combobox');
119
+ input.focus();
120
+ await userEvent.keyboard('ban');
121
+ await userEvent.keyboard('{Enter}');
122
+ expect(onChange).toHaveBeenCalledWith({
123
+ value: 'banana',
124
+ label: 'Banana',
125
+ });
126
+ });
127
+ });
128
+ describe('Edge Cases', () => {
129
+ it('handles empty search results', async () => {
130
+ renderWithProviders(_jsx(TestCombobox, { value: null }));
131
+ const input = screen.getByRole('combobox');
132
+ await userEvent.click(input);
133
+ await userEvent.keyboard('xyz');
134
+ expect(screen.queryByRole('option')).not.toBeInTheDocument();
135
+ });
136
+ it('maintains selected value when closing without selection', async () => {
137
+ const initialValue = mockOptions[0];
138
+ const onChange = vi.fn();
139
+ renderWithProviders(_jsx(TestCombobox, { value: initialValue, onChange: onChange }));
140
+ const input = screen.getByRole('combobox');
141
+ await userEvent.click(input);
142
+ await userEvent.keyboard('{Escape}');
143
+ expect(onChange).not.toHaveBeenCalled();
144
+ expect(screen.getByText(initialValue.label)).toBeInTheDocument();
145
+ });
146
+ });
147
+ });
148
+ //# sourceMappingURL=Combobox.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.test.js","sourceRoot":"","sources":["../../../src/components/Combobox/Combobox.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type React from 'react';
2
+ import type { Control, FieldPath, FieldValues } from 'react-hook-form';
3
+ import type { AddOptionRequiredFields, FormFieldProps, SelectOptionProps } from '#src/types/form.js';
4
+ import type { ComboboxProps } from '../Combobox/Combobox.js';
5
+ export interface ComboboxFieldProps<OptionType> extends Omit<ComboboxProps, 'value' | 'onChange' | 'label' | 'children'>, SelectOptionProps<OptionType>, FormFieldProps {
6
+ className?: string;
7
+ noResultsText?: React.ReactNode;
8
+ }
9
+ /**
10
+ * Field with label and error states that wraps a Combobox component.
11
+ */
12
+ declare function ComboboxField<OptionType>({ label, description, error, value, placeholder, options, renderItemLabel, onChange, getOptionLabel, getOptionValue, className, noResultsText, ...props }: ComboboxFieldProps<OptionType> & AddOptionRequiredFields<OptionType>): React.ReactElement;
13
+ interface ComboboxFieldControllerPropsBase<OptionType, TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends Omit<ComboboxFieldProps<OptionType>, 'value'> {
14
+ control: Control<TFieldValues>;
15
+ name: TFieldName;
16
+ }
17
+ type ComboboxFieldControllerProps<OptionType, TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = ComboboxFieldControllerPropsBase<OptionType, TFieldValues, TFieldName>;
18
+ declare function ComboboxFieldController<OptionType, TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ name, control, ...rest }: ComboboxFieldControllerProps<OptionType, TFieldValues, TFieldName> & AddOptionRequiredFields<OptionType>): React.ReactElement;
19
+ export { ComboboxField, ComboboxFieldController };
20
+ //# sourceMappingURL=ComboboxField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComboboxField.d.ts","sourceRoot":"","sources":["../../../src/components/ComboboxField/ComboboxField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,KAAK,EACV,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAiB7D,MAAM,WAAW,kBAAkB,CAAC,UAAU,CAC5C,SAAQ,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC,EACtE,iBAAiB,CAAC,UAAU,CAAC,EAC7B,cAAc;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACjC;AAED;;GAEG;AAEH,iBAAS,aAAa,CAAC,UAAU,EAAE,EACjC,KAAK,EACL,WAAW,EACX,KAAK,EACL,KAAK,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,QAAQ,EACR,cAA0D,EAC1D,cAAiE,EACjE,SAAS,EACT,aAAa,EACb,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAC/B,uBAAuB,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,YAAY,CA4CzD;AAED,UAAU,gCAAgC,CACxC,UAAU,EACV,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,UAAU,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,CACpE,SAAQ,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrD,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,KAAK,4BAA4B,CAC/B,UAAU,EACV,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,UAAU,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,IAClE,gCAAgC,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAE3E,iBAAS,uBAAuB,CAC9B,UAAU,EACV,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,UAAU,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EACpE,EACA,IAAI,EACJ,OAAO,EACP,GAAG,IAAI,EACR,EAAE,4BAA4B,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,GACnE,uBAAuB,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,YAAY,CAiBzD;AAED,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useComponentStrings } from '#src/contexts/component-strings.js';
4
+ import { useControllerMerged } from '#src/hooks/useControllerMerged.js';
5
+ import { Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, } from '../Combobox/Combobox.js';
6
+ import { FormControl, FormDescription, FormItem, FormLabel, FormMessage, } from '../FormItem/FormItem.js';
7
+ /**
8
+ * Field with label and error states that wraps a Combobox component.
9
+ */
10
+ function ComboboxField({ label, description, error, value, placeholder, options, renderItemLabel, onChange, getOptionLabel = (val) => val.label, getOptionValue = (val) => val.value, className, noResultsText, ...props }) {
11
+ const selectedOption = options.find((o) => getOptionValue(o) === value);
12
+ const selectedComboboxOption = (() => {
13
+ if (value === undefined)
14
+ return;
15
+ if (!selectedOption)
16
+ return null;
17
+ return {
18
+ label: getOptionLabel(selectedOption),
19
+ value: getOptionValue(selectedOption),
20
+ };
21
+ })();
22
+ const { comboboxNoResults } = useComponentStrings();
23
+ return (_jsxs(FormItem, { error: error, className: className, children: [_jsx(FormLabel, { children: label }), _jsxs(Combobox, { value: selectedComboboxOption, onChange: (value) => {
24
+ onChange?.(value.value);
25
+ }, ...props, children: [_jsx(FormControl, { children: _jsx(ComboboxInput, { placeholder: placeholder }) }), _jsxs(ComboboxContent, { children: [options.map((option) => {
26
+ const val = getOptionValue(option);
27
+ const label = getOptionLabel(option);
28
+ return (_jsx(ComboboxItem, { value: val, label: label, children: renderItemLabel
29
+ ? renderItemLabel(option, { selected: val === value })
30
+ : label }, val));
31
+ }), _jsx(ComboboxEmpty, { children: noResultsText ?? comboboxNoResults })] })] }), _jsx(FormDescription, { children: description }), _jsx(FormMessage, {})] }));
32
+ }
33
+ function ComboboxFieldController({ name, control, ...rest }) {
34
+ const { field, fieldState: { error }, } = useControllerMerged({ name, control }, rest);
35
+ const restProps = rest;
36
+ return (_jsx(ComboboxField, { error: error?.message, ...restProps, ...field, value: field.value ?? null }));
37
+ }
38
+ export { ComboboxField, ComboboxFieldController };
39
+ //# sourceMappingURL=ComboboxField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComboboxField.js","sourceRoot":"","sources":["../../../src/components/ComboboxField/ComboboxField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type * as React from 'react';
2
+ import { Command as CommandPrimitive } from 'cmdk';
3
+ import { Dialog } from '../Dialog/Dialog.js';
4
+ /**
5
+ * Fast, composable, unstyled command menu for React.
6
+ *
7
+ * https://ui.shadcn.com/docs/components/command
8
+ */
9
+ declare function Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>): React.ReactElement;
10
+ declare function CommandDialog({ title, description, children, ...props }: React.ComponentProps<typeof Dialog> & {
11
+ title?: string;
12
+ description?: string;
13
+ }): React.ReactElement;
14
+ declare function CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>): React.ReactElement;
15
+ declare function CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>): React.ReactElement;
16
+ declare function CommandEmpty({ ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>): React.ReactElement;
17
+ declare function CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>): React.ReactElement;
18
+ declare function CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>): React.ReactElement;
19
+ declare function CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>): React.ReactElement;
20
+ declare function CommandShortcut({ className, ...props }: React.ComponentProps<'span'>): React.ReactElement;
21
+ export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, };
22
+ //# sourceMappingURL=Command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../src/components/Command/Command.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAKnD,OAAO,EACL,MAAM,EAKP,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,iBAAS,OAAO,CAAC,EACf,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,GAAG,KAAK,CAAC,YAAY,CAWpE;AAED,iBAAS,aAAa,CAAC,EACrB,KAAyB,EACzB,WAA8C,EAC9C,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,KAAK,CAAC,YAAY,CAcrB;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAiB1E;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAWzE;AAED,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAQ1E;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAW1E;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,gBAAgB,CAAC,SAAS,CAClC,GAAG,KAAK,CAAC,YAAY,CAQrB;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAWzE;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAWnD;AAED,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,CAAC"}
@@ -0,0 +1,40 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Command as CommandPrimitive } from 'cmdk';
4
+ import { MdSearch } from 'react-icons/md';
5
+ import { cn } from '#src/utils/index.js';
6
+ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '../Dialog/Dialog.js';
7
+ /**
8
+ * Fast, composable, unstyled command menu for React.
9
+ *
10
+ * https://ui.shadcn.com/docs/components/command
11
+ */
12
+ function Command({ className, ...props }) {
13
+ return (_jsx(CommandPrimitive, { "data-slot": "command", className: cn('flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground', className), ...props }));
14
+ }
15
+ function CommandDialog({ title = 'Command Palette', description = 'Search for a command to run...', children, ...props }) {
16
+ return (_jsxs(Dialog, { ...props, children: [_jsxs(DialogHeader, { className: "sr-only", children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { children: description })] }), _jsx(DialogContent, { className: "overflow-hidden p-0", children: _jsx(Command, { className: "**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children: children }) })] }));
17
+ }
18
+ function CommandInput({ className, ...props }) {
19
+ return (_jsxs("div", { "data-slot": "command-input-wrapper", className: "flex h-9 items-center gap-2 border-b px-3", children: [_jsx(MdSearch, { className: "size-4 shrink-0 opacity-50" }), _jsx(CommandPrimitive.Input, { "data-slot": "command-input", className: cn('flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50', className), ...props })] }));
20
+ }
21
+ function CommandList({ className, ...props }) {
22
+ return (_jsx(CommandPrimitive.List, { "data-slot": "command-list", className: cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', className), ...props }));
23
+ }
24
+ function CommandEmpty({ ...props }) {
25
+ return (_jsx(CommandPrimitive.Empty, { "data-slot": "command-empty", className: "py-6 text-center text-sm", ...props }));
26
+ }
27
+ function CommandGroup({ className, ...props }) {
28
+ return (_jsx(CommandPrimitive.Group, { "data-slot": "command-group", className: cn('overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground', className), ...props }));
29
+ }
30
+ function CommandSeparator({ className, ...props }) {
31
+ return (_jsx(CommandPrimitive.Separator, { "data-slot": "command-separator", className: cn('-mx-1 h-px bg-border', className), ...props }));
32
+ }
33
+ function CommandItem({ className, ...props }) {
34
+ return (_jsx(CommandPrimitive.Item, { "data-slot": "command-item", className: cn("relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className), ...props }));
35
+ }
36
+ function CommandShortcut({ className, ...props }) {
37
+ return (_jsx("span", { "data-slot": "command-shortcut", className: cn('ml-auto text-xs tracking-widest text-muted-foreground', className), ...props }));
38
+ }
39
+ export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, };
40
+ //# sourceMappingURL=Command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.js","sourceRoot":"","sources":["../../../src/components/Command/Command.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAEzC,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,SAAS,OAAO,CAAC,EACf,SAAS,EACT,GAAG,KAAK,EACsC;IAC9C,OAAO,CACL,KAAC,gBAAgB,iBACL,SAAS,EACnB,SAAS,EAAE,EAAE,CACX,2FAA2F,EAC3F,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,KAAK,GAAG,iBAAiB,EACzB,WAAW,GAAG,gCAAgC,EAC9C,QAAQ,EACR,GAAG,KAAK,EAIT;IACC,OAAO,CACL,MAAC,MAAM,OAAK,KAAK,aACf,MAAC,YAAY,IAAC,SAAS,EAAC,SAAS,aAC/B,KAAC,WAAW,cAAE,KAAK,GAAe,EAClC,KAAC,iBAAiB,cAAE,WAAW,GAAqB,IACvC,EACf,KAAC,aAAa,IAAC,SAAS,EAAC,qBAAqB,YAC5C,KAAC,OAAO,IAAC,SAAS,EAAC,uZAAuZ,YACva,QAAQ,GACD,GACI,IACT,CACV,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EAC4C;IACpD,OAAO,CACL,4BACY,uBAAuB,EACjC,SAAS,EAAC,2CAA2C,aAErD,KAAC,QAAQ,IAAC,SAAS,EAAC,4BAA4B,GAAG,EACnD,KAAC,gBAAgB,CAAC,KAAK,iBACX,eAAe,EACzB,SAAS,EAAE,EAAE,CACX,0JAA0J,EAC1J,SAAS,CACV,KACG,KAAK,GACT,IACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EAC2C;IACnD,OAAO,CACL,KAAC,gBAAgB,CAAC,IAAI,iBACV,cAAc,EACxB,SAAS,EAAE,EAAE,CACX,6DAA6D,EAC7D,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EAC4C;IACpD,OAAO,CACL,KAAC,gBAAgB,CAAC,KAAK,iBACX,eAAe,EACzB,SAAS,EAAC,0BAA0B,KAChC,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EAC4C;IACpD,OAAO,CACL,KAAC,gBAAgB,CAAC,KAAK,iBACX,eAAe,EACzB,SAAS,EAAE,EAAE,CACX,wNAAwN,EACxN,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EAGT;IACC,OAAO,CACL,KAAC,gBAAgB,CAAC,SAAS,iBACf,mBAAmB,EAC7B,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC,KAC5C,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EAC2C;IACnD,OAAO,CACL,KAAC,gBAAgB,CAAC,IAAI,iBACV,cAAc,EACxB,SAAS,EAAE,EAAE,CACX,qYAAqY,EACrY,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACqB;IAC7B,OAAO,CACL,4BACY,kBAAkB,EAC5B,SAAS,EAAE,EAAE,CACX,uDAAuD,EACvD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type React from 'react';
2
+ /**
3
+ * A confirm dialog that is placed at the top level of the page
4
+ * enabling the use of the useConfirmDialog hook.
5
+ */
6
+ declare function ConfirmDialog(): React.ReactElement;
7
+ export { ConfirmDialog };
8
+ //# sourceMappingURL=ConfirmDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ConfirmDialog/ConfirmDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAmB/B;;;GAGG;AACH,iBAAS,aAAa,IAAI,KAAK,CAAC,YAAY,CAyE3C;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useRef } from 'react';
4
+ import { useComponentStrings } from '#src/contexts/component-strings.js';
5
+ import { useConfirmDialogState } from '#src/hooks/useConfirmDialog.js';
6
+ import { Button } from '../Button/Button.js';
7
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../Dialog/Dialog.js';
8
+ /**
9
+ * A confirm dialog that is placed at the top level of the page
10
+ * enabling the use of the useConfirmDialog hook.
11
+ */
12
+ function ConfirmDialog() {
13
+ const { confirmOptions, setConfirmOptions } = useConfirmDialogState();
14
+ const strings = useComponentStrings();
15
+ // We need to store the text content in a ref because the Dialog component
16
+ // will transition to fade so we need to cache the text while we close.
17
+ const textOptionsCached = useRef(null);
18
+ useEffect(() => {
19
+ if (confirmOptions) {
20
+ textOptionsCached.current = {
21
+ title: confirmOptions.title,
22
+ content: confirmOptions.content,
23
+ buttonCancelText: confirmOptions.buttonCancelText,
24
+ buttonConfirmText: confirmOptions.buttonConfirmText,
25
+ buttonConfirmVariant: confirmOptions.buttonConfirmVariant,
26
+ };
27
+ }
28
+ }, [confirmOptions]);
29
+ const { title, content, onCancel, onConfirm, buttonCancelText = strings.buttonCancel, buttonConfirmText = strings.buttonConfirm, buttonConfirmVariant, } = {
30
+ ...textOptionsCached.current,
31
+ ...confirmOptions,
32
+ };
33
+ return (_jsx(Dialog, { open: !!confirmOptions, onOpenChange: () => {
34
+ setConfirmOptions(undefined);
35
+ }, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: title }) }), _jsx(DialogDescription, { children: content }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "secondary", onClick: (e) => {
36
+ onCancel?.(e);
37
+ if (e.defaultPrevented)
38
+ return;
39
+ setConfirmOptions(undefined);
40
+ }, children: buttonCancelText }), _jsx(Button, { onClick: (e) => {
41
+ onConfirm?.(e);
42
+ if (e.defaultPrevented)
43
+ return;
44
+ setConfirmOptions(undefined);
45
+ }, variant: buttonConfirmVariant, children: buttonConfirmText })] })] }) }));
46
+ }
47
+ export { ConfirmDialog };
48
+ //# sourceMappingURL=ConfirmDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmDialog.js","sourceRoot":"","sources":["../../../src/components/ConfirmDialog/ConfirmDialog.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,SAAS,aAAa;IACpB,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,qBAAqB,EAAE,CAAC;IACtE,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IAEtC,0EAA0E;IAC1E,uEAAuE;IACvE,MAAM,iBAAiB,GAAG,MAAM,CAG7B,IAAI,CAAC,CAAC;IAET,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,EAAE,CAAC;YACnB,iBAAiB,CAAC,OAAO,GAAG;gBAC1B,KAAK,EAAE,cAAc,CAAC,KAAK;gBAC3B,OAAO,EAAE,cAAc,CAAC,OAAO;gBAC/B,gBAAgB,EAAE,cAAc,CAAC,gBAAgB;gBACjD,iBAAiB,EAAE,cAAc,CAAC,iBAAiB;gBACnD,oBAAoB,EAAE,cAAc,CAAC,oBAAoB;aAC1D,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,EACJ,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,gBAAgB,GAAG,OAAO,CAAC,YAAY,EACvC,iBAAiB,GAAG,OAAO,CAAC,aAAa,EACzC,oBAAoB,GACrB,GAAG;QACF,GAAG,iBAAiB,CAAC,OAAO;QAC5B,GAAG,cAAc;KAClB,CAAC;IAEF,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAE,CAAC,CAAC,cAAc,EACtB,YAAY,EAAE,GAAG,EAAE;YACjB,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC,YAED,MAAC,aAAa,eACZ,KAAC,YAAY,cACX,KAAC,WAAW,cAAE,KAAK,GAAe,GACrB,EACf,KAAC,iBAAiB,cAAE,OAAO,GAAqB,EAChD,MAAC,YAAY,eACX,KAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gCACb,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gCACd,IAAI,CAAC,CAAC,gBAAgB;oCAAE,OAAO;gCAC/B,iBAAiB,CAAC,SAAS,CAAC,CAAC;4BAC/B,CAAC,YAEA,gBAAgB,GACV,EACT,KAAC,MAAM,IACL,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gCACb,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;gCACf,IAAI,CAAC,CAAC,gBAAgB;oCAAE,OAAO;gCAC/B,iBAAiB,CAAC,SAAS,CAAC,CAAC;4BAC/B,CAAC,EACD,OAAO,EAAE,oBAAoB,YAE5B,iBAAiB,GACX,IACI,IACD,GACT,CACV,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type * as React from 'react';
2
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ /**
4
+ * A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.
5
+ *
6
+ * https://ui.shadcn.com/docs/components/dialog
7
+ */
8
+ declare function Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>): React.ReactElement;
9
+ declare function DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>): React.ReactElement;
10
+ declare function DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>): React.ReactElement;
11
+ declare function DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>): React.ReactElement;
12
+ declare function DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>): React.ReactElement;
13
+ export type DialogWidth = 'sm' | 'md' | 'lg' | 'xl' | 'none';
14
+ declare function DialogContent({ className, children, width, ...props }: React.ComponentProps<typeof DialogPrimitive.Content> & {
15
+ width?: DialogWidth;
16
+ }): React.ReactElement;
17
+ declare function DialogHeader({ className, ...props }: React.ComponentProps<'div'>): React.ReactElement;
18
+ declare function DialogFooter({ className, ...props }: React.ComponentProps<'div'>): React.ReactElement;
19
+ declare function DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>): React.ReactElement;
20
+ declare function DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>): React.ReactElement;
21
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
22
+ //# sourceMappingURL=Dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAK1D;;;;GAIG;AACH,iBAAS,MAAM,CAAC,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAExE;AAED,iBAAS,aAAa,CAAC,EACrB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,YAAY,CAE3E;AAED,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAE1E;AAED,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAEzE;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,YAAY,CAW3E;AACD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,KAAY,EACZ,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB,GAAG,KAAK,CAAC,YAAY,CAwBrB;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAQlD;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAWlD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAQzE;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,eAAe,CAAC,WAAW,CACnC,GAAG,KAAK,CAAC,YAAY,CAQrB;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,CAAC"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
4
+ import { MdClose } from 'react-icons/md';
5
+ import { cn } from '#src/utils/index.js';
6
+ /**
7
+ * A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.
8
+ *
9
+ * https://ui.shadcn.com/docs/components/dialog
10
+ */
11
+ function Dialog({ ...props }) {
12
+ return _jsx(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
13
+ }
14
+ function DialogTrigger({ ...props }) {
15
+ return _jsx(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
16
+ }
17
+ function DialogPortal({ ...props }) {
18
+ return _jsx(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
19
+ }
20
+ function DialogClose({ ...props }) {
21
+ return _jsx(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
22
+ }
23
+ function DialogOverlay({ className, ...props }) {
24
+ return (_jsx(DialogPrimitive.Overlay, { "data-slot": "dialog-overlay", className: cn('fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0', className), ...props }));
25
+ }
26
+ function DialogContent({ className, children, width = 'md', ...props }) {
27
+ return (_jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [_jsx(DialogOverlay, {}), _jsxs(DialogPrimitive.Content, { "data-slot": "dialog-content", className: cn('fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95', width === 'sm' && 'sm:max-w-md', width === 'md' && 'sm:max-w-lg', width === 'lg' && 'sm:max-w-4xl', width === 'xl' && 'sm:max-w-7xl', className), ...props, children: [children, _jsxs(DialogPrimitive.Close, { className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", children: [_jsx(MdClose, {}), _jsx("span", { className: "sr-only", children: "Close" })] })] })] }));
28
+ }
29
+ function DialogHeader({ className, ...props }) {
30
+ return (_jsx("div", { "data-slot": "dialog-header", className: cn('flex flex-col gap-2 text-center sm:text-left', className), ...props }));
31
+ }
32
+ function DialogFooter({ className, ...props }) {
33
+ return (_jsx("div", { "data-slot": "dialog-footer", className: cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className), ...props }));
34
+ }
35
+ function DialogTitle({ className, ...props }) {
36
+ return (_jsx(DialogPrimitive.Title, { "data-slot": "dialog-title", className: cn('text-lg leading-none font-semibold', className), ...props }));
37
+ }
38
+ function DialogDescription({ className, ...props }) {
39
+ return (_jsx(DialogPrimitive.Description, { "data-slot": "dialog-description", className: cn('text-sm text-muted-foreground', className), ...props }));
40
+ }
41
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
42
+ //# sourceMappingURL=Dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAEzC;;;;GAIG;AACH,SAAS,MAAM,CAAC,EACd,GAAG,KAAK,EAC0C;IAClD,OAAO,KAAC,eAAe,CAAC,IAAI,iBAAW,QAAQ,KAAK,KAAK,GAAI,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,GAAG,KAAK,EAC6C;IACrD,OAAO,KAAC,eAAe,CAAC,OAAO,iBAAW,gBAAgB,KAAK,KAAK,GAAI,CAAC;AAC3E,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EAC4C;IACpD,OAAO,KAAC,eAAe,CAAC,MAAM,iBAAW,eAAe,KAAK,KAAK,GAAI,CAAC;AACzE,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EAC2C;IACnD,OAAO,KAAC,eAAe,CAAC,KAAK,iBAAW,cAAc,KAAK,KAAK,GAAI,CAAC;AACvE,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EAC6C;IACrD,OAAO,CACL,KAAC,eAAe,CAAC,OAAO,iBACZ,gBAAgB,EAC1B,SAAS,EAAE,EAAE,CACX,wJAAwJ,EACxJ,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAGD,SAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,KAAK,GAAG,IAAI,EACZ,GAAG,KAAK,EAGT;IACC,OAAO,CACL,MAAC,YAAY,iBAAW,eAAe,aACrC,KAAC,aAAa,KAAG,EACjB,MAAC,eAAe,CAAC,OAAO,iBACZ,gBAAgB,EAC1B,SAAS,EAAE,EAAE,CACX,iWAAiW,EACjW,KAAK,KAAK,IAAI,IAAI,aAAa,EAC/B,KAAK,KAAK,IAAI,IAAI,aAAa,EAC/B,KAAK,KAAK,IAAI,IAAI,cAAc,EAChC,KAAK,KAAK,IAAI,IAAI,cAAc,EAChC,SAAS,CACV,KACG,KAAK,aAER,QAAQ,EACT,MAAC,eAAe,CAAC,KAAK,IAAC,SAAS,EAAC,mWAAmW,aAClY,KAAC,OAAO,KAAG,EACX,eAAM,SAAS,EAAC,SAAS,sBAAa,IAChB,IACA,IACb,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACoB;IAC5B,OAAO,CACL,2BACY,eAAe,EACzB,SAAS,EAAE,EAAE,CAAC,8CAA8C,EAAE,SAAS,CAAC,KACpE,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACoB;IAC5B,OAAO,CACL,2BACY,eAAe,EACzB,SAAS,EAAE,EAAE,CACX,wDAAwD,EACxD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EAC2C;IACnD,OAAO,CACL,KAAC,eAAe,CAAC,KAAK,iBACV,cAAc,EACxB,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,KAC1D,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EAGT;IACC,OAAO,CACL,KAAC,eAAe,CAAC,WAAW,iBAChB,oBAAoB,EAC9B,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KACrD,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type * as React from 'react';
2
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
3
+ /**
4
+ * Displays a menu to the user — such as a set of actions or functions — triggered by a button.
5
+ *
6
+ * https://ui.shadcn.com/docs/components/dropdown-menu
7
+ */
8
+ declare function DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>): React.ReactElement;
9
+ declare function DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>): React.ReactElement;
10
+ declare function DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>): React.ReactElement;
11
+ declare function DropdownMenuContent({ className, sideOffset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>): React.ReactElement;
12
+ declare function DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>): React.ReactElement;
13
+ declare function DropdownMenuItem({ className, inset, variant, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
14
+ inset?: boolean;
15
+ variant?: 'default' | 'destructive';
16
+ }): React.ReactElement;
17
+ declare function DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>): React.ReactElement;
18
+ declare function DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>): React.ReactElement;
19
+ declare function DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>): React.ReactElement;
20
+ declare function DropdownMenuLabel({ className, inset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
21
+ inset?: boolean;
22
+ }): React.ReactElement;
23
+ declare function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>): React.ReactElement;
24
+ declare function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>): React.ReactElement;
25
+ declare function DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>): React.ReactElement;
26
+ declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
27
+ inset?: boolean;
28
+ }): React.ReactElement;
29
+ declare function DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>): React.ReactElement;
30
+ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, };
31
+ //# sourceMappingURL=Dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/Dropdown/Dropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AAKvE;;;;GAIG;AACH,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,IAAI,CAClC,GAAG,KAAK,CAAC,YAAY,CAErB;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,MAAM,CACpC,GAAG,KAAK,CAAC,YAAY,CAIrB;AAED,iBAAS,mBAAmB,CAAC,EAC3B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,OAAO,CACrC,GAAG,KAAK,CAAC,YAAY,CAOrB;AAED,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,OAAO,CACrC,GAAG,KAAK,CAAC,YAAY,CAcrB;AAED,iBAAS,iBAAiB,CAAC,EACzB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,KAAK,CACnC,GAAG,KAAK,CAAC,YAAY,CAIrB;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,KAAK,EACL,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,IAAI,CAAC,GAAG;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CACrC,GAAG,KAAK,CAAC,YAAY,CAarB;AAED,iBAAS,wBAAwB,CAAC,EAChC,SAAS,EACT,QAAQ,EACR,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,YAAY,CAC1C,GAAG,KAAK,CAAC,YAAY,CAmBrB;AAED,iBAAS,sBAAsB,CAAC,EAC9B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,UAAU,CACxC,GAAG,KAAK,CAAC,YAAY,CAOrB;AAED,iBAAS,qBAAqB,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,SAAS,CACvC,GAAG,KAAK,CAAC,YAAY,CAkBrB;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,KAAK,CAAC,GAAG;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,KAAK,CAAC,YAAY,CAYrB;AAED,iBAAS,qBAAqB,CAAC,EAC7B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,SAAS,CACvC,GAAG,KAAK,CAAC,YAAY,CAQrB;AAED,iBAAS,oBAAoB,CAAC,EAC5B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAWnD;AAED,iBAAS,eAAe,CAAC,EACvB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAE7E;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,UAAU,CAAC,GAAG;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,KAAK,CAAC,YAAY,CAerB;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CACrB,OAAO,qBAAqB,CAAC,UAAU,CACxC,GAAG,KAAK,CAAC,YAAY,CAWrB;AAED,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACpB,CAAC"}
@@ -0,0 +1,57 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
4
+ import { MdCheck, MdChevronRight, MdCircle } from 'react-icons/md';
5
+ import { cn } from '#src/utils/index.js';
6
+ /**
7
+ * Displays a menu to the user — such as a set of actions or functions — triggered by a button.
8
+ *
9
+ * https://ui.shadcn.com/docs/components/dropdown-menu
10
+ */
11
+ function DropdownMenu({ ...props }) {
12
+ return _jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
13
+ }
14
+ function DropdownMenuPortal({ ...props }) {
15
+ return (_jsx(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props }));
16
+ }
17
+ function DropdownMenuTrigger({ ...props }) {
18
+ return (_jsx(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props }));
19
+ }
20
+ function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
21
+ return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: cn('z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95', className), ...props }) }));
22
+ }
23
+ function DropdownMenuGroup({ ...props }) {
24
+ return (_jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props }));
25
+ }
26
+ function DropdownMenuItem({ className, inset, variant = 'default', ...props }) {
27
+ return (_jsx(DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn("relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:!text-destructive", className), ...props }));
28
+ }
29
+ function DropdownMenuCheckboxItem({ className, children, checked, ...props }) {
30
+ return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-slot": "dropdown-menu-checkbox-item", className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), checked: checked, ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(MdCheck, { className: "size-4" }) }) }), children] }));
31
+ }
32
+ function DropdownMenuRadioGroup({ ...props }) {
33
+ return (_jsx(DropdownMenuPrimitive.RadioGroup, { "data-slot": "dropdown-menu-radio-group", ...props }));
34
+ }
35
+ function DropdownMenuRadioItem({ className, children, ...props }) {
36
+ return (_jsxs(DropdownMenuPrimitive.RadioItem, { "data-slot": "dropdown-menu-radio-item", className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(MdCircle, { className: "size-2 fill-current" }) }) }), children] }));
37
+ }
38
+ function DropdownMenuLabel({ className, inset, ...props }) {
39
+ return (_jsx(DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className), ...props }));
40
+ }
41
+ function DropdownMenuSeparator({ className, ...props }) {
42
+ return (_jsx(DropdownMenuPrimitive.Separator, { "data-slot": "dropdown-menu-separator", className: cn('-mx-1 my-1 h-px bg-border', className), ...props }));
43
+ }
44
+ function DropdownMenuShortcut({ className, ...props }) {
45
+ return (_jsx("span", { "data-slot": "dropdown-menu-shortcut", className: cn('ml-auto text-xs tracking-widest text-muted-foreground', className), ...props }));
46
+ }
47
+ function DropdownMenuSub({ ...props }) {
48
+ return _jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
49
+ }
50
+ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
51
+ return (_jsxs(DropdownMenuPrimitive.SubTrigger, { "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, className: cn('flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground', className), ...props, children: [children, _jsx(MdChevronRight, { className: "ml-auto size-4" })] }));
52
+ }
53
+ function DropdownMenuSubContent({ className, ...props }) {
54
+ return (_jsx(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: cn('z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95', className), ...props }));
55
+ }
56
+ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, };
57
+ //# sourceMappingURL=Dropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../../../src/components/Dropdown/Dropdown.tsx"],"names":[],"mappings":"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"}