@simplysm/solid 13.0.69 → 13.0.71
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/README.md +168 -195
- package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/data/calendar/Calendar.js +15 -2
- package/dist/components/data/calendar/Calendar.js.map +2 -2
- package/dist/components/data/kanban/KanbanContext.js +2 -2
- package/dist/components/data/kanban/KanbanContext.js.map +1 -1
- package/dist/components/data/list/List.d.ts +8 -8
- package/dist/components/data/list/ListContext.d.ts +1 -1
- package/dist/components/data/list/ListItem.d.ts +15 -15
- package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.js +6 -4
- package/dist/components/data/sheet/DataSheet.js.map +2 -2
- package/dist/components/data/sheet/DataSheetConfigDialog.js +8 -8
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
- package/dist/components/data/sheet/types.d.ts +4 -4
- package/dist/components/data/sheet/types.d.ts.map +1 -1
- package/dist/components/disclosure/Collapse.d.ts +4 -4
- package/dist/components/disclosure/Dialog.d.ts +24 -24
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +7 -2
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/disclosure/DialogContext.d.ts +25 -25
- package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogContext.js +1 -1
- package/dist/components/disclosure/DialogContext.js.map +1 -1
- package/dist/components/disclosure/DialogInstanceContext.d.ts +7 -7
- package/dist/components/disclosure/DialogInstanceContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogProvider.d.ts +3 -3
- package/dist/components/disclosure/Dropdown.d.ts +26 -24
- package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
- package/dist/components/disclosure/Dropdown.js +24 -8
- package/dist/components/disclosure/Dropdown.js.map +2 -2
- package/dist/components/disclosure/Tabs.js +1 -1
- package/dist/components/disclosure/Tabs.js.map +1 -1
- package/dist/components/disclosure/dialogZIndex.d.ts +9 -7
- package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
- package/dist/components/disclosure/dialogZIndex.js +4 -0
- package/dist/components/disclosure/dialogZIndex.js.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +34 -22
- package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
- package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
- package/dist/components/features/crud-sheet/CrudSheet.js +48 -33
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/features/crudRegistry.d.ts +16 -0
- package/dist/components/features/crudRegistry.d.ts.map +1 -0
- package/dist/components/features/crudRegistry.js +37 -0
- package/dist/components/features/crudRegistry.js.map +6 -0
- package/dist/components/features/data-select-button/DataSelectButton.d.ts +14 -14
- package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.js +27 -9
- package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
- package/dist/components/features/permission-table/PermissionTable.d.ts +3 -3
- package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
- package/dist/components/features/permission-table/PermissionTable.js +74 -85
- package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelect.d.ts +12 -12
- package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelect.js +10 -6
- package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +10 -10
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts +23 -15
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +191 -65
- package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts +15 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts.map +1 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.js +27 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.js.map +6 -0
- package/dist/components/feedback/Progress.d.ts +1 -1
- package/dist/components/feedback/Progress.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContainer.d.ts +2 -2
- package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContext.d.ts +11 -11
- package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContext.js +1 -1
- package/dist/components/feedback/busy/BusyContext.js.map +1 -1
- package/dist/components/feedback/busy/BusyProvider.d.ts +6 -6
- package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js +7 -3
- package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
- package/dist/components/feedback/notification/NotificationBell.js +2 -2
- package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.d.ts +22 -22
- package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.js +1 -1
- package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.d.ts +5 -5
- package/dist/components/feedback/notification/NotificationProvider.js +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
- package/dist/components/feedback/print/PrintContext.js +1 -1
- package/dist/components/feedback/print/PrintContext.js.map +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.d.ts +7 -7
- package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.js +3 -3
- package/dist/components/form-control/checkbox/Checkbox.js +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
- package/dist/components/form-control/checkbox/Radio.js +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.d.ts +12 -12
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
- package/dist/components/form-control/combobox/Combobox.d.ts +22 -22
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/form-control/combobox/Combobox.js +2 -2
- package/dist/components/form-control/combobox/ComboboxContext.d.ts +4 -4
- package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -1
- package/dist/components/form-control/combobox/ComboboxContext.js +1 -1
- package/dist/components/form-control/combobox/ComboboxContext.js.map +1 -1
- package/dist/components/form-control/combobox/ComboboxItem.d.ts +3 -3
- package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -1
- package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts +14 -14
- package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -1
- package/dist/components/form-control/date-range-picker/DateRangePicker.js +20 -9
- package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
- package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
- package/dist/components/form-control/editor/EditorToolbar.js +65 -20
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
- package/dist/components/form-control/editor/RichTextEditor.d.ts +6 -6
- package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
- package/dist/components/form-control/editor/RichTextEditor.js +1 -1
- package/dist/components/form-control/editor/editor.css +5 -5
- package/dist/components/form-control/field/DatePicker.d.ts +22 -22
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DatePicker.js +4 -4
- package/dist/components/form-control/field/DatePicker.js.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.d.ts +21 -21
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.js +4 -4
- package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
- package/dist/components/form-control/field/FieldPlaceholder.d.ts +1 -1
- package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.d.ts +23 -23
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +4 -4
- package/dist/components/form-control/field/NumberInput.js.map +1 -1
- package/dist/components/form-control/field/TextInput.d.ts +25 -25
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
- package/dist/components/form-control/field/TextInput.js +5 -5
- package/dist/components/form-control/field/TextInput.js.map +1 -1
- package/dist/components/form-control/field/Textarea.d.ts +19 -19
- package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
- package/dist/components/form-control/field/Textarea.js +4 -4
- package/dist/components/form-control/field/Textarea.js.map +1 -1
- package/dist/components/form-control/field/TimePicker.d.ts +20 -20
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/TimePicker.js +4 -4
- package/dist/components/form-control/field/TimePicker.js.map +1 -1
- package/dist/components/form-control/numpad/Numpad.d.ts +11 -11
- package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.d.ts +26 -26
- package/dist/components/form-control/select/Select.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.js +34 -23
- package/dist/components/form-control/select/Select.js.map +2 -2
- package/dist/components/form-control/select/SelectContext.d.ts +7 -7
- package/dist/components/form-control/select/SelectContext.d.ts.map +1 -1
- package/dist/components/form-control/select/SelectContext.js +1 -1
- package/dist/components/form-control/select/SelectContext.js.map +1 -1
- package/dist/components/form-control/select/SelectItem.d.ts +4 -4
- package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.js +8 -8
- package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
- package/dist/components/layout/FormTable.js +4 -4
- package/dist/components/layout/sidebar/Sidebar.d.ts +5 -5
- package/dist/components/layout/sidebar/SidebarContainer.d.ts +11 -11
- package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarContainer.js +6 -1
- package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
- package/dist/components/layout/sidebar/SidebarContext.d.ts +7 -7
- package/dist/components/layout/sidebar/SidebarContext.js +1 -1
- package/dist/components/layout/sidebar/SidebarContext.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarMenu.d.ts +11 -11
- package/dist/components/layout/sidebar/SidebarUser.d.ts +14 -14
- package/dist/components/layout/topbar/Topbar.d.ts +6 -6
- package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
- package/dist/components/layout/topbar/Topbar.js +11 -6
- package/dist/components/layout/topbar/Topbar.js.map +2 -2
- package/dist/components/layout/topbar/TopbarContainer.d.ts +6 -6
- package/dist/components/layout/topbar/TopbarContext.js +2 -2
- package/dist/components/layout/topbar/TopbarContext.js.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.d.ts +11 -11
- package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.js +5 -1
- package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
- package/dist/components/layout/topbar/TopbarUser.d.ts +9 -9
- package/dist/directives/ripple.d.ts +5 -5
- package/dist/helpers/createAppStructure.d.ts.map +1 -1
- package/dist/helpers/createAppStructure.js +7 -3
- package/dist/helpers/createAppStructure.js.map +1 -1
- package/dist/helpers/createHmrSafeContext.d.ts +3 -0
- package/dist/helpers/createHmrSafeContext.d.ts.map +1 -0
- package/dist/helpers/createHmrSafeContext.js +10 -0
- package/dist/helpers/createHmrSafeContext.js.map +6 -0
- package/dist/helpers/createSlotComponent.d.ts +3 -3
- package/dist/helpers/mergeStyles.d.ts +8 -8
- package/dist/hooks/createControllableSignal.d.ts +10 -10
- package/dist/hooks/createControllableStore.d.ts +6 -6
- package/dist/hooks/createIMEHandler.d.ts +7 -7
- package/dist/hooks/createMountTransition.d.ts +4 -4
- package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
- package/dist/hooks/createSelectionGroup.js +4 -3
- package/dist/hooks/createSelectionGroup.js.map +2 -2
- package/dist/hooks/createSlotSignal.d.ts +2 -2
- package/dist/hooks/useLocalStorage.d.ts +11 -11
- package/dist/hooks/useLogger.d.ts +1 -1
- package/dist/hooks/useLogger.d.ts.map +1 -1
- package/dist/hooks/useLogger.js +1 -1
- package/dist/hooks/useLogger.js.map +1 -1
- package/dist/hooks/useRouterLink.d.ts +10 -10
- package/dist/hooks/useRouterLink.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/ClipboardProvider.d.ts +5 -5
- package/dist/providers/ConfigContext.d.ts +6 -6
- package/dist/providers/ConfigContext.js +2 -2
- package/dist/providers/ConfigContext.js.map +1 -1
- package/dist/providers/ErrorLoggerProvider.d.ts +3 -3
- package/dist/providers/LoggerContext.d.ts +13 -13
- package/dist/providers/PwaUpdateProvider.d.ts +4 -4
- package/dist/providers/PwaUpdateProvider.js +2 -2
- package/dist/providers/PwaUpdateProvider.js.map +1 -1
- package/dist/providers/ServiceClientContext.d.ts +8 -8
- package/dist/providers/ServiceClientContext.d.ts.map +1 -1
- package/dist/providers/ServiceClientContext.js +1 -1
- package/dist/providers/ServiceClientContext.js.map +1 -1
- package/dist/providers/ServiceClientProvider.d.ts +6 -6
- package/dist/providers/ServiceClientProvider.js +7 -7
- package/dist/providers/ServiceClientProvider.js.map +1 -1
- package/dist/providers/SyncStorageContext.d.ts +14 -14
- package/dist/providers/SystemProvider.d.ts.map +1 -1
- package/dist/providers/SystemProvider.js +21 -16
- package/dist/providers/SystemProvider.js.map +2 -2
- package/dist/providers/ThemeContext.d.ts +20 -20
- package/dist/providers/ThemeContext.d.ts.map +1 -1
- package/dist/providers/ThemeContext.js +1 -1
- package/dist/providers/ThemeContext.js.map +1 -1
- package/dist/providers/i18n/I18nContext.d.ts +44 -0
- package/dist/providers/i18n/I18nContext.d.ts.map +1 -0
- package/dist/providers/i18n/I18nContext.js +73 -0
- package/dist/providers/i18n/I18nContext.js.map +6 -0
- package/dist/providers/i18n/I18nContext.types.d.ts +28 -0
- package/dist/providers/i18n/I18nContext.types.d.ts.map +1 -0
- package/dist/providers/i18n/I18nContext.types.js +1 -0
- package/dist/providers/i18n/I18nContext.types.js.map +6 -0
- package/dist/providers/i18n/i18nUtils.d.ts +18 -0
- package/dist/providers/i18n/i18nUtils.d.ts.map +1 -0
- package/dist/providers/i18n/i18nUtils.js +25 -0
- package/dist/providers/i18n/i18nUtils.js.map +6 -0
- package/dist/providers/i18n/locales/en.d.ts +163 -0
- package/dist/providers/i18n/locales/en.d.ts.map +1 -0
- package/dist/providers/i18n/locales/en.js +165 -0
- package/dist/providers/i18n/locales/en.js.map +6 -0
- package/dist/providers/i18n/locales/ko.d.ts +163 -0
- package/dist/providers/i18n/locales/ko.d.ts.map +1 -0
- package/dist/providers/i18n/locales/ko.js +165 -0
- package/dist/providers/i18n/locales/ko.js.map +6 -0
- package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +4 -4
- package/dist/providers/shared-data/SharedDataContext.d.ts +28 -28
- package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataContext.js +1 -1
- package/dist/providers/shared-data/SharedDataContext.js.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.d.ts +9 -9
- package/dist/providers/shared-data/SharedDataProvider.js +4 -4
- package/dist/providers/shared-data/SharedDataProvider.js.map +1 -1
- package/package.json +9 -8
- package/src/components/data/calendar/Calendar.tsx +10 -4
- package/src/components/data/kanban/Kanban.tsx +14 -14
- package/src/components/data/kanban/KanbanContext.ts +3 -3
- package/src/components/data/list/List.tsx +10 -10
- package/src/components/data/list/ListContext.ts +1 -1
- package/src/components/data/list/ListItem.styles.ts +8 -8
- package/src/components/data/list/ListItem.tsx +15 -15
- package/src/components/data/sheet/DataSheet.styles.ts +22 -22
- package/src/components/data/sheet/DataSheet.tsx +52 -48
- package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +9 -9
- package/src/components/data/sheet/sheetUtils.ts +7 -7
- package/src/components/data/sheet/types.ts +16 -16
- package/src/components/disclosure/Collapse.tsx +11 -11
- package/src/components/disclosure/Dialog.tsx +60 -57
- package/src/components/disclosure/DialogContext.ts +26 -26
- package/src/components/disclosure/DialogInstanceContext.ts +7 -7
- package/src/components/disclosure/DialogProvider.tsx +5 -5
- package/src/components/disclosure/Dropdown.tsx +89 -75
- package/src/components/disclosure/Tabs.tsx +1 -1
- package/src/components/disclosure/dialogZIndex.ts +16 -11
- package/src/components/display/Echarts.tsx +4 -4
- package/src/components/features/address/AddressSearch.tsx +2 -2
- package/src/components/features/crud-detail/CrudDetail.tsx +34 -21
- package/src/components/features/crud-detail/CrudDetailAfter.tsx +1 -1
- package/src/components/features/crud-detail/CrudDetailBefore.tsx +1 -1
- package/src/components/features/crud-detail/CrudDetailTools.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheet.tsx +52 -40
- package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetFilter.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetHeader.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
- package/src/components/features/crudRegistry.ts +60 -0
- package/src/components/features/data-select-button/DataSelectButton.tsx +34 -32
- package/src/components/features/permission-table/PermissionTable.tsx +70 -64
- package/src/components/features/shared-data/SharedDataSelect.tsx +24 -22
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
- package/src/components/features/shared-data/SharedDataSelectList.tsx +231 -59
- package/src/components/features/shared-data/SharedDataSelectListContext.ts +39 -0
- package/src/components/feedback/Progress.tsx +1 -1
- package/src/components/feedback/busy/BusyContainer.tsx +6 -6
- package/src/components/feedback/busy/BusyContext.ts +12 -12
- package/src/components/feedback/busy/BusyProvider.tsx +6 -6
- package/src/components/feedback/notification/NotificationBanner.tsx +3 -1
- package/src/components/feedback/notification/NotificationBell.tsx +4 -4
- package/src/components/feedback/notification/NotificationContext.ts +28 -28
- package/src/components/feedback/notification/NotificationProvider.tsx +9 -9
- package/src/components/feedback/print/PrintContext.ts +1 -1
- package/src/components/form-control/Button.tsx +1 -1
- package/src/components/form-control/DropdownTrigger.styles.ts +1 -1
- package/src/components/form-control/Invalid.tsx +5 -5
- package/src/components/form-control/ThemeToggle.tsx +10 -10
- package/src/components/form-control/checkbox/Checkbox.styles.ts +8 -8
- package/src/components/form-control/checkbox/Checkbox.tsx +2 -2
- package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
- package/src/components/form-control/checkbox/Radio.tsx +2 -2
- package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
- package/src/components/form-control/color-picker/ColorPicker.tsx +17 -17
- package/src/components/form-control/combobox/Combobox.tsx +55 -55
- package/src/components/form-control/combobox/ComboboxContext.ts +5 -5
- package/src/components/form-control/combobox/ComboboxItem.tsx +3 -3
- package/src/components/form-control/date-range-picker/DateRangePicker.tsx +40 -26
- package/src/components/form-control/editor/EditorToolbar.tsx +52 -50
- package/src/components/form-control/editor/RichTextEditor.tsx +16 -16
- package/src/components/form-control/editor/editor.css +5 -5
- package/src/components/form-control/field/DatePicker.tsx +39 -39
- package/src/components/form-control/field/DateTimePicker.tsx +38 -38
- package/src/components/form-control/field/Field.styles.ts +11 -11
- package/src/components/form-control/field/FieldPlaceholder.tsx +1 -1
- package/src/components/form-control/field/NumberInput.tsx +63 -63
- package/src/components/form-control/field/TextInput.tsx +48 -48
- package/src/components/form-control/field/Textarea.tsx +32 -32
- package/src/components/form-control/field/TimePicker.tsx +37 -37
- package/src/components/form-control/numpad/Numpad.tsx +26 -26
- package/src/components/form-control/select/Select.tsx +82 -86
- package/src/components/form-control/select/SelectContext.ts +8 -8
- package/src/components/form-control/select/SelectItem.tsx +5 -5
- package/src/components/form-control/state-preset/StatePreset.tsx +13 -13
- package/src/components/layout/FormTable.tsx +4 -4
- package/src/components/layout/sidebar/Sidebar.tsx +8 -8
- package/src/components/layout/sidebar/SidebarContainer.tsx +19 -17
- package/src/components/layout/sidebar/SidebarContext.ts +8 -8
- package/src/components/layout/sidebar/SidebarMenu.tsx +19 -19
- package/src/components/layout/sidebar/SidebarUser.tsx +14 -14
- package/src/components/layout/topbar/Topbar.tsx +15 -13
- package/src/components/layout/topbar/TopbarContainer.tsx +6 -6
- package/src/components/layout/topbar/TopbarContext.ts +2 -2
- package/src/components/layout/topbar/TopbarMenu.tsx +18 -16
- package/src/components/layout/topbar/TopbarUser.tsx +9 -9
- package/src/directives/ripple.ts +8 -8
- package/src/helpers/createAppStructure.ts +15 -8
- package/src/helpers/createHmrSafeContext.ts +8 -0
- package/src/helpers/createSlotComponent.ts +4 -4
- package/src/helpers/mergeStyles.ts +11 -11
- package/src/hooks/createControllableSignal.ts +11 -11
- package/src/hooks/createControllableStore.ts +8 -8
- package/src/hooks/createIMEHandler.ts +7 -7
- package/src/hooks/createMountTransition.ts +4 -4
- package/src/hooks/createSelectionGroup.tsx +5 -3
- package/src/hooks/createSlotSignal.ts +2 -2
- package/src/hooks/useLocalStorage.ts +13 -13
- package/src/hooks/useLogger.ts +2 -2
- package/src/hooks/useRouterLink.ts +15 -15
- package/src/index.ts +4 -3
- package/src/providers/ClipboardProvider.tsx +19 -19
- package/src/providers/ConfigContext.tsx +8 -8
- package/src/providers/ErrorLoggerProvider.tsx +3 -3
- package/src/providers/LoggerContext.tsx +13 -13
- package/src/providers/PwaUpdateProvider.tsx +6 -6
- package/src/providers/ServiceClientContext.ts +9 -9
- package/src/providers/ServiceClientProvider.tsx +15 -15
- package/src/providers/SyncStorageContext.tsx +15 -15
- package/src/providers/SystemProvider.tsx +15 -12
- package/src/providers/ThemeContext.tsx +26 -26
- package/src/providers/i18n/I18nContext.tsx +129 -0
- package/src/providers/i18n/I18nContext.types.ts +30 -0
- package/src/providers/i18n/i18nUtils.ts +38 -0
- package/src/providers/i18n/locales/en.ts +161 -0
- package/src/providers/i18n/locales/ko.ts +161 -0
- package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -4
- package/src/providers/shared-data/SharedDataContext.ts +29 -29
- package/src/providers/shared-data/SharedDataProvider.tsx +21 -21
- package/src/styles/patterns.styles.ts +6 -6
- package/src/styles/tokens.styles.ts +5 -5
- package/tailwind.config.ts +1 -1
- package/tailwind.css +4 -4
- package/tests/components/data/List.spec.tsx +689 -0
- package/tests/components/data/Pagination.spec.tsx +336 -0
- package/tests/components/data/Table.spec.tsx +55 -0
- package/tests/components/data/kanban/Kanban.selection.spec.tsx +213 -0
- package/tests/components/data/sheet/DataSheet.spec.tsx +645 -0
- package/tests/components/disclosure/Collapse.spec.tsx +173 -0
- package/tests/components/disclosure/Dialog.spec.tsx +438 -0
- package/tests/components/disclosure/DialogProvider.spec.tsx +142 -0
- package/tests/components/disclosure/Dropdown.spec.tsx +333 -0
- package/tests/components/disclosure/Tabs.spec.tsx +220 -0
- package/tests/components/disclosure/dialogZIndex.spec.ts +45 -0
- package/tests/components/display/Alert.spec.tsx +47 -0
- package/tests/components/display/Barcode.spec.tsx +61 -0
- package/tests/components/display/Card.spec.tsx +41 -0
- package/tests/components/display/Link.spec.tsx +62 -0
- package/tests/components/display/Tag.spec.tsx +47 -0
- package/tests/components/features/address/AddressSearch.spec.tsx +45 -0
- package/tests/components/features/crud-detail/CrudDetail.spec.tsx +537 -0
- package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +491 -0
- package/tests/components/features/crudRegistry.spec.ts +119 -0
- package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +482 -0
- package/tests/components/features/permission-table/PermissionTable.spec.tsx +288 -0
- package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +448 -0
- package/tests/components/feedback/busy/BusyContainer.spec.tsx +80 -0
- package/tests/components/feedback/notification/LiveRegion.spec.tsx +52 -0
- package/tests/components/feedback/notification/NotificationBanner.spec.tsx +187 -0
- package/tests/components/feedback/notification/NotificationBell.spec.tsx +226 -0
- package/tests/components/feedback/notification/NotificationContext.spec.tsx +362 -0
- package/tests/components/feedback/print/Print.spec.tsx +45 -0
- package/tests/components/form-control/Button.spec.tsx +119 -0
- package/tests/components/form-control/Invalid.spec.tsx +131 -0
- package/tests/components/form-control/checkbox/Checkbox.spec.tsx +137 -0
- package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +108 -0
- package/tests/components/form-control/checkbox/Radio.spec.tsx +138 -0
- package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +108 -0
- package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +94 -0
- package/tests/components/form-control/combobox/Combobox.spec.tsx +253 -0
- package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +88 -0
- package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +208 -0
- package/tests/components/form-control/field/DatePicker.spec.tsx +381 -0
- package/tests/components/form-control/field/DateTimePicker.spec.tsx +383 -0
- package/tests/components/form-control/field/NumberInput.spec.tsx +371 -0
- package/tests/components/form-control/field/TextInput.spec.tsx +341 -0
- package/tests/components/form-control/field/Textarea.spec.tsx +224 -0
- package/tests/components/form-control/field/TimePicker.spec.tsx +315 -0
- package/tests/components/form-control/numpad/Numpad.spec.tsx +248 -0
- package/tests/components/form-control/select/Select.spec.tsx +676 -0
- package/tests/components/form-control/select/SelectItem.spec.tsx +174 -0
- package/tests/components/layout/FormGroup.spec.tsx +104 -0
- package/tests/components/layout/FormTable.spec.tsx +43 -0
- package/tests/components/layout/sidebar/Sidebar.spec.tsx +192 -0
- package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +261 -0
- package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +219 -0
- package/tests/components/layout/sidebar/SidebarUser.spec.tsx +133 -0
- package/tests/components/layout/topbar/TopbarActions.spec.tsx +77 -0
- package/tests/components/layout/topbar/TopbarContainer.spec.tsx +38 -0
- package/tests/components/layout/topbar/createTopbarActions.spec.tsx +66 -0
- package/tests/directives/ripple.spec.tsx +130 -0
- package/tests/helpers/createAppStructure.spec.tsx +843 -0
- package/tests/helpers/mergeStyles.spec.ts +172 -0
- package/tests/hooks/createControllableSignal.spec.ts +194 -0
- package/tests/hooks/createIMEHandler.spec.ts +80 -0
- package/tests/hooks/createMountTransition.spec.ts +86 -0
- package/tests/hooks/useLocalStorage.spec.tsx +223 -0
- package/tests/hooks/useLogger.spec.tsx +116 -0
- package/tests/hooks/usePrint.spec.tsx +134 -0
- package/tests/hooks/useRouterLink.spec.tsx +183 -0
- package/tests/hooks/useSyncConfig.spec.tsx +304 -0
- package/tests/providers/ClipboardProvider.spec.tsx +20 -0
- package/tests/providers/ConfigContext.spec.tsx +42 -0
- package/tests/providers/ErrorLoggerProvider.spec.tsx +73 -0
- package/tests/providers/LoggerContext.spec.tsx +76 -0
- package/tests/providers/PwaUpdateProvider.spec.tsx +22 -0
- package/tests/providers/ServiceClientContext.spec.tsx +88 -0
- package/tests/providers/SyncStorageContext.spec.tsx +77 -0
- package/tests/providers/i18n/I18nContext.spec.tsx +110 -0
- package/tests/providers/shared-data/SharedDataProvider.spec.tsx +401 -0
- package/tests/vitest-env.d.ts +1 -0
- package/dist/components/form-control/select-list/SelectList.d.ts +0 -54
- package/dist/components/form-control/select-list/SelectList.d.ts.map +0 -1
- package/dist/components/form-control/select-list/SelectList.js +0 -280
- package/dist/components/form-control/select-list/SelectList.js.map +0 -6
- package/dist/components/form-control/select-list/SelectListContext.d.ts +0 -13
- package/dist/components/form-control/select-list/SelectListContext.d.ts.map +0 -1
- package/dist/components/form-control/select-list/SelectListContext.js +0 -14
- package/dist/components/form-control/select-list/SelectListContext.js.map +0 -6
- package/docs/data-components.md +0 -782
- package/docs/disclosure.md +0 -254
- package/docs/display.md +0 -153
- package/docs/feedback.md +0 -238
- package/docs/form-controls.md +0 -1068
- package/docs/helpers.md +0 -54
- package/docs/hooks.md +0 -588
- package/docs/layout.md +0 -384
- package/docs/providers.md +0 -211
- package/docs/styling.md +0 -184
- package/src/components/form-control/select-list/SelectList.tsx +0 -385
- package/src/components/form-control/select-list/SelectListContext.ts +0 -23
|
@@ -15,7 +15,7 @@ import { Invalid } from "../Invalid";
|
|
|
15
15
|
|
|
16
16
|
void ripple;
|
|
17
17
|
|
|
18
|
-
// Combobox
|
|
18
|
+
// Combobox-specific styles
|
|
19
19
|
const selectedValueClass = clsx("flex-1", "whitespace-nowrap", "overflow-hidden");
|
|
20
20
|
const inputClass = clsx(
|
|
21
21
|
"min-w-0 flex-1",
|
|
@@ -26,69 +26,69 @@ const inputClass = clsx(
|
|
|
26
26
|
const noResultsClass = clsx("px-3 py-2", textMuted);
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* Item template sub-component
|
|
30
30
|
*/
|
|
31
31
|
const ComboboxItemTemplate = <TArgs extends unknown[]>(props: {
|
|
32
32
|
children: (...args: TArgs) => JSX.Element;
|
|
33
33
|
}) => {
|
|
34
34
|
const ctx = useComboboxContext();
|
|
35
|
-
// eslint-disable-next-line solid/reactivity --
|
|
35
|
+
// eslint-disable-next-line solid/reactivity -- Store render function in signal, called from JSX tracked scope
|
|
36
36
|
ctx.setItemTemplate(props.children as (...args: unknown[]) => JSX.Element);
|
|
37
37
|
onCleanup(() => ctx.setItemTemplate(undefined));
|
|
38
38
|
return null;
|
|
39
39
|
};
|
|
40
40
|
|
|
41
|
-
// Props
|
|
41
|
+
// Props definition
|
|
42
42
|
export interface ComboboxProps<TValue = unknown> {
|
|
43
|
-
/**
|
|
43
|
+
/** Currently selected value */
|
|
44
44
|
value?: TValue;
|
|
45
45
|
|
|
46
|
-
/**
|
|
46
|
+
/** Value change callback */
|
|
47
47
|
onValueChange?: (value: TValue) => void;
|
|
48
48
|
|
|
49
|
-
/**
|
|
49
|
+
/** Item load function (required) */
|
|
50
50
|
loadItems: (query: string) => TValue[] | Promise<TValue[]>;
|
|
51
51
|
|
|
52
|
-
/**
|
|
52
|
+
/** Debounce delay (default: 300ms) */
|
|
53
53
|
debounceMs?: number;
|
|
54
54
|
|
|
55
|
-
/**
|
|
55
|
+
/** Allow custom values */
|
|
56
56
|
allowCustomValue?: boolean;
|
|
57
57
|
|
|
58
|
-
/**
|
|
58
|
+
/** Custom value parsing function */
|
|
59
59
|
parseCustomValue?: (text: string) => TValue;
|
|
60
60
|
|
|
61
|
-
/**
|
|
61
|
+
/** Function to render selected value (required) */
|
|
62
62
|
renderValue: (value: TValue) => JSX.Element;
|
|
63
63
|
|
|
64
|
-
/**
|
|
64
|
+
/** Disable input */
|
|
65
65
|
disabled?: boolean;
|
|
66
66
|
|
|
67
|
-
/**
|
|
67
|
+
/** Required input */
|
|
68
68
|
required?: boolean;
|
|
69
69
|
|
|
70
|
-
/**
|
|
70
|
+
/** Custom validation function */
|
|
71
71
|
validate?: (value: TValue | undefined) => string | undefined;
|
|
72
72
|
|
|
73
|
-
/** touchMode:
|
|
73
|
+
/** touchMode: show errors only after blur */
|
|
74
74
|
touchMode?: boolean;
|
|
75
75
|
|
|
76
|
-
/**
|
|
76
|
+
/** Placeholder text */
|
|
77
77
|
placeholder?: string;
|
|
78
78
|
|
|
79
|
-
/**
|
|
79
|
+
/** Trigger size */
|
|
80
80
|
size?: ComponentSize;
|
|
81
81
|
|
|
82
|
-
/**
|
|
82
|
+
/** Borderless style */
|
|
83
83
|
inset?: boolean;
|
|
84
84
|
|
|
85
|
-
/**
|
|
85
|
+
/** Custom class */
|
|
86
86
|
class?: string;
|
|
87
87
|
|
|
88
|
-
/**
|
|
88
|
+
/** Custom style */
|
|
89
89
|
style?: JSX.CSSProperties;
|
|
90
90
|
|
|
91
|
-
/**
|
|
91
|
+
/** Children (Combobox.Item or Combobox.ItemTemplate) */
|
|
92
92
|
children?: JSX.Element;
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -99,13 +99,13 @@ interface ComboboxComponent {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
/**
|
|
102
|
-
* Combobox
|
|
102
|
+
* Combobox component
|
|
103
103
|
*
|
|
104
|
-
*
|
|
104
|
+
* An autocomplete component supporting async search and item selection.
|
|
105
105
|
*
|
|
106
106
|
* @example
|
|
107
107
|
* ```tsx
|
|
108
|
-
* //
|
|
108
|
+
* // Basic usage
|
|
109
109
|
* <Combobox
|
|
110
110
|
* loadItems={async (query) => {
|
|
111
111
|
* const response = await fetch(`/api/search?q=${query}`);
|
|
@@ -120,7 +120,7 @@ interface ComboboxComponent {
|
|
|
120
120
|
* </Combobox.ItemTemplate>
|
|
121
121
|
* </Combobox>
|
|
122
122
|
*
|
|
123
|
-
* //
|
|
123
|
+
* // Children approach
|
|
124
124
|
* <Combobox loadItems={loadItems} renderValue={(v) => v.name}>
|
|
125
125
|
* <For each={items()}>
|
|
126
126
|
* {(item) => <Combobox.Item value={item}>{item.name}</Combobox.Item>}
|
|
@@ -149,52 +149,52 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
|
|
|
149
149
|
"touchMode",
|
|
150
150
|
]);
|
|
151
151
|
|
|
152
|
-
//
|
|
152
|
+
// State
|
|
153
153
|
const [open, setOpen] = createSignal(false);
|
|
154
154
|
const [query, setQuery] = createSignal("");
|
|
155
155
|
const [items, setItems] = createSignal<T[]>([]);
|
|
156
156
|
const [busyCount, setBusyCount] = createSignal(0);
|
|
157
157
|
|
|
158
|
-
//
|
|
158
|
+
// Selected value management (controlled/uncontrolled pattern)
|
|
159
159
|
const [getValue, setInternalValue] = createControllableSignal<T | undefined>({
|
|
160
160
|
value: () => local.value,
|
|
161
161
|
onChange: () => local.onValueChange,
|
|
162
162
|
} as Parameters<typeof createControllableSignal<T | undefined>>[0]);
|
|
163
163
|
|
|
164
|
-
//
|
|
165
|
-
// eslint-disable-next-line solid/reactivity --
|
|
164
|
+
// Debounce queue (created once on mount, debounceMs only used as initial value)
|
|
165
|
+
// eslint-disable-next-line solid/reactivity -- Debounce queue created once with debounceMs from mount time
|
|
166
166
|
const debounceQueue = new DebounceQueue(local.debounceMs ?? 300);
|
|
167
167
|
|
|
168
168
|
onCleanup(() => {
|
|
169
169
|
debounceQueue.dispose();
|
|
170
170
|
});
|
|
171
171
|
|
|
172
|
-
//
|
|
172
|
+
// Check if value is selected
|
|
173
173
|
const isSelected = (value: T): boolean => {
|
|
174
174
|
const current = getValue();
|
|
175
175
|
return current === value;
|
|
176
176
|
};
|
|
177
177
|
|
|
178
|
-
//
|
|
178
|
+
// Select value
|
|
179
179
|
const selectValue = (value: T) => {
|
|
180
180
|
setInternalValue(value);
|
|
181
181
|
setQuery("");
|
|
182
182
|
setOpen(false);
|
|
183
183
|
};
|
|
184
184
|
|
|
185
|
-
//
|
|
185
|
+
// Close dropdown
|
|
186
186
|
const closeDropdown = () => {
|
|
187
187
|
setOpen(false);
|
|
188
188
|
};
|
|
189
189
|
|
|
190
|
-
//
|
|
190
|
+
// Item template signal
|
|
191
191
|
const [itemTemplate, _setItemTemplate] = createSignal<
|
|
192
192
|
((...args: unknown[]) => JSX.Element) | undefined
|
|
193
193
|
>();
|
|
194
194
|
const setItemTemplate = (fn: ((...args: unknown[]) => JSX.Element) | undefined) =>
|
|
195
195
|
_setItemTemplate(() => fn);
|
|
196
196
|
|
|
197
|
-
// Context
|
|
197
|
+
// Context value
|
|
198
198
|
const contextValue: ComboboxContextValue<T> = {
|
|
199
199
|
isSelected,
|
|
200
200
|
selectValue,
|
|
@@ -202,9 +202,9 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
|
|
|
202
202
|
setItemTemplate,
|
|
203
203
|
};
|
|
204
204
|
|
|
205
|
-
//
|
|
205
|
+
// Perform search
|
|
206
206
|
const performSearch = (searchQuery: string) => {
|
|
207
|
-
// loadItems
|
|
207
|
+
// Capture loadItems function reference for use
|
|
208
208
|
const loadItemsFn = local.loadItems;
|
|
209
209
|
debounceQueue.run(async () => {
|
|
210
210
|
setBusyCount((c) => c + 1);
|
|
@@ -217,7 +217,7 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
|
|
|
217
217
|
});
|
|
218
218
|
};
|
|
219
219
|
|
|
220
|
-
//
|
|
220
|
+
// Input handler
|
|
221
221
|
const handleInput = (e: InputEvent) => {
|
|
222
222
|
const target = e.currentTarget as HTMLInputElement;
|
|
223
223
|
const newQuery = target.value;
|
|
@@ -229,7 +229,7 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
|
|
|
229
229
|
}
|
|
230
230
|
};
|
|
231
231
|
|
|
232
|
-
// Dropdown
|
|
232
|
+
// Dropdown open/close change handler
|
|
233
233
|
const handleOpenChange = (isOpen: boolean) => {
|
|
234
234
|
setOpen(isOpen);
|
|
235
235
|
if (isOpen) {
|
|
@@ -237,7 +237,7 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
|
|
|
237
237
|
}
|
|
238
238
|
};
|
|
239
239
|
|
|
240
|
-
//
|
|
240
|
+
// Trigger keyboard handling
|
|
241
241
|
const handleTriggerKeyDown = (e: KeyboardEvent) => {
|
|
242
242
|
if (local.disabled) return;
|
|
243
243
|
|
|
@@ -255,15 +255,15 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
|
|
|
255
255
|
}
|
|
256
256
|
};
|
|
257
257
|
|
|
258
|
-
//
|
|
258
|
+
// Validation message
|
|
259
259
|
const errorMsg = createMemo(() => {
|
|
260
260
|
const v = getValue();
|
|
261
261
|
if (local.required && (v === undefined || v === null || v === ""))
|
|
262
|
-
return "
|
|
262
|
+
return "This field is required";
|
|
263
263
|
return local.validate?.(v);
|
|
264
264
|
});
|
|
265
265
|
|
|
266
|
-
//
|
|
266
|
+
// Trigger class
|
|
267
267
|
const getTriggerClassName = () =>
|
|
268
268
|
getTriggerClass({
|
|
269
269
|
size: local.size,
|
|
@@ -272,19 +272,19 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
|
|
|
272
272
|
class: clsx(!local.inset && "bg-primary-50 dark:bg-primary-950/30", local.class),
|
|
273
273
|
});
|
|
274
274
|
|
|
275
|
-
//
|
|
276
|
-
//
|
|
275
|
+
// Note: Initial search performed in handleTriggerClick
|
|
276
|
+
// Input triggers performSearch in handleInput
|
|
277
277
|
|
|
278
|
-
//
|
|
278
|
+
// Render selected value or input
|
|
279
279
|
const renderDisplayContent = (): JSX.Element => {
|
|
280
280
|
const currentValue = getValue();
|
|
281
281
|
|
|
282
|
-
//
|
|
282
|
+
// Show input field if dropdown is open or no value selected
|
|
283
283
|
if (open() || currentValue === undefined) {
|
|
284
284
|
return (
|
|
285
285
|
<input
|
|
286
286
|
ref={(el) => {
|
|
287
|
-
//
|
|
287
|
+
// Focus input when dropdown opens
|
|
288
288
|
if (open()) {
|
|
289
289
|
requestAnimationFrame(() => el.focus());
|
|
290
290
|
}
|
|
@@ -300,25 +300,25 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
|
|
|
300
300
|
);
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
//
|
|
303
|
+
// Show value if selected and dropdown is closed
|
|
304
304
|
return <div class="truncate">{local.renderValue(currentValue)}</div>;
|
|
305
305
|
};
|
|
306
306
|
|
|
307
|
-
//
|
|
307
|
+
// Render items
|
|
308
308
|
const renderItems = (): JSX.Element => {
|
|
309
309
|
const template = itemTemplate() as ((item: T, index: number) => JSX.Element) | undefined;
|
|
310
310
|
|
|
311
|
-
//
|
|
311
|
+
// Loading
|
|
312
312
|
if (busyCount() > 0) {
|
|
313
|
-
return <div class={noResultsClass}
|
|
313
|
+
return <div class={noResultsClass}>Searching...</div>;
|
|
314
314
|
}
|
|
315
315
|
|
|
316
|
-
//
|
|
316
|
+
// Items empty
|
|
317
317
|
if (items().length === 0) {
|
|
318
|
-
return <div class={noResultsClass}
|
|
318
|
+
return <div class={noResultsClass}>No results found</div>;
|
|
319
319
|
}
|
|
320
320
|
|
|
321
|
-
// ItemTemplate
|
|
321
|
+
// ItemTemplate approach
|
|
322
322
|
if (template) {
|
|
323
323
|
return (
|
|
324
324
|
<For each={items()}>
|
|
@@ -327,7 +327,7 @@ export const Combobox: ComboboxComponent = <T,>(props: ComboboxProps<T>) => {
|
|
|
327
327
|
);
|
|
328
328
|
}
|
|
329
329
|
|
|
330
|
-
//
|
|
330
|
+
// Default rendering
|
|
331
331
|
return (
|
|
332
332
|
<For each={items()}>{(item) => <ComboboxItem value={item}>{String(item)}</ComboboxItem>}</For>
|
|
333
333
|
);
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { type JSX, createContext, useContext } from "solid-js";
|
|
2
2
|
|
|
3
3
|
export interface ComboboxContextValue<TValue = unknown> {
|
|
4
|
-
/**
|
|
4
|
+
/** Check if value is selected */
|
|
5
5
|
isSelected: (value: TValue) => boolean;
|
|
6
6
|
|
|
7
|
-
/**
|
|
7
|
+
/** Select value */
|
|
8
8
|
selectValue: (value: TValue) => void;
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/** Close dropdown */
|
|
11
11
|
closeDropdown: () => void;
|
|
12
12
|
|
|
13
|
-
/**
|
|
13
|
+
/** Register item template */
|
|
14
14
|
setItemTemplate: (fn: ((...args: unknown[]) => JSX.Element) | undefined) => void;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -19,7 +19,7 @@ export const ComboboxContext = createContext<ComboboxContextValue>();
|
|
|
19
19
|
export function useComboboxContext<TValue = unknown>(): ComboboxContextValue<TValue> {
|
|
20
20
|
const context = useContext(ComboboxContext);
|
|
21
21
|
if (!context) {
|
|
22
|
-
throw new Error("useComboboxContext
|
|
22
|
+
throw new Error("useComboboxContext can only be used inside the Combobox component");
|
|
23
23
|
}
|
|
24
24
|
return context as ComboboxContextValue<TValue>;
|
|
25
25
|
}
|
|
@@ -15,15 +15,15 @@ export interface ComboboxItemProps<TValue = unknown> extends Omit<
|
|
|
15
15
|
JSX.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
16
16
|
"value" | "onClick"
|
|
17
17
|
> {
|
|
18
|
-
/**
|
|
18
|
+
/** Item value */
|
|
19
19
|
value: TValue;
|
|
20
20
|
|
|
21
|
-
/**
|
|
21
|
+
/** Disabled */
|
|
22
22
|
disabled?: boolean;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Selectable item in Combobox dropdown
|
|
27
27
|
*/
|
|
28
28
|
export const ComboboxItem: ParentComponent<ComboboxItemProps> = <T,>(
|
|
29
29
|
props: ComboboxItemProps<T> & { children?: JSX.Element },
|
|
@@ -6,58 +6,59 @@ import { createControllableSignal } from "../../../hooks/createControllableSigna
|
|
|
6
6
|
import { type FieldSize } from "../field/Field.styles";
|
|
7
7
|
import { DatePicker } from "../field/DatePicker";
|
|
8
8
|
import { Select } from "../select/Select";
|
|
9
|
+
import { useI18nOptional } from "../../../providers/i18n/I18nContext";
|
|
9
10
|
|
|
10
11
|
export type DateRangePeriodType = "day" | "month" | "range";
|
|
11
12
|
|
|
12
13
|
const baseClass = clsx("inline-flex items-center", "gap-1");
|
|
13
14
|
|
|
14
15
|
export interface DateRangePickerProps {
|
|
15
|
-
/**
|
|
16
|
+
/** Period type */
|
|
16
17
|
periodType?: DateRangePeriodType;
|
|
17
18
|
|
|
18
|
-
/**
|
|
19
|
+
/** Period type change callback */
|
|
19
20
|
onPeriodTypeChange?: (value: DateRangePeriodType) => void;
|
|
20
21
|
|
|
21
|
-
/**
|
|
22
|
+
/** Start date */
|
|
22
23
|
from?: DateOnly;
|
|
23
24
|
|
|
24
|
-
/**
|
|
25
|
+
/** Start date change callback */
|
|
25
26
|
onFromChange?: (value: DateOnly | undefined) => void;
|
|
26
27
|
|
|
27
|
-
/**
|
|
28
|
+
/** End date */
|
|
28
29
|
to?: DateOnly;
|
|
29
30
|
|
|
30
|
-
/**
|
|
31
|
+
/** End date change callback */
|
|
31
32
|
onToChange?: (value: DateOnly | undefined) => void;
|
|
32
33
|
|
|
33
|
-
/**
|
|
34
|
+
/** Required input */
|
|
34
35
|
required?: boolean;
|
|
35
36
|
|
|
36
|
-
/**
|
|
37
|
+
/** Disabled */
|
|
37
38
|
disabled?: boolean;
|
|
38
39
|
|
|
39
|
-
/**
|
|
40
|
+
/** Size */
|
|
40
41
|
size?: FieldSize;
|
|
41
42
|
|
|
42
|
-
/**
|
|
43
|
+
/** Custom class */
|
|
43
44
|
class?: string;
|
|
44
45
|
|
|
45
|
-
/**
|
|
46
|
+
/** Custom style */
|
|
46
47
|
style?: JSX.CSSProperties;
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
/**
|
|
50
|
-
*
|
|
51
|
+
* Get the last day of the month.
|
|
51
52
|
*/
|
|
52
53
|
function getLastDayOfMonth(date: DateOnly): DateOnly {
|
|
53
54
|
return date.addMonths(1).setDay(1).addDays(-1);
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
/**
|
|
57
|
-
* DateRangePicker
|
|
58
|
+
* DateRangePicker component
|
|
58
59
|
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
60
|
+
* Input date range based on selected period type (day/month/range).
|
|
61
|
+
* Automatically adjusts from/to when periodType changes.
|
|
61
62
|
*
|
|
62
63
|
* @example
|
|
63
64
|
* ```tsx
|
|
@@ -77,6 +78,8 @@ function getLastDayOfMonth(date: DateOnly): DateOnly {
|
|
|
77
78
|
* ```
|
|
78
79
|
*/
|
|
79
80
|
export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
|
|
81
|
+
const i18n = useI18nOptional();
|
|
82
|
+
|
|
80
83
|
const [local, rest] = splitProps(props, [
|
|
81
84
|
"periodType",
|
|
82
85
|
"onPeriodTypeChange",
|
|
@@ -91,7 +94,7 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
|
|
|
91
94
|
"style",
|
|
92
95
|
]);
|
|
93
96
|
|
|
94
|
-
//
|
|
97
|
+
// Controlled/uncontrolled pattern
|
|
95
98
|
const [periodType, setPeriodType] = createControllableSignal({
|
|
96
99
|
value: () => local.periodType ?? ("range" as DateRangePeriodType),
|
|
97
100
|
onChange: () => local.onPeriodTypeChange,
|
|
@@ -107,7 +110,7 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
|
|
|
107
110
|
onChange: () => local.onToChange,
|
|
108
111
|
});
|
|
109
112
|
|
|
110
|
-
//
|
|
113
|
+
// Handle period type change
|
|
111
114
|
const handlePeriodTypeChange = (newType: DateRangePeriodType | DateRangePeriodType[]) => {
|
|
112
115
|
const type = Array.isArray(newType) ? newType[0] : newType;
|
|
113
116
|
setPeriodType(type);
|
|
@@ -127,7 +130,7 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
|
|
|
127
130
|
}
|
|
128
131
|
};
|
|
129
132
|
|
|
130
|
-
// from
|
|
133
|
+
// Handle from date change
|
|
131
134
|
const handleFromChange = (newFrom: DateOnly | undefined) => {
|
|
132
135
|
setFrom(newFrom);
|
|
133
136
|
|
|
@@ -145,12 +148,12 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
|
|
|
145
148
|
}
|
|
146
149
|
};
|
|
147
150
|
|
|
148
|
-
// to
|
|
151
|
+
// Handle to date change
|
|
149
152
|
const handleToChange = (newTo: DateOnly | undefined) => {
|
|
150
153
|
setTo(newTo);
|
|
151
154
|
};
|
|
152
155
|
|
|
153
|
-
//
|
|
156
|
+
// Wrapper CSS class
|
|
154
157
|
const getWrapperClass = () => twMerge(baseClass, local.class);
|
|
155
158
|
|
|
156
159
|
return (
|
|
@@ -158,17 +161,28 @@ export const DateRangePicker: Component<DateRangePickerProps> = (props) => {
|
|
|
158
161
|
<Select
|
|
159
162
|
value={periodType()}
|
|
160
163
|
onValueChange={handlePeriodTypeChange}
|
|
161
|
-
renderValue={(v: DateRangePeriodType) =>
|
|
162
|
-
|
|
163
|
-
|
|
164
|
+
renderValue={(v: DateRangePeriodType) => {
|
|
165
|
+
const labels = {
|
|
166
|
+
day: i18n?.t("dateRangePicker.day") ?? "Day",
|
|
167
|
+
month: i18n?.t("dateRangePicker.month") ?? "Month",
|
|
168
|
+
range: i18n?.t("dateRangePicker.range") ?? "Range"
|
|
169
|
+
};
|
|
170
|
+
return <>{labels[v]}</>;
|
|
171
|
+
}}
|
|
164
172
|
required
|
|
165
173
|
disabled={local.disabled}
|
|
166
174
|
size={local.size}
|
|
167
175
|
inset
|
|
168
176
|
>
|
|
169
|
-
<Select.Item value={"day" as DateRangePeriodType}
|
|
170
|
-
|
|
171
|
-
|
|
177
|
+
<Select.Item value={"day" as DateRangePeriodType}>
|
|
178
|
+
{i18n?.t("dateRangePicker.day") ?? "Day"}
|
|
179
|
+
</Select.Item>
|
|
180
|
+
<Select.Item value={"month" as DateRangePeriodType}>
|
|
181
|
+
{i18n?.t("dateRangePicker.month") ?? "Month"}
|
|
182
|
+
</Select.Item>
|
|
183
|
+
<Select.Item value={"range" as DateRangePeriodType}>
|
|
184
|
+
{i18n?.t("dateRangePicker.range") ?? "Range"}
|
|
185
|
+
</Select.Item>
|
|
172
186
|
</Select>
|
|
173
187
|
|
|
174
188
|
<Show
|