@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
@@ -1,7 +1,8 @@
1
1
  import type { CellCoordinates } from '../Coordinates/CellCoordinates.js';
2
2
  import type { ToolbarPosition } from '../Toolbar/ToolbarPosition.js';
3
- export interface TableInitOptions<T extends object> {
4
- selectionExtractor: (item: T) => unknown;
3
+ export type Primitive = string | number;
4
+ export interface TableInitOptions<T extends object, Identifier extends Primitive> {
5
+ selectionExtractor: (item: T) => Promise<Identifier>;
5
6
  allowCopy?: boolean;
6
7
  enableResize?: boolean;
7
8
  allowColumnReordering?: boolean;
@@ -12,4 +13,5 @@ export interface TableInitOptions<T extends object> {
12
13
  displayFooter?: boolean;
13
14
  onEditCell?: (item: T, coords: CellCoordinates, value: unknown) => void | Promise<void>;
14
15
  getUserId: () => string | undefined;
16
+ debug?: boolean;
15
17
  }
@@ -17,7 +17,7 @@ export interface IDataRepository<T extends object> {
17
17
  manualSorting?: boolean;
18
18
  sorting: SortingState;
19
19
  filtering: ColumnFiltersState;
20
- filterModes: SvelteMap<string, FilterMode>;
20
+ filterModes: ReadonlyMap<string, FilterMode>;
21
21
  setFilterMode: (id: string, mode: FilterMode) => void;
22
22
  filterBy: (id: string, value: unknown) => void;
23
23
  dateFilter?: FilterFn<T, DateFilterValueType>;
@@ -1,4 +1,3 @@
1
- import type { SvelteMap } from 'svelte/reactivity';
2
1
  import type { ColumnFiltersState } from '../Filtering/ColumnFiltersState.js';
3
2
  import type { BoolFilterValueType, DateFilterValueType, FilterFn, NumberFilterValueType, SelectFilterValueType, StringFilterValueType } from '../Filtering/FilterFn.js';
4
3
  import type { FilterMode } from '../Filtering/FilterMode.js';
@@ -10,7 +9,7 @@ export interface ILocalDataRepository<T extends object> extends IDataRepository<
10
9
  nextPage: () => void;
11
10
  prevPage: () => void;
12
11
  filtering: ColumnFiltersState;
13
- filterModes: SvelteMap<string, FilterMode>;
12
+ filterModes: ReadonlyMap<string, FilterMode>;
14
13
  setFilterMode: (id: string, mode: FilterMode) => void;
15
14
  filterBy: (id: string, value: unknown) => void;
16
15
  dateFilter: FilterFn<T, DateFilterValueType>;
@@ -13,9 +13,10 @@ import { TableDataRepository } from './TableDataRepository.svelte.js';
13
13
  export declare const allowedEmptyFilterModes: SvelteSet<StringFilterMode | NumberDateFilterMode>;
14
14
  export declare class LocalTableDataRepository<T extends object> extends TableDataRepository<T> implements ILocalDataRepository<T> {
15
15
  addEmptyRow?: (() => void) | undefined;
16
+ private debug;
16
17
  readonly filterType: "Real";
17
18
  constructor(tableName: string, dataRef: RefWrapper<Array<T>>, // reactive
18
- getUserId: () => string | undefined, addEmptyRow?: (() => void) | undefined);
19
+ getUserId: () => string | undefined, addEmptyRow?: (() => void) | undefined, debug?: boolean);
19
20
  private _isLoading;
20
21
  get isLoading(): boolean;
21
22
  set isLoading(v: boolean);
@@ -11,11 +11,13 @@ export const allowedEmptyFilterModes = new SvelteSet([
11
11
  ]);
12
12
  export class LocalTableDataRepository extends TableDataRepository {
13
13
  addEmptyRow;
14
+ debug;
14
15
  filterType = FilterType.Real;
15
16
  constructor(tableName, dataRef, // reactive
16
- getUserId, addEmptyRow) {
17
+ getUserId, addEmptyRow, debug = false) {
17
18
  super(tableName, getUserId);
18
19
  this.addEmptyRow = addEmptyRow;
20
+ this.debug = debug;
19
21
  this._dataRef = $derived(dataRef);
20
22
  this._lastPage = $derived(Math.ceil(this._dataRef.value.length / this.paginationState.pageSize));
21
23
  this._totalRows = $derived(this._dataRef.value.length);
@@ -64,14 +66,20 @@ export class LocalTableDataRepository extends TableDataRepository {
64
66
  paginationType = PaginationType.Local;
65
67
  setFilterMode = (id, mode) => {
66
68
  if (mode != undefined) {
67
- this.filterModes.set(id, mode);
69
+ if (this.debug) {
70
+ console.log(`LOCAL REPO: Setting mode ${mode} for ${id}`);
71
+ }
72
+ this._filterModes.set(id, mode);
68
73
  //add stub filtering in empty cases
69
74
  if (allowedEmptyFilterModes.has(mode) && !this.filtering.some((it) => it.id === id)) {
70
75
  this.filterBy(id, '');
71
76
  }
72
77
  }
73
78
  else {
74
- this.filterModes.delete(id);
79
+ if (this.debug) {
80
+ console.log(`LOCAL REPO: Deleting mode for ${id}`);
81
+ }
82
+ this._filterModes.delete(id);
75
83
  }
76
84
  };
77
85
  filterBy = (id, value) => {
@@ -82,18 +90,33 @@ export class LocalTableDataRepository extends TableDataRepository {
82
90
  const oldIndex = this.filtering.findIndex((it) => it.id === id);
83
91
  const newFiltering = this.filtering.concat();
84
92
  if (oldIndex === -1 || newFiltering[oldIndex].value != value) {
93
+ // remove previous filter state for this column if exists
94
+ // if it's useful, we'll then add it back to the end of the array for filtering precedence
85
95
  if (oldIndex > -1) {
86
96
  newFiltering.splice(oldIndex, 1);
87
97
  }
88
98
  const filterMode = this.filterModes.get(id);
89
- const hasValue = filterMode &&
90
- (allowedEmptyFilterModes.has(filterMode) ||
91
- !(value == null ||
92
- (typeof value === 'object' && Array.isArray(value) && value.length === 0) ||
93
- (typeof value === 'string' && value.length === 0)));
99
+ const hasValue = (filterMode && allowedEmptyFilterModes.has(filterMode)) ||
100
+ (value != null &&
101
+ ((typeof value === 'object' && Array.isArray(value) && value.length !== 0) ||
102
+ (typeof value === 'string' && value.length !== 0) ||
103
+ (typeof value !== 'object' && typeof value !== 'string')));
94
104
  if (hasValue) {
105
+ if (this.debug) {
106
+ console.log(`LOCAL REPO: adding filter value ${value?.toString()} for id ${id}`);
107
+ }
95
108
  newFiltering.push({ id, value });
96
109
  }
110
+ else {
111
+ if (this.debug) {
112
+ if (!filterMode) {
113
+ console.log(`LOCAL REPO: no filter mode found for ${id}, skipping value ${value?.toString()}...`);
114
+ }
115
+ else {
116
+ console.log(`LOCAL REPO: no value found for id ${id}. Skipping...`);
117
+ }
118
+ }
119
+ }
97
120
  }
98
121
  this.filtering = newFiltering;
99
122
  };
@@ -36,7 +36,8 @@ export declare abstract class TableDataRepository<T extends object> implements I
36
36
  private _previouslyViewedPage;
37
37
  get previouslyViewedPage(): number;
38
38
  private set previouslyViewedPage(value);
39
- filterModes: SvelteMap<string, FilterMode>;
39
+ protected _filterModes: SvelteMap<string, FilterMode>;
40
+ get filterModes(): ReadonlyMap<string, FilterMode>;
40
41
  private _forceRefresh;
41
42
  get forceRefresh(): () => void;
42
43
  set forceRefresh(v: () => void);
@@ -29,7 +29,10 @@ export class TableDataRepository {
29
29
  set previouslyViewedPage(v) {
30
30
  this._previouslyViewedPage = v;
31
31
  }
32
- filterModes = $state(new SvelteMap());
32
+ _filterModes = $state(new SvelteMap());
33
+ get filterModes() {
34
+ return this._filterModes;
35
+ }
33
36
  _forceRefresh = $state(() => {
34
37
  console.warn('tried to force refresh without a callback registered');
35
38
  });
@@ -5,13 +5,13 @@ import type { TableContext } from '../Context/TableContext.svelte.js';
5
5
  import type { CellCoordinates } from '../Coordinates/CellCoordinates.js';
6
6
  export declare class TableFocusDetails<T extends object, in FilterValueType> {
7
7
  private toastCallback;
8
- constructor(cell: TableCell<T, FilterValueType>, tableContext: TableContext<T>, toastCallback: ToastContext['toast']);
8
+ constructor(cell: TableCell<T, FilterValueType>, tableContext: TableContext<T, never>, toastCallback: ToastContext['toast']);
9
9
  private _cell;
10
10
  get cell(): TableCell<T, FilterValueType>;
11
11
  set cell(v: TableCell<T, FilterValueType>);
12
12
  private _tableContext;
13
- get tableContext(): TableContext<T>;
14
- set tableContext(v: TableContext<T>);
13
+ get tableContext(): TableContext<T, never>;
14
+ set tableContext(v: TableContext<T, never>);
15
15
  private _coordinates;
16
16
  get coordinates(): CellCoordinates;
17
17
  private _isMultiFocused;
@@ -119,7 +119,7 @@ export class TableFocusDetails {
119
119
  });
120
120
  async __validityTuple(isValid, original) {
121
121
  try {
122
- const result = (await isValid?.(original, this.tableContext.selectionContains(original))) ??
122
+ const result = (await isValid?.(original, await this.tableContext.selectionContains(original))) ??
123
123
  Validity.Valid;
124
124
  if (isWrapper(result)) {
125
125
  return [result.value, result.reason];
@@ -1,9 +1,9 @@
1
1
  import type { Column } from './Columns/Column.js';
2
- export interface Header<T extends object> {
2
+ export interface Header<T extends object, FilterValueType> {
3
3
  id: string;
4
4
  colSpan: number;
5
5
  getSize: () => number;
6
- column: Column<T>;
6
+ column: Column<T, FilterValueType>;
7
7
  isPlaceholder: boolean;
8
8
  getResizeHandler: () => (e: MouseEvent) => void;
9
9
  }
@@ -1,5 +1,5 @@
1
1
  import type { Header } from './Header.js';
2
2
  export interface HeaderGroup<T extends object> {
3
3
  id: string;
4
- headers: Array<Header<T>>;
4
+ headers: Array<Header<T, unknown>>;
5
5
  }
package/dist/index.d.ts CHANGED
@@ -75,7 +75,7 @@ export { default as Switch } from './Components/Switch.svelte';
75
75
  export { type ITable } from './Components/Table/Types/Context/ITable.js';
76
76
  export { type RowModel } from './Components/Table/Types/Context/RowModel.js';
77
77
  export { isSearchable, TableContext } from './Components/Table/Types/Context/TableContext.svelte.js';
78
- export { type TableInitOptions } from './Components/Table/Types/Context/TableInitOptions.js';
78
+ export { type Primitive, type TableInitOptions } from './Components/Table/Types/Context/TableInitOptions.js';
79
79
  export { type TableSettings } from './Components/Table/Types/Context/TableSettings.js';
80
80
  export { type CellCoordinates } from './Components/Table/Types/Coordinates/CellCoordinates.js';
81
81
  export { type CellCoordinatesWithoutColumn } from './Components/Table/Types/Coordinates/CellCoordinatesWithoutColumn.js';
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.12.3",
4
+ "version": "0.13.2",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
7
7
  },
@@ -33,24 +33,24 @@
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.10",
37
- "@storybook/addon-docs": "^10.2.10",
36
+ "@storybook/addon-a11y": "^10.2.11",
37
+ "@storybook/addon-docs": "^10.2.11",
38
38
  "@storybook/addon-svelte-csf": "^5.0.11",
39
- "@storybook/addon-vitest": "^10.2.10",
40
- "@storybook/sveltekit": "^10.2.10",
39
+ "@storybook/addon-vitest": "^10.2.11",
40
+ "@storybook/sveltekit": "^10.2.11",
41
41
  "@sveltejs/adapter-node": "^5.5.3",
42
42
  "@sveltejs/kit": "^2.53.0",
43
43
  "@sveltejs/package": "^2.5.7",
44
44
  "@sveltejs/vite-plugin-svelte": "^6.2.4",
45
45
  "@types/eslint": "^9.6.1",
46
46
  "@types/node": "^25.3.0",
47
- "@typescript-eslint/eslint-plugin": "^8.56.0",
48
- "@typescript-eslint/parser": "^8.56.0",
47
+ "@typescript-eslint/eslint-plugin": "^8.56.1",
48
+ "@typescript-eslint/parser": "^8.56.1",
49
49
  "@vitest/browser": "^4.0.18",
50
50
  "@vitest/browser-playwright": "^4.0.18",
51
- "eslint": "^10.0.1",
51
+ "eslint": "^10.0.2",
52
52
  "eslint-config-prettier": "^10.1.8",
53
- "eslint-plugin-storybook": "^10.2.10",
53
+ "eslint-plugin-storybook": "^10.2.11",
54
54
  "eslint-plugin-svelte": "^3.15.0",
55
55
  "globals": "^17.3.0",
56
56
  "mdsvex": "^0.12.6",
@@ -59,12 +59,12 @@
59
59
  "prettier-plugin-svelte": "^3.5.0",
60
60
  "publint": "^0.3.17",
61
61
  "sass-embedded": "^1.97.3",
62
- "storybook": "^10.2.10",
62
+ "storybook": "^10.2.11",
63
63
  "svelte": "^5.53.3",
64
64
  "svelte-check": "^4.4.3",
65
65
  "svelte-render-scan": "^1.1.0",
66
66
  "typescript": "^5.9.3",
67
- "typescript-eslint": "^8.56.0",
67
+ "typescript-eslint": "^8.56.1",
68
68
  "vite": "^7.3.1",
69
69
  "vite-plugin-devtools-json": "^1.0.0",
70
70
  "vitest": "^4.0.18",