@lavalogic/scoria 0.37.44 → 0.37.45
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 +58 -58
- package/dist/Components/AccordionGroup.svelte +46 -46
- package/dist/Components/AccordionGroupButton.svelte +76 -76
- package/dist/Components/Action.svelte +136 -136
- package/dist/Components/ActionProps.d.ts +2 -6
- package/dist/Components/AlertModal.svelte +195 -183
- package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +702 -702
- package/dist/Components/Base/BaseModal.svelte +125 -125
- package/dist/Components/Base/ContextWrapper.svelte +72 -72
- package/dist/Components/Base/Pagination.svelte +198 -198
- package/dist/Components/Base/Snippets.svelte +36 -36
- package/dist/Components/BigRadioSet.svelte +38 -38
- package/dist/Components/Bubble.svelte +101 -101
- package/dist/Components/Button.svelte +209 -209
- package/dist/Components/ButtonProps.d.ts +2 -6
- package/dist/Components/Checkbox.svelte +86 -86
- package/dist/Components/CollapsibleCard.svelte +78 -78
- package/dist/Components/Contexts/ContextMenu.svelte +164 -164
- package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
- package/dist/Components/Contexts/ContextMenuOption.svelte +60 -60
- package/dist/Components/Contexts/Toast.svelte +83 -83
- package/dist/Components/Contexts/ToastContainer.svelte +65 -65
- package/dist/Components/Contexts/Tooltip.svelte +37 -37
- package/dist/Components/DataMatrixIcon.svelte +112 -112
- package/dist/Components/DataMatrixIconProps.d.ts +3 -13
- package/dist/Components/DateInput.svelte +148 -148
- package/dist/Components/DatePicker.svelte +300 -300
- package/dist/Components/DesktopModal.svelte +90 -90
- package/dist/Components/Dial.svelte +204 -204
- package/dist/Components/DialProps.d.ts +1 -18
- package/dist/Components/DimensionInput.svelte +170 -170
- package/dist/Components/DragMenu/DragMenuHolder.svelte +119 -119
- package/dist/Components/DragMenu/DraggableCard.svelte +77 -77
- package/dist/Components/FileCard.svelte +24 -24
- package/dist/Components/FileUpload.svelte +236 -236
- package/dist/Components/GridInput.svelte +196 -200
- package/dist/Components/GridInputSet.svelte +29 -29
- package/dist/Components/HorizontalTabGroup.svelte +82 -82
- package/dist/Components/HorizontalTabGroupButton.svelte +44 -44
- package/dist/Components/Icon.svelte +128 -128
- package/dist/Components/IconProps.d.ts +2 -7
- package/dist/Components/Icons.js +357 -357
- package/dist/Components/LoadingAnimation.svelte +29 -29
- package/dist/Components/LoadingModal.svelte +45 -45
- package/dist/Components/LoadingOverlay.svelte +25 -25
- package/dist/Components/LoadingOverlayProps.d.ts +3 -7
- package/dist/Components/Modal.svelte +258 -258
- package/dist/Components/ModalProps.d.ts +0 -3
- package/dist/Components/MultiSelect.svelte +220 -220
- package/dist/Components/MultiSelectCommonProps.d.ts +6 -17
- package/dist/Components/Nav/Nav.svelte +99 -99
- package/dist/Components/Nav/NavProps.d.ts +4 -11
- package/dist/Components/Nav/NavServiceMenuList.svelte +43 -43
- package/dist/Components/Nav/NavTab.svelte +62 -62
- package/dist/Components/Nav/ServiceMenuItem.svelte +100 -100
- package/dist/Components/Nav/ServicesNav.svelte +80 -80
- package/dist/Components/NumberInput.svelte +157 -157
- package/dist/Components/PageHeading.svelte +25 -25
- package/dist/Components/PasswordInput.svelte +88 -88
- package/dist/Components/Portal.svelte +36 -36
- package/dist/Components/ProgressBubble.svelte +107 -108
- package/dist/Components/ProgressBubbleProps.d.ts +3 -3
- package/dist/Components/QuerySelect.svelte +366 -366
- package/dist/Components/QuerySelectProps.d.ts +4 -14
- package/dist/Components/SingleSelect.svelte +250 -250
- package/dist/Components/SingleSelectCommonProps.d.ts +3 -19
- package/dist/Components/StepButton.svelte +70 -70
- package/dist/Components/StepForm.svelte +140 -140
- package/dist/Components/Switch.svelte +69 -69
- package/dist/Components/Table/ARCHITECTURE.md +298 -0
- package/dist/Components/Table/Body/QuickSearchCell.svelte +679 -694
- package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +51 -51
- package/dist/Components/Table/Body/Rows/ColumnList.svelte +59 -59
- package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +456 -478
- package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +79 -79
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +185 -188
- package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +124 -124
- package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +120 -120
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +230 -230
- package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +105 -105
- package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +12 -9
- package/dist/Components/Table/Body/Rows/Columns/SelectTableCell.d.ts +5 -5
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +87 -87
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +126 -126
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +159 -159
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +246 -246
- package/dist/Components/Table/Body/Rows/Columns/TableDatePickerProps.d.ts +4 -4
- package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +216 -216
- package/dist/Components/Table/Body/Rows/Columns/TableQueryCell.d.ts +6 -5
- package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +7 -6
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +252 -257
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +179 -179
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +221 -229
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte.d.ts +11 -11
- package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +197 -197
- package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +190 -190
- package/dist/Components/Table/Body/Rows/TableRow.svelte +290 -290
- package/dist/Components/Table/Body/TableBody.svelte +155 -155
- package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +2 -3
- package/dist/Components/Table/ColumnFactory.svelte.d.ts +9 -11
- package/dist/Components/Table/ColumnFactory.svelte.js +101 -118
- package/dist/Components/Table/ColumnKindRegistry.d.ts +112 -0
- package/dist/Components/Table/ColumnKindRegistry.js +63 -0
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte +41 -41
- package/dist/Components/Table/Headers/SelectAllHeader.svelte +30 -30
- package/dist/Components/Table/Headers/TableHead.svelte +415 -413
- package/dist/Components/Table/Misc/ColumnPanel.svelte +94 -94
- package/dist/Components/Table/Misc/ColumnPanelModal.svelte +112 -112
- package/dist/Components/Table/Misc/FilterInput.svelte +620 -644
- package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -12
- package/dist/Components/Table/Misc/FilterInputProps.d.ts +2 -2
- package/dist/Components/Table/Misc/FilterPanel.svelte +257 -257
- package/dist/Components/Table/Misc/FilterPanelModal.svelte +30 -30
- package/dist/Components/Table/Misc/SidePanel.svelte +35 -35
- package/dist/Components/Table/Misc/TableFooter.svelte +311 -311
- package/dist/Components/Table/Misc/TableHorizontalBar.svelte +125 -125
- package/dist/Components/Table/Misc/TableSidebar.svelte +157 -157
- package/dist/Components/Table/Misc/ToolboxPanel.svelte +100 -100
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +107 -107
- package/dist/Components/Table/NestedTable.svelte +130 -133
- package/dist/Components/Table/SubApis.svelte.d.ts +1 -5
- package/dist/Components/Table/SubApis.svelte.js +33 -32
- package/dist/Components/Table/Table.svelte +692 -745
- package/dist/Components/Table/TableHelpers.svelte.d.ts +6 -19
- package/dist/Components/Table/TableHelpers.svelte.js +6 -14
- package/dist/Components/Table/Types/Columns/Column.d.ts +2 -2
- package/dist/Components/Table/Types/Columns/DateColumn.d.ts +3 -3
- package/dist/Components/Table/Types/Columns/DateTableCell.d.ts +7 -7
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +7 -8
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.js +4 -5
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.d.ts +11 -14
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js +3 -4
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +7 -11
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.js +3 -3
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +13 -18
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js +4 -5
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.d.ts +5 -5
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.js +2 -2
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +15 -12
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.js +4 -5
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.d.ts +8 -12
- package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.js +3 -3
- package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +6 -6
- package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +3 -3
- package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +49 -16
- package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.js +27 -5
- package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.d.ts +7 -7
- package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js +4 -4
- package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.d.ts +5 -5
- package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.js +2 -2
- package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.d.ts +5 -5
- package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.js +2 -2
- package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.d.ts +5 -5
- package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.js +2 -2
- package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.d.ts +5 -5
- package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.js +2 -2
- package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +11 -19
- package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.js +4 -8
- package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.d.ts +6 -7
- package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.js +3 -4
- package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +9 -9
- package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +4 -4
- package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +5 -5
- package/dist/Components/Table/Types/Columns/ProgressBarTableCell.d.ts +6 -6
- package/dist/Components/Table/Types/Columns/TableCell.d.ts +7 -6
- package/dist/Components/Table/Types/Context/ClipboardState.svelte.d.ts +98 -0
- package/dist/Components/Table/Types/Context/ClipboardState.svelte.js +290 -0
- package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.d.ts +17 -45
- package/dist/Components/Table/Types/Context/ColumnLayoutState.svelte.js +17 -45
- package/dist/Components/Table/Types/Context/FilteringState.svelte.d.ts +9 -20
- package/dist/Components/Table/Types/Context/FilteringState.svelte.js +9 -20
- package/dist/Components/Table/Types/Context/FocusState.svelte.d.ts +23 -42
- package/dist/Components/Table/Types/Context/FocusState.svelte.js +32 -59
- package/dist/Components/Table/Types/Context/ITable.d.ts +5 -8
- package/dist/Components/Table/Types/Context/PreferencesState.svelte.d.ts +29 -56
- package/dist/Components/Table/Types/Context/PreferencesState.svelte.js +28 -55
- package/dist/Components/Table/Types/Context/QueryValuesState.svelte.d.ts +50 -0
- package/dist/Components/Table/Types/Context/QueryValuesState.svelte.js +62 -0
- package/dist/Components/Table/Types/Context/SelectionState.svelte.d.ts +17 -28
- package/dist/Components/Table/Types/Context/SelectionState.svelte.js +17 -28
- package/dist/Components/Table/Types/Context/SortingState.svelte.d.ts +15 -29
- package/dist/Components/Table/Types/Context/SortingState.svelte.js +17 -31
- package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +212 -325
- package/dist/Components/Table/Types/Context/TableContext.svelte.js +292 -706
- package/dist/Components/Table/Types/Context/VirtualisationState.svelte.d.ts +62 -79
- package/dist/Components/Table/Types/Context/VirtualisationState.svelte.js +54 -73
- package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.d.ts +16 -27
- package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.js +16 -27
- package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +12 -15
- package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +15 -30
- package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +16 -28
- package/dist/Components/Table/Types/Header.d.ts +4 -4
- package/dist/Components/Table/Types/HeaderGroup.d.ts +5 -5
- package/dist/Components/Table/Types/Public/index.d.ts +2 -4
- package/dist/Components/Table/Types/Public/index.js +2 -4
- package/dist/Components/Table/clipboardEscape.d.ts +32 -0
- package/dist/Components/Table/clipboardEscape.js +45 -0
- package/dist/Components/Table/createTable.svelte.d.ts +8 -18
- package/dist/Components/Table/createTable.svelte.js +19 -47
- package/dist/Components/Test/TestContextConsumer.svelte +13 -13
- package/dist/Components/TextArea.svelte +130 -130
- package/dist/Components/TextInput.svelte +176 -176
- package/dist/Components/ThreeStateRadio.svelte +131 -131
- package/dist/Components/Touch/BoolCard.svelte +45 -45
- package/dist/Components/Touch/DateModal.svelte +209 -209
- package/dist/Components/Touch/EditCard.svelte +59 -59
- package/dist/Components/Touch/InfoCard.svelte +31 -31
- package/dist/Components/Touch/InfoTextCard.svelte +28 -28
- package/dist/Components/Touch/ModalExplanation.svelte +17 -17
- package/dist/Components/Touch/NumberKeyboard.svelte +225 -225
- package/dist/Components/Touch/NumberModal.svelte +79 -79
- package/dist/Components/Touch/PlusMinusCard.svelte +46 -46
- package/dist/Components/Touch/SelectModal.svelte +123 -123
- package/dist/Components/Touch/SummaryCard.svelte +93 -93
- package/dist/Components/Touch/TextAreaModal.svelte +95 -95
- package/dist/Components/Touch/TextModal.svelte +106 -106
- package/dist/Components/Touch/TouchCard.svelte +33 -33
- package/dist/Components/Touch/TouchModal.svelte +274 -274
- package/dist/Components/Touch/UtilityButton.svelte +109 -109
- package/dist/Components/VerticalTabGroup.svelte +79 -79
- package/dist/Components/VerticalTabGroupButton.svelte +58 -58
- package/dist/Contexts/ToastContext.svelte.js +3 -4
- package/dist/Helpers/Datamatrix.d.ts +19 -19
- package/dist/Helpers/Datamatrix.js +291 -291
- package/dist/Helpers/Helpers.svelte.d.ts +2 -4
- package/dist/Helpers/Helpers.svelte.js +2 -4
- package/dist/Helpers/dropdownPortal.d.ts +26 -41
- package/dist/Helpers/dropdownPortal.js +62 -116
- package/dist/Types/Examples/ExampleModal.svelte +35 -35
- package/dist/index.d.ts +0 -1
- package/dist/scss/_basics.scss +12 -12
- package/dist/scss/_colours.scss +134 -134
- package/dist/scss/_mixins.scss +3348 -3360
- package/dist/scss/_motion.scss +57 -57
- package/dist/scss/_sizing.scss +85 -85
- package/dist/scss/_transitions.scss +8 -8
- package/package.json +2 -1
|
@@ -1,135 +1,132 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<script
|
|
4
|
-
lang="ts"
|
|
5
|
-
module
|
|
6
|
-
>
|
|
7
|
-
import Table from './Table.svelte';
|
|
8
|
-
import type { NestedTableProps } from './NestedTableProps.js';
|
|
9
|
-
import type { Primitive, TableInitOptions } from './Types/Context/TableInitOptions.js';
|
|
10
|
-
import { TableContext } from './Types/Context/TableContext.svelte.js';
|
|
11
|
-
import { LocalTableDataRepository } from './Types/DataRepository/LocalTableDataRepository.svelte.js';
|
|
12
|
-
import { ToolbarPosition } from './Types/Toolbar/ToolbarPosition.js';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Default `TableInitOptions` overrides applied to every nested table.
|
|
16
|
-
* Tuned for read-only inline display: copy, resize and column
|
|
17
|
-
* reordering are turned off, quick / advanced filtering remain on so
|
|
18
|
-
* the consumer can still narrow rows, the toolbar is hidden, and the
|
|
19
|
-
* footer is suppressed because pagination is rarely useful for inline
|
|
20
|
-
* nested data.
|
|
21
|
-
*
|
|
22
|
-
* Frozen so consumers cannot accidentally mutate the shared default
|
|
23
|
-
* object.
|
|
24
|
-
*/
|
|
25
|
-
const DEFAULT_NESTED_TABLE_OPTIONS: Omit<
|
|
26
|
-
TableInitOptions<object, never>,
|
|
27
|
-
'selectionExtractor' | 'getUserId'
|
|
28
|
-
> = Object.freeze({
|
|
29
|
-
allowCopy: false,
|
|
30
|
-
enableResize: false,
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
// `inner.allowReorder` option on `col.expand` (
|
|
34
|
-
// `allowReorder` on top-level `createTable`)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
// svelte-ignore state_referenced_locally
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
/>
|
|
131
|
-
</div>
|
|
132
|
-
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<script
|
|
4
|
+
lang="ts"
|
|
5
|
+
module
|
|
6
|
+
>
|
|
7
|
+
import Table from './Table.svelte';
|
|
8
|
+
import type { NestedTableProps } from './NestedTableProps.js';
|
|
9
|
+
import type { Primitive, TableInitOptions } from './Types/Context/TableInitOptions.js';
|
|
10
|
+
import { TableContext } from './Types/Context/TableContext.svelte.js';
|
|
11
|
+
import { LocalTableDataRepository } from './Types/DataRepository/LocalTableDataRepository.svelte.js';
|
|
12
|
+
import { ToolbarPosition } from './Types/Toolbar/ToolbarPosition.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Default `TableInitOptions` overrides applied to every nested table.
|
|
16
|
+
* Tuned for read-only inline display: copy, resize and column
|
|
17
|
+
* reordering are turned off, quick / advanced filtering remain on so
|
|
18
|
+
* the consumer can still narrow rows, the toolbar is hidden, and the
|
|
19
|
+
* footer is suppressed because pagination is rarely useful for inline
|
|
20
|
+
* nested data.
|
|
21
|
+
*
|
|
22
|
+
* Frozen so consumers cannot accidentally mutate the shared default
|
|
23
|
+
* object.
|
|
24
|
+
*/
|
|
25
|
+
const DEFAULT_NESTED_TABLE_OPTIONS: Omit<
|
|
26
|
+
TableInitOptions<object, never>,
|
|
27
|
+
'selectionExtractor' | 'getUserId'
|
|
28
|
+
> = Object.freeze({
|
|
29
|
+
allowCopy: false,
|
|
30
|
+
enableResize: false,
|
|
31
|
+
// Nested-table columns can be reordered and pinned by default like
|
|
32
|
+
// the outer table. Callers opt out per inner table via the
|
|
33
|
+
// `inner.allowReorder` option on `col.expand` (or the matching
|
|
34
|
+
// `allowReorder` on top-level `createTable`).
|
|
35
|
+
allowColumnReordering: true,
|
|
36
|
+
allowQuickFiltering: true,
|
|
37
|
+
allowAdvancedFiltering: true,
|
|
38
|
+
toolbar: ToolbarPosition.None,
|
|
39
|
+
displayFooter: false,
|
|
40
|
+
});
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<script
|
|
44
|
+
lang="ts"
|
|
45
|
+
generics="T extends object,IdType extends Primitive"
|
|
46
|
+
>
|
|
47
|
+
const {
|
|
48
|
+
tableName,
|
|
49
|
+
data,
|
|
50
|
+
columnDefWrapper,
|
|
51
|
+
options,
|
|
52
|
+
oncontextmenu,
|
|
53
|
+
getUserId,
|
|
54
|
+
}: NestedTableProps<T, IdType> = $props();
|
|
55
|
+
|
|
56
|
+
// Reactive wrapper exposing the `data` prop as `.value` so the
|
|
57
|
+
// underlying LocalTableDataRepository can read it through its
|
|
58
|
+
// RefWrapper contract without us materialising a copy.
|
|
59
|
+
const wrapper = {
|
|
60
|
+
get value() {
|
|
61
|
+
return data;
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
let root: HTMLDivElement | undefined = $state();
|
|
66
|
+
|
|
67
|
+
// Track the parent `.datatable`'s visible width (clientWidth) via
|
|
68
|
+
// ResizeObserver. `.datatable` is the horizontal scroll container, so
|
|
69
|
+
// its `clientWidth` is the visible viewport regardless of how wide the
|
|
70
|
+
// inner `.datatable-grid` has grown via `min-width: max-content`. Do
|
|
71
|
+
// NOT measure `.flex_table` instead - flex `min-width: auto`
|
|
72
|
+
// propagates the scroll-content width and sizes the nested table to
|
|
73
|
+
// the full grid, breaking the sticky-fit behaviour.
|
|
74
|
+
//
|
|
75
|
+
// Reading layout inside a derivation would force a synchronous reflow
|
|
76
|
+
// on every reactive re-run; the ResizeObserver path keeps it out of
|
|
77
|
+
// the reactive graph.
|
|
78
|
+
let maxWidth: number | undefined = $state();
|
|
79
|
+
$effect(() => {
|
|
80
|
+
if (!root) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const scrollHost = root.closest('.datatable');
|
|
84
|
+
if (!(scrollHost instanceof HTMLElement)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
maxWidth = scrollHost.clientWidth;
|
|
88
|
+
const ro = new ResizeObserver(() => {
|
|
89
|
+
maxWidth = scrollHost.clientWidth;
|
|
90
|
+
});
|
|
91
|
+
ro.observe(scrollHost);
|
|
92
|
+
return () => {
|
|
93
|
+
ro.disconnect();
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// These class instances have `$state`-backed internal fields, so they
|
|
98
|
+
// must NOT be wrapped in `$state(...)` (that would add a redundant
|
|
99
|
+
// reactive layer). The `dataRepo` and `tableContext` references must
|
|
100
|
+
// stay stable across updates: a fresh `dataRepo` would clear
|
|
101
|
+
// filter/sort state, and a fresh `tableContext` would tear down focus.
|
|
102
|
+
//
|
|
103
|
+
// svelte-ignore state_referenced_locally
|
|
104
|
+
const dataRepo = new LocalTableDataRepository<T>(tableName, wrapper, () => getUserId());
|
|
105
|
+
|
|
106
|
+
// svelte-ignore state_referenced_locally
|
|
107
|
+
const tableContext = TableContext.init<T, IdType>(columnDefWrapper, tableName, dataRepo, {
|
|
108
|
+
...DEFAULT_NESTED_TABLE_OPTIONS,
|
|
109
|
+
...options,
|
|
110
|
+
getUserId: () => getUserId(),
|
|
111
|
+
});
|
|
112
|
+
</script>
|
|
113
|
+
|
|
114
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
115
|
+
<div
|
|
116
|
+
class="limit-height"
|
|
117
|
+
bind:this={root}
|
|
118
|
+
style:width={maxWidth != null ? `${maxWidth}px` : null}
|
|
119
|
+
oncontextmenu={(e) => {
|
|
120
|
+
e.stopPropagation();
|
|
121
|
+
oncontextmenu?.(e);
|
|
122
|
+
}}
|
|
123
|
+
>
|
|
124
|
+
<Table
|
|
125
|
+
nested
|
|
126
|
+
{tableContext}
|
|
127
|
+
/>
|
|
128
|
+
</div>
|
|
129
|
+
|
|
133
130
|
<style>.limit-height {
|
|
134
131
|
position: sticky;
|
|
135
132
|
left: 0;
|
|
@@ -138,4 +135,4 @@
|
|
|
138
135
|
box-sizing: border-box;
|
|
139
136
|
background-color: #f4f7f9;
|
|
140
137
|
box-shadow: inset 0px 7px 5px -6px #cbd4da, inset 0px -7px 5px -6px #cbd4da;
|
|
141
|
-
}</style>
|
|
138
|
+
}</style>
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Sub-API facade constructors. Each `makeXxxApi(tableContext)` returns a
|
|
3
3
|
* frozen object literal whose shape matches the corresponding interface in
|
|
4
|
-
* `Types/Public/TableSubApis.ts`. Reads delegate to the underlying
|
|
4
|
+
* `Types/Public/TableSubApis.ts`. Reads delegate to the underlying
|
|
5
5
|
* sub-context (`tableContext._selection`, `_filtering`, etc.); writes
|
|
6
6
|
* delegate to the matching setter or method.
|
|
7
|
-
*
|
|
8
|
-
* Phase 1 ships these as a thin facade over the existing internals. Phase 2
|
|
9
|
-
* will collapse the duplication once the legacy delegating accessors on
|
|
10
|
-
* `TableContext` are removed.
|
|
11
7
|
*/
|
|
12
8
|
import type { TableContext } from './Types/Context/TableContext.svelte.js';
|
|
13
9
|
import type { Primitive } from './Types/Context/TableInitOptions.js';
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Sub-API facade constructors. Each `makeXxxApi(tableContext)` returns a
|
|
3
3
|
* frozen object literal whose shape matches the corresponding interface in
|
|
4
|
-
* `Types/Public/TableSubApis.ts`. Reads delegate to the underlying
|
|
4
|
+
* `Types/Public/TableSubApis.ts`. Reads delegate to the underlying
|
|
5
5
|
* sub-context (`tableContext._selection`, `_filtering`, etc.); writes
|
|
6
6
|
* delegate to the matching setter or method.
|
|
7
|
-
*
|
|
8
|
-
* Phase 1 ships these as a thin facade over the existing internals. Phase 2
|
|
9
|
-
* will collapse the duplication once the legacy delegating accessors on
|
|
10
|
-
* `TableContext` are removed.
|
|
11
7
|
*/
|
|
8
|
+
import { escapeForSpreadsheet } from './clipboardEscape.js';
|
|
12
9
|
// ─────────────────────────────────────────────────────────────────────────
|
|
13
10
|
// Selection
|
|
14
11
|
// ─────────────────────────────────────────────────────────────────────────
|
|
@@ -23,11 +20,23 @@ export function makeSelectionApi(ctx) {
|
|
|
23
20
|
toggle(row) {
|
|
24
21
|
void ctx._selection.toggleSelected(row);
|
|
25
22
|
},
|
|
26
|
-
set(
|
|
27
|
-
|
|
23
|
+
set(_rowId, row) {
|
|
24
|
+
// Route through the sub-context's flush-aware writer so the
|
|
25
|
+
// pending-changes buffer and `_keyCache` stay consistent. The
|
|
26
|
+
// caller's `rowId` is ignored — the underlying writer recomputes
|
|
27
|
+
// the key from the row reference via the configured
|
|
28
|
+
// `selectionExtractor`, which is the source of truth.
|
|
29
|
+
void ctx._selection.setSelected(row, true);
|
|
28
30
|
},
|
|
29
31
|
delete(rowId) {
|
|
30
|
-
|
|
32
|
+
// Resolve the row from the live selected map so we can route
|
|
33
|
+
// removal through `setSelected(false)` and pick up the same
|
|
34
|
+
// flush + cache-invalidation semantics. No-op when the id is
|
|
35
|
+
// not currently selected.
|
|
36
|
+
const row = ctx._selection.selectedItems.get(rowId);
|
|
37
|
+
if (row !== undefined) {
|
|
38
|
+
void ctx._selection.setSelected(row, false);
|
|
39
|
+
}
|
|
31
40
|
},
|
|
32
41
|
clear() {
|
|
33
42
|
ctx._selection.resetSelectedItems();
|
|
@@ -160,11 +169,9 @@ export function makeColumnsApi(ctx, specsById) {
|
|
|
160
169
|
ctx._columnLayout.columnVisibility = next;
|
|
161
170
|
},
|
|
162
171
|
setPinning(columnId, side) {
|
|
163
|
-
// `ColumnPinningState`
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
// fills in widths from the column-sizing state when we delegate;
|
|
167
|
-
// here we provide 0 as a placeholder for newly-pinned columns.
|
|
172
|
+
// `ColumnPinningState` maps each column id to the pinned width.
|
|
173
|
+
// The columns sub-context fills in real widths from column-sizing
|
|
174
|
+
// when we delegate, so 0 is a safe placeholder here.
|
|
168
175
|
const current = ctx._columnLayout.columnPinning;
|
|
169
176
|
// Local, single-shot rebuild before reassigning the reactive container.
|
|
170
177
|
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
@@ -212,8 +219,8 @@ export function makeFocusApi(ctx) {
|
|
|
212
219
|
},
|
|
213
220
|
moveTo(row, column) {
|
|
214
221
|
// `CellCoordinates` carries `{ id, row, column }` so the focus
|
|
215
|
-
// target is addressable by both ordinal index and stable id
|
|
216
|
-
//
|
|
222
|
+
// target is addressable by both ordinal index and stable id; the
|
|
223
|
+
// id is looked up from the column-layout's ordered defs.
|
|
217
224
|
const defs = ctx._columnLayout.columnDefs;
|
|
218
225
|
if (column < 0 || column >= defs.length) {
|
|
219
226
|
return;
|
|
@@ -231,16 +238,12 @@ export function makeFocusApi(ctx) {
|
|
|
231
238
|
// ─────────────────────────────────────────────────────────────────────────
|
|
232
239
|
export function makePreferencesApi(ctx) {
|
|
233
240
|
// Adapt the internal `ColumnDefSet<T>` shape to the public `SavedPreset`
|
|
234
|
-
// shape.
|
|
235
|
-
//
|
|
236
|
-
//
|
|
237
|
-
// public `SavedPreset.savedAt` is a placeholder until Phase 2 extends
|
|
238
|
-
// the internal shape, and the per-column `width` falls back to the def's
|
|
239
|
-
// `minSize`.
|
|
241
|
+
// shape. `ColumnDefSet` has no `savedAt` timestamp or per-column sizing
|
|
242
|
+
// map, so `savedAt` is an epoch-zero placeholder and per-column `width`
|
|
243
|
+
// falls back to the def's `minSize`.
|
|
240
244
|
const adapt = (set) => ({
|
|
241
245
|
name: set.name,
|
|
242
|
-
//
|
|
243
|
-
// real timestamp; no reactivity needed for a literal placeholder.
|
|
246
|
+
// Literal placeholder, no reactivity needed.
|
|
244
247
|
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
245
248
|
savedAt: new Date(0).toISOString(),
|
|
246
249
|
columns: set.columnDefs.map((c) => ({
|
|
@@ -333,11 +336,9 @@ export function makeModalApi(ctx) {
|
|
|
333
336
|
return ctx.openModalCell;
|
|
334
337
|
},
|
|
335
338
|
open(row, columnId) {
|
|
336
|
-
//
|
|
337
|
-
//
|
|
338
|
-
//
|
|
339
|
-
// typically have that instance in hand from `table.rows`,
|
|
340
|
-
// `table.selection.map`, or a `col.actions` callback.
|
|
339
|
+
// Cells compare row identity by reference, so callers must pass
|
|
340
|
+
// the same instance the table holds (from `table.rows`,
|
|
341
|
+
// `table.selection.map`, or a `col.actions` callback).
|
|
341
342
|
ctx.setOpenModalCell({ row, columnId });
|
|
342
343
|
},
|
|
343
344
|
close() {
|
|
@@ -357,9 +358,6 @@ export function makeClipboardApi(ctx) {
|
|
|
357
358
|
await ctx.copyHighlightedRowsToClipboard();
|
|
358
359
|
},
|
|
359
360
|
async copyCell(row, columnId) {
|
|
360
|
-
// Phase 1: minimal implementation. Phase 2 will route through the
|
|
361
|
-
// shared `escapeForSpreadsheet` helper to neutralise formula-
|
|
362
|
-
// injection prefixes consistently with the other copy paths.
|
|
363
361
|
const def = ctx._columnLayout.columnDefsById.get(columnId);
|
|
364
362
|
if (!def) {
|
|
365
363
|
return;
|
|
@@ -374,7 +372,10 @@ export function makeClipboardApi(ctx) {
|
|
|
374
372
|
: typeof value === 'number' || typeof value === 'boolean'
|
|
375
373
|
? value.toString()
|
|
376
374
|
: JSON.stringify(value);
|
|
377
|
-
|
|
375
|
+
// Neutralise formula-injection prefixes ('=', '+', '-', '@', tab,
|
|
376
|
+
// CR). Aligns single-cell copy with copySelection /
|
|
377
|
+
// copyHighlighted, which both pass through `escapeForSpreadsheet`.
|
|
378
|
+
await navigator.clipboard.writeText(escapeForSpreadsheet(text));
|
|
378
379
|
},
|
|
379
380
|
});
|
|
380
381
|
}
|