@simplysm/solid 13.0.69 → 13.0.70
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 +24 -24
- package/dist/components/disclosure/Tabs.js +1 -1
- package/dist/components/disclosure/Tabs.js.map +1 -1
- package/dist/components/disclosure/dialogZIndex.d.ts +7 -7
- package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +19 -16
- 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 +34 -28
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- 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 +6 -2
- 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 +8 -2
- 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 -13
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +219 -58
- 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 +4 -1
- package/dist/helpers/createAppStructure.js.map +1 -1
- 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.js +1 -1
- package/dist/hooks/createSelectionGroup.js.map +1 -1
- 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 +8 -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 +64 -64
- package/src/components/disclosure/Tabs.tsx +1 -1
- package/src/components/disclosure/dialogZIndex.ts +11 -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 +18 -16
- 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 +39 -37
- 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/data-select-button/DataSelectButton.tsx +34 -32
- package/src/components/features/permission-table/PermissionTable.tsx +22 -19
- package/src/components/features/shared-data/SharedDataSelect.tsx +22 -20
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
- package/src/components/features/shared-data/SharedDataSelectList.tsx +245 -48
- 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 +84 -84
- 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 +12 -6
- 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 +1 -1
- 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 +213 -0
- package/tests/components/disclosure/Tabs.spec.tsx +220 -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/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 +463 -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
|
@@ -25,35 +25,36 @@ import {
|
|
|
25
25
|
borderSubtle,
|
|
26
26
|
type ComponentSize,
|
|
27
27
|
textMuted,
|
|
28
|
-
textPlaceholder,
|
|
29
28
|
} from "../../../styles/tokens.styles";
|
|
30
29
|
import { createControllableSignal } from "../../../hooks/createControllableSignal";
|
|
31
30
|
import { createSlotSignal } from "../../../hooks/createSlotSignal";
|
|
32
31
|
import { chevronWrapperClass, getTriggerClass } from "../DropdownTrigger.styles";
|
|
33
32
|
import { Invalid } from "../Invalid";
|
|
33
|
+
import { TextInput } from "../field/TextInput";
|
|
34
|
+
import { useI18nOptional } from "../../../providers/i18n/I18nContext";
|
|
34
35
|
|
|
35
36
|
void ripple;
|
|
36
37
|
|
|
37
|
-
// Select
|
|
38
|
+
// Select-specific styles
|
|
38
39
|
const multiTagClass = clsx("rounded", "bg-base-200 px-1", "dark:bg-base-600");
|
|
39
40
|
const selectedValueClass = clsx("flex-1", "whitespace-nowrap");
|
|
40
41
|
|
|
41
|
-
//
|
|
42
|
+
// Search input styles (override TextInput wrapper)
|
|
42
43
|
const searchInputClass = clsx(
|
|
43
44
|
"w-full",
|
|
44
|
-
"
|
|
45
|
+
"rounded-none",
|
|
46
|
+
"border-0 border-b",
|
|
45
47
|
borderSubtle,
|
|
46
|
-
"bg-transparent",
|
|
47
|
-
"
|
|
48
|
+
"bg-transparent dark:bg-transparent",
|
|
49
|
+
"h-auto",
|
|
50
|
+
"py-1.5",
|
|
48
51
|
"text-sm",
|
|
49
|
-
"outline-none",
|
|
50
|
-
textPlaceholder,
|
|
51
52
|
);
|
|
52
53
|
|
|
53
|
-
//
|
|
54
|
+
// Select all/deselect all button area styles
|
|
54
55
|
const selectAllBarClass = clsx("flex gap-2", "border-b", borderSubtle, "px-2 py-1", "text-xs");
|
|
55
56
|
|
|
56
|
-
//
|
|
57
|
+
// Select all/deselect all button styles
|
|
57
58
|
const selectAllBtnClass = clsx(
|
|
58
59
|
"text-primary-500",
|
|
59
60
|
"hover:text-primary-600 dark:hover:text-primary-400",
|
|
@@ -61,7 +62,7 @@ const selectAllBtnClass = clsx(
|
|
|
61
62
|
);
|
|
62
63
|
|
|
63
64
|
/**
|
|
64
|
-
* Select
|
|
65
|
+
* Select right-side action sub-component
|
|
65
66
|
*/
|
|
66
67
|
interface SelectActionProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {}
|
|
67
68
|
|
|
@@ -100,11 +101,11 @@ const SelectAction: ParentComponent<SelectActionProps> = (props) => {
|
|
|
100
101
|
};
|
|
101
102
|
|
|
102
103
|
/**
|
|
103
|
-
*
|
|
104
|
+
* Dropdown top custom area sub-component
|
|
104
105
|
*/
|
|
105
106
|
const SelectHeader: ParentComponent = (props) => {
|
|
106
107
|
const ctx = useSelectContext();
|
|
107
|
-
// eslint-disable-next-line solid/reactivity --
|
|
108
|
+
// eslint-disable-next-line solid/reactivity -- Save as slot accessor, called from JSX tracked scope
|
|
108
109
|
ctx.setHeader(() => props.children);
|
|
109
110
|
onCleanup(() => ctx.setHeader(undefined));
|
|
110
111
|
return null;
|
|
@@ -114,87 +115,87 @@ const SelectItemTemplate = <TArgs extends unknown[]>(props: {
|
|
|
114
115
|
children: (...args: TArgs) => JSX.Element;
|
|
115
116
|
}) => {
|
|
116
117
|
const ctx = useSelectContext();
|
|
117
|
-
// eslint-disable-next-line solid/reactivity --
|
|
118
|
+
// eslint-disable-next-line solid/reactivity -- Store render function in signal, called from JSX tracked scope
|
|
118
119
|
ctx.setItemTemplate(props.children as (...args: unknown[]) => JSX.Element);
|
|
119
120
|
onCleanup(() => ctx.setItemTemplate(undefined));
|
|
120
121
|
return null;
|
|
121
122
|
};
|
|
122
123
|
|
|
123
|
-
// Props
|
|
124
|
+
// Props definition
|
|
124
125
|
|
|
125
|
-
//
|
|
126
|
+
// Common Props (except value, onValueChange, multiple)
|
|
126
127
|
interface SelectCommonProps<TValue = unknown> {
|
|
127
|
-
/**
|
|
128
|
+
/** Disabled state */
|
|
128
129
|
disabled?: boolean;
|
|
129
130
|
|
|
130
|
-
/**
|
|
131
|
+
/** Required input */
|
|
131
132
|
required?: boolean;
|
|
132
133
|
|
|
133
|
-
/**
|
|
134
|
+
/** Placeholder text when no value selected */
|
|
134
135
|
placeholder?: string;
|
|
135
136
|
|
|
136
|
-
/**
|
|
137
|
+
/** Trigger size */
|
|
137
138
|
size?: ComponentSize;
|
|
138
139
|
|
|
139
|
-
/**
|
|
140
|
+
/** Borderless style */
|
|
140
141
|
inset?: boolean;
|
|
141
142
|
|
|
142
|
-
/**
|
|
143
|
+
/** Custom validation function */
|
|
143
144
|
validate?: (value: unknown) => string | undefined;
|
|
144
145
|
|
|
145
|
-
/** touchMode:
|
|
146
|
+
/** touchMode: Show error only after blur */
|
|
146
147
|
touchMode?: boolean;
|
|
147
148
|
|
|
148
|
-
/**
|
|
149
|
+
/** Search text extraction function (shows search input when set) */
|
|
149
150
|
getSearchText?: (item: TValue) => string;
|
|
150
151
|
|
|
151
|
-
/**
|
|
152
|
+
/** Function to determine if item is hidden */
|
|
152
153
|
getIsHidden?: (item: TValue) => boolean;
|
|
153
154
|
|
|
154
|
-
/**
|
|
155
|
+
/** Custom class */
|
|
155
156
|
class?: string;
|
|
156
157
|
|
|
157
|
-
/**
|
|
158
|
+
/** Custom style */
|
|
158
159
|
style?: JSX.CSSProperties;
|
|
159
160
|
}
|
|
160
161
|
|
|
161
|
-
//
|
|
162
|
+
// Single select Props
|
|
162
163
|
interface SelectSingleBaseProps<TValue> extends SelectCommonProps<TValue> {
|
|
163
|
-
/**
|
|
164
|
+
/** Single select mode */
|
|
164
165
|
multiple?: false;
|
|
165
166
|
|
|
166
|
-
/**
|
|
167
|
+
/** Currently selected value */
|
|
167
168
|
value?: TValue;
|
|
168
169
|
|
|
169
|
-
/**
|
|
170
|
+
/** Value change callback */
|
|
170
171
|
onValueChange?: (value: TValue) => void;
|
|
171
172
|
|
|
172
|
-
/**
|
|
173
|
+
/** Display direction for multiple select (not used in single select) */
|
|
173
174
|
multiDisplayDirection?: never;
|
|
174
175
|
|
|
175
|
-
/**
|
|
176
|
+
/** Hide select all button (not used in single select) */
|
|
176
177
|
hideSelectAll?: never;
|
|
177
178
|
}
|
|
178
179
|
|
|
179
|
-
//
|
|
180
|
+
// Multiple select Props
|
|
180
181
|
interface SelectMultipleBaseProps<TValue> extends SelectCommonProps<TValue> {
|
|
181
|
-
/**
|
|
182
|
+
/** Multiple select mode */
|
|
182
183
|
multiple: true;
|
|
183
184
|
|
|
184
|
-
/**
|
|
185
|
+
/** Currently selected values */
|
|
185
186
|
value?: TValue[];
|
|
186
187
|
|
|
187
|
-
/**
|
|
188
|
+
/** Value change callback */
|
|
188
189
|
onValueChange?: (value: TValue[]) => void;
|
|
189
190
|
|
|
190
|
-
/**
|
|
191
|
+
/** Display direction for multiple select */
|
|
191
192
|
multiDisplayDirection?: "horizontal" | "vertical";
|
|
192
193
|
|
|
193
|
-
/**
|
|
194
|
+
/** Hide select all button */
|
|
194
195
|
hideSelectAll?: boolean;
|
|
195
196
|
}
|
|
196
197
|
|
|
197
|
-
// items
|
|
198
|
+
// items mode
|
|
198
199
|
interface SelectWithItemsPropsBase<TValue> {
|
|
199
200
|
items: TValue[];
|
|
200
201
|
getChildren?: (item: TValue, index: number, depth: number) => TValue[] | undefined;
|
|
@@ -202,7 +203,7 @@ interface SelectWithItemsPropsBase<TValue> {
|
|
|
202
203
|
children?: JSX.Element;
|
|
203
204
|
}
|
|
204
205
|
|
|
205
|
-
// children
|
|
206
|
+
// children mode
|
|
206
207
|
interface SelectWithChildrenPropsBase<TValue> {
|
|
207
208
|
items?: never;
|
|
208
209
|
getChildren?: never;
|
|
@@ -225,17 +226,17 @@ interface SelectComponent {
|
|
|
225
226
|
}
|
|
226
227
|
|
|
227
228
|
/**
|
|
228
|
-
* Select
|
|
229
|
+
* Select component
|
|
229
230
|
*
|
|
230
231
|
* @example
|
|
231
232
|
* ```tsx
|
|
232
|
-
* // children
|
|
233
|
+
* // children mode
|
|
233
234
|
* <Select value={selected()} onValueChange={setSelected} renderValue={(v) => v.name}>
|
|
234
235
|
* <Select.Item value={item1}>{item1.name}</Select.Item>
|
|
235
236
|
* <Select.Item value={item2}>{item2.name}</Select.Item>
|
|
236
237
|
* </Select>
|
|
237
238
|
*
|
|
238
|
-
* // items prop
|
|
239
|
+
* // items prop mode
|
|
239
240
|
* <Select items={data} value={selected()} onValueChange={setSelected}>
|
|
240
241
|
* <Select.ItemTemplate>
|
|
241
242
|
* {(item) => <>{item.name}</>}
|
|
@@ -267,26 +268,27 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
267
268
|
"getIsHidden",
|
|
268
269
|
]);
|
|
269
270
|
|
|
271
|
+
const i18n = useI18nOptional();
|
|
270
272
|
const [open, setOpen] = createSignal(false);
|
|
271
273
|
|
|
272
|
-
//
|
|
274
|
+
// Search text signal
|
|
273
275
|
const [searchText, setSearchText] = createSignal("");
|
|
274
276
|
|
|
275
|
-
//
|
|
277
|
+
// Reset searchText when open becomes false
|
|
276
278
|
createEffect(() => {
|
|
277
279
|
if (!open()) {
|
|
278
280
|
setSearchText("");
|
|
279
281
|
}
|
|
280
282
|
});
|
|
281
283
|
|
|
282
|
-
//
|
|
284
|
+
// Manage selected value (controlled/uncontrolled pattern)
|
|
283
285
|
type ValueType = T | T[] | undefined;
|
|
284
286
|
const [value, setValue] = createControllableSignal<ValueType>({
|
|
285
287
|
value: () => local.value,
|
|
286
288
|
onChange: () => local.onValueChange as ((v: ValueType) => void) | undefined,
|
|
287
289
|
} as Parameters<typeof createControllableSignal<ValueType>>[0]);
|
|
288
290
|
|
|
289
|
-
//
|
|
291
|
+
// Check if value is selected
|
|
290
292
|
const isSelected = (itemValue: T): boolean => {
|
|
291
293
|
const current = value();
|
|
292
294
|
if (current === undefined) return false;
|
|
@@ -297,7 +299,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
297
299
|
return current === itemValue;
|
|
298
300
|
};
|
|
299
301
|
|
|
300
|
-
//
|
|
302
|
+
// Toggle value
|
|
301
303
|
const toggleValue = (itemValue: T) => {
|
|
302
304
|
if (local.multiple) {
|
|
303
305
|
const current = (value() as T[] | undefined) ?? [];
|
|
@@ -312,12 +314,12 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
312
314
|
}
|
|
313
315
|
};
|
|
314
316
|
|
|
315
|
-
//
|
|
317
|
+
// Close dropdown
|
|
316
318
|
const closeDropdown = () => {
|
|
317
319
|
setOpen(false);
|
|
318
320
|
};
|
|
319
321
|
|
|
320
|
-
//
|
|
322
|
+
// Slot signals
|
|
321
323
|
const [header, setHeader] = createSlotSignal();
|
|
322
324
|
const [action, setAction] = createSlotSignal();
|
|
323
325
|
const [itemTemplate, _setItemTemplate] = createSignal<
|
|
@@ -326,7 +328,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
326
328
|
const setItemTemplate = (fn: ((...args: unknown[]) => JSX.Element) | undefined) =>
|
|
327
329
|
_setItemTemplate(() => fn);
|
|
328
330
|
|
|
329
|
-
// Context
|
|
331
|
+
// Context value
|
|
330
332
|
const contextValue: SelectContextValue<T> = {
|
|
331
333
|
multiple: () => local.multiple ?? false,
|
|
332
334
|
isSelected,
|
|
@@ -337,7 +339,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
337
339
|
setItemTemplate,
|
|
338
340
|
};
|
|
339
341
|
|
|
340
|
-
//
|
|
342
|
+
// Trigger keyboard handling (only Enter/Space, ArrowUp/Down handled by Dropdown)
|
|
341
343
|
const handleTriggerKeyDown = (e: KeyboardEvent) => {
|
|
342
344
|
if (local.disabled) return;
|
|
343
345
|
|
|
@@ -347,15 +349,15 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
347
349
|
}
|
|
348
350
|
};
|
|
349
351
|
|
|
350
|
-
//
|
|
352
|
+
// Validation error message
|
|
351
353
|
const errorMsg = createMemo(() => {
|
|
352
354
|
const v = value();
|
|
353
355
|
if (local.required && (v === undefined || v === null || v === ""))
|
|
354
|
-
return "
|
|
356
|
+
return "This is a required field";
|
|
355
357
|
return local.validate?.(v);
|
|
356
358
|
});
|
|
357
359
|
|
|
358
|
-
//
|
|
360
|
+
// Trigger class
|
|
359
361
|
const getTriggerClassName = () =>
|
|
360
362
|
getTriggerClass({
|
|
361
363
|
size: local.size,
|
|
@@ -364,7 +366,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
364
366
|
class: local.class,
|
|
365
367
|
});
|
|
366
368
|
|
|
367
|
-
//
|
|
369
|
+
// Search filtering (supports hierarchical structure)
|
|
368
370
|
const filteredItems = createMemo((): T[] | undefined => {
|
|
369
371
|
if (!local.items) return undefined;
|
|
370
372
|
if (!local.getSearchText || !searchText()) return local.items;
|
|
@@ -372,12 +374,12 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
372
374
|
const terms = searchText().trim().split(" ").filter(Boolean);
|
|
373
375
|
if (terms.length === 0) return local.items;
|
|
374
376
|
|
|
375
|
-
//
|
|
377
|
+
// Include parent when child matches in hierarchical structure
|
|
376
378
|
const matchesSearch = (item: T): boolean => {
|
|
377
379
|
const text = local.getSearchText!(item).toLowerCase();
|
|
378
380
|
if (terms.every((t) => text.includes(t.toLowerCase()))) return true;
|
|
379
381
|
|
|
380
|
-
//
|
|
382
|
+
// Show parent if any child matches
|
|
381
383
|
if (local.getChildren) {
|
|
382
384
|
const itemChildren = local.getChildren(item, 0, 0);
|
|
383
385
|
if (itemChildren?.some((child) => matchesSearch(child))) return true;
|
|
@@ -389,13 +391,13 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
389
391
|
return local.items.filter((item) => matchesSearch(item));
|
|
390
392
|
});
|
|
391
393
|
|
|
392
|
-
//
|
|
394
|
+
// Items with hidden filter applied
|
|
393
395
|
const visibleItems = createMemo((): T[] | undefined => {
|
|
394
396
|
const items = filteredItems();
|
|
395
397
|
if (!items || !local.getIsHidden) return items;
|
|
396
398
|
|
|
397
399
|
return items.filter((item) => {
|
|
398
|
-
//
|
|
400
|
+
// Show hidden item if selected (with strikethrough)
|
|
399
401
|
if (local.getIsHidden!(item)) {
|
|
400
402
|
return isSelected(item);
|
|
401
403
|
}
|
|
@@ -403,31 +405,31 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
403
405
|
});
|
|
404
406
|
});
|
|
405
407
|
|
|
406
|
-
//
|
|
408
|
+
// Select all
|
|
407
409
|
const handleSelectAll = () => {
|
|
408
410
|
const items = visibleItems();
|
|
409
411
|
if (!items) return;
|
|
410
412
|
setValue(items);
|
|
411
413
|
};
|
|
412
414
|
|
|
413
|
-
//
|
|
415
|
+
// Deselect all
|
|
414
416
|
const handleDeselectAll = () => {
|
|
415
417
|
setValue([] as unknown as T[]);
|
|
416
418
|
};
|
|
417
419
|
|
|
418
|
-
//
|
|
420
|
+
// Inner component: resolve children inside Provider to trigger slot registration
|
|
419
421
|
const SelectInner: ParentComponent = (innerProps) => {
|
|
420
|
-
// children()
|
|
422
|
+
// Resolve children() to trigger sub-component registration (Header, Action, ItemTemplate return null)
|
|
421
423
|
const resolved = children(() => innerProps.children);
|
|
422
424
|
|
|
423
|
-
// itemTemplate
|
|
425
|
+
// Extract itemTemplate function
|
|
424
426
|
const getItemTemplate = ():
|
|
425
427
|
| ((item: T, index: number, depth: number) => JSX.Element)
|
|
426
428
|
| undefined => {
|
|
427
429
|
return itemTemplate() as ((item: T, index: number, depth: number) => JSX.Element) | undefined;
|
|
428
430
|
};
|
|
429
431
|
|
|
430
|
-
// items
|
|
432
|
+
// Render items recursively
|
|
431
433
|
const renderItems = (itemList: T[], depth: number): JSX.Element => {
|
|
432
434
|
const tpl = getItemTemplate();
|
|
433
435
|
return (
|
|
@@ -439,7 +441,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
439
441
|
{tpl ? tpl(item, index(), depth) : String(item)}
|
|
440
442
|
<Show when={local.getChildren?.(item, index(), depth)} keyed>
|
|
441
443
|
{(itemChildren) => {
|
|
442
|
-
//
|
|
444
|
+
// Apply hidden filter to child list
|
|
443
445
|
const visibleChildren = () => {
|
|
444
446
|
if (!local.getIsHidden) return itemChildren;
|
|
445
447
|
return itemChildren.filter((child) => {
|
|
@@ -463,7 +465,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
463
465
|
);
|
|
464
466
|
};
|
|
465
467
|
|
|
466
|
-
//
|
|
468
|
+
// Render selected value (reuse itemTemplate when in items mode)
|
|
467
469
|
const renderValue = (renderVal: T): JSX.Element => {
|
|
468
470
|
if (local.renderValue) {
|
|
469
471
|
return local.renderValue(renderVal);
|
|
@@ -475,7 +477,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
475
477
|
return <>{String(renderVal)}</>;
|
|
476
478
|
};
|
|
477
479
|
|
|
478
|
-
//
|
|
480
|
+
// Display selected value
|
|
479
481
|
const renderSelectedValue = (): JSX.Element => {
|
|
480
482
|
const current = value();
|
|
481
483
|
|
|
@@ -495,10 +497,10 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
495
497
|
return renderValue(current as T);
|
|
496
498
|
};
|
|
497
499
|
|
|
498
|
-
//
|
|
500
|
+
// Show unset item: single select + not required + items mode
|
|
499
501
|
const showUnsetItem = () => !local.multiple && !local.required && local.items !== undefined;
|
|
500
502
|
|
|
501
|
-
//
|
|
503
|
+
// Show select all/deselect bar: multiple + not hideSelectAll + items mode
|
|
502
504
|
const showSelectAllBar = () =>
|
|
503
505
|
local.multiple === true && !local.hideSelectAll && local.items !== undefined;
|
|
504
506
|
|
|
@@ -533,18 +535,16 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
533
535
|
</Dropdown.Trigger>
|
|
534
536
|
<Dropdown.Content>
|
|
535
537
|
<Show when={header()}>{header()!()}</Show>
|
|
536
|
-
{/*
|
|
538
|
+
{/* Search input */}
|
|
537
539
|
<Show when={local.getSearchText && local.items}>
|
|
538
|
-
<
|
|
539
|
-
type="text"
|
|
540
|
-
data-select-search
|
|
541
|
-
class={searchInputClass}
|
|
542
|
-
placeholder="검색..."
|
|
540
|
+
<TextInput
|
|
543
541
|
value={searchText()}
|
|
544
|
-
|
|
542
|
+
onValueChange={setSearchText}
|
|
543
|
+
placeholder={i18n?.t("select.searchPlaceholder") ?? "Search..."}
|
|
544
|
+
class={searchInputClass}
|
|
545
545
|
/>
|
|
546
546
|
</Show>
|
|
547
|
-
{/*
|
|
547
|
+
{/* Select all/deselect buttons */}
|
|
548
548
|
<Show when={showSelectAllBar()}>
|
|
549
549
|
<div class={selectAllBarClass}>
|
|
550
550
|
<button
|
|
@@ -553,7 +553,7 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
553
553
|
class={selectAllBtnClass}
|
|
554
554
|
onClick={handleSelectAll}
|
|
555
555
|
>
|
|
556
|
-
|
|
556
|
+
{i18n?.t("select.selectAll") ?? "Select all"}
|
|
557
557
|
</button>
|
|
558
558
|
<button
|
|
559
559
|
type="button"
|
|
@@ -561,16 +561,16 @@ export const Select: SelectComponent = <T,>(props: SelectProps<T>) => {
|
|
|
561
561
|
class={selectAllBtnClass}
|
|
562
562
|
onClick={handleDeselectAll}
|
|
563
563
|
>
|
|
564
|
-
|
|
564
|
+
{i18n?.t("select.deselectAll") ?? "Deselect all"}
|
|
565
565
|
</button>
|
|
566
566
|
</div>
|
|
567
567
|
</Show>
|
|
568
568
|
<List inset role="listbox">
|
|
569
569
|
<Show when={local.items} fallback={resolved()}>
|
|
570
|
-
{/*
|
|
570
|
+
{/* Unset item */}
|
|
571
571
|
<Show when={showUnsetItem()}>
|
|
572
572
|
<SelectItem value={undefined as T}>
|
|
573
|
-
<span class={textMuted}
|
|
573
|
+
<span class={textMuted}>{i18n?.t("select.unset") ?? "Unset"}</span>
|
|
574
574
|
</SelectItem>
|
|
575
575
|
</Show>
|
|
576
576
|
{renderItems(visibleItems() ?? [], 0)}
|
|
@@ -2,25 +2,25 @@ import { createContext, useContext, type Accessor, type JSX } from "solid-js";
|
|
|
2
2
|
import type { SlotAccessor } from "../../../hooks/createSlotSignal";
|
|
3
3
|
|
|
4
4
|
export interface SelectContextValue<TValue = unknown> {
|
|
5
|
-
/**
|
|
5
|
+
/** Whether multiple select mode is enabled */
|
|
6
6
|
multiple: Accessor<boolean>;
|
|
7
7
|
|
|
8
|
-
/**
|
|
8
|
+
/** Check if value is selected */
|
|
9
9
|
isSelected: (value: TValue) => boolean;
|
|
10
10
|
|
|
11
|
-
/**
|
|
11
|
+
/** Toggle value selection/deselection */
|
|
12
12
|
toggleValue: (value: TValue) => void;
|
|
13
13
|
|
|
14
|
-
/**
|
|
14
|
+
/** Close dropdown */
|
|
15
15
|
closeDropdown: () => void;
|
|
16
16
|
|
|
17
|
-
/**
|
|
17
|
+
/** Register header slot */
|
|
18
18
|
setHeader: (content: SlotAccessor) => void;
|
|
19
19
|
|
|
20
|
-
/**
|
|
20
|
+
/** Register action slot */
|
|
21
21
|
setAction: (content: SlotAccessor) => void;
|
|
22
22
|
|
|
23
|
-
/**
|
|
23
|
+
/** Register item template */
|
|
24
24
|
setItemTemplate: (fn: ((...args: unknown[]) => JSX.Element) | undefined) => void;
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -29,7 +29,7 @@ export const SelectContext = createContext<SelectContextValue>();
|
|
|
29
29
|
export function useSelectContext<TValue = unknown>(): SelectContextValue<TValue> {
|
|
30
30
|
const context = useContext(SelectContext);
|
|
31
31
|
if (!context) {
|
|
32
|
-
throw new Error("useSelectContext
|
|
32
|
+
throw new Error("useSelectContext can only be used inside Select component");
|
|
33
33
|
}
|
|
34
34
|
return context as SelectContextValue<TValue>;
|
|
35
35
|
}
|
|
@@ -31,10 +31,10 @@ export interface SelectItemProps<TValue = unknown> extends Omit<
|
|
|
31
31
|
JSX.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
32
32
|
"value" | "onClick"
|
|
33
33
|
> {
|
|
34
|
-
/**
|
|
34
|
+
/** Item value */
|
|
35
35
|
value: TValue;
|
|
36
36
|
|
|
37
|
-
/**
|
|
37
|
+
/** Disabled state */
|
|
38
38
|
disabled?: boolean;
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -43,13 +43,13 @@ interface SelectItemComponent<TValue = unknown> extends ParentComponent<SelectIt
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
46
|
+
* Selectable item within Select dropdown
|
|
47
47
|
*
|
|
48
48
|
* @example
|
|
49
49
|
* ```tsx
|
|
50
50
|
* <Select.Item value={item}>{item.name}</Select.Item>
|
|
51
51
|
*
|
|
52
|
-
* //
|
|
52
|
+
* // Nested items
|
|
53
53
|
* <Select.Item value={parent}>
|
|
54
54
|
* {parent.name}
|
|
55
55
|
* <Select.Item.Children>
|
|
@@ -75,7 +75,7 @@ export const SelectItem: SelectItemComponent = <T,>(
|
|
|
75
75
|
|
|
76
76
|
context.toggleValue(local.value);
|
|
77
77
|
|
|
78
|
-
//
|
|
78
|
+
// Close dropdown only in single select mode
|
|
79
79
|
if (!context.multiple()) {
|
|
80
80
|
context.closeDropdown();
|
|
81
81
|
}
|
|
@@ -117,7 +117,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
117
117
|
|
|
118
118
|
const notification = useNotification();
|
|
119
119
|
|
|
120
|
-
// presetKey
|
|
120
|
+
// presetKey is an identifier set only once at mount, evaluate immediately to capture
|
|
121
121
|
/* eslint-disable solid/reactivity */
|
|
122
122
|
const [presets, setPresets] = useSyncConfig<StatePresetItem<TValue>[]>(
|
|
123
123
|
`state-preset.${local.presetKey}`,
|
|
@@ -147,7 +147,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
if (presets().some((p) => p.name === name)) {
|
|
150
|
-
notification.warning("
|
|
150
|
+
notification.warning("Duplicate name", "A preset with this name already exists.");
|
|
151
151
|
return;
|
|
152
152
|
}
|
|
153
153
|
|
|
@@ -156,7 +156,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
156
156
|
state: objClone(local.value),
|
|
157
157
|
};
|
|
158
158
|
setPresets([...presets(), newPreset]);
|
|
159
|
-
notification.info("
|
|
159
|
+
notification.info("Preset saved", `Preset "${name}" has been saved.`);
|
|
160
160
|
setAdding(false);
|
|
161
161
|
setInputValue("");
|
|
162
162
|
}
|
|
@@ -177,11 +177,11 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
177
177
|
setPresets(updated);
|
|
178
178
|
|
|
179
179
|
const notiId = notification.info(
|
|
180
|
-
"
|
|
181
|
-
`"${presetName}"
|
|
180
|
+
"Preset overwritten",
|
|
181
|
+
`Preset "${presetName}" has been updated with the current state.`,
|
|
182
182
|
{
|
|
183
183
|
action: {
|
|
184
|
-
label: "
|
|
184
|
+
label: "Undo",
|
|
185
185
|
onClick: () => {
|
|
186
186
|
setPresets(snapshot);
|
|
187
187
|
notification.remove(notiId);
|
|
@@ -198,9 +198,9 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
198
198
|
const updated = snapshot.filter((_, i) => i !== index);
|
|
199
199
|
setPresets(updated);
|
|
200
200
|
|
|
201
|
-
const notiId = notification.info("
|
|
201
|
+
const notiId = notification.info("Preset deleted", `Preset "${presetName}" has been deleted.`, {
|
|
202
202
|
action: {
|
|
203
|
-
label: "
|
|
203
|
+
label: "Undo",
|
|
204
204
|
onClick: () => {
|
|
205
205
|
setPresets(snapshot);
|
|
206
206
|
notification.remove(notiId);
|
|
@@ -242,7 +242,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
242
242
|
type="button"
|
|
243
243
|
class={resolvedStarBtnClass()}
|
|
244
244
|
onClick={handleStartAdd}
|
|
245
|
-
title="
|
|
245
|
+
title="Add preset"
|
|
246
246
|
>
|
|
247
247
|
<Icon icon={IconStar} size={iconSize} />
|
|
248
248
|
</button>
|
|
@@ -255,7 +255,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
255
255
|
type="button"
|
|
256
256
|
class={chipNameBtnClass}
|
|
257
257
|
onClick={() => handleRestore(preset)}
|
|
258
|
-
title={`"${preset.name}"
|
|
258
|
+
title={`Apply preset "${preset.name}"`}
|
|
259
259
|
>
|
|
260
260
|
{preset.name}
|
|
261
261
|
</button>
|
|
@@ -263,7 +263,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
263
263
|
type="button"
|
|
264
264
|
class={resolvedIconBtnClass()}
|
|
265
265
|
onClick={() => handleOverwrite(index())}
|
|
266
|
-
title="
|
|
266
|
+
title="Overwrite with current state"
|
|
267
267
|
>
|
|
268
268
|
<Icon icon={IconDeviceFloppy} size={iconSize} />
|
|
269
269
|
</button>
|
|
@@ -271,7 +271,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
271
271
|
type="button"
|
|
272
272
|
class={resolvedIconBtnClass()}
|
|
273
273
|
onClick={() => handleDelete(index())}
|
|
274
|
-
title="
|
|
274
|
+
title="Delete preset"
|
|
275
275
|
>
|
|
276
276
|
<Icon icon={IconX} size={iconSize} />
|
|
277
277
|
</button>
|
|
@@ -288,7 +288,7 @@ function StatePresetInner<TValue>(props: StatePresetProps<TValue>): JSX.Element
|
|
|
288
288
|
}}
|
|
289
289
|
type="text"
|
|
290
290
|
class={resolvedInputClass()}
|
|
291
|
-
placeholder="
|
|
291
|
+
placeholder="Name..."
|
|
292
292
|
autocomplete="one-time-code"
|
|
293
293
|
value={inputValue()}
|
|
294
294
|
onInput={(e) => setInputValue(e.currentTarget.value)}
|