@lavalogic/scoria 0.12.3 → 0.13.2

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.
Files changed (85) hide show
  1. package/dist/Components/Table/Body/QuickSearchCell.svelte +4 -5
  2. package/dist/Components/Table/Body/QuickSearchCell.svelte.d.ts +12 -12
  3. package/dist/Components/Table/Body/QuickSearchCellProps.d.ts +2 -2
  4. package/dist/Components/Table/Body/Rows/ColumnList.svelte +2 -2
  5. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +3 -3
  6. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte.d.ts +12 -12
  7. package/dist/Components/Table/Body/Rows/ColumnListRowProps.d.ts +2 -2
  8. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +26 -16
  9. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte.d.ts +1 -1
  10. package/dist/Components/Table/Body/Rows/Columns/ActionsCellProps.d.ts +2 -2
  11. package/dist/Components/Table/Body/Rows/Columns/ActionsColumn.d.ts +1 -1
  12. package/dist/Components/Table/Body/Rows/Columns/ActionsTableCell.d.ts +2 -2
  13. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +8 -6
  14. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +11 -3
  15. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte.d.ts +13 -12
  16. package/dist/Components/Table/Body/Rows/Columns/ExpandCellProps.d.ts +5 -4
  17. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +1 -1
  18. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +8 -6
  19. package/dist/Components/Table/Body/Rows/Columns/RowSelectionColumn.d.ts +2 -1
  20. package/dist/Components/Table/Body/Rows/Columns/RowSelectionTableCell.d.ts +2 -1
  21. package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +2 -1
  22. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +4 -4
  23. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte.d.ts +14 -14
  24. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +1 -1
  25. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +7 -4
  26. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte.d.ts +3 -2
  27. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +3 -3
  28. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +7 -6
  29. package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +2 -1
  30. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +8 -6
  31. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +7 -4
  32. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +8 -6
  33. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +8 -6
  34. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +3 -3
  35. package/dist/Components/Table/Body/Rows/TableRow.svelte +8 -7
  36. package/dist/Components/Table/Body/TableBody.svelte +19 -15
  37. package/dist/Components/Table/Body/TableBodyProps.d.ts +1 -1
  38. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.d.ts +1 -1
  39. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +17 -15
  40. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +29 -16
  41. package/dist/Components/Table/Headers/SelectAllHeader.svelte +1 -1
  42. package/dist/Components/Table/Headers/TableHead.svelte +4 -4
  43. package/dist/Components/Table/Misc/ColumnPanel.svelte +1 -1
  44. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +1 -1
  45. package/dist/Components/Table/Misc/FilterInput.svelte +3 -5
  46. package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -12
  47. package/dist/Components/Table/Misc/FilterInputProps.d.ts +2 -2
  48. package/dist/Components/Table/Misc/FilterPanel.svelte +2 -2
  49. package/dist/Components/Table/Misc/FilterPanelModal.svelte +2 -2
  50. package/dist/Components/Table/Misc/TableFooter.svelte +1 -1
  51. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +1 -1
  52. package/dist/Components/Table/Misc/TableSidebar.svelte +2 -1
  53. package/dist/Components/Table/Misc/ToolboxPanel.svelte +2 -2
  54. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +1 -1
  55. package/dist/Components/Table/NestedTable.svelte +12 -8
  56. package/dist/Components/Table/NestedTable.svelte.d.ts +15 -15
  57. package/dist/Components/Table/Table.svelte +111 -118
  58. package/dist/Components/Table/Table.svelte.d.ts +16 -15
  59. package/dist/Components/Table/Types/Columns/Column.d.ts +1 -1
  60. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +1 -1
  61. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +2 -2
  62. package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.d.ts +1 -1
  63. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +6 -6
  64. package/dist/Components/Table/Types/Columns/Definitions/JSONColumnDefSet.d.ts +1 -1
  65. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +2 -1
  66. package/dist/Components/Table/Types/Columns/DefsWrapper.d.ts +2 -2
  67. package/dist/Components/Table/Types/Columns/ExpandColumn.d.ts +3 -2
  68. package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +3 -2
  69. package/dist/Components/Table/Types/Context/ITable.d.ts +5 -5
  70. package/dist/Components/Table/Types/Context/Row.d.ts +3 -3
  71. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +40 -37
  72. package/dist/Components/Table/Types/Context/TableContext.svelte.js +318 -279
  73. package/dist/Components/Table/Types/Context/TableInitOptions.d.ts +4 -2
  74. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +1 -1
  75. package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +1 -2
  76. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.d.ts +2 -1
  77. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.js +31 -8
  78. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +2 -1
  79. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +4 -1
  80. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.d.ts +3 -3
  81. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.js +1 -1
  82. package/dist/Components/Table/Types/Header.d.ts +2 -2
  83. package/dist/Components/Table/Types/HeaderGroup.d.ts +1 -1
  84. package/dist/index.d.ts +1 -1
  85. package/package.json +11 -11
