@lavalogic/scoria 0.24.0 → 0.25.1
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/dist/Components/Base/ContextWrapper.svelte +1 -0
- package/dist/Components/Base/Pagination.svelte +28 -7
- package/dist/Components/Base/Pagination.svelte.d.ts +8 -0
- package/dist/Components/Base/PaginationProps.d.ts +4 -2
- package/dist/Components/Base/Snippets.svelte +3 -0
- package/dist/Components/Base/Snippets.svelte.d.ts +1 -0
- package/dist/Components/Contexts/ContextMenu.svelte +87 -8
- package/dist/Components/Contexts/ContextMenuOption.svelte +35 -9
- package/dist/Components/Contexts/ContextMenuOptionProps.d.ts +1 -0
- package/dist/Components/Contexts/MaybeFocusable.d.ts +3 -0
- package/dist/Components/Contexts/MaybeFocusable.js +1 -0
- package/dist/Components/Contexts/Toast.svelte +18 -10
- package/dist/Components/HorizontalTabGroup.svelte +0 -23
- package/dist/Components/NumberInput.svelte +13 -8
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +28 -20
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +22 -53
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +32 -23
- package/dist/Components/Table/Body/Rows/TableRow.svelte +86 -60
- package/dist/Components/Table/Body/Rows/TableRow.svelte.d.ts +22 -13
- package/dist/Components/Table/Body/TableBody.svelte +23 -28
- package/dist/Components/Table/Body/TableBody.svelte.d.ts +10 -2
- package/dist/Components/Table/Body/TableBodyProps.d.ts +2 -0
- package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +8 -8
- package/dist/Components/Table/Table.svelte +54 -56
- package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +2 -2
- package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +1 -1
- package/dist/Components/Table/Types/Context/TableContext.svelte.js +4 -1
- package/dist/Components/Touch/NumberKeyboard.svelte +58 -19
- package/dist/Components/VerticalTabGroup.svelte +1 -29
- package/dist/Types/Internal/TabOption.d.ts +0 -1
- package/package.json +1 -1
|
@@ -51,33 +51,42 @@
|
|
|
51
51
|
);
|
|
52
52
|
|
|
53
53
|
let isBeingEdited = $derived(false);
|
|
54
|
+
|
|
55
|
+
function handleIsEditable(isEditable: boolean): Promise<void> {
|
|
56
|
+
if (isEditable) {
|
|
57
|
+
return tick().then(() => {
|
|
58
|
+
isBeingEdited = true;
|
|
59
|
+
});
|
|
60
|
+
} else {
|
|
61
|
+
if (isBeingEdited) {
|
|
62
|
+
return tick()
|
|
63
|
+
.then(() => {
|
|
64
|
+
if (!tableContext.singleClickEditing) {
|
|
65
|
+
tableContext.focusStartIsBeingEdited = false;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
isBeingEdited = false;
|
|
69
|
+
})
|
|
70
|
+
.catch(devCatch);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return Promise.resolve();
|
|
75
|
+
}
|
|
76
|
+
|
|
54
77
|
$effect(() => {
|
|
55
78
|
void editable;
|
|
56
79
|
if (wantsToBeEdited) {
|
|
57
|
-
editable
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return
|
|
61
|
-
|
|
62
|
-
});
|
|
63
|
-
} else {
|
|
64
|
-
if (isBeingEdited) {
|
|
65
|
-
return tick()
|
|
66
|
-
.then(() => {
|
|
67
|
-
if (!tableContext.singleClickEditing) {
|
|
68
|
-
tableContext.focusStartIsBeingEdited = false;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
isBeingEdited = false;
|
|
72
|
-
})
|
|
73
|
-
.catch(devCatch);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return;
|
|
78
|
-
})
|
|
80
|
+
if (editable instanceof Promise) {
|
|
81
|
+
editable
|
|
82
|
+
.then((isEditable) => {
|
|
83
|
+
return handleIsEditable(isEditable);
|
|
84
|
+
})
|
|
79
85
|
|
|
80
|
-
|
|
86
|
+
.catch(devCatch);
|
|
87
|
+
} else {
|
|
88
|
+
handleIsEditable(editable).catch(devCatch);
|
|
89
|
+
}
|
|
81
90
|
} else {
|
|
82
91
|
tick()
|
|
83
92
|
.then(() => {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
<script
|
|
4
4
|
lang="ts"
|
|
5
|
-
generics="T extends object"
|
|
5
|
+
generics="T extends object, RowIdType extends Primitive"
|
|
6
6
|
>
|
|
7
7
|
import { dev } from '$app/environment';
|
|
8
8
|
import { devCatch, generateShortUUID } from '../../../../Helpers/Helpers.svelte.js';
|
|
@@ -12,10 +12,12 @@
|
|
|
12
12
|
import type { DefsWrapper } from '../../Types/Columns/DefsWrapper.js';
|
|
13
13
|
import type { TableCell } from '../../Types/Columns/TableCell.js';
|
|
14
14
|
import { TableContext } from '../../Types/Context/TableContext.svelte.js';
|
|
15
|
+
import { type Primitive } from '../../Types/Context/TableInitOptions.js';
|
|
15
16
|
import ColumnHighlight from './ColumnHighlight.svelte';
|
|
16
17
|
import TableColumn from './Columns/TableColumn.svelte';
|
|
17
18
|
import type { TableRowProps } from './TableRowProps.js';
|
|
18
|
-
|
|
19
|
+
|
|
20
|
+
const tableContext = getContext<TableContext<T, RowIdType>>(TableContext.identifier);
|
|
19
21
|
|
|
20
22
|
const { row, side, odd = false, customHeight, includeHighlight }: TableRowProps<T> = $props();
|
|
21
23
|
|
|
@@ -50,10 +52,28 @@
|
|
|
50
52
|
let prevExpandedColumnDef: ExpandDef<T, object> | undefined = $state();
|
|
51
53
|
|
|
52
54
|
const rowIndex = $derived(cells.at(0) && cells[0].row.visibleIndex);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
)
|
|
55
|
+
let id = $state<RowIdType | undefined>();
|
|
56
|
+
const highlighted = $derived(id != undefined && tableContext.highlightedItems.has(id));
|
|
57
|
+
|
|
58
|
+
$effect(() => {
|
|
59
|
+
void row.original;
|
|
60
|
+
void tableContext.selectionExtractor;
|
|
61
|
+
|
|
62
|
+
if (rowIndex != undefined) {
|
|
63
|
+
const maybePromise = tableContext.selectionExtractor(row.original);
|
|
64
|
+
if (maybePromise instanceof Promise) {
|
|
65
|
+
maybePromise
|
|
66
|
+
.then((it) => {
|
|
67
|
+
id = it;
|
|
68
|
+
})
|
|
69
|
+
.catch(devCatch);
|
|
70
|
+
} else {
|
|
71
|
+
id = maybePromise;
|
|
72
|
+
}
|
|
73
|
+
} else {
|
|
74
|
+
id = undefined;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
57
77
|
|
|
58
78
|
const showHighlightButton = $derived(rowIndex != null && includeHighlight);
|
|
59
79
|
|
|
@@ -94,66 +114,70 @@
|
|
|
94
114
|
}
|
|
95
115
|
}
|
|
96
116
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
117
|
+
let trRef: HTMLTableRowElement | undefined = $state();
|
|
118
|
+
let _trHeight = $state(0);
|
|
119
|
+
|
|
120
|
+
let innerTrRef: HTMLTableRowElement | undefined = $state();
|
|
121
|
+
let _innerTrHeight = $state(0);
|
|
122
|
+
|
|
123
|
+
$effect(() => {
|
|
124
|
+
void trRef;
|
|
125
|
+
void customHeight;
|
|
126
|
+
|
|
127
|
+
return untrack(() => {
|
|
128
|
+
if (trRef && customHeight == null) {
|
|
129
|
+
const observer = new ResizeObserver((entries) => {
|
|
130
|
+
_trHeight = entries[0].borderBoxSize[0].blockSize;
|
|
131
|
+
});
|
|
132
|
+
observer.observe(trRef);
|
|
133
|
+
|
|
134
|
+
const currenttrRef = trRef;
|
|
135
|
+
return () => {
|
|
136
|
+
observer.unobserve(currenttrRef);
|
|
137
|
+
_trHeight = 0;
|
|
138
|
+
};
|
|
139
|
+
} else {
|
|
140
|
+
_trHeight = 0;
|
|
141
|
+
}
|
|
142
|
+
return () => {};
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
$effect(() => {
|
|
147
|
+
void innerTrRef;
|
|
148
|
+
return untrack(() => {
|
|
149
|
+
if (innerTrRef) {
|
|
150
|
+
const observer = new ResizeObserver((entries) => {
|
|
151
|
+
_innerTrHeight = entries[0].borderBoxSize[0].blockSize;
|
|
152
|
+
});
|
|
153
|
+
observer.observe(innerTrRef);
|
|
154
|
+
|
|
155
|
+
const currentinnerTrRef = innerTrRef;
|
|
156
|
+
return () => {
|
|
157
|
+
observer.unobserve(currentinnerTrRef);
|
|
158
|
+
};
|
|
159
|
+
} else {
|
|
160
|
+
_innerTrHeight = 0;
|
|
161
|
+
}
|
|
162
|
+
return () => {};
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const _totalTrHeight = $derived(_trHeight + _innerTrHeight);
|
|
167
|
+
export const totalTrHeight = {
|
|
168
|
+
get value() {
|
|
169
|
+
return _totalTrHeight;
|
|
170
|
+
},
|
|
171
|
+
};
|
|
146
172
|
</script>
|
|
147
173
|
|
|
148
|
-
<!-- onMouseEnter={onMouseEnter}
|
|
149
|
-
onMouseLeave={onMouseLeave} -->
|
|
150
174
|
<tr
|
|
151
175
|
class:hoverable
|
|
152
176
|
class:alt={tableContext.alternateRowColours && odd}
|
|
153
177
|
class:highlighted
|
|
154
178
|
style={customHeight ? `height: ${customHeight}px !important;` : null}
|
|
179
|
+
bind:this={trRef}
|
|
155
180
|
>
|
|
156
|
-
<!-- bind:this={trRef} -->
|
|
157
181
|
{#if showHighlightButton}
|
|
158
182
|
<ColumnHighlight
|
|
159
183
|
rowIndex={rowIndex ??
|
|
@@ -181,8 +205,10 @@ onMouseLeave={onMouseLeave} -->
|
|
|
181
205
|
{#if expandedColumnDef}
|
|
182
206
|
<!-- TODO re-test and re-implement these -->
|
|
183
207
|
<!-- transition:slide={{ duration: 150, axis: 'y', delay: 0 }} -->
|
|
184
|
-
|
|
185
|
-
|
|
208
|
+
<tr
|
|
209
|
+
class="inner-table"
|
|
210
|
+
bind:this={innerTrRef}
|
|
211
|
+
>
|
|
186
212
|
{#await innerDataPromise}
|
|
187
213
|
<td {colspan}>loading…</td>
|
|
188
214
|
{:then data}
|
|
@@ -1,25 +1,34 @@
|
|
|
1
|
+
import { type Primitive } from '../../Types/Context/TableInitOptions.js';
|
|
1
2
|
import type { TableRowProps } from './TableRowProps.js';
|
|
2
|
-
declare function $$render<T extends object>(): {
|
|
3
|
+
declare function $$render<T extends object, RowIdType extends Primitive>(): {
|
|
3
4
|
props: TableRowProps<T>;
|
|
4
|
-
exports: {
|
|
5
|
+
exports: {
|
|
6
|
+
totalTrHeight: {
|
|
7
|
+
readonly value: number;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
5
10
|
bindings: "";
|
|
6
11
|
slots: {};
|
|
7
12
|
events: {};
|
|
8
13
|
};
|
|
9
|
-
declare class __sveltets_Render<T extends object> {
|
|
10
|
-
props(): ReturnType<typeof $$render<T>>['props'];
|
|
11
|
-
events(): ReturnType<typeof $$render<T>>['events'];
|
|
12
|
-
slots(): ReturnType<typeof $$render<T>>['slots'];
|
|
14
|
+
declare class __sveltets_Render<T extends object, RowIdType extends Primitive> {
|
|
15
|
+
props(): ReturnType<typeof $$render<T, RowIdType>>['props'];
|
|
16
|
+
events(): ReturnType<typeof $$render<T, RowIdType>>['events'];
|
|
17
|
+
slots(): ReturnType<typeof $$render<T, RowIdType>>['slots'];
|
|
13
18
|
bindings(): "";
|
|
14
|
-
exports(): {
|
|
19
|
+
exports(): {
|
|
20
|
+
totalTrHeight: {
|
|
21
|
+
readonly value: number;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
15
24
|
}
|
|
16
25
|
interface $$IsomorphicComponent {
|
|
17
|
-
new <T extends object>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
|
|
18
|
-
$$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
|
|
19
|
-
} & ReturnType<__sveltets_Render<T>['exports']>;
|
|
20
|
-
<T extends object>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
|
|
21
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
26
|
+
new <T extends object, RowIdType extends Primitive>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, RowIdType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, RowIdType>['props']>, ReturnType<__sveltets_Render<T, RowIdType>['events']>, ReturnType<__sveltets_Render<T, RowIdType>['slots']>> & {
|
|
27
|
+
$$bindings?: ReturnType<__sveltets_Render<T, RowIdType>['bindings']>;
|
|
28
|
+
} & ReturnType<__sveltets_Render<T, RowIdType>['exports']>;
|
|
29
|
+
<T extends object, RowIdType extends Primitive>(internal: unknown, props: ReturnType<__sveltets_Render<T, RowIdType>['props']> & {}): ReturnType<__sveltets_Render<T, RowIdType>['exports']>;
|
|
30
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
22
31
|
}
|
|
23
32
|
declare const TableRow: $$IsomorphicComponent;
|
|
24
|
-
type TableRow<T extends object> = InstanceType<typeof TableRow<T>>;
|
|
33
|
+
type TableRow<T extends object, RowIdType extends Primitive> = InstanceType<typeof TableRow<T, RowIdType>>;
|
|
25
34
|
export default TableRow;
|
|
@@ -4,38 +4,34 @@
|
|
|
4
4
|
lang="ts"
|
|
5
5
|
generics="T extends object"
|
|
6
6
|
>
|
|
7
|
+
import type { RefWrapper } from '../../../Types/Internal/RefWrapper.js';
|
|
7
8
|
import { getContext } from 'svelte';
|
|
8
9
|
import { TableContext } from '../Types/Context/TableContext.svelte.js';
|
|
9
10
|
import QuickSearchCell from './QuickSearchCell.svelte';
|
|
10
11
|
import TableRow from './Rows/TableRow.svelte';
|
|
11
12
|
import type { TableBodyProps } from './TableBodyProps.js';
|
|
12
13
|
|
|
13
|
-
let {
|
|
14
|
-
side,
|
|
15
|
-
// heights,
|
|
16
|
-
columns,
|
|
17
|
-
includeHighlight,
|
|
18
|
-
}: TableBodyProps<T> = $props();
|
|
14
|
+
let { side, heights, columns, includeHighlight }: TableBodyProps<T> = $props();
|
|
19
15
|
|
|
20
16
|
const tableContext = getContext<TableContext<T, never>>(TableContext.identifier);
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
// const _rowHeights = $derived(
|
|
27
|
-
// // HACK terrible type casting due to svelte type gen not being liked by eslint
|
|
28
|
-
// rows.map((it) => (it as HasHeight | undefined)?.trHeight.value ?? 0)
|
|
29
|
-
// );
|
|
30
|
-
// export const rowHeights = {
|
|
31
|
-
// get value() {
|
|
32
|
-
// return _rowHeights;
|
|
33
|
-
// }
|
|
34
|
-
// };
|
|
18
|
+
type HasHeight = {
|
|
19
|
+
totalTrHeight?: RefWrapper<number>;
|
|
20
|
+
};
|
|
21
|
+
const rows: Array<TableRow<T, never>> = $state([]);
|
|
35
22
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
23
|
+
const _rowHeights = $derived(
|
|
24
|
+
// HACK terrible type casting due to svelte type gen not being liked by eslint
|
|
25
|
+
rows.map((it) => {
|
|
26
|
+
return (it as HasHeight | undefined)?.totalTrHeight?.value ?? 0;
|
|
27
|
+
})
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
export const rowHeights = {
|
|
31
|
+
get value() {
|
|
32
|
+
return _rowHeights;
|
|
33
|
+
},
|
|
34
|
+
};
|
|
39
35
|
</script>
|
|
40
36
|
|
|
41
37
|
<tbody>
|
|
@@ -54,18 +50,17 @@
|
|
|
54
50
|
{/if}
|
|
55
51
|
|
|
56
52
|
{#each tableContext.paginationRowModel.rows as row, index (row.visibleIndex)}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
<!-- {customHeight} -->
|
|
53
|
+
{@const customHeight = heights[index]?.applyTo.includes(side)
|
|
54
|
+
? heights[index].maxHeight
|
|
55
|
+
: undefined}
|
|
61
56
|
<TableRow
|
|
62
|
-
customHeight
|
|
57
|
+
{customHeight}
|
|
63
58
|
{includeHighlight}
|
|
64
59
|
{row}
|
|
65
60
|
{side}
|
|
66
61
|
odd={index % 2 == 1}
|
|
62
|
+
bind:this={rows[index]}
|
|
67
63
|
/>
|
|
68
|
-
<!-- bind:this={rows[index]} -->
|
|
69
64
|
{/each}
|
|
70
65
|
</tbody>
|
|
71
66
|
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { TableBodyProps } from './TableBodyProps.js';
|
|
2
2
|
declare function $$render<T extends object>(): {
|
|
3
3
|
props: TableBodyProps<T>;
|
|
4
|
-
exports: {
|
|
4
|
+
exports: {
|
|
5
|
+
rowHeights: {
|
|
6
|
+
readonly value: number[];
|
|
7
|
+
};
|
|
8
|
+
};
|
|
5
9
|
bindings: "";
|
|
6
10
|
slots: {};
|
|
7
11
|
events: {};
|
|
@@ -11,7 +15,11 @@ declare class __sveltets_Render<T extends object> {
|
|
|
11
15
|
events(): ReturnType<typeof $$render<T>>['events'];
|
|
12
16
|
slots(): ReturnType<typeof $$render<T>>['slots'];
|
|
13
17
|
bindings(): "";
|
|
14
|
-
exports(): {
|
|
18
|
+
exports(): {
|
|
19
|
+
rowHeights: {
|
|
20
|
+
readonly value: number[];
|
|
21
|
+
};
|
|
22
|
+
};
|
|
15
23
|
}
|
|
16
24
|
interface $$IsomorphicComponent {
|
|
17
25
|
new <T extends object>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Column } from '../Types/Columns/Column.js';
|
|
2
|
+
import type { HeightData } from './HeightData.js';
|
|
2
3
|
export interface TableBodyProps<T extends object> {
|
|
3
4
|
side: 'left' | 'centre' | 'right';
|
|
5
|
+
heights: Array<HeightData<T>>;
|
|
4
6
|
columns: Array<Column<T>>;
|
|
5
7
|
includeHighlight: boolean;
|
|
6
8
|
}
|
|
@@ -60,7 +60,7 @@ export function generateExampleItemColumnDefs(modal) {
|
|
|
60
60
|
new ValidityDef({
|
|
61
61
|
header: 'Valid',
|
|
62
62
|
id: 'valid',
|
|
63
|
-
debug: true,
|
|
63
|
+
// debug: true,
|
|
64
64
|
isValid,
|
|
65
65
|
modal,
|
|
66
66
|
}),
|
|
@@ -82,7 +82,7 @@ export function generateExampleItemColumnDefs(modal) {
|
|
|
82
82
|
getDisplayValue: (item) => {
|
|
83
83
|
return item.simulatedQuery?.value ?? null;
|
|
84
84
|
},
|
|
85
|
-
isEditable: () =>
|
|
85
|
+
isEditable: () => true,
|
|
86
86
|
id: 'simulatedQuery',
|
|
87
87
|
query: async (_v, item) => {
|
|
88
88
|
void item.someDate;
|
|
@@ -101,13 +101,13 @@ export function generateExampleItemColumnDefs(modal) {
|
|
|
101
101
|
new TextInputDef({
|
|
102
102
|
header: 'Name',
|
|
103
103
|
id: 'name',
|
|
104
|
-
isEditable: () =>
|
|
104
|
+
isEditable: () => true,
|
|
105
105
|
isValid,
|
|
106
106
|
}),
|
|
107
107
|
new NumberInputDef({
|
|
108
108
|
header: 'Some Number',
|
|
109
109
|
id: 'someNumber',
|
|
110
|
-
isEditable: () =>
|
|
110
|
+
isEditable: () => true,
|
|
111
111
|
min: 0,
|
|
112
112
|
max: 12345,
|
|
113
113
|
isValid,
|
|
@@ -150,20 +150,20 @@ export function generateExampleItemColumnDefs(modal) {
|
|
|
150
150
|
new DateInputDef({
|
|
151
151
|
header: 'Some Date With Time',
|
|
152
152
|
id: 'someDateWithTime',
|
|
153
|
-
isEditable: () =>
|
|
153
|
+
isEditable: () => true,
|
|
154
154
|
showTime: true,
|
|
155
155
|
isValid,
|
|
156
156
|
}),
|
|
157
157
|
new DateInputDef({
|
|
158
158
|
header: 'Flo Date',
|
|
159
159
|
id: 'floDate',
|
|
160
|
-
isEditable: () =>
|
|
160
|
+
isEditable: () => true,
|
|
161
161
|
defaultHidden: true,
|
|
162
162
|
}),
|
|
163
163
|
new DateInputDef({
|
|
164
164
|
header: 'Flo Date With Time',
|
|
165
165
|
id: 'floDateWithTime',
|
|
166
|
-
isEditable: () =>
|
|
166
|
+
isEditable: () => true,
|
|
167
167
|
defaultHidden: true,
|
|
168
168
|
showTime: true,
|
|
169
169
|
isValid,
|
|
@@ -194,7 +194,7 @@ export function generateExampleItemColumnDefs(modal) {
|
|
|
194
194
|
];
|
|
195
195
|
},
|
|
196
196
|
getDisplayValue: (item) => item.someSelect,
|
|
197
|
-
isEditable: () =>
|
|
197
|
+
isEditable: () => true,
|
|
198
198
|
isValid,
|
|
199
199
|
}),
|
|
200
200
|
new BubbleDef({
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import type { RefWrapper } from '../../Types/Internal/RefWrapper.js';
|
|
13
13
|
import { getContext, onMount, setContext, tick, untrack } from 'svelte';
|
|
14
14
|
import LoadingOverlay from '../LoadingOverlay.svelte';
|
|
15
|
+
import type { HeightData } from './Body/HeightData.js';
|
|
15
16
|
import { shownPopup } from './Body/Rows/Columns/ActionsCell.svelte';
|
|
16
17
|
import TableBody from './Body/TableBody.svelte';
|
|
17
18
|
import TableHead from './Headers/TableHead.svelte';
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
const { nested = false, tableContext }: TableProps<T, IdType> = $props();
|
|
49
50
|
|
|
50
51
|
// NOTE: known limitation. This is passed as a wrapper, and they should never require reassignment. It is deeply reactive
|
|
52
|
+
// svelte-ignore state_referenced_locally
|
|
51
53
|
setContext(TableContext.identifier, tableContext);
|
|
52
54
|
|
|
53
55
|
const { openContextMenu: _openContextMenu } = getContext<ContextMenuContext>(
|
|
@@ -181,16 +183,7 @@
|
|
|
181
183
|
const minNestedHeight = $derived(20 * remPxRatio);
|
|
182
184
|
|
|
183
185
|
// HACK please figure this one out
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
//intentionally not using derived here as we sometimes need to manually change it
|
|
187
|
-
// while also allowing it to auto-pickup min height mutations
|
|
188
|
-
// eslint-disable-next-line svelte/prefer-writable-derived
|
|
189
|
-
let nestedHeight = $state(0);
|
|
190
|
-
|
|
191
|
-
$effect(() => {
|
|
192
|
-
nestedHeight = minNestedHeight;
|
|
193
|
-
});
|
|
186
|
+
let nestedHeight = $derived(minNestedHeight);
|
|
194
187
|
|
|
195
188
|
let tableRef: HTMLDivElement | undefined = undefined;
|
|
196
189
|
let mousedDownEmptySpace = $state(false);
|
|
@@ -275,46 +268,51 @@
|
|
|
275
268
|
}
|
|
276
269
|
});
|
|
277
270
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
271
|
+
type SvelteTableElement = {
|
|
272
|
+
rowHeights: RefWrapper<Array<number>>;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
let leftTable: SvelteTableElement | undefined = $state();
|
|
276
|
+
let centreTable: SvelteTableElement | undefined = $state();
|
|
277
|
+
let rightTable: SvelteTableElement | undefined = $state();
|
|
278
|
+
|
|
279
|
+
const totalRowSizes: Array<HeightData<T>> = $derived.by(() => {
|
|
280
|
+
if (!leftTable || !centreTable || !rightTable) {
|
|
281
|
+
return [];
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// console.debug(`got refs for all tables`);
|
|
285
|
+
const centre = centreTable.rowHeights.value;
|
|
286
|
+
const right = rightTable.rowHeights.value;
|
|
287
|
+
|
|
288
|
+
return leftTable.rowHeights.value.map((_leftHeight, index) => {
|
|
289
|
+
const leftHeight = _leftHeight || 0;
|
|
290
|
+
const centreHeight = centre[index] || 0;
|
|
291
|
+
const rightHeight = right[index] || 0;
|
|
292
|
+
|
|
293
|
+
const maxHeight = Math.max(leftHeight, centreHeight, rightHeight);
|
|
294
|
+
const applyTo: HeightData<T>['applyTo'] = [];
|
|
295
|
+
|
|
296
|
+
if (leftHeight < maxHeight) {
|
|
297
|
+
// console.debug(`left (${leftHeight}) was lower than max (${maxHeight})`);
|
|
298
|
+
applyTo.push('left');
|
|
299
|
+
}
|
|
300
|
+
if (centreHeight < maxHeight) {
|
|
301
|
+
// console.debug(`centre (${centreHeight}) was lower than max (${maxHeight})`);
|
|
302
|
+
applyTo.push('centre');
|
|
303
|
+
}
|
|
304
|
+
if (rightHeight < maxHeight) {
|
|
305
|
+
// console.debug(`right (${rightHeight}) was lower than max (${maxHeight})`);
|
|
306
|
+
applyTo.push('right');
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return {
|
|
310
|
+
index,
|
|
311
|
+
applyTo,
|
|
312
|
+
maxHeight,
|
|
313
|
+
};
|
|
314
|
+
});
|
|
315
|
+
});
|
|
318
316
|
</script>
|
|
319
317
|
|
|
320
318
|
<svelte:window
|
|
@@ -427,9 +425,9 @@
|
|
|
427
425
|
includeHighlight={appropriateSide == 'left'}
|
|
428
426
|
columns={leftColumns}
|
|
429
427
|
side="left"
|
|
428
|
+
heights={totalRowSizes}
|
|
429
|
+
bind:this={leftTable}
|
|
430
430
|
/>
|
|
431
|
-
<!-- heights={totalRowSizes} -->
|
|
432
|
-
<!-- bind:this={leftTable} -->
|
|
433
431
|
</table>
|
|
434
432
|
<!-- {/if} -->
|
|
435
433
|
|
|
@@ -447,9 +445,9 @@
|
|
|
447
445
|
includeHighlight={appropriateSide == 'centre'}
|
|
448
446
|
columns={centreColumns}
|
|
449
447
|
side="centre"
|
|
448
|
+
heights={totalRowSizes}
|
|
449
|
+
bind:this={centreTable}
|
|
450
450
|
/>
|
|
451
|
-
<!-- heights={totalRowSizes}
|
|
452
|
-
bind:this={centreTable} -->
|
|
453
451
|
</table>
|
|
454
452
|
<!-- {/if} -->
|
|
455
453
|
|
|
@@ -466,9 +464,9 @@
|
|
|
466
464
|
includeHighlight={appropriateSide == 'right'}
|
|
467
465
|
columns={rightColumns}
|
|
468
466
|
side="right"
|
|
467
|
+
heights={totalRowSizes}
|
|
468
|
+
bind:this={rightTable}
|
|
469
469
|
/>
|
|
470
|
-
<!-- heights={totalRowSizes}
|
|
471
|
-
bind:this={rightTable} -->
|
|
472
470
|
</table>
|
|
473
471
|
<!-- {/if} -->
|
|
474
472
|
</div>
|
|
@@ -17,7 +17,7 @@ export interface ColumnDefProps<T extends object, in FilterFnType, out OptionsTy
|
|
|
17
17
|
defaultHidden?: boolean;
|
|
18
18
|
minSize?: Pixels;
|
|
19
19
|
width?: Pixels;
|
|
20
|
-
isEditable?: (item: T, index: number) => Promise<boolean>;
|
|
20
|
+
isEditable?: (item: T, index: number) => boolean | Promise<boolean>;
|
|
21
21
|
resizable?: boolean;
|
|
22
22
|
isValid?: ValidationFn<T>;
|
|
23
23
|
filterFn?: FilterFn<T, FilterFnType>;
|
|
@@ -57,7 +57,7 @@ export declare abstract class ColumnDef<T extends object, in FilterFnType = neve
|
|
|
57
57
|
set filterValueType(v: FilterValueType | undefined);
|
|
58
58
|
readonly getDisplayValue: ((item: T, index: number) => string | null | Promise<string | null>) | undefined;
|
|
59
59
|
toJSON(): ColumnJSONRepresentation;
|
|
60
|
-
readonly isEditable: (item: T, index: number) => Promise<boolean>;
|
|
60
|
+
readonly isEditable: (item: T, index: number) => boolean | Promise<boolean>;
|
|
61
61
|
readonly resizable: boolean;
|
|
62
62
|
readonly header: string | Snippet;
|
|
63
63
|
readonly getOptions?: () => Array<SelectOption<OptionsType>> | Promise<Array<SelectOption<OptionsType>>>;
|