@simplysm/solid 13.0.0-beta.6 → 13.0.2
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 +103 -1544
- package/dist/components/data/Pagination.d.ts.map +1 -0
- package/dist/components/data/Pagination.js +102 -56
- package/dist/components/data/Pagination.js.map +2 -3
- package/dist/components/data/Table.d.ts.map +1 -0
- package/dist/components/data/Table.js +16 -8
- package/dist/components/data/Table.js.map +2 -3
- package/dist/components/data/calendar/Calendar.d.ts.map +1 -0
- package/dist/components/data/calendar/Calendar.js +73 -21
- package/dist/components/data/calendar/Calendar.js.map +2 -3
- package/dist/components/data/kanban/Kanban.css +12 -0
- package/dist/components/data/kanban/Kanban.d.ts.map +1 -0
- package/dist/components/data/kanban/Kanban.js +181 -103
- package/dist/components/data/kanban/Kanban.js.map +2 -3
- package/dist/components/data/kanban/KanbanContext.d.ts.map +1 -0
- package/dist/components/data/kanban/KanbanContext.js.map +0 -1
- package/dist/components/data/list/List.d.ts.map +1 -0
- package/dist/components/data/list/List.js +32 -23
- package/dist/components/data/list/List.js.map +2 -3
- package/dist/components/data/list/ListContext.d.ts.map +1 -0
- package/dist/components/data/list/ListContext.js.map +0 -1
- package/dist/components/data/list/ListItem.d.ts.map +1 -0
- package/dist/components/data/list/ListItem.js +108 -59
- package/dist/components/data/list/ListItem.js.map +2 -3
- package/dist/components/data/list/ListItem.styles.d.ts.map +1 -0
- package/dist/components/data/list/ListItem.styles.js +3 -3
- package/dist/components/data/list/ListItem.styles.js.map +0 -1
- package/dist/components/data/permission-table/PermissionTable.d.ts.map +1 -0
- package/dist/components/data/permission-table/PermissionTable.js +105 -38
- package/dist/components/data/permission-table/PermissionTable.js.map +2 -3
- package/dist/components/data/sheet/DataSheet.css +26 -0
- package/dist/components/data/sheet/DataSheet.d.ts.map +1 -0
- package/dist/components/data/sheet/DataSheet.js +654 -438
- package/dist/components/data/sheet/DataSheet.js.map +2 -3
- package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -0
- package/dist/components/data/sheet/DataSheet.styles.js +1 -1
- package/dist/components/data/sheet/DataSheet.styles.js.map +0 -1
- package/dist/components/data/sheet/DataSheetColumn.d.ts.map +1 -0
- package/dist/components/data/sheet/DataSheetColumn.js +1 -1
- package/dist/components/data/sheet/DataSheetColumn.js.map +2 -3
- package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -0
- package/dist/components/data/sheet/DataSheetConfigDialog.js +92 -18
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +2 -3
- package/dist/components/data/sheet/sheetUtils.d.ts.map +1 -0
- package/dist/components/data/sheet/sheetUtils.js.map +0 -1
- package/dist/components/data/sheet/types.d.ts.map +1 -0
- package/dist/components/data/sheet/types.js.map +0 -1
- package/dist/components/disclosure/Collapse.d.ts.map +1 -0
- package/dist/components/disclosure/Collapse.js +40 -23
- package/dist/components/disclosure/Collapse.js.map +2 -3
- package/dist/components/disclosure/Dialog.d.ts.map +1 -0
- package/dist/components/disclosure/Dialog.js +133 -141
- package/dist/components/disclosure/Dialog.js.map +2 -3
- package/dist/components/disclosure/DialogContext.d.ts.map +1 -0
- package/dist/components/disclosure/DialogContext.js.map +0 -1
- package/dist/components/disclosure/DialogInstanceContext.d.ts.map +1 -0
- package/dist/components/disclosure/DialogInstanceContext.js.map +0 -1
- package/dist/components/disclosure/DialogProvider.d.ts.map +1 -0
- package/dist/components/disclosure/DialogProvider.js +92 -40
- package/dist/components/disclosure/DialogProvider.js.map +2 -3
- package/dist/components/disclosure/Dropdown.d.ts.map +1 -0
- package/dist/components/disclosure/Dropdown.js +62 -47
- package/dist/components/disclosure/Dropdown.js.map +2 -3
- package/dist/components/disclosure/Tabs.d.ts.map +1 -0
- package/dist/components/disclosure/Tabs.js +57 -29
- package/dist/components/disclosure/Tabs.js.map +2 -3
- package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -0
- package/dist/components/disclosure/dialogZIndex.js.map +0 -1
- package/dist/components/display/Alert.d.ts.map +1 -0
- package/dist/components/display/Alert.js +16 -2
- package/dist/components/display/Alert.js.map +2 -3
- package/dist/components/display/Barcode.d.ts.map +1 -0
- package/dist/components/display/Barcode.js +16 -1
- package/dist/components/display/Barcode.js.map +2 -3
- package/dist/components/display/Card.css +15 -0
- package/dist/components/display/Card.d.ts.map +1 -0
- package/dist/components/display/Card.js +16 -10
- package/dist/components/display/Card.js.map +2 -3
- package/dist/{solid/src/components → components}/display/Echarts.d.ts +2 -2
- package/dist/components/display/Echarts.d.ts.map +1 -0
- package/dist/components/display/Echarts.js +28 -6
- package/dist/components/display/Echarts.js.map +2 -3
- package/dist/components/display/Icon.d.ts.map +1 -0
- package/dist/components/display/Icon.js +12 -1
- package/dist/components/display/Icon.js.map +2 -3
- package/dist/components/display/Tag.d.ts.map +1 -0
- package/dist/components/display/Tag.js +17 -5
- package/dist/components/display/Tag.js.map +2 -3
- package/dist/components/feedback/Progress.d.ts.map +1 -0
- package/dist/components/feedback/Progress.js +43 -12
- package/dist/components/feedback/Progress.js.map +2 -3
- package/dist/components/feedback/loading/LoadingContainer.css +21 -0
- package/dist/components/feedback/loading/LoadingContainer.d.ts.map +1 -0
- package/dist/components/feedback/loading/LoadingContainer.js +109 -45
- package/dist/components/feedback/loading/LoadingContainer.js.map +2 -3
- package/dist/components/feedback/loading/LoadingContext.d.ts.map +1 -0
- package/dist/components/feedback/loading/LoadingContext.js.map +0 -1
- package/dist/components/feedback/loading/LoadingProvider.d.ts.map +1 -0
- package/dist/components/feedback/loading/LoadingProvider.js +32 -12
- package/dist/components/feedback/loading/LoadingProvider.js.map +2 -3
- package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -0
- package/dist/components/feedback/notification/NotificationBanner.js +64 -30
- package/dist/components/feedback/notification/NotificationBanner.js.map +2 -3
- package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -0
- package/dist/components/feedback/notification/NotificationBell.js +118 -50
- package/dist/components/feedback/notification/NotificationBell.js.map +2 -3
- package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -0
- package/dist/components/feedback/notification/NotificationContext.js.map +0 -1
- package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -0
- package/dist/components/feedback/notification/NotificationProvider.js +41 -17
- package/dist/components/feedback/notification/NotificationProvider.js.map +2 -3
- package/dist/components/feedback/notification/index.d.ts.map +1 -0
- package/dist/components/feedback/notification/index.js +4 -4
- package/dist/components/feedback/notification/index.js.map +0 -1
- package/dist/components/feedback/print/Print.d.ts.map +1 -0
- package/dist/components/feedback/print/Print.js +10 -2
- package/dist/components/feedback/print/Print.js.map +2 -3
- package/dist/components/feedback/print/PrintInstanceContext.d.ts.map +1 -0
- package/dist/components/feedback/print/PrintInstanceContext.js.map +0 -1
- package/dist/components/form-control/Button.d.ts.map +1 -0
- package/dist/components/form-control/Button.js +35 -56
- package/dist/components/form-control/Button.js.map +2 -3
- package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -0
- package/dist/components/form-control/DropdownTrigger.styles.js +2 -2
- package/dist/components/form-control/DropdownTrigger.styles.js.map +0 -1
- package/dist/components/form-control/Invalid.d.ts +10 -0
- package/dist/components/form-control/Invalid.d.ts.map +1 -0
- package/dist/components/form-control/Invalid.js +51 -0
- package/dist/components/form-control/Invalid.js.map +6 -0
- package/dist/components/form-control/ThemeToggle.d.ts.map +1 -0
- package/dist/components/form-control/ThemeToggle.js +75 -30
- package/dist/components/form-control/ThemeToggle.js.map +2 -3
- package/dist/{solid/src/components/form-control/checkbox/Radio.d.ts.map → components/form-control/checkbox/Checkbox.d.ts.map} +1 -1
- package/dist/components/form-control/checkbox/Checkbox.js +60 -50
- package/dist/components/form-control/checkbox/Checkbox.js.map +2 -3
- package/dist/components/form-control/checkbox/Checkbox.styles.d.ts.map +1 -0
- package/dist/components/form-control/checkbox/Checkbox.styles.js +2 -2
- package/dist/components/form-control/checkbox/Checkbox.styles.js.map +0 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.d.ts.map +1 -0
- package/dist/components/form-control/checkbox/CheckboxGroup.js +49 -27
- package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -3
- package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -0
- package/dist/components/form-control/checkbox/Radio.js +58 -49
- package/dist/components/form-control/checkbox/Radio.js.map +2 -3
- package/dist/components/form-control/checkbox/RadioGroup.d.ts.map +1 -0
- package/dist/components/form-control/checkbox/RadioGroup.js +49 -27
- package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -3
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -0
- package/dist/components/form-control/color-picker/ColorPicker.js +30 -21
- package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -3
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -0
- package/dist/components/form-control/combobox/Combobox.js +172 -84
- package/dist/components/form-control/combobox/Combobox.js.map +2 -3
- package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -0
- package/dist/components/form-control/combobox/ComboboxContext.js.map +0 -1
- package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -0
- package/dist/components/form-control/combobox/ComboboxItem.js +38 -31
- package/dist/components/form-control/combobox/ComboboxItem.js.map +2 -3
- package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -0
- package/dist/components/form-control/date-range-picker/DateRangePicker.js +105 -67
- package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -3
- package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -0
- package/dist/components/form-control/editor/EditorToolbar.js +211 -248
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -3
- package/dist/{solid/src/components → components}/form-control/editor/RichTextEditor.d.ts +0 -2
- package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -0
- package/dist/components/form-control/editor/RichTextEditor.js +73 -58
- package/dist/components/form-control/editor/RichTextEditor.js.map +2 -3
- package/dist/components/form-control/editor/editor.css +81 -0
- package/dist/{solid/src/components → components}/form-control/field/DatePicker.d.ts +0 -2
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -0
- package/dist/components/form-control/field/DatePicker.js +123 -91
- package/dist/components/form-control/field/DatePicker.js.map +2 -3
- package/dist/{solid/src/components → components}/form-control/field/DateTimePicker.d.ts +0 -2
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -0
- package/dist/components/form-control/field/DateTimePicker.js +123 -108
- package/dist/components/form-control/field/DateTimePicker.js.map +2 -3
- package/dist/{solid/src/components → components}/form-control/field/Field.styles.d.ts +0 -1
- package/dist/components/form-control/field/Field.styles.d.ts.map +1 -0
- package/dist/components/form-control/field/Field.styles.js +2 -4
- package/dist/components/form-control/field/Field.styles.js.map +1 -2
- package/dist/{solid/src/components → components}/form-control/field/NumberInput.d.ts +0 -2
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -0
- package/dist/components/form-control/field/NumberInput.js +137 -102
- package/dist/components/form-control/field/NumberInput.js.map +2 -3
- package/dist/{solid/src/components → components}/form-control/field/TextInput.d.ts +0 -2
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -0
- package/dist/components/form-control/field/TextInput.js +133 -98
- package/dist/components/form-control/field/TextInput.js.map +2 -3
- package/dist/{solid/src/components → components}/form-control/field/Textarea.d.ts +0 -2
- package/dist/components/form-control/field/Textarea.d.ts.map +1 -0
- package/dist/components/form-control/field/Textarea.js +147 -128
- package/dist/components/form-control/field/Textarea.js.map +2 -3
- package/dist/{solid/src/components → components}/form-control/field/TimePicker.d.ts +0 -2
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -0
- package/dist/components/form-control/field/TimePicker.js +115 -87
- package/dist/components/form-control/field/TimePicker.js.map +2 -3
- package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -0
- package/dist/components/form-control/numpad/Numpad.js +189 -31
- package/dist/components/form-control/numpad/Numpad.js.map +2 -3
- package/dist/components/form-control/select/Select.d.ts.map +1 -0
- package/dist/components/form-control/select/Select.js +188 -86
- package/dist/components/form-control/select/Select.js.map +2 -3
- package/dist/components/form-control/select/SelectContext.d.ts.map +1 -0
- package/dist/components/form-control/select/SelectContext.js.map +0 -1
- package/dist/components/form-control/select/SelectItem.d.ts.map +1 -0
- package/dist/components/form-control/select/SelectItem.js +79 -38
- package/dist/components/form-control/select/SelectItem.js.map +2 -3
- package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -0
- package/dist/components/form-control/state-preset/StatePreset.js +95 -80
- package/dist/components/form-control/state-preset/StatePreset.js.map +2 -3
- package/dist/components/layout/FormGroup.d.ts.map +1 -0
- package/dist/components/layout/FormGroup.js +47 -11
- package/dist/components/layout/FormGroup.js.map +2 -3
- package/dist/components/layout/FormTable.d.ts.map +1 -0
- package/dist/components/layout/FormTable.js +15 -1
- package/dist/components/layout/FormTable.js.map +2 -3
- package/dist/components/layout/sidebar/Sidebar.d.ts.map +1 -0
- package/dist/components/layout/sidebar/Sidebar.js +37 -36
- package/dist/components/layout/sidebar/Sidebar.js.map +2 -3
- package/dist/{solid/src/components → components}/layout/sidebar/SidebarContainer.d.ts +1 -1
- package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -0
- package/dist/components/layout/sidebar/SidebarContainer.js +48 -35
- package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -3
- package/dist/components/layout/sidebar/SidebarContext.d.ts.map +1 -0
- package/dist/components/layout/sidebar/SidebarContext.js.map +0 -1
- package/dist/components/layout/sidebar/SidebarMenu.d.ts.map +1 -0
- package/dist/components/layout/sidebar/SidebarMenu.js +91 -25
- package/dist/components/layout/sidebar/SidebarMenu.js.map +2 -3
- package/dist/components/layout/sidebar/SidebarUser.d.ts +48 -0
- package/dist/components/layout/sidebar/SidebarUser.d.ts.map +1 -0
- package/dist/components/layout/sidebar/SidebarUser.js +99 -26
- package/dist/components/layout/sidebar/SidebarUser.js.map +2 -3
- package/dist/components/layout/topbar/Topbar.d.ts.map +1 -0
- package/dist/components/layout/topbar/Topbar.js +40 -7
- package/dist/components/layout/topbar/Topbar.js.map +2 -3
- package/dist/components/layout/topbar/TopbarContainer.d.ts.map +1 -0
- package/dist/components/layout/topbar/TopbarContainer.js +16 -1
- package/dist/components/layout/topbar/TopbarContainer.js.map +2 -3
- package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -0
- package/dist/components/layout/topbar/TopbarMenu.js +200 -28
- package/dist/components/layout/topbar/TopbarMenu.js.map +2 -3
- package/dist/components/layout/topbar/TopbarUser.d.ts.map +1 -0
- package/dist/components/layout/topbar/TopbarUser.js +83 -16
- package/dist/components/layout/topbar/TopbarUser.js.map +2 -3
- package/dist/directives/ripple.d.ts.map +1 -0
- package/dist/directives/ripple.js.map +0 -1
- package/dist/helpers/createAppStructure.d.ts.map +1 -0
- package/dist/helpers/createAppStructure.js.map +0 -1
- package/dist/helpers/mergeStyles.d.ts.map +1 -0
- package/dist/helpers/mergeStyles.js.map +0 -1
- package/dist/helpers/splitSlots.d.ts.map +1 -0
- package/dist/helpers/splitSlots.js.map +0 -1
- package/dist/hooks/createControllableSignal.d.ts.map +1 -0
- package/dist/hooks/createControllableSignal.js.map +0 -1
- package/dist/hooks/createIMEHandler.d.ts.map +1 -0
- package/dist/hooks/createIMEHandler.js.map +0 -1
- package/dist/hooks/createMountTransition.d.ts.map +1 -0
- package/dist/hooks/createMountTransition.js.map +0 -1
- package/dist/hooks/createPwaUpdate.d.ts +14 -0
- package/dist/hooks/createPwaUpdate.d.ts.map +1 -0
- package/dist/hooks/createPwaUpdate.js +50 -0
- package/dist/hooks/createPwaUpdate.js.map +6 -0
- package/dist/hooks/useClipboardValueCopy.d.ts.map +1 -0
- package/dist/hooks/useClipboardValueCopy.js +1 -2
- package/dist/hooks/useClipboardValueCopy.js.map +1 -2
- package/dist/hooks/useLocalStorage.d.ts +29 -0
- package/dist/hooks/useLocalStorage.d.ts.map +1 -0
- package/dist/hooks/useLocalStorage.js +36 -0
- package/dist/hooks/useLocalStorage.js.map +6 -0
- package/dist/hooks/useLogger.d.ts +9 -0
- package/dist/hooks/useLogger.d.ts.map +1 -0
- package/dist/hooks/useLogger.js +24 -0
- package/dist/hooks/useLogger.js.map +6 -0
- package/dist/hooks/usePrint.d.ts.map +1 -0
- package/dist/hooks/usePrint.js +2 -2
- package/dist/hooks/usePrint.js.map +0 -1
- package/dist/hooks/useRouterLink.d.ts.map +1 -0
- package/dist/hooks/useRouterLink.js.map +0 -1
- package/dist/hooks/useSyncConfig.d.ts +24 -0
- package/dist/hooks/useSyncConfig.d.ts.map +1 -0
- package/dist/hooks/useSyncConfig.js +60 -0
- package/dist/hooks/useSyncConfig.js.map +6 -0
- package/dist/{solid/src/index.d.ts → index.d.ts} +9 -4
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -84
- package/dist/index.js.map +1 -2
- package/dist/{solid/src/providers → providers}/ConfigContext.d.ts +20 -2
- package/dist/providers/ConfigContext.d.ts.map +1 -0
- package/dist/providers/ConfigContext.js.map +1 -2
- package/dist/{solid/src/providers → providers}/InitializeProvider.d.ts +6 -3
- package/dist/providers/InitializeProvider.d.ts.map +1 -0
- package/dist/providers/InitializeProvider.js +58 -3
- package/dist/providers/InitializeProvider.js.map +2 -3
- package/dist/providers/ServiceClientContext.d.ts.map +1 -0
- package/dist/providers/ServiceClientContext.js.map +0 -1
- package/dist/providers/ServiceClientProvider.d.ts.map +1 -0
- package/dist/providers/ServiceClientProvider.js +30 -24
- package/dist/providers/ServiceClientProvider.js.map +2 -3
- package/dist/{solid/src/providers → providers}/ThemeContext.d.ts +1 -1
- package/dist/providers/ThemeContext.d.ts.map +1 -0
- package/dist/providers/ThemeContext.js +10 -6
- package/dist/providers/ThemeContext.js.map +2 -3
- package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +5 -0
- package/dist/providers/shared-data/SharedDataChangeEvent.d.ts.map +1 -0
- package/dist/providers/shared-data/SharedDataChangeEvent.js +4 -4
- package/dist/providers/shared-data/SharedDataChangeEvent.js.map +1 -2
- package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -0
- package/dist/providers/shared-data/SharedDataContext.js.map +0 -1
- package/dist/providers/shared-data/SharedDataProvider.d.ts.map +1 -0
- package/dist/providers/shared-data/SharedDataProvider.js +20 -17
- package/dist/providers/shared-data/SharedDataProvider.js.map +2 -3
- package/dist/styles/patterns.styles.d.ts.map +1 -0
- package/dist/styles/patterns.styles.js +1 -1
- package/dist/styles/patterns.styles.js.map +0 -1
- package/dist/styles/tokens.styles.d.ts.map +1 -0
- package/dist/styles/tokens.styles.js.map +0 -1
- package/docs/data-components.md +304 -0
- package/docs/disclosure.md +208 -0
- package/docs/display.md +136 -0
- package/docs/feedback.md +188 -0
- package/docs/form-controls.md +535 -0
- package/docs/helpers.md +46 -0
- package/docs/hooks.md +313 -0
- package/docs/layout.md +289 -0
- package/docs/providers.md +35 -0
- package/docs/styling.md +67 -0
- package/package.json +20 -10
- package/src/components/data/kanban/Kanban.css +3 -1
- package/src/components/data/list/ListItem.styles.ts +2 -2
- package/src/components/data/sheet/DataSheet.css +11 -11
- package/src/components/data/sheet/DataSheet.tsx +3 -3
- package/src/components/display/Card.css +1 -0
- package/src/components/display/Echarts.tsx +18 -11
- package/src/components/feedback/loading/LoadingContainer.css +2 -0
- package/src/components/form-control/Invalid.tsx +61 -0
- package/src/components/form-control/editor/RichTextEditor.tsx +2 -9
- package/src/components/form-control/editor/editor.css +5 -5
- package/src/components/form-control/field/DatePicker.tsx +0 -6
- package/src/components/form-control/field/DateTimePicker.tsx +0 -6
- package/src/components/form-control/field/Field.styles.ts +0 -3
- package/src/components/form-control/field/NumberInput.tsx +0 -6
- package/src/components/form-control/field/TextInput.tsx +0 -6
- package/src/components/form-control/field/Textarea.tsx +0 -6
- package/src/components/form-control/field/TimePicker.tsx +0 -6
- package/src/components/form-control/state-preset/StatePreset.tsx +2 -2
- package/src/components/layout/sidebar/SidebarContainer.tsx +3 -4
- package/src/components/layout/sidebar/SidebarUser.tsx +44 -16
- package/src/hooks/createPwaUpdate.ts +73 -0
- package/src/hooks/useClipboardValueCopy.ts +1 -1
- package/src/hooks/useLocalStorage.ts +68 -0
- package/src/hooks/useLogger.ts +32 -0
- package/src/hooks/useSyncConfig.ts +99 -0
- package/src/index.ts +9 -4
- package/src/providers/ConfigContext.ts +23 -2
- package/src/providers/InitializeProvider.tsx +59 -5
- package/src/providers/ServiceClientProvider.tsx +2 -2
- package/src/providers/ThemeContext.tsx +3 -3
- package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -7
- package/src/providers/shared-data/SharedDataProvider.tsx +3 -0
- package/{src/base.css → tailwind.css} +9 -8
- package/.cache/typecheck-browser.tsbuildinfo +0 -1
- package/.cache/typecheck-tests-browser.tsbuildinfo +0 -1
- package/dist/core-browser/src/extensions/element-ext.d.ts +0 -98
- package/dist/core-browser/src/extensions/element-ext.d.ts.map +0 -1
- package/dist/core-browser/src/extensions/html-element-ext.d.ts +0 -54
- package/dist/core-browser/src/extensions/html-element-ext.d.ts.map +0 -1
- package/dist/core-browser/src/index.d.ts +0 -7
- package/dist/core-browser/src/index.d.ts.map +0 -1
- package/dist/core-browser/src/utils/blob.d.ts +0 -10
- package/dist/core-browser/src/utils/blob.d.ts.map +0 -1
- package/dist/core-browser/src/utils/download.d.ts +0 -11
- package/dist/core-browser/src/utils/download.d.ts.map +0 -1
- package/dist/core-common/src/common.types.d.ts +0 -74
- package/dist/core-common/src/common.types.d.ts.map +0 -1
- package/dist/core-common/src/env.d.ts +0 -6
- package/dist/core-common/src/env.d.ts.map +0 -1
- package/dist/core-common/src/errors/argument-error.d.ts +0 -25
- package/dist/core-common/src/errors/argument-error.d.ts.map +0 -1
- package/dist/core-common/src/errors/not-implemented-error.d.ts +0 -29
- package/dist/core-common/src/errors/not-implemented-error.d.ts.map +0 -1
- package/dist/core-common/src/errors/sd-error.d.ts +0 -27
- package/dist/core-common/src/errors/sd-error.d.ts.map +0 -1
- package/dist/core-common/src/errors/timeout-error.d.ts +0 -31
- package/dist/core-common/src/errors/timeout-error.d.ts.map +0 -1
- package/dist/core-common/src/extensions/arr-ext.d.ts +0 -15
- package/dist/core-common/src/extensions/arr-ext.d.ts.map +0 -1
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +0 -19
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +0 -1
- package/dist/core-common/src/extensions/arr-ext.types.d.ts +0 -215
- package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +0 -1
- package/dist/core-common/src/extensions/map-ext.d.ts +0 -57
- package/dist/core-common/src/extensions/map-ext.d.ts.map +0 -1
- package/dist/core-common/src/extensions/set-ext.d.ts +0 -36
- package/dist/core-common/src/extensions/set-ext.d.ts.map +0 -1
- package/dist/core-common/src/features/debounce-queue.d.ts +0 -53
- package/dist/core-common/src/features/debounce-queue.d.ts.map +0 -1
- package/dist/core-common/src/features/event-emitter.d.ts +0 -66
- package/dist/core-common/src/features/event-emitter.d.ts.map +0 -1
- package/dist/core-common/src/features/serial-queue.d.ts +0 -47
- package/dist/core-common/src/features/serial-queue.d.ts.map +0 -1
- package/dist/core-common/src/index.d.ts +0 -32
- package/dist/core-common/src/index.d.ts.map +0 -1
- package/dist/core-common/src/types/date-only.d.ts +0 -152
- package/dist/core-common/src/types/date-only.d.ts.map +0 -1
- package/dist/core-common/src/types/date-time.d.ts +0 -96
- package/dist/core-common/src/types/date-time.d.ts.map +0 -1
- package/dist/core-common/src/types/lazy-gc-map.d.ts +0 -80
- package/dist/core-common/src/types/lazy-gc-map.d.ts.map +0 -1
- package/dist/core-common/src/types/time.d.ts +0 -68
- package/dist/core-common/src/types/time.d.ts.map +0 -1
- package/dist/core-common/src/types/uuid.d.ts +0 -35
- package/dist/core-common/src/types/uuid.d.ts.map +0 -1
- package/dist/core-common/src/utils/bytes.d.ts +0 -51
- package/dist/core-common/src/utils/bytes.d.ts.map +0 -1
- package/dist/core-common/src/utils/date-format.d.ts +0 -90
- package/dist/core-common/src/utils/date-format.d.ts.map +0 -1
- package/dist/core-common/src/utils/json.d.ts +0 -34
- package/dist/core-common/src/utils/json.d.ts.map +0 -1
- package/dist/core-common/src/utils/num.d.ts +0 -60
- package/dist/core-common/src/utils/num.d.ts.map +0 -1
- package/dist/core-common/src/utils/obj.d.ts +0 -258
- package/dist/core-common/src/utils/obj.d.ts.map +0 -1
- package/dist/core-common/src/utils/path.d.ts +0 -23
- package/dist/core-common/src/utils/path.d.ts.map +0 -1
- package/dist/core-common/src/utils/primitive.d.ts +0 -18
- package/dist/core-common/src/utils/primitive.d.ts.map +0 -1
- package/dist/core-common/src/utils/str.d.ts +0 -103
- package/dist/core-common/src/utils/str.d.ts.map +0 -1
- package/dist/core-common/src/utils/template-strings.d.ts +0 -84
- package/dist/core-common/src/utils/template-strings.d.ts.map +0 -1
- package/dist/core-common/src/utils/transferable.d.ts +0 -47
- package/dist/core-common/src/utils/transferable.d.ts.map +0 -1
- package/dist/core-common/src/utils/wait.d.ts +0 -19
- package/dist/core-common/src/utils/wait.d.ts.map +0 -1
- package/dist/core-common/src/utils/xml.d.ts +0 -36
- package/dist/core-common/src/utils/xml.d.ts.map +0 -1
- package/dist/core-common/src/zip/sd-zip.d.ts +0 -80
- package/dist/core-common/src/zip/sd-zip.d.ts.map +0 -1
- package/dist/hooks/usePersisted.js +0 -25
- package/dist/hooks/usePersisted.js.map +0 -7
- package/dist/orm-common/src/db-context.d.ts +0 -669
- package/dist/orm-common/src/db-context.d.ts.map +0 -1
- package/dist/orm-common/src/errors/db-transaction-error.d.ts +0 -51
- package/dist/orm-common/src/errors/db-transaction-error.d.ts.map +0 -1
- package/dist/orm-common/src/exec/executable.d.ts +0 -79
- package/dist/orm-common/src/exec/executable.d.ts.map +0 -1
- package/dist/orm-common/src/exec/queryable.d.ts +0 -708
- package/dist/orm-common/src/exec/queryable.d.ts.map +0 -1
- package/dist/orm-common/src/exec/search-parser.d.ts +0 -72
- package/dist/orm-common/src/exec/search-parser.d.ts.map +0 -1
- package/dist/orm-common/src/expr/expr-unit.d.ts +0 -25
- package/dist/orm-common/src/expr/expr-unit.d.ts.map +0 -1
- package/dist/orm-common/src/expr/expr.d.ts +0 -1369
- package/dist/orm-common/src/expr/expr.d.ts.map +0 -1
- package/dist/orm-common/src/index.d.ts +0 -32
- package/dist/orm-common/src/index.d.ts.map +0 -1
- package/dist/orm-common/src/models/system-migration.d.ts +0 -10
- package/dist/orm-common/src/models/system-migration.d.ts.map +0 -1
- package/dist/orm-common/src/query-builder/base/expr-renderer-base.d.ts +0 -95
- package/dist/orm-common/src/query-builder/base/expr-renderer-base.d.ts.map +0 -1
- package/dist/orm-common/src/query-builder/base/query-builder-base.d.ts +0 -66
- package/dist/orm-common/src/query-builder/base/query-builder-base.d.ts.map +0 -1
- package/dist/orm-common/src/query-builder/mssql/mssql-expr-renderer.d.ts +0 -84
- package/dist/orm-common/src/query-builder/mssql/mssql-expr-renderer.d.ts.map +0 -1
- package/dist/orm-common/src/query-builder/mssql/mssql-query-builder.d.ts +0 -45
- package/dist/orm-common/src/query-builder/mssql/mssql-query-builder.d.ts.map +0 -1
- package/dist/orm-common/src/query-builder/mysql/mysql-expr-renderer.d.ts +0 -84
- package/dist/orm-common/src/query-builder/mysql/mysql-expr-renderer.d.ts.map +0 -1
- package/dist/orm-common/src/query-builder/mysql/mysql-query-builder.d.ts +0 -54
- package/dist/orm-common/src/query-builder/mysql/mysql-query-builder.d.ts.map +0 -1
- package/dist/orm-common/src/query-builder/postgresql/postgresql-expr-renderer.d.ts +0 -84
- package/dist/orm-common/src/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +0 -1
- package/dist/orm-common/src/query-builder/postgresql/postgresql-query-builder.d.ts +0 -52
- package/dist/orm-common/src/query-builder/postgresql/postgresql-query-builder.d.ts.map +0 -1
- package/dist/orm-common/src/query-builder/query-builder.d.ts +0 -7
- package/dist/orm-common/src/query-builder/query-builder.d.ts.map +0 -1
- package/dist/orm-common/src/schema/factory/column-builder.d.ts +0 -394
- package/dist/orm-common/src/schema/factory/column-builder.d.ts.map +0 -1
- package/dist/orm-common/src/schema/factory/index-builder.d.ts +0 -151
- package/dist/orm-common/src/schema/factory/index-builder.d.ts.map +0 -1
- package/dist/orm-common/src/schema/factory/relation-builder.d.ts +0 -337
- package/dist/orm-common/src/schema/factory/relation-builder.d.ts.map +0 -1
- package/dist/orm-common/src/schema/procedure-builder.d.ts +0 -202
- package/dist/orm-common/src/schema/procedure-builder.d.ts.map +0 -1
- package/dist/orm-common/src/schema/table-builder.d.ts +0 -259
- package/dist/orm-common/src/schema/table-builder.d.ts.map +0 -1
- package/dist/orm-common/src/schema/view-builder.d.ts +0 -183
- package/dist/orm-common/src/schema/view-builder.d.ts.map +0 -1
- package/dist/orm-common/src/types/column.d.ts +0 -172
- package/dist/orm-common/src/types/column.d.ts.map +0 -1
- package/dist/orm-common/src/types/db.d.ts +0 -175
- package/dist/orm-common/src/types/db.d.ts.map +0 -1
- package/dist/orm-common/src/types/expr.d.ts +0 -474
- package/dist/orm-common/src/types/expr.d.ts.map +0 -1
- package/dist/orm-common/src/types/query-def.d.ts +0 -351
- package/dist/orm-common/src/types/query-def.d.ts.map +0 -1
- package/dist/orm-common/src/utils/result-parser.d.ts +0 -38
- package/dist/orm-common/src/utils/result-parser.d.ts.map +0 -1
- package/dist/service-client/src/features/event-client.d.ts +0 -14
- package/dist/service-client/src/features/event-client.d.ts.map +0 -1
- package/dist/service-client/src/features/file-client.d.ts +0 -13
- package/dist/service-client/src/features/file-client.d.ts.map +0 -1
- package/dist/service-client/src/features/orm/orm-client-connector.d.ts +0 -10
- package/dist/service-client/src/features/orm/orm-client-connector.d.ts.map +0 -1
- package/dist/service-client/src/features/orm/orm-client-db-context-executor.d.ts +0 -26
- package/dist/service-client/src/features/orm/orm-client-db-context-executor.d.ts.map +0 -1
- package/dist/service-client/src/features/orm/orm-connect-config.d.ts +0 -13
- package/dist/service-client/src/features/orm/orm-connect-config.d.ts.map +0 -1
- package/dist/service-client/src/index.d.ts +0 -12
- package/dist/service-client/src/index.d.ts.map +0 -1
- package/dist/service-client/src/protocol/client-protocol-wrapper.d.ts +0 -23
- package/dist/service-client/src/protocol/client-protocol-wrapper.d.ts.map +0 -1
- package/dist/service-client/src/service-client.d.ts +0 -41
- package/dist/service-client/src/service-client.d.ts.map +0 -1
- package/dist/service-client/src/transport/service-transport.d.ts +0 -24
- package/dist/service-client/src/transport/service-transport.d.ts.map +0 -1
- package/dist/service-client/src/transport/socket-provider.d.ts +0 -31
- package/dist/service-client/src/transport/socket-provider.d.ts.map +0 -1
- package/dist/service-client/src/types/connection-config.d.ts +0 -8
- package/dist/service-client/src/types/connection-config.d.ts.map +0 -1
- package/dist/service-client/src/types/progress.types.d.ts +0 -10
- package/dist/service-client/src/types/progress.types.d.ts.map +0 -1
- package/dist/service-common/src/index.d.ts +0 -8
- package/dist/service-common/src/index.d.ts.map +0 -1
- package/dist/service-common/src/protocol/protocol.types.d.ts +0 -100
- package/dist/service-common/src/protocol/protocol.types.d.ts.map +0 -1
- package/dist/service-common/src/protocol/service-protocol.d.ts +0 -63
- package/dist/service-common/src/protocol/service-protocol.d.ts.map +0 -1
- package/dist/service-common/src/service-types/auto-update-service.types.d.ts +0 -17
- package/dist/service-common/src/service-types/auto-update-service.types.d.ts.map +0 -1
- package/dist/service-common/src/service-types/crypto-service.types.d.ts +0 -22
- package/dist/service-common/src/service-types/crypto-service.types.d.ts.map +0 -1
- package/dist/service-common/src/service-types/orm-service.types.d.ts +0 -30
- package/dist/service-common/src/service-types/orm-service.types.d.ts.map +0 -1
- package/dist/service-common/src/service-types/smtp-service.types.d.ts +0 -55
- package/dist/service-common/src/service-types/smtp-service.types.d.ts.map +0 -1
- package/dist/service-common/src/types.d.ts +0 -43
- package/dist/service-common/src/types.d.ts.map +0 -1
- package/dist/solid/src/components/data/Pagination.d.ts.map +0 -1
- package/dist/solid/src/components/data/Table.d.ts.map +0 -1
- package/dist/solid/src/components/data/calendar/Calendar.d.ts.map +0 -1
- package/dist/solid/src/components/data/kanban/Kanban.d.ts.map +0 -1
- package/dist/solid/src/components/data/kanban/KanbanContext.d.ts.map +0 -1
- package/dist/solid/src/components/data/list/List.d.ts.map +0 -1
- package/dist/solid/src/components/data/list/ListContext.d.ts.map +0 -1
- package/dist/solid/src/components/data/list/ListItem.d.ts.map +0 -1
- package/dist/solid/src/components/data/list/ListItem.styles.d.ts.map +0 -1
- package/dist/solid/src/components/data/permission-table/PermissionTable.d.ts.map +0 -1
- package/dist/solid/src/components/data/sheet/DataSheet.d.ts.map +0 -1
- package/dist/solid/src/components/data/sheet/DataSheet.styles.d.ts.map +0 -1
- package/dist/solid/src/components/data/sheet/DataSheetColumn.d.ts.map +0 -1
- package/dist/solid/src/components/data/sheet/DataSheetConfigDialog.d.ts.map +0 -1
- package/dist/solid/src/components/data/sheet/sheetUtils.d.ts.map +0 -1
- package/dist/solid/src/components/data/sheet/types.d.ts.map +0 -1
- package/dist/solid/src/components/disclosure/Collapse.d.ts.map +0 -1
- package/dist/solid/src/components/disclosure/Dialog.d.ts.map +0 -1
- package/dist/solid/src/components/disclosure/DialogContext.d.ts.map +0 -1
- package/dist/solid/src/components/disclosure/DialogInstanceContext.d.ts.map +0 -1
- package/dist/solid/src/components/disclosure/DialogProvider.d.ts.map +0 -1
- package/dist/solid/src/components/disclosure/Dropdown.d.ts.map +0 -1
- package/dist/solid/src/components/disclosure/Tabs.d.ts.map +0 -1
- package/dist/solid/src/components/disclosure/dialogZIndex.d.ts.map +0 -1
- package/dist/solid/src/components/display/Alert.d.ts.map +0 -1
- package/dist/solid/src/components/display/Barcode.d.ts.map +0 -1
- package/dist/solid/src/components/display/Card.d.ts.map +0 -1
- package/dist/solid/src/components/display/Echarts.d.ts.map +0 -1
- package/dist/solid/src/components/display/Icon.d.ts.map +0 -1
- package/dist/solid/src/components/display/Tag.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/Progress.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/loading/LoadingContainer.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/loading/LoadingContext.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/loading/LoadingProvider.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/notification/NotificationBanner.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/notification/NotificationBell.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/notification/NotificationContext.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/notification/NotificationProvider.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/notification/index.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/print/Print.d.ts.map +0 -1
- package/dist/solid/src/components/feedback/print/PrintInstanceContext.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/Button.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/DropdownTrigger.styles.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/ThemeToggle.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/checkbox/Checkbox.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/checkbox/Checkbox.styles.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/checkbox/CheckboxGroup.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/checkbox/RadioGroup.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/color-picker/ColorPicker.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/combobox/Combobox.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/combobox/ComboboxContext.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/combobox/ComboboxItem.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/date-range-picker/DateRangePicker.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/editor/EditorToolbar.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/editor/RichTextEditor.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/field/DatePicker.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/field/DateTimePicker.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/field/Field.styles.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/field/NumberInput.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/field/TextInput.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/field/Textarea.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/field/TimePicker.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/numpad/Numpad.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/select/Select.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/select/SelectContext.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/select/SelectItem.d.ts.map +0 -1
- package/dist/solid/src/components/form-control/state-preset/StatePreset.d.ts.map +0 -1
- package/dist/solid/src/components/layout/FormGroup.d.ts.map +0 -1
- package/dist/solid/src/components/layout/FormTable.d.ts.map +0 -1
- package/dist/solid/src/components/layout/sidebar/Sidebar.d.ts.map +0 -1
- package/dist/solid/src/components/layout/sidebar/SidebarContainer.d.ts.map +0 -1
- package/dist/solid/src/components/layout/sidebar/SidebarContext.d.ts.map +0 -1
- package/dist/solid/src/components/layout/sidebar/SidebarMenu.d.ts.map +0 -1
- package/dist/solid/src/components/layout/sidebar/SidebarUser.d.ts +0 -36
- package/dist/solid/src/components/layout/sidebar/SidebarUser.d.ts.map +0 -1
- package/dist/solid/src/components/layout/topbar/Topbar.d.ts.map +0 -1
- package/dist/solid/src/components/layout/topbar/TopbarContainer.d.ts.map +0 -1
- package/dist/solid/src/components/layout/topbar/TopbarMenu.d.ts.map +0 -1
- package/dist/solid/src/components/layout/topbar/TopbarUser.d.ts.map +0 -1
- package/dist/solid/src/directives/ripple.d.ts.map +0 -1
- package/dist/solid/src/helpers/createAppStructure.d.ts.map +0 -1
- package/dist/solid/src/helpers/mergeStyles.d.ts.map +0 -1
- package/dist/solid/src/helpers/splitSlots.d.ts.map +0 -1
- package/dist/solid/src/hooks/createControllableSignal.d.ts.map +0 -1
- package/dist/solid/src/hooks/createIMEHandler.d.ts.map +0 -1
- package/dist/solid/src/hooks/createMountTransition.d.ts.map +0 -1
- package/dist/solid/src/hooks/useClipboardValueCopy.d.ts.map +0 -1
- package/dist/solid/src/hooks/usePersisted.d.ts +0 -26
- package/dist/solid/src/hooks/usePersisted.d.ts.map +0 -1
- package/dist/solid/src/hooks/usePrint.d.ts.map +0 -1
- package/dist/solid/src/hooks/useRouterLink.d.ts.map +0 -1
- package/dist/solid/src/index.d.ts.map +0 -1
- package/dist/solid/src/providers/ConfigContext.d.ts.map +0 -1
- package/dist/solid/src/providers/InitializeProvider.d.ts.map +0 -1
- package/dist/solid/src/providers/ServiceClientContext.d.ts.map +0 -1
- package/dist/solid/src/providers/ServiceClientProvider.d.ts.map +0 -1
- package/dist/solid/src/providers/ThemeContext.d.ts.map +0 -1
- package/dist/solid/src/providers/shared-data/SharedDataChangeEvent.d.ts +0 -8
- package/dist/solid/src/providers/shared-data/SharedDataChangeEvent.d.ts.map +0 -1
- package/dist/solid/src/providers/shared-data/SharedDataContext.d.ts.map +0 -1
- package/dist/solid/src/providers/shared-data/SharedDataProvider.d.ts.map +0 -1
- package/dist/solid/src/styles/patterns.styles.d.ts.map +0 -1
- package/dist/solid/src/styles/tokens.styles.d.ts.map +0 -1
- package/src/hooks/usePersisted.ts +0 -51
- package/tests/components/data/List.spec.tsx +0 -683
- package/tests/components/data/Pagination.spec.tsx +0 -317
- package/tests/components/data/Table.spec.tsx +0 -55
- package/tests/components/data/kanban/Kanban.selection.spec.tsx +0 -209
- package/tests/components/data/permission-table/PermissionTable.spec.tsx +0 -280
- package/tests/components/data/sheet/DataSheet.spec.tsx +0 -564
- package/tests/components/disclosure/Collapse.spec.tsx +0 -162
- package/tests/components/disclosure/Dialog.spec.tsx +0 -319
- package/tests/components/disclosure/DialogProvider.spec.tsx +0 -110
- package/tests/components/disclosure/Dropdown.spec.tsx +0 -410
- package/tests/components/disclosure/Tabs.spec.tsx +0 -220
- package/tests/components/display/Alert.spec.tsx +0 -47
- package/tests/components/display/Barcode.spec.tsx +0 -61
- package/tests/components/display/Card.spec.tsx +0 -41
- package/tests/components/display/Tag.spec.tsx +0 -47
- package/tests/components/feedback/notification/LiveRegion.spec.tsx +0 -41
- package/tests/components/feedback/notification/NotificationBanner.spec.tsx +0 -164
- package/tests/components/feedback/notification/NotificationBell.spec.tsx +0 -207
- package/tests/components/feedback/notification/NotificationContext.spec.tsx +0 -331
- package/tests/components/feedback/print/Print.spec.tsx +0 -45
- package/tests/components/form-control/Button.spec.tsx +0 -119
- package/tests/components/form-control/checkbox/Checkbox.spec.tsx +0 -120
- package/tests/components/form-control/checkbox/Radio.spec.tsx +0 -112
- package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +0 -67
- package/tests/components/form-control/combobox/Combobox.spec.tsx +0 -174
- package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +0 -85
- package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +0 -172
- package/tests/components/form-control/field/DatePicker.spec.tsx +0 -305
- package/tests/components/form-control/field/DateTimePicker.spec.tsx +0 -287
- package/tests/components/form-control/field/NumberInput.spec.tsx +0 -276
- package/tests/components/form-control/field/TextInput.spec.tsx +0 -258
- package/tests/components/form-control/field/Textarea.spec.tsx +0 -181
- package/tests/components/form-control/field/TimePicker.spec.tsx +0 -243
- package/tests/components/form-control/numpad/Numpad.spec.tsx +0 -238
- package/tests/components/form-control/select/Select.spec.tsx +0 -239
- package/tests/components/form-control/select/SelectItem.spec.tsx +0 -149
- package/tests/components/layout/FormGroup.spec.tsx +0 -104
- package/tests/components/layout/FormTable.spec.tsx +0 -43
- package/tests/components/layout/sidebar/Sidebar.spec.tsx +0 -190
- package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +0 -203
- package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +0 -213
- package/tests/components/layout/sidebar/SidebarUser.spec.tsx +0 -171
- package/tests/directives/ripple.spec.tsx +0 -130
- package/tests/helpers/createAppStructure.spec.tsx +0 -338
- package/tests/helpers/mergeStyles.spec.ts +0 -163
- package/tests/helpers/splitSlots.spec.tsx +0 -188
- package/tests/hooks/createControllableSignal.spec.ts +0 -194
- package/tests/hooks/createIMEHandler.spec.ts +0 -80
- package/tests/hooks/createMountTransition.spec.ts +0 -86
- package/tests/hooks/usePersisted.spec.tsx +0 -191
- package/tests/hooks/usePrint.spec.tsx +0 -123
- package/tests/hooks/useRouterLink.spec.tsx +0 -183
- package/tests/providers/ConfigContext.spec.ts +0 -40
- package/tests/providers/ServiceClientContext.spec.tsx +0 -83
- package/tests/providers/shared-data/SharedDataProvider.spec.tsx +0 -233
- /package/dist/{solid/src/components → components}/data/Pagination.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/Table.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/calendar/Calendar.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/kanban/Kanban.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/kanban/KanbanContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/list/List.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/list/ListContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/list/ListItem.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/list/ListItem.styles.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/permission-table/PermissionTable.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/sheet/DataSheet.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/sheet/DataSheet.styles.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/sheet/DataSheetColumn.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/sheet/DataSheetConfigDialog.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/sheet/sheetUtils.d.ts +0 -0
- /package/dist/{solid/src/components → components}/data/sheet/types.d.ts +0 -0
- /package/dist/{solid/src/components → components}/disclosure/Collapse.d.ts +0 -0
- /package/dist/{solid/src/components → components}/disclosure/Dialog.d.ts +0 -0
- /package/dist/{solid/src/components → components}/disclosure/DialogContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/disclosure/DialogInstanceContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/disclosure/DialogProvider.d.ts +0 -0
- /package/dist/{solid/src/components → components}/disclosure/Dropdown.d.ts +0 -0
- /package/dist/{solid/src/components → components}/disclosure/Tabs.d.ts +0 -0
- /package/dist/{solid/src/components → components}/disclosure/dialogZIndex.d.ts +0 -0
- /package/dist/{solid/src/components → components}/display/Alert.d.ts +0 -0
- /package/dist/{solid/src/components → components}/display/Barcode.d.ts +0 -0
- /package/dist/{solid/src/components → components}/display/Card.d.ts +0 -0
- /package/dist/{solid/src/components → components}/display/Icon.d.ts +0 -0
- /package/dist/{solid/src/components → components}/display/Tag.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/Progress.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/loading/LoadingContainer.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/loading/LoadingContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/loading/LoadingProvider.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/notification/NotificationBanner.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/notification/NotificationBell.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/notification/NotificationContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/notification/NotificationProvider.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/notification/index.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/print/Print.d.ts +0 -0
- /package/dist/{solid/src/components → components}/feedback/print/PrintInstanceContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/Button.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/DropdownTrigger.styles.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/ThemeToggle.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/checkbox/Checkbox.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/checkbox/Checkbox.styles.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/checkbox/CheckboxGroup.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/checkbox/Radio.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/checkbox/RadioGroup.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/color-picker/ColorPicker.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/combobox/Combobox.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/combobox/ComboboxContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/combobox/ComboboxItem.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/date-range-picker/DateRangePicker.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/editor/EditorToolbar.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/numpad/Numpad.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/select/Select.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/select/SelectContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/select/SelectItem.d.ts +0 -0
- /package/dist/{solid/src/components → components}/form-control/state-preset/StatePreset.d.ts +0 -0
- /package/dist/{solid/src/components → components}/layout/FormGroup.d.ts +0 -0
- /package/dist/{solid/src/components → components}/layout/FormTable.d.ts +0 -0
- /package/dist/{solid/src/components → components}/layout/sidebar/Sidebar.d.ts +0 -0
- /package/dist/{solid/src/components → components}/layout/sidebar/SidebarContext.d.ts +0 -0
- /package/dist/{solid/src/components → components}/layout/sidebar/SidebarMenu.d.ts +0 -0
- /package/dist/{solid/src/components → components}/layout/topbar/Topbar.d.ts +0 -0
- /package/dist/{solid/src/components → components}/layout/topbar/TopbarContainer.d.ts +0 -0
- /package/dist/{solid/src/components → components}/layout/topbar/TopbarMenu.d.ts +0 -0
- /package/dist/{solid/src/components → components}/layout/topbar/TopbarUser.d.ts +0 -0
- /package/dist/{solid/src/directives → directives}/ripple.d.ts +0 -0
- /package/dist/{solid/src/helpers → helpers}/createAppStructure.d.ts +0 -0
- /package/dist/{solid/src/helpers → helpers}/mergeStyles.d.ts +0 -0
- /package/dist/{solid/src/helpers → helpers}/splitSlots.d.ts +0 -0
- /package/dist/{solid/src/hooks → hooks}/createControllableSignal.d.ts +0 -0
- /package/dist/{solid/src/hooks → hooks}/createIMEHandler.d.ts +0 -0
- /package/dist/{solid/src/hooks → hooks}/createMountTransition.d.ts +0 -0
- /package/dist/{solid/src/hooks → hooks}/useClipboardValueCopy.d.ts +0 -0
- /package/dist/{solid/src/hooks → hooks}/usePrint.d.ts +0 -0
- /package/dist/{solid/src/hooks → hooks}/useRouterLink.d.ts +0 -0
- /package/dist/{solid/src/providers → providers}/ServiceClientContext.d.ts +0 -0
- /package/dist/{solid/src/providers → providers}/ServiceClientProvider.d.ts +0 -0
- /package/dist/{solid/src/providers → providers}/shared-data/SharedDataContext.d.ts +0 -0
- /package/dist/{solid/src/providers → providers}/shared-data/SharedDataProvider.d.ts +0 -0
- /package/dist/{solid/src/styles → styles}/patterns.styles.d.ts +0 -0
- /package/dist/{solid/src/styles → styles}/tokens.styles.d.ts +0 -0
package/README.md
CHANGED
|
@@ -37,1602 +37,163 @@ export default {
|
|
|
37
37
|
|
|
38
38
|
### Provider Setup
|
|
39
39
|
|
|
40
|
-
Wrap your app root with `InitializeProvider
|
|
40
|
+
Wrap your app root with `InitializeProvider`. It automatically sets up all required providers internally: configuration context, theme (dark/light/system), notification system with banner, global error capturing (window.onerror, unhandledrejection), loading overlay, and programmatic dialog support.
|
|
41
41
|
|
|
42
42
|
```tsx
|
|
43
|
-
import { InitializeProvider
|
|
43
|
+
import { InitializeProvider } from "@simplysm/solid";
|
|
44
44
|
|
|
45
45
|
function App() {
|
|
46
46
|
return (
|
|
47
47
|
<InitializeProvider config={{ clientName: "my-app" }}>
|
|
48
|
-
|
|
49
|
-
{/* app content */}
|
|
50
|
-
</ThemeProvider>
|
|
48
|
+
{/* app content */}
|
|
51
49
|
</InitializeProvider>
|
|
52
50
|
);
|
|
53
51
|
}
|
|
54
52
|
```
|
|
55
53
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
```tsx
|
|
59
|
-
import { ConfigContext, ThemeProvider } from "@simplysm/solid";
|
|
60
|
-
|
|
61
|
-
function App() {
|
|
62
|
-
return (
|
|
63
|
-
<ConfigContext.Provider value={{ clientName: "my-app" }}>
|
|
64
|
-
<ThemeProvider>
|
|
65
|
-
{/* app content */}
|
|
66
|
-
</ThemeProvider>
|
|
67
|
-
</ConfigContext.Provider>
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### Base CSS
|
|
73
|
-
|
|
74
|
-
Import the base CSS in your entry point:
|
|
75
|
-
|
|
76
|
-
```typescript
|
|
77
|
-
// entry point (e.g., index.tsx)
|
|
78
|
-
import "@simplysm/solid/base.css";
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## Components
|
|
84
|
-
|
|
85
|
-
### Form Control
|
|
86
|
-
|
|
87
|
-
#### Button
|
|
88
|
-
|
|
89
|
-
Interactive button component with built-in Material Design ripple effect.
|
|
90
|
-
|
|
91
|
-
```tsx
|
|
92
|
-
import { Button } from "@simplysm/solid";
|
|
93
|
-
|
|
94
|
-
<Button theme="primary" variant="solid">Confirm</Button>
|
|
95
|
-
<Button theme="danger" variant="outline" size="sm">Delete</Button>
|
|
96
|
-
<Button variant="ghost">Cancel</Button>
|
|
97
|
-
<Button disabled>Disabled</Button>
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
| Prop | Type | Default | Description |
|
|
101
|
-
|------|------|---------|-------------|
|
|
102
|
-
| `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"base"` | Color theme |
|
|
103
|
-
| `variant` | `"solid" \| "outline" \| "ghost"` | `"outline"` | Style variant |
|
|
104
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
105
|
-
| `inset` | `boolean` | - | Inset style (removes border/rounded corners) |
|
|
106
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
107
|
-
|
|
108
|
-
All standard HTML `<button>` element attributes can also be passed.
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
#### TextInput
|
|
113
|
-
|
|
114
|
-
Text input field with format mask and IME (Korean, etc.) composition support.
|
|
115
|
-
|
|
116
|
-
```tsx
|
|
117
|
-
import { TextInput } from "@simplysm/solid";
|
|
118
|
-
|
|
119
|
-
// Basic usage
|
|
120
|
-
<TextInput value={name()} onValueChange={setName} placeholder="Enter name" />
|
|
121
|
-
|
|
122
|
-
// Password
|
|
123
|
-
<TextInput type="password" />
|
|
124
|
-
|
|
125
|
-
// Format mask (e.g., phone number)
|
|
126
|
-
<TextInput format="XXX-XXXX-XXXX" value={phone()} onValueChange={setPhone} />
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
| Prop | Type | Default | Description |
|
|
130
|
-
|------|------|---------|-------------|
|
|
131
|
-
| `value` | `string` | `""` | Input value |
|
|
132
|
-
| `onValueChange` | `(value: string) => void` | - | Value change callback |
|
|
133
|
-
| `type` | `"text" \| "password" \| "email"` | `"text"` | Input type |
|
|
134
|
-
| `format` | `string` | - | Input format (`X` represents character position, rest are separators) |
|
|
135
|
-
| `placeholder` | `string` | - | Placeholder |
|
|
136
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
137
|
-
| `readonly` | `boolean` | - | Read-only state |
|
|
138
|
-
| `error` | `boolean` | - | Error state (red border) |
|
|
139
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
140
|
-
| `inset` | `boolean` | - | Inset style |
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
#### NumberInput
|
|
145
|
-
|
|
146
|
-
Number input field with thousand separators and minimum decimal places support.
|
|
147
|
-
|
|
148
|
-
```tsx
|
|
149
|
-
import { NumberInput } from "@simplysm/solid";
|
|
150
|
-
|
|
151
|
-
// Basic usage (thousand separators auto-applied)
|
|
152
|
-
<NumberInput value={amount()} onValueChange={setAmount} />
|
|
153
|
-
|
|
154
|
-
// Without thousand separators
|
|
155
|
-
<NumberInput value={num()} comma={false} />
|
|
156
|
-
|
|
157
|
-
// Minimum 2 decimal places
|
|
158
|
-
<NumberInput value={price()} minDigits={2} />
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
| Prop | Type | Default | Description |
|
|
162
|
-
|------|------|---------|-------------|
|
|
163
|
-
| `value` | `number` | - | Input value |
|
|
164
|
-
| `onValueChange` | `(value: number \| undefined) => void` | - | Value change callback |
|
|
165
|
-
| `comma` | `boolean` | `true` | Show thousand separators |
|
|
166
|
-
| `minDigits` | `number` | - | Minimum decimal places |
|
|
167
|
-
| `placeholder` | `string` | - | Placeholder |
|
|
168
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
169
|
-
| `readonly` | `boolean` | - | Read-only state |
|
|
170
|
-
| `error` | `boolean` | - | Error state |
|
|
171
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
172
|
-
| `inset` | `boolean` | - | Inset style |
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
#### DatePicker
|
|
177
|
-
|
|
178
|
-
Date input field supporting year, month, and date units. Values are handled using the `DateOnly` type.
|
|
179
|
-
|
|
180
|
-
```tsx
|
|
181
|
-
import { DatePicker } from "@simplysm/solid";
|
|
182
|
-
import { DateOnly } from "@simplysm/core-common";
|
|
183
|
-
|
|
184
|
-
// Date input
|
|
185
|
-
<DatePicker unit="date" value={date()} onValueChange={setDate} />
|
|
186
|
-
|
|
187
|
-
// Year-month input
|
|
188
|
-
<DatePicker unit="month" value={monthDate()} onValueChange={setMonthDate} />
|
|
189
|
-
|
|
190
|
-
// Year-only input
|
|
191
|
-
<DatePicker unit="year" value={yearDate()} onValueChange={setYearDate} />
|
|
192
|
-
|
|
193
|
-
// min/max constraints
|
|
194
|
-
<DatePicker
|
|
195
|
-
unit="date"
|
|
196
|
-
value={date()}
|
|
197
|
-
onValueChange={setDate}
|
|
198
|
-
min={new DateOnly(2025, 1, 1)}
|
|
199
|
-
max={new DateOnly(2025, 12, 31)}
|
|
200
|
-
/>
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
| Prop | Type | Default | Description |
|
|
204
|
-
|------|------|---------|-------------|
|
|
205
|
-
| `value` | `DateOnly` | - | Input value |
|
|
206
|
-
| `onValueChange` | `(value: DateOnly \| undefined) => void` | - | Value change callback |
|
|
207
|
-
| `unit` | `"year" \| "month" \| "date"` | `"date"` | Date unit |
|
|
208
|
-
| `min` | `DateOnly` | - | Minimum date |
|
|
209
|
-
| `max` | `DateOnly` | - | Maximum date |
|
|
210
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
211
|
-
| `readonly` | `boolean` | - | Read-only state |
|
|
212
|
-
| `error` | `boolean` | - | Error state |
|
|
213
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
214
|
-
| `inset` | `boolean` | - | Inset style |
|
|
215
|
-
|
|
216
|
-
> `DateTimePicker` and `TimePicker` follow the same pattern for datetime (`DateTime`) and time (`Time`) input.
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
#### DateRangePicker
|
|
221
|
-
|
|
222
|
-
Component for inputting date ranges with period type selection (day/month/range). The from/to values are automatically adjusted when periodType changes.
|
|
223
|
-
|
|
224
|
-
```tsx
|
|
225
|
-
import { DateRangePicker, type DateRangePeriodType } from "@simplysm/solid";
|
|
226
|
-
import { createSignal } from "solid-js";
|
|
227
|
-
import { DateOnly } from "@simplysm/core-common";
|
|
228
|
-
|
|
229
|
-
const [periodType, setPeriodType] = createSignal<DateRangePeriodType>("range");
|
|
230
|
-
const [from, setFrom] = createSignal<DateOnly>();
|
|
231
|
-
const [to, setTo] = createSignal<DateOnly>();
|
|
232
|
-
|
|
233
|
-
<DateRangePicker
|
|
234
|
-
periodType={periodType()}
|
|
235
|
-
onPeriodTypeChange={setPeriodType}
|
|
236
|
-
from={from()}
|
|
237
|
-
onFromChange={setFrom}
|
|
238
|
-
to={to()}
|
|
239
|
-
onToChange={setTo}
|
|
240
|
-
/>
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
| Prop | Type | Default | Description |
|
|
244
|
-
|------|------|---------|-------------|
|
|
245
|
-
| `periodType` | `"day" \| "month" \| "range"` | `"range"` | Period type |
|
|
246
|
-
| `onPeriodTypeChange` | `(value: DateRangePeriodType) => void` | - | Period type change callback |
|
|
247
|
-
| `from` | `DateOnly` | - | Start date |
|
|
248
|
-
| `onFromChange` | `(value: DateOnly \| undefined) => void` | - | Start date change callback |
|
|
249
|
-
| `to` | `DateOnly` | - | End date |
|
|
250
|
-
| `onToChange` | `(value: DateOnly \| undefined) => void` | - | End date change callback |
|
|
251
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
252
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
253
|
-
| `periodLabels` | `Partial<Record<DateRangePeriodType, string>>` | `{ day: "Day", month: "Month", range: "Range" }` | Period type labels |
|
|
254
|
-
|
|
255
|
-
---
|
|
256
|
-
|
|
257
|
-
#### Textarea
|
|
258
|
-
|
|
259
|
-
Multi-line text input field. Height adjusts automatically based on content, with IME composition support.
|
|
260
|
-
|
|
261
|
-
```tsx
|
|
262
|
-
import { Textarea } from "@simplysm/solid";
|
|
263
|
-
|
|
264
|
-
<Textarea value={text()} onValueChange={setText} />
|
|
265
|
-
|
|
266
|
-
// Minimum 3 rows height
|
|
267
|
-
<Textarea minRows={3} value={text()} onValueChange={setText} />
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
| Prop | Type | Default | Description |
|
|
271
|
-
|------|------|---------|-------------|
|
|
272
|
-
| `value` | `string` | `""` | Input value |
|
|
273
|
-
| `onValueChange` | `(value: string) => void` | - | Value change callback |
|
|
274
|
-
| `placeholder` | `string` | - | Placeholder |
|
|
275
|
-
| `minRows` | `number` | `1` | Minimum number of rows |
|
|
276
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
277
|
-
| `readonly` | `boolean` | - | Read-only state |
|
|
278
|
-
| `error` | `boolean` | - | Error state |
|
|
279
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
280
|
-
| `inset` | `boolean` | - | Inset style |
|
|
281
|
-
|
|
282
|
-
---
|
|
283
|
-
|
|
284
|
-
#### Select
|
|
285
|
-
|
|
286
|
-
Dropdown selection component. Supports both items prop approach and children (Compound Components) approach. Single and multiple selection supported.
|
|
287
|
-
|
|
288
|
-
```tsx
|
|
289
|
-
import { Select } from "@simplysm/solid";
|
|
290
|
-
|
|
291
|
-
// items approach (simple array)
|
|
292
|
-
<Select
|
|
293
|
-
items={["Apple", "Banana", "Strawberry"]}
|
|
294
|
-
value={fruit()}
|
|
295
|
-
onValueChange={setFruit}
|
|
296
|
-
placeholder="Select fruit"
|
|
297
|
-
/>
|
|
298
|
-
|
|
299
|
-
// children approach (Compound Components)
|
|
300
|
-
<Select value={fruit()} onValueChange={setFruit} renderValue={(v) => v.name}>
|
|
301
|
-
<Select.Item value={item1}>{item1.name}</Select.Item>
|
|
302
|
-
<Select.Item value={item2}>{item2.name}</Select.Item>
|
|
303
|
-
</Select>
|
|
304
|
-
|
|
305
|
-
// items approach + ItemTemplate for custom rendering
|
|
306
|
-
<Select items={users} value={selectedUser()} onValueChange={setSelectedUser}>
|
|
307
|
-
<Select.ItemTemplate>
|
|
308
|
-
{(user) => <>{user.name} ({user.email})</>}
|
|
309
|
-
</Select.ItemTemplate>
|
|
310
|
-
</Select>
|
|
311
|
-
|
|
312
|
-
// Multiple selection
|
|
313
|
-
<Select items={options} value={selected()} onValueChange={setSelected} multiple />
|
|
314
|
-
|
|
315
|
-
// With action buttons and header
|
|
316
|
-
<Select value={item()} onValueChange={setItem} renderValue={(v) => v.name}>
|
|
317
|
-
<Select.Header><div>Custom header</div></Select.Header>
|
|
318
|
-
<Select.Action onClick={handleAdd}>+</Select.Action>
|
|
319
|
-
<Select.Item value={item1}>{item1.name}</Select.Item>
|
|
320
|
-
</Select>
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
| Prop | Type | Default | Description |
|
|
324
|
-
|------|------|---------|-------------|
|
|
325
|
-
| `value` | `T \| T[]` | - | Selected value |
|
|
326
|
-
| `onValueChange` | `(value: T \| T[]) => void` | - | Value change callback |
|
|
327
|
-
| `items` | `T[]` | - | Items array (items approach) |
|
|
328
|
-
| `getChildren` | `(item: T, index: number, depth: number) => T[] \| undefined` | - | Tree structure children getter |
|
|
329
|
-
| `renderValue` | `(value: T) => JSX.Element` | - | Value rendering function (required for children approach) |
|
|
330
|
-
| `multiple` | `boolean` | `false` | Multiple selection |
|
|
331
|
-
| `multiDisplayDirection` | `"horizontal" \| "vertical"` | `"horizontal"` | Display direction for multiple selection |
|
|
332
|
-
| `hideSelectAll` | `boolean` | - | Hide select all button (multiple selection) |
|
|
333
|
-
| `placeholder` | `string` | - | Placeholder |
|
|
334
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
335
|
-
| `required` | `boolean` | - | Required field |
|
|
336
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
337
|
-
| `inset` | `boolean` | - | Inset style |
|
|
338
|
-
|
|
339
|
-
**Sub-components:**
|
|
340
|
-
- `Select.Item` -- Selection item
|
|
341
|
-
- `Select.Action` -- Right-side action button
|
|
342
|
-
- `Select.Header` -- Dropdown top custom area
|
|
343
|
-
- `Select.ItemTemplate` -- Item rendering template for items approach
|
|
344
|
-
|
|
345
|
-
---
|
|
346
|
-
|
|
347
|
-
#### Combobox
|
|
348
|
-
|
|
349
|
-
Autocomplete component with async search and item selection support. Debouncing is built-in.
|
|
350
|
-
|
|
351
|
-
```tsx
|
|
352
|
-
import { Combobox } from "@simplysm/solid";
|
|
353
|
-
|
|
354
|
-
<Combobox
|
|
355
|
-
loadItems={async (query) => {
|
|
356
|
-
const response = await fetch(`/api/search?q=${query}`);
|
|
357
|
-
return response.json();
|
|
358
|
-
}}
|
|
359
|
-
renderValue={(item) => item.name}
|
|
360
|
-
value={selected()}
|
|
361
|
-
onValueChange={setSelected}
|
|
362
|
-
placeholder="Search..."
|
|
363
|
-
>
|
|
364
|
-
<Combobox.ItemTemplate>
|
|
365
|
-
{(item) => <>{item.name}</>}
|
|
366
|
-
</Combobox.ItemTemplate>
|
|
367
|
-
</Combobox>
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
| Prop | Type | Default | Description |
|
|
371
|
-
|------|------|---------|-------------|
|
|
372
|
-
| `value` | `T` | - | Selected value |
|
|
373
|
-
| `onValueChange` | `(value: T) => void` | - | Value change callback |
|
|
374
|
-
| `loadItems` | `(query: string) => Promise<T[]>` | **(required)** | Item loading function |
|
|
375
|
-
| `renderValue` | `(value: T) => JSX.Element` | **(required)** | Value rendering function |
|
|
376
|
-
| `debounceMs` | `number` | `300` | Debounce delay (ms) |
|
|
377
|
-
| `allowCustomValue` | `boolean` | - | Allow custom values |
|
|
378
|
-
| `parseCustomValue` | `(text: string) => T` | - | Custom value parsing function |
|
|
379
|
-
| `placeholder` | `string` | - | Placeholder |
|
|
380
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
381
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
382
|
-
| `inset` | `boolean` | - | Inset style |
|
|
383
|
-
|
|
384
|
-
**Sub-components:**
|
|
385
|
-
- `Combobox.Item` -- Selection item
|
|
386
|
-
- `Combobox.ItemTemplate` -- Item rendering template
|
|
387
|
-
|
|
388
|
-
---
|
|
389
|
-
|
|
390
|
-
#### Checkbox / Radio
|
|
391
|
-
|
|
392
|
-
Checkbox and radio button components.
|
|
393
|
-
|
|
394
|
-
```tsx
|
|
395
|
-
import { Checkbox, Radio } from "@simplysm/solid";
|
|
396
|
-
|
|
397
|
-
<Checkbox value={checked()} onValueChange={setChecked}>I agree</Checkbox>
|
|
398
|
-
<Checkbox theme="success" value={active()} onValueChange={setActive}>Activate</Checkbox>
|
|
399
|
-
|
|
400
|
-
<Radio value={option() === "a"} onValueChange={() => setOption("a")}>Option A</Radio>
|
|
401
|
-
<Radio value={option() === "b"} onValueChange={() => setOption("b")}>Option B</Radio>
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
| Prop | Type | Default | Description |
|
|
405
|
-
|------|------|---------|-------------|
|
|
406
|
-
| `value` | `boolean` | `false` | Checked state |
|
|
407
|
-
| `onValueChange` | `(value: boolean) => void` | - | Value change callback |
|
|
408
|
-
| `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"primary"` | Color theme |
|
|
409
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
410
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
411
|
-
| `inset` | `boolean` | - | Inset style |
|
|
412
|
-
| `inline` | `boolean` | - | Inline style |
|
|
413
|
-
|
|
414
|
-
---
|
|
415
|
-
|
|
416
|
-
#### CheckboxGroup / RadioGroup
|
|
417
|
-
|
|
418
|
-
Group components for managing multiple/single selection across items.
|
|
419
|
-
|
|
420
|
-
```tsx
|
|
421
|
-
import { CheckboxGroup, RadioGroup } from "@simplysm/solid";
|
|
422
|
-
|
|
423
|
-
// Multiple selection
|
|
424
|
-
<CheckboxGroup value={selectedColors()} onValueChange={setSelectedColors}>
|
|
425
|
-
<CheckboxGroup.Item value="red">Red</CheckboxGroup.Item>
|
|
426
|
-
<CheckboxGroup.Item value="green">Green</CheckboxGroup.Item>
|
|
427
|
-
<CheckboxGroup.Item value="blue">Blue</CheckboxGroup.Item>
|
|
428
|
-
</CheckboxGroup>
|
|
429
|
-
|
|
430
|
-
// Single selection
|
|
431
|
-
<RadioGroup value={size()} onValueChange={setSize}>
|
|
432
|
-
<RadioGroup.Item value="sm">Small</RadioGroup.Item>
|
|
433
|
-
<RadioGroup.Item value="md">Medium</RadioGroup.Item>
|
|
434
|
-
<RadioGroup.Item value="lg">Large</RadioGroup.Item>
|
|
435
|
-
</RadioGroup>
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
**CheckboxGroup Props:**
|
|
439
|
-
|
|
440
|
-
| Prop | Type | Default | Description |
|
|
441
|
-
|------|------|---------|-------------|
|
|
442
|
-
| `value` | `T[]` | `[]` | Selected values array |
|
|
443
|
-
| `onValueChange` | `(value: T[]) => void` | - | Value change callback |
|
|
444
|
-
| `theme` | `SemanticTheme` | `"primary"` | Color theme |
|
|
445
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
446
|
-
| `disabled` | `boolean` | - | Disable all items |
|
|
447
|
-
| `inline` | `boolean` | - | Inline style |
|
|
448
|
-
| `inset` | `boolean` | - | Inset style |
|
|
449
|
-
|
|
450
|
-
**RadioGroup Props:**
|
|
451
|
-
|
|
452
|
-
| Prop | Type | Default | Description |
|
|
453
|
-
|------|------|---------|-------------|
|
|
454
|
-
| `value` | `T` | - | Selected value |
|
|
455
|
-
| `onValueChange` | `(value: T) => void` | - | Value change callback |
|
|
456
|
-
| `theme` | `SemanticTheme` | `"primary"` | Color theme |
|
|
457
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
458
|
-
| `disabled` | `boolean` | - | Disable all items |
|
|
459
|
-
| `inline` | `boolean` | - | Inline style |
|
|
460
|
-
| `inset` | `boolean` | - | Inset style |
|
|
461
|
-
|
|
462
|
-
---
|
|
463
|
-
|
|
464
|
-
#### ColorPicker
|
|
465
|
-
|
|
466
|
-
Color selection component.
|
|
467
|
-
|
|
468
|
-
```tsx
|
|
469
|
-
import { ColorPicker } from "@simplysm/solid";
|
|
470
|
-
|
|
471
|
-
<ColorPicker value={color()} onValueChange={setColor} />
|
|
472
|
-
<ColorPicker value={color()} size="sm" disabled />
|
|
473
|
-
```
|
|
474
|
-
|
|
475
|
-
| Prop | Type | Default | Description |
|
|
476
|
-
|------|------|---------|-------------|
|
|
477
|
-
| `value` | `string` | `"#000000"` | Color value (#RRGGBB format) |
|
|
478
|
-
| `onValueChange` | `(value: string) => void` | - | Value change callback |
|
|
479
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
480
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
481
|
-
|
|
482
|
-
---
|
|
483
|
-
|
|
484
|
-
#### ThemeToggle
|
|
485
|
-
|
|
486
|
-
Dark/light/system theme cycle toggle button. Must be used inside `ThemeProvider`.
|
|
487
|
-
|
|
488
|
-
```tsx
|
|
489
|
-
import { ThemeToggle } from "@simplysm/solid";
|
|
490
|
-
|
|
491
|
-
<ThemeToggle />
|
|
492
|
-
<ThemeToggle size="sm" />
|
|
493
|
-
<ThemeToggle size="lg" />
|
|
494
|
-
```
|
|
495
|
-
|
|
496
|
-
Clicking cycles through `light -> system -> dark -> light`, displaying an icon matching the current mode.
|
|
497
|
-
|
|
498
|
-
| Prop | Type | Default | Description |
|
|
499
|
-
|------|------|---------|-------------|
|
|
500
|
-
| `size` | `"sm" \| "lg"` | - | Button size |
|
|
501
|
-
|
|
502
|
-
---
|
|
503
|
-
|
|
504
|
-
#### RichTextEditor
|
|
505
|
-
|
|
506
|
-
Tiptap-based rich text editor. Supports text formatting (bold, italic, strikethrough), alignment, colors, highlights, tables, and image insertion.
|
|
507
|
-
|
|
508
|
-
```tsx
|
|
509
|
-
import { RichTextEditor } from "@simplysm/solid";
|
|
510
|
-
|
|
511
|
-
<RichTextEditor value={html()} onValueChange={setHtml} />
|
|
512
|
-
```
|
|
513
|
-
|
|
514
|
-
| Prop | Type | Default | Description |
|
|
515
|
-
|------|------|---------|-------------|
|
|
516
|
-
| `value` | `string` | - | HTML string value |
|
|
517
|
-
| `onValueChange` | `(value: string) => void` | - | Value change callback |
|
|
518
|
-
| `disabled` | `boolean` | - | Disabled state |
|
|
519
|
-
| `error` | `boolean` | - | Error state |
|
|
520
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
521
|
-
|
|
522
|
-
---
|
|
523
|
-
|
|
524
|
-
#### Numpad
|
|
525
|
-
|
|
526
|
-
Numeric keypad component. Used in environments requiring touch-based number input.
|
|
527
|
-
|
|
528
|
-
```tsx
|
|
529
|
-
import { Numpad } from "@simplysm/solid";
|
|
530
|
-
|
|
531
|
-
<Numpad value={amount()} onValueChange={setAmount} />
|
|
532
|
-
|
|
533
|
-
// With ENT/minus buttons
|
|
534
|
-
<Numpad
|
|
535
|
-
value={amount()}
|
|
536
|
-
onValueChange={setAmount}
|
|
537
|
-
useEnterButton
|
|
538
|
-
useMinusButton
|
|
539
|
-
onEnterButtonClick={handleSubmit}
|
|
540
|
-
/>
|
|
541
|
-
```
|
|
542
|
-
|
|
543
|
-
| Prop | Type | Default | Description |
|
|
544
|
-
|------|------|---------|-------------|
|
|
545
|
-
| `value` | `number` | - | Input value |
|
|
546
|
-
| `onValueChange` | `(value: number \| undefined) => void` | - | Value change callback |
|
|
547
|
-
| `placeholder` | `string` | - | Placeholder |
|
|
548
|
-
| `required` | `boolean` | - | Required field |
|
|
549
|
-
| `inputDisabled` | `boolean` | - | Disable direct text field input |
|
|
550
|
-
| `useEnterButton` | `boolean` | - | Show ENT button |
|
|
551
|
-
| `useMinusButton` | `boolean` | - | Show minus button |
|
|
552
|
-
| `onEnterButtonClick` | `() => void` | - | ENT click callback |
|
|
553
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
554
|
-
|
|
555
|
-
---
|
|
556
|
-
|
|
557
|
-
#### StatePreset
|
|
558
|
-
|
|
559
|
-
Component for saving/loading screen state (search conditions, etc.) as presets. Persisted in localStorage.
|
|
560
|
-
|
|
561
|
-
```tsx
|
|
562
|
-
import { StatePreset } from "@simplysm/solid";
|
|
563
|
-
|
|
564
|
-
<StatePreset
|
|
565
|
-
presetKey="user-search"
|
|
566
|
-
value={searchState()}
|
|
567
|
-
onValueChange={setSearchState}
|
|
568
|
-
/>
|
|
569
|
-
```
|
|
570
|
-
|
|
571
|
-
| Prop | Type | Default | Description |
|
|
572
|
-
|------|------|---------|-------------|
|
|
573
|
-
| `presetKey` | `string` | **(required)** | Preset storage key |
|
|
574
|
-
| `value` | `T` | **(required)** | Current state value |
|
|
575
|
-
| `onValueChange` | `(value: T) => void` | **(required)** | State restore callback |
|
|
576
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
577
|
-
|
|
578
|
-
---
|
|
579
|
-
|
|
580
|
-
### Navigation
|
|
581
|
-
|
|
582
|
-
#### Tabs
|
|
583
|
-
|
|
584
|
-
Tab navigation component.
|
|
585
|
-
|
|
586
|
-
```tsx
|
|
587
|
-
import { Tabs } from "@simplysm/solid";
|
|
588
|
-
|
|
589
|
-
<Tabs value={activeTab()} onValueChange={setActiveTab}>
|
|
590
|
-
<Tabs.Tab value="tab1">Tab 1</Tabs.Tab>
|
|
591
|
-
<Tabs.Tab value="tab2">Tab 2</Tabs.Tab>
|
|
592
|
-
<Tabs.Tab value="tab3" disabled>Tab 3</Tabs.Tab>
|
|
593
|
-
</Tabs>
|
|
594
|
-
```
|
|
595
|
-
|
|
596
|
-
| Prop | Type | Default | Description |
|
|
597
|
-
|------|------|---------|-------------|
|
|
598
|
-
| `value` | `string` | - | Selected tab value |
|
|
599
|
-
| `onValueChange` | `(value: string) => void` | - | Tab change callback |
|
|
600
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
601
|
-
|
|
602
|
-
**Sub-components:**
|
|
603
|
-
- `Tabs.Tab` -- Individual tab (`value: string`, `disabled?: boolean`)
|
|
604
|
-
|
|
605
|
-
---
|
|
606
|
-
|
|
607
|
-
### Display
|
|
608
|
-
|
|
609
|
-
#### Card
|
|
610
|
-
|
|
611
|
-
Container with shadow effect.
|
|
612
|
-
|
|
613
|
-
```tsx
|
|
614
|
-
import { Card } from "@simplysm/solid";
|
|
615
|
-
|
|
616
|
-
<Card>Card content</Card>
|
|
617
|
-
<Card class="p-4">Card with padding</Card>
|
|
618
|
-
```
|
|
619
|
-
|
|
620
|
-
---
|
|
621
|
-
|
|
622
|
-
#### Tag
|
|
623
|
-
|
|
624
|
-
Inline tag/badge component.
|
|
625
|
-
|
|
626
|
-
```tsx
|
|
627
|
-
import { Tag } from "@simplysm/solid";
|
|
628
|
-
|
|
629
|
-
<Tag theme="primary">New</Tag>
|
|
630
|
-
<Tag theme="success">Complete</Tag>
|
|
631
|
-
<Tag theme="danger">Urgent</Tag>
|
|
632
|
-
```
|
|
633
|
-
|
|
634
|
-
| Prop | Type | Default | Description |
|
|
635
|
-
|------|------|---------|-------------|
|
|
636
|
-
| `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"base"` | Color theme |
|
|
637
|
-
|
|
638
|
-
---
|
|
639
|
-
|
|
640
|
-
#### Alert
|
|
641
|
-
|
|
642
|
-
Block-level alert/notice component.
|
|
643
|
-
|
|
644
|
-
```tsx
|
|
645
|
-
import { Alert } from "@simplysm/solid";
|
|
646
|
-
|
|
647
|
-
<Alert theme="info">This is an information message.</Alert>
|
|
648
|
-
<Alert theme="warning">Please pay attention to this.</Alert>
|
|
649
|
-
<Alert theme="danger">An error has occurred.</Alert>
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
| Prop | Type | Default | Description |
|
|
653
|
-
|------|------|---------|-------------|
|
|
654
|
-
| `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"base"` | Color theme |
|
|
655
|
-
|
|
656
|
-
---
|
|
657
|
-
|
|
658
|
-
#### Icon
|
|
659
|
-
|
|
660
|
-
Tabler Icons wrapper component. Displayed in `em` units to scale proportionally with surrounding text.
|
|
661
|
-
|
|
662
|
-
```tsx
|
|
663
|
-
import { Icon } from "@simplysm/solid";
|
|
664
|
-
import { IconCheck, IconAlertTriangle } from "@tabler/icons-solidjs";
|
|
665
|
-
|
|
666
|
-
<Icon icon={IconCheck} />
|
|
667
|
-
<Icon icon={IconAlertTriangle} size="2em" />
|
|
668
|
-
```
|
|
669
|
-
|
|
670
|
-
| Prop | Type | Default | Description |
|
|
671
|
-
|------|------|---------|-------------|
|
|
672
|
-
| `icon` | `Component` | **(required)** | Tabler icon component |
|
|
673
|
-
| `size` | `string \| number` | `"1.25em"` | Icon size |
|
|
674
|
-
|
|
675
|
-
---
|
|
676
|
-
|
|
677
|
-
#### Progress
|
|
678
|
-
|
|
679
|
-
Progress indicator component.
|
|
680
|
-
|
|
681
|
-
```tsx
|
|
682
|
-
import { Progress } from "@simplysm/solid";
|
|
683
|
-
|
|
684
|
-
<Progress value={0.65} />
|
|
685
|
-
<Progress value={0.8} theme="success" size="lg" />
|
|
686
|
-
|
|
687
|
-
// Custom text
|
|
688
|
-
<Progress value={progress()}>
|
|
689
|
-
{Math.round(progress() * 100)}% complete
|
|
690
|
-
</Progress>
|
|
691
|
-
```
|
|
692
|
-
|
|
693
|
-
| Prop | Type | Default | Description |
|
|
694
|
-
|------|------|---------|-------------|
|
|
695
|
-
| `value` | `number` | **(required)** | Progress (0~1) |
|
|
696
|
-
| `theme` | `"primary" \| "info" \| "success" \| "warning" \| "danger" \| "base"` | `"primary"` | Color theme |
|
|
697
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
698
|
-
| `inset` | `boolean` | - | Inset style |
|
|
699
|
-
|
|
700
|
-
---
|
|
701
|
-
|
|
702
|
-
#### Barcode
|
|
703
|
-
|
|
704
|
-
bwip-js-based barcode/QR code rendering component. Supports over 100 barcode types.
|
|
705
|
-
|
|
706
|
-
```tsx
|
|
707
|
-
import { Barcode } from "@simplysm/solid";
|
|
708
|
-
|
|
709
|
-
<Barcode type="qrcode" value="https://example.com" />
|
|
710
|
-
<Barcode type="code128" value="ABC-12345" />
|
|
711
|
-
<Barcode type="ean13" value="4901234567890" />
|
|
712
|
-
```
|
|
713
|
-
|
|
714
|
-
| Prop | Type | Default | Description |
|
|
715
|
-
|------|------|---------|-------------|
|
|
716
|
-
| `type` | `BarcodeType` | **(required)** | Barcode type (`"qrcode"`, `"code128"`, `"ean13"`, etc.) |
|
|
717
|
-
| `value` | `string` | - | Barcode value |
|
|
718
|
-
|
|
719
|
-
---
|
|
720
|
-
|
|
721
|
-
#### Echarts
|
|
722
|
-
|
|
723
|
-
Apache ECharts chart wrapper component. Requires `echarts` peer dependency installation.
|
|
724
|
-
|
|
725
|
-
```tsx
|
|
726
|
-
import { Echarts } from "@simplysm/solid";
|
|
727
|
-
|
|
728
|
-
<Echarts
|
|
729
|
-
option={{
|
|
730
|
-
xAxis: { type: "category", data: ["Mon", "Tue", "Wed"] },
|
|
731
|
-
yAxis: { type: "value" },
|
|
732
|
-
series: [{ data: [120, 200, 150], type: "bar" }],
|
|
733
|
-
}}
|
|
734
|
-
/>
|
|
735
|
-
|
|
736
|
-
<Echarts option={chartOption()} loading={isLoading()} />
|
|
737
|
-
```
|
|
738
|
-
|
|
739
|
-
| Prop | Type | Default | Description |
|
|
740
|
-
|------|------|---------|-------------|
|
|
741
|
-
| `option` | `echarts.EChartsOption` | **(required)** | ECharts option object |
|
|
742
|
-
| `loading` | `boolean` | - | Show loading state |
|
|
743
|
-
|
|
744
|
-
---
|
|
745
|
-
|
|
746
|
-
### Layout
|
|
747
|
-
|
|
748
|
-
#### Sidebar
|
|
749
|
-
|
|
750
|
-
Sidebar navigation with responsive support (mobile overlay below 520px). Open/closed state is saved in localStorage.
|
|
751
|
-
|
|
752
|
-
```tsx
|
|
753
|
-
import { Sidebar } from "@simplysm/solid";
|
|
754
|
-
|
|
755
|
-
<Sidebar.Container>
|
|
756
|
-
<Sidebar>
|
|
757
|
-
<Sidebar.User name="John Doe" menus={userMenus}>
|
|
758
|
-
<span>John Doe</span>
|
|
759
|
-
</Sidebar.User>
|
|
760
|
-
<Sidebar.Menu menus={menuItems} />
|
|
761
|
-
</Sidebar>
|
|
762
|
-
<div class="flex flex-1 flex-col">
|
|
763
|
-
<Topbar>
|
|
764
|
-
<h1>App Name</h1>
|
|
765
|
-
</Topbar>
|
|
766
|
-
<main class="flex-1 overflow-auto p-4">
|
|
767
|
-
{/* main content */}
|
|
768
|
-
</main>
|
|
769
|
-
</div>
|
|
770
|
-
</Sidebar.Container>
|
|
771
|
-
```
|
|
772
|
-
|
|
773
|
-
**Sub-components:**
|
|
774
|
-
- `Sidebar.Container` -- Container wrapping sidebar and main area (required)
|
|
775
|
-
- `Sidebar.Menu` -- Menu items list (`menus: SidebarMenuItem[]`)
|
|
776
|
-
- `Sidebar.User` -- User info area
|
|
777
|
-
|
|
778
|
-
---
|
|
779
|
-
|
|
780
|
-
#### Topbar
|
|
781
|
-
|
|
782
|
-
Top navigation bar. When used inside `Sidebar.Container`, a sidebar toggle button appears automatically.
|
|
783
|
-
|
|
784
|
-
```tsx
|
|
785
|
-
import { Topbar } from "@simplysm/solid";
|
|
786
|
-
|
|
787
|
-
<Topbar>
|
|
788
|
-
<h1 class="text-lg font-bold">App Name</h1>
|
|
789
|
-
<Topbar.Menu menus={menuItems} />
|
|
790
|
-
<div class="flex-1" />
|
|
791
|
-
<Topbar.User menus={userMenus}>User</Topbar.User>
|
|
792
|
-
</Topbar>
|
|
793
|
-
```
|
|
794
|
-
|
|
795
|
-
**Sub-components:**
|
|
796
|
-
- `Topbar.Container` -- Container wrapping main content below topbar
|
|
797
|
-
- `Topbar.Menu` -- Menu items list
|
|
798
|
-
- `Topbar.User` -- User menu (dropdown)
|
|
799
|
-
|
|
800
|
-
---
|
|
801
|
-
|
|
802
|
-
#### FormGroup
|
|
803
|
-
|
|
804
|
-
Layout component for arranging form fields with labels vertically or inline.
|
|
805
|
-
|
|
806
|
-
```tsx
|
|
807
|
-
import { FormGroup, TextInput } from "@simplysm/solid";
|
|
808
|
-
|
|
809
|
-
// Vertical layout (default)
|
|
810
|
-
<FormGroup>
|
|
811
|
-
<FormGroup.Item label="Name">
|
|
812
|
-
<TextInput value={name()} onValueChange={setName} />
|
|
813
|
-
</FormGroup.Item>
|
|
814
|
-
<FormGroup.Item label="Email">
|
|
815
|
-
<TextInput type="email" value={email()} onValueChange={setEmail} />
|
|
816
|
-
</FormGroup.Item>
|
|
817
|
-
</FormGroup>
|
|
818
|
-
|
|
819
|
-
// Inline layout
|
|
820
|
-
<FormGroup inline>
|
|
821
|
-
<FormGroup.Item label="Search">
|
|
822
|
-
<TextInput value={query()} onValueChange={setQuery} />
|
|
823
|
-
</FormGroup.Item>
|
|
824
|
-
<FormGroup.Item>
|
|
825
|
-
<Button theme="primary">Search</Button>
|
|
826
|
-
</FormGroup.Item>
|
|
827
|
-
</FormGroup>
|
|
828
|
-
```
|
|
829
|
-
|
|
830
|
-
| Prop | Type | Default | Description |
|
|
831
|
-
|------|------|---------|-------------|
|
|
832
|
-
| `inline` | `boolean` | `false` | Inline layout mode |
|
|
833
|
-
|
|
834
|
-
**Sub-components:**
|
|
835
|
-
- `FormGroup.Item` -- Form item (`label?: JSX.Element`)
|
|
836
|
-
|
|
837
|
-
---
|
|
838
|
-
|
|
839
|
-
#### FormTable
|
|
840
|
-
|
|
841
|
-
`<table>`-based form layout. Labels go in `<th>`, input fields in `<td>`.
|
|
842
|
-
|
|
843
|
-
```tsx
|
|
844
|
-
import { FormTable, TextInput, NumberInput } from "@simplysm/solid";
|
|
845
|
-
|
|
846
|
-
<FormTable>
|
|
847
|
-
<tbody>
|
|
848
|
-
<tr>
|
|
849
|
-
<th>Name</th>
|
|
850
|
-
<td><TextInput value={name()} onValueChange={setName} /></td>
|
|
851
|
-
<th>Age</th>
|
|
852
|
-
<td><NumberInput value={age()} onValueChange={setAge} /></td>
|
|
853
|
-
</tr>
|
|
854
|
-
<tr>
|
|
855
|
-
<th>Email</th>
|
|
856
|
-
<td colSpan={3}><TextInput type="email" value={email()} onValueChange={setEmail} /></td>
|
|
857
|
-
</tr>
|
|
858
|
-
</tbody>
|
|
859
|
-
</FormTable>
|
|
860
|
-
```
|
|
861
|
-
|
|
862
|
-
---
|
|
863
|
-
|
|
864
|
-
#### Kanban
|
|
865
|
-
|
|
866
|
-
Kanban board layout component.
|
|
867
|
-
|
|
868
|
-
---
|
|
869
|
-
|
|
870
|
-
### Data
|
|
871
|
-
|
|
872
|
-
#### Table
|
|
873
|
-
|
|
874
|
-
Basic HTML table wrapper. Provides consistent styling for borders, header backgrounds, etc.
|
|
875
|
-
|
|
876
|
-
```tsx
|
|
877
|
-
import { Table } from "@simplysm/solid";
|
|
878
|
-
|
|
879
|
-
<Table>
|
|
880
|
-
<thead>
|
|
881
|
-
<tr><th>Name</th><th>Age</th></tr>
|
|
882
|
-
</thead>
|
|
883
|
-
<tbody>
|
|
884
|
-
<tr><td>John Doe</td><td>30</td></tr>
|
|
885
|
-
<tr><td>Jane Smith</td><td>25</td></tr>
|
|
886
|
-
</tbody>
|
|
887
|
-
</Table>
|
|
888
|
-
|
|
889
|
-
// Inset style (removes outer border, fits parent container)
|
|
890
|
-
<Table inset>...</Table>
|
|
891
|
-
```
|
|
892
|
-
|
|
893
|
-
| Prop | Type | Default | Description |
|
|
894
|
-
|------|------|---------|-------------|
|
|
895
|
-
| `inset` | `boolean` | - | Inset style |
|
|
896
|
-
|
|
897
|
-
---
|
|
898
|
-
|
|
899
|
-
#### DataSheet
|
|
900
|
-
|
|
901
|
-
Advanced data table component. Supports sorting, pagination, row selection, tree expansion, column resize, column configuration, and row reordering.
|
|
902
|
-
|
|
903
|
-
```tsx
|
|
904
|
-
import { DataSheet } from "@simplysm/solid";
|
|
905
|
-
|
|
906
|
-
<DataSheet items={users()} key="user-table">
|
|
907
|
-
<DataSheet.Column key="name" header="Name" sortable>
|
|
908
|
-
{({ item }) => <>{item.name}</>}
|
|
909
|
-
</DataSheet.Column>
|
|
910
|
-
<DataSheet.Column key="age" header="Age" sortable width="80px">
|
|
911
|
-
{({ item }) => <>{item.age}</>}
|
|
912
|
-
</DataSheet.Column>
|
|
913
|
-
<DataSheet.Column key="email" header="Email">
|
|
914
|
-
{({ item }) => <>{item.email}</>}
|
|
915
|
-
</DataSheet.Column>
|
|
916
|
-
</DataSheet>
|
|
917
|
-
|
|
918
|
-
// With pagination + sorting + selection
|
|
919
|
-
<DataSheet
|
|
920
|
-
items={data()}
|
|
921
|
-
key="data-table"
|
|
922
|
-
page={page()}
|
|
923
|
-
onPageChange={setPage}
|
|
924
|
-
totalPageCount={totalPages()}
|
|
925
|
-
sorts={sorts()}
|
|
926
|
-
onSortsChange={setSorts}
|
|
927
|
-
selectMode="multiple"
|
|
928
|
-
selectedItems={selectedItems()}
|
|
929
|
-
onSelectedItemsChange={setSelectedItems}
|
|
930
|
-
>
|
|
931
|
-
{/* columns */}
|
|
932
|
-
</DataSheet>
|
|
933
|
-
```
|
|
934
|
-
|
|
935
|
-
**DataSheet Props (key items):**
|
|
936
|
-
|
|
937
|
-
| Prop | Type | Default | Description |
|
|
938
|
-
|------|------|---------|-------------|
|
|
939
|
-
| `items` | `T[]` | - | Data array |
|
|
940
|
-
| `key` | `string` | - | Column configuration storage key |
|
|
941
|
-
| `inset` | `boolean` | - | Inset style |
|
|
942
|
-
| `sorts` | `SortingDef[]` | - | Sort definition |
|
|
943
|
-
| `onSortsChange` | `(sorts: SortingDef[]) => void` | - | Sort change callback |
|
|
944
|
-
| `autoSort` | `boolean` | - | Client-side auto-sorting |
|
|
945
|
-
| `page` | `number` | - | Current page (0-based) |
|
|
946
|
-
| `onPageChange` | `(page: number) => void` | - | Page change callback |
|
|
947
|
-
| `totalPageCount` | `number` | - | Total page count |
|
|
948
|
-
| `selectMode` | `"single" \| "multiple"` | - | Selection mode |
|
|
949
|
-
| `selectedItems` | `T[]` | - | Selected items |
|
|
950
|
-
| `onSelectedItemsChange` | `(items: T[]) => void` | - | Selection change callback |
|
|
951
|
-
| `getChildren` | `(item: T, index: number) => T[] \| undefined` | - | Tree structure children getter |
|
|
952
|
-
| `hideConfigBar` | `boolean` | - | Hide configuration bar |
|
|
953
|
-
|
|
954
|
-
**DataSheet.Column Props:**
|
|
955
|
-
|
|
956
|
-
| Prop | Type | Default | Description |
|
|
957
|
-
|------|------|---------|-------------|
|
|
958
|
-
| `key` | `string` | **(required)** | Column identifier key |
|
|
959
|
-
| `header` | `string \| string[]` | - | Header text (array for multi-level headers) |
|
|
960
|
-
| `headerContent` | `() => JSX.Element` | - | Custom header rendering |
|
|
961
|
-
| `summary` | `() => JSX.Element` | - | Summary row rendering |
|
|
962
|
-
| `width` | `string` | - | Column width |
|
|
963
|
-
| `fixed` | `boolean` | - | Fixed column |
|
|
964
|
-
| `hidden` | `boolean` | - | Hidden column |
|
|
965
|
-
| `sortable` | `boolean` | - | Sortable |
|
|
966
|
-
| `resizable` | `boolean` | - | Resizable |
|
|
967
|
-
| `children` | `(ctx: { item: T, index: number, depth: number }) => JSX.Element` | **(required)** | Cell rendering function |
|
|
968
|
-
|
|
969
|
-
---
|
|
970
|
-
|
|
971
|
-
#### List
|
|
972
|
-
|
|
973
|
-
Tree-view style list component. Supports keyboard navigation.
|
|
974
|
-
|
|
975
|
-
```tsx
|
|
976
|
-
import { List } from "@simplysm/solid";
|
|
977
|
-
|
|
978
|
-
<List>
|
|
979
|
-
<List.Item>Item 1</List.Item>
|
|
980
|
-
<List.Item>Item 2</List.Item>
|
|
981
|
-
<List.Item>
|
|
982
|
-
Parent item
|
|
983
|
-
<List.Item.Children>
|
|
984
|
-
<List.Item>Child item 1</List.Item>
|
|
985
|
-
<List.Item>Child item 2</List.Item>
|
|
986
|
-
</List.Item.Children>
|
|
987
|
-
</List.Item>
|
|
988
|
-
</List>
|
|
989
|
-
|
|
990
|
-
// Inset style
|
|
991
|
-
<List inset>
|
|
992
|
-
<List.Item>Inset item</List.Item>
|
|
993
|
-
</List>
|
|
994
|
-
```
|
|
995
|
-
|
|
996
|
-
**Keyboard navigation:**
|
|
997
|
-
- `ArrowUp` / `ArrowDown` -- Move focus to previous/next item
|
|
998
|
-
- `Space` / `Enter` -- Click current item
|
|
999
|
-
- `ArrowRight` -- Expand if collapsed, focus first child if expanded
|
|
1000
|
-
- `ArrowLeft` -- Collapse if expanded, focus parent if collapsed
|
|
1001
|
-
- `Home` / `End` -- Focus first/last item
|
|
1002
|
-
|
|
1003
|
-
| Prop | Type | Default | Description |
|
|
1004
|
-
|------|------|---------|-------------|
|
|
1005
|
-
| `inset` | `boolean` | - | Transparent background style |
|
|
1006
|
-
|
|
1007
|
-
---
|
|
1008
|
-
|
|
1009
|
-
#### Pagination
|
|
1010
|
-
|
|
1011
|
-
Page navigation component.
|
|
1012
|
-
|
|
1013
|
-
```tsx
|
|
1014
|
-
import { Pagination } from "@simplysm/solid";
|
|
1015
|
-
|
|
1016
|
-
<Pagination
|
|
1017
|
-
page={currentPage()}
|
|
1018
|
-
onPageChange={setCurrentPage}
|
|
1019
|
-
totalPageCount={20}
|
|
1020
|
-
displayPageCount={10}
|
|
1021
|
-
/>
|
|
1022
|
-
```
|
|
1023
|
-
|
|
1024
|
-
| Prop | Type | Default | Description |
|
|
1025
|
-
|------|------|---------|-------------|
|
|
1026
|
-
| `page` | `number` | **(required)** | Current page (0-based) |
|
|
1027
|
-
| `onPageChange` | `(page: number) => void` | - | Page change callback |
|
|
1028
|
-
| `totalPageCount` | `number` | **(required)** | Total page count |
|
|
1029
|
-
| `displayPageCount` | `number` | `10` | Number of pages to display at once |
|
|
1030
|
-
| `size` | `"sm" \| "lg"` | - | Size |
|
|
1031
|
-
|
|
1032
|
-
---
|
|
1033
|
-
|
|
1034
|
-
#### Calendar
|
|
1035
|
-
|
|
1036
|
-
Calendar-style data display component.
|
|
1037
|
-
|
|
1038
|
-
```tsx
|
|
1039
|
-
import { Calendar } from "@simplysm/solid";
|
|
1040
|
-
|
|
1041
|
-
<Calendar
|
|
1042
|
-
items={events()}
|
|
1043
|
-
getItemDate={(event) => event.date}
|
|
1044
|
-
renderItem={(event) => <div>{event.title}</div>}
|
|
1045
|
-
yearMonth={yearMonth()}
|
|
1046
|
-
onYearMonthChange={setYearMonth}
|
|
1047
|
-
/>
|
|
1048
|
-
```
|
|
1049
|
-
|
|
1050
|
-
| Prop | Type | Default | Description |
|
|
1051
|
-
|------|------|---------|-------------|
|
|
1052
|
-
| `items` | `T[]` | **(required)** | Data array |
|
|
1053
|
-
| `getItemDate` | `(item: T, index: number) => DateOnly` | **(required)** | Item date extraction function |
|
|
1054
|
-
| `renderItem` | `(item: T, index: number) => JSX.Element` | **(required)** | Item rendering function |
|
|
1055
|
-
| `yearMonth` | `DateOnly` | - | Year-month to display |
|
|
1056
|
-
| `onYearMonthChange` | `(value: DateOnly) => void` | - | Year-month change callback |
|
|
1057
|
-
| `weekStartDay` | `number` | `0` (Sunday) | Week start day |
|
|
1058
|
-
|
|
1059
|
-
---
|
|
1060
|
-
|
|
1061
|
-
#### PermissionTable
|
|
1062
|
-
|
|
1063
|
-
Permission management table component.
|
|
1064
|
-
|
|
1065
|
-
---
|
|
1066
|
-
|
|
1067
|
-
### Disclosure
|
|
1068
|
-
|
|
1069
|
-
#### Collapse
|
|
1070
|
-
|
|
1071
|
-
Content collapse/expand animation component. Uses `margin-top`-based transition for smooth open/close effects.
|
|
1072
|
-
|
|
1073
|
-
```tsx
|
|
1074
|
-
import { Collapse, Button } from "@simplysm/solid";
|
|
1075
|
-
import { createSignal } from "solid-js";
|
|
1076
|
-
|
|
1077
|
-
const [open, setOpen] = createSignal(false);
|
|
1078
|
-
|
|
1079
|
-
<Button
|
|
1080
|
-
aria-expanded={open()}
|
|
1081
|
-
aria-controls="content"
|
|
1082
|
-
onClick={() => setOpen(!open())}
|
|
1083
|
-
>
|
|
1084
|
-
Toggle
|
|
1085
|
-
</Button>
|
|
1086
|
-
<Collapse id="content" open={open()}>
|
|
1087
|
-
<p>Collapsible content</p>
|
|
1088
|
-
</Collapse>
|
|
1089
|
-
```
|
|
1090
|
-
|
|
1091
|
-
| Prop | Type | Default | Description |
|
|
1092
|
-
|------|------|---------|-------------|
|
|
1093
|
-
| `open` | `boolean` | `false` | Open state |
|
|
1094
|
-
|
|
1095
|
-
Animation is automatically disabled when `prefers-reduced-motion` is set.
|
|
1096
|
-
|
|
1097
|
-
---
|
|
1098
|
-
|
|
1099
|
-
#### Dropdown
|
|
1100
|
-
|
|
1101
|
-
Positioned dropdown popup. Position is determined relative to trigger element or absolute coordinates.
|
|
1102
|
-
|
|
1103
|
-
```tsx
|
|
1104
|
-
import { Dropdown, Button } from "@simplysm/solid";
|
|
1105
|
-
import { createSignal } from "solid-js";
|
|
1106
|
-
|
|
1107
|
-
const [open, setOpen] = createSignal(false);
|
|
1108
|
-
let triggerRef!: HTMLButtonElement;
|
|
1109
|
-
|
|
1110
|
-
<Button ref={triggerRef} onClick={() => setOpen(!open())}>Open</Button>
|
|
1111
|
-
<Dropdown triggerRef={() => triggerRef} open={open()} onOpenChange={setOpen}>
|
|
1112
|
-
<p class="p-3">Dropdown content</p>
|
|
1113
|
-
</Dropdown>
|
|
1114
|
-
|
|
1115
|
-
// Context menu (absolute position)
|
|
1116
|
-
<Dropdown position={{ x: 100, y: 200 }} open={menuOpen()} onOpenChange={setMenuOpen}>
|
|
1117
|
-
<List inset>
|
|
1118
|
-
<List.Item>Menu item 1</List.Item>
|
|
1119
|
-
<List.Item>Menu item 2</List.Item>
|
|
1120
|
-
</List>
|
|
1121
|
-
</Dropdown>
|
|
1122
|
-
```
|
|
1123
|
-
|
|
1124
|
-
| Prop | Type | Default | Description |
|
|
1125
|
-
|------|------|---------|-------------|
|
|
1126
|
-
| `triggerRef` | `() => HTMLElement \| undefined` | - | Trigger element reference (mutually exclusive with position) |
|
|
1127
|
-
| `position` | `{ x: number; y: number }` | - | Absolute position (mutually exclusive with triggerRef) |
|
|
1128
|
-
| `open` | `boolean` | - | Open state |
|
|
1129
|
-
| `onOpenChange` | `(open: boolean) => void` | - | State change callback |
|
|
1130
|
-
| `maxHeight` | `number` | `300` | Maximum height (px) |
|
|
1131
|
-
| `keyboardNav` | `boolean` | - | Enable keyboard navigation (used by Select, etc.) |
|
|
1132
|
-
|
|
1133
|
-
---
|
|
1134
|
-
|
|
1135
|
-
#### Dialog
|
|
1136
|
-
|
|
1137
|
-
Modal dialog component. Supports drag movement, resize, floating mode, and fullscreen mode.
|
|
1138
|
-
|
|
1139
|
-
```tsx
|
|
1140
|
-
import { Dialog, Button } from "@simplysm/solid";
|
|
1141
|
-
import { createSignal } from "solid-js";
|
|
1142
|
-
|
|
1143
|
-
const [open, setOpen] = createSignal(false);
|
|
1144
|
-
|
|
1145
|
-
<Button onClick={() => setOpen(true)}>Open</Button>
|
|
1146
|
-
<Dialog
|
|
1147
|
-
title="Dialog Title"
|
|
1148
|
-
open={open()}
|
|
1149
|
-
onOpenChange={setOpen}
|
|
1150
|
-
closeOnBackdrop
|
|
1151
|
-
widthPx={600}
|
|
1152
|
-
>
|
|
1153
|
-
<div class="p-4">
|
|
1154
|
-
Dialog content
|
|
1155
|
-
</div>
|
|
1156
|
-
</Dialog>
|
|
1157
|
-
|
|
1158
|
-
// Floating mode (no backdrop)
|
|
1159
|
-
<Dialog
|
|
1160
|
-
title="Notification"
|
|
1161
|
-
open={open()}
|
|
1162
|
-
onOpenChange={setOpen}
|
|
1163
|
-
float
|
|
1164
|
-
position="bottom-right"
|
|
1165
|
-
>
|
|
1166
|
-
<div class="p-4">Floating dialog</div>
|
|
1167
|
-
</Dialog>
|
|
1168
|
-
```
|
|
1169
|
-
|
|
1170
|
-
| Prop | Type | Default | Description |
|
|
1171
|
-
|------|------|---------|-------------|
|
|
1172
|
-
| `open` | `boolean` | - | Open state |
|
|
1173
|
-
| `onOpenChange` | `(open: boolean) => void` | - | State change callback |
|
|
1174
|
-
| `title` | `string` | **(required)** | Modal title |
|
|
1175
|
-
| `hideHeader` | `boolean` | - | Hide header |
|
|
1176
|
-
| `closable` | `boolean` | `true` | Show close button |
|
|
1177
|
-
| `closeOnBackdrop` | `boolean` | - | Close on backdrop click |
|
|
1178
|
-
| `closeOnEscape` | `boolean` | `true` | Close on Escape key |
|
|
1179
|
-
| `resizable` | `boolean` | `false` | Resizable |
|
|
1180
|
-
| `movable` | `boolean` | `true` | Draggable |
|
|
1181
|
-
| `float` | `boolean` | - | Floating mode (no backdrop) |
|
|
1182
|
-
| `fill` | `boolean` | - | Fullscreen mode |
|
|
1183
|
-
| `widthPx` | `number` | - | Width (px) |
|
|
1184
|
-
| `heightPx` | `number` | - | Height (px) |
|
|
1185
|
-
| `minWidthPx` | `number` | - | Minimum width (px) |
|
|
1186
|
-
| `minHeightPx` | `number` | - | Minimum height (px) |
|
|
1187
|
-
| `position` | `"bottom-right" \| "top-right"` | - | Fixed position |
|
|
1188
|
-
| `headerAction` | `JSX.Element` | - | Header action area |
|
|
1189
|
-
| `canDeactivate` | `() => boolean` | - | Pre-close confirmation function |
|
|
1190
|
-
| `onCloseComplete` | `() => void` | - | Post-close animation callback |
|
|
1191
|
-
|
|
1192
|
-
---
|
|
1193
|
-
|
|
1194
|
-
### Feedback
|
|
1195
|
-
|
|
1196
|
-
#### Notification
|
|
1197
|
-
|
|
1198
|
-
Notification system. Wrap with `NotificationProvider` and trigger notifications using the `useNotification` hook.
|
|
1199
|
-
|
|
1200
|
-
```tsx
|
|
1201
|
-
import {
|
|
1202
|
-
NotificationProvider,
|
|
1203
|
-
NotificationBanner,
|
|
1204
|
-
NotificationBell,
|
|
1205
|
-
useNotification,
|
|
1206
|
-
} from "@simplysm/solid";
|
|
1207
|
-
|
|
1208
|
-
// Set up Provider at app root
|
|
1209
|
-
<NotificationProvider>
|
|
1210
|
-
<NotificationBanner />
|
|
1211
|
-
<header>
|
|
1212
|
-
<NotificationBell />
|
|
1213
|
-
</header>
|
|
1214
|
-
<MyApp />
|
|
1215
|
-
</NotificationProvider>
|
|
1216
|
-
|
|
1217
|
-
// Trigger notifications within components
|
|
1218
|
-
function MyComponent() {
|
|
1219
|
-
const notification = useNotification();
|
|
1220
|
-
|
|
1221
|
-
const handleSave = () => {
|
|
1222
|
-
notification.success("Success", "Saved successfully.");
|
|
1223
|
-
};
|
|
1224
|
-
|
|
1225
|
-
const handleError = () => {
|
|
1226
|
-
notification.danger("Error", "An issue occurred.", {
|
|
1227
|
-
action: { label: "Retry", onClick: handleRetry },
|
|
1228
|
-
});
|
|
1229
|
-
};
|
|
1230
|
-
|
|
1231
|
-
return <Button onClick={handleSave}>Save</Button>;
|
|
1232
|
-
}
|
|
1233
|
-
```
|
|
1234
|
-
|
|
1235
|
-
**useNotification API:**
|
|
1236
|
-
|
|
1237
|
-
| Method | Signature | Description |
|
|
1238
|
-
|--------|-----------|-------------|
|
|
1239
|
-
| `info` | `(title: string, message?: string, options?: NotificationOptions) => string` | Info notification |
|
|
1240
|
-
| `success` | `(title: string, message?: string, options?: NotificationOptions) => string` | Success notification |
|
|
1241
|
-
| `warning` | `(title: string, message?: string, options?: NotificationOptions) => string` | Warning notification |
|
|
1242
|
-
| `danger` | `(title: string, message?: string, options?: NotificationOptions) => string` | Error notification |
|
|
1243
|
-
| `update` | `(id: string, updates: Partial<NotificationItem>, options?: { renotify?: boolean }) => void` | Update notification |
|
|
1244
|
-
| `remove` | `(id: string) => void` | Remove notification |
|
|
1245
|
-
| `markAsRead` | `(id: string) => void` | Mark as read |
|
|
1246
|
-
| `markAllAsRead` | `() => void` | Mark all as read |
|
|
1247
|
-
| `dismissBanner` | `() => void` | Dismiss banner |
|
|
1248
|
-
| `clear` | `() => void` | Clear all |
|
|
1249
|
-
|
|
1250
|
-
**Components:**
|
|
1251
|
-
- `NotificationProvider` -- Notification state management Provider
|
|
1252
|
-
- `NotificationBanner` -- Top-of-screen notification banner
|
|
1253
|
-
- `NotificationBell` -- Notification bell icon (shows unread count)
|
|
1254
|
-
|
|
1255
|
-
---
|
|
1256
|
-
|
|
1257
|
-
#### Loading
|
|
1258
|
-
|
|
1259
|
-
Loading overlay system. Wrap with `LoadingProvider` and control loading state using the `useLoading` hook.
|
|
1260
|
-
|
|
1261
|
-
```tsx
|
|
1262
|
-
import {
|
|
1263
|
-
LoadingProvider,
|
|
1264
|
-
LoadingContainer,
|
|
1265
|
-
useLoading,
|
|
1266
|
-
} from "@simplysm/solid";
|
|
1267
|
-
|
|
1268
|
-
// Set up Provider at app root
|
|
1269
|
-
<LoadingProvider>
|
|
1270
|
-
<LoadingContainer />
|
|
1271
|
-
<MyApp />
|
|
1272
|
-
</LoadingProvider>
|
|
1273
|
-
|
|
1274
|
-
// Control loading within components
|
|
1275
|
-
function MyComponent() {
|
|
1276
|
-
const loading = useLoading();
|
|
1277
|
-
|
|
1278
|
-
const fetchData = async () => {
|
|
1279
|
-
loading.show("Loading data...");
|
|
1280
|
-
try {
|
|
1281
|
-
await fetch("/api/data");
|
|
1282
|
-
} finally {
|
|
1283
|
-
loading.hide();
|
|
1284
|
-
}
|
|
1285
|
-
};
|
|
1286
|
-
|
|
1287
|
-
return <Button onClick={fetchData}>Load Data</Button>;
|
|
1288
|
-
}
|
|
1289
|
-
```
|
|
1290
|
-
|
|
1291
|
-
**useLoading API:**
|
|
1292
|
-
|
|
1293
|
-
| Method | Signature | Description |
|
|
1294
|
-
|--------|-----------|-------------|
|
|
1295
|
-
| `show` | `(message?: string) => void` | Show loading |
|
|
1296
|
-
| `hide` | `() => void` | Hide loading |
|
|
1297
|
-
| `setProgress` | `(percent: number \| undefined) => void` | Set progress |
|
|
1298
|
-
|
|
1299
|
-
---
|
|
1300
|
-
|
|
1301
|
-
### Print
|
|
1302
|
-
|
|
1303
|
-
#### Print / usePrint
|
|
1304
|
-
|
|
1305
|
-
Browser printing and PDF generation. Requires `LoadingProvider`.
|
|
1306
|
-
|
|
1307
|
-
```tsx
|
|
1308
|
-
import { Print, usePrint } from "@simplysm/solid";
|
|
1309
|
-
|
|
1310
|
-
function MyComponent() {
|
|
1311
|
-
const { toPrinter, toPdf } = usePrint();
|
|
1312
|
-
|
|
1313
|
-
const handlePrint = async () => {
|
|
1314
|
-
await toPrinter(
|
|
1315
|
-
() => (
|
|
1316
|
-
<Print>
|
|
1317
|
-
<Print.Page>
|
|
1318
|
-
<h1>Print content</h1>
|
|
1319
|
-
<p>Page 1</p>
|
|
1320
|
-
</Print.Page>
|
|
1321
|
-
<Print.Page>
|
|
1322
|
-
<p>Page 2</p>
|
|
1323
|
-
</Print.Page>
|
|
1324
|
-
</Print>
|
|
1325
|
-
),
|
|
1326
|
-
{ size: "A4", margin: "10mm" },
|
|
1327
|
-
);
|
|
1328
|
-
};
|
|
1329
|
-
|
|
1330
|
-
const handlePdf = async () => {
|
|
1331
|
-
const pdfData = await toPdf(
|
|
1332
|
-
() => (
|
|
1333
|
-
<Print>
|
|
1334
|
-
<Print.Page>
|
|
1335
|
-
<h1>PDF content</h1>
|
|
1336
|
-
</Print.Page>
|
|
1337
|
-
</Print>
|
|
1338
|
-
),
|
|
1339
|
-
{ size: "A4 landscape" },
|
|
1340
|
-
);
|
|
1341
|
-
// pdfData: Uint8Array
|
|
1342
|
-
};
|
|
1343
|
-
|
|
1344
|
-
return (
|
|
1345
|
-
<>
|
|
1346
|
-
<Button onClick={handlePrint}>Print</Button>
|
|
1347
|
-
<Button onClick={handlePdf}>Download PDF</Button>
|
|
1348
|
-
</>
|
|
1349
|
-
);
|
|
1350
|
-
}
|
|
1351
|
-
```
|
|
1352
|
-
|
|
1353
|
-
**usePrint API:**
|
|
1354
|
-
|
|
1355
|
-
| Method | Signature | Description |
|
|
1356
|
-
|--------|-----------|-------------|
|
|
1357
|
-
| `toPrinter` | `(factory: () => JSX.Element, options?: PrintOptions) => Promise<void>` | Browser print |
|
|
1358
|
-
| `toPdf` | `(factory: () => JSX.Element, options?: PrintOptions) => Promise<Uint8Array>` | PDF generation |
|
|
1359
|
-
|
|
1360
|
-
**PrintOptions:**
|
|
54
|
+
**AppConfig options:**
|
|
1361
55
|
|
|
1362
56
|
| Option | Type | Default | Description |
|
|
1363
57
|
|--------|------|---------|-------------|
|
|
1364
|
-
| `
|
|
1365
|
-
| `
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
- `Print.Page` -- Explicit page breaks (auto-breaks if not used)
|
|
1369
|
-
|
|
1370
|
-
---
|
|
58
|
+
| `clientName` | `string` | **(required)** | Client identifier (used as storage key prefix) |
|
|
59
|
+
| `syncStorage` | `StorageAdapter` | `localStorage` | Custom sync storage adapter (used by `useSyncConfig`) |
|
|
60
|
+
| `logger` | `LogAdapter` | - | Log adapter for remote logging (used by `useLogger`) |
|
|
61
|
+
| `loadingVariant` | `"spinner" \| "bar"` | `"spinner"` | Root loading overlay variant |
|
|
1371
62
|
|
|
1372
|
-
|
|
63
|
+
**StorageAdapter interface:**
|
|
1373
64
|
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
const theme = useTheme();
|
|
1382
|
-
theme.mode(); // "light" | "dark" | "system"
|
|
1383
|
-
theme.resolvedTheme(); // "light" | "dark" (follows OS setting when system)
|
|
1384
|
-
theme.setMode("dark");
|
|
1385
|
-
theme.cycleMode(); // light -> system -> dark -> light
|
|
65
|
+
```typescript
|
|
66
|
+
interface StorageAdapter {
|
|
67
|
+
getItem(key: string): string | null | Promise<string | null>;
|
|
68
|
+
setItem(key: string, value: string): void | Promise<unknown>;
|
|
69
|
+
removeItem(key: string): void | Promise<void>;
|
|
70
|
+
}
|
|
1386
71
|
```
|
|
1387
72
|
|
|
1388
|
-
|
|
1389
|
-
|-----------------|------|-------------|
|
|
1390
|
-
| `mode` | `() => ThemeMode` | Current theme mode |
|
|
1391
|
-
| `resolvedTheme` | `() => ResolvedTheme` | Actual applied theme |
|
|
1392
|
-
| `setMode` | `(mode: ThemeMode) => void` | Set theme mode |
|
|
1393
|
-
| `cycleMode` | `() => void` | Cycle to next mode |
|
|
1394
|
-
|
|
1395
|
-
---
|
|
1396
|
-
|
|
1397
|
-
### usePersisted
|
|
1398
|
-
|
|
1399
|
-
localStorage-based persistent signal. Must be used inside `ConfigContext`, and keys are automatically stored as `{clientName}.{key}`. Supports serialization of `@simplysm/core-common` custom types like `DateTime`, `DateOnly`.
|
|
1400
|
-
|
|
1401
|
-
```tsx
|
|
1402
|
-
import { usePersisted } from "@simplysm/solid";
|
|
1403
|
-
|
|
1404
|
-
const [value, setValue] = usePersisted("settings.view", "grid");
|
|
73
|
+
**LogAdapter interface:**
|
|
1405
74
|
|
|
1406
|
-
|
|
1407
|
-
|
|
75
|
+
```typescript
|
|
76
|
+
interface LogAdapter {
|
|
77
|
+
write(severity: "error" | "warn" | "info" | "log", ...data: any[]): Promise<void> | void;
|
|
78
|
+
}
|
|
1408
79
|
```
|
|
1409
80
|
|
|
1410
|
-
|
|
1411
|
-
|--------------|------|-------------|
|
|
1412
|
-
| `[0]` | `Accessor<T>` | Value getter |
|
|
1413
|
-
| `[1]` | `Setter<T>` | Value setter |
|
|
1414
|
-
| `[2]` | `Accessor<boolean>` | Loading state (async storage only) |
|
|
1415
|
-
|
|
1416
|
-
---
|
|
1417
|
-
|
|
1418
|
-
### useNotification
|
|
1419
|
-
|
|
1420
|
-
Hook to access notification system. Must be used inside `NotificationProvider`. See [Notification](#notification) section for detailed API.
|
|
1421
|
-
|
|
1422
|
-
---
|
|
1423
|
-
|
|
1424
|
-
### useLoading
|
|
1425
|
-
|
|
1426
|
-
Hook to access loading overlay. Must be used inside `LoadingProvider`. See [Loading](#loading) section for detailed API.
|
|
1427
|
-
|
|
1428
|
-
---
|
|
1429
|
-
|
|
1430
|
-
### usePrint
|
|
1431
|
-
|
|
1432
|
-
Hook for printing and PDF generation. Must be used inside `LoadingProvider`. See [Print](#print--useprint) section for detailed API.
|
|
1433
|
-
|
|
1434
|
-
---
|
|
1435
|
-
|
|
1436
|
-
### useConfig
|
|
1437
|
-
|
|
1438
|
-
Hook to access app-wide configuration. Must be used inside `ConfigContext.Provider` or `InitializeProvider`.
|
|
81
|
+
### Base CSS
|
|
1439
82
|
|
|
1440
|
-
|
|
1441
|
-
import { useConfig } from "@simplysm/solid";
|
|
83
|
+
Import the base CSS in your entry point:
|
|
1442
84
|
|
|
1443
|
-
|
|
1444
|
-
|
|
85
|
+
```typescript
|
|
86
|
+
// entry point (e.g., index.tsx)
|
|
87
|
+
import "@simplysm/solid/tailwind.css";
|
|
1445
88
|
```
|
|
1446
89
|
|
|
1447
90
|
---
|
|
1448
91
|
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
Signal hook that automatically handles Controlled/Uncontrolled patterns. Operates in controlled mode when `onChange` is provided, uncontrolled mode otherwise.
|
|
1452
|
-
|
|
1453
|
-
```tsx
|
|
1454
|
-
import { createControllableSignal } from "@simplysm/solid";
|
|
92
|
+
## Components
|
|
1455
93
|
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
94
|
+
### Form Controls
|
|
95
|
+
|
|
96
|
+
- [`Button`](docs/form-controls.md#button) - Interactive button with Material Design ripple effect
|
|
97
|
+
- [`TextInput`](docs/form-controls.md#textinput) - Text input with format mask and IME composition support
|
|
98
|
+
- [`NumberInput`](docs/form-controls.md#numberinput) - Number input with thousand separators and decimal places
|
|
99
|
+
- [`DatePicker`](docs/form-controls.md#datepicker) - Date input supporting year, month, and date units (`DateOnly` type)
|
|
100
|
+
- [`DateRangePicker`](docs/form-controls.md#daterangepicker) - Date range input with period type selection (day/month/range)
|
|
101
|
+
- [`Textarea`](docs/form-controls.md#textarea) - Multi-line text input with auto-height and IME support
|
|
102
|
+
- [`Select`](docs/form-controls.md#select) - Dropdown selection with single/multiple, hierarchical items, and compound components
|
|
103
|
+
- [`Combobox`](docs/form-controls.md#combobox) - Autocomplete with async search and debouncing
|
|
104
|
+
- [`Checkbox`](docs/form-controls.md#checkbox--radio) / [`Radio`](docs/form-controls.md#checkbox--radio) - Checkbox and radio button
|
|
105
|
+
- [`CheckboxGroup`](docs/form-controls.md#checkboxgroup--radiogroup) / [`RadioGroup`](docs/form-controls.md#checkboxgroup--radiogroup) - Group components for multiple/single selection
|
|
106
|
+
- [`ColorPicker`](docs/form-controls.md#colorpicker) - Color selection component
|
|
107
|
+
- [`ThemeToggle`](docs/form-controls.md#themetoggle) - Dark/light/system theme cycle toggle
|
|
108
|
+
- [`RichTextEditor`](docs/form-controls.md#richtexteditor) - Tiptap-based rich text editor with formatting, tables, images
|
|
109
|
+
- [`Invalid`](docs/form-controls.md#invalid) - Wrapper component for form validation using native browser validation
|
|
110
|
+
- [`Numpad`](docs/form-controls.md#numpad) - Numeric keypad for touch-based input
|
|
111
|
+
- [`StatePreset`](docs/form-controls.md#statepreset) - Save/load screen state as presets
|
|
1461
112
|
|
|
1462
|
-
|
|
1463
|
-
setValue((prev) => prev + "!");
|
|
1464
|
-
```
|
|
113
|
+
### Data
|
|
1465
114
|
|
|
1466
|
-
|
|
115
|
+
- [`Table`](docs/data-components.md#table) - Basic HTML table wrapper with consistent styling
|
|
116
|
+
- [`DataSheet`](docs/data-components.md#datasheet) - Advanced data table with sorting, pagination, selection, tree expansion, column resize, drag reorder
|
|
117
|
+
- [`List`](docs/data-components.md#list) - Tree-view list with keyboard navigation
|
|
118
|
+
- [`Pagination`](docs/data-components.md#pagination) - Page navigation component
|
|
119
|
+
- [`Calendar`](docs/data-components.md#calendar) - Calendar-style data display
|
|
120
|
+
- [`PermissionTable`](docs/data-components.md#permissiontable) - Hierarchical permission management table with cascading checks
|
|
1467
121
|
|
|
1468
|
-
###
|
|
122
|
+
### Layout
|
|
1469
123
|
|
|
1470
|
-
|
|
124
|
+
- [`Sidebar`](docs/layout.md#sidebar) - Sidebar navigation with responsive mobile overlay
|
|
125
|
+
- [`Topbar`](docs/layout.md#topbar) - Top navigation bar with menus and user dropdown
|
|
126
|
+
- [`FormGroup`](docs/layout.md#formgroup) - Form fields layout with labels (vertical/inline)
|
|
127
|
+
- [`FormTable`](docs/layout.md#formtable) - Table-based form layout
|
|
128
|
+
- [`Kanban`](docs/layout.md#kanban) - Kanban board with drag-and-drop, lane collapse, multi-select
|
|
1471
129
|
|
|
1472
|
-
|
|
1473
|
-
import { createMountTransition } from "@simplysm/solid";
|
|
130
|
+
### Display
|
|
1474
131
|
|
|
1475
|
-
|
|
1476
|
-
|
|
132
|
+
- [`Card`](docs/display.md#card) - Container with shadow effect
|
|
133
|
+
- [`Tag`](docs/display.md#tag) - Inline tag/badge component
|
|
134
|
+
- [`Alert`](docs/display.md#alert) - Block-level alert/notice component
|
|
135
|
+
- [`Icon`](docs/display.md#icon) - Tabler Icons wrapper (scales with surrounding text)
|
|
136
|
+
- [`Progress`](docs/display.md#progress) - Progress indicator
|
|
137
|
+
- [`Barcode`](docs/display.md#barcode) - Barcode/QR code rendering (100+ barcode types)
|
|
138
|
+
- [`Echarts`](docs/display.md#echarts) - Apache ECharts chart wrapper
|
|
1477
139
|
|
|
1478
|
-
|
|
1479
|
-
|--------------|------|-------------|
|
|
1480
|
-
| `mounted` | `() => boolean` | Whether mounted in DOM |
|
|
1481
|
-
| `animating` | `() => boolean` | Animation active state |
|
|
1482
|
-
| `unmount` | `() => void` | Manual unmount |
|
|
140
|
+
### Disclosure
|
|
1483
141
|
|
|
1484
|
-
|
|
142
|
+
- [`Tabs`](docs/disclosure.md#tabs) - Tab navigation component
|
|
143
|
+
- [`Collapse`](docs/disclosure.md#collapse) - Content collapse/expand animation
|
|
144
|
+
- [`Dropdown`](docs/disclosure.md#dropdown) - Positioned dropdown popup
|
|
145
|
+
- [`Dialog`](docs/disclosure.md#dialog) - Modal dialog with drag, resize, floating mode, and programmatic `useDialog`
|
|
1485
146
|
|
|
1486
|
-
###
|
|
147
|
+
### Feedback
|
|
1487
148
|
|
|
1488
|
-
|
|
149
|
+
- [`Notification`](docs/feedback.md#notification) - Notification system with banner and bell (`useNotification`)
|
|
150
|
+
- [`Loading`](docs/feedback.md#loading) - Loading overlay with spinner/bar variants (`useLoading`)
|
|
151
|
+
- [`Print`](docs/feedback.md#print--useprint) - Browser printing and PDF generation (`usePrint`)
|
|
1489
152
|
|
|
1490
153
|
---
|
|
1491
154
|
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
`@solidjs/router`-based navigation hook. Automatically handles Ctrl/Alt + click (new tab), Shift + click (new window).
|
|
1495
|
-
|
|
1496
|
-
```tsx
|
|
1497
|
-
import { useRouterLink } from "@simplysm/solid";
|
|
1498
|
-
|
|
1499
|
-
const navigate = useRouterLink();
|
|
155
|
+
## Hooks
|
|
1500
156
|
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
157
|
+
- [`useTheme`](docs/hooks.md#usetheme) - Dark/light/system theme state access
|
|
158
|
+
- [`useLocalStorage`](docs/hooks.md#uselocalstorage) - Local-only persistent storage (never syncs)
|
|
159
|
+
- [`useSyncConfig`](docs/hooks.md#usesyncconfig) - Syncable config storage (cross-device sync support)
|
|
160
|
+
- [`useLogger`](docs/hooks.md#uselogger) - Logging with optional remote adapter
|
|
161
|
+
- [`useConfig`](docs/hooks.md#useconfig) - App-wide configuration access
|
|
162
|
+
- [`useNotification`](docs/hooks.md#usenotification) - Notification system access
|
|
163
|
+
- [`useLoading`](docs/hooks.md#useloading) - Loading overlay control
|
|
164
|
+
- [`usePrint`](docs/hooks.md#useprint) - Printing and PDF generation
|
|
165
|
+
- [`createControllableSignal`](docs/hooks.md#createcontrollablesignal) - Controlled/Uncontrolled signal pattern
|
|
166
|
+
- [`createMountTransition`](docs/hooks.md#createmounttransition) - Mount/unmount CSS animation hook
|
|
167
|
+
- [`createIMEHandler`](docs/hooks.md#createimehandler) - IME composition delay handler
|
|
168
|
+
- [`useRouterLink`](docs/hooks.md#userouterlink) - Navigation with Ctrl/Shift+click support
|
|
169
|
+
- [`createAppStructure`](docs/hooks.md#createappstructure) - Declarative app structure (routing, menus, permissions)
|
|
170
|
+
- [`createPwaUpdate`](docs/hooks.md#createpwaupdate) - PWA Service Worker update detection
|
|
1510
171
|
|
|
1511
172
|
---
|
|
1512
173
|
|
|
1513
|
-
|
|
174
|
+
## Providers
|
|
1514
175
|
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
import { createAppStructure, type AppStructureItem } from "@simplysm/solid";
|
|
1519
|
-
|
|
1520
|
-
const items: AppStructureItem<string>[] = [
|
|
1521
|
-
{
|
|
1522
|
-
code: "home",
|
|
1523
|
-
title: "Home",
|
|
1524
|
-
component: HomePage,
|
|
1525
|
-
perms: ["use"],
|
|
1526
|
-
},
|
|
1527
|
-
{
|
|
1528
|
-
code: "admin",
|
|
1529
|
-
title: "Admin",
|
|
1530
|
-
children: [
|
|
1531
|
-
{ code: "users", title: "User Management", component: UsersPage, perms: ["use", "edit"] },
|
|
1532
|
-
],
|
|
1533
|
-
},
|
|
1534
|
-
];
|
|
1535
|
-
|
|
1536
|
-
const structure = createAppStructure(items, {
|
|
1537
|
-
modules: () => activeModules(),
|
|
1538
|
-
basePath: "/app",
|
|
1539
|
-
});
|
|
1540
|
-
|
|
1541
|
-
// structure.routes -- Route array (pass to Route component)
|
|
1542
|
-
// structure.usableMenus() -- Sidebar menu array
|
|
1543
|
-
// structure.permRecord() -- Permission record (Record<string, boolean>)
|
|
1544
|
-
```
|
|
176
|
+
- [`InitializeProvider`](docs/providers.md#initializeprovider) - Root provider (theme, notification, loading, dialog, error capturing)
|
|
177
|
+
- [`ServiceClientProvider`](docs/providers.md#serviceclientprovider) - WebSocket RPC client provider
|
|
178
|
+
- [`SharedDataProvider`](docs/providers.md#shareddataprovider) - Server-side data subscription provider
|
|
1545
179
|
|
|
1546
180
|
---
|
|
1547
181
|
|
|
1548
|
-
##
|
|
1549
|
-
|
|
1550
|
-
### ripple
|
|
1551
|
-
|
|
1552
|
-
Material Design ripple effect directive. Displays ripple effect on click.
|
|
182
|
+
## Styling
|
|
1553
183
|
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
<button use:ripple={true}>Click</button>
|
|
1560
|
-
<button use:ripple={!props.disabled}>Conditional activation</button>
|
|
1561
|
-
```
|
|
1562
|
-
|
|
1563
|
-
- Creates internal ripple container, operates without affecting parent element
|
|
1564
|
-
- Automatically disabled when `prefers-reduced-motion: reduce` is set
|
|
1565
|
-
- Single ripple mode: removes previous ripple on new click
|
|
184
|
+
- [Semantic Colors](docs/styling.md#semantic-colors) - primary, info, success, warning, danger, base
|
|
185
|
+
- [Custom Sizes](docs/styling.md#custom-sizes) - Field height classes (h-field, h-field-sm, h-field-lg)
|
|
186
|
+
- [z-index Layers](docs/styling.md#z-index-layers) - Sidebar, dropdown, modal z-index values
|
|
187
|
+
- [Dark Mode](docs/styling.md#dark-mode) - Class-based dark mode with auto-toggle
|
|
188
|
+
- [Styling Patterns](docs/styling.md#styling-patterns) - clsx + twMerge usage patterns
|
|
1566
189
|
|
|
1567
190
|
---
|
|
1568
191
|
|
|
1569
|
-
##
|
|
1570
|
-
|
|
1571
|
-
`@simplysm/solid` provides the following custom themes via Tailwind CSS preset.
|
|
1572
|
-
|
|
1573
|
-
### Semantic Colors
|
|
1574
|
-
|
|
1575
|
-
| Name | Base Color | Usage |
|
|
1576
|
-
|------|------------|-------|
|
|
1577
|
-
| `primary` | blue | Primary actions |
|
|
1578
|
-
| `info` | sky | Information |
|
|
1579
|
-
| `success` | green | Success |
|
|
1580
|
-
| `warning` | amber | Warning |
|
|
1581
|
-
| `danger` | red | Danger/error |
|
|
1582
|
-
| `base` | zinc | Neutral (backgrounds, borders, secondary text, etc.) |
|
|
1583
|
-
|
|
1584
|
-
> Use `base-*` instead of directly using `zinc-*`.
|
|
192
|
+
## Helpers & Directives
|
|
1585
193
|
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|-------|-------------|
|
|
1590
|
-
| `h-field` / `size-field` | Default field height (based on `py-1`) |
|
|
1591
|
-
| `h-field-sm` / `size-field-sm` | Small field height (based on `py-0.5`) |
|
|
1592
|
-
| `h-field-lg` / `size-field-lg` | Large field height (based on `py-2`) |
|
|
1593
|
-
| `h-field-inset` / `size-field-inset` | Inset field height (excludes border) |
|
|
1594
|
-
| `h-field-inset-sm` / `size-field-inset-sm` | Small inset field height |
|
|
1595
|
-
| `h-field-inset-lg` / `size-field-inset-lg` | Large inset field height |
|
|
1596
|
-
|
|
1597
|
-
### z-index Layers
|
|
1598
|
-
|
|
1599
|
-
| Class | Value | Description |
|
|
1600
|
-
|-------|-------|-------------|
|
|
1601
|
-
| `z-sidebar` | 100 | Sidebar |
|
|
1602
|
-
| `z-sidebar-backdrop` | 99 | Sidebar backdrop |
|
|
1603
|
-
| `z-busy` | 500 | Loading overlay |
|
|
1604
|
-
| `z-dropdown` | 1000 | Dropdown popup |
|
|
1605
|
-
| `z-modal-backdrop` | 1999 | Modal backdrop |
|
|
1606
|
-
| `z-modal` | 2000 | Modal dialog |
|
|
1607
|
-
|
|
1608
|
-
### Dark Mode
|
|
1609
|
-
|
|
1610
|
-
Uses Tailwind's `class` strategy. `ThemeProvider` automatically toggles the `dark` class on the `<html>` element.
|
|
1611
|
-
|
|
1612
|
-
```html
|
|
1613
|
-
<!-- Light mode -->
|
|
1614
|
-
<html>
|
|
1615
|
-
<!-- Dark mode -->
|
|
1616
|
-
<html class="dark">
|
|
1617
|
-
```
|
|
1618
|
-
|
|
1619
|
-
### Styling Patterns
|
|
1620
|
-
|
|
1621
|
-
When using Tailwind classes in components, group them by semantic units with `clsx` and resolve conflicts with `twMerge`:
|
|
1622
|
-
|
|
1623
|
-
```typescript
|
|
1624
|
-
import clsx from "clsx";
|
|
1625
|
-
import { twMerge } from "tailwind-merge";
|
|
1626
|
-
|
|
1627
|
-
const baseClass = clsx(
|
|
1628
|
-
"inline-flex items-center",
|
|
1629
|
-
"px-2 py-1",
|
|
1630
|
-
"rounded",
|
|
1631
|
-
"border border-transparent",
|
|
1632
|
-
);
|
|
1633
|
-
|
|
1634
|
-
const className = twMerge(baseClass, props.class);
|
|
1635
|
-
```
|
|
194
|
+
- [`mergeStyles`](docs/helpers.md#mergestyles) - Merge inline style strings and CSSProperties objects
|
|
195
|
+
- [`splitSlots`](docs/helpers.md#splitslots) - Split children into named slots by component type
|
|
196
|
+
- [`ripple`](docs/helpers.md#ripple-directive) - Material Design ripple effect directive
|
|
1636
197
|
|
|
1637
198
|
---
|
|
1638
199
|
|
|
@@ -1645,8 +206,6 @@ pnpm dev
|
|
|
1645
206
|
# http://localhost:40081 (port may vary)
|
|
1646
207
|
```
|
|
1647
208
|
|
|
1648
|
-
---
|
|
1649
|
-
|
|
1650
209
|
## License
|
|
1651
210
|
|
|
1652
211
|
Apache-2.0
|