@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.
- package/LICENSE +390 -0
- package/dist/components/Alert/Alert.d.ts +15 -0
- package/dist/components/Alert/Alert.d.ts.map +1 -0
- package/dist/components/Alert/Alert.js +32 -0
- package/dist/components/Alert/Alert.js.map +1 -0
- package/dist/components/Badge/Badge.d.ts +21 -0
- package/dist/components/Badge/Badge.d.ts.map +1 -0
- package/dist/components/Badge/Badge.js +33 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +12 -0
- package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.js +28 -0
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/components/Button/Button.d.ts +23 -0
- package/dist/components/Button/Button.d.ts.map +1 -0
- package/dist/components/Button/Button.js +22 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/ButtonGroup/ButtonGroup.d.ts +7 -0
- package/dist/components/ButtonGroup/ButtonGroup.d.ts.map +1 -0
- package/dist/components/ButtonGroup/ButtonGroup.js +10 -0
- package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -0
- package/dist/components/Card/Card.d.ts +15 -0
- package/dist/components/Card/Card.d.ts.map +1 -0
- package/dist/components/Card/Card.js +30 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +10 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.js +15 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/CheckboxField/CheckboxField.d.ts +19 -0
- package/dist/components/CheckboxField/CheckboxField.d.ts.map +1 -0
- package/dist/components/CheckboxField/CheckboxField.js +20 -0
- package/dist/components/CheckboxField/CheckboxField.js.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts +16 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.js +19 -0
- package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/components/ColorPickerField/ColorPickerField.d.ts +36 -0
- package/dist/components/ColorPickerField/ColorPickerField.d.ts.map +1 -0
- package/dist/components/ColorPickerField/ColorPickerField.js +43 -0
- package/dist/components/ColorPickerField/ColorPickerField.js.map +1 -0
- package/dist/components/Combobox/Combobox.d.ts +71 -0
- package/dist/components/Combobox/Combobox.d.ts.map +1 -0
- package/dist/components/Combobox/Combobox.js +173 -0
- package/dist/components/Combobox/Combobox.js.map +1 -0
- package/dist/components/Combobox/Combobox.test.d.ts +2 -0
- package/dist/components/Combobox/Combobox.test.d.ts.map +1 -0
- package/dist/components/Combobox/Combobox.test.js +148 -0
- package/dist/components/Combobox/Combobox.test.js.map +1 -0
- package/dist/components/ComboboxField/ComboboxField.d.ts +20 -0
- package/dist/components/ComboboxField/ComboboxField.d.ts.map +1 -0
- package/dist/components/ComboboxField/ComboboxField.js +39 -0
- package/dist/components/ComboboxField/ComboboxField.js.map +1 -0
- package/dist/components/Command/Command.d.ts +22 -0
- package/dist/components/Command/Command.d.ts.map +1 -0
- package/dist/components/Command/Command.js +40 -0
- package/dist/components/Command/Command.js.map +1 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +8 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.js +48 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.js.map +1 -0
- package/dist/components/Dialog/Dialog.d.ts +22 -0
- package/dist/components/Dialog/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog/Dialog.js +42 -0
- package/dist/components/Dialog/Dialog.js.map +1 -0
- package/dist/components/Dropdown/Dropdown.d.ts +31 -0
- package/dist/components/Dropdown/Dropdown.d.ts.map +1 -0
- package/dist/components/Dropdown/Dropdown.js +57 -0
- package/dist/components/Dropdown/Dropdown.js.map +1 -0
- package/dist/components/EmptyDisplay/EmptyDisplay.d.ts +30 -0
- package/dist/components/EmptyDisplay/EmptyDisplay.d.ts.map +1 -0
- package/dist/components/EmptyDisplay/EmptyDisplay.js +14 -0
- package/dist/components/EmptyDisplay/EmptyDisplay.js.map +1 -0
- package/dist/components/ErrorDisplay/ErrorDisplay.d.ts +25 -0
- package/dist/components/ErrorDisplay/ErrorDisplay.d.ts.map +1 -0
- package/dist/components/ErrorDisplay/ErrorDisplay.js +16 -0
- package/dist/components/ErrorDisplay/ErrorDisplay.js.map +1 -0
- package/dist/components/ErrorableLoader/ErrorableLoader.d.ts +25 -0
- package/dist/components/ErrorableLoader/ErrorableLoader.d.ts.map +1 -0
- package/dist/components/ErrorableLoader/ErrorableLoader.js +14 -0
- package/dist/components/ErrorableLoader/ErrorableLoader.js.map +1 -0
- package/dist/components/FormActionBar/FormActionBar.d.ts +32 -0
- package/dist/components/FormActionBar/FormActionBar.d.ts.map +1 -0
- package/dist/components/FormActionBar/FormActionBar.js +28 -0
- package/dist/components/FormActionBar/FormActionBar.js.map +1 -0
- package/dist/components/FormItem/FormItem.d.ts +23 -0
- package/dist/components/FormItem/FormItem.d.ts.map +1 -0
- package/dist/components/FormItem/FormItem.js +57 -0
- package/dist/components/FormItem/FormItem.js.map +1 -0
- package/dist/components/Input/Input.d.ts +11 -0
- package/dist/components/Input/Input.d.ts.map +1 -0
- package/dist/components/Input/Input.js +15 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/InputField/InputField.d.ts +17 -0
- package/dist/components/InputField/InputField.d.ts.map +1 -0
- package/dist/components/InputField/InputField.js +18 -0
- package/dist/components/InputField/InputField.js.map +1 -0
- package/dist/components/Label/Label.d.ts +10 -0
- package/dist/components/Label/Label.d.ts.map +1 -0
- package/dist/components/Label/Label.js +14 -0
- package/dist/components/Label/Label.js.map +1 -0
- package/dist/components/Loader/Loader.d.ts +10 -0
- package/dist/components/Loader/Loader.d.ts.map +1 -0
- package/dist/components/Loader/Loader.js +10 -0
- package/dist/components/Loader/Loader.js.map +1 -0
- package/dist/components/MultiCombobox/MultiCombobox.d.ts +47 -0
- package/dist/components/MultiCombobox/MultiCombobox.d.ts.map +1 -0
- package/dist/components/MultiCombobox/MultiCombobox.js +114 -0
- package/dist/components/MultiCombobox/MultiCombobox.js.map +1 -0
- package/dist/components/MultiComboboxField/MultiComboboxField.d.ts +19 -0
- package/dist/components/MultiComboboxField/MultiComboboxField.d.ts.map +1 -0
- package/dist/components/MultiComboboxField/MultiComboboxField.js +38 -0
- package/dist/components/MultiComboboxField/MultiComboboxField.js.map +1 -0
- package/dist/components/MultiSwitchField/MultiSwitchField.d.ts +41 -0
- package/dist/components/MultiSwitchField/MultiSwitchField.d.ts.map +1 -0
- package/dist/components/MultiSwitchField/MultiSwitchField.js +44 -0
- package/dist/components/MultiSwitchField/MultiSwitchField.js.map +1 -0
- package/dist/components/NavigationMenu/NavigationMenu.d.ts +27 -0
- package/dist/components/NavigationMenu/NavigationMenu.d.ts.map +1 -0
- package/dist/components/NavigationMenu/NavigationMenu.js +50 -0
- package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -0
- package/dist/components/NavigationTabs/NavigationTabs.d.ts +9 -0
- package/dist/components/NavigationTabs/NavigationTabs.d.ts.map +1 -0
- package/dist/components/NavigationTabs/NavigationTabs.js +14 -0
- package/dist/components/NavigationTabs/NavigationTabs.js.map +1 -0
- package/dist/components/Popover/Popover.d.ts +17 -0
- package/dist/components/Popover/Popover.d.ts.map +1 -0
- package/dist/components/Popover/Popover.js +23 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/RecordView/RecordView.d.ts +24 -0
- package/dist/components/RecordView/RecordView.d.ts.map +1 -0
- package/dist/components/RecordView/RecordView.js +16 -0
- package/dist/components/RecordView/RecordView.js.map +1 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts +11 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -0
- package/dist/components/ScrollArea/ScrollArea.js +19 -0
- package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/components/SectionList/SectionList.d.ts +36 -0
- package/dist/components/SectionList/SectionList.d.ts.map +1 -0
- package/dist/components/SectionList/SectionList.js +25 -0
- package/dist/components/SectionList/SectionList.js.map +1 -0
- package/dist/components/Select/Select.d.ts +26 -0
- package/dist/components/Select/Select.d.ts.map +1 -0
- package/dist/components/Select/Select.js +51 -0
- package/dist/components/Select/Select.js.map +1 -0
- package/dist/components/SelectField/SelectField.d.ts +13 -0
- package/dist/components/SelectField/SelectField.d.ts.map +1 -0
- package/dist/components/SelectField/SelectField.js +30 -0
- package/dist/components/SelectField/SelectField.js.map +1 -0
- package/dist/components/Separator/Separator.d.ts +10 -0
- package/dist/components/Separator/Separator.d.ts.map +1 -0
- package/dist/components/Separator/Separator.js +14 -0
- package/dist/components/Separator/Separator.js.map +1 -0
- package/dist/components/Sheet/Sheet.d.ts +20 -0
- package/dist/components/Sheet/Sheet.d.ts.map +1 -0
- package/dist/components/Sheet/Sheet.js +46 -0
- package/dist/components/Sheet/Sheet.js.map +1 -0
- package/dist/components/SidebarLayout/SidebarLayout.d.ts +23 -0
- package/dist/components/SidebarLayout/SidebarLayout.d.ts.map +1 -0
- package/dist/components/SidebarLayout/SidebarLayout.js +22 -0
- package/dist/components/SidebarLayout/SidebarLayout.js.map +1 -0
- package/dist/components/Switch/Switch.d.ts +10 -0
- package/dist/components/Switch/Switch.d.ts.map +1 -0
- package/dist/components/Switch/Switch.js +13 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/SwitchField/SwitchField.d.ts +16 -0
- package/dist/components/SwitchField/SwitchField.d.ts.map +1 -0
- package/dist/components/SwitchField/SwitchField.js +15 -0
- package/dist/components/SwitchField/SwitchField.js.map +1 -0
- package/dist/components/Table/Table.d.ts +16 -0
- package/dist/components/Table/Table.d.ts.map +1 -0
- package/dist/components/Table/Table.js +33 -0
- package/dist/components/Table/Table.js.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts +13 -0
- package/dist/components/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs/Tabs.js +23 -0
- package/dist/components/Tabs/Tabs.js.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +10 -0
- package/dist/components/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/Textarea/Textarea.js +12 -0
- package/dist/components/Textarea/Textarea.js.map +1 -0
- package/dist/components/TextareaField/TextareaField.d.ts +17 -0
- package/dist/components/TextareaField/TextareaField.d.ts.map +1 -0
- package/dist/components/TextareaField/TextareaField.js +18 -0
- package/dist/components/TextareaField/TextareaField.js.map +1 -0
- package/dist/components/Toaster/Toaster.d.ts +11 -0
- package/dist/components/Toaster/Toaster.d.ts.map +1 -0
- package/dist/components/Toaster/Toaster.js +29 -0
- package/dist/components/Toaster/Toaster.js.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts +8 -0
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip/Tooltip.js +18 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/index.d.ts +48 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +48 -0
- package/dist/components/index.js.map +1 -0
- package/dist/constants/strings.d.ts +14 -0
- package/dist/constants/strings.d.ts.map +1 -0
- package/dist/constants/strings.js +13 -0
- package/dist/constants/strings.js.map +1 -0
- package/dist/contexts/component-strings.d.ts +16 -0
- package/dist/contexts/component-strings.d.ts.map +1 -0
- package/dist/contexts/component-strings.js +9 -0
- package/dist/contexts/component-strings.js.map +1 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useConfirmDialog.d.ts +22 -0
- package/dist/hooks/useConfirmDialog.d.ts.map +1 -0
- package/dist/hooks/useConfirmDialog.js +20 -0
- package/dist/hooks/useConfirmDialog.js.map +1 -0
- package/dist/hooks/useControlledState.d.ts +6 -0
- package/dist/hooks/useControlledState.d.ts.map +1 -0
- package/dist/hooks/useControlledState.js +27 -0
- package/dist/hooks/useControlledState.js.map +1 -0
- package/dist/hooks/useControllerMerged.d.ts +22 -0
- package/dist/hooks/useControllerMerged.d.ts.map +1 -0
- package/dist/hooks/useControllerMerged.js +32 -0
- package/dist/hooks/useControllerMerged.js.map +1 -0
- package/dist/hooks/useEventCallback.d.ts +3 -0
- package/dist/hooks/useEventCallback.d.ts.map +1 -0
- package/dist/hooks/useEventCallback.js +15 -0
- package/dist/hooks/useEventCallback.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/stories/button-icons.d.ts +15 -0
- package/dist/stories/button-icons.d.ts.map +1 -0
- package/dist/stories/button-icons.js +17 -0
- package/dist/stories/button-icons.js.map +1 -0
- package/dist/styles/button.d.ts +6 -0
- package/dist/styles/button.d.ts.map +1 -0
- package/dist/styles/button.js +33 -0
- package/dist/styles/button.js.map +1 -0
- package/dist/styles/index.d.ts +4 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +4 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/input.d.ts +6 -0
- package/dist/styles/input.d.ts.map +1 -0
- package/dist/styles/input.js +24 -0
- package/dist/styles/input.js.map +1 -0
- package/dist/styles/select.d.ts +9 -0
- package/dist/styles/select.d.ts.map +1 -0
- package/dist/styles/select.js +22 -0
- package/dist/styles/select.js.map +1 -0
- package/dist/tests/render.test-helper.d.ts +4 -0
- package/dist/tests/render.test-helper.d.ts.map +1 -0
- package/dist/tests/render.test-helper.js +7 -0
- package/dist/tests/render.test-helper.js.map +1 -0
- package/dist/tests/setup.d.ts +2 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/tests/setup.js +27 -0
- package/dist/tests/setup.js.map +1 -0
- package/dist/types/form.d.ts +40 -0
- package/dist/types/form.d.ts.map +1 -0
- package/dist/types/form.js +2 -0
- package/dist/types/form.js.map +1 -0
- package/dist/types/react.d.ts +3 -0
- package/dist/types/react.d.ts.map +1 -0
- package/dist/types/react.js +2 -0
- package/dist/types/react.js.map +1 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +5 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/generic-forward-ref.d.ts +8 -0
- package/dist/utils/generic-forward-ref.d.ts.map +1 -0
- package/dist/utils/generic-forward-ref.js +15 -0
- package/dist/utils/generic-forward-ref.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/refs.d.ts +10 -0
- package/dist/utils/refs.d.ts.map +1 -0
- package/dist/utils/refs.js +24 -0
- package/dist/utils/refs.js.map +1 -0
- package/package.json +127 -0
- 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":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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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"}
|