@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
package/src/directives/ripple.ts
CHANGED
|
@@ -10,13 +10,13 @@ declare module "solid-js" {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Directive that adds a ripple effect to interactive elements.
|
|
14
14
|
*
|
|
15
15
|
* @remarks
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
19
|
-
* - `prefers-reduced-motion: reduce`
|
|
16
|
+
* - Creates an internal ripple-container div with overflow: hidden (no impact on parent element)
|
|
17
|
+
* - Changes position to `relative` only when the element is `static` (restores original value on cleanup)
|
|
18
|
+
* - Single ripple mode: removes the previous ripple on new click
|
|
19
|
+
* - Disables ripple when `prefers-reduced-motion: reduce` is set
|
|
20
20
|
*
|
|
21
21
|
* @example
|
|
22
22
|
* ```tsx
|
|
@@ -32,7 +32,7 @@ export function ripple(el: HTMLElement, accessor: Accessor<boolean>): void {
|
|
|
32
32
|
|
|
33
33
|
const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
34
34
|
|
|
35
|
-
// ripple container
|
|
35
|
+
// Create ripple container (handles overflow: hidden internally)
|
|
36
36
|
const ensureContainer = () => {
|
|
37
37
|
if (containerEl) return containerEl;
|
|
38
38
|
|
|
@@ -48,7 +48,7 @@ export function ripple(el: HTMLElement, accessor: Accessor<boolean>): void {
|
|
|
48
48
|
if (!accessor()) return;
|
|
49
49
|
if (prefersReducedMotion.matches) return;
|
|
50
50
|
|
|
51
|
-
//
|
|
51
|
+
// Check and apply position (required for container placement)
|
|
52
52
|
if (getComputedStyle(el).position === "static") {
|
|
53
53
|
if (!positionApplied) originalPosition = el.style.position;
|
|
54
54
|
el.style.position = "relative";
|
|
@@ -66,7 +66,7 @@ export function ripple(el: HTMLElement, accessor: Accessor<boolean>): void {
|
|
|
66
66
|
const x = event.clientX - rect.left;
|
|
67
67
|
const y = event.clientY - rect.top;
|
|
68
68
|
|
|
69
|
-
//
|
|
69
|
+
// Use the distance from the click position to the farthest corner as the radius
|
|
70
70
|
const maxDist = Math.max(
|
|
71
71
|
Math.hypot(x, y),
|
|
72
72
|
Math.hypot(rect.width - x, y),
|
|
@@ -2,7 +2,7 @@ import type { Component, ParentComponent } from "solid-js";
|
|
|
2
2
|
import { type Accessor, createContext, createMemo, createRoot, useContext } from "solid-js";
|
|
3
3
|
import type { IconProps } from "@tabler/icons-solidjs";
|
|
4
4
|
|
|
5
|
-
// ──
|
|
5
|
+
// ── Input Types ──
|
|
6
6
|
|
|
7
7
|
export interface AppStructureGroupItem<TModule> {
|
|
8
8
|
code: string;
|
|
@@ -37,7 +37,7 @@ export interface AppStructureSubPerm<TModule> {
|
|
|
37
37
|
perms: ("use" | "edit")[];
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
// ──
|
|
40
|
+
// ── Output Types ──
|
|
41
41
|
|
|
42
42
|
export interface AppMenu {
|
|
43
43
|
title: string;
|
|
@@ -81,7 +81,7 @@ export interface AppStructure<TModule> {
|
|
|
81
81
|
getTitleChainByHref(href: string): string[];
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
// ── Perms
|
|
84
|
+
// ── Perms Type Inference ──
|
|
85
85
|
|
|
86
86
|
type PermKey<TItem> = TItem extends { code: infer C extends string }
|
|
87
87
|
? TItem extends { children: any }
|
|
@@ -114,7 +114,7 @@ type InferPerms<TItems extends any[]> = {
|
|
|
114
114
|
: InferLeafPerms<Item>;
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
-
// ──
|
|
117
|
+
// ── Internal Helpers ──
|
|
118
118
|
|
|
119
119
|
function isGroupItem<TModule>(
|
|
120
120
|
item: AppStructureItem<TModule>,
|
|
@@ -234,12 +234,18 @@ function buildPerms<TModule>(
|
|
|
234
234
|
|
|
235
235
|
if (isGroupItem(item)) {
|
|
236
236
|
const children = buildPerms(item.children, href, usableModules);
|
|
237
|
+
if (children.length === 0) continue;
|
|
237
238
|
result.push({
|
|
238
239
|
title: item.title,
|
|
239
240
|
modules: item.modules,
|
|
240
241
|
children,
|
|
241
242
|
});
|
|
242
243
|
} else {
|
|
244
|
+
if (
|
|
245
|
+
(item.perms == null || item.perms.length === 0) &&
|
|
246
|
+
(item.subPerms == null || item.subPerms.length === 0)
|
|
247
|
+
)
|
|
248
|
+
continue;
|
|
243
249
|
result.push({
|
|
244
250
|
title: item.title,
|
|
245
251
|
href,
|
|
@@ -410,7 +416,7 @@ function findItemChainByCodes<TModule>(
|
|
|
410
416
|
return result;
|
|
411
417
|
}
|
|
412
418
|
|
|
413
|
-
// ──
|
|
419
|
+
// ── Main Function ──
|
|
414
420
|
|
|
415
421
|
function buildAppStructure<TModule, const TItems extends AppStructureItem<TModule>[]>(opts: {
|
|
416
422
|
items: TItems;
|
|
@@ -505,7 +511,7 @@ export function createAppStructure<TModule, const TItems extends AppStructureIte
|
|
|
505
511
|
|
|
506
512
|
const useAppStructure = (): TRet => {
|
|
507
513
|
const ctx = useContext(Ctx);
|
|
508
|
-
if (!ctx) throw new Error("AppStructureProvider
|
|
514
|
+
if (!ctx) throw new Error("AppStructureProvider is required.");
|
|
509
515
|
return ctx;
|
|
510
516
|
};
|
|
511
517
|
|
|
@@ -4,10 +4,10 @@ import type { JSX } from "solid-js";
|
|
|
4
4
|
type SlotSetter = (value: (() => JSX.Element) | undefined) => void;
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Factory function that creates a slot registration component.
|
|
8
8
|
*
|
|
9
|
-
* @param context - slot
|
|
10
|
-
* @param getSetter -
|
|
9
|
+
* @param context - Context to register the slot in
|
|
10
|
+
* @param getSetter - Function to extract the setter from the context value
|
|
11
11
|
*/
|
|
12
12
|
export function createSlotComponent<TCtx>(
|
|
13
13
|
context: Context<TCtx | undefined>,
|
|
@@ -15,7 +15,7 @@ export function createSlotComponent<TCtx>(
|
|
|
15
15
|
): ParentComponent {
|
|
16
16
|
return (props) => {
|
|
17
17
|
const ctx = useContext(context)!;
|
|
18
|
-
// eslint-disable-next-line solid/reactivity --
|
|
18
|
+
// eslint-disable-next-line solid/reactivity -- Slot registration runs only once on initial mount
|
|
19
19
|
getSetter(ctx)(() => props.children);
|
|
20
20
|
onCleanup(() => getSetter(ctx)(undefined));
|
|
21
21
|
return null;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import { type JSX } from "solid-js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Utility function that merges CSS styles.
|
|
5
5
|
*
|
|
6
6
|
* @remarks
|
|
7
|
-
* - string
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* - undefined
|
|
7
|
+
* - Supports both string and object style formats
|
|
8
|
+
* - Object styles are merged into a single object (later values take precedence)
|
|
9
|
+
* - Strings are parsed and merged
|
|
10
|
+
* - undefined values are ignored
|
|
11
11
|
*
|
|
12
12
|
* @example
|
|
13
13
|
* ```tsx
|
|
14
|
-
* // Object
|
|
14
|
+
* // Object merge
|
|
15
15
|
* mergeStyles({ color: "red" }, { background: "blue" })
|
|
16
16
|
* // => { color: "red", background: "blue" }
|
|
17
17
|
*
|
|
18
|
-
* // String
|
|
18
|
+
* // String merge
|
|
19
19
|
* mergeStyles("color: red;", "background: blue;")
|
|
20
20
|
* // => { color: "red", background: "blue" }
|
|
21
21
|
*
|
|
22
|
-
* // Mixed
|
|
22
|
+
* // Mixed merge
|
|
23
23
|
* mergeStyles({ color: "red" }, "background: blue;")
|
|
24
24
|
* // => { color: "red", background: "blue" }
|
|
25
25
|
* ```
|
|
@@ -33,7 +33,7 @@ export function mergeStyles(
|
|
|
33
33
|
if (style === undefined) continue;
|
|
34
34
|
|
|
35
35
|
if (typeof style === "string") {
|
|
36
|
-
// CSS string
|
|
36
|
+
// Parse CSS string
|
|
37
37
|
const declarations = style.split(";").filter((s) => s.trim());
|
|
38
38
|
for (const declaration of declarations) {
|
|
39
39
|
const colonIndex = declaration.indexOf(":");
|
|
@@ -42,7 +42,7 @@ export function mergeStyles(
|
|
|
42
42
|
const property = declaration.slice(0, colonIndex).trim();
|
|
43
43
|
const value = declaration.slice(colonIndex + 1).trim();
|
|
44
44
|
if (property && value) {
|
|
45
|
-
// kebab-case
|
|
45
|
+
// Convert kebab-case to camelCase
|
|
46
46
|
const camelProperty = property.replace(/-([a-z])/g, (_, letter: string) =>
|
|
47
47
|
letter.toUpperCase(),
|
|
48
48
|
);
|
|
@@ -50,7 +50,7 @@ export function mergeStyles(
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
} else {
|
|
53
|
-
//
|
|
53
|
+
// Merge object styles
|
|
54
54
|
Object.assign(result, style);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
import { createSignal, createEffect } from "solid-js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Utility type that restricts function types.
|
|
5
|
+
* If a function type is passed, it is converted to never, causing a compile-time error.
|
|
6
6
|
*
|
|
7
7
|
* @remarks
|
|
8
|
-
*
|
|
8
|
+
* To store a function, wrap it in an object: `createControllableSignal<{ fn: () => void }>(...)`
|
|
9
9
|
*/
|
|
10
10
|
type NotFunction<TValue> = TValue extends (...args: unknown[]) => unknown ? never : TValue;
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Signal hook that supports the controlled/uncontrolled pattern.
|
|
14
14
|
*
|
|
15
15
|
* @remarks
|
|
16
|
-
* - `onChange
|
|
17
|
-
* - `onChange
|
|
18
|
-
* -
|
|
16
|
+
* - When `onChange` is provided: controlled mode, value managed externally
|
|
17
|
+
* - When `onChange` is absent: uncontrolled mode, uses internal state
|
|
18
|
+
* - Supports functional setter: `setValue(prev => !prev)`
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```tsx
|
|
22
|
-
* // Controlled
|
|
22
|
+
* // Controlled mode (onOpenChange provided)
|
|
23
23
|
* const [open, setOpen] = createControllableSignal({
|
|
24
24
|
* value: () => props.open ?? false,
|
|
25
25
|
* onChange: () => props.onOpenChange,
|
|
26
26
|
* });
|
|
27
27
|
*
|
|
28
|
-
* // Uncontrolled
|
|
28
|
+
* // Uncontrolled mode (onOpenChange not provided)
|
|
29
29
|
* const [open, setOpen] = createControllableSignal({
|
|
30
30
|
* value: () => props.open ?? false,
|
|
31
31
|
* onChange: () => undefined,
|
|
32
32
|
* });
|
|
33
33
|
*
|
|
34
|
-
* //
|
|
34
|
+
* // Functional setter
|
|
35
35
|
* setOpen(prev => !prev);
|
|
36
36
|
* ```
|
|
37
37
|
*/
|
|
@@ -41,7 +41,7 @@ export function createControllableSignal<TValue>(options: {
|
|
|
41
41
|
}) {
|
|
42
42
|
const [internalValue, setInternalValue] = createSignal<TValue>(options.value());
|
|
43
43
|
|
|
44
|
-
//
|
|
44
|
+
// Sync internal state when props change (props take precedence)
|
|
45
45
|
createEffect(() => {
|
|
46
46
|
const propValue = options.value();
|
|
47
47
|
setInternalValue(() => propValue);
|
|
@@ -4,22 +4,22 @@ import type { SetStoreFunction } from "solid-js/store";
|
|
|
4
4
|
import { objClone } from "@simplysm/core-common";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Store hook that supports the controlled/uncontrolled pattern.
|
|
8
8
|
*
|
|
9
9
|
* @remarks
|
|
10
|
-
* - `onChange
|
|
11
|
-
* - `onChange
|
|
12
|
-
* -
|
|
10
|
+
* - When `onChange` is provided: controlled mode, notifies changes via onChange on setter calls
|
|
11
|
+
* - When `onChange` is absent: uncontrolled mode, uses internal store only
|
|
12
|
+
* - Supports all SetStoreFunction overloads (path-based, produce, reconcile, etc.)
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
15
|
* ```tsx
|
|
16
|
-
* // Controlled
|
|
16
|
+
* // Controlled mode (onItemsChange provided)
|
|
17
17
|
* const [items, setItems] = createControllableStore<Item[]>({
|
|
18
18
|
* value: () => props.items ?? [],
|
|
19
19
|
* onChange: () => props.onItemsChange,
|
|
20
20
|
* });
|
|
21
21
|
*
|
|
22
|
-
* // Uncontrolled
|
|
22
|
+
* // Uncontrolled mode (onItemsChange not provided)
|
|
23
23
|
* const [items, setItems] = createControllableStore<Item[]>({
|
|
24
24
|
* value: () => [],
|
|
25
25
|
* onChange: () => undefined,
|
|
@@ -32,12 +32,12 @@ export function createControllableStore<TValue extends object>(options: {
|
|
|
32
32
|
}): [TValue, SetStoreFunction<TValue>] {
|
|
33
33
|
const [store, rawSet] = createStore<TValue>(objClone(options.value()));
|
|
34
34
|
|
|
35
|
-
//
|
|
35
|
+
// Sync internal store when external value changes
|
|
36
36
|
createEffect(() => {
|
|
37
37
|
rawSet(reconcile(options.value()) as any);
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
//
|
|
40
|
+
// Wrap setter with a function wrapper to add onChange notification
|
|
41
41
|
const wrappedSet = ((...args: any[]) => {
|
|
42
42
|
const before = JSON.stringify(unwrap(store));
|
|
43
43
|
(rawSet as any)(...args);
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { createSignal, onCleanup } from "solid-js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* IME
|
|
4
|
+
* IME composition handling hook.
|
|
5
5
|
*
|
|
6
6
|
* @remarks
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
7
|
+
* Delays onValueChange during IME composition (e.g., Korean) to prevent DOM recreation (composition breakage).
|
|
8
|
+
* - During composition: only updates composingValue (for content div display)
|
|
9
|
+
* - On compositionEnd: delays setValue call via setTimeout(0)
|
|
10
|
+
* - Cleanup: immediately commits uncommitted value via flushComposition
|
|
11
11
|
*
|
|
12
|
-
* @param setValue -
|
|
13
|
-
* @returns IME
|
|
12
|
+
* @param setValue - Value commit function
|
|
13
|
+
* @returns IME handler object
|
|
14
14
|
*/
|
|
15
15
|
export function createIMEHandler(setValue: (value: string) => void) {
|
|
16
16
|
const [composingValue, setComposingValue] = createSignal<string | null>(null);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createSignal, createEffect, onCleanup } from "solid-js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Mount transition hook for open/close animations.
|
|
5
5
|
*
|
|
6
6
|
* @remarks
|
|
7
|
-
* - `open
|
|
8
|
-
* - `open
|
|
9
|
-
* -
|
|
7
|
+
* - When `open` becomes true: immediately sets `mounted=true`, then `animating=true` after double rAF
|
|
8
|
+
* - When `open` becomes false: immediately sets `animating=false`, then `mounted=false` after transitionend or fallback timer (200ms)
|
|
9
|
+
* - Used with CSS transitions: `mounted()` for DOM rendering, `animating()` for CSS class toggling
|
|
10
10
|
*/
|
|
11
11
|
export function createMountTransition(open: () => boolean): {
|
|
12
12
|
mounted: () => boolean;
|
|
@@ -113,7 +113,7 @@ export function createSelectionGroup(config: MultiGroupConfig | SingleGroupConfi
|
|
|
113
113
|
const ctx = useContext(Context);
|
|
114
114
|
if (!ctx)
|
|
115
115
|
throw new Error(
|
|
116
|
-
`${config.contextName}.Item
|
|
116
|
+
`${config.contextName}.Item can only be used inside ${config.contextName}`,
|
|
117
117
|
);
|
|
118
118
|
|
|
119
119
|
const isSelected = (): boolean => {
|
|
@@ -3,9 +3,9 @@ import { createSignal, type Accessor, type JSX } from "solid-js";
|
|
|
3
3
|
export type SlotAccessor = (() => JSX.Element) | undefined;
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Creates a signal for slot registration.
|
|
7
7
|
*
|
|
8
|
-
* @returns [accessor, setter]
|
|
8
|
+
* @returns [accessor, setter] -- setter is wrapped to store a function as a value
|
|
9
9
|
*/
|
|
10
10
|
export function createSlotSignal(): [Accessor<SlotAccessor>, (content: SlotAccessor) => void] {
|
|
11
11
|
const [slot, _setSlot] = createSignal<SlotAccessor>();
|
|
@@ -6,28 +6,28 @@ type StorageSetter<TValue> = (
|
|
|
6
6
|
) => TValue | undefined;
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* localStorage
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* localStorage-based storage hook.
|
|
10
|
+
* Always uses localStorage regardless of syncStorage settings.
|
|
11
|
+
* Used for data that should be maintained independently per device (auth tokens, device-specific state, etc.).
|
|
12
12
|
*
|
|
13
|
-
*
|
|
13
|
+
* Keys are automatically prefixed with ConfigContext's `clientName`. (`${clientName}.${key}`)
|
|
14
14
|
*
|
|
15
|
-
* @template T -
|
|
16
|
-
* @param key - localStorage
|
|
17
|
-
* @param initialValue -
|
|
18
|
-
* @returns [Accessor<T | undefined>, StorageSetter<T>]
|
|
15
|
+
* @template T - Type of the value to store
|
|
16
|
+
* @param key - localStorage key
|
|
17
|
+
* @param initialValue - Initial value (optional)
|
|
18
|
+
* @returns [Accessor<T | undefined>, StorageSetter<T>] tuple
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```tsx
|
|
22
22
|
* const [token, setToken] = useLocalStorage<string>("auth-token");
|
|
23
23
|
*
|
|
24
|
-
* //
|
|
24
|
+
* // Set value
|
|
25
25
|
* setToken("abc123");
|
|
26
26
|
*
|
|
27
|
-
* //
|
|
27
|
+
* // Read value
|
|
28
28
|
* console.log(token()); // "abc123"
|
|
29
29
|
*
|
|
30
|
-
* //
|
|
30
|
+
* // Remove value
|
|
31
31
|
* setToken(undefined);
|
|
32
32
|
* ```
|
|
33
33
|
*/
|
|
@@ -38,7 +38,7 @@ export function useLocalStorage<TValue>(
|
|
|
38
38
|
const config = useConfig();
|
|
39
39
|
const prefixedKey = `${config.clientName}.${key}`;
|
|
40
40
|
|
|
41
|
-
//
|
|
41
|
+
// Read initial value from localStorage
|
|
42
42
|
let storedValue: TValue | undefined = initialValue;
|
|
43
43
|
try {
|
|
44
44
|
const item = localStorage.getItem(prefixedKey);
|
|
@@ -46,7 +46,7 @@ export function useLocalStorage<TValue>(
|
|
|
46
46
|
storedValue = JSON.parse(item) as TValue;
|
|
47
47
|
}
|
|
48
48
|
} catch {
|
|
49
|
-
//
|
|
49
|
+
// Use initial value on JSON parse failure
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
const [value, setValue] = createSignal<TValue | undefined>(storedValue);
|
package/src/hooks/useLogger.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface Logger {
|
|
|
9
9
|
info: (...args: unknown[]) => void;
|
|
10
10
|
warn: (...args: unknown[]) => void;
|
|
11
11
|
error: (...args: unknown[]) => void;
|
|
12
|
-
/** LogAdapter
|
|
12
|
+
/** Inject LogAdapter later. Only usable inside LoggerProvider */
|
|
13
13
|
configure: (fn: (origin: LogAdapter) => LogAdapter) => void;
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -34,7 +34,7 @@ export function useLogger(): Logger {
|
|
|
34
34
|
error: createLogFunction("error"),
|
|
35
35
|
configure: (fn: (origin: LogAdapter) => LogAdapter) => {
|
|
36
36
|
if (!loggerCtx) {
|
|
37
|
-
throw new Error("configure()
|
|
37
|
+
throw new Error("configure() can only be used inside LoggerProvider");
|
|
38
38
|
}
|
|
39
39
|
loggerCtx.configure(fn);
|
|
40
40
|
},
|
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
import { useNavigate } from "@solidjs/router";
|
|
2
2
|
|
|
3
3
|
export interface RouterLinkOptions {
|
|
4
|
-
/**
|
|
4
|
+
/** Navigation path (complete URL, e.g., "/home/dashboard?tab=1") */
|
|
5
5
|
href: string;
|
|
6
6
|
|
|
7
|
-
/**
|
|
7
|
+
/** Data to pass during navigation (not exposed in the URL) */
|
|
8
8
|
state?: Record<string, unknown>;
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/** New window size on Shift+click */
|
|
11
11
|
window?: {
|
|
12
|
-
width?: number; //
|
|
13
|
-
height?: number; //
|
|
12
|
+
width?: number; // Default: 800
|
|
13
|
+
height?: number; // Default: 800
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Hook that handles router navigation.
|
|
19
19
|
*
|
|
20
20
|
* @remarks
|
|
21
|
-
* -
|
|
22
|
-
* - Ctrl/Alt +
|
|
23
|
-
* - Shift +
|
|
21
|
+
* - Normal click: SPA routing (useNavigate)
|
|
22
|
+
* - Ctrl/Alt + click: new tab
|
|
23
|
+
* - Shift + click: new window (with window option size applied)
|
|
24
24
|
*
|
|
25
25
|
* @example
|
|
26
26
|
* ```tsx
|
|
27
27
|
* const navigate = useRouterLink();
|
|
28
28
|
*
|
|
29
29
|
* <ListItem onClick={navigate({ href: "/home/dashboard" })}>
|
|
30
|
-
*
|
|
30
|
+
* Dashboard
|
|
31
31
|
* </ListItem>
|
|
32
32
|
*
|
|
33
|
-
* // state
|
|
33
|
+
* // Passing state
|
|
34
34
|
* <ListItem onClick={navigate({
|
|
35
35
|
* href: "/users/123",
|
|
36
36
|
* state: { from: "list" }
|
|
37
37
|
* })}>
|
|
38
|
-
*
|
|
38
|
+
* Users
|
|
39
39
|
* </ListItem>
|
|
40
40
|
* ```
|
|
41
41
|
*/
|
|
@@ -50,15 +50,15 @@ export function useRouterLink(): (
|
|
|
50
50
|
e.stopPropagation();
|
|
51
51
|
|
|
52
52
|
if (e.ctrlKey || e.metaKey || e.altKey) {
|
|
53
|
-
// Ctrl/Cmd/Alt +
|
|
53
|
+
// Ctrl/Cmd/Alt + click: new tab
|
|
54
54
|
window.open(options.href, "_blank");
|
|
55
55
|
} else if (e.shiftKey) {
|
|
56
|
-
// Shift +
|
|
56
|
+
// Shift + click: new window
|
|
57
57
|
const width = options.window?.width ?? 800;
|
|
58
58
|
const height = options.window?.height ?? 800;
|
|
59
59
|
window.open(options.href, "", `width=${width},height=${height}`);
|
|
60
60
|
} else {
|
|
61
|
-
//
|
|
61
|
+
// Normal click: SPA routing
|
|
62
62
|
navigate(options.href, options.state ? { state: options.state } : undefined);
|
|
63
63
|
}
|
|
64
64
|
};
|
package/src/index.ts
CHANGED
|
@@ -6,9 +6,6 @@ export * from "./components/form-control/Button";
|
|
|
6
6
|
// Select
|
|
7
7
|
export * from "./components/form-control/select/Select";
|
|
8
8
|
|
|
9
|
-
// SelectList
|
|
10
|
-
export * from "./components/form-control/select-list/SelectList";
|
|
11
|
-
|
|
12
9
|
// Combobox
|
|
13
10
|
export * from "./components/form-control/combobox/Combobox";
|
|
14
11
|
|
|
@@ -134,6 +131,10 @@ export * from "./providers/shared-data/SharedDataChangeEvent";
|
|
|
134
131
|
// SystemProvider
|
|
135
132
|
export * from "./providers/SystemProvider";
|
|
136
133
|
|
|
134
|
+
// I18n
|
|
135
|
+
export * from "./providers/i18n/I18nContext";
|
|
136
|
+
export * from "./providers/i18n/I18nContext.types";
|
|
137
|
+
|
|
137
138
|
//#endregion
|
|
138
139
|
|
|
139
140
|
//#region ========== Hooks ==========
|