@lavalogic/scoria 0.14.2 → 0.16.0

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 (52) hide show
  1. package/dist/Components/AlertModal.svelte +3 -0
  2. package/dist/Components/Contexts/ContextMenu.svelte +3 -1
  3. package/dist/Components/LoadingModal.svelte +3 -1
  4. package/dist/Components/Modal.svelte +3 -1
  5. package/dist/Components/Table/Body/QuickSearchCell.svelte +31 -9
  6. package/dist/Components/Table/Body/Rows/ColumnList.svelte +1 -1
  7. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +8 -4
  8. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte.d.ts +12 -12
  9. package/dist/Components/Table/Body/Rows/ColumnListRowProps.d.ts +1 -1
  10. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +3 -5
  11. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte.d.ts +12 -12
  12. package/dist/Components/Table/Body/Rows/Columns/AccessorComponentProps.d.ts +2 -2
  13. package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +2 -3
  14. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +2 -2
  15. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte.d.ts +2 -3
  16. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +4 -0
  17. package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +2 -3
  18. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +4 -0
  19. package/dist/Components/Table/Body/Rows/TableRow.svelte +3 -4
  20. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.d.ts +1 -1
  21. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +27 -28
  22. package/dist/Components/Table/Headers/TableHead.svelte +3 -3
  23. package/dist/Components/Table/Types/Columns/Column.d.ts +2 -2
  24. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +3 -3
  25. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.d.ts +4 -3
  26. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +3 -3
  27. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +4 -5
  28. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.js +0 -1
  29. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.d.ts +4 -5
  30. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +7 -7
  31. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.d.ts +3 -3
  32. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +2 -2
  33. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +5 -6
  34. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.js +0 -6
  35. package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.d.ts +1 -1
  36. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.d.ts +5 -5
  37. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +3 -3
  38. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.d.ts +4 -3
  39. package/dist/Components/Table/Types/Columns/Definitions/JSONColumnDefSet.d.ts +1 -1
  40. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +1 -2
  41. package/dist/Components/Table/Types/Columns/DefsWrapper.d.ts +1 -1
  42. package/dist/Components/Table/Types/Columns/TableCell.d.ts +2 -2
  43. package/dist/Components/Table/Types/Context/ITable.d.ts +1 -1
  44. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +8 -8
  45. package/dist/Components/Table/Types/Context/TableContext.svelte.js +13 -4
  46. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +1 -1
  47. package/dist/Components/Touch/TouchModal.svelte +3 -1
  48. package/dist/Helpers/Helpers.svelte.js +4 -4
  49. package/dist/Types/Examples/ExampleModal.svelte +2 -2
  50. package/dist/Types/Examples/ExampleModal.svelte.d.ts +2 -23
  51. package/dist/Types/Internal/GridItem.d.ts +1 -1
  52. package/package.json +15 -15
@@ -41,6 +41,9 @@
41
41
  alertContext.onOther();
42
42
  break;
43
43
  }
44
+ default: {
45
+ console.warn(`Uncaught command \`${value}\``);
46
+ }
44
47
  }
45
48
 
46
49
  return true;
@@ -41,7 +41,9 @@
41
41
  if (!menuEl) {
42
42
  return;
43
43
  }
44
- if (e.target === menuEl || menuEl.contains(e.target as Node)) return;
44
+ if (e.target === menuEl || menuEl.contains(e.target as Node)) {
45
+ return;
46
+ }
45
47
  contextMenuContext.closeMenu();
46
48
  }
47
49
  </script>
@@ -21,7 +21,9 @@
21
21
  });
22
22
 
23
23
  $effect(() => {
24
- if (!showModal && dialog) dialog.close();
24
+ if (!showModal && dialog) {
25
+ dialog.close();
26
+ }
25
27
  });
26
28
 
27
29
  function uncloseable(
@@ -130,7 +130,9 @@
130
130
  onkeydown={handleEsc}
131
131
  onclick={(e) => {
132
132
  if (e.target === dialog) {
133
- if (!mandatory) dialog.close();
133
+ if (!mandatory) {
134
+ dialog.close();
135
+ }
134
136
  }
135
137
  clearTimer();
136
138
  }}
@@ -1,6 +1,9 @@
1
1
  <svelte:options runes />
2
2
 
3
- <script lang="ts" generics="T extends object">
3
+ <script
4
+ lang="ts"
5
+ generics="T extends object"
6
+ >
4
7
  import { dev } from '$app/environment';
5
8
  import Action from '../../Action.svelte';
6
9
  import Button from '../../Button.svelte';
@@ -402,8 +405,10 @@
402
405
  case false: {
403
406
  return Ternary.False;
404
407
  }
408
+ default: {
409
+ return Ternary.Neutral;
410
+ }
405
411
  }
406
- return Ternary.Neutral;
407
412
  })()}
408
413
  <div class="centered">
409
414
  <ThreeStateRadio
@@ -459,7 +464,7 @@
459
464
  onkeydown={closeOnCtrlF}
460
465
  />
461
466
  </div>
462
- {:else if value == null || typeof value == 'string'}
467
+ {:else if value == null || typeof value == 'number'}
463
468
  <div class="input-wrapper right">
