@lavalogic/scoria 0.17.2 → 0.18.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 (46) hide show
  1. package/dist/Components/Table/Body/QuickSearchCell.svelte +78 -73
  2. package/dist/Components/Table/Body/Rows/ColumnList.svelte +1 -1
  3. package/dist/Components/Table/Body/Rows/ColumnListRowProps.d.ts +1 -1
  4. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +12 -6
  5. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +15 -35
  6. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +15 -35
  7. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +35 -4
  8. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +60 -26
  9. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +14 -35
  10. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +35 -5
  11. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +82 -139
  12. package/dist/Components/Table/Body/Rows/Columns/TableDatePickerProps.d.ts +1 -1
  13. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +15 -35
  14. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte.d.ts +1 -2
  15. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +14 -34
  16. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +93 -37
  17. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte.d.ts +12 -13
  18. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +14 -34
  19. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +14 -34
  20. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +40 -61
  21. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte.d.ts +12 -11
  22. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +39 -29
  23. package/dist/Components/Table/Misc/FilterInput.svelte +1 -1
  24. package/dist/Components/Table/Table.svelte +15 -16
  25. package/dist/Components/Table/Types/Columns/DateColumn.d.ts +2 -2
  26. package/dist/Components/Table/Types/Columns/DateTableCell.d.ts +2 -2
  27. package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.d.ts +1 -1
  28. package/dist/Components/Table/Types/Columns/Definitions/JSONColumnDefSet.d.ts +1 -1
  29. package/dist/Components/Table/Types/Columns/Definitions/ValidationFn.d.ts +1 -1
  30. package/dist/Components/Table/Types/Context/ITable.d.ts +0 -1
  31. package/dist/Components/Table/Types/Context/Row.d.ts +3 -3
  32. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +16 -22
  33. package/dist/Components/Table/Types/Context/TableContext.svelte.js +299 -275
  34. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +1 -1
  35. package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +1 -1
  36. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.d.ts +2 -2
  37. package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.js +23 -7
  38. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +2 -2
  39. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +2 -4
  40. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.d.ts +18 -36
  41. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.js +77 -113
  42. package/dist/Components/TextInput.svelte +11 -4
  43. package/dist/Components/Touch/DateModal.svelte +26 -14
  44. package/dist/Helpers/Helpers.svelte.d.ts +5 -1
  45. package/dist/Helpers/Helpers.svelte.js +9 -10
  46. package/package.json +14 -14
@@ -15,6 +15,29 @@ import { ProgressBarDef } from '../Types/Columns/Definitions/Display/ProgressBar
15
15
  import { ValidityDef } from '../Types/Columns/Definitions/Display/ValidityDef.svelte.js';
16
16
  import { ExpandDef } from '../Types/Columns/Definitions/Expand/ExpandDef.svelte.js';
