@lavalogic/scoria 0.40.13 → 0.40.15
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 +35 -46
- package/dist/Components/AccordionGroupButton.svelte +68 -76
- package/dist/Components/Action.svelte +103 -135
- package/dist/Components/AlertModal.svelte +171 -190
- package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +614 -697
- package/dist/Components/Base/BaseModal.svelte +90 -116
- package/dist/Components/Base/ContextWrapper.svelte +67 -72
- package/dist/Components/Base/Pagination.svelte +173 -196
- package/dist/Components/Base/Snippets.svelte +34 -36
- package/dist/Components/BigRadioSet.svelte +36 -38
- package/dist/Components/Bubble.svelte +78 -101
- package/dist/Components/Button.svelte +175 -208
- package/dist/Components/Checkbox.svelte +75 -86
- package/dist/Components/CollapsibleCard.svelte +72 -87
- package/dist/Components/CollapsibleMenuGroup.svelte +53 -57
- package/dist/Components/ConditionBuilder/ConditionBuilder.svelte +39 -64
- package/dist/Components/Contexts/ContextMenu.svelte +141 -156
- package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
- package/dist/Components/Contexts/ContextMenuOption.svelte +53 -60
- package/dist/Components/Contexts/Toast.svelte +81 -86
- package/dist/Components/Contexts/ToastContainer.svelte +58 -62
- package/dist/Components/Contexts/Tooltip.svelte +36 -37
- package/dist/Components/DataMatrixIcon.svelte +95 -108
- package/dist/Components/DateInput.svelte +118 -146
- package/dist/Components/DatePicker.svelte +255 -294
- package/dist/Components/DesktopModal.svelte +70 -90
- package/dist/Components/Dial.svelte +167 -197
- package/dist/Components/DimensionInput.svelte +124 -169
- package/dist/Components/DragMenu/DragMenuHolder.svelte +98 -114
- package/dist/Components/DragMenu/DraggableCard.svelte +64 -76
- package/dist/Components/FileCard.svelte +21 -24
- package/dist/Components/FileUpload.svelte +190 -225
- package/dist/Components/GridInput.svelte +159 -196
- package/dist/Components/GridInputSet.svelte +24 -29
- package/dist/Components/HorizontalTabGroup.svelte +73 -89
- package/dist/Components/HorizontalTabGroupButton.svelte +40 -44
- package/dist/Components/Icon.svelte +99 -128
- package/dist/Components/Icons.js +357 -357
- package/dist/Components/InfoAlert.svelte +35 -38
- package/dist/Components/LoadingAnimation.svelte +691 -755
- package/dist/Components/LoadingModal.svelte +36 -44
- package/dist/Components/LoadingOverlay.svelte +22 -26
- package/dist/Components/Modal.svelte +204 -254
- package/dist/Components/MultiSelect.svelte +186 -216
- package/dist/Components/Nav/Nav.svelte +94 -110
- package/dist/Components/Nav/NavServiceMenuList.svelte +57 -61
- package/dist/Components/Nav/NavTab.svelte +58 -62
- package/dist/Components/Nav/ServiceMenuItem.svelte +103 -111
- package/dist/Components/Nav/ServicesNav.svelte +72 -79
- package/dist/Components/NumberInput.svelte +121 -155
- package/dist/Components/OptionCards.svelte +62 -73
- package/dist/Components/PageHeading.svelte +23 -25
- package/dist/Components/PasswordInput.svelte +69 -88
- package/dist/Components/PopoverButton.svelte +151 -0
- package/dist/Components/PopoverButton.svelte.d.ts +9 -0
- package/dist/Components/PopoverButtonProps.d.ts +21 -0
- package/dist/Components/PopoverButtonProps.js +1 -0
- package/dist/Components/Portal.svelte +29 -35
- package/dist/Components/ProgressBubble.svelte +91 -106
- package/dist/Components/QuerySelect.svelte +260 -346
- package/dist/Components/SidebarPanel.svelte +34 -36
- package/dist/Components/SingleSelect.svelte +196 -244
- package/dist/Components/StepButton.svelte +65 -70
- package/dist/Components/StepForm.svelte +115 -135
- package/dist/Components/Switch.svelte +57 -69
- package/dist/Components/Table/ARCHITECTURE.md +298 -298
- package/dist/Components/Table/Body/QuickSearchCell.svelte +578 -655
- package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +42 -51
- package/dist/Components/Table/Body/Rows/ColumnList.svelte +42 -58
- package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +403 -442
- package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +51 -78
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +165 -184
- package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +110 -123
- package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +134 -160
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +190 -231
- package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +82 -104
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +52 -87
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +122 -150
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +132 -159
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +190 -236
- package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +173 -211
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +204 -244
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +140 -177
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +188 -217
- package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +173 -193
- package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +166 -187
- package/dist/Components/Table/Body/Rows/TableRow.svelte +245 -288
- package/dist/Components/Table/Body/TableBody.svelte +141 -154
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte +35 -41
- package/dist/Components/Table/Headers/SelectAllHeader.svelte +24 -30
- package/dist/Components/Table/Headers/TableHead.svelte +348 -402
- package/dist/Components/Table/Misc/ColumnPanel.svelte +37 -39
- package/dist/Components/Table/Misc/ColumnPanelModal.svelte +35 -39
- package/dist/Components/Table/Misc/FilterInput.svelte +556 -619
- package/dist/Components/Table/Misc/FilterPanel.svelte +170 -183
- package/dist/Components/Table/Misc/FilterPanelModal.svelte +25 -31
- package/dist/Components/Table/Misc/ShareViewModal.svelte +252 -281
- package/dist/Components/Table/Misc/SidePanel.svelte +32 -35
- package/dist/Components/Table/Misc/TableConfigurationModal.svelte +574 -629
- package/dist/Components/Table/Misc/TableFooter.svelte +326 -332
- package/dist/Components/Table/Misc/TableHorizontalBar.svelte +134 -140
- package/dist/Components/Table/Misc/TableSidebar.svelte +183 -198
- package/dist/Components/Table/Misc/TableViewDropdown.svelte +83 -103
- package/dist/Components/Table/Misc/ToolboxPanel.svelte +83 -100
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +88 -107
- package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +163 -190
- package/dist/Components/Table/NestedTable.svelte +102 -128
- package/dist/Components/Table/Table.svelte +531 -663
- package/dist/Components/Test/TestContextConsumer.svelte +11 -13
- package/dist/Components/TextArea.svelte +95 -130
- package/dist/Components/TextInput.svelte +125 -176
- package/dist/Components/ThreeStateRadio.svelte +111 -130
- package/dist/Components/Touch/BoolCard.svelte +33 -45
- package/dist/Components/Touch/DateModal.svelte +164 -204
- package/dist/Components/Touch/EditCard.svelte +48 -59
- package/dist/Components/Touch/InfoCard.svelte +28 -31
- package/dist/Components/Touch/InfoTextCard.svelte +26 -28
- package/dist/Components/Touch/ModalExplanation.svelte +15 -17
- package/dist/Components/Touch/NumberKeyboard.svelte +181 -218
- package/dist/Components/Touch/NumberModal.svelte +59 -79
- package/dist/Components/Touch/PlusMinusCard.svelte +43 -46
- package/dist/Components/Touch/SelectModal.svelte +111 -126
- package/dist/Components/Touch/SummaryCard.svelte +80 -93
- package/dist/Components/Touch/TextAreaModal.svelte +72 -94
- package/dist/Components/Touch/TextModal.svelte +77 -105
- package/dist/Components/Touch/TouchCard.svelte +31 -33
- package/dist/Components/Touch/TouchModal.svelte +214 -270
- package/dist/Components/Touch/UtilityButton.svelte +88 -109
- package/dist/Components/VerticalTabGroup.svelte +60 -78
- package/dist/Components/VerticalTabGroupButton.svelte +54 -58
- package/dist/Helpers/Datamatrix.d.ts +19 -19
- package/dist/Helpers/Datamatrix.js +291 -291
- package/dist/Types/Examples/ExampleModal.svelte +31 -35
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/scss/_basics.scss +12 -12
- package/dist/scss/_colours.scss +134 -134
- package/dist/scss/_mixins.scss +3392 -3392
- package/dist/scss/_motion.scss +57 -57
- package/dist/scss/_sizing.scss +85 -85
- package/dist/scss/_transitions.scss +8 -8
- package/package.json +1 -1
|
@@ -1,297 +1,254 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<script
|
|
4
|
-
lang="ts"
|
|
5
|
-
generics="T extends object, RowIdType extends Primitive"
|
|
6
|
-
>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
// `minmax(W, 1fr)` and the actual width can exceed `columnDef.width`.
|
|
40
|
-
function renderedWidth(cell: TableCell<T>): number {
|
|
41
|
-
return tableContext._columnRenderedWidths.get(cell.column.id) ?? cell.column.columnDef.width;
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<script
|
|
4
|
+
lang="ts"
|
|
5
|
+
generics="T extends object, RowIdType extends Primitive"
|
|
6
|
+
>import { dev } from "$app/environment";
|
|
7
|
+
import { devCatch, generateWeakId } from "../../../../Helpers/Helpers.svelte.js";
|
|
8
|
+
import { getContext, untrack } from "svelte";
|
|
9
|
+
import NestedTable from "../../NestedTable.svelte";
|
|
10
|
+
import { TableContext } from "../../Types/Context/TableContext.svelte.js";
|
|
11
|
+
import "../../Types/Context/TableInitOptions.js";
|
|
12
|
+
import ColumnHighlight from "./ColumnHighlight.svelte";
|
|
13
|
+
import TableColumn from "./Columns/TableColumn.svelte";
|
|
14
|
+
const tableContext = getContext(TableContext.identifier);
|
|
15
|
+
const { row, odd = false, includeHighlight } = $props();
|
|
16
|
+
const hoverable = $derived(tableContext.changeColourOnHover);
|
|
17
|
+
// Visible cells in display order: left-pinned -> centre -> right-pinned.
|
|
18
|
+
// The browser now handles row-height alignment natively because all
|
|
19
|
+
// cells live in the same grid row, so the previous per-side fan-out
|
|
20
|
+
// and height-reconciliation pool is gone.
|
|
21
|
+
const leftCells = $derived(row.getLeftVisibleCells());
|
|
22
|
+
const centreCells = $derived(row.getCenterVisibleCells());
|
|
23
|
+
const rightCells = $derived(row.getRightVisibleCells());
|
|
24
|
+
// Cumulative pinning offsets for the sticky-positioned cells. Reads
|
|
25
|
+
// rendered widths from `_columnRenderedWidths` (populated by the
|
|
26
|
+
// ResizeObserver in TableHead) so the sticky positions stay
|
|
27
|
+
// accurate even though each pinned column track uses
|
|
28
|
+
// `minmax(W, 1fr)` and the actual width can exceed `columnDef.width`.
|
|
29
|
+
function renderedWidth(cell) {
|
|
30
|
+
return tableContext._columnRenderedWidths.get(cell.column.id) ?? cell.column.columnDef.width;
|
|
31
|
+
}
|
|
32
|
+
const leftOffsets = $derived.by(() => {
|
|
33
|
+
void tableContext._columnRenderedWidths.size;
|
|
34
|
+
const offsets = [];
|
|
35
|
+
let cumulative = includeHighlight ? 20 : 0;
|
|
36
|
+
for (const cell of leftCells) {
|
|
37
|
+
offsets.push(cumulative);
|
|
38
|
+
cumulative += renderedWidth(cell);
|
|
42
39
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
cumulative += renderedWidth(rightCells[i]);
|
|
62
|
-
}
|
|
63
|
-
return offsets;
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
let expandedColumnDef: ExpandDef<T, object> | undefined = $state();
|
|
67
|
-
|
|
68
|
-
$effect(() => {
|
|
69
|
-
if (leftCells.length + centreCells.length + rightCells.length > 0) {
|
|
70
|
-
void tableContext.table.data;
|
|
71
|
-
void tableContext.paginationRepo?.paginationState.pageIndex;
|
|
72
|
-
void tableContext.paginationRepo?.paginationState.pageSize;
|
|
73
|
-
untrack(() => {
|
|
74
|
-
expandedColumnDef = undefined;
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
let innerDataPromise: Array<object> | Promise<Array<object>> | undefined = $state();
|
|
80
|
-
let innerColumnDefs: DefsWrapper<object> = $state({ defs: [] });
|
|
81
|
-
let innerTableName: ScoriaStorageKey | undefined = $state();
|
|
82
|
-
|
|
83
|
-
let prevExpandedColumnDef: ExpandDef<T, object> | undefined = $state();
|
|
84
|
-
|
|
85
|
-
const firstCell = $derived(leftCells.at(0) ?? centreCells.at(0) ?? rightCells.at(0));
|
|
86
|
-
const rowIndex = $derived(firstCell?.row.visibleIndex);
|
|
87
|
-
let id = $state<RowIdType | undefined>();
|
|
88
|
-
// Transient click/copy highlight OR the declarative, persistent
|
|
89
|
-
// `highlightRow` predicate (reactive; survives data/pagination resets).
|
|
90
|
-
const highlighted = $derived(
|
|
91
|
-
(id != undefined && tableContext.highlightedItems.has(id)) ||
|
|
92
|
-
(tableContext.highlightRow ? tableContext.highlightRow(row.original, rowIndex ?? 0) : false)
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
$effect(() => {
|
|
96
|
-
void row.original;
|
|
97
|
-
void tableContext.selectionExtractor;
|
|
98
|
-
|
|
99
|
-
if (rowIndex != undefined) {
|
|
100
|
-
const maybePromise = tableContext.selectionExtractor(row.original);
|
|
101
|
-
if (maybePromise instanceof Promise) {
|
|
102
|
-
maybePromise
|
|
103
|
-
.then((it) => {
|
|
104
|
-
id = it;
|
|
105
|
-
})
|
|
106
|
-
.catch(devCatch);
|
|
107
|
-
} else {
|
|
108
|
-
id = maybePromise;
|
|
109
|
-
}
|
|
110
|
-
} else {
|
|
111
|
-
id = undefined;
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
const showHighlightButton = $derived(rowIndex != null && includeHighlight);
|
|
116
|
-
|
|
117
|
-
$effect(() => {
|
|
118
|
-
void expandedColumnDef;
|
|
119
|
-
|
|
40
|
+
return offsets;
|
|
41
|
+
});
|
|
42
|
+
const rightOffsets = $derived.by(() => {
|
|
43
|
+
void tableContext._columnRenderedWidths.size;
|
|
44
|
+
const offsets = new Array(rightCells.length).fill(0);
|
|
45
|
+
let cumulative = 0;
|
|
46
|
+
for (let i = rightCells.length - 1; i >= 0; i--) {
|
|
47
|
+
offsets[i] = cumulative;
|
|
48
|
+
cumulative += renderedWidth(rightCells[i]);
|
|
49
|
+
}
|
|
50
|
+
return offsets;
|
|
51
|
+
});
|
|
52
|
+
let expandedColumnDef = $state();
|
|
53
|
+
$effect(() => {
|
|
54
|
+
if (leftCells.length + centreCells.length + rightCells.length > 0) {
|
|
55
|
+
void tableContext.table.data;
|
|
56
|
+
void tableContext.paginationRepo?.paginationState.pageIndex;
|
|
57
|
+
void tableContext.paginationRepo?.paginationState.pageSize;
|
|
120
58
|
untrack(() => {
|
|
121
|
-
// Guard: if all columns have been hidden the cells arrays are
|
|
122
|
-
// empty; `firstCell` would otherwise be undefined.
|
|
123
|
-
if (!firstCell) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
if (expandedColumnDef && expandedColumnDef.id != prevExpandedColumnDef?.id) {
|
|
127
|
-
prevExpandedColumnDef = expandedColumnDef;
|
|
128
|
-
innerColumnDefs = expandedColumnDef.getInnerColumnDefs(
|
|
129
|
-
firstCell.row.original,
|
|
130
|
-
firstCell.row.originalIndex
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
innerDataPromise = expandedColumnDef.accessorFn(
|
|
134
|
-
firstCell.row.original,
|
|
135
|
-
firstCell.row.originalIndex
|
|
136
|
-
) as Promise<Array<object>>;
|
|
137
|
-
innerTableName = expandedColumnDef.innerTableName;
|
|
138
|
-
} else if (
|
|
139
|
-
!expandedColumnDef ||
|
|
140
|
-
tableContext.columnVisibility[expandedColumnDef.id] === false
|
|
141
|
-
) {
|
|
142
|
-
innerTableName = undefined;
|
|
143
|
-
expandedColumnDef = prevExpandedColumnDef = innerDataPromise = undefined;
|
|
144
|
-
innerColumnDefs = { defs: [] };
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
function onExpandChange(columnDef: ExpandDef<T, object>) {
|
|
150
|
-
if (expandedColumnDef?.id === columnDef.id) {
|
|
151
59
|
expandedColumnDef = undefined;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
let innerDataPromise = $state();
|
|
64
|
+
let innerColumnDefs = $state({ defs: [] });
|
|
65
|
+
let innerTableName = $state();
|
|
66
|
+
let prevExpandedColumnDef = $state();
|
|
67
|
+
const firstCell = $derived(leftCells.at(0) ?? centreCells.at(0) ?? rightCells.at(0));
|
|
68
|
+
const rowIndex = $derived(firstCell?.row.visibleIndex);
|
|
69
|
+
let id = $state();
|
|
70
|
+
// Transient click/copy highlight OR the declarative, persistent
|
|
71
|
+
// `highlightRow` predicate (reactive; survives data/pagination resets).
|
|
72
|
+
const highlighted = $derived(id != undefined && tableContext.highlightedItems.has(id) || (tableContext.highlightRow ? tableContext.highlightRow(row.original, rowIndex ?? 0) : false));
|
|
73
|
+
$effect(() => {
|
|
74
|
+
void row.original;
|
|
75
|
+
void tableContext.selectionExtractor;
|
|
76
|
+
if (rowIndex != undefined) {
|
|
77
|
+
const maybePromise = tableContext.selectionExtractor(row.original);
|
|
78
|
+
if (maybePromise instanceof Promise) {
|
|
79
|
+
maybePromise.then((it) => {
|
|
80
|
+
id = it;
|
|
81
|
+
}).catch(devCatch);
|
|
152
82
|
} else {
|
|
153
|
-
|
|
83
|
+
id = maybePromise;
|
|
154
84
|
}
|
|
85
|
+
} else {
|
|
86
|
+
id = undefined;
|
|
155
87
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
88
|
+
});
|
|
89
|
+
const showHighlightButton = $derived(rowIndex != null && includeHighlight);
|
|
90
|
+
$effect(() => {
|
|
91
|
+
void expandedColumnDef;
|
|
92
|
+
untrack(() => {
|
|
93
|
+
// Guard: if all columns have been hidden the cells arrays are
|
|
94
|
+
// empty; `firstCell` would otherwise be undefined.
|
|
95
|
+
if (!firstCell) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (expandedColumnDef && expandedColumnDef.id != prevExpandedColumnDef?.id) {
|
|
99
|
+
prevExpandedColumnDef = expandedColumnDef;
|
|
100
|
+
innerColumnDefs = expandedColumnDef.getInnerColumnDefs(firstCell.row.original, firstCell.row.originalIndex);
|
|
101
|
+
innerDataPromise = expandedColumnDef.accessorFn(firstCell.row.original, firstCell.row.originalIndex);
|
|
102
|
+
innerTableName = expandedColumnDef.innerTableName;
|
|
103
|
+
} else if (!expandedColumnDef || tableContext.columnVisibility[expandedColumnDef.id] === false) {
|
|
104
|
+
innerTableName = undefined;
|
|
105
|
+
expandedColumnDef = prevExpandedColumnDef = innerDataPromise = undefined;
|
|
106
|
+
innerColumnDefs = { defs: [] };
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
function onExpandChange(columnDef) {
|
|
111
|
+
if (expandedColumnDef?.id === columnDef.id) {
|
|
112
|
+
expandedColumnDef = undefined;
|
|
113
|
+
} else {
|
|
114
|
+
expandedColumnDef = columnDef;
|
|
173
115
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
{
|
|
213
|
-
{
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
{
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
{
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
</div>
|
|
244
|
-
|
|
245
|
-
{#
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
{
|
|
294
|
-
|
|
116
|
+
}
|
|
117
|
+
// Stable fallback name used when an ExpandDef does not supply its own
|
|
118
|
+
// `innerTableName`. Generating this once per row prevents localStorage
|
|
119
|
+
// preset keys from accumulating UUID-keyed garbage every expand toggle.
|
|
120
|
+
const fallbackInnerTableName = generateWeakId();
|
|
121
|
+
/**
|
|
122
|
+
* Inline style appended to a cell's `style="..."` when its column opts
|
|
123
|
+
* into `wrapValue`. The hooks switch the leaf cell's `white-space`,
|
|
124
|
+
* `overflow-x`, and `height` to wrap-friendly values. Implemented as
|
|
125
|
+
* CSS-variable overrides so the table-cell-basic mixin in
|
|
126
|
+
* `_mixins.scss` consumes them via `var(--cell-* , fallback)`.
|
|
127
|
+
*/
|
|
128
|
+
function cellWrapStyle(cell) {
|
|
129
|
+
return cell.column.columnDef.wrapValue ? "--cell-white-space: normal; --cell-overflow-x: visible; --cell-height: auto; --cell-min-height: var(--height);" : "";
|
|
130
|
+
}
|
|
131
|
+
</script>
|
|
132
|
+
|
|
133
|
+
<div
|
|
134
|
+
role="row"
|
|
135
|
+
class="datatable-row"
|
|
136
|
+
class:hoverable
|
|
137
|
+
class:alt={tableContext.alternateRowColours && odd}
|
|
138
|
+
class:highlighted
|
|
139
|
+
>
|
|
140
|
+
{#if showHighlightButton}
|
|
141
|
+
<div
|
|
142
|
+
role="cell"
|
|
143
|
+
class="cell highlight-cell pinned-left"
|
|
144
|
+
style="left: 0px"
|
|
145
|
+
>
|
|
146
|
+
<ColumnHighlight
|
|
147
|
+
rowIndex={rowIndex ??
|
|
148
|
+
(() => {
|
|
149
|
+
if (dev) {
|
|
150
|
+
console.error(`column had invalid row index: ${rowIndex}`);
|
|
151
|
+
}
|
|
152
|
+
return -1;
|
|
153
|
+
})()}
|
|
154
|
+
{highlighted}
|
|
155
|
+
toggleHighlightedRow={() => {
|
|
156
|
+
tableContext.toggleHighlightedRow(row.original)?.catch(devCatch);
|
|
157
|
+
}}
|
|
158
|
+
/>
|
|
159
|
+
</div>
|
|
160
|
+
{/if}
|
|
161
|
+
{#each leftCells as cell, index (cell.column.id)}
|
|
162
|
+
<div
|
|
163
|
+
role="cell"
|
|
164
|
+
class="cell pinned-left"
|
|
165
|
+
style="left: {leftOffsets[index]}px; {cellWrapStyle(cell)}"
|
|
166
|
+
>
|
|
167
|
+
<TableColumn
|
|
168
|
+
{cell}
|
|
169
|
+
{expandedColumnDef}
|
|
170
|
+
{onExpandChange}
|
|
171
|
+
/>
|
|
172
|
+
</div>
|
|
173
|
+
{/each}
|
|
174
|
+
{#each centreCells as cell (cell.column.id)}
|
|
175
|
+
<div
|
|
176
|
+
role="cell"
|
|
177
|
+
class="cell"
|
|
178
|
+
style={cellWrapStyle(cell)}
|
|
179
|
+
>
|
|
180
|
+
<TableColumn
|
|
181
|
+
{cell}
|
|
182
|
+
{expandedColumnDef}
|
|
183
|
+
{onExpandChange}
|
|
184
|
+
/>
|
|
185
|
+
</div>
|
|
186
|
+
{/each}
|
|
187
|
+
{#each rightCells as cell, index (cell.column.id)}
|
|
188
|
+
<div
|
|
189
|
+
role="cell"
|
|
190
|
+
class="cell pinned-right"
|
|
191
|
+
style="right: {rightOffsets[index]}px; {cellWrapStyle(cell)}"
|
|
192
|
+
>
|
|
193
|
+
<TableColumn
|
|
194
|
+
{cell}
|
|
195
|
+
{expandedColumnDef}
|
|
196
|
+
{onExpandChange}
|
|
197
|
+
/>
|
|
198
|
+
</div>
|
|
199
|
+
{/each}
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
{#if expandedColumnDef}
|
|
203
|
+
<div
|
|
204
|
+
role="row"
|
|
205
|
+
class="datatable-row expand-row"
|
|
206
|
+
>
|
|
207
|
+
<div
|
|
208
|
+
role="cell"
|
|
209
|
+
class="cell expand-cell"
|
|
210
|
+
>
|
|
211
|
+
{#await innerDataPromise}
|
|
212
|
+
loading…
|
|
213
|
+
{:then data}
|
|
214
|
+
{#if data && data.length}
|
|
215
|
+
{@const options = expandedColumnDef.innerTableOptions}
|
|
216
|
+
{#if innerTableName}
|
|
217
|
+
{#key innerTableName}
|
|
218
|
+
<NestedTable
|
|
219
|
+
tableName={innerTableName}
|
|
220
|
+
{data}
|
|
221
|
+
columnDefWrapper={innerColumnDefs}
|
|
222
|
+
{options}
|
|
223
|
+
getUserId={tableContext.getUserId}
|
|
224
|
+
/>
|
|
225
|
+
{/key}
|
|
226
|
+
{:else}
|
|
227
|
+
<NestedTable
|
|
228
|
+
tableName={fallbackInnerTableName}
|
|
229
|
+
{data}
|
|
230
|
+
columnDefWrapper={innerColumnDefs}
|
|
231
|
+
{options}
|
|
232
|
+
getUserId={tableContext.getUserId}
|
|
233
|
+
/>
|
|
234
|
+
{/if}
|
|
235
|
+
{:else if !data}
|
|
236
|
+
Error Fetching data
|
|
237
|
+
{:else}
|
|
238
|
+
No Data
|
|
239
|
+
{/if}
|
|
240
|
+
{:catch e}
|
|
241
|
+
{#if dev}
|
|
242
|
+
error: {e}
|
|
243
|
+
<!-- eslint-disable-next-line svelte/no-at-debug-tags -->
|
|
244
|
+
{@debug e}
|
|
245
|
+
{/if}
|
|
246
|
+
Error Fetching data
|
|
247
|
+
{/await}
|
|
248
|
+
</div>
|
|
249
|
+
</div>
|
|
250
|
+
{/if}
|
|
251
|
+
|
|
295
252
|
<style>.datatable-row {
|
|
296
253
|
display: grid;
|
|
297
254
|
grid-template-columns: var(--cols);
|
|
@@ -356,4 +313,4 @@
|
|
|
356
313
|
padding: 0;
|
|
357
314
|
display: block;
|
|
358
315
|
width: 100%;
|
|
359
|
-
}</style>
|
|
316
|
+
}</style>
|