@simplysm/solid 13.0.69 → 13.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -195
- package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/data/calendar/Calendar.js +15 -2
- package/dist/components/data/calendar/Calendar.js.map +2 -2
- package/dist/components/data/kanban/KanbanContext.js +2 -2
- package/dist/components/data/kanban/KanbanContext.js.map +1 -1
- package/dist/components/data/list/List.d.ts +8 -8
- package/dist/components/data/list/ListContext.d.ts +1 -1
- package/dist/components/data/list/ListItem.d.ts +15 -15
- package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.js +6 -4
- package/dist/components/data/sheet/DataSheet.js.map +2 -2
- package/dist/components/data/sheet/DataSheetConfigDialog.js +8 -8
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
- package/dist/components/data/sheet/types.d.ts +4 -4
- package/dist/components/data/sheet/types.d.ts.map +1 -1
- package/dist/components/disclosure/Collapse.d.ts +4 -4
- package/dist/components/disclosure/Dialog.d.ts +24 -24
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +7 -2
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/disclosure/DialogContext.d.ts +25 -25
- package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogContext.js +1 -1
- package/dist/components/disclosure/DialogContext.js.map +1 -1
- package/dist/components/disclosure/DialogInstanceContext.d.ts +7 -7
- package/dist/components/disclosure/DialogInstanceContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogProvider.d.ts +3 -3
- package/dist/components/disclosure/Dropdown.d.ts +26 -24
- package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
- package/dist/components/disclosure/Dropdown.js +24 -8
- package/dist/components/disclosure/Dropdown.js.map +2 -2
- package/dist/components/disclosure/Tabs.js +1 -1
- package/dist/components/disclosure/Tabs.js.map +1 -1
- package/dist/components/disclosure/dialogZIndex.d.ts +9 -7
- package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
- package/dist/components/disclosure/dialogZIndex.js +4 -0
- package/dist/components/disclosure/dialogZIndex.js.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +34 -22
- package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
- package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
- package/dist/components/features/crud-sheet/CrudSheet.js +48 -33
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/features/crudRegistry.d.ts +16 -0
- package/dist/components/features/crudRegistry.d.ts.map +1 -0
- package/dist/components/features/crudRegistry.js +37 -0
- package/dist/components/features/crudRegistry.js.map +6 -0
- package/dist/components/features/data-select-button/DataSelectButton.d.ts +14 -14
- package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.js +27 -9
- package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
- package/dist/components/features/permission-table/PermissionTable.d.ts +3 -3
- package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
- package/dist/components/features/permission-table/PermissionTable.js +74 -85
- package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelect.d.ts +12 -12
- package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelect.js +10 -6
- package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +10 -10
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts +23 -15
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +191 -65
- package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts +15 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts.map +1 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.js +27 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.js.map +6 -0
- package/dist/components/feedback/Progress.d.ts +1 -1
- package/dist/components/feedback/Progress.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContainer.d.ts +2 -2
- package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContext.d.ts +11 -11
- package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContext.js +1 -1
- package/dist/components/feedback/busy/BusyContext.js.map +1 -1
- package/dist/components/feedback/busy/BusyProvider.d.ts +6 -6
- package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js +7 -3
- package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
- package/dist/components/feedback/notification/NotificationBell.js +2 -2
- package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.d.ts +22 -22
- package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.js +1 -1
- package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.d.ts +5 -5
- package/dist/components/feedback/notification/NotificationProvider.js +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
- package/dist/components/feedback/print/PrintContext.js +1 -1
- package/dist/components/feedback/print/PrintContext.js.map +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.d.ts +7 -7
- package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.js +3 -3
- package/dist/components/form-control/checkbox/Checkbox.js +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
- package/dist/components/form-control/checkbox/Radio.js +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.d.ts +12 -12
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
- package/dist/components/form-control/combobox/Combobox.d.ts +22 -22
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/form-control/combobox/Combobox.js +2 -2
- package/dist/components/form-control/combobox/ComboboxContext.d.ts +4 -4
- package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -1
- package/dist/components/form-control/combobox/ComboboxContext.js +1 -1
- package/dist/components/form-control/combobox/ComboboxContext.js.map +1 -1
- package/dist/components/form-control/combobox/ComboboxItem.d.ts +3 -3
- package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -1
- package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts +14 -14
- package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -1
- package/dist/components/form-control/date-range-picker/DateRangePicker.js +20 -9
- package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
- package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
- package/dist/components/form-control/editor/EditorToolbar.js +65 -20
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
- package/dist/components/form-control/editor/RichTextEditor.d.ts +6 -6
- package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
- package/dist/components/form-control/editor/RichTextEditor.js +1 -1
- package/dist/components/form-control/editor/editor.css +5 -5
- package/dist/components/form-control/field/DatePicker.d.ts +22 -22
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DatePicker.js +4 -4
- package/dist/components/form-control/field/DatePicker.js.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.d.ts +21 -21
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.js +4 -4
- package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
- package/dist/components/form-control/field/FieldPlaceholder.d.ts +1 -1
- package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.d.ts +23 -23
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +4 -4
- package/dist/components/form-control/field/NumberInput.js.map +1 -1
- package/dist/components/form-control/field/TextInput.d.ts +25 -25
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
- package/dist/components/form-control/field/TextInput.js +5 -5
- package/dist/components/form-control/field/TextInput.js.map +1 -1
- package/dist/components/form-control/field/Textarea.d.ts +19 -19
- package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
- package/dist/components/form-control/field/Textarea.js +4 -4
- package/dist/components/form-control/field/Textarea.js.map +1 -1
- package/dist/components/form-control/field/TimePicker.d.ts +20 -20
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/TimePicker.js +4 -4
- package/dist/components/form-control/field/TimePicker.js.map +1 -1
- package/dist/components/form-control/numpad/Numpad.d.ts +11 -11
- package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.d.ts +26 -26
- package/dist/components/form-control/select/Select.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.js +34 -23
- package/dist/components/form-control/select/Select.js.map +2 -2
- package/dist/components/form-control/select/SelectContext.d.ts +7 -7
- package/dist/components/form-control/select/SelectContext.d.ts.map +1 -1
- package/dist/components/form-control/select/SelectContext.js +1 -1
- package/dist/components/form-control/select/SelectContext.js.map +1 -1
- package/dist/components/form-control/select/SelectItem.d.ts +4 -4
- package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.js +8 -8
- package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
- package/dist/components/layout/FormTable.js +4 -4
- package/dist/components/layout/sidebar/Sidebar.d.ts +5 -5
- package/dist/components/layout/sidebar/SidebarContainer.d.ts +11 -11
- package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarContainer.js +6 -1
- package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
- package/dist/components/layout/sidebar/SidebarContext.d.ts +7 -7
- package/dist/components/layout/sidebar/SidebarContext.js +1 -1
- package/dist/components/layout/sidebar/SidebarContext.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarMenu.d.ts +11 -11
- package/dist/components/layout/sidebar/SidebarUser.d.ts +14 -14
- package/dist/components/layout/topbar/Topbar.d.ts +6 -6
- package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
- package/dist/components/layout/topbar/Topbar.js +11 -6
- package/dist/components/layout/topbar/Topbar.js.map +2 -2
- package/dist/components/layout/topbar/TopbarContainer.d.ts +6 -6
- package/dist/components/layout/topbar/TopbarContext.js +2 -2
- package/dist/components/layout/topbar/TopbarContext.js.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.d.ts +11 -11
- package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.js +5 -1
- package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
- package/dist/components/layout/topbar/TopbarUser.d.ts +9 -9
- package/dist/directives/ripple.d.ts +5 -5
- package/dist/helpers/createAppStructure.d.ts.map +1 -1
- package/dist/helpers/createAppStructure.js +7 -3
- package/dist/helpers/createAppStructure.js.map +1 -1
- package/dist/helpers/createHmrSafeContext.d.ts +3 -0
- package/dist/helpers/createHmrSafeContext.d.ts.map +1 -0
- package/dist/helpers/createHmrSafeContext.js +10 -0
- package/dist/helpers/createHmrSafeContext.js.map +6 -0
- package/dist/helpers/createSlotComponent.d.ts +3 -3
- package/dist/helpers/mergeStyles.d.ts +8 -8
- package/dist/hooks/createControllableSignal.d.ts +10 -10
- package/dist/hooks/createControllableStore.d.ts +6 -6
- package/dist/hooks/createIMEHandler.d.ts +7 -7
- package/dist/hooks/createMountTransition.d.ts +4 -4
- package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
- package/dist/hooks/createSelectionGroup.js +4 -3
- package/dist/hooks/createSelectionGroup.js.map +2 -2
- package/dist/hooks/createSlotSignal.d.ts +2 -2
- package/dist/hooks/useLocalStorage.d.ts +11 -11
- package/dist/hooks/useLogger.d.ts +1 -1
- package/dist/hooks/useLogger.d.ts.map +1 -1
- package/dist/hooks/useLogger.js +1 -1
- package/dist/hooks/useLogger.js.map +1 -1
- package/dist/hooks/useRouterLink.d.ts +10 -10
- package/dist/hooks/useRouterLink.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/ClipboardProvider.d.ts +5 -5
- package/dist/providers/ConfigContext.d.ts +6 -6
- package/dist/providers/ConfigContext.js +2 -2
- package/dist/providers/ConfigContext.js.map +1 -1
- package/dist/providers/ErrorLoggerProvider.d.ts +3 -3
- package/dist/providers/LoggerContext.d.ts +13 -13
- package/dist/providers/PwaUpdateProvider.d.ts +4 -4
- package/dist/providers/PwaUpdateProvider.js +2 -2
- package/dist/providers/PwaUpdateProvider.js.map +1 -1
- package/dist/providers/ServiceClientContext.d.ts +8 -8
- package/dist/providers/ServiceClientContext.d.ts.map +1 -1
- package/dist/providers/ServiceClientContext.js +1 -1
- package/dist/providers/ServiceClientContext.js.map +1 -1
- package/dist/providers/ServiceClientProvider.d.ts +6 -6
- package/dist/providers/ServiceClientProvider.js +7 -7
- package/dist/providers/ServiceClientProvider.js.map +1 -1
- package/dist/providers/SyncStorageContext.d.ts +14 -14
- package/dist/providers/SystemProvider.d.ts.map +1 -1
- package/dist/providers/SystemProvider.js +21 -16
- package/dist/providers/SystemProvider.js.map +2 -2
- package/dist/providers/ThemeContext.d.ts +20 -20
- package/dist/providers/ThemeContext.d.ts.map +1 -1
- package/dist/providers/ThemeContext.js +1 -1
- package/dist/providers/ThemeContext.js.map +1 -1
- package/dist/providers/i18n/I18nContext.d.ts +44 -0
- package/dist/providers/i18n/I18nContext.d.ts.map +1 -0
- package/dist/providers/i18n/I18nContext.js +73 -0
- package/dist/providers/i18n/I18nContext.js.map +6 -0
- package/dist/providers/i18n/I18nContext.types.d.ts +28 -0
- package/dist/providers/i18n/I18nContext.types.d.ts.map +1 -0
- package/dist/providers/i18n/I18nContext.types.js +1 -0
- package/dist/providers/i18n/I18nContext.types.js.map +6 -0
- package/dist/providers/i18n/i18nUtils.d.ts +18 -0
- package/dist/providers/i18n/i18nUtils.d.ts.map +1 -0
- package/dist/providers/i18n/i18nUtils.js +25 -0
- package/dist/providers/i18n/i18nUtils.js.map +6 -0
- package/dist/providers/i18n/locales/en.d.ts +163 -0
- package/dist/providers/i18n/locales/en.d.ts.map +1 -0
- package/dist/providers/i18n/locales/en.js +165 -0
- package/dist/providers/i18n/locales/en.js.map +6 -0
- package/dist/providers/i18n/locales/ko.d.ts +163 -0
- package/dist/providers/i18n/locales/ko.d.ts.map +1 -0
- package/dist/providers/i18n/locales/ko.js +165 -0
- package/dist/providers/i18n/locales/ko.js.map +6 -0
- package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +4 -4
- package/dist/providers/shared-data/SharedDataContext.d.ts +28 -28
- package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataContext.js +1 -1
- package/dist/providers/shared-data/SharedDataContext.js.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.d.ts +9 -9
- package/dist/providers/shared-data/SharedDataProvider.js +4 -4
- package/dist/providers/shared-data/SharedDataProvider.js.map +1 -1
- package/package.json +9 -8
- package/src/components/data/calendar/Calendar.tsx +10 -4
- package/src/components/data/kanban/Kanban.tsx +14 -14
- package/src/components/data/kanban/KanbanContext.ts +3 -3
- package/src/components/data/list/List.tsx +10 -10
- package/src/components/data/list/ListContext.ts +1 -1
- package/src/components/data/list/ListItem.styles.ts +8 -8
- package/src/components/data/list/ListItem.tsx +15 -15
- package/src/components/data/sheet/DataSheet.styles.ts +22 -22
- package/src/components/data/sheet/DataSheet.tsx +52 -48
- package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +9 -9
- package/src/components/data/sheet/sheetUtils.ts +7 -7
- package/src/components/data/sheet/types.ts +16 -16
- package/src/components/disclosure/Collapse.tsx +11 -11
- package/src/components/disclosure/Dialog.tsx +60 -57
- package/src/components/disclosure/DialogContext.ts +26 -26
- package/src/components/disclosure/DialogInstanceContext.ts +7 -7
- package/src/components/disclosure/DialogProvider.tsx +5 -5
- package/src/components/disclosure/Dropdown.tsx +89 -75
- package/src/components/disclosure/Tabs.tsx +1 -1
- package/src/components/disclosure/dialogZIndex.ts +16 -11
- package/src/components/display/Echarts.tsx +4 -4
- package/src/components/features/address/AddressSearch.tsx +2 -2
- package/src/components/features/crud-detail/CrudDetail.tsx +34 -21
- package/src/components/features/crud-detail/CrudDetailAfter.tsx +1 -1
- package/src/components/features/crud-detail/CrudDetailBefore.tsx +1 -1
- package/src/components/features/crud-detail/CrudDetailTools.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheet.tsx +52 -40
- package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetFilter.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetHeader.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
- package/src/components/features/crudRegistry.ts +60 -0
- package/src/components/features/data-select-button/DataSelectButton.tsx +34 -32
- package/src/components/features/permission-table/PermissionTable.tsx +70 -64
- package/src/components/features/shared-data/SharedDataSelect.tsx +24 -22
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
- package/src/components/features/shared-data/SharedDataSelectList.tsx +231 -59
- package/src/components/features/shared-data/SharedDataSelectListContext.ts +39 -0
- package/src/components/feedback/Progress.tsx +1 -1
- package/src/components/feedback/busy/BusyContainer.tsx +6 -6
- package/src/components/feedback/busy/BusyContext.ts +12 -12
- package/src/components/feedback/busy/BusyProvider.tsx +6 -6
- package/src/components/feedback/notification/NotificationBanner.tsx +3 -1
- package/src/components/feedback/notification/NotificationBell.tsx +4 -4
- package/src/components/feedback/notification/NotificationContext.ts +28 -28
- package/src/components/feedback/notification/NotificationProvider.tsx +9 -9
- package/src/components/feedback/print/PrintContext.ts +1 -1
- package/src/components/form-control/Button.tsx +1 -1
- package/src/components/form-control/DropdownTrigger.styles.ts +1 -1
- package/src/components/form-control/Invalid.tsx +5 -5
- package/src/components/form-control/ThemeToggle.tsx +10 -10
- package/src/components/form-control/checkbox/Checkbox.styles.ts +8 -8
- package/src/components/form-control/checkbox/Checkbox.tsx +2 -2
- package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
- package/src/components/form-control/checkbox/Radio.tsx +2 -2
- package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
- package/src/components/form-control/color-picker/ColorPicker.tsx +17 -17
- package/src/components/form-control/combobox/Combobox.tsx +55 -55
- package/src/components/form-control/combobox/ComboboxContext.ts +5 -5
- package/src/components/form-control/combobox/ComboboxItem.tsx +3 -3
- package/src/components/form-control/date-range-picker/DateRangePicker.tsx +40 -26
- package/src/components/form-control/editor/EditorToolbar.tsx +52 -50
- package/src/components/form-control/editor/RichTextEditor.tsx +16 -16
- package/src/components/form-control/editor/editor.css +5 -5
- package/src/components/form-control/field/DatePicker.tsx +39 -39
- package/src/components/form-control/field/DateTimePicker.tsx +38 -38
- package/src/components/form-control/field/Field.styles.ts +11 -11
- package/src/components/form-control/field/FieldPlaceholder.tsx +1 -1
- package/src/components/form-control/field/NumberInput.tsx +63 -63
- package/src/components/form-control/field/TextInput.tsx +48 -48
- package/src/components/form-control/field/Textarea.tsx +32 -32
- package/src/components/form-control/field/TimePicker.tsx +37 -37
- package/src/components/form-control/numpad/Numpad.tsx +26 -26
- package/src/components/form-control/select/Select.tsx +82 -86
- package/src/components/form-control/select/SelectContext.ts +8 -8
- package/src/components/form-control/select/SelectItem.tsx +5 -5
- package/src/components/form-control/state-preset/StatePreset.tsx +13 -13
- package/src/components/layout/FormTable.tsx +4 -4
- package/src/components/layout/sidebar/Sidebar.tsx +8 -8
- package/src/components/layout/sidebar/SidebarContainer.tsx +19 -17
- package/src/components/layout/sidebar/SidebarContext.ts +8 -8
- package/src/components/layout/sidebar/SidebarMenu.tsx +19 -19
- package/src/components/layout/sidebar/SidebarUser.tsx +14 -14
- package/src/components/layout/topbar/Topbar.tsx +15 -13
- package/src/components/layout/topbar/TopbarContainer.tsx +6 -6
- package/src/components/layout/topbar/TopbarContext.ts +2 -2
- package/src/components/layout/topbar/TopbarMenu.tsx +18 -16
- package/src/components/layout/topbar/TopbarUser.tsx +9 -9
- package/src/directives/ripple.ts +8 -8
- package/src/helpers/createAppStructure.ts +15 -8
- package/src/helpers/createHmrSafeContext.ts +8 -0
- package/src/helpers/createSlotComponent.ts +4 -4
- package/src/helpers/mergeStyles.ts +11 -11
- package/src/hooks/createControllableSignal.ts +11 -11
- package/src/hooks/createControllableStore.ts +8 -8
- package/src/hooks/createIMEHandler.ts +7 -7
- package/src/hooks/createMountTransition.ts +4 -4
- package/src/hooks/createSelectionGroup.tsx +5 -3
- package/src/hooks/createSlotSignal.ts +2 -2
- package/src/hooks/useLocalStorage.ts +13 -13
- package/src/hooks/useLogger.ts +2 -2
- package/src/hooks/useRouterLink.ts +15 -15
- package/src/index.ts +4 -3
- package/src/providers/ClipboardProvider.tsx +19 -19
- package/src/providers/ConfigContext.tsx +8 -8
- package/src/providers/ErrorLoggerProvider.tsx +3 -3
- package/src/providers/LoggerContext.tsx +13 -13
- package/src/providers/PwaUpdateProvider.tsx +6 -6
- package/src/providers/ServiceClientContext.ts +9 -9
- package/src/providers/ServiceClientProvider.tsx +15 -15
- package/src/providers/SyncStorageContext.tsx +15 -15
- package/src/providers/SystemProvider.tsx +15 -12
- package/src/providers/ThemeContext.tsx +26 -26
- package/src/providers/i18n/I18nContext.tsx +129 -0
- package/src/providers/i18n/I18nContext.types.ts +30 -0
- package/src/providers/i18n/i18nUtils.ts +38 -0
- package/src/providers/i18n/locales/en.ts +161 -0
- package/src/providers/i18n/locales/ko.ts +161 -0
- package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -4
- package/src/providers/shared-data/SharedDataContext.ts +29 -29
- package/src/providers/shared-data/SharedDataProvider.tsx +21 -21
- package/src/styles/patterns.styles.ts +6 -6
- package/src/styles/tokens.styles.ts +5 -5
- package/tailwind.config.ts +1 -1
- package/tailwind.css +4 -4
- package/tests/components/data/List.spec.tsx +689 -0
- package/tests/components/data/Pagination.spec.tsx +336 -0
- package/tests/components/data/Table.spec.tsx +55 -0
- package/tests/components/data/kanban/Kanban.selection.spec.tsx +213 -0
- package/tests/components/data/sheet/DataSheet.spec.tsx +645 -0
- package/tests/components/disclosure/Collapse.spec.tsx +173 -0
- package/tests/components/disclosure/Dialog.spec.tsx +438 -0
- package/tests/components/disclosure/DialogProvider.spec.tsx +142 -0
- package/tests/components/disclosure/Dropdown.spec.tsx +333 -0
- package/tests/components/disclosure/Tabs.spec.tsx +220 -0
- package/tests/components/disclosure/dialogZIndex.spec.ts +45 -0
- package/tests/components/display/Alert.spec.tsx +47 -0
- package/tests/components/display/Barcode.spec.tsx +61 -0
- package/tests/components/display/Card.spec.tsx +41 -0
- package/tests/components/display/Link.spec.tsx +62 -0
- package/tests/components/display/Tag.spec.tsx +47 -0
- package/tests/components/features/address/AddressSearch.spec.tsx +45 -0
- package/tests/components/features/crud-detail/CrudDetail.spec.tsx +537 -0
- package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +491 -0
- package/tests/components/features/crudRegistry.spec.ts +119 -0
- package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +482 -0
- package/tests/components/features/permission-table/PermissionTable.spec.tsx +288 -0
- package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +448 -0
- package/tests/components/feedback/busy/BusyContainer.spec.tsx +80 -0
- package/tests/components/feedback/notification/LiveRegion.spec.tsx +52 -0
- package/tests/components/feedback/notification/NotificationBanner.spec.tsx +187 -0
- package/tests/components/feedback/notification/NotificationBell.spec.tsx +226 -0
- package/tests/components/feedback/notification/NotificationContext.spec.tsx +362 -0
- package/tests/components/feedback/print/Print.spec.tsx +45 -0
- package/tests/components/form-control/Button.spec.tsx +119 -0
- package/tests/components/form-control/Invalid.spec.tsx +131 -0
- package/tests/components/form-control/checkbox/Checkbox.spec.tsx +137 -0
- package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +108 -0
- package/tests/components/form-control/checkbox/Radio.spec.tsx +138 -0
- package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +108 -0
- package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +94 -0
- package/tests/components/form-control/combobox/Combobox.spec.tsx +253 -0
- package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +88 -0
- package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +208 -0
- package/tests/components/form-control/field/DatePicker.spec.tsx +381 -0
- package/tests/components/form-control/field/DateTimePicker.spec.tsx +383 -0
- package/tests/components/form-control/field/NumberInput.spec.tsx +371 -0
- package/tests/components/form-control/field/TextInput.spec.tsx +341 -0
- package/tests/components/form-control/field/Textarea.spec.tsx +224 -0
- package/tests/components/form-control/field/TimePicker.spec.tsx +315 -0
- package/tests/components/form-control/numpad/Numpad.spec.tsx +248 -0
- package/tests/components/form-control/select/Select.spec.tsx +676 -0
- package/tests/components/form-control/select/SelectItem.spec.tsx +174 -0
- package/tests/components/layout/FormGroup.spec.tsx +104 -0
- package/tests/components/layout/FormTable.spec.tsx +43 -0
- package/tests/components/layout/sidebar/Sidebar.spec.tsx +192 -0
- package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +261 -0
- package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +219 -0
- package/tests/components/layout/sidebar/SidebarUser.spec.tsx +133 -0
- package/tests/components/layout/topbar/TopbarActions.spec.tsx +77 -0
- package/tests/components/layout/topbar/TopbarContainer.spec.tsx +38 -0
- package/tests/components/layout/topbar/createTopbarActions.spec.tsx +66 -0
- package/tests/directives/ripple.spec.tsx +130 -0
- package/tests/helpers/createAppStructure.spec.tsx +843 -0
- package/tests/helpers/mergeStyles.spec.ts +172 -0
- package/tests/hooks/createControllableSignal.spec.ts +194 -0
- package/tests/hooks/createIMEHandler.spec.ts +80 -0
- package/tests/hooks/createMountTransition.spec.ts +86 -0
- package/tests/hooks/useLocalStorage.spec.tsx +223 -0
- package/tests/hooks/useLogger.spec.tsx +116 -0
- package/tests/hooks/usePrint.spec.tsx +134 -0
- package/tests/hooks/useRouterLink.spec.tsx +183 -0
- package/tests/hooks/useSyncConfig.spec.tsx +304 -0
- package/tests/providers/ClipboardProvider.spec.tsx +20 -0
- package/tests/providers/ConfigContext.spec.tsx +42 -0
- package/tests/providers/ErrorLoggerProvider.spec.tsx +73 -0
- package/tests/providers/LoggerContext.spec.tsx +76 -0
- package/tests/providers/PwaUpdateProvider.spec.tsx +22 -0
- package/tests/providers/ServiceClientContext.spec.tsx +88 -0
- package/tests/providers/SyncStorageContext.spec.tsx +77 -0
- package/tests/providers/i18n/I18nContext.spec.tsx +110 -0
- package/tests/providers/shared-data/SharedDataProvider.spec.tsx +401 -0
- package/tests/vitest-env.d.ts +1 -0
- package/dist/components/form-control/select-list/SelectList.d.ts +0 -54
- package/dist/components/form-control/select-list/SelectList.d.ts.map +0 -1
- package/dist/components/form-control/select-list/SelectList.js +0 -280
- package/dist/components/form-control/select-list/SelectList.js.map +0 -6
- package/dist/components/form-control/select-list/SelectListContext.d.ts +0 -13
- package/dist/components/form-control/select-list/SelectListContext.d.ts.map +0 -1
- package/dist/components/form-control/select-list/SelectListContext.js +0 -14
- package/dist/components/form-control/select-list/SelectListContext.js.map +0 -6
- package/docs/data-components.md +0 -782
- package/docs/disclosure.md +0 -254
- package/docs/display.md +0 -153
- package/docs/feedback.md +0 -238
- package/docs/form-controls.md +0 -1068
- package/docs/helpers.md +0 -54
- package/docs/hooks.md +0 -588
- package/docs/layout.md +0 -384
- package/docs/providers.md +0 -211
- package/docs/styling.md +0 -184
- package/src/components/form-control/select-list/SelectList.tsx +0 -385
- package/src/components/form-control/select-list/SelectListContext.ts +0 -23
package/docs/layout.md
DELETED
|
@@ -1,384 +0,0 @@
|
|
|
1
|
-
# Layout Components
|
|
2
|
-
|
|
3
|
-
## Sidebar
|
|
4
|
-
|
|
5
|
-
Sidebar navigation with responsive support (mobile overlay below 520px). Open/closed state is in-memory only (resets on page refresh).
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
import { Sidebar, Topbar } from "@simplysm/solid";
|
|
9
|
-
import { useNavigate } from "@solidjs/router";
|
|
10
|
-
|
|
11
|
-
const navigate = useNavigate();
|
|
12
|
-
|
|
13
|
-
<Sidebar.Container>
|
|
14
|
-
<Sidebar>
|
|
15
|
-
<Sidebar.User
|
|
16
|
-
name="John Doe"
|
|
17
|
-
description="john@example.com"
|
|
18
|
-
menus={[
|
|
19
|
-
{ title: "Profile", onClick: () => navigate("/profile") },
|
|
20
|
-
{ title: "Logout", onClick: handleLogout },
|
|
21
|
-
]}
|
|
22
|
-
/>
|
|
23
|
-
<Sidebar.Menu menus={menuItems} />
|
|
24
|
-
</Sidebar>
|
|
25
|
-
<div class="flex flex-1 flex-col">
|
|
26
|
-
<Topbar>
|
|
27
|
-
<h1>App Name</h1>
|
|
28
|
-
</Topbar>
|
|
29
|
-
<main class="flex-1 overflow-auto p-4">
|
|
30
|
-
{/* main content */}
|
|
31
|
-
</main>
|
|
32
|
-
</div>
|
|
33
|
-
</Sidebar.Container>
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
**Sub-components:**
|
|
37
|
-
- `Sidebar.Container` -- Container wrapping sidebar and main area (required)
|
|
38
|
-
- `Sidebar.Menu` -- Menu items list (`menus: SidebarMenuItem[]`)
|
|
39
|
-
- `Sidebar.User` -- User info area with avatar and optional dropdown menu
|
|
40
|
-
|
|
41
|
-
**Sidebar.User Props:**
|
|
42
|
-
|
|
43
|
-
| Prop | Type | Default | Description |
|
|
44
|
-
|------|------|---------|-------------|
|
|
45
|
-
| `name` | `string` | **(required)** | User name |
|
|
46
|
-
| `description` | `string` | - | Optional additional info (email, role, etc.). If omitted, only name is shown |
|
|
47
|
-
| `icon` | `Component<TablerIconProps>` | `IconUser` | Avatar icon (Tabler Icons component). Rendered in a circular badge |
|
|
48
|
-
| `menus` | `SidebarUserMenu[]` | - | Dropdown menu items. When present, component becomes clickable |
|
|
49
|
-
|
|
50
|
-
**SidebarUserMenu type:**
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
53
|
-
interface SidebarUserMenu {
|
|
54
|
-
title: string;
|
|
55
|
-
onClick: () => void;
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**SidebarMenuItem type:**
|
|
60
|
-
|
|
61
|
-
```typescript
|
|
62
|
-
interface SidebarMenuItem {
|
|
63
|
-
title: string;
|
|
64
|
-
href?: string;
|
|
65
|
-
icon?: Component<IconProps>;
|
|
66
|
-
children?: SidebarMenuItem[];
|
|
67
|
-
}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**useSidebarContext / useSidebarContextOptional hooks:**
|
|
71
|
-
|
|
72
|
-
```tsx
|
|
73
|
-
import { useSidebarContext, useSidebarContextOptional } from "@simplysm/solid";
|
|
74
|
-
|
|
75
|
-
// Throws if not inside Sidebar.Container
|
|
76
|
-
const sidebar = useSidebarContext();
|
|
77
|
-
sidebar.toggle(); // current open/closed state
|
|
78
|
-
sidebar.setToggle(false); // programmatically close
|
|
79
|
-
|
|
80
|
-
// Returns undefined if not inside Sidebar.Container (no error)
|
|
81
|
-
const sidebarOpt = useSidebarContextOptional();
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**SM_MEDIA_QUERY constant:**
|
|
85
|
-
|
|
86
|
-
Exported media query string matching the Tailwind `sm:` breakpoint (640px). Use this to align custom responsive logic with sidebar behavior.
|
|
87
|
-
|
|
88
|
-
```typescript
|
|
89
|
-
import { SM_MEDIA_QUERY } from "@simplysm/solid";
|
|
90
|
-
|
|
91
|
-
const mql = window.matchMedia(SM_MEDIA_QUERY); // "(min-width: 640px)"
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Topbar
|
|
97
|
-
|
|
98
|
-
Top navigation bar. When used inside `Sidebar.Container`, a sidebar toggle button appears automatically.
|
|
99
|
-
|
|
100
|
-
```tsx
|
|
101
|
-
import { Topbar } from "@simplysm/solid";
|
|
102
|
-
import { IconSettings, IconUser } from "@tabler/icons-solidjs";
|
|
103
|
-
|
|
104
|
-
const menuItems: TopbarMenuItem[] = [
|
|
105
|
-
{ title: "Settings", icon: IconSettings, href: "/settings" },
|
|
106
|
-
{
|
|
107
|
-
title: "Admin",
|
|
108
|
-
icon: IconUser,
|
|
109
|
-
children: [
|
|
110
|
-
{ title: "Users", href: "/admin/users" },
|
|
111
|
-
{ title: "Roles", href: "/admin/roles" },
|
|
112
|
-
],
|
|
113
|
-
},
|
|
114
|
-
];
|
|
115
|
-
|
|
116
|
-
const userMenus: TopbarUserMenu[] = [
|
|
117
|
-
{ title: "Profile", onClick: () => navigate("/profile") },
|
|
118
|
-
{ title: "Logout", onClick: handleLogout },
|
|
119
|
-
];
|
|
120
|
-
|
|
121
|
-
<Topbar>
|
|
122
|
-
<h1 class="text-lg font-bold">App Name</h1>
|
|
123
|
-
<Topbar.Menu menus={menuItems} />
|
|
124
|
-
<div class="flex-1" />
|
|
125
|
-
<Topbar.User menus={userMenus}>User</Topbar.User>
|
|
126
|
-
</Topbar>
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
**Sub-components:**
|
|
130
|
-
- `Topbar.Container` -- Container wrapping topbar and main content, provides `TopbarContext`
|
|
131
|
-
- `Topbar.Actions` -- Slot outlet that renders actions registered via `createTopbarActions`
|
|
132
|
-
- `Topbar.Menu` -- Menu items list
|
|
133
|
-
- `Topbar.User` -- User menu (dropdown)
|
|
134
|
-
|
|
135
|
-
### Topbar Actions Slot
|
|
136
|
-
|
|
137
|
-
A slot pattern that lets child pages inject action buttons (save, delete, etc.) into the topbar. The parent layout defines **where** actions appear, child pages define **what** to show.
|
|
138
|
-
|
|
139
|
-
**Layout (define the slot):**
|
|
140
|
-
|
|
141
|
-
```tsx
|
|
142
|
-
import { Topbar } from "@simplysm/solid";
|
|
143
|
-
|
|
144
|
-
<Topbar.Container>
|
|
145
|
-
<Topbar>
|
|
146
|
-
<span>Title</span>
|
|
147
|
-
<Topbar.Actions />
|
|
148
|
-
<div class="flex-1" />
|
|
149
|
-
</Topbar>
|
|
150
|
-
<main class="flex-1 overflow-auto p-4">
|
|
151
|
-
{props.children}
|
|
152
|
-
</main>
|
|
153
|
-
</Topbar.Container>
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
**Child page (fill the slot):**
|
|
157
|
-
|
|
158
|
-
```tsx
|
|
159
|
-
import { createTopbarActions, Button } from "@simplysm/solid";
|
|
160
|
-
|
|
161
|
-
function UserPage() {
|
|
162
|
-
createTopbarActions(() => (
|
|
163
|
-
<>
|
|
164
|
-
<Button theme="primary">Save</Button>
|
|
165
|
-
<Button>Cancel</Button>
|
|
166
|
-
</>
|
|
167
|
-
));
|
|
168
|
-
|
|
169
|
-
return <div>...</div>;
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
When `UserPage` mounts, the buttons appear in the topbar. When it unmounts, the actions are automatically cleaned up via `onCleanup`.
|
|
174
|
-
|
|
175
|
-
**createTopbarActions(accessor: () => JSX.Element): void**
|
|
176
|
-
|
|
177
|
-
Registers actions in the nearest `Topbar.Container` scope. Automatically removes actions on component unmount. Must be called inside `Topbar.Container`.
|
|
178
|
-
|
|
179
|
-
**useTopbarActionsAccessor(): Accessor<JSX.Element | undefined>**
|
|
180
|
-
|
|
181
|
-
Returns the actions accessor directly. For advanced use cases such as building custom topbar components. Must be called inside `Topbar.Container`.
|
|
182
|
-
|
|
183
|
-
```tsx
|
|
184
|
-
import { useTopbarActionsAccessor } from "@simplysm/solid";
|
|
185
|
-
|
|
186
|
-
const actions = useTopbarActionsAccessor();
|
|
187
|
-
// actions() returns the currently registered JSX.Element or undefined
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
**TopbarContext:**
|
|
191
|
-
|
|
192
|
-
`TopbarContext` is exported for building custom topbar layouts. `Topbar.Container` wraps children with `TopbarContext.Provider`, sharing `actions` accessor and `setActions` setter.
|
|
193
|
-
|
|
194
|
-
```typescript
|
|
195
|
-
import { TopbarContext } from "@simplysm/solid";
|
|
196
|
-
|
|
197
|
-
interface TopbarContextValue {
|
|
198
|
-
actions: Accessor<JSX.Element | undefined>;
|
|
199
|
-
setActions: Setter<JSX.Element | undefined>;
|
|
200
|
-
}
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
**TopbarMenuItem type:**
|
|
204
|
-
|
|
205
|
-
```typescript
|
|
206
|
-
interface TopbarMenuItem {
|
|
207
|
-
title: string;
|
|
208
|
-
href?: string;
|
|
209
|
-
icon?: Component<IconProps>;
|
|
210
|
-
children?: TopbarMenuItem[]; // supports unlimited nesting
|
|
211
|
-
}
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
**TopbarUserMenu type:**
|
|
215
|
-
|
|
216
|
-
```typescript
|
|
217
|
-
interface TopbarUserMenu {
|
|
218
|
-
title: string;
|
|
219
|
-
onClick: () => void;
|
|
220
|
-
}
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
---
|
|
224
|
-
|
|
225
|
-
## FormGroup
|
|
226
|
-
|
|
227
|
-
Layout component for arranging form fields with labels vertically or inline.
|
|
228
|
-
|
|
229
|
-
```tsx
|
|
230
|
-
import { FormGroup, TextInput } from "@simplysm/solid";
|
|
231
|
-
|
|
232
|
-
// Vertical layout (default)
|
|
233
|
-
<FormGroup>
|
|
234
|
-
<FormGroup.Item label="Name">
|
|
235
|
-
<TextInput value={name()} onValueChange={setName} />
|
|
236
|
-
</FormGroup.Item>
|
|
237
|
-
<FormGroup.Item label="Email">
|
|
238
|
-
<TextInput type="email" value={email()} onValueChange={setEmail} />
|
|
239
|
-
</FormGroup.Item>
|
|
240
|
-
</FormGroup>
|
|
241
|
-
|
|
242
|
-
// Inline layout
|
|
243
|
-
<FormGroup inline>
|
|
244
|
-
<FormGroup.Item label="Search">
|
|
245
|
-
<TextInput value={query()} onValueChange={setQuery} />
|
|
246
|
-
</FormGroup.Item>
|
|
247
|
-
<FormGroup.Item>
|
|
248
|
-
<Button theme="primary">Search</Button>
|
|
249
|
-
</FormGroup.Item>
|
|
250
|
-
</FormGroup>
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
| Prop | Type | Default | Description |
|
|
254
|
-
|------|------|---------|-------------|
|
|
255
|
-
| `inline` | `boolean` | `false` | Inline layout mode |
|
|
256
|
-
|
|
257
|
-
**Sub-components:**
|
|
258
|
-
- `FormGroup.Item` -- Form item (`label?: JSX.Element`)
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## FormTable
|
|
263
|
-
|
|
264
|
-
`<table>`-based form layout. Labels go in `<th>`, input fields in `<td>`.
|
|
265
|
-
|
|
266
|
-
```tsx
|
|
267
|
-
import { FormTable, TextInput, NumberInput } from "@simplysm/solid";
|
|
268
|
-
|
|
269
|
-
<FormTable>
|
|
270
|
-
<tbody>
|
|
271
|
-
<tr>
|
|
272
|
-
<th>Name</th>
|
|
273
|
-
<td><TextInput value={name()} onValueChange={setName} /></td>
|
|
274
|
-
<th>Age</th>
|
|
275
|
-
<td><NumberInput value={age()} onValueChange={setAge} /></td>
|
|
276
|
-
</tr>
|
|
277
|
-
<tr>
|
|
278
|
-
<th>Email</th>
|
|
279
|
-
<td colSpan={3}><TextInput type="email" value={email()} onValueChange={setEmail} /></td>
|
|
280
|
-
</tr>
|
|
281
|
-
</tbody>
|
|
282
|
-
</FormTable>
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## Kanban
|
|
288
|
-
|
|
289
|
-
Kanban board layout component with drag-and-drop cards, lane collapse, multi-select, and busy states.
|
|
290
|
-
|
|
291
|
-
```tsx
|
|
292
|
-
import { createSignal, For } from "solid-js";
|
|
293
|
-
import { Button, Icon, Kanban, type KanbanDropInfo } from "@simplysm/solid";
|
|
294
|
-
import { IconPlus } from "@tabler/icons-solidjs";
|
|
295
|
-
|
|
296
|
-
const [selected, setSelected] = createSignal<unknown[]>([]);
|
|
297
|
-
|
|
298
|
-
const handleDrop = (info: KanbanDropInfo) => {
|
|
299
|
-
// info.sourceValue: dragged card value
|
|
300
|
-
// info.targetLaneValue: target lane value
|
|
301
|
-
// info.targetCardValue: target card value (undefined if dropped on empty area)
|
|
302
|
-
// info.position: "before" | "after" | undefined
|
|
303
|
-
moveCard(info);
|
|
304
|
-
};
|
|
305
|
-
|
|
306
|
-
<div class="h-[500px]">
|
|
307
|
-
<Kanban
|
|
308
|
-
selectedValues={selected()}
|
|
309
|
-
onSelectedValuesChange={setSelected}
|
|
310
|
-
onDrop={handleDrop}
|
|
311
|
-
>
|
|
312
|
-
<For each={lanes()}>
|
|
313
|
-
{(lane) => (
|
|
314
|
-
<Kanban.Lane value={lane.id} collapsible busy={lane.busy}>
|
|
315
|
-
<Kanban.LaneTitle>
|
|
316
|
-
{lane.title} ({lane.cards.length})
|
|
317
|
-
</Kanban.LaneTitle>
|
|
318
|
-
<Kanban.LaneTools>
|
|
319
|
-
<Button size="sm" variant="ghost">
|
|
320
|
-
<Icon icon={IconPlus} />
|
|
321
|
-
</Button>
|
|
322
|
-
</Kanban.LaneTools>
|
|
323
|
-
<For each={lane.cards}>
|
|
324
|
-
{(card) => (
|
|
325
|
-
<Kanban.Card value={card.id} selectable draggable contentClass="p-2">
|
|
326
|
-
{card.title}
|
|
327
|
-
</Kanban.Card>
|
|
328
|
-
)}
|
|
329
|
-
</For>
|
|
330
|
-
</Kanban.Lane>
|
|
331
|
-
)}
|
|
332
|
-
</For>
|
|
333
|
-
</Kanban>
|
|
334
|
-
</div>
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
**Kanban Props:**
|
|
338
|
-
|
|
339
|
-
| Prop | Type | Default | Description |
|
|
340
|
-
|------|------|---------|-------------|
|
|
341
|
-
| `onDrop` | `(info: KanbanDropInfo) => void` | - | Drop event handler |
|
|
342
|
-
| `selectedValues` | `unknown[]` | - | Selected card values |
|
|
343
|
-
| `onSelectedValuesChange` | `(values: unknown[]) => void` | - | Selection change callback |
|
|
344
|
-
|
|
345
|
-
`KanbanDropInfo`: `{ sourceValue?: unknown; targetLaneValue?: unknown; targetCardValue?: unknown; position?: "before" | "after" }`
|
|
346
|
-
|
|
347
|
-
**Kanban.Lane Props:**
|
|
348
|
-
|
|
349
|
-
| Prop | Type | Default | Description |
|
|
350
|
-
|------|------|---------|-------------|
|
|
351
|
-
| `value` | `unknown` | - | Lane identifier |
|
|
352
|
-
| `busy` | `boolean` | - | Show busy bar |
|
|
353
|
-
| `collapsible` | `boolean` | - | Allow collapse/expand |
|
|
354
|
-
| `collapsed` | `boolean` | - | Collapsed state (controlled) |
|
|
355
|
-
| `onCollapsedChange` | `(collapsed: boolean) => void` | - | Collapse state callback |
|
|
356
|
-
|
|
357
|
-
**Kanban.Card Props:**
|
|
358
|
-
|
|
359
|
-
| Prop | Type | Default | Description |
|
|
360
|
-
|------|------|---------|-------------|
|
|
361
|
-
| `value` | `unknown` | - | Card identifier |
|
|
362
|
-
| `draggable` | `boolean` | `true` | Enable drag |
|
|
363
|
-
| `selectable` | `boolean` | `false` | Enable selection |
|
|
364
|
-
| `contentClass` | `string` | - | Card content class |
|
|
365
|
-
|
|
366
|
-
**Sub-components:**
|
|
367
|
-
- `Kanban.Lane` -- Board lane/column
|
|
368
|
-
- `Kanban.LaneTitle` -- Lane header title area
|
|
369
|
-
- `Kanban.LaneTools` -- Lane header action buttons
|
|
370
|
-
- `Kanban.Card` -- Draggable card
|
|
371
|
-
|
|
372
|
-
**Selection:** Shift+Click for multi-select, long press for single select. Lane header checkbox toggles all cards in the lane.
|
|
373
|
-
|
|
374
|
-
**KanbanContext:**
|
|
375
|
-
|
|
376
|
-
`KanbanContext` and `useKanbanContext` are exported for building custom Kanban card/lane sub-components. `useKanbanLaneContext` provides lane-scoped context. These are low-level APIs for advanced customization.
|
|
377
|
-
|
|
378
|
-
```typescript
|
|
379
|
-
import { useKanbanContext, useKanbanLaneContext } from "@simplysm/solid";
|
|
380
|
-
|
|
381
|
-
// inside a custom card component
|
|
382
|
-
const kanban = useKanbanContext();
|
|
383
|
-
const lane = useKanbanLaneContext();
|
|
384
|
-
```
|
package/docs/providers.md
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
# Providers
|
|
2
|
-
|
|
3
|
-
## SystemProvider
|
|
4
|
-
|
|
5
|
-
Infrastructure provider. Wraps all internal providers (config, theme, logger, notification, busy, service client, shared data) in the correct dependency order. Use this to set up your app.
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
import { SystemProvider } from "@simplysm/solid";
|
|
9
|
-
|
|
10
|
-
<SystemProvider clientName="my-app">
|
|
11
|
-
<AppRoot />
|
|
12
|
-
</SystemProvider>
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Configuration is done via hooks inside child components:
|
|
16
|
-
|
|
17
|
-
```tsx
|
|
18
|
-
function AppRoot() {
|
|
19
|
-
const serviceClient = useServiceClient();
|
|
20
|
-
|
|
21
|
-
onMount(async () => {
|
|
22
|
-
await serviceClient.connect("main", { port: 3000 });
|
|
23
|
-
useSyncStorage()!.configure((origin) => myStorageAdapter);
|
|
24
|
-
useLogger().configure((origin) => myLogAdapter);
|
|
25
|
-
useSharedData().configure((origin) => definitions);
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
| Prop | Type | Default | Description |
|
|
31
|
-
|------|------|---------|-------------|
|
|
32
|
-
| `clientName` | `string` | (required) | Client identifier (used as storage key prefix) |
|
|
33
|
-
| `busyVariant` | `BusyVariant` | `"spinner"` | Busy overlay display variant (`"spinner"` or `"bar"`) |
|
|
34
|
-
|
|
35
|
-
**Internal nesting order:**
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
ConfigProvider → SyncStorageProvider → LoggerProvider →
|
|
39
|
-
NotificationProvider + NotificationBanner →
|
|
40
|
-
ErrorLoggerProvider → PwaUpdateProvider →
|
|
41
|
-
ClipboardProvider → ThemeProvider →
|
|
42
|
-
ServiceClientProvider → SharedDataProvider →
|
|
43
|
-
BusyProvider → {children}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Internal providers are not exported individually. `DialogProvider` and `PrintProvider` are exported separately for flexible placement in your provider tree.
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## Exported Types & Hooks
|
|
51
|
-
|
|
52
|
-
The following types, context objects, and hooks are exported for use with `SystemProvider`:
|
|
53
|
-
|
|
54
|
-
| Export | Kind | Description |
|
|
55
|
-
|--------|------|-------------|
|
|
56
|
-
| `useConfig` | hook | App configuration access |
|
|
57
|
-
| `useTheme` | hook | Theme mode access and toggle |
|
|
58
|
-
| `useSyncStorage` | hook | Sync storage adapter access |
|
|
59
|
-
| `useServiceClient` | hook | WebSocket RPC client access |
|
|
60
|
-
| `useSharedData` | hook | Shared data subscription access |
|
|
61
|
-
| `useNotification` | hook | Notification system access |
|
|
62
|
-
| `useBusy` | hook | Busy overlay control |
|
|
63
|
-
| `ConfigContext` | context | For mock injection in tests |
|
|
64
|
-
| `SyncStorageContext` | context | For mock injection in tests |
|
|
65
|
-
| `ServiceClientContext` | context | For mock injection in tests |
|
|
66
|
-
| `SharedDataContext` | context | For mock injection in tests |
|
|
67
|
-
| `AppConfig` | type | Config context value type |
|
|
68
|
-
| `StorageAdapter` | type | Sync storage adapter interface |
|
|
69
|
-
| `SyncStorageContextValue` | type | Sync storage context value type |
|
|
70
|
-
| `LogAdapter` | type | Log adapter interface |
|
|
71
|
-
| `LoggerContextValue` | type | Logger context value type |
|
|
72
|
-
| `ThemeMode` | type | `"light" \| "dark" \| "system"` |
|
|
73
|
-
| `ResolvedTheme` | type | `"light" \| "dark"` |
|
|
74
|
-
| `ServiceClientContextValue` | type | Service client context value type |
|
|
75
|
-
| `SharedDataDefinition` | type | Data subscription definition |
|
|
76
|
-
| `SharedDataAccessor` | type | Per-key data accessor |
|
|
77
|
-
| `SharedDataValue` | type | Full shared data context value |
|
|
78
|
-
| `BusyVariant` | type | `"spinner" \| "bar"` |
|
|
79
|
-
| `SharedDataChangeEvent` | class | Server-side change event definition |
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## SharedData Usage
|
|
84
|
-
|
|
85
|
-
```tsx
|
|
86
|
-
import { useSharedData } from "@simplysm/solid";
|
|
87
|
-
|
|
88
|
-
function MyComponent() {
|
|
89
|
-
const sharedData = useSharedData<MySharedData>();
|
|
90
|
-
|
|
91
|
-
const users = () => sharedData.users.items(); // Accessor<TData[]>
|
|
92
|
-
const user = () => sharedData.users.get(userId()); // TData | undefined
|
|
93
|
-
|
|
94
|
-
const handleUpdate = async () => {
|
|
95
|
-
await sharedData.users.emit([updatedUserId]); // trigger refetch for keys
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
**SharedDataDefinition type:**
|
|
101
|
-
|
|
102
|
-
```typescript
|
|
103
|
-
interface SharedDataDefinition<TData> {
|
|
104
|
-
serviceKey: string; // Connection key (matches useServiceClient key)
|
|
105
|
-
fetch: (changeKeys?: Array<string | number>) => Promise<TData[]>; // Data fetch function
|
|
106
|
-
getKey: (item: TData) => string | number; // Primary key extractor
|
|
107
|
-
orderBy: [(item: TData) => unknown, "asc" | "desc"][]; // Sort order
|
|
108
|
-
filter?: unknown; // Optional filter for change events
|
|
109
|
-
getSearchText?: (item: TData) => string; // Search text extractor (for SelectList/Select filtering)
|
|
110
|
-
getIsHidden?: (item: TData) => boolean; // Hidden item filter
|
|
111
|
-
getParentKey?: (item: TData) => string | number | undefined; // Parent key extractor (for tree structure)
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
**SharedDataAccessor API:**
|
|
116
|
-
|
|
117
|
-
| Property/Method | Type | Description |
|
|
118
|
-
|-----------------|------|-------------|
|
|
119
|
-
| `items` | `Accessor<TData[]>` | Reactive item array |
|
|
120
|
-
| `get` | `(key: string \| number \| undefined) => TData \| undefined` | Get item by key |
|
|
121
|
-
| `emit` | `(changeKeys?: Array<string \| number>) => Promise<void>` | Emit change event to server (triggers refetch in all subscribers) |
|
|
122
|
-
| `getKey` | `(item: TData) => string \| number` | Primary key extractor |
|
|
123
|
-
| `getSearchText` | `((item: TData) => string) \| undefined` | Search text extractor |
|
|
124
|
-
| `getIsHidden` | `((item: TData) => boolean) \| undefined` | Hidden item filter |
|
|
125
|
-
| `getParentKey` | `((item: TData) => string \| number \| undefined) \| undefined` | Parent key extractor (tree structure) |
|
|
126
|
-
|
|
127
|
-
**SharedDataValue extras:**
|
|
128
|
-
|
|
129
|
-
| Property/Method | Type | Description |
|
|
130
|
-
|-----------------|------|-------------|
|
|
131
|
-
| `wait` | `() => Promise<void>` | Wait until all initial fetches complete |
|
|
132
|
-
| `busy` | `Accessor<boolean>` | True while any fetch is in progress |
|
|
133
|
-
| `configure` | `(fn: (origin) => definitions) => void` | Set up data subscriptions via decorator function (call once after service client connects) |
|
|
134
|
-
|
|
135
|
-
**SharedDataChangeEvent:**
|
|
136
|
-
|
|
137
|
-
`SharedDataChangeEvent` is the event definition used internally to communicate data changes between server and clients. Export it if you need to emit changes from the server side.
|
|
138
|
-
|
|
139
|
-
```typescript
|
|
140
|
-
import { SharedDataChangeEvent } from "@simplysm/solid";
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
## DialogProvider
|
|
146
|
-
|
|
147
|
-
Programmatic dialog management. Must be placed inside `SystemProvider`. See [Dialog](disclosure.md#dialog) for full Dialog component and `useDialog` API.
|
|
148
|
-
|
|
149
|
-
```tsx
|
|
150
|
-
import { DialogProvider, useDialog } from "@simplysm/solid";
|
|
151
|
-
|
|
152
|
-
// In your provider tree:
|
|
153
|
-
<SystemProvider clientName="my-app">
|
|
154
|
-
<DialogProvider>
|
|
155
|
-
<App />
|
|
156
|
-
</DialogProvider>
|
|
157
|
-
</SystemProvider>
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
| Prop | Type | Default | Description |
|
|
161
|
-
|------|------|---------|-------------|
|
|
162
|
-
| `closeOnEscape` | `boolean` | `true` | Default: close dialogs on Escape key |
|
|
163
|
-
| `closeOnBackdrop` | `boolean` | - | Default: close dialogs on backdrop click |
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## PrintProvider
|
|
168
|
-
|
|
169
|
-
Printing and PDF generation. Must be placed inside `SystemProvider` (depends on `useBusy()`). See [Print / usePrint](feedback.md#print--useprint) for full API.
|
|
170
|
-
|
|
171
|
-
```tsx
|
|
172
|
-
import { PrintProvider, usePrint } from "@simplysm/solid";
|
|
173
|
-
|
|
174
|
-
// In your provider tree:
|
|
175
|
-
<SystemProvider clientName="my-app">
|
|
176
|
-
<PrintProvider>
|
|
177
|
-
<App />
|
|
178
|
-
</PrintProvider>
|
|
179
|
-
</SystemProvider>
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
No additional props.
|
|
183
|
-
|
|
184
|
-
---
|
|
185
|
-
|
|
186
|
-
## Provider Placement Guide
|
|
187
|
-
|
|
188
|
-
`SystemProvider` provides all infrastructure. `DialogProvider` and `PrintProvider` are standalone and should be placed where their factory content needs context access.
|
|
189
|
-
|
|
190
|
-
**Recommended structure:**
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
<SystemProvider> ← Infrastructure (config, theme, logger, etc.)
|
|
194
|
-
<YourAuthProvider> ← Your providers
|
|
195
|
-
<YourDataProvider>
|
|
196
|
-
<DialogProvider> ← Dialog factories can access Auth + Data
|
|
197
|
-
<PrintProvider> ← Print factories can access Auth + Data
|
|
198
|
-
<App />
|
|
199
|
-
</PrintProvider>
|
|
200
|
-
</DialogProvider>
|
|
201
|
-
</YourDataProvider>
|
|
202
|
-
</YourAuthProvider>
|
|
203
|
-
</SystemProvider>
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
**Why this order?**
|
|
207
|
-
|
|
208
|
-
- `DialogProvider` and `PrintProvider` accept user components as factory functions (`dialog.show(() => <Form />)`, `print.toPrinter(() => <Report />)`)
|
|
209
|
-
- These factories are rendered inside the Provider's tree, not at the call site
|
|
210
|
-
- To access your app's contexts (auth, data, etc.), place `DialogProvider`/`PrintProvider` **below** those contexts
|
|
211
|
-
- `SystemProvider` must be outermost because `DialogProvider`/`PrintProvider` depend on `useBusy()` and other system hooks
|