17
17
  export function generateExampleItemColumnDefs(modal) {
18
+ const isValid = (item, isSelected) => {
19
+ void item.name;
20
+ void item.isChecked;
21
+ void isSelected;
22
+ if (!$effect.tracking()) {
23
+ throw new Error(`NOT in tracking context`);
24
+ }
25
+ return isSelected.then((isSelected) => {
26
+ if (isSelected) {
27
+ if (!item.name.trim()) {
28
+ return { value: Validity.Invalid, reason: 'Missing name' };
29
+ }
30
+ if (item.isChecked) {
31
+ return Validity.Valid;
32
+ }
33
+ return {
34
+ value: Validity.Warning,
35
+ reason: 'Example item is not checked.',
36
+ };
37
+ }
38
+ return { value: Validity.Neutral, reason: 'row not selected' };
39
+ });
40
+ };
18
41
  const expandDef = $state(new ExpandDef({
19
42
  accessorFn: (it) => [it],
20
43
  getInnerColumnDefs: () => generateExampleItemColumnDefs(modal),
@@ -27,27 +50,15 @@ export function generateExampleItemColumnDefs(modal) {
27
50
  getUserId: () => '1',
28
51
  },
29
52
  isEnabled: () => true,
53
+ isValid,
30
54
  }));
31
55
  let defs = $state([
32
56
  expandDef,
33
57
  new ValidityDef({
34
58
  header: 'Valid',
35
59
  id: 'valid',
36
- isValid: (item, isSelected) => {
37
- if (isSelected) {
38
- if (!item.name.trim()) {
39
- return { value: Validity.Invalid, reason: 'Missing name' };
40
- }
41
- if (item.isChecked) {
42
- return Validity.Valid;
43
- }
44
- return {
45
- value: Validity.Warning,
46
- reason: 'Example item is not checked.',
47
- };
48
- }
49
- return { value: Validity.Neutral, reason: 'row not selected' };
50
- },
60
+ debug: true,
61
+ isValid,
51
62
  modal,
52
63
  }),
53
64
  new DisplayDef({
@@ -61,6 +72,7 @@ export function generateExampleItemColumnDefs(modal) {
61
72
  return item.id;
62
73
  },
63
74
  // debug: true,
75
+ isValid,
64
76
  }),
65
77
  new QueryDef({
66
78
  header: 'simulated query def',
@@ -81,11 +93,13 @@ export function generateExampleItemColumnDefs(modal) {
81
93
  })
82
94
  : [];
83
95
  },
96
+ isValid,
84
97
  }),
85
98
  new TextInputDef({
86
99
  header: 'Name',
87
100
  id: 'name',
88
101
  isEditable: () => true,
102
+ isValid,
89
103
  }),
90
104
  new NumberInputDef({
91
105
  header: 'Some Number',
@@ -93,6 +107,7 @@ export function generateExampleItemColumnDefs(modal) {
93
107
  isEditable: () => true,
94
108
  min: 0,
95
109
  max: 12345,
110
+ isValid,
96
111
  }),
97
112
  new ProgressBarDef({
98
113
  getColour: () => {
@@ -103,10 +118,12 @@ export function generateExampleItemColumnDefs(modal) {
103
118
  },
104
119
  header: 'Progress',
105
120
  id: 'progress',
121
+ isValid,
106
122
  }),
107
123
  new CheckboxDef({
108
124
  header: 'Checkbox',
109
125
  id: 'isChecked',
126
+ isValid,
110
127
  }),
111
128
  new DateInputDef({
112
129
  header: 'Some Date',
@@ -122,7 +139,8 @@ export function generateExampleItemColumnDefs(modal) {
122
139
  }
123
140
  return true;
124
141
  },
125
- debug: true,
142
+ // debug: true,
143
+ isValid,
126
144
  // filterValueType: 'Date',
127
145
  // defaultHidden: true
128
146
  }),
@@ -131,6 +149,7 @@ export function generateExampleItemColumnDefs(modal) {
131
149
  id: 'someDateWithTime',
132
150
  isEditable: () => true,
133
151
  showTime: true,
152
+ isValid,
134
153
  }),
135
154
  new DateInputDef({
136
155
  header: 'Flo Date',
@@ -144,6 +163,7 @@ export function generateExampleItemColumnDefs(modal) {
144
163
  isEditable: () => true,
145
164
  defaultHidden: true,
146
165
  showTime: true,
166
+ isValid,
147
167
  }),
148
168
  // altSelectDef,
149
169
  new SelectDef({
@@ -172,6 +192,7 @@ export function generateExampleItemColumnDefs(modal) {
172
192
  },
173
193
  getDisplayValue: (item) => item.someSelect,
174
194
  isEditable: () => true,
195
+ isValid,
175
196
  }),
176
197
  new BubbleDef({
177
198
  header: 'Generated Bubble',
@@ -180,10 +201,12 @@ export function generateExampleItemColumnDefs(modal) {
180
201
  return ['foo', 'bar', 'baz'];
181
202
  },
182
203
  defaultHidden: true,
204
+ isValid,
183
205
  }),
184
206
  new BubbleDef({
185
207
  header: 'Multi Bubbles',
186
208
  id: 'someBubbles',
209
+ isValid,
187
210
  }),
188
211
  ]);
