@simplysm/solid 13.0.69 → 13.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -195
- package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/data/calendar/Calendar.js +15 -2
- package/dist/components/data/calendar/Calendar.js.map +2 -2
- package/dist/components/data/kanban/KanbanContext.js +2 -2
- package/dist/components/data/kanban/KanbanContext.js.map +1 -1
- package/dist/components/data/list/List.d.ts +8 -8
- package/dist/components/data/list/ListContext.d.ts +1 -1
- package/dist/components/data/list/ListItem.d.ts +15 -15
- package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.js +6 -4
- package/dist/components/data/sheet/DataSheet.js.map +2 -2
- package/dist/components/data/sheet/DataSheetConfigDialog.js +8 -8
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
- package/dist/components/data/sheet/types.d.ts +4 -4
- package/dist/components/data/sheet/types.d.ts.map +1 -1
- package/dist/components/disclosure/Collapse.d.ts +4 -4
- package/dist/components/disclosure/Dialog.d.ts +24 -24
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +7 -2
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/disclosure/DialogContext.d.ts +25 -25
- package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogContext.js +1 -1
- package/dist/components/disclosure/DialogContext.js.map +1 -1
- package/dist/components/disclosure/DialogInstanceContext.d.ts +7 -7
- package/dist/components/disclosure/DialogInstanceContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogProvider.d.ts +3 -3
- package/dist/components/disclosure/Dropdown.d.ts +26 -24
- package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
- package/dist/components/disclosure/Dropdown.js +24 -8
- package/dist/components/disclosure/Dropdown.js.map +2 -2
- package/dist/components/disclosure/Tabs.js +1 -1
- package/dist/components/disclosure/Tabs.js.map +1 -1
- package/dist/components/disclosure/dialogZIndex.d.ts +9 -7
- package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
- package/dist/components/disclosure/dialogZIndex.js +4 -0
- package/dist/components/disclosure/dialogZIndex.js.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +34 -22
- package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
- package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
- package/dist/components/features/crud-sheet/CrudSheet.js +48 -33
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/features/crudRegistry.d.ts +16 -0
- package/dist/components/features/crudRegistry.d.ts.map +1 -0
- package/dist/components/features/crudRegistry.js +37 -0
- package/dist/components/features/crudRegistry.js.map +6 -0
- package/dist/components/features/data-select-button/DataSelectButton.d.ts +14 -14
- package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.js +27 -9
- package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
- package/dist/components/features/permission-table/PermissionTable.d.ts +3 -3
- package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
- package/dist/components/features/permission-table/PermissionTable.js +74 -85
- package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelect.d.ts +12 -12
- package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelect.js +10 -6
- package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +10 -10
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts +23 -15
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +191 -65
- package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts +15 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.d.ts.map +1 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.js +27 -0
- package/dist/components/features/shared-data/SharedDataSelectListContext.js.map +6 -0
- package/dist/components/feedback/Progress.d.ts +1 -1
- package/dist/components/feedback/Progress.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContainer.d.ts +2 -2
- package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContext.d.ts +11 -11
- package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -1
- package/dist/components/feedback/busy/BusyContext.js +1 -1
- package/dist/components/feedback/busy/BusyContext.js.map +1 -1
- package/dist/components/feedback/busy/BusyProvider.d.ts +6 -6
- package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js +7 -3
- package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
- package/dist/components/feedback/notification/NotificationBell.js +2 -2
- package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.d.ts +22 -22
- package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.js +1 -1
- package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.d.ts +5 -5
- package/dist/components/feedback/notification/NotificationProvider.js +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
- package/dist/components/feedback/print/PrintContext.js +1 -1
- package/dist/components/feedback/print/PrintContext.js.map +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.d.ts +7 -7
- package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.js +3 -3
- package/dist/components/form-control/checkbox/Checkbox.js +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
- package/dist/components/form-control/checkbox/Radio.js +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.d.ts +12 -12
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
- package/dist/components/form-control/combobox/Combobox.d.ts +22 -22
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/form-control/combobox/Combobox.js +2 -2
- package/dist/components/form-control/combobox/ComboboxContext.d.ts +4 -4
- package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -1
- package/dist/components/form-control/combobox/ComboboxContext.js +1 -1
- package/dist/components/form-control/combobox/ComboboxContext.js.map +1 -1
- package/dist/components/form-control/combobox/ComboboxItem.d.ts +3 -3
- package/dist/components/form-control/combobox/ComboboxItem.d.ts.map +1 -1
- package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts +14 -14
- package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -1
- package/dist/components/form-control/date-range-picker/DateRangePicker.js +20 -9
- package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
- package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
- package/dist/components/form-control/editor/EditorToolbar.js +65 -20
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
- package/dist/components/form-control/editor/RichTextEditor.d.ts +6 -6
- package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
- package/dist/components/form-control/editor/RichTextEditor.js +1 -1
- package/dist/components/form-control/editor/editor.css +5 -5
- package/dist/components/form-control/field/DatePicker.d.ts +22 -22
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DatePicker.js +4 -4
- package/dist/components/form-control/field/DatePicker.js.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.d.ts +21 -21
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.js +4 -4
- package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
- package/dist/components/form-control/field/FieldPlaceholder.d.ts +1 -1
- package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.d.ts +23 -23
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +4 -4
- package/dist/components/form-control/field/NumberInput.js.map +1 -1
- package/dist/components/form-control/field/TextInput.d.ts +25 -25
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
- package/dist/components/form-control/field/TextInput.js +5 -5
- package/dist/components/form-control/field/TextInput.js.map +1 -1
- package/dist/components/form-control/field/Textarea.d.ts +19 -19
- package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
- package/dist/components/form-control/field/Textarea.js +4 -4
- package/dist/components/form-control/field/Textarea.js.map +1 -1
- package/dist/components/form-control/field/TimePicker.d.ts +20 -20
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/TimePicker.js +4 -4
- package/dist/components/form-control/field/TimePicker.js.map +1 -1
- package/dist/components/form-control/numpad/Numpad.d.ts +11 -11
- package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.d.ts +26 -26
- package/dist/components/form-control/select/Select.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.js +34 -23
- package/dist/components/form-control/select/Select.js.map +2 -2
- package/dist/components/form-control/select/SelectContext.d.ts +7 -7
- package/dist/components/form-control/select/SelectContext.d.ts.map +1 -1
- package/dist/components/form-control/select/SelectContext.js +1 -1
- package/dist/components/form-control/select/SelectContext.js.map +1 -1
- package/dist/components/form-control/select/SelectItem.d.ts +4 -4
- package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.js +8 -8
- package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
- package/dist/components/layout/FormTable.js +4 -4
- package/dist/components/layout/sidebar/Sidebar.d.ts +5 -5
- package/dist/components/layout/sidebar/SidebarContainer.d.ts +11 -11
- package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarContainer.js +6 -1
- package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
- package/dist/components/layout/sidebar/SidebarContext.d.ts +7 -7
- package/dist/components/layout/sidebar/SidebarContext.js +1 -1
- package/dist/components/layout/sidebar/SidebarContext.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarMenu.d.ts +11 -11
- package/dist/components/layout/sidebar/SidebarUser.d.ts +14 -14
- package/dist/components/layout/topbar/Topbar.d.ts +6 -6
- package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
- package/dist/components/layout/topbar/Topbar.js +11 -6
- package/dist/components/layout/topbar/Topbar.js.map +2 -2
- package/dist/components/layout/topbar/TopbarContainer.d.ts +6 -6
- package/dist/components/layout/topbar/TopbarContext.js +2 -2
- package/dist/components/layout/topbar/TopbarContext.js.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.d.ts +11 -11
- package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.js +5 -1
- package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
- package/dist/components/layout/topbar/TopbarUser.d.ts +9 -9
- package/dist/directives/ripple.d.ts +5 -5
- package/dist/helpers/createAppStructure.d.ts.map +1 -1
- package/dist/helpers/createAppStructure.js +7 -3
- package/dist/helpers/createAppStructure.js.map +1 -1
- package/dist/helpers/createHmrSafeContext.d.ts +3 -0
- package/dist/helpers/createHmrSafeContext.d.ts.map +1 -0
- package/dist/helpers/createHmrSafeContext.js +10 -0
- package/dist/helpers/createHmrSafeContext.js.map +6 -0
- package/dist/helpers/createSlotComponent.d.ts +3 -3
- package/dist/helpers/mergeStyles.d.ts +8 -8
- package/dist/hooks/createControllableSignal.d.ts +10 -10
- package/dist/hooks/createControllableStore.d.ts +6 -6
- package/dist/hooks/createIMEHandler.d.ts +7 -7
- package/dist/hooks/createMountTransition.d.ts +4 -4
- package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
- package/dist/hooks/createSelectionGroup.js +4 -3
- package/dist/hooks/createSelectionGroup.js.map +2 -2
- package/dist/hooks/createSlotSignal.d.ts +2 -2
- package/dist/hooks/useLocalStorage.d.ts +11 -11
- package/dist/hooks/useLogger.d.ts +1 -1
- package/dist/hooks/useLogger.d.ts.map +1 -1
- package/dist/hooks/useLogger.js +1 -1
- package/dist/hooks/useLogger.js.map +1 -1
- package/dist/hooks/useRouterLink.d.ts +10 -10
- package/dist/hooks/useRouterLink.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/ClipboardProvider.d.ts +5 -5
- package/dist/providers/ConfigContext.d.ts +6 -6
- package/dist/providers/ConfigContext.js +2 -2
- package/dist/providers/ConfigContext.js.map +1 -1
- package/dist/providers/ErrorLoggerProvider.d.ts +3 -3
- package/dist/providers/LoggerContext.d.ts +13 -13
- package/dist/providers/PwaUpdateProvider.d.ts +4 -4
- package/dist/providers/PwaUpdateProvider.js +2 -2
- package/dist/providers/PwaUpdateProvider.js.map +1 -1
- package/dist/providers/ServiceClientContext.d.ts +8 -8
- package/dist/providers/ServiceClientContext.d.ts.map +1 -1
- package/dist/providers/ServiceClientContext.js +1 -1
- package/dist/providers/ServiceClientContext.js.map +1 -1
- package/dist/providers/ServiceClientProvider.d.ts +6 -6
- package/dist/providers/ServiceClientProvider.js +7 -7
- package/dist/providers/ServiceClientProvider.js.map +1 -1
- package/dist/providers/SyncStorageContext.d.ts +14 -14
- package/dist/providers/SystemProvider.d.ts.map +1 -1
- package/dist/providers/SystemProvider.js +21 -16
- package/dist/providers/SystemProvider.js.map +2 -2
- package/dist/providers/ThemeContext.d.ts +20 -20
- package/dist/providers/ThemeContext.d.ts.map +1 -1
- package/dist/providers/ThemeContext.js +1 -1
- package/dist/providers/ThemeContext.js.map +1 -1
- package/dist/providers/i18n/I18nContext.d.ts +44 -0
- package/dist/providers/i18n/I18nContext.d.ts.map +1 -0
- package/dist/providers/i18n/I18nContext.js +73 -0
- package/dist/providers/i18n/I18nContext.js.map +6 -0
- package/dist/providers/i18n/I18nContext.types.d.ts +28 -0
- package/dist/providers/i18n/I18nContext.types.d.ts.map +1 -0
- package/dist/providers/i18n/I18nContext.types.js +1 -0
- package/dist/providers/i18n/I18nContext.types.js.map +6 -0
- package/dist/providers/i18n/i18nUtils.d.ts +18 -0
- package/dist/providers/i18n/i18nUtils.d.ts.map +1 -0
- package/dist/providers/i18n/i18nUtils.js +25 -0
- package/dist/providers/i18n/i18nUtils.js.map +6 -0
- package/dist/providers/i18n/locales/en.d.ts +163 -0
- package/dist/providers/i18n/locales/en.d.ts.map +1 -0
- package/dist/providers/i18n/locales/en.js +165 -0
- package/dist/providers/i18n/locales/en.js.map +6 -0
- package/dist/providers/i18n/locales/ko.d.ts +163 -0
- package/dist/providers/i18n/locales/ko.d.ts.map +1 -0
- package/dist/providers/i18n/locales/ko.js +165 -0
- package/dist/providers/i18n/locales/ko.js.map +6 -0
- package/dist/providers/shared-data/SharedDataChangeEvent.d.ts +4 -4
- package/dist/providers/shared-data/SharedDataContext.d.ts +28 -28
- package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataContext.js +1 -1
- package/dist/providers/shared-data/SharedDataContext.js.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.d.ts +9 -9
- package/dist/providers/shared-data/SharedDataProvider.js +4 -4
- package/dist/providers/shared-data/SharedDataProvider.js.map +1 -1
- package/package.json +9 -8
- package/src/components/data/calendar/Calendar.tsx +10 -4
- package/src/components/data/kanban/Kanban.tsx +14 -14
- package/src/components/data/kanban/KanbanContext.ts +3 -3
- package/src/components/data/list/List.tsx +10 -10
- package/src/components/data/list/ListContext.ts +1 -1
- package/src/components/data/list/ListItem.styles.ts +8 -8
- package/src/components/data/list/ListItem.tsx +15 -15
- package/src/components/data/sheet/DataSheet.styles.ts +22 -22
- package/src/components/data/sheet/DataSheet.tsx +52 -48
- package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +9 -9
- package/src/components/data/sheet/sheetUtils.ts +7 -7
- package/src/components/data/sheet/types.ts +16 -16
- package/src/components/disclosure/Collapse.tsx +11 -11
- package/src/components/disclosure/Dialog.tsx +60 -57
- package/src/components/disclosure/DialogContext.ts +26 -26
- package/src/components/disclosure/DialogInstanceContext.ts +7 -7
- package/src/components/disclosure/DialogProvider.tsx +5 -5
- package/src/components/disclosure/Dropdown.tsx +89 -75
- package/src/components/disclosure/Tabs.tsx +1 -1
- package/src/components/disclosure/dialogZIndex.ts +16 -11
- package/src/components/display/Echarts.tsx +4 -4
- package/src/components/features/address/AddressSearch.tsx +2 -2
- package/src/components/features/crud-detail/CrudDetail.tsx +34 -21
- package/src/components/features/crud-detail/CrudDetailAfter.tsx +1 -1
- package/src/components/features/crud-detail/CrudDetailBefore.tsx +1 -1
- package/src/components/features/crud-detail/CrudDetailTools.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheet.tsx +52 -40
- package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetFilter.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetHeader.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
- package/src/components/features/crudRegistry.ts +60 -0
- package/src/components/features/data-select-button/DataSelectButton.tsx +34 -32
- package/src/components/features/permission-table/PermissionTable.tsx +70 -64
- package/src/components/features/shared-data/SharedDataSelect.tsx +24 -22
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +10 -10
- package/src/components/features/shared-data/SharedDataSelectList.tsx +231 -59
- package/src/components/features/shared-data/SharedDataSelectListContext.ts +39 -0
- package/src/components/feedback/Progress.tsx +1 -1
- package/src/components/feedback/busy/BusyContainer.tsx +6 -6
- package/src/components/feedback/busy/BusyContext.ts +12 -12
- package/src/components/feedback/busy/BusyProvider.tsx +6 -6
- package/src/components/feedback/notification/NotificationBanner.tsx +3 -1
- package/src/components/feedback/notification/NotificationBell.tsx +4 -4
- package/src/components/feedback/notification/NotificationContext.ts +28 -28
- package/src/components/feedback/notification/NotificationProvider.tsx +9 -9
- package/src/components/feedback/print/PrintContext.ts +1 -1
- package/src/components/form-control/Button.tsx +1 -1
- package/src/components/form-control/DropdownTrigger.styles.ts +1 -1
- package/src/components/form-control/Invalid.tsx +5 -5
- package/src/components/form-control/ThemeToggle.tsx +10 -10
- package/src/components/form-control/checkbox/Checkbox.styles.ts +8 -8
- package/src/components/form-control/checkbox/Checkbox.tsx +2 -2
- package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
- package/src/components/form-control/checkbox/Radio.tsx +2 -2
- package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
- package/src/components/form-control/color-picker/ColorPicker.tsx +17 -17
- package/src/components/form-control/combobox/Combobox.tsx +55 -55
- package/src/components/form-control/combobox/ComboboxContext.ts +5 -5
- package/src/components/form-control/combobox/ComboboxItem.tsx +3 -3
- package/src/components/form-control/date-range-picker/DateRangePicker.tsx +40 -26
- package/src/components/form-control/editor/EditorToolbar.tsx +52 -50
- package/src/components/form-control/editor/RichTextEditor.tsx +16 -16
- package/src/components/form-control/editor/editor.css +5 -5
- package/src/components/form-control/field/DatePicker.tsx +39 -39
- package/src/components/form-control/field/DateTimePicker.tsx +38 -38
- package/src/components/form-control/field/Field.styles.ts +11 -11
- package/src/components/form-control/field/FieldPlaceholder.tsx +1 -1
- package/src/components/form-control/field/NumberInput.tsx +63 -63
- package/src/components/form-control/field/TextInput.tsx +48 -48
- package/src/components/form-control/field/Textarea.tsx +32 -32
- package/src/components/form-control/field/TimePicker.tsx +37 -37
- package/src/components/form-control/numpad/Numpad.tsx +26 -26
- package/src/components/form-control/select/Select.tsx +82 -86
- package/src/components/form-control/select/SelectContext.ts +8 -8
- package/src/components/form-control/select/SelectItem.tsx +5 -5
- package/src/components/form-control/state-preset/StatePreset.tsx +13 -13
- package/src/components/layout/FormTable.tsx +4 -4
- package/src/components/layout/sidebar/Sidebar.tsx +8 -8
- package/src/components/layout/sidebar/SidebarContainer.tsx +19 -17
- package/src/components/layout/sidebar/SidebarContext.ts +8 -8
- package/src/components/layout/sidebar/SidebarMenu.tsx +19 -19
- package/src/components/layout/sidebar/SidebarUser.tsx +14 -14
- package/src/components/layout/topbar/Topbar.tsx +15 -13
- package/src/components/layout/topbar/TopbarContainer.tsx +6 -6
- package/src/components/layout/topbar/TopbarContext.ts +2 -2
- package/src/components/layout/topbar/TopbarMenu.tsx +18 -16
- package/src/components/layout/topbar/TopbarUser.tsx +9 -9
- package/src/directives/ripple.ts +8 -8
- package/src/helpers/createAppStructure.ts +15 -8
- package/src/helpers/createHmrSafeContext.ts +8 -0
- package/src/helpers/createSlotComponent.ts +4 -4
- package/src/helpers/mergeStyles.ts +11 -11
- package/src/hooks/createControllableSignal.ts +11 -11
- package/src/hooks/createControllableStore.ts +8 -8
- package/src/hooks/createIMEHandler.ts +7 -7
- package/src/hooks/createMountTransition.ts +4 -4
- package/src/hooks/createSelectionGroup.tsx +5 -3
- package/src/hooks/createSlotSignal.ts +2 -2
- package/src/hooks/useLocalStorage.ts +13 -13
- package/src/hooks/useLogger.ts +2 -2
- package/src/hooks/useRouterLink.ts +15 -15
- package/src/index.ts +4 -3
- package/src/providers/ClipboardProvider.tsx +19 -19
- package/src/providers/ConfigContext.tsx +8 -8
- package/src/providers/ErrorLoggerProvider.tsx +3 -3
- package/src/providers/LoggerContext.tsx +13 -13
- package/src/providers/PwaUpdateProvider.tsx +6 -6
- package/src/providers/ServiceClientContext.ts +9 -9
- package/src/providers/ServiceClientProvider.tsx +15 -15
- package/src/providers/SyncStorageContext.tsx +15 -15
- package/src/providers/SystemProvider.tsx +15 -12
- package/src/providers/ThemeContext.tsx +26 -26
- package/src/providers/i18n/I18nContext.tsx +129 -0
- package/src/providers/i18n/I18nContext.types.ts +30 -0
- package/src/providers/i18n/i18nUtils.ts +38 -0
- package/src/providers/i18n/locales/en.ts +161 -0
- package/src/providers/i18n/locales/ko.ts +161 -0
- package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -4
- package/src/providers/shared-data/SharedDataContext.ts +29 -29
- package/src/providers/shared-data/SharedDataProvider.tsx +21 -21
- package/src/styles/patterns.styles.ts +6 -6
- package/src/styles/tokens.styles.ts +5 -5
- package/tailwind.config.ts +1 -1
- package/tailwind.css +4 -4
- package/tests/components/data/List.spec.tsx +689 -0
- package/tests/components/data/Pagination.spec.tsx +336 -0
- package/tests/components/data/Table.spec.tsx +55 -0
- package/tests/components/data/kanban/Kanban.selection.spec.tsx +213 -0
- package/tests/components/data/sheet/DataSheet.spec.tsx +645 -0
- package/tests/components/disclosure/Collapse.spec.tsx +173 -0
- package/tests/components/disclosure/Dialog.spec.tsx +438 -0
- package/tests/components/disclosure/DialogProvider.spec.tsx +142 -0
- package/tests/components/disclosure/Dropdown.spec.tsx +333 -0
- package/tests/components/disclosure/Tabs.spec.tsx +220 -0
- package/tests/components/disclosure/dialogZIndex.spec.ts +45 -0
- package/tests/components/display/Alert.spec.tsx +47 -0
- package/tests/components/display/Barcode.spec.tsx +61 -0
- package/tests/components/display/Card.spec.tsx +41 -0
- package/tests/components/display/Link.spec.tsx +62 -0
- package/tests/components/display/Tag.spec.tsx +47 -0
- package/tests/components/features/address/AddressSearch.spec.tsx +45 -0
- package/tests/components/features/crud-detail/CrudDetail.spec.tsx +537 -0
- package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +491 -0
- package/tests/components/features/crudRegistry.spec.ts +119 -0
- package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +482 -0
- package/tests/components/features/permission-table/PermissionTable.spec.tsx +288 -0
- package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +448 -0
- package/tests/components/feedback/busy/BusyContainer.spec.tsx +80 -0
- package/tests/components/feedback/notification/LiveRegion.spec.tsx +52 -0
- package/tests/components/feedback/notification/NotificationBanner.spec.tsx +187 -0
- package/tests/components/feedback/notification/NotificationBell.spec.tsx +226 -0
- package/tests/components/feedback/notification/NotificationContext.spec.tsx +362 -0
- package/tests/components/feedback/print/Print.spec.tsx +45 -0
- package/tests/components/form-control/Button.spec.tsx +119 -0
- package/tests/components/form-control/Invalid.spec.tsx +131 -0
- package/tests/components/form-control/checkbox/Checkbox.spec.tsx +137 -0
- package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +108 -0
- package/tests/components/form-control/checkbox/Radio.spec.tsx +138 -0
- package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +108 -0
- package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +94 -0
- package/tests/components/form-control/combobox/Combobox.spec.tsx +253 -0
- package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +88 -0
- package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +208 -0
- package/tests/components/form-control/field/DatePicker.spec.tsx +381 -0
- package/tests/components/form-control/field/DateTimePicker.spec.tsx +383 -0
- package/tests/components/form-control/field/NumberInput.spec.tsx +371 -0
- package/tests/components/form-control/field/TextInput.spec.tsx +341 -0
- package/tests/components/form-control/field/Textarea.spec.tsx +224 -0
- package/tests/components/form-control/field/TimePicker.spec.tsx +315 -0
- package/tests/components/form-control/numpad/Numpad.spec.tsx +248 -0
- package/tests/components/form-control/select/Select.spec.tsx +676 -0
- package/tests/components/form-control/select/SelectItem.spec.tsx +174 -0
- package/tests/components/layout/FormGroup.spec.tsx +104 -0
- package/tests/components/layout/FormTable.spec.tsx +43 -0
- package/tests/components/layout/sidebar/Sidebar.spec.tsx +192 -0
- package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +261 -0
- package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +219 -0
- package/tests/components/layout/sidebar/SidebarUser.spec.tsx +133 -0
- package/tests/components/layout/topbar/TopbarActions.spec.tsx +77 -0
- package/tests/components/layout/topbar/TopbarContainer.spec.tsx +38 -0
- package/tests/components/layout/topbar/createTopbarActions.spec.tsx +66 -0
- package/tests/directives/ripple.spec.tsx +130 -0
- package/tests/helpers/createAppStructure.spec.tsx +843 -0
- package/tests/helpers/mergeStyles.spec.ts +172 -0
- package/tests/hooks/createControllableSignal.spec.ts +194 -0
- package/tests/hooks/createIMEHandler.spec.ts +80 -0
- package/tests/hooks/createMountTransition.spec.ts +86 -0
- package/tests/hooks/useLocalStorage.spec.tsx +223 -0
- package/tests/hooks/useLogger.spec.tsx +116 -0
- package/tests/hooks/usePrint.spec.tsx +134 -0
- package/tests/hooks/useRouterLink.spec.tsx +183 -0
- package/tests/hooks/useSyncConfig.spec.tsx +304 -0
- package/tests/providers/ClipboardProvider.spec.tsx +20 -0
- package/tests/providers/ConfigContext.spec.tsx +42 -0
- package/tests/providers/ErrorLoggerProvider.spec.tsx +73 -0
- package/tests/providers/LoggerContext.spec.tsx +76 -0
- package/tests/providers/PwaUpdateProvider.spec.tsx +22 -0
- package/tests/providers/ServiceClientContext.spec.tsx +88 -0
- package/tests/providers/SyncStorageContext.spec.tsx +77 -0
- package/tests/providers/i18n/I18nContext.spec.tsx +110 -0
- package/tests/providers/shared-data/SharedDataProvider.spec.tsx +401 -0
- package/tests/vitest-env.d.ts +1 -0
- package/dist/components/form-control/select-list/SelectList.d.ts +0 -54
- package/dist/components/form-control/select-list/SelectList.d.ts.map +0 -1
- package/dist/components/form-control/select-list/SelectList.js +0 -280
- package/dist/components/form-control/select-list/SelectList.js.map +0 -6
- package/dist/components/form-control/select-list/SelectListContext.d.ts +0 -13
- package/dist/components/form-control/select-list/SelectListContext.d.ts.map +0 -1
- package/dist/components/form-control/select-list/SelectListContext.js +0 -14
- package/dist/components/form-control/select-list/SelectListContext.js.map +0 -6
- package/docs/data-components.md +0 -782
- package/docs/disclosure.md +0 -254
- package/docs/display.md +0 -153
- package/docs/feedback.md +0 -238
- package/docs/form-controls.md +0 -1068
- package/docs/helpers.md +0 -54
- package/docs/hooks.md +0 -588
- package/docs/layout.md +0 -384
- package/docs/providers.md +0 -211
- package/docs/styling.md +0 -184
- package/src/components/form-control/select-list/SelectList.tsx +0 -385
- package/src/components/form-control/select-list/SelectListContext.ts +0 -23
|
@@ -39,6 +39,7 @@ import { Checkbox } from "../../form-control/checkbox/Checkbox";
|
|
|
39
39
|
import { Pagination } from "../Pagination";
|
|
40
40
|
import { useSyncConfig } from "../../../hooks/useSyncConfig";
|
|
41
41
|
import { DialogContext } from "../../disclosure/DialogContext";
|
|
42
|
+
import { useI18nOptional } from "../../../providers/i18n/I18nContext";
|
|
42
43
|
import "./DataSheet.css";
|
|
43
44
|
import {
|
|
44
45
|
configButtonClass,
|
|
@@ -111,6 +112,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
111
112
|
]);
|
|
112
113
|
|
|
113
114
|
const modal = useContext(DialogContext);
|
|
115
|
+
const i18n = useI18nOptional();
|
|
114
116
|
|
|
115
117
|
// #region Column Collection
|
|
116
118
|
const resolved = children(() => local.children);
|
|
@@ -119,21 +121,21 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
119
121
|
);
|
|
120
122
|
|
|
121
123
|
// #region Config (useSyncConfig)
|
|
122
|
-
/* eslint-disable solid/reactivity -- persistKey
|
|
124
|
+
/* eslint-disable solid/reactivity -- persistKey is static and only used once on component mount */
|
|
123
125
|
const [config, setConfig] =
|
|
124
126
|
local.persistKey != null && local.persistKey !== ""
|
|
125
127
|
? useSyncConfig<DataSheetConfig>(`sheet.${local.persistKey}`, { columnRecord: {} })
|
|
126
128
|
: createSignal<DataSheetConfig>({ columnRecord: {} });
|
|
127
129
|
/* eslint-enable solid/reactivity */
|
|
128
130
|
|
|
129
|
-
//
|
|
131
|
+
// Final columns with config applied — config's hidden/fixed/width/displayOrder overrides are applied
|
|
130
132
|
const effectiveColumns = createMemo(() => {
|
|
131
133
|
const cols = columnDefs();
|
|
132
134
|
const record = config().columnRecord ?? {};
|
|
133
135
|
|
|
134
136
|
return cols
|
|
135
137
|
.filter((col) => {
|
|
136
|
-
// config
|
|
138
|
+
// If config override exists, use config priority, otherwise use original col.hidden
|
|
137
139
|
const saved = record[col.key];
|
|
138
140
|
const isHidden = saved?.hidden ?? col.hidden;
|
|
139
141
|
return !isHidden;
|
|
@@ -186,7 +188,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
186
188
|
const result = await modal.show<DataSheetConfig>(
|
|
187
189
|
() => <DataSheetConfigDialog columnInfos={columnInfos} currentConfig={currentConfig} />,
|
|
188
190
|
{
|
|
189
|
-
header: "
|
|
191
|
+
header: "Sheet Settings",
|
|
190
192
|
closeOnBackdrop: true,
|
|
191
193
|
closeOnEscape: true,
|
|
192
194
|
},
|
|
@@ -217,12 +219,12 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
217
219
|
const updated = current.map((s) => (s.key === key ? { ...s, desc: true } : s));
|
|
218
220
|
setSorts(multiple ? updated : [{ key, desc: true }]);
|
|
219
221
|
} else {
|
|
220
|
-
// desc →
|
|
222
|
+
// desc → remove
|
|
221
223
|
const updated = current.filter((s) => s.key !== key);
|
|
222
224
|
setSorts(multiple ? updated : []);
|
|
223
225
|
}
|
|
224
226
|
} else {
|
|
225
|
-
//
|
|
227
|
+
// none → add asc
|
|
226
228
|
const newSort: SortingDef = { key, desc: false };
|
|
227
229
|
setSorts(multiple ? [...current, newSort] : [newSort]);
|
|
228
230
|
}
|
|
@@ -272,12 +274,12 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
272
274
|
return map;
|
|
273
275
|
});
|
|
274
276
|
|
|
275
|
-
// #region Feature Column Setup (
|
|
277
|
+
// #region Feature Column Setup (expand/select feature columns common)
|
|
276
278
|
const hasExpandFeature = () => local.getChildren != null;
|
|
277
279
|
const hasSelectFeature = () => local.selectMode != null;
|
|
278
280
|
const hasReorderFeature = () => local.onItemsReorder != null;
|
|
279
281
|
|
|
280
|
-
//
|
|
282
|
+
// Feature column width tracking helper
|
|
281
283
|
function createTrackedWidth(): [() => number, (el: HTMLElement) => void] {
|
|
282
284
|
const [width, setWidth] = createSignal(0);
|
|
283
285
|
const register = (el: HTMLElement) => {
|
|
@@ -292,7 +294,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
292
294
|
const [selectColWidth, registerSelectColRef] = createTrackedWidth();
|
|
293
295
|
const [reorderColWidth, registerReorderColRef] = createTrackedWidth();
|
|
294
296
|
|
|
295
|
-
//
|
|
297
|
+
// Feature column left position (used in select/reorder column style)
|
|
296
298
|
const selectColLeft = createMemo(() => (hasExpandFeature() ? `${expandColWidth()}px` : "0"));
|
|
297
299
|
|
|
298
300
|
const reorderColLeft = createMemo(() => {
|
|
@@ -303,13 +305,13 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
303
305
|
});
|
|
304
306
|
|
|
305
307
|
// #region ColumnFixing
|
|
306
|
-
//
|
|
308
|
+
// Column cell refs → for width measurement
|
|
307
309
|
const columnRefs = new Map<number, HTMLElement>();
|
|
308
310
|
|
|
309
|
-
//
|
|
311
|
+
// Measured width of each column
|
|
310
312
|
const [columnWidths, setColumnWidths] = createSignal<Map<number, number>>(new Map());
|
|
311
313
|
|
|
312
|
-
//
|
|
314
|
+
// Total width of feature columns (expand, etc.) — used for fixed column left offset
|
|
313
315
|
const featureColTotalWidth = createMemo(() => {
|
|
314
316
|
let w = 0;
|
|
315
317
|
if (hasExpandFeature()) w += expandColWidth();
|
|
@@ -318,21 +320,21 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
318
320
|
return w;
|
|
319
321
|
});
|
|
320
322
|
|
|
321
|
-
//
|
|
323
|
+
// Calculate left position of fixed columns
|
|
322
324
|
const fixedLeftMap = createMemo(() => {
|
|
323
325
|
const map = new Map<number, number>();
|
|
324
326
|
const cols = effectiveColumns();
|
|
325
327
|
const widths = columnWidths();
|
|
326
328
|
let left = featureColTotalWidth();
|
|
327
329
|
for (let c = 0; c < cols.length; c++) {
|
|
328
|
-
if (!cols[c].fixed) break; //
|
|
330
|
+
if (!cols[c].fixed) break; // Fixed columns are placed continuously at front
|
|
329
331
|
map.set(c, left);
|
|
330
332
|
left += widths.get(c) ?? 0;
|
|
331
333
|
}
|
|
332
334
|
return map;
|
|
333
335
|
});
|
|
334
336
|
|
|
335
|
-
//
|
|
337
|
+
// Last fixed column index
|
|
336
338
|
const lastFixedIndex = createMemo(() => {
|
|
337
339
|
const cols = effectiveColumns();
|
|
338
340
|
let last = -1;
|
|
@@ -353,7 +355,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
353
355
|
return colIndex === lastFixedIndex();
|
|
354
356
|
}
|
|
355
357
|
|
|
356
|
-
//
|
|
358
|
+
// Register ResizeObserver for fixed column cells
|
|
357
359
|
function registerColumnRef(colIndex: number, el: HTMLElement): void {
|
|
358
360
|
columnRefs.set(colIndex, el);
|
|
359
361
|
createResizeObserver(el, () => {
|
|
@@ -381,7 +383,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
381
383
|
const startX = event.clientX;
|
|
382
384
|
const startWidth = th.offsetWidth;
|
|
383
385
|
|
|
384
|
-
//
|
|
386
|
+
// Show resize indicator
|
|
385
387
|
const containerRect = container.getBoundingClientRect();
|
|
386
388
|
setResizeIndicatorStyle({
|
|
387
389
|
display: "block",
|
|
@@ -404,7 +406,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
404
406
|
},
|
|
405
407
|
onEnd(e) {
|
|
406
408
|
const delta = e.clientX - startX;
|
|
407
|
-
//
|
|
409
|
+
// Only save width if actual drag occurred (prevent dblclick DOM recreation from losing dblclick)
|
|
408
410
|
if (delta !== 0) {
|
|
409
411
|
const newWidth = Math.max(30, startWidth + delta);
|
|
410
412
|
saveColumnWidth(colKey, `${newWidth}px`);
|
|
@@ -419,7 +421,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
419
421
|
}
|
|
420
422
|
|
|
421
423
|
// #region HeaderSticky
|
|
422
|
-
//
|
|
424
|
+
// Track header row heights to calculate cumulative top values
|
|
423
425
|
const [headerRowHeights, setHeaderRowHeights] = createSignal<number[]>([]);
|
|
424
426
|
|
|
425
427
|
function registerHeaderRow(rowIndex: number, el: HTMLElement): void {
|
|
@@ -432,7 +434,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
432
434
|
});
|
|
433
435
|
}
|
|
434
436
|
|
|
435
|
-
//
|
|
437
|
+
// Cumulative top value for each header row
|
|
436
438
|
const headerRowTops = createMemo(() => {
|
|
437
439
|
const heights = headerRowHeights();
|
|
438
440
|
const tops: number[] = [];
|
|
@@ -444,7 +446,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
444
446
|
return tops;
|
|
445
447
|
});
|
|
446
448
|
|
|
447
|
-
//
|
|
449
|
+
// Top value of summary row (sum of all header row heights)
|
|
448
450
|
const summaryRowTop = createMemo(() => {
|
|
449
451
|
const heights = headerRowHeights();
|
|
450
452
|
return heights.reduce((sum, h) => sum + h, 0);
|
|
@@ -600,7 +602,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
600
602
|
const flat = displayItems()[i];
|
|
601
603
|
if (flat.item === item) break;
|
|
602
604
|
|
|
603
|
-
//
|
|
605
|
+
// Cannot drop to child items of self
|
|
604
606
|
if (isDescendant(item, flat.item)) break;
|
|
605
607
|
|
|
606
608
|
const relY = ev.clientY - rect.top;
|
|
@@ -623,7 +625,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
623
625
|
|
|
624
626
|
setDragState({ draggingItem: item, targetItem: foundTarget, position: foundPosition });
|
|
625
627
|
|
|
626
|
-
//
|
|
628
|
+
// Update indicator DOM
|
|
627
629
|
for (let i = 0; i < rows.length; i++) {
|
|
628
630
|
rows[i].removeAttribute("data-dragging");
|
|
629
631
|
rows[i].removeAttribute("data-drag-over");
|
|
@@ -639,7 +641,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
639
641
|
}
|
|
640
642
|
}
|
|
641
643
|
|
|
642
|
-
// before/after
|
|
644
|
+
// before/after indicator
|
|
643
645
|
const indicatorEl = tableEl
|
|
644
646
|
.closest("[data-sheet-scroll]")
|
|
645
647
|
?.querySelector("[data-reorder-indicator]") as HTMLElement | null;
|
|
@@ -675,7 +677,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
675
677
|
} as DataSheetReorderEvent<T>);
|
|
676
678
|
}
|
|
677
679
|
|
|
678
|
-
//
|
|
680
|
+
// Clean up
|
|
679
681
|
for (const row of rows) {
|
|
680
682
|
row.removeAttribute("data-dragging");
|
|
681
683
|
row.removeAttribute("data-drag-over");
|
|
@@ -692,7 +694,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
692
694
|
});
|
|
693
695
|
}
|
|
694
696
|
|
|
695
|
-
// #region Keyboard Navigation (Enter/Shift+Enter
|
|
697
|
+
// #region Keyboard Navigation (move rows with Enter/Shift+Enter)
|
|
696
698
|
function onTableKeyDown(e: KeyboardEvent): void {
|
|
697
699
|
if (e.key !== "Enter" || e.altKey || e.ctrlKey || e.metaKey) return;
|
|
698
700
|
|
|
@@ -728,24 +730,24 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
728
730
|
// #region Display
|
|
729
731
|
const displayItems = flatItems;
|
|
730
732
|
|
|
731
|
-
//
|
|
733
|
+
// Is expand feature column "last fixed" (no regular fixed columns and no select feature)
|
|
732
734
|
const isExpandColLastFixed = () =>
|
|
733
735
|
hasExpandFeature() && !hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
|
|
734
736
|
|
|
735
|
-
//
|
|
737
|
+
// Is select feature column "last fixed" (no regular fixed columns and select is rightmost feature)
|
|
736
738
|
const isSelectColLastFixed = () =>
|
|
737
739
|
hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
|
|
738
740
|
|
|
739
741
|
const isReorderColLastFixed = () => hasReorderFeature() && lastFixedIndex() < 0;
|
|
740
742
|
|
|
741
|
-
//
|
|
743
|
+
// Total header row count + summary row count (used for feature column rowspan)
|
|
742
744
|
const featureHeaderRowspan = createMemo(() => {
|
|
743
745
|
const headerRows = headerTable().length;
|
|
744
746
|
const summaryRow = hasSummary() ? 1 : 0;
|
|
745
747
|
return headerRows + summaryRow;
|
|
746
748
|
});
|
|
747
749
|
|
|
748
|
-
//
|
|
750
|
+
// Is all expanded
|
|
749
751
|
const isAllExpanded = createMemo(() => {
|
|
750
752
|
if (!local.getChildren) return false;
|
|
751
753
|
const indexMap = originalIndexMap();
|
|
@@ -784,7 +786,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
784
786
|
<button
|
|
785
787
|
class={configButtonClass}
|
|
786
788
|
onClick={openConfigModal}
|
|
787
|
-
title="
|
|
789
|
+
title="Sheet Settings"
|
|
788
790
|
type="button"
|
|
789
791
|
>
|
|
790
792
|
<Icon icon={IconSettings} size="1em" />
|
|
@@ -824,7 +826,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
824
826
|
<For each={headerTable()}>
|
|
825
827
|
{(row, rowIndex) => (
|
|
826
828
|
<tr ref={(el: HTMLElement) => registerHeaderRow(rowIndex(), el)}>
|
|
827
|
-
{/*
|
|
829
|
+
{/* Expand feature column header — show only in first row (cover all with rowspan) */}
|
|
828
830
|
<Show when={hasExpandFeature() && rowIndex() === 0}>
|
|
829
831
|
<th
|
|
830
832
|
class={twMerge(
|
|
@@ -842,7 +844,9 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
842
844
|
type="button"
|
|
843
845
|
class={expandToggleClass}
|
|
844
846
|
onClick={toggleExpandAll}
|
|
845
|
-
title={isAllExpanded()
|
|
847
|
+
title={isAllExpanded()
|
|
848
|
+
? (i18n?.t("dataSheet.collapseAll") ?? "Collapse all")
|
|
849
|
+
: (i18n?.t("dataSheet.expandAll") ?? "Expand all")}
|
|
846
850
|
>
|
|
847
851
|
<Icon
|
|
848
852
|
icon={IconChevronDown}
|
|
@@ -856,7 +860,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
856
860
|
</div>
|
|
857
861
|
</th>
|
|
858
862
|
</Show>
|
|
859
|
-
{/*
|
|
863
|
+
{/* Select feature column header — show only in first row (cover all with rowspan) */}
|
|
860
864
|
<Show when={hasSelectFeature() && rowIndex() === 0}>
|
|
861
865
|
<th
|
|
862
866
|
class={twMerge(
|
|
@@ -891,7 +895,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
891
895
|
</Show>
|
|
892
896
|
</th>
|
|
893
897
|
</Show>
|
|
894
|
-
{/*
|
|
898
|
+
{/* Drag reorder feature column header — show only in first row */}
|
|
895
899
|
<Show when={hasReorderFeature() && rowIndex() === 0}>
|
|
896
900
|
<th
|
|
897
901
|
class={twMerge(
|
|
@@ -921,7 +925,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
921
925
|
? effectiveColumns()[c().colIndex!].key
|
|
922
926
|
: undefined;
|
|
923
927
|
|
|
924
|
-
//
|
|
928
|
+
// Group header fixed status: all columns in colspan range are fixed
|
|
925
929
|
const isGroupFixed = (): boolean => {
|
|
926
930
|
if (c().isLastRow) return false;
|
|
927
931
|
const start = cellColIndex();
|
|
@@ -933,14 +937,14 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
933
937
|
return true;
|
|
934
938
|
};
|
|
935
939
|
|
|
936
|
-
//
|
|
940
|
+
// Cell fixed column status (based on colIndex if last row, group-based otherwise)
|
|
937
941
|
const isCellFixed = () =>
|
|
938
942
|
(c().isLastRow &&
|
|
939
943
|
c().colIndex != null &&
|
|
940
944
|
effectiveColumns()[c().colIndex!].fixed) ||
|
|
941
945
|
isGroupFixed();
|
|
942
946
|
|
|
943
|
-
//
|
|
947
|
+
// Cell's last fixed status
|
|
944
948
|
const isCellLastFixed = () => {
|
|
945
949
|
if (c().isLastRow && c().colIndex != null)
|
|
946
950
|
return isLastFixed(c().colIndex!);
|
|
@@ -951,17 +955,17 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
951
955
|
return false;
|
|
952
956
|
};
|
|
953
957
|
|
|
954
|
-
//
|
|
958
|
+
// Fixed cell left + top inline style
|
|
955
959
|
const cellStyle = (): string | undefined => {
|
|
956
960
|
const parts: string[] = [];
|
|
957
|
-
// top:
|
|
961
|
+
// top: apply to all th (fix header to top)
|
|
958
962
|
const top = headerRowTops()[rowIndex()];
|
|
959
963
|
parts.push(`top: ${top}px`);
|
|
960
|
-
// left:
|
|
964
|
+
// left: apply only to fixed columns
|
|
961
965
|
if (c().isLastRow && c().colIndex != null) {
|
|
962
966
|
const left = getFixedStyle(c().colIndex!);
|
|
963
967
|
if (left != null) parts.push(left);
|
|
964
|
-
// max-width:
|
|
968
|
+
// max-width: apply if explicit width exists (allow column to shrink below content)
|
|
965
969
|
const col = effectiveColumns()[c().colIndex!];
|
|
966
970
|
if (col.width != null) parts.push(`max-width: ${col.width}`);
|
|
967
971
|
} else if (isGroupFixed()) {
|
|
@@ -1063,7 +1067,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1063
1067
|
</For>
|
|
1064
1068
|
<Show when={hasSummary()}>
|
|
1065
1069
|
<tr>
|
|
1066
|
-
{/*
|
|
1070
|
+
{/* Expand feature column summary cell already covered by rowspan, skip */}
|
|
1067
1071
|
<For each={effectiveColumns()}>
|
|
1068
1072
|
{(col, colIndex) => {
|
|
1069
1073
|
const summaryStyle = (): string | undefined => {
|
|
@@ -1105,7 +1109,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1105
1109
|
}}
|
|
1106
1110
|
class={local.autoSelect === "click" ? "cursor-pointer" : undefined}
|
|
1107
1111
|
>
|
|
1108
|
-
{/*
|
|
1112
|
+
{/* Expand feature column body cell */}
|
|
1109
1113
|
<Show when={hasExpandFeature()}>
|
|
1110
1114
|
<td
|
|
1111
1115
|
class={twMerge(
|
|
@@ -1143,7 +1147,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1143
1147
|
</div>
|
|
1144
1148
|
</td>
|
|
1145
1149
|
</Show>
|
|
1146
|
-
{/*
|
|
1150
|
+
{/* Select feature column body cell */}
|
|
1147
1151
|
<Show when={hasSelectFeature()}>
|
|
1148
1152
|
{(() => {
|
|
1149
1153
|
const selectable = () => getItemSelectable(flat.item);
|
|
@@ -1165,7 +1169,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1165
1169
|
<Show
|
|
1166
1170
|
when={local.selectMode === "multiple"}
|
|
1167
1171
|
fallback={
|
|
1168
|
-
/* single
|
|
1172
|
+
/* single mode */
|
|
1169
1173
|
<Show when={selectable() === true}>
|
|
1170
1174
|
<div
|
|
1171
1175
|
class={featureCellBodyClickableClass}
|
|
@@ -1185,7 +1189,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1185
1189
|
</Show>
|
|
1186
1190
|
}
|
|
1187
1191
|
>
|
|
1188
|
-
{/* multi
|
|
1192
|
+
{/* multi mode */}
|
|
1189
1193
|
<div
|
|
1190
1194
|
class={featureCellBodyClickableClass}
|
|
1191
1195
|
onClick={(e) => {
|
|
@@ -1219,7 +1223,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1219
1223
|
);
|
|
1220
1224
|
})()}
|
|
1221
1225
|
</Show>
|
|
1222
|
-
{/*
|
|
1226
|
+
{/* Drag reorder feature column body cell */}
|
|
1223
1227
|
<Show when={hasReorderFeature()}>
|
|
1224
1228
|
<td
|
|
1225
1229
|
class={twMerge(
|
|
@@ -10,7 +10,7 @@ export function isDataSheetColumnDef(value: unknown): value is DataSheetColumnDe
|
|
|
10
10
|
);
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
/* eslint-disable solid/reactivity -- plain object
|
|
13
|
+
/* eslint-disable solid/reactivity -- plain object return pattern does not require reactive context */
|
|
14
14
|
export function DataSheetColumn<TItem>(props: DataSheetColumnProps<TItem>): JSX.Element {
|
|
15
15
|
return {
|
|
16
16
|
__type: "sheet-column",
|
|
@@ -35,7 +35,7 @@ export interface DataSheetConfigDialogProps {
|
|
|
35
35
|
export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (props) => {
|
|
36
36
|
const dialog = useDialogInstance<DataSheetConfig>();
|
|
37
37
|
|
|
38
|
-
/* eslint-disable solid/reactivity --
|
|
38
|
+
/* eslint-disable solid/reactivity -- modal props are static values only used once at mount time */
|
|
39
39
|
const initialItems: EditColumnItem[] = props.columnInfos
|
|
40
40
|
.filter((info) => !info.collapse)
|
|
41
41
|
.map((info) => {
|
|
@@ -105,7 +105,7 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
function handleReset(): void {
|
|
108
|
-
if (!confirm("
|
|
108
|
+
if (!confirm("Are you sure you want to reset all sheet settings?")) return;
|
|
109
109
|
dialog?.close({ columnRecord: {} });
|
|
110
110
|
}
|
|
111
111
|
|
|
@@ -115,13 +115,13 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
115
115
|
<DataSheet items={editItems} inset hideConfigBar onItemsReorder={handleReorder}>
|
|
116
116
|
<DataSheet.Column<EditColumnItem>
|
|
117
117
|
key="header"
|
|
118
|
-
header="
|
|
118
|
+
header="Column"
|
|
119
119
|
class="px-2 py-1"
|
|
120
120
|
sortable={false}
|
|
121
121
|
>
|
|
122
122
|
{(ctx) => ctx.item.headerText}
|
|
123
123
|
</DataSheet.Column>
|
|
124
|
-
<DataSheet.Column<EditColumnItem> key="fixed" header="
|
|
124
|
+
<DataSheet.Column<EditColumnItem> key="fixed" header="Fixed" sortable={false}>
|
|
125
125
|
{(ctx) => (
|
|
126
126
|
<Checkbox
|
|
127
127
|
inset
|
|
@@ -130,7 +130,7 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
130
130
|
/>
|
|
131
131
|
)}
|
|
132
132
|
</DataSheet.Column>
|
|
133
|
-
<DataSheet.Column<EditColumnItem> key="hidden" header="
|
|
133
|
+
<DataSheet.Column<EditColumnItem> key="hidden" header="Hidden" sortable={false}>
|
|
134
134
|
{(ctx) => (
|
|
135
135
|
<Checkbox
|
|
136
136
|
inset
|
|
@@ -139,7 +139,7 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
139
139
|
/>
|
|
140
140
|
)}
|
|
141
141
|
</DataSheet.Column>
|
|
142
|
-
<DataSheet.Column<EditColumnItem> key="width" header="
|
|
142
|
+
<DataSheet.Column<EditColumnItem> key="width" header="Width" sortable={false}>
|
|
143
143
|
{(ctx) => (
|
|
144
144
|
<TextInput
|
|
145
145
|
value={ctx.item.width}
|
|
@@ -154,12 +154,12 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
154
154
|
|
|
155
155
|
<div class={footerClass}>
|
|
156
156
|
<Button onClick={handleReset} theme="warning" variant="solid">
|
|
157
|
-
|
|
157
|
+
Reset
|
|
158
158
|
</Button>
|
|
159
159
|
<div class={footerActionsClass}>
|
|
160
|
-
<Button onClick={() => dialog?.close(undefined)}
|
|
160
|
+
<Button onClick={() => dialog?.close(undefined)}>Cancel</Button>
|
|
161
161
|
<Button onClick={handleOk} theme="primary" variant="solid">
|
|
162
|
-
|
|
162
|
+
Confirm
|
|
163
163
|
</Button>
|
|
164
164
|
</div>
|
|
165
165
|
</div>
|
|
@@ -15,7 +15,7 @@ export function buildHeaderTable<TItem>(
|
|
|
15
15
|
const maxDepth = Math.max(...columns.map((c) => c.header.length));
|
|
16
16
|
if (maxDepth === 0) return [];
|
|
17
17
|
|
|
18
|
-
// occupied[r][c] = true
|
|
18
|
+
// occupied[r][c] = true indicates already merged area of another cell
|
|
19
19
|
const occupied: boolean[][] = Array.from({ length: maxDepth }, () =>
|
|
20
20
|
Array.from({ length: columns.length }, () => false),
|
|
21
21
|
);
|
|
@@ -23,7 +23,7 @@ export function buildHeaderTable<TItem>(
|
|
|
23
23
|
Array.from({ length: columns.length }, () => null),
|
|
24
24
|
);
|
|
25
25
|
|
|
26
|
-
//
|
|
26
|
+
// Pad header of each column to maxDepth
|
|
27
27
|
const padded = columns.map((col) => {
|
|
28
28
|
const h = col.header;
|
|
29
29
|
const result: string[] = [];
|
|
@@ -38,10 +38,10 @@ export function buildHeaderTable<TItem>(
|
|
|
38
38
|
if (occupied[r][c]) continue;
|
|
39
39
|
|
|
40
40
|
const text = padded[c][r];
|
|
41
|
-
//
|
|
41
|
+
// Determined based on original header length: if current row is at or beyond the last level of original header, it's a leaf
|
|
42
42
|
const isLastRow = r >= columns[c].header.length - 1;
|
|
43
43
|
|
|
44
|
-
// colspan:
|
|
44
|
+
// colspan: same text in same row + same parent group + does not cross fixed boundary
|
|
45
45
|
let colspan = 1;
|
|
46
46
|
if (!isLastRow) {
|
|
47
47
|
const startFixed = columns[c].fixed;
|
|
@@ -56,7 +56,7 @@ export function buildHeaderTable<TItem>(
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
// rowspan: isLastRow
|
|
59
|
+
// rowspan: if isLastRow, span the remaining depth
|
|
60
60
|
const rowspan = isLastRow ? maxDepth - r : 1;
|
|
61
61
|
|
|
62
62
|
const col = columns[c];
|
|
@@ -72,7 +72,7 @@ export function buildHeaderTable<TItem>(
|
|
|
72
72
|
headerContent: isLastRow ? col.headerContent : undefined,
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
-
//
|
|
75
|
+
// Mark merged area
|
|
76
76
|
for (let dr = 0; dr < rowspan; dr++) {
|
|
77
77
|
for (let dc = 0; dc < colspan; dc++) {
|
|
78
78
|
if (dr === 0 && dc === 0) continue;
|
|
@@ -85,7 +85,7 @@ export function buildHeaderTable<TItem>(
|
|
|
85
85
|
return table;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
//
|
|
88
|
+
// Check if belongs to same merge group (same text sequence from row 0 to endRow)
|
|
89
89
|
function isSameGroup(
|
|
90
90
|
padded: string[][],
|
|
91
91
|
colA: number,
|
|
@@ -1,46 +1,46 @@
|
|
|
1
1
|
import type { JSX } from "solid-js";
|
|
2
2
|
|
|
3
3
|
export interface DataSheetProps<TItem> {
|
|
4
|
-
//
|
|
4
|
+
// Data
|
|
5
5
|
items?: TItem[];
|
|
6
|
-
//
|
|
6
|
+
// Config
|
|
7
7
|
persistKey?: string;
|
|
8
8
|
hideConfigBar?: boolean;
|
|
9
9
|
inset?: boolean;
|
|
10
10
|
contentStyle?: JSX.CSSProperties | string;
|
|
11
11
|
|
|
12
|
-
//
|
|
12
|
+
// Sorting
|
|
13
13
|
sorts?: SortingDef[];
|
|
14
14
|
onSortsChange?: (sorts: SortingDef[]) => void;
|
|
15
15
|
autoSort?: boolean;
|
|
16
16
|
|
|
17
|
-
//
|
|
17
|
+
// Pagination
|
|
18
18
|
page?: number;
|
|
19
19
|
onPageChange?: (page: number) => void;
|
|
20
20
|
totalPageCount?: number;
|
|
21
21
|
itemsPerPage?: number;
|
|
22
22
|
displayPageCount?: number;
|
|
23
23
|
|
|
24
|
-
//
|
|
24
|
+
// Selection
|
|
25
25
|
selectMode?: "single" | "multiple";
|
|
26
26
|
selectedItems?: TItem[];
|
|
27
27
|
onSelectedItemsChange?: (items: TItem[]) => void;
|
|
28
28
|
autoSelect?: "click";
|
|
29
29
|
isItemSelectable?: (item: TItem) => boolean | string;
|
|
30
30
|
|
|
31
|
-
//
|
|
31
|
+
// Tree expansion
|
|
32
32
|
expandedItems?: TItem[];
|
|
33
33
|
onExpandedItemsChange?: (items: TItem[]) => void;
|
|
34
34
|
getChildren?: (item: TItem, index: number) => TItem[] | undefined;
|
|
35
35
|
|
|
36
|
-
//
|
|
36
|
+
// Cell styling
|
|
37
37
|
cellClass?: (item: TItem, colKey: string) => string | undefined;
|
|
38
38
|
cellStyle?: (item: TItem, colKey: string) => string | undefined;
|
|
39
39
|
|
|
40
|
-
//
|
|
40
|
+
// Reordering
|
|
41
41
|
onItemsReorder?: (event: DataSheetReorderEvent<TItem>) => void;
|
|
42
42
|
|
|
43
|
-
//
|
|
43
|
+
// Other
|
|
44
44
|
class?: string;
|
|
45
45
|
children: JSX.Element;
|
|
46
46
|
}
|
|
@@ -64,9 +64,9 @@ export interface DataSheetColumnProps<TItem> {
|
|
|
64
64
|
|
|
65
65
|
export interface DataSheetCellContext<TItem> {
|
|
66
66
|
item: TItem;
|
|
67
|
-
/**
|
|
67
|
+
/** Position within belonging array (root: items[], children: parent.children[]) */
|
|
68
68
|
index: number;
|
|
69
|
-
/**
|
|
69
|
+
/** Flat display row position (sequence number within current page) */
|
|
70
70
|
row: number;
|
|
71
71
|
depth: number;
|
|
72
72
|
}
|
|
@@ -119,26 +119,26 @@ export interface HeaderDef {
|
|
|
119
119
|
|
|
120
120
|
export interface FlatItem<TItem> {
|
|
121
121
|
item: TItem;
|
|
122
|
-
/**
|
|
122
|
+
/** Position within belonging array (root: items[], children: parent.children[]) */
|
|
123
123
|
index: number;
|
|
124
|
-
/**
|
|
124
|
+
/** Flat display row position (sequence number within current page) */
|
|
125
125
|
row: number;
|
|
126
126
|
depth: number;
|
|
127
127
|
hasChildren: boolean;
|
|
128
128
|
parent?: TItem;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
//
|
|
131
|
+
// Drag and drop position
|
|
132
132
|
export type DataSheetDragPosition = "before" | "after" | "inside";
|
|
133
133
|
|
|
134
|
-
//
|
|
134
|
+
// Reorder event
|
|
135
135
|
export interface DataSheetReorderEvent<TItem> {
|
|
136
136
|
item: TItem;
|
|
137
137
|
targetItem: TItem;
|
|
138
138
|
position: DataSheetDragPosition;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
//
|
|
141
|
+
// Column information passed to config modal
|
|
142
142
|
export interface DataSheetConfigColumnInfo {
|
|
143
143
|
key: string;
|
|
144
144
|
header: string[];
|