@@ -13,7 +13,8 @@
13
13
  import FilterPanel from './FilterPanel.svelte';
14
14
  import SidePanel from './SidePanel.svelte';
15
15
  import ToolboxPanel from './ToolboxPanel.svelte';
16
- const tableContext = getContext<TableContext<T>>(TableContext.identifier);
16
+
17
+ const tableContext = getContext<TableContext<T, never>>(TableContext.identifier);
17
18
 
18
19
  const panels = {
19
20
  [ExpandedPanel.None]: null,
@@ -1,11 +1,11 @@
1
1
  <svelte:options runes />
2
2
 
3
3
  <script lang="ts" generics="T extends object">
4
+ import Checkbox from '../../Checkbox.svelte';
4
5
  import { getContext } from 'svelte';
5
6
  import { TableContext } from '../Types/Context/TableContext.svelte.js';
6
- import Checkbox from '../../Checkbox.svelte';
7
7
 
8
- const tableContext = getContext<TableContext<T>>(TableContext.identifier);
8
+ const tableContext = getContext<TableContext<T, never>>(TableContext.identifier);
9
9
 
10
10
  const onCompactChange = (e: Event) => {
11
11
  tableContext.setIsCompact((e.target as HTMLInputElement).checked);
@@ -9,7 +9,7 @@
9
9
 
10
10
  let { onclose }: ToolboxPanelModalProps = $props();
11
11
 
12
- const tableContext = getContext<TableContext<T>>(TableContext.identifier);
12
+ const tableContext = getContext<TableContext<T, never>>(TableContext.identifier);
13
13
 
14
14
  const onCompactChange = (e: Event) => {
15
15
  tableContext.setIsCompact((e.target as HTMLInputElement).checked);
@@ -4,11 +4,14 @@
4
4
  import Table from './Table.svelte';
5
5
  import type { DefsWrapper } from './Types/Columns/DefsWrapper.js';
6
6
  import { TableContext } from './Types/Context/TableContext.svelte.js';
7
- import type { TableInitOptions } from './Types/Context/TableInitOptions.js';
7
+ import type { Primitive, TableInitOptions } from './Types/Context/TableInitOptions.js';
8
8
  import { LocalTableDataRepository } from './Types/DataRepository/LocalTableDataRepository.svelte.js';
9
9
  import { ToolbarPosition } from './Types/Toolbar/ToolbarPosition.js';
10
10
 
11
- const defaultOptions: Omit<TableInitOptions<object>, 'selectionExtractor' | 'getUserId'> = {
11
+ const defaultOptions: Omit<
12
+ TableInitOptions<object, never>,
13
+ 'selectionExtractor' | 'getUserId'
14
+ > = {
12
15
  allowCopy: false,
13
16
  enableResize: false,
14
17
  allowColumnReordering: false,
@@ -18,17 +21,18 @@
18
21
  displayFooter: false
19
22
  };
20
23
 
21
- export interface NestedTableProps<T extends object> {
24
+ export interface NestedTableProps<T extends object, IdType extends Primitive> {
22
25
  tableName: string;
23
26
  data: Array<T>;
24
27
  columnDefWrapper: DefsWrapper<T>;
25
- options: Pick<TableInitOptions<T>, 'selectionExtractor'> & Partial<TableInitOptions<T>>;
28
+ options: Pick<TableInitOptions<T, IdType>, 'selectionExtractor'> &
29
+ Partial<TableInitOptions<T, IdType>>;
26
30
  oncontextmenu?: (e: MouseEvent) => void;
27
31
  getUserId: () => string | undefined;
28
32
  }
29
33
  </script>
30
34
 
31
- <script lang="ts" generics="T extends object">
35
+ <script lang="ts" generics="T extends object,IdType extends Primitive">
32
36
  const {
33
37
  tableName,
34
38
  data,
@@ -36,7 +40,7 @@
36
40
  options,
37
41
  oncontextmenu,
38
42
  getUserId
39
- }: NestedTableProps<T> = $props();
43
+ }: NestedTableProps<T, IdType> = $props();
40
44
 
41
45
  const wrapper = {
42
46
  get value() {
@@ -53,8 +57,8 @@
53
57
  const dataRepo = $state(new LocalTableDataRepository(tableName, wrapper, () => getUserId()));
54
58
 
55
59
  // NOTE known limitation: These are passed as wrappers, and they should never require reassignment. They are deeply reactive
56
- const tableContext: TableContext<T> | undefined = $state(
57
- TableContext.init<T>(columnDefWrapper, tableName, dataRepo, {
60
+ const tableContext: TableContext<T, IdType> | undefined = $state(
61
+ TableContext.init<T, IdType>(columnDefWrapper, tableName, dataRepo, {
58
62
  ...defaultOptions,
59
63
  ...options,
60
64
  getUserId: () => getUserId()
@@ -1,34 +1,34 @@
1
1
  import type { DefsWrapper } from './Types/Columns/DefsWrapper.js';
2
- import type { TableInitOptions } from './Types/Context/TableInitOptions.js';
3
- export interface NestedTableProps<T extends object> {
2
+ import type { Primitive, TableInitOptions } from './Types/Context/TableInitOptions.js';
3
+ export interface NestedTableProps<T extends object, IdType extends Primitive> {
4
4
  tableName: string;
5
5
  data: Array<T>;
6
6
  columnDefWrapper: DefsWrapper<T>;
7
- options: Pick<TableInitOptions<T>, 'selectionExtractor'> & Partial<TableInitOptions<T>>;
7
+ options: Pick<TableInitOptions<T, IdType>, 'selectionExtractor'> & Partial<TableInitOptions<T, IdType>>;
8
8
  oncontextmenu?: (e: MouseEvent) => void;
9
9
  getUserId: () => string | undefined;
10
10
  }
11
- declare function $$render<T extends object>(): {
12
- props: NestedTableProps<T>;
11
+ declare function $$render<T extends object, IdType extends Primitive>(): {
12
+ props: NestedTableProps<T, IdType>;
13
13
  exports: {};
14
14
  bindings: "";
15
15
  slots: {};
16
16
  events: {};
17
17
  };
18
- declare class __sveltets_Render<T extends object> {
19
- props(): ReturnType<typeof $$render<T>>['props'];
20
- events(): ReturnType<typeof $$render<T>>['events'];
21
- slots(): ReturnType<typeof $$render<T>>['slots'];
18
+ declare class __sveltets_Render<T extends object, IdType extends Primitive> {
19
+ props(): ReturnType<typeof $$render<T, IdType>>['props'];
20
+ events(): ReturnType<typeof $$render<T, IdType>>['events'];
21
+ slots(): ReturnType<typeof $$render<T, IdType>>['slots'];
22
22
  bindings(): "";
23
23
  exports(): {};
24
24
  }
25
25
  interface $$IsomorphicComponent {
26
- 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']>> & {
27
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
28
- } & ReturnType<__sveltets_Render<T>['exports']>;
29
- <T extends object>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
30
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
26
+ new <T extends object, IdType extends Primitive>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, IdType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, IdType>['props']>, ReturnType<__sveltets_Render<T, IdType>['events']>, ReturnType<__sveltets_Render<T, IdType>['slots']>> & {
27
+ $$bindings?: ReturnType<__sveltets_Render<T, IdType>['bindings']>;
28
+ } & ReturnType<__sveltets_Render<T, IdType>['exports']>;
29
+ <T extends object, IdType extends Primitive>(internal: unknown, props: ReturnType<__sveltets_Render<T, IdType>['props']> & {}): ReturnType<__sveltets_Render<T, IdType>['exports']>;
30
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
31
31
  }
32
32
  declare const NestedTable: $$IsomorphicComponent;
33
- type NestedTable<T extends object> = InstanceType<typeof NestedTable<T>>;
33
+ type NestedTable<T extends object, IdType extends Primitive> = InstanceType<typeof NestedTable<T, IdType>>;
34
34
  export default NestedTable;
@@ -4,8 +4,8 @@
4
4
  import {
5
5
  ContextMenuContext,
6
6
  type IContextMenuOption
7
- } from '../../Contexts/ContextMenuContext.svelte.js';
8
- import { devCatch, refWrapper } from '../../Helpers/Helpers.svelte.js';
7
+ } from '../../Contexts/ContextMenuContext.svelte';
8
+ import { devCatch, refWrapper } from '../../Helpers/Helpers.svelte';
9
9
  import type { RefWrapper } from '../../Types/Internal/RefWrapper.js';
10
10
  import { getContext, onMount, setContext, tick, untrack } from 'svelte';
11
11
  import LoadingOverlay from '../LoadingOverlay.svelte';
@@ -16,7 +16,8 @@
16
16
  import TableFooter from './Misc/TableFooter.svelte';
17
17
  import TableHorizontalBar from './Misc/TableHorizontalBar.svelte';
18
18
  import TableSidebar from './Misc/TableSidebar.svelte';
19
- import { TableContext } from './Types/Context/TableContext.svelte.js';
19
+ import { TableContext } from './Types/Context/TableContext.svelte';
20
+ import type { Primitive } from './Types/Context/TableInitOptions.js';
20
21
  import { PaginationType } from './Types/Pagination/PaginationType.js';
21
22
  import { ToolbarPosition } from './Types/Toolbar/ToolbarPosition.js';
22
23
 
@@ -28,8 +29,8 @@
28
29
  }
29
30
  }
30
31
 
31
- export interface TableProps<T extends object> {
32
- readonly tableContext: TableContext<T>;
32
+ export interface TableProps<T extends object, IdType extends Primitive> {
33
+ readonly tableContext: TableContext<T, IdType>;
33
34
  nested?: boolean;
34
35
  }
35
36
 
@@ -38,13 +39,13 @@
38
39
  const openedQuickFilterSelect = refWrapper(null);
39
40
  </script>
40
41
 
41
- <script lang="ts" generics="T extends object">
42
- const { nested = false, tableContext }: TableProps<T> = $props();
42
+ <script lang="ts" generics="T extends object,IdType extends Primitive">
43
+ const { nested = false, tableContext }: TableProps<T, IdType> = $props();
43
44
 
44
45
  // NOTE: known limitation. This is passed as a wrapper, and they should never require reassignment. It is deeply reactive
45
46
  setContext(TableContext.identifier, tableContext);
46
47
 
47
- // const tableContext = getContext<TableContext<T>>(TableContext.identifier);
48
+ // $inspect(tableContext.showQuickFiltering);
48
49
 
49
50
  const { openContextMenu: _openContextMenu } = getContext<ContextMenuContext>(
50
51
  ContextMenuContext.identifier
@@ -265,16 +266,6 @@
265
266
  }
266
267
  });
267
268
 
268
- $effect(() => {
269
- void tableContext.dataRepo.data;
270
- untrack(() => {
271
- if (tableContext.paginationRepo?.paginationState.pageIndex != undefined) {
272
- tableContext.updateSelectedItems().catch(devCatch);
273
- tableContext.resetHighlightedRows();
274
- }
275
- });
276
- });
277
-
278
269
  const leftTotalSize = $derived(tableContext.table.getLeftTotalSize());
279
270
  const centreTotalSize = $derived(tableContext.table.getCenterTotalSize());
280
271
  const rightTotalSize = $derived(tableContext.table.getRightTotalSize());
@@ -364,114 +355,116 @@
364
355
  }}
365
356
  />
366
357
 
367
- <div class="grid" class:nested>
368
- {#if tableContext.dataRepo.isLoading}
369
- <LoadingOverlay absolute borderRadius="4px" />
370
- {/if}
371
-
372
- <div class="horizontal-bar" class:border={tableContext.toolbarPosition === ToolbarPosition.Top}>
373
- {#if tableContext.toolbarPosition === ToolbarPosition.Top}
374
- <TableHorizontalBar />
358
+ <svelte:boundary>
359
+ <div class="grid" class:nested>
360
+ {#if tableContext.dataRepo.isLoading}
361
+ <LoadingOverlay absolute borderRadius="4px" />
375
362
  {/if}
376
- </div>
377
363
 
378
- <div
379
- class="sidebar-wrapper sidebar-wrapper-left"
380
- class:nested
381
- style="--nested-height: {nestedHeight}px;"
382
- >
383
- {#if tableContext.toolbarPosition === ToolbarPosition.Left}
384
- <div class="sidebar toolbar-left">
385
- <TableSidebar />
386
- </div>
387
- {/if}
388
- </div>
389
- <div
390
- class="sidebar-wrapper sidebar-wrapper-right"
391
- class:nested
392
- style="--nested-height: {nestedHeight}px;"
393
- >
394
- {#if tableContext.toolbarPosition === ToolbarPosition.Right}
395
- <div class="sidebar toolbar-right">
396
- <TableSidebar />
397
- </div>
398
- {/if}
399
- </div>
364
+ <div class="horizontal-bar" class:border={tableContext.toolbarPosition === ToolbarPosition.Top}>
365
+ {#if tableContext.toolbarPosition === ToolbarPosition.Top}
366
+ <TableHorizontalBar />
367
+ {/if}
368
+ </div>
400
369
 
401
- <div class="footer">
402
- {#if tableContext.displayFooter}
403
- <TableFooter />
404
- {/if}
405
- </div>
370
+ <div
371
+ class="sidebar-wrapper sidebar-wrapper-left"
372
+ class:nested
373
+ style="--nested-height: {nestedHeight}px;"
374
+ >
375
+ {#if tableContext.toolbarPosition === ToolbarPosition.Left}
376
+ <div class="sidebar toolbar-left">
377
+ <TableSidebar />
378
+ </div>
379
+ {/if}
380
+ </div>
381
+ <div
382
+ class="sidebar-wrapper sidebar-wrapper-right"
383
+ class:nested
384
+ style="--nested-height: {nestedHeight}px;"
385
+ >
386
+ {#if tableContext.toolbarPosition === ToolbarPosition.Right}
387
+ <div class="sidebar toolbar-right">
388
+ <TableSidebar />
389
+ </div>
390
+ {/if}
391
+ </div>
392
+
393
+ <div class="footer">
394
+ {#if tableContext.displayFooter}
395
+ <TableFooter />
396
+ {/if}
397
+ </div>
406
398
 
407
- <!-- svelte-ignore a11y_no_static_element_interactions -->
408
- <div
409
- bind:this={tableRef}
410
- class="datatable"
411
- class:nested
412
- class:compact={tableContext.isCompact}
413
- class:quick-filtering={tableContext.showQuickFiltering}
414
- onkeydown={tableContext.handleTdKeydown}
415
- >
416
- <div class="flex_table" bind:this={ref} class:nested>
417
- <div bind:this={unfocusRef} class="table-wrapper" oncontextmenu={openContextMenu}>
418
- <!-- {#if leftTotalSize > 0} -->
419
- <table class="datatable__table left" style="min-width: {leftTotalSize}px">
420
- <TableHead showHighlight={leftTotalSize > 0} side="left" />
421
- <TableBody
422
- includeHighlight={appropriateSide == 'left'}
423
- columns={leftColumns}
424
- heights={totalRowSizes}
425
- side="left"
426
- bind:this={leftTable}
427
- />
428
- </table>
429
- <!-- {/if} -->
430
-
431
- <!-- {#if centreTotalSize > 0} -->
432
-
433
- <table class="datatable__table centre" style="min-width: {centreTotalSize}px">
434
- <TableHead showHighlight={leftTotalSize == 0} side="centre" />
435
- <TableBody
436
- includeHighlight={appropriateSide == 'centre'}
437
- columns={centreColumns}
438
- heights={totalRowSizes}
439
- side="centre"
440
- bind:this={centreTable}
441
- />
442
- </table>
443
- <!-- {/if} -->
444
-
445
- <!-- {#if rightTotalSize > 0} -->
446
- <table class="datatable__table right" style="min-width: {rightTotalSize}px">
447
- <TableHead showHighlight={false} side="right" />
448
- <TableBody
449
- includeHighlight={appropriateSide == 'right'}
450
- columns={rightColumns}
451
- heights={totalRowSizes}
452
- side="right"
453
- bind:this={rightTable}
454
- />
455
- </table>
456
- <!-- {/if} -->
399
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
400
+ <div
401
+ bind:this={tableRef}
402
+ class="datatable"
403
+ class:nested
404
+ class:compact={tableContext.isCompact}
405
+ class:quick-filtering={tableContext.showQuickFiltering}
406
+ onkeydown={tableContext.handleTdKeydown}
407
+ >
408
+ <div class="flex_table" bind:this={ref} class:nested>
409
+ <div bind:this={unfocusRef} class="table-wrapper" oncontextmenu={openContextMenu}>
410
+ <!-- {#if leftTotalSize > 0} -->
411
+ <table class="datatable__table left" style="min-width: {leftTotalSize}px">
412
+ <TableHead showHighlight={leftTotalSize > 0} side="left" />
413
+ <TableBody
414
+ includeHighlight={appropriateSide == 'left'}
415
+ columns={leftColumns}
416
+ heights={totalRowSizes}
417
+ side="left"
418
+ bind:this={leftTable}
419
+ />
420
+ </table>
421
+ <!-- {/if} -->
422
+
423
+ <!-- {#if centreTotalSize > 0} -->
424
+
425
+ <table class="datatable__table centre" style="min-width: {centreTotalSize}px">
426
+ <TableHead showHighlight={leftTotalSize == 0} side="centre" />
427
+ <TableBody
428
+ includeHighlight={appropriateSide == 'centre'}
429
+ columns={centreColumns}
430
+ heights={totalRowSizes}
431
+ side="centre"
432
+ bind:this={centreTable}
433
+ />
434
+ </table>
435
+ <!-- {/if} -->
436
+
437
+ <!-- {#if rightTotalSize > 0} -->
438
+ <table class="datatable__table right" style="min-width: {rightTotalSize}px">
439
+ <TableHead showHighlight={false} side="right" />
440
+ <TableBody
441
+ includeHighlight={appropriateSide == 'right'}
442
+ columns={rightColumns}
443
+ heights={totalRowSizes}
444
+ side="right"
445
+ bind:this={rightTable}
446
+ />
447
+ </table>
448
+ <!-- {/if} -->
449
+ </div>
450
+
451
+ <!-- TODO add filter callbacks -->
457
452
  </div>
458
453
 
459
- <!-- TODO add filter callbacks -->
454
+ {#if nested}
455
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
456
+ <div
457
+ class:isResizing
458
+ class="resizer"
459
+ onmousedown={(e) => {
460
+ e.preventDefault();
461
+ addOverrideResizeHandler();
462
+ }}
463
+ ></div>
464
+ {/if}
460
465
  </div>
461
-
462
- {#if nested}
463
- <!-- svelte-ignore a11y_no_static_element_interactions -->
464
- <div
465
- class:isResizing
466
- class="resizer"
467
- onmousedown={(e) => {
468
- e.preventDefault();
469
- addOverrideResizeHandler();
470
- }}
471
- ></div>
472
- {/if}
473
466
  </div>
474
- </div>
467
+ </svelte:boundary>
475
468
 
476
469
  <style>div.grid {
477
470
  border-radius: 4px;
@@ -1,4 +1,5 @@
1
- import { TableContext } from './Types/Context/TableContext.svelte.js';
1
+ import { TableContext } from './Types/Context/TableContext.svelte';
2
+ import type { Primitive } from './Types/Context/TableInitOptions.js';
2
3
  declare global {
3
4
  interface HTMLElementEventMap {
4
5
  edit: CustomEvent<{
@@ -6,32 +7,32 @@ declare global {
6
7
  }>;
7
8
  }
8
9
  }
9
- export interface TableProps<T extends object> {
10
- readonly tableContext: TableContext<T>;
10
+ export interface TableProps<T extends object, IdType extends Primitive> {
11
+ readonly tableContext: TableContext<T, IdType>;
11
12
  nested?: boolean;
12
13
  }
13
14
  export declare const quickFilterContextIdentifier: symbol;
14
- declare function $$render<T extends object>(): {
15
- props: TableProps<T>;
15
+ declare function $$render<T extends object, IdType extends Primitive>(): {
16
+ props: TableProps<T, IdType>;
16
17
  exports: {};
17
18
  bindings: "";
18
19
  slots: {};
19
20
  events: {};
20
21
  };
21
- declare class __sveltets_Render<T extends object> {
22
- props(): ReturnType<typeof $$render<T>>['props'];
23
- events(): ReturnType<typeof $$render<T>>['events'];
24
- slots(): ReturnType<typeof $$render<T>>['slots'];
22
+ declare class __sveltets_Render<T extends object, IdType extends Primitive> {
23
+ props(): ReturnType<typeof $$render<T, IdType>>['props'];
24
+ events(): ReturnType<typeof $$render<T, IdType>>['events'];
25
+ slots(): ReturnType<typeof $$render<T, IdType>>['slots'];
25
26
  bindings(): "";
26
27
  exports(): {};
27
28
  }
28
29
  interface $$IsomorphicComponent {
29
- 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']>> & {
30
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
31
- } & ReturnType<__sveltets_Render<T>['exports']>;
32
- <T extends object>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
33
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
30
+ new <T extends object, IdType extends Primitive>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, IdType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, IdType>['props']>, ReturnType<__sveltets_Render<T, IdType>['events']>, ReturnType<__sveltets_Render<T, IdType>['slots']>> & {
31
+ $$bindings?: ReturnType<__sveltets_Render<T, IdType>['bindings']>;
32
+ } & ReturnType<__sveltets_Render<T, IdType>['exports']>;
33
+ <T extends object, IdType extends Primitive>(internal: unknown, props: ReturnType<__sveltets_Render<T, IdType>['props']> & {}): ReturnType<__sveltets_Render<T, IdType>['exports']>;
34
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
34
35
  }
35
36
  declare const Table: $$IsomorphicComponent;
36
- type Table<T extends object> = InstanceType<typeof Table<T>>;
37
+ type Table<T extends object, IdType extends Primitive> = InstanceType<typeof Table<T, IdType>>;
37
38
  export default Table;
@@ -1,5 +1,5 @@
1
1
  import type { ColumnDef } from './Definitions/ColumnDef.svelte.js';
2
- export interface Column<T extends object, in FilterFnType = undefined> {
2
+ export interface Column<T extends object, in FilterFnType> {
3
3
  id: string;
4
4
  columnDef: ColumnDef<T, FilterFnType>;
5
5
  getCanSort: () => boolean;
@@ -6,7 +6,7 @@ export interface ActionsDefProps<T extends object> {
6
6
  isEnabled?: (item: T, index: number, button: TableActionButton<T>) => boolean | Promise<boolean>;
7
7
  getColourSet?: (item: T, index: number, button: TableActionButton<T>) => ColourSet;
8
8
  }
9
- export declare class ActionsDef<T extends object> extends ColumnDef<T> {
9
+ export declare class ActionsDef<T extends object> extends ColumnDef<T, undefined> {
10
10
  constructor(props: ActionsDefProps<T>);
11
11
  readonly columnType: "Actions";
12
12
  readonly actions: Array<TableActionButton<T>>;
@@ -7,7 +7,7 @@ import type { FilterValueType } from '../../Filtering/FilterValueType.js';
7
7
  import { ColumnType } from '../ColumnType.js';
8
8
  import type { AccessorFn } from './AccessorFn.js';
9
9
  import type { ValidationFn } from './ValidationFn.js';
10
- export interface ColumnDefProps<T extends object, in FilterFnType = undefined> {
10
+ export interface ColumnDefProps<T extends object, in FilterFnType> {
11
11
  id: string;
12
12
  header: string | Snippet;
13
13
  debug?: boolean;
@@ -26,7 +26,7 @@ export interface ColumnDefProps<T extends object, in FilterFnType = undefined> {
26
26
  accessorFn?: AccessorFn<T>;
27
27
  getDisplayValue?: (item: T, index: number) => string | null | Promise<string | null>;
28
28
  }
29
- export declare abstract class ColumnDef<T extends object, in FilterFnType = undefined> {
29
+ export declare abstract class ColumnDef<T extends object, in FilterFnType> {
30
30
  protected constructor(props: ColumnDefProps<T, FilterFnType>);
31
31
  readonly id: string;
32
32
  debug: boolean;
@@ -7,5 +7,5 @@ export interface ColumnDefSet<T extends object> {
7
7
  sortingState: SortingState;
8
8
  visibilityState: VisibilityState;
9
9
  columnPinningState: ColumnPinningState;
10
- columnDefs: Array<ColumnDef<T>>;
10
+ columnDefs: Array<ColumnDef<T, unknown>>;
11
11
  }
@@ -1,23 +1,23 @@
1
1
  import type { IconProps } from '../../../../../IconProps.js';
2
- import type { TableInitOptions } from '../../../Context/TableInitOptions.js';
2
+ import type { Primitive, TableInitOptions } from '../../../Context/TableInitOptions.js';
3
3
  import type { DefsWrapper } from '../../DefsWrapper.js';
4
4
  import { ColumnDef, type ColumnDefProps } from '../ColumnDef.svelte.js';
5
- export interface ExpandDefProps<T extends object, R extends object> extends ColumnDefProps<T> {
5
+ export interface ExpandDefProps<T extends object, R extends object, InnterIdType extends Primitive, FilterValueType> extends ColumnDefProps<T, FilterValueType> {
6
6
  isEnabled: (item: T, index: number) => boolean | Promise<boolean>;
7
7
  getInnerColumnDefs: (item: T, index: number) => DefsWrapper<R>;
8
8
  headerIcon: IconProps['name'];
9
9
  innerTableName: string;
10
- innerTableOptions: TableInitOptions<R>;
10
+ innerTableOptions: TableInitOptions<R, InnterIdType>;
11
11
  accessorFn: (item: T, index: number) => Array<R> | Promise<Array<R>>;
12
12
  }
13
- export declare class ExpandDef<T extends object, R extends object = object> extends ColumnDef<T> {
13
+ export declare class ExpandDef<T extends object, R extends object, InnterIdType extends Primitive, FilterValueType> extends ColumnDef<T, FilterValueType> {
14
14
  readonly columnType: "Expand";
15
- constructor(props: ExpandDefProps<T, R>);
15
+ constructor(props: ExpandDefProps<T, R, InnterIdType, FilterValueType>);
16
16
  readonly accessorFn: (item: T, index: number) => Array<R> | Promise<Array<R>>;
17
17
  readonly filterFn: undefined;
18
18
  readonly innerTableName: string;
19
19
  readonly getInnerColumnDefs: (item: T, index: number) => DefsWrapper<R>;
20
20
  readonly headerIcon: IconProps['name'];
21
21
  readonly isEnabled: (item: T, index: number) => boolean | Promise<boolean>;
22
- readonly innerTableOptions: TableInitOptions<R>;
22
+ readonly innerTableOptions: TableInitOptions<R, InnterIdType>;
23
23
  }
@@ -7,5 +7,5 @@ export interface JSONColumnDefSet<T extends object> {
7
7
  sortingState: SortingState;
8
8
  visibilityState: VisibilityState;
9
9
  columnPinningState: JSONColumnPinningState;
10
- columnDefs: Array<ColumnDef<T>>;
10
+ columnDefs: Array<ColumnDef<T, unknown>>;
11
11
  }
@@ -1,6 +1,7 @@
1
+ import type { BoolFilterValueType } from '../../../Filtering/FilterFn.js';
1
2
  import { ColumnType } from '../../ColumnType.js';
2
3
  import { ColumnDef } from '../ColumnDef.svelte.js';
3
- export declare class RowSelectionDef<T extends object> extends ColumnDef<T> {
4
+ export declare class RowSelectionDef<T extends object> extends ColumnDef<T, BoolFilterValueType> {
4
5
  readonly isSelectable: (item: T, index: number) => boolean | Promise<boolean>;
5
6
  readonly columnType: ColumnType;
6
7
  constructor(isSelectable: (item: T, index: number) => boolean | Promise<boolean>);
@@ -1,6 +1,6 @@
1
1
  import type { CustomRemoteFilters } from '../Filtering/CustomRemoteFilters.js';
2
2
  import type { ColumnDef } from './Definitions/ColumnDef.svelte.js';
3
- export interface DefsWrapper<T extends object, in FilterValueType = undefined> {
4
- defs: Array<ColumnDef<T, FilterValueType>>;
3
+ export interface DefsWrapper<T extends object> {
4
+ defs: Array<ColumnDef<T, unknown>>;
5
5
  remoteFilters?: CustomRemoteFilters;
6
6
  }
@@ -1,7 +1,8 @@
1
+ import type { Primitive } from '../Context/TableInitOptions.js';
1
2
  import type { ExpandDef } from './Definitions/Expand/ExpandDef.svelte.js';
2
- export interface ExpandColumn<T extends object, R extends object> {
3
+ export interface ExpandColumn<T extends object, R extends object, IdType extends Primitive, FilterValueType> {
3
4
  id: string;
4
- columnDef: ExpandDef<T, R>;
5
+ columnDef: ExpandDef<T, R, IdType, FilterValueType>;
5
6
  getCanSort: () => boolean;
6
7
  getToggleSortingHandler: () => (e: MouseEvent) => void;
7
8
  getIsSorted: () => 'asc' | 'desc' | 'none';
@@ -1,7 +1,8 @@
1
1
  import type { Row } from '../Context/Row.js';
2
+ import type { Primitive } from '../Context/TableInitOptions.js';
2
3
  import type { ExpandColumn } from './ExpandColumn.js';
3
- export interface ExpandTableCell<T extends object, R extends object = object> {
4
- column: ExpandColumn<T, R>;
4
+ export interface ExpandTableCell<T extends object, R extends object, IdType extends Primitive, FilterValueType> {
5
+ column: ExpandColumn<T, R, IdType, FilterValueType>;
5
6
  row: Row<T>;
6
7
  id: string;
7
8
  getValue: () => unknown;
@@ -9,8 +9,8 @@ import type { HeaderGroup } from '../HeaderGroup.js';
9
9
  import type { OnChangeFn } from '../OnChangeFn.js';
10
10
  import type { PaginationState } from '../Pagination/PaginationState.js';
11
11
  export interface ITable<T extends object> {
12
- data: Array<T>;
13
- columns: Array<ColumnDef<T>>;
12
+ data: Promise<Array<T>>;
13
+ columns: Array<ColumnDef<T, unknown>>;
14
14
  columnSizing: ColumnSizingState;
15
15
  columnVisibility: VisibilityState;
16
16
  sorting: SortingState | undefined;
@@ -24,9 +24,9 @@ export interface ITable<T extends object> {
24
24
  getLeftHeaderGroups: () => Array<HeaderGroup<T>>;
25
25
  getRightHeaderGroups: () => Array<HeaderGroup<T>>;
26
26
  getCenterHeaderGroups: () => Array<HeaderGroup<T>>;
27
- getLeftVisibleLeafColumns: () => Array<Column<T>>;
28
- getRightVisibleLeafColumns: () => Array<Column<T>>;
29
- getCenterVisibleLeafColumns: () => Array<Column<T>>;
27
+ getLeftVisibleLeafColumns: () => Array<Column<T, unknown>>;
28
+ getRightVisibleLeafColumns: () => Array<Column<T, unknown>>;
29
+ getCenterVisibleLeafColumns: () => Array<Column<T, unknown>>;
30
30
  onColumnVisibilityChange: OnChangeFn<VisibilityState>;
31
31
  onColumnSizingChange: OnChangeFn<ColumnSizingState>;
32
32
  onColumnFiltersChange: OnChangeFn<ColumnFiltersState> | undefined;