189
212
  return {
@@ -195,16 +218,3 @@ export function generateExampleItemColumnDefs(modal) {
195
218
  },
196
219
  };
197
220
  }
198
- //sanity check
199
- // class A<T> {}
200
- // class B {}
201
- // class C<T> extends A<T> {}
202
- // class D extends B {}
203
- // function asdf() {
204
- // const x: Array<A<B>> = [];
205
- // //C extends A, D extends B
206
- // const y: C<D> = new C();
207
- // x.push(y); // error
208
- // const g: A<B> = y; //valid, subtype
209
- // x.push(g); // no error
210
- // }
@@ -90,7 +90,7 @@
90
90
  }
91
91
  void filteringStateValue;
92
92
  if (def.debug) {
93
- console.log('filtering state value:', $state.snapshot(filteringStateValue));
93
+ console.log('FILTER INPUT: filtering state value:', $state.snapshot(filteringStateValue));
94
94
  }
95
95
 
96
96
  if (hasQuery(customFilter)) {
@@ -50,8 +50,6 @@
50
50
  // NOTE: known limitation. This is passed as a wrapper, and they should never require reassignment. It is deeply reactive
51
51
  setContext(TableContext.identifier, tableContext);
52
52
 
53
- // $inspect(tableContext.showQuickFiltering);
54
-
55
53
  const { openContextMenu: _openContextMenu } = getContext<ContextMenuContext>(
56
54
  ContextMenuContext.identifier
57
55
  );
@@ -132,20 +130,21 @@
132
130
  if (clickedElement) {
133
131
  const [rowString, columnId] = clickedElement;
134
132
  const row = parseInt(rowString);
135
- if (
136
- !tableContext.focusedColumnIds.has(columnId) ||
137
- !tableContext.focusedRowIndexIds.has(row)
138
- ) {
139
- const columnIndex = tableContext.columnDefs.find((it) => it.id === columnId)?.index;
140
-
141
- if (columnIndex) {
142
- tableContext.moveFocus({
143
- column: columnIndex,
144
- row,
145
- id: columnId,
146
- });
147
- }
148
- }
133
+ Promise.all([tableContext.focusedColumnIds, tableContext.focusedRowIndices])
134
+ .then(([focusedColumnIds, focusedRowIndices]) => {
135
+ if (!focusedColumnIds.has(columnId) || !focusedRowIndices.has(row)) {
136
+ const columnIndex = tableContext.columnDefs.find((it) => it.id === columnId)?.index;
137
+
138
+ if (columnIndex) {
139
+ tableContext.moveFocus({
140
+ column: columnIndex,
141
+ row,
142
+ id: columnId,
143
+ });
144
+ }
145
+ }
146
+ })
147
+ .catch(devCatch);
149
148
  }
150
149
 
151
150
  // this may not exist in http contexts
@@ -1,7 +1,7 @@
1
1
  import type { DateInputDef } from './Definitions/Accessors/DateInputDef.svelte.js';
2
- export interface DateColumn<T extends object> {
2
+ export interface DateColumn<T extends object, in FilterValueType, out SelectValueType> {
3
3
  id: string;
4
- columnDef: DateInputDef<T>;
4
+ columnDef: DateInputDef<T, FilterValueType, SelectValueType>;
5
5
  getCanSort: () => boolean;
6
6
  getToggleSortingHandler: () => (e: MouseEvent) => void;
7
7
  getIsSorted: () => 'asc' | 'desc' | 'none';
@@ -1,7 +1,7 @@
1
1
  import type { Row } from '../Context/Row.js';
2
2
  import type { DateColumn } from './DateColumn.js';
3
- export interface DateTableCell<T extends object> {
4
- column: DateColumn<T>;
3
+ export interface DateTableCell<T extends object, in FilterValueType, out SelectValueType> {
4
+ column: DateColumn<T, FilterValueType, SelectValueType>;
5
5
  row: Row<T>;
6
6
  id: string;
7
7
  getValue: () => unknown;
@@ -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, never, unknown>>;
10
+ columnDefs: Array<ColumnDef<T>>;
11
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, never, unknown>>;
10
+ columnDefs: Array<ColumnDef<T>>;
11
11
  }
@@ -1,3 +1,3 @@
1
1
  import type { Validity } from '../../../../../Types/Internal/Validity.js';
2
2
  import type { ValidityWrapper } from '../../../../../Types/Internal/ValidityWrapper.js';
3
- export type ValidationFn<T> = (item: T, isSelected: boolean) => Validity | Promise<Validity | ValidityWrapper> | ValidityWrapper;
3
+ export type ValidationFn<T> = (item: T, isSelected: Promise<boolean>) => Validity | Promise<Validity | ValidityWrapper> | ValidityWrapper;
@@ -28,6 +28,5 @@ export interface ITable<T extends object> {
28
28
  getRightVisibleLeafColumns: () => Array<Column<T>>;
29
29
  getCenterVisibleLeafColumns: () => Array<Column<T>>;
30
30
  onColumnVisibilityChange: OnChangeFn<VisibilityState>;
31
- onColumnSizingChange: OnChangeFn<ColumnSizingState>;
32
31
  onColumnFiltersChange: OnChangeFn<ColumnFiltersState> | undefined;
33
32
  }
@@ -5,7 +5,7 @@ export interface Row<T extends object> {
5
5
  visibleIndex: number;
6
6
  originalIndex: number;
7
7
  id: string;
8
- getLeftVisibleCells: () => Array<TableCell<T, never, unknown>>;
9
- getRightVisibleCells: () => Array<TableCell<T, never, unknown>>;
10
- getCenterVisibleCells: () => Array<TableCell<T, never, unknown>>;
8
+ getLeftVisibleCells: () => Array<TableCell<T>>;
9
+ getRightVisibleCells: () => Array<TableCell<T>>;
10
+ getCenterVisibleCells: () => Array<TableCell<T>>;
11
11
  }
@@ -73,14 +73,11 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
73
73
  private _selectedPreset;
74
74
  get selectedPreset(): ColumnDefSet<T> | undefined;
75
75
  set selectedPreset(v: ColumnDefSet<T> | undefined);
76
- private _focusedRowIndexIds;
77
- get focusedRowIndexIds(): SvelteSet<number>;
78
- set focusedRowIndexIds(v: SvelteSet<number>);
76
+ private readonly _pageColData;
77
+ readonly focusedRowIndices: Promise<SvelteSet<number>>;
79
78
  private readonly _highlightedItems;
80
79
  get highlightedItems(): SvelteMap<Awaited<unknown>, T>;
81
- private _focusedColumnIds;
82
- get focusedColumnIds(): SvelteSet<string>;
83
- set focusedColumnIds(v: SvelteSet<string>);
80
+ readonly focusedColumnIds: Promise<SvelteSet<string>>;
84
81
  private _isMousingDown;
85
82
  get isMousingDown(): boolean;
86
83
  set isMousingDown(v: boolean);
@@ -132,27 +129,26 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
132
129
  private _hasHighlightedItems;
133
130
  get hasHighlightedItems(): boolean;
134
131
  private _selectedItems;
135
- get selectedItems(): SvelteMap<unknown, T>;
136
- private set selectedItems(value);
132
+ get selectedItems(): SvelteMap<RowIdType, T>;
137
133
  private _invalidValues;
138
- get invalidValues(): SvelteMap<unknown, T>;
139
- set invalidValues(v: SvelteMap<unknown, T>);
134
+ get invalidValues(): SvelteMap<RowIdType, T>;
135
+ set invalidValues(v: SvelteMap<RowIdType, T>);
140
136
  private _hasInvalidSelectedItems;
141
137
  get hasInvalidSelectedItems(): boolean;
142
138
  private set hasInvalidSelectedItems(value);
143
139
  private columnDefsById;
144
140
  private readonly getSortingFn;
145
- private _filterTimer;
146
- private get filterTimer();
147
- private set filterTimer(value);
148
141
  private _filteredIndices;
149
142
  get filteredIndices(): ReadonlyArray<number>;
150
- set filteredIndices(v: ReadonlyArray<number>);
151
- readonly filteredData: Array<T>;
152
- readonly sortedData: Promise<Array<T>>;
143
+ readonly filteredData: Promise<T[]>;
144
+ private sortedDataAbortController;
145
+ readonly sortedData: Promise<T[]>;
153
146
  readonly sortedRowModel: Promise<RowModel<T>>;
154
- readonly currentPageData: Promise<Array<T>>;
147
+ private CurrentPageDataAbortController;
148
+ readonly currentPageData: Promise<T[]>;
155
149
  readonly originalRowIndices: Promise<ReadonlyMap<unknown, number>>;
150
+ private rowsPromiseAbortController;
151
+ private rowsPromise;
156
152
  readonly paginationRowModel: Promise<RowModel<T>>;
157
153
  readonly selectionContains: (item: T) => Promise<boolean>;
158
154
  readonly addInvalidValue: (item: T) => Promise<void>;
@@ -160,8 +156,9 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
160
156
  readonly setOpenModalCoordinates: (coordinates: CellCoordinatesWithoutColumn | null) => void;
161
157
  readonly toggleHighlightedRow: (item: T) => Promise<void>;
162
158
  readonly resetHighlightedRows: () => void;
163
- readonly toggleSelected: (item: T, selected: boolean) => Promise<void>;
164
- setSelectionMap: (set: SvelteMap<unknown, T>) => void;
159
+ readonly toggleSelected: (item: T) => Promise<void>;
160
+ readonly setSelected: (item: T, selected: boolean) => Promise<void>;
161
+ setSelectionMap: (set: SvelteMap<RowIdType, T>) => void;
165
162
  readonly updateSelectedItems: () => Promise<void>;
166
163
  readonly resetSelectedItems: () => void;
167
164
  private lastIncrement;
@@ -175,7 +172,6 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
175
172
  readonly setColumnPinning: (updater: Updater<ColumnPinningState>) => void;
176
173
  updateFilters: OnChangeFn<ColumnFiltersState> | undefined;
177
174
  updateVisibility: OnChangeFn<VisibilityState>;
178
- updateColumnSizing: OnChangeFn<ColumnSizingState>;
179
175
  readonly table: ITable<T>;
180
176
  readonly lastPage: number;
181
177
  readonly measureHeaderWidth: (columnDef: ColumnDef<T>) => number;
@@ -223,7 +219,6 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
223
219
  private _updateLocalStorageSettings;
224
220
  private _moveFocusEndRow;
225
221
  private _moveFocusRow;
226
- private _recalculateFocusedElements;
227
222
  private getHighlightedRowData;
228
223
  private getFocusElementData;
229
224
  private updateDefsBasedOnPinning;
@@ -233,6 +228,5 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
233
228
  private _setNewPinningState;
234
229
  readonly getToggleSortingHandler: (def: ColumnDef<T>) => () => void;
235
230
  private reassignDefsToPresets;
236
- private filteringLoop;
237
231
  }
238
232
  export declare function isSearchable<T extends object, FilterValueType, FilterOptionsType, CD extends ColumnDef<T, FilterValueType, FilterOptionsType>>(def: CD): def is CD & HasCustomFilterFunction;