464
469
  {#if selectedNumberFilterType?.value == NumberDateFilterMode.null}
465
470
  <TextInput
@@ -470,19 +475,33 @@
470
475
  variant={InputVariant.Table}
471
476
  />
472
477
  {:else}
473
- <TextInput
478
+ <NumberInput
474
479
  data-type="quicksearch"
475
480
  id={inputId}
476
- bind:value={value as string | null}
477
- placeholder="Filter&hellip;"
481
+ bind:value={valueMin}
478
482
  variant={InputVariant.Table}
483
+ placeholder="Min&hellip;"
479
484
  oninput={() => {
480
- tableContext.paginationRepo?.filterBy(def.id, [value]);
485
+ tableContext.paginationRepo?.filterBy(def.id, [valueMin, null]);
481
486
  }}
482
487
  onkeydown={closeOnCtrlF}
483
488
  />
484
489
  {/if}
485
490
  </div>
491
+ {:else if typeof value == 'string'}
492
+ <div class="input-wrapper right">
493
+ <TextInput
494
+ data-type="quicksearch"
495
+ id={inputId}
496
+ bind:value={value as string | null}
497
+ placeholder="Filter&hellip;"
498
+ variant={InputVariant.Table}
499
+ oninput={() => {
500
+ tableContext.paginationRepo?.filterBy(def.id, [value]);
501
+ }}
502
+ onkeydown={closeOnCtrlF}
503
+ />
504
+ </div>
486
505
  {/if}
487
506
  {:else if value == null || typeof value == 'string'}
488
507
  <div class="input-wrapper right">
@@ -529,7 +548,7 @@
529
548
  icon={{
530
549
  name: 'filter-2',
531
550
  size: Size.MediumLarge,
532
- colour: Colour['$ui-blue-5']
551
+ colour: Colour['$ui-blue-5'],
533
552
  }}
534
553
  onclick={() => {
535
554
  if (!openedSelect) {
@@ -547,7 +566,10 @@
547
566
  {/if}
548
567
 
549
568
  {#if isSelectOpen}
550
- <div class="floating" transition:fade={{ easing: cubicOut, duration: 100 }}>
569
+ <div
570
+ class="floating"
571
+ transition:fade={{ easing: cubicOut, duration: 100 }}
572
+ >
551
573
  <div class="select-wrapper">
552
574
  {#if isNumeric}
553
575
  <SingleSelect
@@ -12,7 +12,7 @@
12
12
 
13
13
  const { searchValue }: ColumnListProps = $props();
14
14
 
15
- const visibleColumns: Array<ColumnDef<T, unknown>> = $derived.by(() => {
15
+ const visibleColumns: Array<ColumnDef<T>> = $derived.by(() => {
16
16
  const lowercasedSearchValue = searchValue.toLocaleLowerCase();
17
17
  return tableContext.columnDefs.filter(
18
18
  (it) =>
@@ -1,6 +1,6 @@
1
1
  <svelte:options runes />
2
2
 
3
- <script lang="ts" generics="T extends object,FilterValueType">
3
+ <script lang="ts" generics="T extends object">
4
4
  import Checkbox from '../../../Checkbox.svelte';
5
5
  import Icon from '../../../Icon.svelte';
6
6
  import { TableContext } from '../../Types/Context/TableContext.svelte.js';
@@ -9,7 +9,7 @@
9
9
  import type { ColumnListRowProps } from './ColumnListRowProps.js';
10
10
  const tableContext = getContext<TableContext<T, never>>(TableContext.identifier);
11
11
 
12
- const { columnDef }: ColumnListRowProps<T, FilterValueType> = $props();
12
+ const { columnDef }: ColumnListRowProps<T> = $props();
13
13
 
14
14
  const isExpandColumn = $derived(columnDef?.columnType === 'Expand');
15
15
 
@@ -23,7 +23,9 @@
23
23
  return [item, index];
24
24
  }
25
25
  function togglePinLeft() {
26
- if (columnDef == null) return;
26
+ if (columnDef == null) {
27
+ return;
28
+ }
27
29
 
28
30
  tableContext.setColumnPinning((pinning) => {
29
31
  const leftPinIndex = pinning.left?.get(columnDef.id) ?? -1;
@@ -48,7 +50,9 @@
48
50
  }
49
51
 
50
52
  function togglePinRight() {
51
- if (columnDef == null) return;
53
+ if (columnDef == null) {
54
+ return;
55
+ }
52
56
 
53
57
  tableContext.setColumnPinning((pinning) => {
54
58
  const rightPinIndex = pinning.right?.get(columnDef.id) ?? -1;
@@ -1,25 +1,25 @@
1
1
  import type { ColumnListRowProps } from './ColumnListRowProps.js';
2
- declare function $$render<T extends object, FilterValueType>(): {
3
- props: ColumnListRowProps<T, FilterValueType>;
2
+ declare function $$render<T extends object>(): {
3
+ props: ColumnListRowProps<T>;
4
4
  exports: {};
5
5
  bindings: "";
6
6
  slots: {};
7
7
  events: {};
8
8
  };
9
- declare class __sveltets_Render<T extends object, FilterValueType> {
10
- props(): ReturnType<typeof $$render<T, FilterValueType>>['props'];
11
- events(): ReturnType<typeof $$render<T, FilterValueType>>['events'];
12
- slots(): ReturnType<typeof $$render<T, FilterValueType>>['slots'];
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'];
13
13
  bindings(): "";
14
14
  exports(): {};
15
15
  }
16
16
  interface $$IsomorphicComponent {
17
- new <T extends object, FilterValueType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, FilterValueType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, FilterValueType>['props']>, ReturnType<__sveltets_Render<T, FilterValueType>['events']>, ReturnType<__sveltets_Render<T, FilterValueType>['slots']>> & {
18
- $$bindings?: ReturnType<__sveltets_Render<T, FilterValueType>['bindings']>;
19
- } & ReturnType<__sveltets_Render<T, FilterValueType>['exports']>;
20
- <T extends object, FilterValueType>(internal: unknown, props: ReturnType<__sveltets_Render<T, FilterValueType>['props']> & {}): ReturnType<__sveltets_Render<T, FilterValueType>['exports']>;
21
- z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
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']>;
22
22
  }
23
23
  declare const ColumnListRow: $$IsomorphicComponent;
24
- type ColumnListRow<T extends object, FilterValueType> = InstanceType<typeof ColumnListRow<T, FilterValueType>>;
24
+ type ColumnListRow<T extends object> = InstanceType<typeof ColumnListRow<T>>;
25
25
  export default ColumnListRow;
@@ -1,4 +1,4 @@
1
1
  import type { ColumnDef } from '../../Types/Columns/Definitions/ColumnDef.svelte.js';
2
- export interface ColumnListRowProps<T extends object, FilterValueType> {
2
+ export interface ColumnListRowProps<T extends object, FilterValueType = unknown> {
3
3
  columnDef: ColumnDef<T, FilterValueType> | null;
4
4
  }
@@ -15,7 +15,6 @@
15
15
 
16
16
  const cellTypes: Record<
17
17
  'Number' | 'Date' | 'Select' | 'Checkbox' | 'Query' | 'Text',
18
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
18
  Component<any>
20
19
  > = {
21
20
  Number: TableNumberInput,
@@ -27,13 +26,12 @@
27
26
  } as const;
28
27
  </script>
29
28
 
30
- <script lang="ts" generics="T extends object, FilterValueType">
31
- const { cell }: AccessorComponentProps<T, FilterValueType> = $props();
29
+ <script lang="ts" generics="T extends object, ">
30
+ const { cell }: AccessorComponentProps<T> = $props();
32
31
 
33
32
  const CurrentComponent = $derived(getAppropriateAccessorDef(cell.column.columnDef));
34
33
 
35
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
- function getAppropriateAccessorDef(columnDef: ColumnDef<T, FilterValueType>): Component<any> {
34
+ function getAppropriateAccessorDef(columnDef: ColumnDef<T>): Component<any> {
37
35
  if (columnDef instanceof AccessorDef) {
38
36
  return cellTypes[columnDef.accessorType];
39
37
  }
@@ -1,25 +1,25 @@
1
1
  import type { AccessorComponentProps } from './AccessorComponentProps.js';
2
- declare function $$render<T extends object, FilterValueType>(): {
3
- props: AccessorComponentProps<T, FilterValueType>;
2
+ declare function $$render<T extends object>(): {
3
+ props: AccessorComponentProps<T>;
4
4
  exports: {};
5
5
  bindings: "";
6
6
  slots: {};
7
7
  events: {};
8
8
  };
9
- declare class __sveltets_Render<T extends object, FilterValueType> {
10
- props(): ReturnType<typeof $$render<T, FilterValueType>>['props'];
11
- events(): ReturnType<typeof $$render<T, FilterValueType>>['events'];
12
- slots(): ReturnType<typeof $$render<T, FilterValueType>>['slots'];
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'];
13
13
  bindings(): "";
14
14
  exports(): {};
15
15
  }
16
16
  interface $$IsomorphicComponent {
17
- new <T extends object, FilterValueType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, FilterValueType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, FilterValueType>['props']>, ReturnType<__sveltets_Render<T, FilterValueType>['events']>, ReturnType<__sveltets_Render<T, FilterValueType>['slots']>> & {
18
- $$bindings?: ReturnType<__sveltets_Render<T, FilterValueType>['bindings']>;
19
- } & ReturnType<__sveltets_Render<T, FilterValueType>['exports']>;
20
- <T extends object, FilterValueType>(internal: unknown, props: ReturnType<__sveltets_Render<T, FilterValueType>['props']> & {}): ReturnType<__sveltets_Render<T, FilterValueType>['exports']>;
21
- z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
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']>;
22
22
  }
23
23
  declare const AccessorComponent: $$IsomorphicComponent;
24
- type AccessorComponent<T extends object, FilterValueType> = InstanceType<typeof AccessorComponent<T, FilterValueType>>;
24
+ type AccessorComponent<T extends object> = InstanceType<typeof AccessorComponent<T>>;
25
25
  export default AccessorComponent;
@@ -1,4 +1,4 @@
1
1
  import type { TableCell } from '../../../Types/Columns/TableCell.js';
2
- export interface AccessorComponentProps<T extends object, FilterValueType> {
3
- cell: TableCell<T, FilterValueType>;
2
+ export interface AccessorComponentProps<T extends object> {
3
+ cell: TableCell<T>;
4
4
  }
@@ -1,6 +1,5 @@
1
1
  import type { Column } from '../../../Types/Columns/Column.js';
2
2
  import type { SelectDef } from '../../../Types/Columns/Definitions/Accessors/SelectDef.svelte.js';
3
- import type { SelectFilterValueType } from '../../../Types/Filtering/FilterFn.js';
4
- export interface SelectColumn<T extends object, FilterValueType = SelectFilterValueType<T>> extends Column<T, FilterValueType> {
5
- columnDef: SelectDef<T, FilterValueType>;
3
+ export interface SelectColumn<T extends object, in FilterValueType = T, out SelectValueType = T> extends Column<T, FilterValueType> {
4
+ columnDef: SelectDef<T, FilterValueType, SelectValueType>;
6
5
  }
@@ -25,8 +25,8 @@
25
25
 
26
26
  export interface TableColumnProps<T extends object> {
27
27
  cell: TableCell<T>;
28
- expandedColumnDef: ExpandDef<T, object, Primitive> | undefined;
29
- onExpandChange: (columnDef: ExpandDef<T, object, Primitive>) => void;
28
+ expandedColumnDef: ExpandDef<T, object> | undefined;
29
+ onExpandChange: (columnDef: ExpandDef<T, object>) => void;
30
30
  }
31
31
 
32
32
  function isProgressBarTableCell<T extends object>(
@@ -2,10 +2,9 @@ import { ExpandDef } from '../../../Types/Columns/Definitions/Expand/ExpandDef.s
2
2
  import type { TableCell } from '../../../Types/Columns/TableCell.js';
3
3
  export interface TableColumnProps<T extends object> {
4
4
  cell: TableCell<T>;
5
- expandedColumnDef: ExpandDef<T, object, Primitive> | undefined;
6
- onExpandChange: (columnDef: ExpandDef<T, object, Primitive>) => void;
5
+ expandedColumnDef: ExpandDef<T, object> | undefined;
6
+ onExpandChange: (columnDef: ExpandDef<T, object>) => void;
7
7
  }
8
- import type { Primitive } from '../../../Types/Context/TableInitOptions.js';
9
8
  declare function $$render<T extends object>(): {
10
9
  props: TableColumnProps<T>;
11
10
  exports: {};
@@ -210,6 +210,10 @@
210
210
  })
211
211
  .catch(devCatch);
212
212
  break;
213
+ default: {
214
+ //ignore other keys
215
+ break;
216
+ }
213
217
  }
214
218
  }
215
219
 
@@ -1,6 +1,5 @@
1
1
  import type { Column } from '../../../Types/Columns/Column.js';
2
2
  import type { QueryDef } from '../../../Types/Columns/Definitions/Accessors/QueryDef.svelte.js';
3
- import type { SelectFilterValueType } from '../../../Types/Filtering/FilterFn.js';
4
- export interface TableQueryColumn<T extends object, FilterValueType = SelectFilterValueType<T>> extends Column<T, FilterValueType> {
5
- columnDef: QueryDef<T, FilterValueType>;
3
+ export interface TableQueryColumn<T extends object, in FilterValueType = T, out SelectValueType = T> extends Column<T, FilterValueType, SelectValueType> {
4
+ columnDef: QueryDef<T, FilterValueType, SelectValueType>;
6
5
  }
@@ -203,6 +203,10 @@
203
203
  })
204
204
  .catch(devCatch);
205
205
  break;
206
+ default: {
207
+ //ignore other keys
208
+ break;
209
+ }
206
210
  }
207
211
  }
208
212
 
@@ -9,7 +9,6 @@
9
9
  import type { DefsWrapper } from '../../Types/Columns/DefsWrapper.js';
10
10
  import type { TableCell } from '../../Types/Columns/TableCell.js';
11
11
  import { TableContext } from '../../Types/Context/TableContext.svelte.js';
12
- import type { Primitive } from '../../Types/Context/TableInitOptions.js';
13
12
  import ColumnHighlight from './ColumnHighlight.svelte';
14
13
  import TableColumn from './Columns/TableColumn.svelte';
15
14
  import type { TableRowProps } from './TableRowProps.js';
@@ -28,7 +27,7 @@
28
27
  : row.getCenterVisibleCells()
29
28
  );
30
29
 
31
- let expandedColumnDef: ExpandDef<T, object, Primitive> | undefined = $state();
30
+ let expandedColumnDef: ExpandDef<T, object> | undefined = $state();
32
31
 
33
32
  $effect(() => {
34
33
  if (cells.length) {
@@ -45,7 +44,7 @@
45
44
  let innerColumnDefs: DefsWrapper<object> = $state({ defs: [] });
46
45
  let innerTableName: string | undefined = $state();
47
46
 
48
- let prevExpandedColumnDef: ExpandDef<T, object, Primitive> | undefined = $state();
47
+ let prevExpandedColumnDef: ExpandDef<T, object> | undefined = $state();
49
48
 
50
49
  const rowIndex = $derived(cells.at(0) && cells[0].row.visibleIndex);
51
50
  const highlighted = $derived(
@@ -84,7 +83,7 @@
84
83
  });
85
84
  });
86
85
 
87
- function onExpandChange(columnDef: ExpandDef<T, object, Primitive>) {
86
+ function onExpandChange(columnDef: ExpandDef<T, object>) {
88
87
  if (expandedColumnDef?.id === columnDef.id) {
89
88
  expandedColumnDef = undefined;
90
89
  } else {
@@ -2,4 +2,4 @@ import type { ExampleItem } from '../../../Types/Examples/ExampleItem.js';
2
2
  import { type Component } from 'svelte';
3
3
  import type { DisplayDefModalProps } from '../Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js';
4
4
  import type { DefsWrapper } from '../Types/Columns/DefsWrapper.js';
5
- export declare function generateExampleItemColumnDefs(modal: Component<DisplayDefModalProps<ExampleItem, unknown>, object, ''>): DefsWrapper<ExampleItem>;
5
+ export declare function generateExampleItemColumnDefs(modal: Component<DisplayDefModalProps<ExampleItem>, object, ''>): DefsWrapper<ExampleItem>;
@@ -28,33 +28,6 @@ export function generateExampleItemColumnDefs(modal) {
28
28
  },
29
29
  isEnabled: () => true
30
30
  }));
31
- const selectDef = $state(new SelectDef({
32
- id: 'someSelect',
33
- header: 'Select Example',
34
- optional: false,
35
- getOptions: () => {
36
- return [
37
- {
38
- label: 'First Option',
39
- value: ExampleSelectEnum.FirstOption
40
- },
41
- {
42
- label: 'Second Option',
43
- value: ExampleSelectEnum.SecondOption
44
- },
45
- {
46
- label: 'Third Option',
47
- value: ExampleSelectEnum.ThirdOption
48
- },
49
- {
50
- label: 'Fourth Option',
51
- value: ExampleSelectEnum.FourthOption
52
- }
53
- ];
54
- },
55
- getDisplayValue: (item) => item.someSelect,
56
- isEditable: () => true
57
- })).downcast();
58
31
  let defs = $state([
59
32
  expandDef,
60
33
  new ValidityDef({
@@ -171,7 +144,33 @@ export function generateExampleItemColumnDefs(modal) {
171
144
  showTime: true
172
145
  }),
173
146
  // altSelectDef,
174
- selectDef,
147
+ new SelectDef({
148
+ id: 'someSelect',
149
+ header: 'Select Example',
150
+ optional: false,
151
+ getOptions: () => {
152
+ return [
153
+ {
154
+ label: 'First Option',
155
+ value: ExampleSelectEnum.FirstOption
156
+ },
157
+ {
158
+ label: 'Second Option',
159
+ value: ExampleSelectEnum.SecondOption
160
+ },
161
+ {
162
+ label: 'Third Option',
163
+ value: ExampleSelectEnum.ThirdOption
164
+ },
165
+ {
166
+ label: 'Fourth Option',
167
+ value: ExampleSelectEnum.FourthOption
168
+ }
169
+ ];
170
+ },
171
+ getDisplayValue: (item) => item.someSelect,
172
+ isEditable: () => true
173
+ }),
175
174
  new BubbleDef({
176
175
  header: 'Generated Bubble',
177
176
  id: 'generatedBubble',
@@ -59,7 +59,7 @@
59
59
  currentDropTarget = target as HTMLTableCellElement | null;
60
60
  }
61
61
 
62
- function showtooltip(e: MouseEvent, columnDef: ColumnDef<T, unknown>): void {
62
+ function showtooltip(e: MouseEvent, columnDef: ColumnDef<T>): void {
63
63
  if (columnDef instanceof ExpandDef) {
64
64
  const rect = (e.target as HTMLElement).closest('th')?.getBoundingClientRect();
65
65
 
@@ -78,7 +78,7 @@
78
78
  }
79
79
  }
80
80
 
81
- function hideTooltip(columnDef: ColumnDef<T, unknown>): void {
81
+ function hideTooltip(columnDef: ColumnDef<T>): void {
82
82
  if (columnDef instanceof ExpandDef) {
83
83
  tooltipContext.hideTooltip(
84
84
  `Show ${typeof columnDef.header === 'string' ? columnDef.header : columnDef.id}`
@@ -101,7 +101,7 @@
101
101
  currentDropTarget = null;
102
102
  }
103
103
 
104
- function setDragTarget(def: ColumnDef<T, unknown>) {
104
+ function setDragTarget(def: ColumnDef<T>) {
105
105
  tableContext.dragTarget = def;
106
106
  }
107
107
 
@@ -1,7 +1,7 @@
1
1
  import type { ColumnDef } from './Definitions/ColumnDef.svelte.js';
2
- export interface Column<T extends object, FilterFnType = unknown> {
2
+ export interface Column<T extends object, in FilterFnType = unknown, out OptionsValueType = unknown> {
3
3
  id: string;
4
- columnDef: ColumnDef<T, FilterFnType>;
4
+ columnDef: ColumnDef<T, FilterFnType, OptionsValueType>;
5
5
  getCanSort: () => boolean;
6
6
  getToggleSortingHandler: () => ((e: MouseEvent) => void) | undefined;
7
7
  getIsSorted: () => 'asc' | 'desc' | 'none';
@@ -1,10 +1,10 @@
1
1
  import { ColumnDef, type ColumnDefProps } from '../ColumnDef.svelte.js';
2
2
  import type { AccessorType } from './AccessorType.js';
3
- export interface AccessorDefProps<T extends object, FilterValueType> extends ColumnDefProps<T, FilterValueType> {
3
+ export interface AccessorDefProps<T extends object, in FilterValueType, out OptionsValueType> extends ColumnDefProps<T, FilterValueType, OptionsValueType> {
4
4
  readonly id: string & keyof T;
5
5
  }
6
- export declare abstract class AccessorDef<T extends object, FilterValueType> extends ColumnDef<T, FilterValueType> {
7
- constructor(props: AccessorDefProps<T, FilterValueType>);
6
+ export declare abstract class AccessorDef<T extends object, in FilterValueType, out OptionsValueType> extends ColumnDef<T, FilterValueType, OptionsValueType> {
7
+ constructor(props: AccessorDefProps<T, FilterValueType, OptionsValueType>);
8
8
  readonly columnType: "Accessor";
9
9
  abstract readonly accessorType: AccessorType;
10
10
  }
@@ -1,10 +1,11 @@
1
1
  import type { CustomFilterFn } from '../../../Filtering/CustomFilterFn.js';
2
2
  import type { BoolFilterValueType, FilterFn } from '../../../Filtering/FilterFn.js';
3
3
  import { AccessorDef, type AccessorDefProps } from './AccessorDef.svelte.js';
4
- export type CheckboxDefProps<T extends object, FilterValueType = BoolFilterValueType> = AccessorDefProps<T, FilterValueType>;
5
- export declare class CheckboxDef<T extends object, FilterValueType = BoolFilterValueType> extends AccessorDef<T, FilterValueType> {
4
+ export interface CheckboxDefProps<T extends object, in FilterValueType = BoolFilterValueType, out SelectValueType = BoolFilterValueType> extends AccessorDefProps<T, FilterValueType, SelectValueType> {
5
+ }
6
+ export declare class CheckboxDef<T extends object, in FilterValueType = BoolFilterValueType, out SelectValueType = BoolFilterValueType> extends AccessorDef<T, FilterValueType, SelectValueType> {
6
7
  readonly accessorType: "Checkbox";
7
- constructor(props: CheckboxDefProps<T, FilterValueType>);
8
+ constructor(props: CheckboxDefProps<T, FilterValueType, SelectValueType>);
8
9
  private _filterFn;
9
10
  get filterFn(): CustomFilterFn | FilterFn<T, FilterValueType> | undefined;
10
11
  set filterFn(v: CustomFilterFn | FilterFn<T, FilterValueType> | undefined);
@@ -1,12 +1,12 @@
1
1
  import type { CustomFilterFn } from '../../../Filtering/CustomFilterFn.js';
2
2
  import type { DateFilterValueType, FilterFn } from '../../../Filtering/FilterFn.js';
3
3
  import { AccessorDef, type AccessorDefProps } from './AccessorDef.svelte.js';
4
- export interface DateInputDefProps<T extends object, FilterValueType = DateFilterValueType> extends AccessorDefProps<T, FilterValueType> {
4
+ export interface DateInputDefProps<T extends object, in FilterValueType = DateFilterValueType, out SelectValueType = DateFilterValueType> extends AccessorDefProps<T, FilterValueType, SelectValueType> {
5
5
  showTime?: boolean;
6
6
  }
7
- export declare class DateInputDef<T extends object, FilterValueType = DateFilterValueType> extends AccessorDef<T, FilterValueType> {
7
+ export declare class DateInputDef<T extends object, in FilterValueType = DateFilterValueType, out SelectValueType = DateFilterValueType> extends AccessorDef<T, FilterValueType, SelectValueType> {
8
8
  readonly accessorType: "Date";
9
- constructor(props: DateInputDefProps<T, FilterValueType>);
9
+ constructor(props: DateInputDefProps<T, FilterValueType, SelectValueType>);
10
10
  private _filterFn;
11
11
  get filterFn(): FilterFn<T, FilterValueType> | CustomFilterFn | undefined;
12
12
  set filterFn(v: FilterFn<T, FilterValueType> | CustomFilterFn | undefined);
@@ -1,14 +1,13 @@
1
1
  import type { CustomFilterFn } from '../../../Filtering/CustomFilterFn.js';
2
2
  import type { FilterFn, NumberFilterValueType } from '../../../Filtering/FilterFn.js';
3
- import { type ColumnDefProps } from '../ColumnDef.svelte.js';
4
- import { AccessorDef } from './AccessorDef.svelte.js';
5
- export interface NumberInputDefProps<T extends object, FilterValueType = NumberFilterValueType> extends ColumnDefProps<T, FilterValueType> {
3
+ import { AccessorDef, type AccessorDefProps } from './AccessorDef.svelte.js';
4
+ export interface NumberInputDefProps<T extends object, in FilterValueType = NumberFilterValueType, out OptionssValueType = NumberFilterValueType> extends AccessorDefProps<T, FilterValueType, OptionssValueType> {
6
5
  min: number;
7
6
  max: number;
8
7
  }
9
- export declare class NumberInputDef<T extends object, FilterValueType = NumberFilterValueType> extends AccessorDef<T, FilterValueType> {
8
+ export declare class NumberInputDef<T extends object, in FilterValueType = NumberFilterValueType, out OptionssValueType = NumberFilterValueType> extends AccessorDef<T, FilterValueType, OptionssValueType> {
10
9
  readonly accessorType: "Number";
11
- constructor(props: NumberInputDefProps<T, FilterValueType>);
10
+ constructor(props: NumberInputDefProps<T, FilterValueType, OptionssValueType>);
12
11
  readonly min: number;
13
12
  readonly max: number;
14
13
  private _filterFn;
@@ -1,4 +1,3 @@
1
- import {} from '../ColumnDef.svelte.js';
2
1
  import { AccessorDef } from './AccessorDef.svelte.js';
3
2
  import { AccessorType } from './AccessorType.js';
4
3
  export class NumberInputDef extends AccessorDef {
@@ -1,16 +1,15 @@
1
1
  import type { SelectOption } from '../../../../../../Types/Internal/SelectOption.js';
2
2
  import type { CustomFilterFn } from '../../../Filtering/CustomFilterFn.js';
3
3
  import type { FilterFn } from '../../../Filtering/FilterFn.js';
4
- import type { ColumnDefProps } from '../ColumnDef.svelte.js';
5
- import { AccessorDef } from './AccessorDef.svelte.js';
6
- export interface QueryDefProps<T extends object, FilterValueType = unknown> extends ColumnDefProps<T, FilterValueType> {
4
+ import { AccessorDef, type AccessorDefProps } from './AccessorDef.svelte.js';
5
+ export interface QueryDefProps<T extends object, in FilterValueType = unknown, out OptionsValueType = unknown> extends AccessorDefProps<T, FilterValueType, OptionsValueType> {
7
6
  query: (queryString: string, item: T, index: number) => Promise<Array<SelectOption<unknown>>>;
8
7
  getDisplayValue: (item: T, index: number) => string | null | Promise<string | null>;
9
8
  clearable?: boolean;
10
9
  }
11
- export declare class QueryDef<T extends object, FilterValueType = unknown> extends AccessorDef<T, FilterValueType> {
10
+ export declare class QueryDef<T extends object, FilterValueType = unknown, out OptionsValueType = unknown> extends AccessorDef<T, FilterValueType, OptionsValueType> {
12
11
  readonly accessorType: "Query";
13
- constructor(props: QueryDefProps<T, FilterValueType>);
12
+ constructor(props: QueryDefProps<T, FilterValueType, OptionsValueType>);
14
13
  readonly filterFn: CustomFilterFn | FilterFn<T, FilterValueType> | undefined;
15
14
  getDisplayValue: (item: T, index: number) => string | null | Promise<string | null>;
16
15
  readonly query: (queryString: string, item: T, index: number) => Promise<Array<SelectOption<unknown>>>;
@@ -2,16 +2,16 @@ import type { SelectOption } from '../../../../../../Types/Internal/SelectOption
2
2
  import type { CustomFilterFn } from '../../../Filtering/CustomFilterFn.js';
3
3
  import type { FilterFn } from '../../../Filtering/FilterFn.js';
4
4
  import { AccessorDef, type AccessorDefProps } from './AccessorDef.svelte.js';
5
- export interface SelectDefProps<T extends object, FilterValueType> extends AccessorDefProps<T, FilterValueType> {
6
- getOptions: () => Array<SelectOption<FilterValueType>> | Promise<Array<SelectOption<FilterValueType>>>;
5
+ export interface SelectDefProps<T extends object, in FilterValueType, out SelectValueType> extends AccessorDefProps<T, FilterValueType, SelectValueType> {
6
+ getOptions: () => Array<SelectOption<SelectValueType>> | Promise<Array<SelectOption<SelectValueType>>>;
7
7
  getDisplayValue: (item: T, index: number) => string | null | Promise<string | null>;
8
8
  sortingFn?: (a: T, b: T) => 1 | -1 | 0;
9
- getSpecificOptions?: (item: T, index: number) => Array<SelectOption<FilterValueType>> | Promise<Array<SelectOption<FilterValueType>>>;
9
+ getSpecificOptions?: (item: T, index: number) => Array<SelectOption<SelectValueType>> | Promise<Array<SelectOption<SelectValueType>>>;
10
10
  optional?: boolean;
11
11
  clearable?: boolean;
12
12
  }
13
- export declare class SelectDef<T extends object, FilterValueType> extends AccessorDef<T, FilterValueType> {
14
- constructor(props: SelectDefProps<T, FilterValueType>);
13
+ export declare class SelectDef<T extends object, in FilterValueType, out SelectValueType> extends AccessorDef<T, FilterValueType, SelectValueType> {
14
+ constructor(props: SelectDefProps<T, FilterValueType, SelectValueType>);
15
15
  readonly accessorType: "Select";
16
16
  private _filterFn;
17
17
  get filterFn(): FilterFn<T, FilterValueType> | CustomFilterFn | undefined;
@@ -19,7 +19,7 @@ export declare class SelectDef<T extends object, FilterValueType> extends Access
19
19
  readonly sortingFn?: (a: T, b: T) => 1 | -1 | 0;
20
20
  readonly optional: boolean;
21
21
  readonly clearable: boolean;
22
- readonly getSpecificOptions?: (item: T, index: number) => Array<SelectOption<FilterValueType>> | Promise<Array<SelectOption<FilterValueType>>>;
22
+ readonly getSpecificOptions?: (item: T, index: number) => Array<SelectOption<SelectValueType>> | Promise<Array<SelectOption<SelectValueType>>>;
23
23
  getDisplayValue: (item: T, index: number) => string | null | Promise<string | null>;
24
- getOptions: () => Array<SelectOption<FilterValueType>> | Promise<Array<SelectOption<FilterValueType>>>;
24
+ getOptions: () => Array<SelectOption<SelectValueType>> | Promise<Array<SelectOption<SelectValueType>>>;
25
25
  }
@@ -1,12 +1,12 @@
1
1
  import type { CustomFilterFn } from '../../../Filtering/CustomFilterFn.js';
2
2
  import type { FilterFn, StringFilterValueType } from '../../../Filtering/FilterFn.js';
3
3
  import { AccessorDef, type AccessorDefProps } from './AccessorDef.svelte.js';
4
- export interface TextInputDefProps<T extends object, FilterValueType = StringFilterValueType> extends AccessorDefProps<T, FilterValueType> {
4
+ export interface TextInputDefProps<T extends object, in FilterValueType = StringFilterValueType, out SelectValueType = StringFilterValueType> extends AccessorDefProps<T, FilterValueType, SelectValueType> {
5
5
  filterValueType?: 'String';
6
6
  }
7
- export declare class TextInputDef<T extends object, FilterValueType = StringFilterValueType> extends AccessorDef<T, FilterValueType> {
7
+ export declare class TextInputDef<T extends object, in FilterValueType = StringFilterValueType, out SelectValueType = StringFilterValueType> extends AccessorDef<T, FilterValueType, SelectValueType> {
8
8
  readonly accessorType: "Text";
9
- constructor(props: TextInputDefProps<T, FilterValueType>);
9
+ constructor(props: TextInputDefProps<T, FilterValueType, SelectValueType>);
10
10
  private _filterFn;
11
11
  get filterFn(): CustomFilterFn | FilterFn<T, FilterValueType> | undefined;
12
12
  set filterFn(v: CustomFilterFn | FilterFn<T, FilterValueType> | undefined);
@@ -1,12 +1,12 @@
1
1
  import type { ColourSet } from '../../../../../../scss/colours.js';
2
2
  import type { TableActionButton } from '../../TableActionButton.js';
3
3
  import { ColumnDef, type ColumnDefProps } from '../ColumnDef.svelte.js';
4
- export interface ActionsDefProps<T extends object, FilterValueType> extends Omit<ColumnDefProps<T, FilterValueType>, 'id' | 'header'> {
4
+ export interface ActionsDefProps<T extends object, in FilterValueType, out OptionsValueType = unknown> extends Omit<ColumnDefProps<T, FilterValueType, OptionsValueType>, 'id' | 'header'> {
5
5
  actions: Array<TableActionButton<T>>;
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, FilterValueType> extends ColumnDef<T, FilterValueType> {
9
+ export declare class ActionsDef<T extends object, FilterValueType, out OptionsValueType = unknown> extends ColumnDef<T, FilterValueType, OptionsValueType> {
10
10
  constructor(props: ActionsDefProps<T, FilterValueType>);
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, FilterFnType> {
10
+ export interface ColumnDefProps<T extends object, in FilterFnType, out OptionsType> {
11
11
  id: string;
12
12
  header: string | Snippet;
13
13
  debug?: boolean;
@@ -22,12 +22,12 @@ export interface ColumnDefProps<T extends object, FilterFnType> {
22
22
  isValid?: ValidationFn<T>;
23
23
  filterFn?: FilterFn<T, FilterFnType> | CustomFilterFn;
24
24
  filterValueType?: FilterValueType;
25
- getOptions?: () => Array<SelectOption<FilterFnType>> | Promise<Array<SelectOption<FilterFnType>>>;
25
+ getOptions?: () => Array<SelectOption<OptionsType>> | Promise<Array<SelectOption<OptionsType>>>;
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, FilterFnType> {
30
- protected constructor(props: ColumnDefProps<T, FilterFnType>);
29
+ export declare abstract class ColumnDef<T extends object, in FilterFnType = unknown, out OptionsType = unknown> {
30
+ protected constructor(props: ColumnDefProps<T, FilterFnType, OptionsType>);
31
31
  readonly id: string;
32
32
  debug: boolean;
33
33
  private _index;
@@ -60,6 +60,5 @@ export declare abstract class ColumnDef<T extends object, FilterFnType> {
60
60
  readonly isEditable: (item: T, index: number) => boolean | Promise<boolean>;
61
61
  readonly resizable: boolean;
62
62
  readonly header: string | Snippet;
63
- readonly getOptions?: () => Array<SelectOption<FilterFnType>> | Promise<Array<SelectOption<FilterFnType>>>;
64
- readonly downcast: () => ColumnDef<T, FilterFnType>;
63
+ readonly getOptions?: () => Array<SelectOption<OptionsType>> | Promise<Array<SelectOption<OptionsType>>>;
65
64
  }
@@ -83,10 +83,4 @@ export class ColumnDef {
83
83
  resizable;
84
84
  header;
85
85
  getOptions;
86
- // HACK: indended to be used as a quick type coercion for lists of ColumnDef<T,unknown>
87
- // not the best way to solve this problem, but I've wasted enough time on this.
88
- // eslint-disable-next-line @typescript-eslint/prefer-return-this-type
89
- downcast = () => {
90
- return this;
91
- };
92
86
  }
@@ -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, unknown>>;
10
+ columnDefs: Array<ColumnDef<T>>;
11
11
  }
@@ -2,17 +2,17 @@ import type { Component } from 'svelte';
2
2
  import type { DisplayType } from '../../DisplayType.js';
3
3
  import type { TableCell } from '../../TableCell.js';
4
4
  import { ColumnDef, type ColumnDefProps } from '../ColumnDef.svelte.js';
5
- export interface DisplayDefModalProps<T extends object, FilterValueType> {
6
- cell: TableCell<T, FilterValueType>;
5
+ export interface DisplayDefModalProps<T extends object, in FilterValueType = unknown, out OptionsValueType = unknown> {
6
+ cell: TableCell<T, FilterValueType, OptionsValueType>;
7
7
  onclose: () => void;
8
8
  onsubmit: () => void;
9
9
  }
10
- export interface AbstractDisplayDefProps<T extends object, FilterFnType> extends ColumnDefProps<T, FilterFnType> {
10
+ export interface AbstractDisplayDefProps<T extends object, FilterFnType, out OptionsValueType = unknown> extends ColumnDefProps<T, FilterFnType, OptionsValueType> {
11
11
  modal?: Component<any, any, any>;
12
12
  }
13
- export declare abstract class AbstractDisplayDef<T extends object, FilterValueType> extends ColumnDef<T, FilterValueType> {
13
+ export declare abstract class AbstractDisplayDef<T extends object, FilterValueType, out OptionsValueType = unknown> extends ColumnDef<T, FilterValueType, OptionsValueType> {
14
14
  abstract readonly displayType: DisplayType;
15
- constructor(props: AbstractDisplayDefProps<T, FilterValueType>);
15
+ constructor(props: AbstractDisplayDefProps<T, FilterValueType, OptionsValueType>);
16
16
  readonly columnType: "Display";
17
17
  readonly modal: Component<DisplayDefModalProps<T, FilterValueType>, any, any> | undefined;
18
18
  }
@@ -2,7 +2,7 @@ import type { IconProps } from '../../../../../IconProps.js';
2
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, InnterIdType extends Primitive, FilterValueType = unknown> extends ColumnDefProps<T, FilterValueType> {
5
+ export interface ExpandDefProps<T extends object, R extends object, InnterIdType extends Primitive = Primitive, in FilterValueType = unknown, out OptionsValueType = unknown> extends ColumnDefProps<T, FilterValueType, OptionsValueType> {
6
6
  isEnabled: (item: T, index: number) => boolean | Promise<boolean>;
7
7
  getInnerColumnDefs: (item: T, index: number) => DefsWrapper<R>;
8
8
  headerIcon: IconProps['name'];
@@ -10,9 +10,9 @@ export interface ExpandDefProps<T extends object, R extends object, InnterIdType
10
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, InnterIdType extends Primitive, FilterValueType = unknown> extends ColumnDef<T, FilterValueType> {
13
+ export declare class ExpandDef<T extends object, R extends object, InnterIdType extends Primitive = Primitive, in FilterValueType = unknown, out OptionsValueType = unknown> extends ColumnDef<T, FilterValueType, OptionsValueType> {
14
14
  readonly columnType: "Expand";
15
- constructor(props: ExpandDefProps<T, R, InnterIdType, FilterValueType>);
15
+ constructor(props: ExpandDefProps<T, R, InnterIdType, FilterValueType, OptionsValueType>);
16
16
  readonly accessorFn: (item: T, index: number) => Array<R> | Promise<Array<R>>;
17
17
  readonly filterFn: undefined;
18
18
  readonly innerTableName: string;
@@ -2,9 +2,10 @@ import type { CustomFilterFn } from '../../../Filtering/CustomFilterFn.js';
2
2
  import type { FilterFn } from '../../../Filtering/FilterFn.js';
3
3
  import { ColumnType } from '../../ColumnType.js';
4
4
  import { ColumnDef, type ColumnDefProps } from '../ColumnDef.svelte.js';
5
- export type FilterOnlyDefProps<T extends object, FilterFnType = unknown> = ColumnDefProps<T, FilterFnType>;
6
- export declare class FilterOnlyDef<T extends object, FilterFnType = unknown> extends ColumnDef<T, FilterFnType> {
7
- constructor(props: FilterOnlyDefProps<T, FilterFnType>);
5
+ export interface FilterOnlyDefProps<T extends object, FilterFnType = unknown, out OptionsValueType = unknown> extends ColumnDefProps<T, FilterFnType, OptionsValueType> {
6
+ }
7
+ export declare class FilterOnlyDef<T extends object, FilterFnType = unknown, out OptionsValueType = unknown> extends ColumnDef<T, FilterFnType, OptionsValueType> {
8
+ constructor(props: FilterOnlyDefProps<T, FilterFnType, OptionsValueType>);
8
9
  readonly columnType: ColumnType;
9
10
  readonly filterFn: CustomFilterFn | FilterFn<T, FilterFnType> | undefined;
10
11
  }
@@ -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, unknown>>;
10
+ columnDefs: Array<ColumnDef<T>>;
11
11
  }
@@ -1,7 +1,6 @@
1
- import type { BoolFilterValueType } from '../../../Filtering/FilterFn.js';
2
1
  import { ColumnType } from '../../ColumnType.js';
3
2
  import { ColumnDef } from '../ColumnDef.svelte.js';
4
- export declare class RowSelectionDef<T extends object, FilterValueType = BoolFilterValueType> extends ColumnDef<T, FilterValueType> {
3
+ export declare class RowSelectionDef<T extends object> extends ColumnDef<T> {
5
4
  readonly isSelectable: (item: T, index: number) => boolean | Promise<boolean>;
6
5
  readonly columnType: ColumnType;
7
6
  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
3
  export interface DefsWrapper<T extends object> {
4
- defs: Array<ColumnDef<T, unknown>>;
4
+ defs: Array<ColumnDef<T>>;
5
5
  remoteFilters?: CustomRemoteFilters<unknown>;
6
6
  }
@@ -1,7 +1,7 @@
1
1
  import type { Row } from '../Context/Row.js';
2
2
  import type { Column } from './Column.js';
3
- export interface TableCell<T extends object, FilterValueType = unknown> {
4
- column: Column<T, FilterValueType>;
3
+ export interface TableCell<T extends object, in FilterValueType = unknown, out OptionsValueType = unknown> {
4
+ column: Column<T, FilterValueType, OptionsValueType>;
5
5
  row: Row<T>;
6
6
  id: string;
7
7
  getValue: () => unknown | Promise<unknown>;
@@ -10,7 +10,7 @@ import type { OnChangeFn } from '../OnChangeFn.js';
10
10
  import type { PaginationState } from '../Pagination/PaginationState.js';
11
11
  export interface ITable<T extends object> {
12
12
  data: Promise<Array<T>>;
13
- columns: Array<ColumnDef<T, unknown>>;
13
+ columns: Array<ColumnDef<T>>;
14
14
  columnSizing: ColumnSizingState;
15
15
  columnVisibility: VisibilityState;
16
16
  sorting: SortingState | undefined;
@@ -62,11 +62,11 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
62
62
  get limitFooter(): boolean;
63
63
  set limitFooter(v: boolean);
64
64
  private _dragTarget;
65
- get dragTarget(): ColumnDef<T, any> | null;
66
- set dragTarget(v: ColumnDef<T, any> | null);
65
+ get dragTarget(): ColumnDef<T> | null;
66
+ set dragTarget(v: ColumnDef<T> | null);
67
67
  private _columnDefs;
68
- get columnDefs(): Array<ColumnDef<T, unknown>>;
69
- set columnDefs(v: Array<ColumnDef<T, unknown>>);
68
+ get columnDefs(): Array<ColumnDef<T>>;
69
+ set columnDefs(v: Array<ColumnDef<T>>);
70
70
  private _columnPresets;
71
71
  get columnPresets(): ReadonlyArray<ColumnDefSet<T>>;
72
72
  private set columnPresets(value);
@@ -178,8 +178,8 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
178
178
  updateColumnSizing: OnChangeFn<ColumnSizingState>;
179
179
  readonly table: ITable<T>;
180
180
  readonly lastPage: number;
181
- readonly measureHeaderWidth: (columnDef: ColumnDef<T, unknown>) => number;
182
- readonly autoResize: (columnDef: ColumnDef<T, unknown>) => Promise<void>;
181
+ readonly measureHeaderWidth: (columnDef: ColumnDef<T>) => number;
182
+ readonly autoResize: (columnDef: ColumnDef<T>) => Promise<void>;
183
183
  reorderColumn: (dropTarget: HTMLLIElement | HTMLTableCellElement | null) => void;
184
184
  copyHighlightedRowsToClipboard: () => Promise<void>;
185
185
  copyDataToClipboard: () => Promise<void>;
@@ -231,8 +231,8 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
231
231
  private setupDefaultColumnDefs;
232
232
  private _getUserDefaults;
233
233
  private _setNewPinningState;
234
- readonly getToggleSortingHandler: (def: ColumnDef<T, unknown>) => () => void;
234
+ readonly getToggleSortingHandler: (def: ColumnDef<T>) => () => void;
235
235
  private reassignDefsToPresets;
236
236
  private filteringLoop;
237
237
  }
238
- export declare function isSearchable<T extends object, CD extends ColumnDef<T, unknown>>(def: CD): def is CD & HasCustomFilterFunction;
238
+ export declare function isSearchable<T extends object, CD extends ColumnDef<T>>(def: CD): def is CD & HasCustomFilterFunction;
@@ -317,8 +317,6 @@ export class TableContext {
317
317
  set limitFooter(v) {
318
318
  this._limitFooter = v;
319
319
  }
320
- /* eslint-disable @typescript-eslint/no-explicit-any */
321
- // type here set to any because users of this property should not access the filter type, but typescript doesn't support that
322
320
  _dragTarget = $state(null);
323
321
  get dragTarget() {
324
322
  return this._dragTarget;
@@ -326,7 +324,6 @@ export class TableContext {
326
324
  set dragTarget(v) {
327
325
  this._dragTarget = v;
328
326
  }
329
- /* eslint-enable @typescript-eslint/no-explicit-any */
330
327
  _columnDefs = $state([]);
331
328
  get columnDefs() {
332
329
  return this._columnDefs;
@@ -1068,6 +1065,13 @@ export class TableContext {
1068
1065
  else {
1069
1066
  this.setFocusRight();
1070
1067
  }
1068
+ return;
1069
+ }
1070
+ default: {
1071
+ if (this.debug) {
1072
+ console.log(`handleKeystroke: ignoring key ${e.key}`);
1073
+ }
1074
+ break;
1071
1075
  }
1072
1076
  }
1073
1077
  if (this.allowCopy) {
@@ -1089,6 +1093,10 @@ export class TableContext {
1089
1093
  await this.copyDataToClipboard();
1090
1094
  }
1091
1095
  break;
1096
+ default: {
1097
+ //nothing
1098
+ break;
1099
+ }
1092
1100
  }
1093
1101
  }
1094
1102
  }
@@ -1441,8 +1449,9 @@ export class TableContext {
1441
1449
  }
1442
1450
  };
1443
1451
  moveToStart = () => {
1444
- if (!this.focusStart)
1452
+ if (!this.focusStart) {
1445
1453
  return;
1454
+ }
1446
1455
  const visibility = this.columnVisibility;
1447
1456
  const columnDefs = this.columnDefs;
1448
1457
  const current = this.focusStart.column;
@@ -43,6 +43,6 @@ export declare abstract class TableDataRepository<T extends object> implements I
43
43
  set forceRefresh(v: () => void);
44
44
  readonly registerRefreshMethod: (method: () => void) => void;
45
45
  protected getValueSet(values: Array<string | number | undefined>): Set<number>;
46
- static getValues(values: Array<string | number | undefined>): Array<number>;
46
+ static getValues(values: Array<string | number | null | undefined>): Array<number>;
47
47
  static getMinMax(values: Array<string | number | null | undefined>): number[] | undefined[];
48
48
  }
@@ -103,7 +103,9 @@
103
103
  onkeydown={handleEsc}
104
104
  onclick={(e) => {
105
105
  if (e.target === dialog) {
106
- if (!mandatory) dialog.close();
106
+ if (!mandatory) {
107
+ dialog.close();
108
+ }
107
109
  }
108
110
  clearTimer();
109
111
  }}
@@ -62,7 +62,7 @@ export function refWrapper(initial) {
62
62
  },
63
63
  set value(v) {
64
64
  value = v;
65
- }
65
+ },
66
66
  };
67
67
  }
68
68
  export function SQLFriendly(date) {
@@ -94,7 +94,7 @@ export const localTimeFormat = new Intl.DateTimeFormat('en-GB', {
94
94
  hourCycle: 'h23',
95
95
  minute: '2-digit',
96
96
  second: '2-digit',
97
- timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone
97
+ timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
98
98
  });
99
99
  export function passthrough(e) {
100
100
  if (!e.key.match(/^[a-zA-Z0-9[\]]$/gm)) {
@@ -212,7 +212,7 @@ export async function asyncSome(array, asyncCallback) {
212
212
  // empty promise is required here
213
213
  // because otherwise the first false would immediately end the race without checking the rest of the array
214
214
  promises.map(async (p) => (await p) || emptyPromise)),
215
- Promise.all(promises).then((r) => r.some(Boolean))
215
+ Promise.all(promises).then((r) => r.some(Boolean)),
216
216
  ]);
217
217
  }
218
218
  export async function asyncAll(array, asyncCallback) {
@@ -224,7 +224,7 @@ export async function asyncAll(array, asyncCallback) {
224
224
  // empty promise is required here
225
225
  // because otherwise the first false would immediately end the race without checking the rest of the array
226
226
  promises.map(async (p) => (await p) || emptyPromise)),
227
- Promise.all(promises).then((r) => r.every(Boolean))
227
+ Promise.all(promises).then((r) => r.every(Boolean)),
228
228
  ]);
229
229
  }
230
230
  export const asyncEvery = asyncAll;
@@ -1,12 +1,12 @@
1
1
  <svelte:options runes />
2
2
 
3
- <script lang="ts" generics="FilterValueType">
3
+ <script lang="ts">
4
4
  import DesktopModal from '../../Components/DesktopModal.svelte';
5
5
  import Switch from '../../Components/Switch.svelte';
6
6
  import type { DisplayDefModalProps } from '../../Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js';
7
7
  import type { ExampleItem } from './ExampleItem.js';
8
8
 
9
- const { cell, onclose, onsubmit }: DisplayDefModalProps<ExampleItem, FilterValueType> = $props();
9
+ const { cell, onclose, onsubmit }: DisplayDefModalProps<ExampleItem> = $props();
10
10
  </script>
11
11
 
12
12
  <DesktopModal
@@ -1,26 +1,5 @@
1
1
  import type { DisplayDefModalProps } from '../../Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.js';
2
2
  import type { ExampleItem } from './ExampleItem.js';
3
- declare function $$render<FilterValueType>(): {
4
- props: DisplayDefModalProps<ExampleItem, FilterValueType>;
5
- exports: {};
6
- bindings: "";
7
- slots: {};
8
- events: {};
9
- };
10
- declare class __sveltets_Render<FilterValueType> {
11
- props(): ReturnType<typeof $$render<FilterValueType>>['props'];
12
- events(): ReturnType<typeof $$render<FilterValueType>>['events'];
13
- slots(): ReturnType<typeof $$render<FilterValueType>>['slots'];
14
- bindings(): "";
15
- exports(): {};
16
- }
17
- interface $$IsomorphicComponent {
18
- new <FilterValueType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<FilterValueType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<FilterValueType>['props']>, ReturnType<__sveltets_Render<FilterValueType>['events']>, ReturnType<__sveltets_Render<FilterValueType>['slots']>> & {
19
- $$bindings?: ReturnType<__sveltets_Render<FilterValueType>['bindings']>;
20
- } & ReturnType<__sveltets_Render<FilterValueType>['exports']>;
21
- <FilterValueType>(internal: unknown, props: ReturnType<__sveltets_Render<FilterValueType>['props']> & {}): ReturnType<__sveltets_Render<FilterValueType>['exports']>;
22
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
23
- }
24
- declare const ExampleModal: $$IsomorphicComponent;
25
- type ExampleModal<FilterValueType> = InstanceType<typeof ExampleModal<FilterValueType>>;
3
+ declare const ExampleModal: import("svelte").Component<DisplayDefModalProps<ExampleItem, unknown, unknown>, {}, "">;
4
+ type ExampleModal = ReturnType<typeof ExampleModal>;
26
5
  export default ExampleModal;
@@ -2,4 +2,4 @@ import type { GridNumberItem } from './GridNumberItem.js';
2
2
  import type { GridSelectItem } from './GridSelectItem.js';
3
3
  import type { GridTextItem } from './GridTextItem.js';
4
4
  import type { ValueProp } from './Misc.js';
5
- export type GridItem<V extends object, VP extends ValueProp<V>> = GridTextItem | GridNumberItem | GridSelectItem<V, VP>;
5
+ export type GridItem<V extends object, VP extends ValueProp<V> = ValueProp<V>> = GridTextItem | GridNumberItem | GridSelectItem<V, VP>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lavalogic/scoria",
3
3
  "description": "Svelte components used for the FloWMS Web Frontend",
4
- "version": "0.14.2",
4
+ "version": "0.16.0",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
7
7
  },
@@ -33,35 +33,35 @@
33
33
  "@eslint/compat": "^2.0.2",
34
34
  "@eslint/js": "^10.0.1",
35
35
  "@playwright/test": "^1.58.2",
36
- "@storybook/addon-a11y": "^10.2.12",
37
- "@storybook/addon-docs": "^10.2.12",
36
+ "@storybook/addon-a11y": "^10.2.14",
37
+ "@storybook/addon-docs": "^10.2.14",
38
38
  "@storybook/addon-svelte-csf": "^5.0.11",
39
- "@storybook/addon-vitest": "^10.2.12",
40
- "@storybook/sveltekit": "^10.2.12",
41
- "@sveltejs/adapter-node": "^5.5.3",
42
- "@sveltejs/kit": "^2.53.1",
39
+ "@storybook/addon-vitest": "^10.2.14",
40
+ "@storybook/sveltekit": "^10.2.14",
41
+ "@sveltejs/adapter-node": "^5.5.4",
42
+ "@sveltejs/kit": "^2.53.4",
43
43
  "@sveltejs/package": "^2.5.7",
44
44
  "@sveltejs/vite-plugin-svelte": "^6.2.4",
45
45
  "@types/eslint": "^9.6.1",
46
- "@types/node": "^25.3.0",
46
+ "@types/node": "^25.3.3",
47
47
  "@typescript-eslint/eslint-plugin": "^8.56.1",
48
48
  "@typescript-eslint/parser": "^8.56.1",
49
49
  "@vitest/browser": "^4.0.18",
50
50
  "@vitest/browser-playwright": "^4.0.18",
51
51
  "eslint": "^10.0.2",
52
52
  "eslint-config-prettier": "^10.1.8",
53
- "eslint-plugin-storybook": "^10.2.12",
53
+ "eslint-plugin-storybook": "^10.2.14",
54
54
  "eslint-plugin-svelte": "^3.15.0",
55
- "globals": "^17.3.0",
55
+ "globals": "^17.4.0",
56
56
  "mdsvex": "^0.12.6",
57
57
  "playwright": "^1.58.2",
58
58
  "prettier": "^3.8.1",
59
- "prettier-plugin-svelte": "^3.5.0",
60
- "publint": "^0.3.17",
59
+ "prettier-plugin-svelte": "^3.5.1",
60
+ "publint": "^0.3.18",
61
61
  "sass-embedded": "^1.97.3",
62
- "storybook": "^10.2.12",
63
- "svelte": "^5.53.4",
64
- "svelte-check": "^4.4.3",
62
+ "storybook": "^10.2.14",
63
+ "svelte": "^5.53.7",
64
+ "svelte-check": "^4.4.4",
65
65
  "svelte-render-scan": "^1.1.0",
66
66
  "typescript": "^5.9.3",
67
67
  "typescript-eslint": "^8.56.1",