@simplysm/solid 13.0.76 → 13.0.77
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 +9 -10
- package/dist/components/data/kanban/Kanban.d.ts +31 -38
- package/dist/components/data/kanban/Kanban.d.ts.map +1 -1
- package/dist/components/data/kanban/Kanban.js.map +1 -1
- package/dist/components/data/list/List.d.ts +7 -28
- package/dist/components/data/list/List.d.ts.map +1 -1
- package/dist/components/data/list/List.js +3 -2
- package/dist/components/data/list/List.js.map +2 -2
- package/dist/components/data/sheet/DataSheet.d.ts +3 -8
- package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.js +305 -418
- package/dist/components/data/sheet/DataSheet.js.map +2 -2
- package/dist/components/data/sheet/{types.d.ts → DataSheet.types.d.ts} +9 -3
- package/dist/components/data/sheet/DataSheet.types.d.ts.map +1 -0
- package/dist/components/data/sheet/DataSheet.types.js +1 -0
- package/dist/components/data/sheet/{sheetUtils.d.ts → DataSheet.utils.d.ts} +2 -2
- package/dist/components/data/sheet/DataSheet.utils.d.ts.map +1 -0
- package/dist/components/data/sheet/{sheetUtils.js → DataSheet.utils.js} +3 -3
- package/dist/components/data/sheet/DataSheet.utils.js.map +6 -0
- package/dist/components/data/sheet/DataSheetColumn.d.ts +1 -1
- package/dist/components/data/sheet/DataSheetColumn.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.d.ts +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetExpansion.d.ts +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetExpansion.d.ts.map +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetExpansion.js +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetFixedColumns.d.ts +2 -2
- package/dist/components/data/sheet/hooks/useDataSheetFixedColumns.d.ts.map +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.d.ts +27 -0
- package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.d.ts.map +1 -0
- package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.js +173 -0
- package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.js.map +6 -0
- package/dist/components/data/sheet/hooks/useDataSheetReorder.d.ts +1 -2
- package/dist/components/data/sheet/hooks/useDataSheetReorder.d.ts.map +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetReorder.js.map +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetSelection.d.ts +2 -2
- package/dist/components/data/sheet/hooks/useDataSheetSelection.d.ts.map +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetSelection.js +2 -2
- package/dist/components/data/sheet/hooks/useDataSheetSelection.js.map +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetSorting.d.ts +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetSorting.d.ts.map +1 -1
- package/dist/components/data/sheet/hooks/useDataSheetSorting.js +1 -1
- package/dist/components/disclosure/Dialog.d.ts +6 -10
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +11 -14
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/disclosure/Dropdown.d.ts +8 -12
- 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 +3 -5
- package/dist/components/disclosure/Tabs.d.ts.map +1 -1
- package/dist/components/disclosure/Tabs.js.map +1 -1
- package/dist/components/display/Barcode.d.ts +1 -1
- package/dist/components/display/Barcode.d.ts.map +1 -1
- package/dist/components/display/Barcode.js +2 -1
- package/dist/components/display/Barcode.js.map +2 -2
- package/dist/components/display/Barcode.types.d.ts +2 -0
- package/dist/components/display/Barcode.types.d.ts.map +1 -0
- package/dist/components/display/Barcode.types.js +1 -0
- package/dist/components/display/Echarts.d.ts +2 -2
- package/dist/components/display/Echarts.d.ts.map +1 -1
- package/dist/components/display/Echarts.js +7 -8
- package/dist/components/display/Echarts.js.map +2 -2
- package/dist/components/features/address/AddressSearch.d.ts.map +1 -1
- package/dist/components/features/address/AddressSearch.js +4 -1
- package/dist/components/features/address/AddressSearch.js.map +2 -2
- package/dist/components/features/crud-detail/CrudDetail.d.ts +12 -13
- package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +18 -15
- package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
- package/dist/components/features/crud-detail/{types.d.ts → CrudDetail.types.d.ts} +1 -1
- package/dist/components/features/crud-detail/CrudDetail.types.d.ts.map +1 -0
- package/dist/components/features/crud-detail/CrudDetail.types.js +1 -0
- package/dist/components/features/crud-sheet/CrudSheet.d.ts +3 -13
- package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
- package/dist/components/features/crud-sheet/CrudSheet.js +62 -73
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/features/crud-sheet/{types.d.ts → CrudSheet.types.d.ts} +10 -10
- package/dist/components/features/crud-sheet/CrudSheet.types.d.ts.map +1 -0
- package/dist/components/features/crud-sheet/CrudSheet.types.js +1 -0
- package/dist/components/features/crud-sheet/CrudSheet.types.js.map +6 -0
- package/dist/components/features/crud-sheet/CrudSheetColumn.d.ts +1 -1
- package/dist/components/features/crud-sheet/CrudSheetColumn.d.ts.map +1 -1
- package/dist/components/features/crud-sheet/CrudSheetTools.d.ts +1 -1
- package/dist/components/features/crud-sheet/CrudSheetTools.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.d.ts +2 -2
- package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.js +3 -3
- package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelect.d.ts +7 -11
- package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelect.js +5 -4
- package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectButton.js.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts +8 -15
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +5 -3
- package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
- package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js +9 -1
- package/dist/components/feedback/notification/NotificationProvider.js.map +2 -2
- package/dist/components/feedback/print/Print.d.ts +4 -6
- package/dist/components/feedback/print/Print.d.ts.map +1 -1
- package/dist/components/feedback/print/Print.js +3 -2
- package/dist/components/feedback/print/Print.js.map +2 -2
- package/dist/components/feedback/print/PrintProvider.d.ts.map +1 -1
- package/dist/components/feedback/print/PrintProvider.js +1 -0
- package/dist/components/feedback/print/PrintProvider.js.map +1 -1
- package/dist/components/form-control/Invalid.d.ts +1 -1
- package/dist/components/form-control/Invalid.d.ts.map +1 -1
- package/dist/components/form-control/Invalid.js +27 -26
- package/dist/components/form-control/Invalid.js.map +2 -2
- package/dist/components/form-control/checkbox/Checkbox.d.ts +1 -1
- package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.d.ts +10 -10
- package/dist/components/form-control/checkbox/CheckboxGroup.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.js +2 -2
- package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
- package/dist/components/form-control/checkbox/Radio.d.ts +1 -1
- package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.d.ts +10 -10
- package/dist/components/form-control/checkbox/RadioGroup.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.js +2 -2
- package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
- package/dist/components/form-control/checkbox/SelectableBase.d.ts +1 -1
- package/dist/components/form-control/checkbox/SelectableBase.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/SelectableBase.js +3 -3
- package/dist/components/form-control/checkbox/SelectableBase.js.map +2 -2
- package/dist/components/form-control/checkbox/SelectionGroupBase.d.ts +1 -1
- package/dist/components/form-control/checkbox/SelectionGroupBase.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/SelectionGroupBase.js +3 -3
- package/dist/components/form-control/checkbox/SelectionGroupBase.js.map +2 -2
- package/dist/components/form-control/color-picker/ColorPicker.d.ts +2 -2
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.js +3 -3
- package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
- package/dist/components/form-control/combobox/Combobox.d.ts +3 -3
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/form-control/combobox/Combobox.js +10 -5
- package/dist/components/form-control/combobox/Combobox.js.map +2 -2
- package/dist/components/form-control/date-range-picker/DateRangePicker.js +4 -4
- 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 +176 -312
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
- package/dist/components/form-control/field/DatePicker.d.ts +2 -2
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DatePicker.js +3 -3
- package/dist/components/form-control/field/DatePicker.js.map +2 -2
- package/dist/components/form-control/field/DateTimePicker.d.ts +2 -2
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.js +3 -3
- package/dist/components/form-control/field/DateTimePicker.js.map +2 -2
- package/dist/components/form-control/field/FieldShell.d.ts +1 -1
- package/dist/components/form-control/field/FieldShell.d.ts.map +1 -1
- package/dist/components/form-control/field/FieldShell.js +2 -2
- package/dist/components/form-control/field/FieldShell.js.map +2 -2
- package/dist/components/form-control/field/NumberInput.d.ts +7 -28
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +7 -5
- package/dist/components/form-control/field/NumberInput.js.map +2 -2
- package/dist/components/form-control/field/TextInput.d.ts +7 -23
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
- package/dist/components/form-control/field/TextInput.js +6 -5
- package/dist/components/form-control/field/TextInput.js.map +2 -2
- package/dist/components/form-control/field/Textarea.d.ts +2 -2
- package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
- package/dist/components/form-control/field/Textarea.js +3 -3
- package/dist/components/form-control/field/Textarea.js.map +2 -2
- package/dist/components/form-control/field/TimePicker.d.ts +2 -2
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/TimePicker.js +3 -3
- package/dist/components/form-control/field/TimePicker.js.map +2 -2
- package/dist/components/form-control/select/Select.d.ts +22 -44
- package/dist/components/form-control/select/Select.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.js +8 -6
- package/dist/components/form-control/select/Select.js.map +2 -2
- package/dist/components/form-control/state-preset/StatePreset.js +5 -5
- package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
- package/dist/components/layout/sidebar/Sidebar.d.ts +5 -102
- package/dist/components/layout/sidebar/Sidebar.d.ts.map +1 -1
- package/dist/components/layout/sidebar/Sidebar.js.map +1 -1
- package/dist/components/layout/topbar/Topbar.d.ts +1 -1
- package/dist/components/layout/topbar/Topbar.d.ts.map +1 -1
- package/dist/components/layout/topbar/Topbar.js +3 -3
- package/dist/components/layout/topbar/Topbar.js.map +2 -2
- package/dist/helpers/createAppStructure.d.ts.map +1 -1
- package/dist/helpers/createAppStructure.js.map +1 -1
- package/dist/hooks/createControllableStore.js +5 -5
- package/dist/hooks/createControllableStore.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/providers/ServiceClientProvider.d.ts +2 -2
- package/dist/providers/ServiceClientProvider.d.ts.map +1 -1
- package/dist/providers/ServiceClientProvider.js.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.d.ts +1 -1
- package/dist/providers/shared-data/SharedDataProvider.d.ts.map +1 -1
- package/dist/providers/shared-data/SharedDataProvider.js +98 -86
- package/dist/providers/shared-data/SharedDataProvider.js.map +2 -2
- package/package.json +5 -5
- package/src/components/data/kanban/Kanban.tsx +37 -32
- package/src/components/data/list/List.tsx +3 -6
- package/src/components/data/sheet/DataSheet.tsx +224 -334
- package/src/components/data/sheet/{types.ts → DataSheet.types.ts} +8 -2
- package/src/components/data/sheet/{sheetUtils.ts → DataSheet.utils.ts} +3 -3
- package/src/components/data/sheet/DataSheetColumn.tsx +1 -1
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +1 -1
- package/src/components/data/sheet/hooks/useDataSheetExpansion.ts +2 -2
- package/src/components/data/sheet/hooks/useDataSheetFixedColumns.ts +2 -2
- package/src/components/data/sheet/hooks/useDataSheetHeaderCell.tsx +168 -0
- package/src/components/data/sheet/hooks/useDataSheetReorder.ts +1 -2
- package/src/components/data/sheet/hooks/useDataSheetSelection.ts +4 -4
- package/src/components/data/sheet/hooks/useDataSheetSorting.ts +2 -2
- package/src/components/disclosure/Dialog.tsx +21 -27
- package/src/components/disclosure/Dropdown.tsx +1 -6
- package/src/components/disclosure/Tabs.tsx +1 -6
- package/src/components/display/Barcode.tsx +4 -113
- package/src/components/display/Barcode.types.ts +111 -0
- package/src/components/display/Echarts.tsx +10 -11
- package/src/components/features/address/AddressSearch.tsx +21 -3
- package/src/components/features/crud-detail/CrudDetail.tsx +21 -38
- package/src/components/features/crud-sheet/CrudSheet.tsx +77 -93
- package/src/components/features/crud-sheet/{types.ts → CrudSheet.types.ts} +9 -9
- package/src/components/features/crud-sheet/CrudSheetColumn.tsx +1 -1
- package/src/components/features/crud-sheet/CrudSheetTools.tsx +1 -1
- package/src/components/features/data-select-button/DataSelectButton.tsx +8 -8
- package/src/components/features/shared-data/SharedDataSelect.tsx +23 -34
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +1 -4
- package/src/components/features/shared-data/SharedDataSelectList.tsx +6 -10
- package/src/components/feedback/notification/NotificationProvider.tsx +9 -1
- package/src/components/feedback/print/Print.tsx +4 -8
- package/src/components/feedback/print/PrintProvider.tsx +2 -1
- package/src/components/form-control/Invalid.tsx +33 -29
- package/src/components/form-control/checkbox/Checkbox.tsx +1 -1
- package/src/components/form-control/checkbox/CheckboxGroup.tsx +3 -12
- package/src/components/form-control/checkbox/Radio.tsx +1 -1
- package/src/components/form-control/checkbox/RadioGroup.tsx +3 -12
- package/src/components/form-control/checkbox/SelectableBase.tsx +3 -3
- package/src/components/form-control/checkbox/SelectionGroupBase.tsx +3 -3
- package/src/components/form-control/color-picker/ColorPicker.tsx +4 -4
- package/src/components/form-control/combobox/Combobox.tsx +23 -18
- package/src/components/form-control/date-range-picker/DateRangePicker.tsx +5 -5
- package/src/components/form-control/editor/EditorToolbar.tsx +82 -202
- package/src/components/form-control/field/DatePicker.tsx +4 -4
- package/src/components/form-control/field/DateTimePicker.tsx +4 -4
- package/src/components/form-control/field/FieldShell.tsx +2 -2
- package/src/components/form-control/field/NumberInput.tsx +8 -11
- package/src/components/form-control/field/TextInput.tsx +7 -11
- package/src/components/form-control/field/Textarea.tsx +4 -4
- package/src/components/form-control/field/TimePicker.tsx +4 -4
- package/src/components/form-control/select/Select.tsx +33 -42
- package/src/components/form-control/state-preset/StatePreset.tsx +5 -5
- package/src/components/layout/sidebar/Sidebar.tsx +1 -7
- package/src/components/layout/topbar/Topbar.tsx +3 -3
- package/src/helpers/createAppStructure.ts +16 -0
- package/src/hooks/createControllableStore.ts +5 -5
- package/src/index.ts +4 -3
- package/src/providers/ServiceClientProvider.tsx +4 -4
- package/src/providers/shared-data/SharedDataProvider.tsx +136 -113
- package/tests/components/data/sheet/DataSheet.spec.tsx +2 -2
- package/tests/components/data/sheet/hooks/useDataSheetFixedColumns.spec.ts +1 -1
- package/tests/components/data/sheet/hooks/useDataSheetSelection.spec.ts +34 -17
- package/tests/components/data/sheet/hooks/useDataSheetSorting.spec.ts +1 -1
- package/tests/components/disclosure/Dialog.spec.tsx +7 -7
- package/tests/components/display/Barcode.spec.tsx +15 -1
- package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +6 -6
- package/tests/components/form-control/Invalid.spec.tsx +5 -5
- package/tests/components/form-control/combobox/Combobox.spec.tsx +24 -1
- package/tests/components/layout/topbar/TopbarActions.spec.tsx +4 -4
- package/tests/components/layout/topbar/{createTopbarActions.spec.tsx → useTopbarActions.spec.tsx} +4 -4
- package/tests/providers/shared-data/SharedDataProvider.spec.tsx +130 -8
- package/dist/components/data/sheet/sheetUtils.d.ts.map +0 -1
- package/dist/components/data/sheet/sheetUtils.js.map +0 -6
- package/dist/components/data/sheet/types.d.ts.map +0 -1
- package/dist/components/data/sheet/types.js +0 -1
- package/dist/components/features/crud-detail/types.d.ts.map +0 -1
- package/dist/components/features/crud-detail/types.js +0 -1
- package/dist/components/features/crud-sheet/types.d.ts.map +0 -1
- package/dist/components/features/crud-sheet/types.js +0 -1
- package/dist/components/feedback/notification/index.d.ts +0 -4
- package/dist/components/feedback/notification/index.d.ts.map +0 -1
- package/dist/components/feedback/notification/index.js +0 -4
- package/dist/components/feedback/notification/index.js.map +0 -6
- package/src/components/feedback/notification/index.ts +0 -3
- /package/dist/components/data/sheet/{types.js.map → DataSheet.types.js.map} +0 -0
- /package/dist/components/{features/crud-detail/types.js.map → display/Barcode.types.js.map} +0 -0
- /package/dist/components/features/{crud-sheet/types.js.map → crud-detail/CrudDetail.types.js.map} +0 -0
- /package/src/components/features/crud-detail/{types.ts → CrudDetail.types.ts} +0 -0
|
@@ -11,13 +11,10 @@ import { createResizeObserver } from "@solid-primitives/resize-observer";
|
|
|
11
11
|
import clsx from "clsx";
|
|
12
12
|
import { twMerge } from "tailwind-merge";
|
|
13
13
|
import {
|
|
14
|
-
IconArrowsSort,
|
|
15
14
|
IconChevronDown,
|
|
16
15
|
IconChevronRight,
|
|
17
16
|
IconGripVertical,
|
|
18
17
|
IconSettings,
|
|
19
|
-
IconSortAscending,
|
|
20
|
-
IconSortDescending,
|
|
21
18
|
} from "@tabler/icons-solidjs";
|
|
22
19
|
import "@simplysm/core-browser";
|
|
23
20
|
import type {
|
|
@@ -26,10 +23,10 @@ import type {
|
|
|
26
23
|
DataSheetConfig,
|
|
27
24
|
DataSheetConfigColumnInfo,
|
|
28
25
|
DataSheetProps,
|
|
29
|
-
|
|
26
|
+
FlatItem,
|
|
27
|
+
} from "./DataSheet.types";
|
|
30
28
|
import { DataSheetColumn, createColumnSlotsAccessor } from "./DataSheetColumn";
|
|
31
|
-
import {
|
|
32
|
-
import { buildHeaderTable, normalizeHeader } from "./sheetUtils";
|
|
29
|
+
import { buildHeaderTable, normalizeHeader } from "./DataSheet.utils";
|
|
33
30
|
import { startPointerDrag } from "../../../helpers/startPointerDrag";
|
|
34
31
|
import { Icon } from "../../display/Icon";
|
|
35
32
|
import { Checkbox } from "../../form-control/checkbox/Checkbox";
|
|
@@ -78,14 +75,10 @@ import { useDataSheetExpansion } from "./hooks/useDataSheetExpansion";
|
|
|
78
75
|
import { useDataSheetSelection } from "./hooks/useDataSheetSelection";
|
|
79
76
|
import { useDataSheetReorder } from "./hooks/useDataSheetReorder";
|
|
80
77
|
import { useDataSheetFixedColumns } from "./hooks/useDataSheetFixedColumns";
|
|
78
|
+
import { useDataSheetHeaderCell } from "./hooks/useDataSheetHeaderCell";
|
|
81
79
|
|
|
82
|
-
interface DataSheetComponent {
|
|
83
|
-
<T>(props: DataSheetProps<T>): JSX.Element;
|
|
84
|
-
Column: typeof DataSheetColumn;
|
|
85
|
-
ConfigDialog: typeof DataSheetConfigDialog;
|
|
86
|
-
}
|
|
87
80
|
|
|
88
|
-
const DataSheetInner = <
|
|
81
|
+
const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
89
82
|
const [local] = splitProps(props, [
|
|
90
83
|
"items",
|
|
91
84
|
"storageKey",
|
|
@@ -107,7 +100,7 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
107
100
|
"selection",
|
|
108
101
|
"onSelectionChange",
|
|
109
102
|
"autoSelect",
|
|
110
|
-
"
|
|
103
|
+
"isItemSelectable",
|
|
111
104
|
"cellClass",
|
|
112
105
|
"cellStyle",
|
|
113
106
|
"onItemsReorder",
|
|
@@ -123,14 +116,14 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
123
116
|
const columnDefs = createMemo(
|
|
124
117
|
() =>
|
|
125
118
|
rawColumns().map(
|
|
126
|
-
(col): DataSheetColumnDef<
|
|
119
|
+
(col): DataSheetColumnDef<TItem> => ({
|
|
127
120
|
key: col.key,
|
|
128
121
|
header: normalizeHeader(col.header),
|
|
129
122
|
headerContent: col.headerContent,
|
|
130
123
|
headerStyle: col.headerStyle,
|
|
131
124
|
summary: col.summary,
|
|
132
125
|
tooltip: col.tooltip,
|
|
133
|
-
cell: col.children as (ctx: DataSheetCellContext<
|
|
126
|
+
cell: col.children as (ctx: DataSheetCellContext<TItem>) => JSX.Element,
|
|
134
127
|
class: col.class,
|
|
135
128
|
fixed: col.fixed ?? false,
|
|
136
129
|
hidden: col.hidden ?? false,
|
|
@@ -228,7 +221,7 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
228
221
|
toggleSort,
|
|
229
222
|
sortIndex: sortIndex,
|
|
230
223
|
sortedItems,
|
|
231
|
-
} = useDataSheetSorting<
|
|
224
|
+
} = useDataSheetSorting<TItem>({
|
|
232
225
|
sorts: () => local.sorts,
|
|
233
226
|
onSortsChange: () => local.onSortsChange,
|
|
234
227
|
items: () => local.items,
|
|
@@ -240,7 +233,7 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
240
233
|
}
|
|
241
234
|
|
|
242
235
|
// #region Paging
|
|
243
|
-
const { currentPage, setCurrentPage, pageCount, pagedItems } = useDataSheetPaging<
|
|
236
|
+
const { currentPage, setCurrentPage, pageCount, pagedItems } = useDataSheetPaging<TItem>({
|
|
244
237
|
page: () => local.page,
|
|
245
238
|
onPageChange: () => local.onPageChange,
|
|
246
239
|
pageSize: () => local.pageSize,
|
|
@@ -250,7 +243,7 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
250
243
|
});
|
|
251
244
|
|
|
252
245
|
const originalIndexMap = createMemo(() => {
|
|
253
|
-
const map = new Map<
|
|
246
|
+
const map = new Map<TItem, number>();
|
|
254
247
|
(local.items ?? []).forEach((item, i) => map.set(item, i));
|
|
255
248
|
return map;
|
|
256
249
|
});
|
|
@@ -268,7 +261,7 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
268
261
|
getFixedStyle,
|
|
269
262
|
isLastFixed,
|
|
270
263
|
registerColumnRef,
|
|
271
|
-
} = useDataSheetFixedColumns<
|
|
264
|
+
} = useDataSheetFixedColumns<TItem>(
|
|
272
265
|
{
|
|
273
266
|
get itemChildren() { return local.itemChildren; },
|
|
274
267
|
get selectionMode() { return local.selectionMode; },
|
|
@@ -364,7 +357,7 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
364
357
|
|
|
365
358
|
// #region Expanding
|
|
366
359
|
const { expandedItems, flatItems, toggleExpand, isAllExpanded, toggleExpandAll } =
|
|
367
|
-
useDataSheetExpansion<
|
|
360
|
+
useDataSheetExpansion<TItem>(
|
|
368
361
|
{
|
|
369
362
|
get expandedItems() { return local.expandedItems; },
|
|
370
363
|
get onExpandedItemsChange() { return local.onExpandedItemsChange; },
|
|
@@ -387,18 +380,18 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
387
380
|
rangeSelect,
|
|
388
381
|
lastClickedRow,
|
|
389
382
|
setLastClickedRow,
|
|
390
|
-
} = useDataSheetSelection<
|
|
383
|
+
} = useDataSheetSelection<TItem>(
|
|
391
384
|
{
|
|
392
385
|
get selectionMode() { return local.selectionMode; },
|
|
393
386
|
get selection() { return local.selection; },
|
|
394
387
|
get onSelectionChange() { return local.onSelectionChange; },
|
|
395
|
-
get
|
|
388
|
+
get isItemSelectable() { return local.isItemSelectable; },
|
|
396
389
|
},
|
|
397
390
|
displayItems,
|
|
398
391
|
);
|
|
399
392
|
|
|
400
393
|
// #region AutoSelect
|
|
401
|
-
function selectItem(item:
|
|
394
|
+
function selectItem(item: TItem): void {
|
|
402
395
|
if (getItemSelectable(item) !== true) return;
|
|
403
396
|
if (local.selectionMode === "single") {
|
|
404
397
|
setSelection([item]);
|
|
@@ -410,7 +403,7 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
410
403
|
}
|
|
411
404
|
|
|
412
405
|
// #region Reorder
|
|
413
|
-
const { dragState, onReorderPointerDown } = useDataSheetReorder<
|
|
406
|
+
const { dragState, onReorderPointerDown } = useDataSheetReorder<TItem>(
|
|
414
407
|
{
|
|
415
408
|
get onItemsReorder() { return local.onItemsReorder; },
|
|
416
409
|
get itemChildren() { return local.itemChildren; },
|
|
@@ -471,6 +464,205 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
471
464
|
// suppress unused variable warning — dragState is used for side effects (DOM mutation in hook)
|
|
472
465
|
void dragState;
|
|
473
466
|
|
|
467
|
+
// #region Sub-render functions
|
|
468
|
+
|
|
469
|
+
const { renderHeaderCell } = useDataSheetHeaderCell({
|
|
470
|
+
effectiveColumns,
|
|
471
|
+
headerRowTops,
|
|
472
|
+
getFixedStyle,
|
|
473
|
+
isLastFixed,
|
|
474
|
+
registerColumnRef,
|
|
475
|
+
toggleSort,
|
|
476
|
+
getSortDef,
|
|
477
|
+
sortIndex,
|
|
478
|
+
onResizerPointerdown,
|
|
479
|
+
onResizerDoubleClick,
|
|
480
|
+
thClass,
|
|
481
|
+
fixedClass,
|
|
482
|
+
sortableThClass,
|
|
483
|
+
fixedLastClass,
|
|
484
|
+
thContentClass,
|
|
485
|
+
resizerClass,
|
|
486
|
+
sortIconClass,
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
function renderExpandCell(flatItem: FlatItem<TItem>): JSX.Element {
|
|
490
|
+
return (
|
|
491
|
+
<td
|
|
492
|
+
class={twMerge(
|
|
493
|
+
featureTdClass,
|
|
494
|
+
fixedClass,
|
|
495
|
+
"z-[2]",
|
|
496
|
+
isExpandColLastFixed() ? fixedLastClass : undefined,
|
|
497
|
+
)}
|
|
498
|
+
style={{ left: "0" }}
|
|
499
|
+
>
|
|
500
|
+
<div class={featureCellBodyWrapperClass}>
|
|
501
|
+
<For each={Array.from({ length: flatItem.depth })}>
|
|
502
|
+
{() => (
|
|
503
|
+
<div class={expandIndentGuideClass}>
|
|
504
|
+
<div class={expandIndentGuideLineClass} />
|
|
505
|
+
</div>
|
|
506
|
+
)}
|
|
507
|
+
</For>
|
|
508
|
+
<Show when={flatItem.hasChildren}>
|
|
509
|
+
<button
|
|
510
|
+
type="button"
|
|
511
|
+
class={expandToggleClass}
|
|
512
|
+
onClick={() => toggleExpand(flatItem.item)}
|
|
513
|
+
>
|
|
514
|
+
<Icon
|
|
515
|
+
icon={IconChevronDown}
|
|
516
|
+
size="1em"
|
|
517
|
+
class={clsx(
|
|
518
|
+
"transition-transform",
|
|
519
|
+
expandedItems().includes(flatItem.item) ? "rotate-0" : "-rotate-90",
|
|
520
|
+
)}
|
|
521
|
+
/>
|
|
522
|
+
</button>
|
|
523
|
+
</Show>
|
|
524
|
+
</div>
|
|
525
|
+
</td>
|
|
526
|
+
);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
function renderSelectCell(flatItem: FlatItem<TItem>): JSX.Element {
|
|
530
|
+
const selectable = () => getItemSelectable(flatItem.item);
|
|
531
|
+
const isSelected = () => selection().includes(flatItem.item);
|
|
532
|
+
const rowIndex = () => flatItem.row;
|
|
533
|
+
|
|
534
|
+
return (
|
|
535
|
+
<td
|
|
536
|
+
class={twMerge(
|
|
537
|
+
featureTdClass,
|
|
538
|
+
fixedClass,
|
|
539
|
+
"z-[2]",
|
|
540
|
+
isSelectColLastFixed() ? fixedLastClass : undefined,
|
|
541
|
+
)}
|
|
542
|
+
style={{
|
|
543
|
+
left: selectColLeft(),
|
|
544
|
+
}}
|
|
545
|
+
>
|
|
546
|
+
<Show
|
|
547
|
+
when={local.selectionMode === "multiple"}
|
|
548
|
+
fallback={
|
|
549
|
+
/* single mode */
|
|
550
|
+
<Show when={selectable() === true}>
|
|
551
|
+
<div
|
|
552
|
+
class={featureCellBodyClickableClass}
|
|
553
|
+
onClick={() => toggleSelect(flatItem.item)}
|
|
554
|
+
>
|
|
555
|
+
<div
|
|
556
|
+
class={twMerge(
|
|
557
|
+
selectSingleClass,
|
|
558
|
+
isSelected()
|
|
559
|
+
? selectSingleSelectedClass
|
|
560
|
+
: selectSingleUnselectedClass,
|
|
561
|
+
)}
|
|
562
|
+
>
|
|
563
|
+
<Icon icon={IconChevronRight} size="1em" />
|
|
564
|
+
</div>
|
|
565
|
+
</div>
|
|
566
|
+
</Show>
|
|
567
|
+
}
|
|
568
|
+
>
|
|
569
|
+
{/* multi mode */}
|
|
570
|
+
<div
|
|
571
|
+
class={featureCellBodyClickableClass}
|
|
572
|
+
onClick={(e) => {
|
|
573
|
+
if (e.shiftKey) {
|
|
574
|
+
rangeSelect(rowIndex());
|
|
575
|
+
} else {
|
|
576
|
+
toggleSelect(flatItem.item);
|
|
577
|
+
}
|
|
578
|
+
setLastClickedRow(rowIndex());
|
|
579
|
+
}}
|
|
580
|
+
title={
|
|
581
|
+
typeof selectable() === "string"
|
|
582
|
+
? (selectable() as string)
|
|
583
|
+
: undefined
|
|
584
|
+
}
|
|
585
|
+
>
|
|
586
|
+
<Checkbox
|
|
587
|
+
value={isSelected()}
|
|
588
|
+
disabled={selectable() !== true}
|
|
589
|
+
inset
|
|
590
|
+
class={twMerge(
|
|
591
|
+
"pointer-events-none",
|
|
592
|
+
lastClickedRow() === rowIndex()
|
|
593
|
+
? "[&>div]:ring-2 [&>div]:ring-primary-200 dark:[&>div]:ring-primary-700"
|
|
594
|
+
: undefined,
|
|
595
|
+
)}
|
|
596
|
+
/>
|
|
597
|
+
</div>
|
|
598
|
+
</Show>
|
|
599
|
+
</td>
|
|
600
|
+
);
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
function renderReorderCell(flatItem: FlatItem<TItem>): JSX.Element {
|
|
604
|
+
return (
|
|
605
|
+
<td
|
|
606
|
+
class={twMerge(
|
|
607
|
+
featureTdClass,
|
|
608
|
+
fixedClass,
|
|
609
|
+
"z-[2]",
|
|
610
|
+
isReorderColLastFixed() ? fixedLastClass : undefined,
|
|
611
|
+
)}
|
|
612
|
+
style={{
|
|
613
|
+
left: reorderColLeft(),
|
|
614
|
+
}}
|
|
615
|
+
>
|
|
616
|
+
<div
|
|
617
|
+
class={reorderCellWrapperClass}
|
|
618
|
+
onPointerDown={(e) => onReorderPointerDown(e, flatItem.item)}
|
|
619
|
+
>
|
|
620
|
+
<div class={reorderHandleClass}>
|
|
621
|
+
<Icon icon={IconGripVertical} size="1em" />
|
|
622
|
+
</div>
|
|
623
|
+
</div>
|
|
624
|
+
</td>
|
|
625
|
+
);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
function renderSummaryRow(): JSX.Element {
|
|
629
|
+
return (
|
|
630
|
+
<Show when={hasSummary()}>
|
|
631
|
+
<tr>
|
|
632
|
+
{/* Expand feature column summary cell already covered by rowspan, skip */}
|
|
633
|
+
<For each={effectiveColumns()}>
|
|
634
|
+
{(col, colIndex) => {
|
|
635
|
+
const summaryStyle = (): string | undefined => {
|
|
636
|
+
const parts: string[] = [];
|
|
637
|
+
parts.push(`top: ${summaryRowTop()}px`);
|
|
638
|
+
const left = getFixedStyle(colIndex());
|
|
639
|
+
if (left != null) parts.push(left);
|
|
640
|
+
return parts.join("; ");
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
return (
|
|
644
|
+
<th
|
|
645
|
+
class={twMerge(
|
|
646
|
+
thClass,
|
|
647
|
+
summaryThClass,
|
|
648
|
+
fixedClass,
|
|
649
|
+
col.fixed ? "z-[5]" : "z-[3]",
|
|
650
|
+
isLastFixed(colIndex()) ? fixedLastClass : undefined,
|
|
651
|
+
)}
|
|
652
|
+
style={summaryStyle()}
|
|
653
|
+
>
|
|
654
|
+
<div class={thContentClass}>{col.summary?.()}</div>
|
|
655
|
+
</th>
|
|
656
|
+
);
|
|
657
|
+
}}
|
|
658
|
+
</For>
|
|
659
|
+
</tr>
|
|
660
|
+
</Show>
|
|
661
|
+
);
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
// #endregion
|
|
665
|
+
|
|
474
666
|
return (
|
|
475
667
|
<ColumnsProvider>
|
|
476
668
|
{local.children}
|
|
@@ -627,186 +819,14 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
627
819
|
<For each={row}>
|
|
628
820
|
{(cell, cellColIndex) => (
|
|
629
821
|
<Show when={cell}>
|
|
630
|
-
{(c) =>
|
|
631
|
-
const isSortable = () =>
|
|
632
|
-
c().isLastRow &&
|
|
633
|
-
c().colIndex != null &&
|
|
634
|
-
effectiveColumns()[c().colIndex!].sortable;
|
|
635
|
-
const colKey = () =>
|
|
636
|
-
c().colIndex != null
|
|
637
|
-
? effectiveColumns()[c().colIndex!].key
|
|
638
|
-
: undefined;
|
|
639
|
-
|
|
640
|
-
// Group header fixed status: all columns in colspan range are fixed
|
|
641
|
-
const isGroupFixed = (): boolean => {
|
|
642
|
-
if (c().isLastRow) return false;
|
|
643
|
-
const start = cellColIndex();
|
|
644
|
-
const span = c().colspan;
|
|
645
|
-
const cols = effectiveColumns();
|
|
646
|
-
for (let i = start; i < start + span && i < cols.length; i++) {
|
|
647
|
-
if (!cols[i].fixed) return false;
|
|
648
|
-
}
|
|
649
|
-
return true;
|
|
650
|
-
};
|
|
651
|
-
|
|
652
|
-
// Cell fixed column status (based on colIndex if last row, group-based otherwise)
|
|
653
|
-
const isCellFixed = () =>
|
|
654
|
-
(c().isLastRow &&
|
|
655
|
-
c().colIndex != null &&
|
|
656
|
-
effectiveColumns()[c().colIndex!].fixed) ||
|
|
657
|
-
isGroupFixed();
|
|
658
|
-
|
|
659
|
-
// Cell's last fixed status
|
|
660
|
-
const isCellLastFixed = () => {
|
|
661
|
-
if (c().isLastRow && c().colIndex != null)
|
|
662
|
-
return isLastFixed(c().colIndex!);
|
|
663
|
-
if (isGroupFixed()) {
|
|
664
|
-
const lastCol = cellColIndex() + c().colspan - 1;
|
|
665
|
-
return isLastFixed(lastCol);
|
|
666
|
-
}
|
|
667
|
-
return false;
|
|
668
|
-
};
|
|
669
|
-
|
|
670
|
-
// Fixed cell left + top inline style
|
|
671
|
-
const cellStyle = (): string | undefined => {
|
|
672
|
-
const parts: string[] = [];
|
|
673
|
-
// top: apply to all th (fix header to top)
|
|
674
|
-
const top = headerRowTops()[rowIndex()];
|
|
675
|
-
parts.push(`top: ${top}px`);
|
|
676
|
-
// left: apply only to fixed columns
|
|
677
|
-
if (c().isLastRow && c().colIndex != null) {
|
|
678
|
-
const left = getFixedStyle(c().colIndex!);
|
|
679
|
-
if (left != null) parts.push(left);
|
|
680
|
-
// max-width: apply if explicit width exists (allow column to shrink below content)
|
|
681
|
-
const col = effectiveColumns()[c().colIndex!];
|
|
682
|
-
if (col.width != null) parts.push(`max-width: ${col.width.replace(/;/g, "")}`);
|
|
683
|
-
} else if (isGroupFixed()) {
|
|
684
|
-
const left = getFixedStyle(cellColIndex());
|
|
685
|
-
if (left != null) parts.push(left);
|
|
686
|
-
}
|
|
687
|
-
return parts.length > 0 ? parts.join("; ") : undefined;
|
|
688
|
-
};
|
|
689
|
-
|
|
690
|
-
return (
|
|
691
|
-
<th
|
|
692
|
-
class={twMerge(
|
|
693
|
-
thClass,
|
|
694
|
-
fixedClass,
|
|
695
|
-
isSortable() ? sortableThClass : undefined,
|
|
696
|
-
isCellFixed() ? "z-[5]" : "z-[3]",
|
|
697
|
-
isCellLastFixed() ? fixedLastClass : undefined,
|
|
698
|
-
)}
|
|
699
|
-
colspan={c().colspan > 1 ? c().colspan : undefined}
|
|
700
|
-
rowspan={c().rowspan > 1 ? c().rowspan : undefined}
|
|
701
|
-
style={cellStyle()}
|
|
702
|
-
title={
|
|
703
|
-
c().isLastRow && c().colIndex != null
|
|
704
|
-
? (effectiveColumns()[c().colIndex!].tooltip ?? c().text)
|
|
705
|
-
: c().text
|
|
706
|
-
}
|
|
707
|
-
ref={(el: HTMLElement) => {
|
|
708
|
-
if (
|
|
709
|
-
c().isLastRow &&
|
|
710
|
-
c().colIndex != null &&
|
|
711
|
-
effectiveColumns()[c().colIndex!].fixed
|
|
712
|
-
) {
|
|
713
|
-
registerColumnRef(c().colIndex!, el);
|
|
714
|
-
}
|
|
715
|
-
}}
|
|
716
|
-
onClick={(e) => {
|
|
717
|
-
if (!isSortable()) return;
|
|
718
|
-
const key = colKey();
|
|
719
|
-
if (key == null) return;
|
|
720
|
-
toggleSort(key, e.shiftKey || e.ctrlKey);
|
|
721
|
-
}}
|
|
722
|
-
>
|
|
723
|
-
<div class={clsx("flex items-center gap-2", thContentClass)}>
|
|
724
|
-
<div class="flex-1">{c().headerContent?.() ?? c().text}</div>
|
|
725
|
-
<Show when={isSortable() && colKey()}>
|
|
726
|
-
{(key) => {
|
|
727
|
-
const sortDef = () => getSortDef(key());
|
|
728
|
-
const sortIdx = () => sortIndex(key());
|
|
729
|
-
return (
|
|
730
|
-
<div class={sortIconClass}>
|
|
731
|
-
<Show when={sortDef()?.desc === false}>
|
|
732
|
-
<Icon icon={IconSortAscending} />
|
|
733
|
-
</Show>
|
|
734
|
-
<Show when={sortDef()?.desc === true}>
|
|
735
|
-
<Icon icon={IconSortDescending} />
|
|
736
|
-
</Show>
|
|
737
|
-
<Show when={sortDef() == null}>
|
|
738
|
-
<Icon
|
|
739
|
-
icon={IconArrowsSort}
|
|
740
|
-
class="opacity-30"
|
|
741
|
-
/>
|
|
742
|
-
</Show>
|
|
743
|
-
<Show when={sortIdx()}>
|
|
744
|
-
{(idx) => <sub>{idx()}</sub>}
|
|
745
|
-
</Show>
|
|
746
|
-
</div>
|
|
747
|
-
);
|
|
748
|
-
}}
|
|
749
|
-
</Show>
|
|
750
|
-
</div>
|
|
751
|
-
<Show
|
|
752
|
-
when={
|
|
753
|
-
c().isLastRow &&
|
|
754
|
-
c().colIndex != null &&
|
|
755
|
-
effectiveColumns()[c().colIndex!].resizable
|
|
756
|
-
}
|
|
757
|
-
>
|
|
758
|
-
<div
|
|
759
|
-
class={resizerClass}
|
|
760
|
-
onClick={(e) => e.stopPropagation()}
|
|
761
|
-
onPointerDown={(e) =>
|
|
762
|
-
onResizerPointerdown(e, effectiveColumns()[c().colIndex!].key)
|
|
763
|
-
}
|
|
764
|
-
onDblClick={(e) => {
|
|
765
|
-
e.stopPropagation();
|
|
766
|
-
onResizerDoubleClick(effectiveColumns()[c().colIndex!].key);
|
|
767
|
-
}}
|
|
768
|
-
/>
|
|
769
|
-
</Show>
|
|
770
|
-
</th>
|
|
771
|
-
);
|
|
772
|
-
}}
|
|
822
|
+
{(c) => renderHeaderCell(c(), cellColIndex(), rowIndex())}
|
|
773
823
|
</Show>
|
|
774
824
|
)}
|
|
775
825
|
</For>
|
|
776
826
|
</tr>
|
|
777
827
|
)}
|
|
778
828
|
</For>
|
|
779
|
-
|
|
780
|
-
<tr>
|
|
781
|
-
{/* Expand feature column summary cell already covered by rowspan, skip */}
|
|
782
|
-
<For each={effectiveColumns()}>
|
|
783
|
-
{(col, colIndex) => {
|
|
784
|
-
const summaryStyle = (): string | undefined => {
|
|
785
|
-
const parts: string[] = [];
|
|
786
|
-
parts.push(`top: ${summaryRowTop()}px`);
|
|
787
|
-
const left = getFixedStyle(colIndex());
|
|
788
|
-
if (left != null) parts.push(left);
|
|
789
|
-
return parts.join("; ");
|
|
790
|
-
};
|
|
791
|
-
|
|
792
|
-
return (
|
|
793
|
-
<th
|
|
794
|
-
class={twMerge(
|
|
795
|
-
thClass,
|
|
796
|
-
summaryThClass,
|
|
797
|
-
fixedClass,
|
|
798
|
-
col.fixed ? "z-[5]" : "z-[3]",
|
|
799
|
-
isLastFixed(colIndex()) ? fixedLastClass : undefined,
|
|
800
|
-
)}
|
|
801
|
-
style={summaryStyle()}
|
|
802
|
-
>
|
|
803
|
-
<div class={thContentClass}>{col.summary?.()}</div>
|
|
804
|
-
</th>
|
|
805
|
-
);
|
|
806
|
-
}}
|
|
807
|
-
</For>
|
|
808
|
-
</tr>
|
|
809
|
-
</Show>
|
|
829
|
+
{renderSummaryRow()}
|
|
810
830
|
</thead>
|
|
811
831
|
<tbody>
|
|
812
832
|
<For each={displayItems()}>
|
|
@@ -814,148 +834,20 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
814
834
|
<tr
|
|
815
835
|
data-selected={selection().includes(flat.item) ? "" : undefined}
|
|
816
836
|
onClick={() => {
|
|
817
|
-
if (local.autoSelect
|
|
837
|
+
if (local.autoSelect) {
|
|
818
838
|
selectItem(flat.item);
|
|
819
839
|
}
|
|
820
840
|
}}
|
|
821
|
-
class={clsx(trRowClass, local.autoSelect
|
|
841
|
+
class={clsx(trRowClass, local.autoSelect && "cursor-pointer")}
|
|
822
842
|
>
|
|
823
|
-
{/* Expand feature column body cell */}
|
|
824
843
|
<Show when={hasExpandFeature()}>
|
|
825
|
-
|
|
826
|
-
class={twMerge(
|
|
827
|
-
featureTdClass,
|
|
828
|
-
fixedClass,
|
|
829
|
-
"z-[2]",
|
|
830
|
-
isExpandColLastFixed() ? fixedLastClass : undefined,
|
|
831
|
-
)}
|
|
832
|
-
style={{ left: "0" }}
|
|
833
|
-
>
|
|
834
|
-
<div class={featureCellBodyWrapperClass}>
|
|
835
|
-
<For each={Array.from({ length: flat.depth })}>
|
|
836
|
-
{() => (
|
|
837
|
-
<div class={expandIndentGuideClass}>
|
|
838
|
-
<div class={expandIndentGuideLineClass} />
|
|
839
|
-
</div>
|
|
840
|
-
)}
|
|
841
|
-
</For>
|
|
842
|
-
<Show when={flat.hasChildren}>
|
|
843
|
-
<button
|
|
844
|
-
type="button"
|
|
845
|
-
class={expandToggleClass}
|
|
846
|
-
onClick={() => toggleExpand(flat.item)}
|
|
847
|
-
>
|
|
848
|
-
<Icon
|
|
849
|
-
icon={IconChevronDown}
|
|
850
|
-
size="1em"
|
|
851
|
-
class={clsx(
|
|
852
|
-
"transition-transform",
|
|
853
|
-
expandedItems().includes(flat.item) ? "rotate-0" : "-rotate-90",
|
|
854
|
-
)}
|
|
855
|
-
/>
|
|
856
|
-
</button>
|
|
857
|
-
</Show>
|
|
858
|
-
</div>
|
|
859
|
-
</td>
|
|
844
|
+
{renderExpandCell(flat)}
|
|
860
845
|
</Show>
|
|
861
|
-
{/* Select feature column body cell */}
|
|
862
846
|
<Show when={hasSelectFeature()}>
|
|
863
|
-
{(
|
|
864
|
-
const selectable = () => getItemSelectable(flat.item);
|
|
865
|
-
const isSelected = () => selection().includes(flat.item);
|
|
866
|
-
const rowIndex = () => flat.row;
|
|
867
|
-
|
|
868
|
-
return (
|
|
869
|
-
<td
|
|
870
|
-
class={twMerge(
|
|
871
|
-
featureTdClass,
|
|
872
|
-
fixedClass,
|
|
873
|
-
"z-[2]",
|
|
874
|
-
isSelectColLastFixed() ? fixedLastClass : undefined,
|
|
875
|
-
)}
|
|
876
|
-
style={{
|
|
877
|
-
left: selectColLeft(),
|
|
878
|
-
}}
|
|
879
|
-
>
|
|
880
|
-
<Show
|
|
881
|
-
when={local.selectionMode === "multiple"}
|
|
882
|
-
fallback={
|
|
883
|
-
/* single mode */
|
|
884
|
-
<Show when={selectable() === true}>
|
|
885
|
-
<div
|
|
886
|
-
class={featureCellBodyClickableClass}
|
|
887
|
-
onClick={() => toggleSelect(flat.item)}
|
|
888
|
-
>
|
|
889
|
-
<div
|
|
890
|
-
class={twMerge(
|
|
891
|
-
selectSingleClass,
|
|
892
|
-
isSelected()
|
|
893
|
-
? selectSingleSelectedClass
|
|
894
|
-
: selectSingleUnselectedClass,
|
|
895
|
-
)}
|
|
896
|
-
>
|
|
897
|
-
<Icon icon={IconChevronRight} size="1em" />
|
|
898
|
-
</div>
|
|
899
|
-
</div>
|
|
900
|
-
</Show>
|
|
901
|
-
}
|
|
902
|
-
>
|
|
903
|
-
{/* multi mode */}
|
|
904
|
-
<div
|
|
905
|
-
class={featureCellBodyClickableClass}
|
|
906
|
-
onClick={(e) => {
|
|
907
|
-
if (e.shiftKey) {
|
|
908
|
-
rangeSelect(rowIndex());
|
|
909
|
-
} else {
|
|
910
|
-
toggleSelect(flat.item);
|
|
911
|
-
}
|
|
912
|
-
setLastClickedRow(rowIndex());
|
|
913
|
-
}}
|
|
914
|
-
title={
|
|
915
|
-
typeof selectable() === "string"
|
|
916
|
-
? (selectable() as string)
|
|
917
|
-
: undefined
|
|
918
|
-
}
|
|
919
|
-
>
|
|
920
|
-
<Checkbox
|
|
921
|
-
value={isSelected()}
|
|
922
|
-
disabled={selectable() !== true}
|
|
923
|
-
inset
|
|
924
|
-
class={twMerge(
|
|
925
|
-
"pointer-events-none",
|
|
926
|
-
lastClickedRow() === rowIndex()
|
|
927
|
-
? "[&>div]:ring-2 [&>div]:ring-primary-200 dark:[&>div]:ring-primary-700"
|
|
928
|
-
: undefined,
|
|
929
|
-
)}
|
|
930
|
-
/>
|
|
931
|
-
</div>
|
|
932
|
-
</Show>
|
|
933
|
-
</td>
|
|
934
|
-
);
|
|
935
|
-
})()}
|
|
847
|
+
{renderSelectCell(flat)}
|
|
936
848
|
</Show>
|
|
937
|
-
{/* Drag reorder feature column body cell */}
|
|
938
849
|
<Show when={hasReorderFeature()}>
|
|
939
|
-
|
|
940
|
-
class={twMerge(
|
|
941
|
-
featureTdClass,
|
|
942
|
-
fixedClass,
|
|
943
|
-
"z-[2]",
|
|
944
|
-
isReorderColLastFixed() ? fixedLastClass : undefined,
|
|
945
|
-
)}
|
|
946
|
-
style={{
|
|
947
|
-
left: reorderColLeft(),
|
|
948
|
-
}}
|
|
949
|
-
>
|
|
950
|
-
<div
|
|
951
|
-
class={reorderCellWrapperClass}
|
|
952
|
-
onPointerDown={(e) => onReorderPointerDown(e, flat.item)}
|
|
953
|
-
>
|
|
954
|
-
<div class={reorderHandleClass}>
|
|
955
|
-
<Icon icon={IconGripVertical} size="1em" />
|
|
956
|
-
</div>
|
|
957
|
-
</div>
|
|
958
|
-
</td>
|
|
850
|
+
{renderReorderCell(flat)}
|
|
959
851
|
</Show>
|
|
960
852
|
<For each={effectiveColumns()}>
|
|
961
853
|
{(col, colIndex) => (
|
|
@@ -1002,7 +894,5 @@ const DataSheetInner = <T,>(props: DataSheetProps<T>) => {
|
|
|
1002
894
|
//#region Export
|
|
1003
895
|
export const DataSheet = Object.assign(DataSheetInner, {
|
|
1004
896
|
Column: DataSheetColumn,
|
|
1005
|
-
|
|
1006
|
-
}) as unknown as DataSheetComponent;
|
|
1007
|
-
export { DataSheetConfigDialog };
|
|
897
|
+
});
|
|
1008
898
|
//#endregion
|