@simplysm/solid 13.0.28 → 13.0.30
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 +15 -9
- package/dist/components/data/Pagination.d.ts +4 -5
- package/dist/components/data/Pagination.d.ts.map +1 -1
- package/dist/components/data/Pagination.js +14 -14
- package/dist/components/data/Pagination.js.map +2 -2
- package/dist/components/data/Table.js +1 -1
- package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/data/calendar/Calendar.js +1 -1
- package/dist/components/data/calendar/Calendar.js.map +1 -1
- package/dist/components/data/kanban/Kanban.d.ts +9 -9
- package/dist/components/data/kanban/Kanban.d.ts.map +1 -1
- package/dist/components/data/kanban/Kanban.js +6 -6
- package/dist/components/data/kanban/Kanban.js.map +2 -2
- package/dist/components/data/list/List.d.ts.map +1 -1
- package/dist/components/data/list/List.js.map +1 -1
- package/dist/components/data/list/ListItem.d.ts.map +1 -1
- package/dist/components/data/list/ListItem.js.map +1 -1
- package/dist/components/data/permission-table/PermissionTable.d.ts.map +1 -1
- package/dist/components/data/permission-table/PermissionTable.js.map +1 -1
- package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.js +102 -107
- package/dist/components/data/sheet/DataSheet.js.map +2 -2
- package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.styles.js +24 -6
- package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
- package/dist/components/data/sheet/DataSheetColumn.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheetColumn.js.map +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
- package/dist/components/data/sheet/sheetUtils.d.ts.map +1 -1
- package/dist/components/data/sheet/sheetUtils.js.map +1 -1
- package/dist/components/data/sheet/types.d.ts +2 -2
- package/dist/components/data/sheet/types.d.ts.map +1 -1
- package/dist/components/disclosure/Collapse.d.ts.map +1 -1
- package/dist/components/disclosure/Collapse.js +0 -3
- package/dist/components/disclosure/Collapse.js.map +1 -1
- package/dist/components/disclosure/Dialog.d.ts +8 -8
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +64 -69
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/disclosure/DialogContext.d.ts +4 -4
- package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
- package/dist/components/disclosure/DialogContext.js.map +1 -1
- package/dist/components/disclosure/DialogProvider.d.ts.map +1 -1
- package/dist/components/disclosure/DialogProvider.js +8 -8
- package/dist/components/disclosure/DialogProvider.js.map +2 -2
- package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
- package/dist/components/disclosure/Dropdown.js.map +1 -1
- package/dist/components/disclosure/Tabs.d.ts.map +1 -1
- package/dist/components/disclosure/Tabs.js.map +1 -1
- package/dist/components/display/Alert.d.ts.map +1 -1
- package/dist/components/display/Alert.js.map +1 -1
- package/dist/components/display/Card.d.ts +0 -1
- package/dist/components/display/Card.d.ts.map +1 -1
- package/dist/components/display/Card.js +1 -2
- package/dist/components/display/Card.js.map +1 -1
- package/dist/components/display/Echarts.d.ts +1 -1
- package/dist/components/display/Echarts.d.ts.map +1 -1
- package/dist/components/display/Echarts.js +2 -2
- package/dist/components/display/Echarts.js.map +2 -2
- package/dist/components/display/Link.d.ts +5 -0
- package/dist/components/display/Link.d.ts.map +1 -0
- package/dist/components/display/Link.js +26 -0
- package/dist/components/display/Link.js.map +6 -0
- package/dist/components/feedback/Progress.d.ts +3 -3
- package/dist/components/feedback/Progress.d.ts.map +1 -1
- package/dist/components/feedback/Progress.js +1 -1
- package/dist/components/feedback/Progress.js.map +2 -2
- package/dist/components/feedback/busy/BusyContainer.d.ts +13 -0
- package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -0
- package/dist/components/feedback/{loading/LoadingContainer.js → busy/BusyContainer.js} +20 -13
- package/dist/components/feedback/busy/BusyContainer.js.map +6 -0
- package/dist/components/feedback/busy/BusyContext.d.ts +11 -0
- package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -0
- package/dist/components/feedback/busy/BusyContext.js +14 -0
- package/dist/components/feedback/busy/BusyContext.js.map +6 -0
- package/dist/components/feedback/busy/BusyProvider.d.ts +7 -0
- package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -0
- package/dist/components/feedback/{loading/LoadingProvider.js → busy/BusyProvider.js} +7 -7
- package/dist/components/feedback/busy/BusyProvider.js.map +6 -0
- package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js +1 -1
- package/dist/components/feedback/notification/NotificationBanner.js.map +1 -1
- package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBell.js +4 -2
- package/dist/components/feedback/notification/NotificationBell.js.map +2 -2
- package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js +1 -0
- package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
- package/dist/components/form-control/Button.d.ts.map +1 -1
- package/dist/components/form-control/Button.js +2 -2
- package/dist/components/form-control/Button.js.map +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
- package/dist/components/form-control/DropdownTrigger.styles.js +6 -1
- package/dist/components/form-control/DropdownTrigger.styles.js.map +1 -1
- package/dist/components/form-control/Invalid.d.ts +4 -2
- package/dist/components/form-control/Invalid.d.ts.map +1 -1
- package/dist/components/form-control/Invalid.js +81 -41
- package/dist/components/form-control/Invalid.js.map +2 -2
- package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.js +4 -5
- package/dist/components/form-control/ThemeToggle.js.map +2 -2
- package/dist/components/form-control/checkbox/Checkbox.d.ts +4 -2
- package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Checkbox.js +65 -52
- package/dist/components/form-control/checkbox/Checkbox.js.map +2 -2
- package/dist/components/form-control/checkbox/Checkbox.styles.d.ts +1 -2
- package/dist/components/form-control/checkbox/Checkbox.styles.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Checkbox.styles.js +8 -10
- package/dist/components/form-control/checkbox/Checkbox.styles.js.map +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.d.ts +9 -9
- package/dist/components/form-control/checkbox/CheckboxGroup.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.js +10 -82
- package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
- package/dist/components/form-control/checkbox/Radio.d.ts +4 -2
- package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Radio.js +64 -51
- package/dist/components/form-control/checkbox/Radio.js.map +2 -2
- package/dist/components/form-control/checkbox/RadioGroup.d.ts +9 -9
- package/dist/components/form-control/checkbox/RadioGroup.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.js +10 -77
- package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
- package/dist/components/form-control/color-picker/ColorPicker.d.ts +8 -3
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.js +43 -26
- package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
- package/dist/components/form-control/combobox/Combobox.d.ts +8 -8
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/form-control/combobox/Combobox.js +72 -59
- package/dist/components/form-control/combobox/Combobox.js.map +2 -2
- package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
- package/dist/components/form-control/editor/EditorToolbar.js +3 -2
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
- package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
- package/dist/components/form-control/editor/RichTextEditor.js.map +1 -1
- package/dist/components/form-control/field/DatePicker.d.ts +6 -0
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DatePicker.js +138 -117
- package/dist/components/form-control/field/DatePicker.js.map +2 -2
- package/dist/components/form-control/field/DateTimePicker.d.ts +6 -0
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.js +138 -115
- package/dist/components/form-control/field/DateTimePicker.js.map +2 -2
- package/dist/components/form-control/field/Field.styles.d.ts +14 -0
- package/dist/components/form-control/field/Field.styles.d.ts.map +1 -1
- package/dist/components/form-control/field/Field.styles.js +47 -3
- package/dist/components/form-control/field/Field.styles.js.map +1 -1
- package/dist/components/form-control/field/FieldPlaceholder.d.ts +7 -0
- package/dist/components/form-control/field/FieldPlaceholder.d.ts.map +1 -0
- package/dist/components/form-control/field/FieldPlaceholder.js +34 -0
- package/dist/components/form-control/field/FieldPlaceholder.js.map +6 -0
- package/dist/components/form-control/field/NumberInput.d.ts +13 -0
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +163 -111
- package/dist/components/form-control/field/NumberInput.js.map +2 -2
- package/dist/components/form-control/field/TextInput.d.ts +16 -1
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
- package/dist/components/form-control/field/TextInput.js +177 -114
- package/dist/components/form-control/field/TextInput.js.map +2 -2
- package/dist/components/form-control/field/Textarea.d.ts +10 -0
- package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
- package/dist/components/form-control/field/Textarea.js +156 -121
- package/dist/components/form-control/field/Textarea.js.map +2 -2
- package/dist/components/form-control/field/TimePicker.d.ts +10 -0
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/TimePicker.js +126 -94
- package/dist/components/form-control/field/TimePicker.js.map +2 -2
- package/dist/components/form-control/select/Select.d.ts +7 -9
- package/dist/components/form-control/select/Select.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.js +71 -60
- package/dist/components/form-control/select/Select.js.map +2 -2
- package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
- package/dist/components/form-control/select/SelectItem.js.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.js +2 -1
- package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
- package/dist/components/layout/FormGroup.d.ts.map +1 -1
- package/dist/components/layout/FormGroup.js.map +1 -1
- package/dist/components/layout/sidebar/Sidebar.d.ts.map +1 -1
- package/dist/components/layout/sidebar/Sidebar.js +1 -1
- package/dist/components/layout/sidebar/Sidebar.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarContainer.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarMenu.js +1 -1
- package/dist/components/layout/sidebar/SidebarMenu.js.map +1 -1
- package/dist/components/layout/sidebar/SidebarUser.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarUser.js +4 -4
- package/dist/components/layout/sidebar/SidebarUser.js.map +1 -1
- package/dist/components/layout/topbar/Topbar.js +1 -1
- package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
- package/dist/components/layout/topbar/TopbarMenu.js.map +1 -1
- package/dist/components/layout/topbar/TopbarUser.d.ts.map +1 -1
- package/dist/components/layout/topbar/TopbarUser.js.map +1 -1
- package/dist/helpers/createAppStructure.d.ts.map +1 -1
- package/dist/helpers/createAppStructure.js +17 -12
- package/dist/helpers/createAppStructure.js.map +1 -1
- package/dist/helpers/mergeStyles.d.ts.map +1 -1
- package/dist/helpers/mergeStyles.js +4 -1
- package/dist/helpers/mergeStyles.js.map +1 -1
- package/dist/helpers/splitSlots.d.ts.map +1 -1
- package/dist/helpers/splitSlots.js.map +1 -1
- package/dist/hooks/createControllableSignal.d.ts.map +1 -1
- package/dist/hooks/createControllableSignal.js.map +1 -1
- package/dist/hooks/createItemTemplate.d.ts +17 -0
- package/dist/hooks/createItemTemplate.d.ts.map +1 -0
- package/dist/hooks/createItemTemplate.js +40 -0
- package/dist/hooks/createItemTemplate.js.map +6 -0
- package/dist/hooks/createPointerDrag.d.ts +13 -0
- package/dist/hooks/createPointerDrag.d.ts.map +1 -0
- package/dist/hooks/createPointerDrag.js +15 -0
- package/dist/hooks/createPointerDrag.js.map +6 -0
- package/dist/hooks/createSelectionGroup.d.ts +70 -0
- package/dist/hooks/createSelectionGroup.d.ts.map +1 -0
- package/dist/hooks/createSelectionGroup.js +141 -0
- package/dist/hooks/createSelectionGroup.js.map +6 -0
- package/dist/hooks/useClipboardValueCopy.js +3 -1
- package/dist/hooks/useClipboardValueCopy.js.map +1 -1
- package/dist/hooks/useLocalStorage.d.ts +5 -3
- package/dist/hooks/useLocalStorage.d.ts.map +1 -1
- package/dist/hooks/useLocalStorage.js.map +1 -1
- package/dist/hooks/usePrint.d.ts.map +1 -1
- package/dist/hooks/usePrint.js +5 -3
- package/dist/hooks/usePrint.js.map +1 -1
- package/dist/hooks/{createPwaUpdate.d.ts → usePwaUpdate.d.ts} +2 -2
- package/dist/hooks/usePwaUpdate.d.ts.map +1 -0
- package/dist/hooks/{createPwaUpdate.js → usePwaUpdate.js} +3 -3
- package/dist/hooks/usePwaUpdate.js.map +6 -0
- package/dist/hooks/useRouterLink.d.ts.map +1 -1
- package/dist/hooks/useRouterLink.js.map +1 -1
- package/dist/hooks/useSyncConfig.d.ts +3 -3
- package/dist/hooks/useSyncConfig.d.ts.map +1 -1
- package/dist/hooks/useSyncConfig.js +6 -7
- package/dist/hooks/useSyncConfig.js.map +1 -1
- package/dist/index.d.ts +5 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -7
- package/dist/index.js.map +1 -1
- package/dist/providers/ConfigContext.d.ts +2 -2
- package/dist/providers/ConfigContext.d.ts.map +1 -1
- package/dist/providers/InitializeProvider.js +5 -5
- package/dist/providers/InitializeProvider.js.map +2 -2
- package/dist/providers/ServiceClientProvider.d.ts.map +1 -1
- package/dist/providers/ServiceClientProvider.js.map +1 -1
- package/dist/providers/ThemeContext.d.ts.map +1 -1
- package/dist/providers/ThemeContext.js +2 -1
- package/dist/providers/ThemeContext.js.map +2 -2
- package/dist/providers/shared-data/SharedDataChangeEvent.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataChangeEvent.js +1 -3
- package/dist/providers/shared-data/SharedDataChangeEvent.js.map +1 -1
- package/dist/providers/shared-data/SharedDataContext.d.ts +1 -1
- package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.js +6 -6
- package/dist/providers/shared-data/SharedDataProvider.js.map +2 -2
- package/dist/styles/patterns.styles.d.ts +1 -0
- package/dist/styles/patterns.styles.d.ts.map +1 -1
- package/dist/styles/patterns.styles.js +12 -1
- package/dist/styles/patterns.styles.js.map +1 -1
- package/dist/styles/tokens.styles.d.ts +2 -1
- package/dist/styles/tokens.styles.d.ts.map +1 -1
- package/dist/styles/tokens.styles.js +1 -1
- package/dist/styles/tokens.styles.js.map +1 -1
- package/docs/data-components.md +34 -5
- package/docs/disclosure.md +28 -8
- package/docs/display.md +19 -2
- package/docs/feedback.md +35 -12
- package/docs/form-controls.md +289 -33
- package/docs/hooks.md +21 -9
- package/docs/layout.md +15 -3
- package/docs/providers.md +120 -8
- package/docs/styling.md +90 -0
- package/package.json +3 -3
- package/src/components/data/Pagination.tsx +26 -22
- package/src/components/data/Table.tsx +1 -1
- package/src/components/data/calendar/Calendar.tsx +19 -5
- package/src/components/data/kanban/Kanban.tsx +72 -35
- package/src/components/data/list/List.tsx +11 -4
- package/src/components/data/list/ListItem.tsx +12 -2
- package/src/components/data/permission-table/PermissionTable.tsx +32 -5
- package/src/components/data/sheet/DataSheet.styles.ts +24 -6
- package/src/components/data/sheet/DataSheet.tsx +215 -149
- package/src/components/data/sheet/DataSheetColumn.tsx +5 -1
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +27 -5
- package/src/components/data/sheet/sheetUtils.ts +12 -3
- package/src/components/data/sheet/types.ts +2 -2
- package/src/components/disclosure/Collapse.tsx +14 -3
- package/src/components/disclosure/Dialog.tsx +122 -106
- package/src/components/disclosure/DialogContext.ts +8 -5
- package/src/components/disclosure/DialogProvider.tsx +19 -7
- package/src/components/disclosure/Dropdown.tsx +12 -2
- package/src/components/disclosure/Tabs.tsx +29 -5
- package/src/components/display/Alert.tsx +3 -4
- package/src/components/display/Card.tsx +1 -2
- package/src/components/display/Echarts.tsx +12 -5
- package/src/components/display/Link.tsx +22 -0
- package/src/components/feedback/Progress.tsx +9 -5
- package/src/components/feedback/{loading/LoadingContainer.tsx → busy/BusyContainer.tsx} +52 -19
- package/src/components/feedback/busy/BusyContext.ts +20 -0
- package/src/components/feedback/{loading/LoadingProvider.tsx → busy/BusyProvider.tsx} +10 -10
- package/src/components/feedback/notification/NotificationBanner.tsx +14 -3
- package/src/components/feedback/notification/NotificationBell.tsx +21 -15
- package/src/components/feedback/notification/NotificationContext.ts +4 -1
- package/src/components/feedback/notification/NotificationProvider.tsx +4 -1
- package/src/components/form-control/Button.tsx +8 -3
- package/src/components/form-control/DropdownTrigger.styles.ts +7 -1
- package/src/components/form-control/Invalid.tsx +114 -48
- package/src/components/form-control/ThemeToggle.tsx +9 -18
- package/src/components/form-control/checkbox/Checkbox.styles.ts +7 -10
- package/src/components/form-control/checkbox/Checkbox.tsx +39 -28
- package/src/components/form-control/checkbox/CheckboxGroup.tsx +18 -97
- package/src/components/form-control/checkbox/Radio.tsx +39 -28
- package/src/components/form-control/checkbox/RadioGroup.tsx +18 -92
- package/src/components/form-control/color-picker/ColorPicker.tsx +51 -18
- package/src/components/form-control/combobox/Combobox.tsx +53 -35
- package/src/components/form-control/editor/EditorToolbar.tsx +19 -19
- package/src/components/form-control/editor/RichTextEditor.tsx +22 -4
- package/src/components/form-control/field/DatePicker.tsx +99 -93
- package/src/components/form-control/field/DateTimePicker.tsx +115 -96
- package/src/components/form-control/field/Field.styles.ts +62 -3
- package/src/components/form-control/field/FieldPlaceholder.tsx +18 -0
- package/src/components/form-control/field/NumberInput.tsx +136 -84
- package/src/components/form-control/field/TextInput.tsx +135 -88
- package/src/components/form-control/field/Textarea.tsx +126 -99
- package/src/components/form-control/field/TimePicker.tsx +101 -71
- package/src/components/form-control/select/Select.tsx +75 -42
- package/src/components/form-control/select/SelectItem.tsx +3 -1
- package/src/components/form-control/state-preset/StatePreset.tsx +41 -22
- package/src/components/layout/FormGroup.tsx +11 -2
- package/src/components/layout/sidebar/Sidebar.tsx +3 -2
- package/src/components/layout/sidebar/SidebarContainer.tsx +8 -1
- package/src/components/layout/sidebar/SidebarMenu.tsx +8 -2
- package/src/components/layout/sidebar/SidebarUser.tsx +12 -7
- package/src/components/layout/topbar/Topbar.tsx +1 -1
- package/src/components/layout/topbar/TopbarMenu.tsx +27 -5
- package/src/components/layout/topbar/TopbarUser.tsx +5 -1
- package/src/helpers/createAppStructure.ts +29 -15
- package/src/helpers/mergeStyles.ts +6 -2
- package/src/helpers/splitSlots.ts +4 -1
- package/src/hooks/createControllableSignal.ts +2 -1
- package/src/hooks/createItemTemplate.tsx +42 -0
- package/src/hooks/createPointerDrag.ts +28 -0
- package/src/hooks/createSelectionGroup.tsx +235 -0
- package/src/hooks/useClipboardValueCopy.ts +5 -2
- package/src/hooks/useLocalStorage.ts +11 -5
- package/src/hooks/usePrint.ts +9 -4
- package/src/hooks/{createPwaUpdate.ts → usePwaUpdate.ts} +1 -1
- package/src/hooks/useRouterLink.ts +3 -1
- package/src/hooks/useSyncConfig.ts +9 -13
- package/src/index.ts +6 -7
- package/src/providers/ConfigContext.ts +2 -2
- package/src/providers/InitializeProvider.tsx +4 -4
- package/src/providers/ServiceClientProvider.tsx +14 -3
- package/src/providers/ThemeContext.tsx +12 -3
- package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -3
- package/src/providers/shared-data/SharedDataContext.ts +1 -1
- package/src/providers/shared-data/SharedDataProvider.tsx +13 -8
- package/src/styles/patterns.styles.ts +13 -1
- package/src/styles/tokens.styles.ts +2 -1
- package/tailwind.config.ts +9 -0
- package/tailwind.css +1 -1
- package/dist/components/display/Card.css +0 -15
- package/dist/components/feedback/loading/LoadingContainer.d.ts +0 -12
- package/dist/components/feedback/loading/LoadingContainer.d.ts.map +0 -1
- package/dist/components/feedback/loading/LoadingContainer.js.map +0 -6
- package/dist/components/feedback/loading/LoadingContext.d.ts +0 -11
- package/dist/components/feedback/loading/LoadingContext.d.ts.map +0 -1
- package/dist/components/feedback/loading/LoadingContext.js +0 -14
- package/dist/components/feedback/loading/LoadingContext.js.map +0 -6
- package/dist/components/feedback/loading/LoadingProvider.d.ts +0 -7
- package/dist/components/feedback/loading/LoadingProvider.d.ts.map +0 -1
- package/dist/components/feedback/loading/LoadingProvider.js.map +0 -6
- package/dist/hooks/createPwaUpdate.d.ts.map +0 -1
- package/dist/hooks/createPwaUpdate.js.map +0 -6
- package/src/components/display/Card.css +0 -15
- package/src/components/feedback/loading/LoadingContext.ts +0 -20
- /package/dist/components/feedback/{loading/LoadingContainer.css → busy/BusyContainer.css} +0 -0
- /package/src/components/feedback/{loading/LoadingContainer.css → busy/BusyContainer.css} +0 -0
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
children,
|
|
3
|
+
createMemo,
|
|
4
|
+
createSignal,
|
|
5
|
+
For,
|
|
6
|
+
type JSX,
|
|
7
|
+
Show,
|
|
8
|
+
splitProps,
|
|
9
|
+
useContext,
|
|
10
|
+
} from "solid-js";
|
|
2
11
|
import { createResizeObserver } from "@solid-primitives/resize-observer";
|
|
3
12
|
import clsx from "clsx";
|
|
4
13
|
import { twMerge } from "tailwind-merge";
|
|
@@ -24,6 +33,7 @@ import type {
|
|
|
24
33
|
import { isDataSheetColumnDef, DataSheetColumn } from "./DataSheetColumn";
|
|
25
34
|
import { applySorting, buildHeaderTable, collectAllExpandable, flattenTree } from "./sheetUtils";
|
|
26
35
|
import { createControllableSignal } from "../../../hooks/createControllableSignal";
|
|
36
|
+
import { createPointerDrag } from "../../../hooks/createPointerDrag";
|
|
27
37
|
import { Icon } from "../../display/Icon";
|
|
28
38
|
import { Checkbox } from "../../form-control/checkbox/Checkbox";
|
|
29
39
|
import { Pagination } from "../Pagination";
|
|
@@ -80,8 +90,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
80
90
|
"sorts",
|
|
81
91
|
"onSortsChange",
|
|
82
92
|
"autoSort",
|
|
83
|
-
"
|
|
84
|
-
"
|
|
93
|
+
"page",
|
|
94
|
+
"onPageChange",
|
|
85
95
|
"totalPageCount",
|
|
86
96
|
"itemsPerPage",
|
|
87
97
|
"displayPageCount",
|
|
@@ -157,7 +167,9 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
157
167
|
|
|
158
168
|
const { DataSheetConfigDialog } = await import("./DataSheetConfigDialog");
|
|
159
169
|
|
|
160
|
-
const allCols = resolved
|
|
170
|
+
const allCols = resolved
|
|
171
|
+
.toArray()
|
|
172
|
+
.filter(isDataSheetColumnDef) as unknown as DataSheetColumnDef<T>[];
|
|
161
173
|
|
|
162
174
|
const columnInfos: DataSheetConfigColumnInfo[] = allCols
|
|
163
175
|
.filter((col) => !col.collapse)
|
|
@@ -234,8 +246,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
234
246
|
|
|
235
247
|
// #region Paging
|
|
236
248
|
const [currentPage, setCurrentPage] = createControllableSignal({
|
|
237
|
-
value: () => local.
|
|
238
|
-
onChange: () => local.
|
|
249
|
+
value: () => local.page ?? 1,
|
|
250
|
+
onChange: () => local.onPageChange,
|
|
239
251
|
});
|
|
240
252
|
|
|
241
253
|
const effectivePageCount = createMemo(() => {
|
|
@@ -252,7 +264,7 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
252
264
|
if ((local.items ?? []).length <= 0) return sortedItems();
|
|
253
265
|
|
|
254
266
|
const page = currentPage();
|
|
255
|
-
return sortedItems().slice(page * ipp,
|
|
267
|
+
return sortedItems().slice((page - 1) * ipp, page * ipp);
|
|
256
268
|
});
|
|
257
269
|
|
|
258
270
|
// #region Feature Column Setup (확장/선택 기능 컬럼 공통)
|
|
@@ -356,10 +368,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
356
368
|
function onResizerPointerdown(event: PointerEvent, colKey: string): void {
|
|
357
369
|
event.preventDefault();
|
|
358
370
|
const target = event.target as HTMLElement;
|
|
359
|
-
target.setPointerCapture(event.pointerId);
|
|
360
371
|
|
|
361
372
|
const th = target.closest("th")!;
|
|
362
|
-
const container = th
|
|
373
|
+
const container = th
|
|
374
|
+
.closest("[data-sheet]")!
|
|
375
|
+
.querySelector("[data-sheet-scroll]") as HTMLElement;
|
|
363
376
|
const startX = event.clientX;
|
|
364
377
|
const startWidth = th.offsetWidth;
|
|
365
378
|
|
|
@@ -372,32 +385,28 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
372
385
|
height: `${container.scrollHeight}px`,
|
|
373
386
|
});
|
|
374
387
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
const currentRect = container.getBoundingClientRect();
|
|
379
|
-
setResizeIndicatorStyle({
|
|
380
|
-
display: "block",
|
|
381
|
-
left: `${th.getBoundingClientRect().left - currentRect.left + container.scrollLeft + newWidth}px`,
|
|
382
|
-
top: "0",
|
|
383
|
-
height: `${container.scrollHeight}px`,
|
|
384
|
-
});
|
|
385
|
-
};
|
|
386
|
-
|
|
387
|
-
const onPointerUp = (e: PointerEvent) => {
|
|
388
|
-
const delta = e.clientX - startX;
|
|
389
|
-
// 실제 드래그가 발생한 경우에만 너비 저장 (더블클릭 시 DOM 재생성으로 dblclick 유실 방지)
|
|
390
|
-
if (delta !== 0) {
|
|
388
|
+
createPointerDrag(target, event.pointerId, {
|
|
389
|
+
onMove(e) {
|
|
390
|
+
const delta = e.clientX - startX;
|
|
391
391
|
const newWidth = Math.max(30, startWidth + delta);
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
392
|
+
const currentRect = container.getBoundingClientRect();
|
|
393
|
+
setResizeIndicatorStyle({
|
|
394
|
+
display: "block",
|
|
395
|
+
left: `${th.getBoundingClientRect().left - currentRect.left + container.scrollLeft + newWidth}px`,
|
|
396
|
+
top: "0",
|
|
397
|
+
height: `${container.scrollHeight}px`,
|
|
398
|
+
});
|
|
399
|
+
},
|
|
400
|
+
onEnd(e) {
|
|
401
|
+
const delta = e.clientX - startX;
|
|
402
|
+
// 실제 드래그가 발생한 경우에만 너비 저장 (더블클릭 시 DOM 재생성으로 dblclick 유실 방지)
|
|
403
|
+
if (delta !== 0) {
|
|
404
|
+
const newWidth = Math.max(30, startWidth + delta);
|
|
405
|
+
saveColumnWidth(colKey, `${newWidth}px`);
|
|
406
|
+
}
|
|
407
|
+
setResizeIndicatorStyle({ display: "none" });
|
|
408
|
+
},
|
|
409
|
+
});
|
|
401
410
|
}
|
|
402
411
|
|
|
403
412
|
function onResizerDoubleClick(colKey: string): void {
|
|
@@ -484,7 +493,9 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
484
493
|
if (local.selectMode === "single") {
|
|
485
494
|
setSelectedItems(isSelected ? [] : [item]);
|
|
486
495
|
} else {
|
|
487
|
-
setSelectedItems(
|
|
496
|
+
setSelectedItems(
|
|
497
|
+
isSelected ? selectedItems().filter((i) => i !== item) : [...selectedItems(), item],
|
|
498
|
+
);
|
|
488
499
|
}
|
|
489
500
|
}
|
|
490
501
|
|
|
@@ -552,7 +563,6 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
552
563
|
function onReorderPointerDown(e: PointerEvent, item: T): void {
|
|
553
564
|
e.preventDefault();
|
|
554
565
|
const target = e.currentTarget as HTMLElement;
|
|
555
|
-
target.setPointerCapture(e.pointerId);
|
|
556
566
|
|
|
557
567
|
const tableEl = target.closest("table")!;
|
|
558
568
|
const tbody = tableEl.querySelector("tbody")!;
|
|
@@ -560,110 +570,110 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
560
570
|
|
|
561
571
|
setDragState({ draggingItem: item, targetItem: null, position: null });
|
|
562
572
|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
for (let i = 0; i < rows.length; i++) {
|
|
568
|
-
const row = rows[i];
|
|
569
|
-
const rect = row.getBoundingClientRect();
|
|
570
|
-
if (ev.clientY < rect.top || ev.clientY > rect.bottom) continue;
|
|
573
|
+
createPointerDrag(target, e.pointerId, {
|
|
574
|
+
onMove(ev) {
|
|
575
|
+
let foundTarget: T | null = null;
|
|
576
|
+
let foundPosition: "before" | "after" | "inside" | null = null;
|
|
571
577
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
578
|
+
for (let i = 0; i < rows.length; i++) {
|
|
579
|
+
const row = rows[i];
|
|
580
|
+
const rect = row.getBoundingClientRect();
|
|
581
|
+
if (ev.clientY < rect.top || ev.clientY > rect.bottom) continue;
|
|
575
582
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
583
|
+
if (i >= displayItems().length) break;
|
|
584
|
+
const flat = displayItems()[i];
|
|
585
|
+
if (flat.item === item) break;
|
|
586
|
+
|
|
587
|
+
// 자기 자신의 하위 항목으로는 드롭 불가
|
|
588
|
+
if (isDescendant(item, flat.item)) break;
|
|
589
|
+
|
|
590
|
+
const relY = ev.clientY - rect.top;
|
|
591
|
+
const third = rect.height / 3;
|
|
592
|
+
|
|
593
|
+
if (relY < third) {
|
|
594
|
+
foundPosition = "before";
|
|
595
|
+
} else if (relY > third * 2) {
|
|
596
|
+
foundPosition = "after";
|
|
597
|
+
} else {
|
|
598
|
+
foundPosition = local.getChildren
|
|
599
|
+
? "inside"
|
|
600
|
+
: relY < rect.height / 2
|
|
601
|
+
? "before"
|
|
602
|
+
: "after";
|
|
603
|
+
}
|
|
604
|
+
foundTarget = flat.item;
|
|
605
|
+
break;
|
|
588
606
|
}
|
|
589
|
-
foundTarget = flat.item;
|
|
590
|
-
break;
|
|
591
|
-
}
|
|
592
607
|
|
|
593
|
-
|
|
608
|
+
setDragState({ draggingItem: item, targetItem: foundTarget, position: foundPosition });
|
|
594
609
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
610
|
+
// 인디케이터 DOM 업데이트
|
|
611
|
+
for (let i = 0; i < rows.length; i++) {
|
|
612
|
+
rows[i].removeAttribute("data-dragging");
|
|
613
|
+
rows[i].removeAttribute("data-drag-over");
|
|
599
614
|
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
615
|
+
if (i < displayItems().length) {
|
|
616
|
+
const flat = displayItems()[i];
|
|
617
|
+
if (flat.item === item) {
|
|
618
|
+
rows[i].setAttribute("data-dragging", "");
|
|
619
|
+
}
|
|
620
|
+
if (flat.item === foundTarget && foundPosition === "inside") {
|
|
621
|
+
rows[i].setAttribute("data-drag-over", "inside");
|
|
622
|
+
}
|
|
607
623
|
}
|
|
608
624
|
}
|
|
609
|
-
}
|
|
610
625
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
626
|
+
// before/after 인디케이터
|
|
627
|
+
const indicatorEl = tableEl
|
|
628
|
+
.closest("[data-sheet-scroll]")
|
|
629
|
+
?.querySelector("[data-reorder-indicator]") as HTMLElement | null;
|
|
630
|
+
if (indicatorEl) {
|
|
631
|
+
if (foundTarget != null && foundPosition != null && foundPosition !== "inside") {
|
|
632
|
+
const targetIdx = displayItems().findIndex((f) => f.item === foundTarget);
|
|
633
|
+
if (targetIdx >= 0) {
|
|
634
|
+
const targetRow = rows[targetIdx];
|
|
635
|
+
const containerRect = tableEl.closest("[data-sheet-scroll]")!.getBoundingClientRect();
|
|
636
|
+
const rowRect = targetRow.getBoundingClientRect();
|
|
637
|
+
const scrollEl = tableEl.closest("[data-sheet-scroll]") as HTMLElement;
|
|
638
|
+
|
|
639
|
+
const top =
|
|
640
|
+
foundPosition === "before"
|
|
641
|
+
? rowRect.top - containerRect.top + scrollEl.scrollTop
|
|
642
|
+
: rowRect.bottom - containerRect.top + scrollEl.scrollTop;
|
|
643
|
+
|
|
644
|
+
indicatorEl.style.display = "block";
|
|
645
|
+
indicatorEl.style.top = `${top}px`;
|
|
646
|
+
}
|
|
647
|
+
} else {
|
|
648
|
+
indicatorEl.style.display = "none";
|
|
631
649
|
}
|
|
632
|
-
} else {
|
|
633
|
-
indicatorEl.style.display = "none";
|
|
634
650
|
}
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
} as DataSheetReorderEvent<T>);
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
// 클린업
|
|
649
|
-
for (const row of rows) {
|
|
650
|
-
row.removeAttribute("data-dragging");
|
|
651
|
-
row.removeAttribute("data-drag-over");
|
|
652
|
-
}
|
|
653
|
-
const indicatorEl = tableEl
|
|
654
|
-
.closest("[data-sheet-scroll]")
|
|
655
|
-
?.querySelector("[data-reorder-indicator]") as HTMLElement | null;
|
|
656
|
-
if (indicatorEl) {
|
|
657
|
-
indicatorEl.style.display = "none";
|
|
658
|
-
}
|
|
651
|
+
},
|
|
652
|
+
onEnd() {
|
|
653
|
+
const state = dragState();
|
|
654
|
+
if (state?.targetItem != null && state.position != null) {
|
|
655
|
+
local.onItemsReorder?.({
|
|
656
|
+
item: state.draggingItem,
|
|
657
|
+
targetItem: state.targetItem,
|
|
658
|
+
position: state.position,
|
|
659
|
+
} as DataSheetReorderEvent<T>);
|
|
660
|
+
}
|
|
659
661
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
662
|
+
// 클린업
|
|
663
|
+
for (const row of rows) {
|
|
664
|
+
row.removeAttribute("data-dragging");
|
|
665
|
+
row.removeAttribute("data-drag-over");
|
|
666
|
+
}
|
|
667
|
+
const indicatorEl = tableEl
|
|
668
|
+
.closest("[data-sheet-scroll]")
|
|
669
|
+
?.querySelector("[data-reorder-indicator]") as HTMLElement | null;
|
|
670
|
+
if (indicatorEl) {
|
|
671
|
+
indicatorEl.style.display = "none";
|
|
672
|
+
}
|
|
664
673
|
|
|
665
|
-
|
|
666
|
-
|
|
674
|
+
setDragState(null);
|
|
675
|
+
},
|
|
676
|
+
});
|
|
667
677
|
}
|
|
668
678
|
|
|
669
679
|
// #region Keyboard Navigation (Enter/Shift+Enter로 행 이동)
|
|
@@ -707,7 +717,8 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
707
717
|
hasExpandFeature() && !hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
|
|
708
718
|
|
|
709
719
|
// 선택 기능 컬럼이 "마지막 고정"인지 (일반 고정 컬럼이 없고, 선택 컬럼이 가장 오른쪽 기능 컬럼일 때)
|
|
710
|
-
const isSelectColLastFixed = () =>
|
|
720
|
+
const isSelectColLastFixed = () =>
|
|
721
|
+
hasSelectFeature() && !hasReorderFeature() && lastFixedIndex() < 0;
|
|
711
722
|
|
|
712
723
|
const isReorderColLastFixed = () => hasReorderFeature() && lastFixedIndex() < 0;
|
|
713
724
|
|
|
@@ -722,20 +733,26 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
722
733
|
const isAllExpanded = createMemo(() => {
|
|
723
734
|
if (!local.getChildren) return false;
|
|
724
735
|
const allExpandable = collectAllExpandable(pagedItems(), local.getChildren);
|
|
725
|
-
return
|
|
736
|
+
return (
|
|
737
|
+
allExpandable.length > 0 && allExpandable.every((item) => expandedItems().includes(item))
|
|
738
|
+
);
|
|
726
739
|
});
|
|
727
740
|
|
|
728
741
|
return (
|
|
729
742
|
<div
|
|
730
743
|
data-sheet={local.persistKey ?? ""}
|
|
731
|
-
class={twMerge(
|
|
744
|
+
class={twMerge(
|
|
745
|
+
"flex flex-col",
|
|
746
|
+
local.inset ? insetContainerClass : defaultContainerClass,
|
|
747
|
+
local.class,
|
|
748
|
+
)}
|
|
732
749
|
>
|
|
733
750
|
<Show when={!local.hideConfigBar && (modal != null || effectivePageCount() > 1)}>
|
|
734
751
|
<div class={toolbarClass}>
|
|
735
752
|
<Show when={effectivePageCount() > 1}>
|
|
736
753
|
<Pagination
|
|
737
|
-
|
|
738
|
-
|
|
754
|
+
page={currentPage()}
|
|
755
|
+
onPageChange={setCurrentPage}
|
|
739
756
|
totalPageCount={effectivePageCount()}
|
|
740
757
|
displayPageCount={local.displayPageCount}
|
|
741
758
|
size="sm"
|
|
@@ -743,13 +760,22 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
743
760
|
</Show>
|
|
744
761
|
<div class="flex-1" />
|
|
745
762
|
<Show when={modal != null}>
|
|
746
|
-
<button
|
|
763
|
+
<button
|
|
764
|
+
class={configButtonClass}
|
|
765
|
+
onClick={openConfigModal}
|
|
766
|
+
title="시트 설정"
|
|
767
|
+
type="button"
|
|
768
|
+
>
|
|
747
769
|
<Icon icon={IconSettings} size="1em" />
|
|
748
770
|
</button>
|
|
749
771
|
</Show>
|
|
750
772
|
</div>
|
|
751
773
|
</Show>
|
|
752
|
-
<div
|
|
774
|
+
<div
|
|
775
|
+
data-sheet-scroll
|
|
776
|
+
class={twMerge(dataSheetContainerClass, "flex-1 min-h-0")}
|
|
777
|
+
style={local.contentStyle}
|
|
778
|
+
>
|
|
753
779
|
<table
|
|
754
780
|
class={twMerge(tableClass, local.inset ? insetTableClass : undefined)}
|
|
755
781
|
onKeyDown={onTableKeyDown}
|
|
@@ -800,7 +826,10 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
800
826
|
<Icon
|
|
801
827
|
icon={IconChevronDown}
|
|
802
828
|
size="1em"
|
|
803
|
-
class={clsx(
|
|
829
|
+
class={clsx(
|
|
830
|
+
"transition-transform",
|
|
831
|
+
isAllExpanded() ? "rotate-0" : "-rotate-90",
|
|
832
|
+
)}
|
|
804
833
|
/>
|
|
805
834
|
</button>
|
|
806
835
|
</div>
|
|
@@ -863,9 +892,13 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
863
892
|
<Show when={cell}>
|
|
864
893
|
{(c) => {
|
|
865
894
|
const isSortable = () =>
|
|
866
|
-
c().isLastRow &&
|
|
895
|
+
c().isLastRow &&
|
|
896
|
+
c().colIndex != null &&
|
|
897
|
+
effectiveColumns()[c().colIndex!].sortable;
|
|
867
898
|
const colKey = () =>
|
|
868
|
-
c().colIndex != null
|
|
899
|
+
c().colIndex != null
|
|
900
|
+
? effectiveColumns()[c().colIndex!].key
|
|
901
|
+
: undefined;
|
|
869
902
|
|
|
870
903
|
// 그룹 헤더의 고정 여부: colspan 범위 내 모든 컬럼이 fixed인지
|
|
871
904
|
const isGroupFixed = (): boolean => {
|
|
@@ -881,12 +914,15 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
881
914
|
|
|
882
915
|
// 셀의 고정 컬럼 여부 (마지막 행이면 colIndex 기반, 그 외 그룹 기반)
|
|
883
916
|
const isCellFixed = () =>
|
|
884
|
-
(c().isLastRow &&
|
|
917
|
+
(c().isLastRow &&
|
|
918
|
+
c().colIndex != null &&
|
|
919
|
+
effectiveColumns()[c().colIndex!].fixed) ||
|
|
885
920
|
isGroupFixed();
|
|
886
921
|
|
|
887
922
|
// 셀의 마지막 고정 여부
|
|
888
923
|
const isCellLastFixed = () => {
|
|
889
|
-
if (c().isLastRow && c().colIndex != null)
|
|
924
|
+
if (c().isLastRow && c().colIndex != null)
|
|
925
|
+
return isLastFixed(c().colIndex!);
|
|
890
926
|
if (isGroupFixed()) {
|
|
891
927
|
const lastCol = cellColIndex() + c().colspan - 1;
|
|
892
928
|
return isLastFixed(lastCol);
|
|
@@ -932,7 +968,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
932
968
|
: c().text
|
|
933
969
|
}
|
|
934
970
|
ref={(el: HTMLElement) => {
|
|
935
|
-
if (
|
|
971
|
+
if (
|
|
972
|
+
c().isLastRow &&
|
|
973
|
+
c().colIndex != null &&
|
|
974
|
+
effectiveColumns()[c().colIndex!].fixed
|
|
975
|
+
) {
|
|
936
976
|
registerColumnRef(c().colIndex!, el);
|
|
937
977
|
}
|
|
938
978
|
}}
|
|
@@ -958,9 +998,15 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
958
998
|
<Icon icon={IconSortDescending} size="1em" />
|
|
959
999
|
</Show>
|
|
960
1000
|
<Show when={sortDef() == null}>
|
|
961
|
-
<Icon
|
|
1001
|
+
<Icon
|
|
1002
|
+
icon={IconArrowsSort}
|
|
1003
|
+
size="1em"
|
|
1004
|
+
class="opacity-30"
|
|
1005
|
+
/>
|
|
1006
|
+
</Show>
|
|
1007
|
+
<Show when={sortIndex()}>
|
|
1008
|
+
{(idx) => <sub>{idx()}</sub>}
|
|
962
1009
|
</Show>
|
|
963
|
-
<Show when={sortIndex()}>{(idx) => <sub>{idx()}</sub>}</Show>
|
|
964
1010
|
</div>
|
|
965
1011
|
);
|
|
966
1012
|
}}
|
|
@@ -968,13 +1014,17 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
968
1014
|
</div>
|
|
969
1015
|
<Show
|
|
970
1016
|
when={
|
|
971
|
-
c().isLastRow &&
|
|
1017
|
+
c().isLastRow &&
|
|
1018
|
+
c().colIndex != null &&
|
|
1019
|
+
effectiveColumns()[c().colIndex!].resizable
|
|
972
1020
|
}
|
|
973
1021
|
>
|
|
974
1022
|
<div
|
|
975
1023
|
class={resizerClass}
|
|
976
1024
|
onClick={(e) => e.stopPropagation()}
|
|
977
|
-
onPointerDown={(e) =>
|
|
1025
|
+
onPointerDown={(e) =>
|
|
1026
|
+
onResizerPointerdown(e, effectiveColumns()[c().colIndex!].key)
|
|
1027
|
+
}
|
|
978
1028
|
onDblClick={(e) => {
|
|
979
1029
|
e.stopPropagation();
|
|
980
1030
|
onResizerDoubleClick(effectiveColumns()[c().colIndex!].key);
|
|
@@ -1054,7 +1104,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1054
1104
|
)}
|
|
1055
1105
|
</For>
|
|
1056
1106
|
<Show when={flat.hasChildren}>
|
|
1057
|
-
<button
|
|
1107
|
+
<button
|
|
1108
|
+
type="button"
|
|
1109
|
+
class={expandToggleClass}
|
|
1110
|
+
onClick={() => toggleExpand(flat.item)}
|
|
1111
|
+
>
|
|
1058
1112
|
<Icon
|
|
1059
1113
|
icon={IconChevronDown}
|
|
1060
1114
|
size="1em"
|
|
@@ -1092,11 +1146,16 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1092
1146
|
fallback={
|
|
1093
1147
|
/* single 모드 */
|
|
1094
1148
|
<Show when={selectable() === true}>
|
|
1095
|
-
<div
|
|
1149
|
+
<div
|
|
1150
|
+
class={featureCellBodyClickableClass}
|
|
1151
|
+
onClick={() => toggleSelect(flat.item)}
|
|
1152
|
+
>
|
|
1096
1153
|
<div
|
|
1097
1154
|
class={twMerge(
|
|
1098
1155
|
selectSingleClass,
|
|
1099
|
-
isSelected()
|
|
1156
|
+
isSelected()
|
|
1157
|
+
? selectSingleSelectedClass
|
|
1158
|
+
: selectSingleUnselectedClass,
|
|
1100
1159
|
)}
|
|
1101
1160
|
>
|
|
1102
1161
|
<Icon icon={IconChevronRight} size="1em" />
|
|
@@ -1116,7 +1175,11 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1116
1175
|
}
|
|
1117
1176
|
setLastClickedRow(rowIndex());
|
|
1118
1177
|
}}
|
|
1119
|
-
title={
|
|
1178
|
+
title={
|
|
1179
|
+
typeof selectable() === "string"
|
|
1180
|
+
? (selectable() as string)
|
|
1181
|
+
: undefined
|
|
1182
|
+
}
|
|
1120
1183
|
>
|
|
1121
1184
|
<Checkbox
|
|
1122
1185
|
value={isSelected()}
|
|
@@ -1148,7 +1211,10 @@ export const DataSheet: DataSheetComponent = <T,>(props: DataSheetProps<T>) => {
|
|
|
1148
1211
|
left: reorderColLeft(),
|
|
1149
1212
|
}}
|
|
1150
1213
|
>
|
|
1151
|
-
<div
|
|
1214
|
+
<div
|
|
1215
|
+
class={reorderCellWrapperClass}
|
|
1216
|
+
onPointerDown={(e) => onReorderPointerDown(e, flat.item)}
|
|
1217
|
+
>
|
|
1152
1218
|
<div class={reorderHandleClass}>
|
|
1153
1219
|
<Icon icon={IconGripVertical} size="1em" />
|
|
1154
1220
|
</div>
|
|
@@ -3,7 +3,11 @@ import type { DataSheetColumnDef, DataSheetColumnProps } from "./types";
|
|
|
3
3
|
import { normalizeHeader } from "./sheetUtils";
|
|
4
4
|
|
|
5
5
|
export function isDataSheetColumnDef(value: unknown): value is DataSheetColumnDef<unknown> {
|
|
6
|
-
return
|
|
6
|
+
return (
|
|
7
|
+
value != null &&
|
|
8
|
+
typeof value === "object" &&
|
|
9
|
+
(value as Record<string, unknown>)["__type"] === "sheet-column"
|
|
10
|
+
);
|
|
7
11
|
}
|
|
8
12
|
|
|
9
13
|
/* eslint-disable solid/reactivity -- plain object 반환 패턴으로 reactive context 불필요 */
|
|
@@ -2,7 +2,12 @@ import { type Component } from "solid-js";
|
|
|
2
2
|
import { createStore, reconcile } from "solid-js/store";
|
|
3
3
|
import clsx from "clsx";
|
|
4
4
|
import { useDialogInstance } from "../../disclosure/DialogInstanceContext";
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
DataSheetConfig,
|
|
7
|
+
DataSheetConfigColumn,
|
|
8
|
+
DataSheetConfigColumnInfo,
|
|
9
|
+
DataSheetReorderEvent,
|
|
10
|
+
} from "./types";
|
|
6
11
|
import { DataSheet } from "./DataSheet";
|
|
7
12
|
import { Checkbox } from "../../form-control/checkbox/Checkbox";
|
|
8
13
|
import { TextInput } from "../../form-control/field/TextInput";
|
|
@@ -66,7 +71,11 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
66
71
|
setEditItems(reconcile(items));
|
|
67
72
|
}
|
|
68
73
|
|
|
69
|
-
function updateItem(
|
|
74
|
+
function updateItem(
|
|
75
|
+
key: string,
|
|
76
|
+
field: keyof EditColumnItem,
|
|
77
|
+
value: EditColumnItem[keyof EditColumnItem],
|
|
78
|
+
): void {
|
|
70
79
|
const index = editItems.findIndex((item) => item.key === key);
|
|
71
80
|
if (index >= 0) {
|
|
72
81
|
setEditItems(index, { [field]: value } as Partial<EditColumnItem>);
|
|
@@ -104,17 +113,30 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
104
113
|
<div class={containerClass}>
|
|
105
114
|
<div class={sheetWrapperClass}>
|
|
106
115
|
<DataSheet items={editItems} inset hideConfigBar onItemsReorder={handleReorder}>
|
|
107
|
-
<DataSheet.Column<EditColumnItem>
|
|
116
|
+
<DataSheet.Column<EditColumnItem>
|
|
117
|
+
key="header"
|
|
118
|
+
header="컬럼"
|
|
119
|
+
class="px-2 py-1"
|
|
120
|
+
sortable={false}
|
|
121
|
+
>
|
|
108
122
|
{(ctx) => ctx.item.headerText}
|
|
109
123
|
</DataSheet.Column>
|
|
110
124
|
<DataSheet.Column<EditColumnItem> key="fixed" header="고정" sortable={false}>
|
|
111
125
|
{(ctx) => (
|
|
112
|
-
<Checkbox
|
|
126
|
+
<Checkbox
|
|
127
|
+
inset
|
|
128
|
+
value={ctx.item.fixed}
|
|
129
|
+
onValueChange={(v) => updateItem(ctx.item.key, "fixed", v)}
|
|
130
|
+
/>
|
|
113
131
|
)}
|
|
114
132
|
</DataSheet.Column>
|
|
115
133
|
<DataSheet.Column<EditColumnItem> key="hidden" header="숨김" sortable={false}>
|
|
116
134
|
{(ctx) => (
|
|
117
|
-
<Checkbox
|
|
135
|
+
<Checkbox
|
|
136
|
+
inset
|
|
137
|
+
value={ctx.item.hidden}
|
|
138
|
+
onValueChange={(v) => updateItem(ctx.item.key, "hidden", v)}
|
|
139
|
+
/>
|
|
118
140
|
)}
|
|
119
141
|
</DataSheet.Column>
|
|
120
142
|
<DataSheet.Column<EditColumnItem> key="width" header="너비" sortable={false}>
|