@lavalogic/scoria 0.13.3 → 0.14.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 (70) hide show
  1. package/dist/Components/QuerySelect.svelte +2 -13
  2. package/dist/Components/Table/Body/QuickSearchCell.svelte +22 -17
  3. package/dist/Components/Table/Body/QuickSearchCell.svelte.d.ts +12 -12
  4. package/dist/Components/Table/Body/QuickSearchCellProps.d.ts +1 -1
  5. package/dist/Components/Table/Body/Rows/Columns/ActionsColumn.d.ts +1 -1
  6. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +5 -6
  7. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte.d.ts +14 -14
  8. package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +2 -2
  9. package/dist/Components/Table/Body/Rows/Columns/SelectTableCell.d.ts +2 -2
  10. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +10 -10
  11. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte.d.ts +16 -16
  12. package/dist/Components/Table/Body/Rows/Columns/TableQueryCell.d.ts +2 -2
  13. package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +2 -2
  14. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +3 -4
  15. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte.d.ts +1 -1
  16. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelectProps.d.ts +2 -2
  17. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +4 -7
  18. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte.d.ts +1 -1
  19. package/dist/Components/Table/Body/Rows/Columns/TableSelectProps.d.ts +2 -2
  20. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +1 -1
  21. package/dist/Components/Table/Body/Rows/Columns/ValidityCellProps.d.ts +1 -1
  22. package/dist/Components/Table/Body/Rows/TableRow.svelte +4 -4
  23. package/dist/Components/Table/Body/TableBodyProps.d.ts +1 -1
  24. package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +30 -29
  25. package/dist/Components/Table/Misc/FilterInput.svelte +7 -9
  26. package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -12
  27. package/dist/Components/Table/Misc/FilterInputProps.d.ts +1 -1
  28. package/dist/Components/Table/Misc/FilterPanelModal.svelte +1 -1
  29. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +2 -1
  30. package/dist/Components/Table/Misc/TableSidebar.svelte +2 -1
  31. package/dist/Components/Table/Types/Columns/Column.d.ts +1 -1
  32. package/dist/Components/Table/Types/Columns/Definitions/Accessors/AccessorDef.svelte.d.ts +2 -2
  33. package/dist/Components/Table/Types/Columns/Definitions/Accessors/CheckboxDef.svelte.d.ts +5 -5
  34. package/dist/Components/Table/Types/Columns/Definitions/Accessors/DateInputDef.svelte.d.ts +5 -5
  35. package/dist/Components/Table/Types/Columns/Definitions/Accessors/NumberInputDef.svelte.d.ts +5 -5
  36. package/dist/Components/Table/Types/Columns/Definitions/Accessors/QueryDef.svelte.d.ts +5 -5
  37. package/dist/Components/Table/Types/Columns/Definitions/Accessors/SelectDef.svelte.d.ts +9 -9
  38. package/dist/Components/Table/Types/Columns/Definitions/Accessors/TextInputDef.svelte.d.ts +5 -5
  39. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +4 -4
  40. package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +4 -4
  41. package/dist/Components/Table/Types/Columns/Definitions/Display/AbstractDisplayDef.svelte.d.ts +1 -1
  42. package/dist/Components/Table/Types/Columns/Definitions/Display/BubbleDef.svelte.d.ts +5 -5
  43. package/dist/Components/Table/Types/Columns/Definitions/Display/DisplayDef.svelte.d.ts +1 -1
  44. package/dist/Components/Table/Types/Columns/Definitions/Display/ProgressBarDef.svelte.d.ts +5 -5
  45. package/dist/Components/Table/Types/Columns/Definitions/Display/ValidityDef.svelte.d.ts +2 -2
  46. package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +2 -2
  47. package/dist/Components/Table/Types/Columns/Definitions/FilterOnly/FilterOnlyDef.svelte.d.ts +2 -2
  48. package/dist/Components/Table/Types/Columns/DefsWrapper.d.ts +1 -1
  49. package/dist/Components/Table/Types/Columns/ProgressBarColumn.d.ts +2 -2
  50. package/dist/Components/Table/Types/Columns/ProgressBarTableCell.d.ts +2 -2
  51. package/dist/Components/Table/Types/Columns/TableCell.d.ts +1 -1
  52. package/dist/Components/Table/Types/Context/ITable.d.ts +3 -3
  53. package/dist/Components/Table/Types/Context/Row.d.ts +3 -3
  54. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +1 -1
  55. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +1 -1
  56. package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +1 -1
  57. package/dist/Components/Table/Types/DataRepository/IRemoteDataRepository.d.ts +1 -1
  58. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +1 -1
  59. package/dist/Components/Table/Types/Filtering/CustomFilter.d.ts +3 -3
  60. package/dist/Components/Table/Types/Filtering/CustomRemoteFilters.d.ts +1 -1
  61. package/dist/Components/Table/Types/Filtering/FilterFn.d.ts +1 -1
  62. package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.d.ts +1 -1
  63. package/dist/Contexts/ToastContext.svelte.d.ts +1 -3
  64. package/dist/Contexts/ToastContext.svelte.js +38 -12
  65. package/dist/Helpers/Helpers.svelte.d.ts +8 -2
  66. package/dist/Helpers/Helpers.svelte.js +11 -2
  67. package/dist/Types/Internal/SelectOption.d.ts +1 -1
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.js +1 -1
  70. package/package.json +9 -9
@@ -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, unknown>>;
9
- getRightVisibleCells: () => Array<TableCell<T, unknown>>;
10
- getCenterVisibleCells: () => Array<TableCell<T, unknown>>;
8
+ getLeftVisibleCells: () => Array<TableCell<T>>;
9
+ getRightVisibleCells: () => Array<TableCell<T>>;
10
+ getCenterVisibleCells: () => Array<TableCell<T>>;
11
11
  }
@@ -48,7 +48,7 @@ export declare class TableContext<T extends object, RowIdType extends Primitive>
48
48
  get dataRepo(): IDataRepository<T>;
49
49
  private set dataRepo(value);
50
50
  private _remoteFilters;
51
- get remoteFilters(): CustomRemoteFilters | undefined;
51
+ get remoteFilters(): CustomRemoteFilters<unknown> | undefined;
52
52
  private set remoteFilters(value);
53
53
  private _showSelectedOnly;
54
54
  get showSelectedOnly(): boolean;
@@ -26,7 +26,7 @@ export interface IDataRepository<T extends object> {
26
26
  boolFilter?: FilterFn<T, BoolFilterValueType>;
27
27
  stringFilter?: FilterFn<T, StringFilterValueType>;
28
28
  resetFilters: () => void;
29
- reload?: () => void;
29
+ reload?: () => Promise<void>;
30
30
  lastPage?: number;
31
31
  pageStartIndex: number;
32
32
  pageEndIndexExclusive: number;
@@ -19,5 +19,5 @@ export interface ILocalDataRepository<T extends object> extends IDataRepository<
19
19
  boolFilter: FilterFn<T, BoolFilterValueType>;
20
20
  stringFilter: FilterFn<T, StringFilterValueType>;
21
21
  resetFilters: () => void;
22
- reload?: () => void;
22
+ reload?: () => Promise<void>;
23
23
  }
@@ -14,5 +14,5 @@ export interface IRemoteDataRepository<T extends object> extends IDataRepository
14
14
  filterBy: (id: string, value: unknown) => void;
15
15
  resetFilters: () => void;
16
16
  lastPage: number;
17
- reload?: (debounced?: boolean) => void;
17
+ reload?: (debounced?: boolean) => Promise<void>;
18
18
  }
@@ -44,5 +44,5 @@ export declare abstract class TableDataRepository<T extends object> implements I
44
44
  readonly registerRefreshMethod: (method: () => void) => void;
45
45
  protected getValueSet(values: Array<string | number | undefined>): Set<number>;
46
46
  static getValues(values: Array<string | number | undefined>): Array<number>;
47
- static getMinMax(values: Array<string | number | undefined>): number[] | undefined[];
47
+ static getMinMax(values: Array<string | number | null | undefined>): number[] | undefined[];
48
48
  }
@@ -1,13 +1,13 @@
1
1
  import type { SelectOption } from '../../../../Types/Internal/SelectOption.js';
2
2
  import type { CustomFilterType } from './CustomFilterType.js';
3
- export interface CustomFilter {
3
+ export interface CustomFilter<FilterValueType> {
4
4
  queryKey: string;
5
5
  type: CustomFilterType;
6
6
  id: string;
7
- options?: Array<SelectOption<string | number>> | Promise<Array<SelectOption<string | number>>>;
7
+ options?: Array<SelectOption<FilterValueType>> | Promise<Array<SelectOption<FilterValueType>>>;
8
8
  multiSelect?: boolean;
9
9
  objectName?: string;
10
10
  label?: string;
11
11
  valueAsObject?: boolean;
12
- query?: (value: unknown) => Promise<Array<SelectOption<number>>>;
12
+ query?: (value: unknown) => Promise<Array<SelectOption<FilterValueType>>>;
13
13
  }
@@ -1,3 +1,3 @@
1
1
  import type { SvelteMap } from 'svelte/reactivity';
2
2
  import type { CustomFilter } from './CustomFilter.js';
3
- export type CustomRemoteFilters = SvelteMap<string, CustomFilter>;
3
+ export type CustomRemoteFilters<FilterValueType> = SvelteMap<string, CustomFilter<FilterValueType>>;
@@ -6,4 +6,4 @@ export type SelectFilterValueType<T, columnType = T[keyof T]> = string | Array<u
6
6
  } | undefined;
7
7
  export type BoolFilterValueType = boolean | null;
8
8
  export type StringFilterValueType = string | null;
9
- export type FilterFn<T extends object, FilterValueType> = (row: Row<T>, columnId: string, filterValue: FilterValueType) => boolean | Promise<boolean>;
9
+ export type FilterFn<T extends object, in FilterValueType> = (row: Row<T>, columnId: string, filterValue: FilterValueType) => boolean | Promise<boolean>;
@@ -3,7 +3,7 @@ import { Validity } from '../../../../Types/Internal/Validity.js';
3
3
  import type { TableCell } from '../Columns/TableCell.js';
4
4
  import type { TableContext } from '../Context/TableContext.svelte.js';
5
5
  import type { CellCoordinates } from '../Coordinates/CellCoordinates.js';
6
- export declare class TableFocusDetails<T extends object, in FilterValueType> {
6
+ export declare class TableFocusDetails<T extends object, FilterValueType> {
7
7
  private toastCallback;
8
8
  constructor(cell: TableCell<T, FilterValueType>, tableContext: TableContext<T, never>, toastCallback: ToastContext['toast']);
9
9
  private _cell;
@@ -1,11 +1,9 @@
1
- import { type IErrorResponse } from '../Helpers/Helpers.svelte.js';
2
1
  import type { IdentifiableToastMessage } from '../Types/Internal/IdentifiableToastMessage.js';
3
- import type { ToastMessage } from '../Types/Internal/ToastMessage.js';
4
2
  export declare class ToastContext {
5
3
  static readonly identifier: unique symbol;
6
4
  private _toasts;
7
5
  get toasts(): Array<IdentifiableToastMessage>;
8
6
  private set toasts(value);
9
- readonly toast: (message: Array<unknown> | string | ToastMessage | IErrorResponse) => void;
7
+ readonly toast: (message: unknown) => void;
10
8
  private dismiss;
11
9
  }
@@ -11,6 +11,9 @@ export class ToastContext {
11
11
  this._toasts = v;
12
12
  }
13
13
  toast = (message) => {
14
+ if (message == null) {
15
+ return;
16
+ }
14
17
  const id = idIncrement++;
15
18
  const newMessage = (() => {
16
19
  const closeable = true;
@@ -39,29 +42,52 @@ export class ToastContext {
39
42
  }
40
43
  };
41
44
  }
42
- if (typeof message == 'object' && isToastMessage(message)) {
43
- return {
44
- closeable,
45
- timeout,
46
- ...message,
47
- id,
48
- close: () => {
49
- if (message.closeable ?? true) {
45
+ if (typeof message == 'object') {
46
+ if (message instanceof Error) {
47
+ return {
48
+ result: Validity.Invalid,
49
+ closeable,
50
+ timeout,
51
+ message: getErrorMessage(message, {
52
+ includeUUID: false,
53
+ includeCause: false,
54
+ includeStack: false
55
+ }),
56
+ id,
57
+ close: () => {
50
58
  this.dismiss(id);
59
+ },
60
+ getVerbose: () => getErrorMessage(message, {
61
+ includeUUID: true,
62
+ includeCause: true,
63
+ includeStack: true
64
+ })
65
+ };
66
+ }
67
+ if (isToastMessage(message)) {
68
+ return {
69
+ closeable,
70
+ timeout,
71
+ ...message,
72
+ id,
73
+ close: () => {
74
+ if (message.closeable ?? true) {
75
+ this.dismiss(id);
76
+ }
51
77
  }
52
- }
53
- };
78
+ };
79
+ }
54
80
  }
55
81
  return {
56
82
  result: Validity.Invalid,
57
83
  closeable,
58
84
  timeout,
59
- message: getErrorMessage(message, false),
85
+ message: getErrorMessage(message, { includeUUID: false }),
60
86
  id,
61
87
  close: () => {
62
88
  this.dismiss(id);
63
89
  },
64
- getVerbose: () => getErrorMessage(message, true)
90
+ getVerbose: () => getErrorMessage(message)
65
91
  };
66
92
  })();
67
93
  this.toasts.push(newMessage);
@@ -24,7 +24,13 @@ export interface IErrorResponse {
24
24
  readonly uuid: string | null;
25
25
  }
26
26
  export declare function isErrorResponse(error: unknown): error is IErrorResponse;
27
- export declare function getErrorMessage(error: unknown, includeUUID?: boolean): string;
27
+ export declare function isJSError(error: object): error is Error;
28
+ export type GetErrorMessageProps = {
29
+ includeUUID?: boolean;
30
+ includeStack?: boolean;
31
+ includeCause?: boolean;
32
+ };
33
+ export declare function getErrorMessage(error: unknown, { includeUUID, includeStack, includeCause }?: GetErrorMessageProps): string;
28
34
  export declare function isValidEmailAddress(emailAddress: string): RegExpMatchArray | null;
29
35
  export declare function gridItem(element: HTMLElement): (() => void) | undefined;
30
36
  export type Milliseconds = number;
@@ -38,6 +44,6 @@ export declare const asyncEvery: typeof asyncAll;
38
44
  export declare function asyncFilterIndices<T>(array: Array<T>, asyncCallback: (item: T, index: number) => Promise<boolean>): Promise<Array<number>>;
39
45
  export declare function asyncFilter<T>(array: Array<T>, asyncCallback: (item: T, index: number) => Promise<boolean>): Promise<Array<T>>;
40
46
  export declare function devCatch(e: unknown): void;
41
- export declare function hasQuery(customFilter: CustomFilter | undefined): customFilter is CustomFilter & Required<Pick<CustomFilter, 'query'>>;
47
+ export declare function hasQuery<FilterValueType>(customFilter: CustomFilter<FilterValueType> | undefined): customFilter is CustomFilter<FilterValueType> & Required<Pick<CustomFilter<FilterValueType>, 'query'>>;
42
48
  export declare function isDateTuple(value: unknown): value is [Date | null, Date | null];
43
49
  export declare function isNumberTuple(value: unknown): value is [number | null, number | null];
@@ -123,7 +123,10 @@ export function isErrorResponse(error) {
123
123
  (Array.isArray(error.errors) || typeof error.errors === 'string') &&
124
124
  !!error.errors.length);
125
125
  }
126
- export function getErrorMessage(error, includeUUID = true) {
126
+ export function isJSError(error) {
127
+ return 'message' in error && typeof error.message == 'string';
128
+ }
129
+ export function getErrorMessage(error, { includeUUID = true, includeStack = false, includeCause = false } = {}) {
127
130
  if (!error) {
128
131
  return 'Unknown Error';
129
132
  }
@@ -139,8 +142,14 @@ export function getErrorMessage(error, includeUUID = true) {
139
142
  });
140
143
  }
141
144
  }
142
- else if ('message' in error && typeof error.message == 'string') {
145
+ else if (isJSError(error)) {
143
146
  errorList += error.message + '\n';
147
+ if (includeCause && error.cause) {
148
+ errorList += `Cause: ${getErrorMessage(error.cause, { includeUUID, includeCause, includeStack })}`;
149
+ }
150
+ if (includeStack && error.stack) {
151
+ errorList += `Stack: ${error.stack}`;
152
+ }
144
153
  }
145
154
  else {
146
155
  errorList += 'Unknown Error' + '\n';
@@ -1,4 +1,4 @@
1
- export interface SelectOption<T> {
1
+ export interface SelectOption<out T> {
2
2
  label: string;
3
3
  value: T;
4
4
  }
package/dist/index.d.ts CHANGED
@@ -133,7 +133,7 @@ export { TooltipContext } from './Contexts/TooltipContext.svelte.js';
133
133
  export { UntypedInputContext } from './Contexts/UntypedInputContext.svelte.js';
134
134
  export { Delay } from './Delay/Delay.js';
135
135
  export { DATAMatrix } from './Helpers/Datamatrix.js';
136
- export { asyncAll, asyncEvery, asyncFilter, asyncFilterIndices, asyncFlatMap, asyncForEach, asyncMap, asyncSleep, asyncSome, autoPluralise, devCatch, generateShortUUID, generateUUID, getCanvasContext, getErrorMessage, gridItem, isValidEmailAddress, localTimeFormat, passthrough, refWrapper, SQLFriendly, SQLFriendlyWithLocalTime, vowels } from './Helpers/Helpers.svelte.js';
136
+ export { asyncAll, asyncEvery, asyncFilter, asyncFilterIndices, asyncFlatMap, asyncForEach, asyncMap, asyncSleep, asyncSome, autoPluralise, devCatch, generateShortUUID, generateUUID, getCanvasContext, getErrorMessage, gridItem, isDateTuple, isNumberTuple, isValidEmailAddress, localTimeFormat, passthrough, refWrapper, SQLFriendly, SQLFriendlyWithLocalTime, vowels } from './Helpers/Helpers.svelte.js';
137
137
  export { type INamed } from './Helpers/INamed.js';
138
138
  export { AttributeOperation } from './Types/Internal/AttributeOperation.js';
139
139
  export { type BigRadioOption } from './Types/Internal/BigRadioOption.js';
package/dist/index.js CHANGED
@@ -140,7 +140,7 @@ export { TooltipContext } from './Contexts/TooltipContext.svelte.js';
140
140
  export { UntypedInputContext } from './Contexts/UntypedInputContext.svelte.js';
141
141
  export { Delay } from './Delay/Delay.js';
142
142
  export { DATAMatrix } from './Helpers/Datamatrix.js';
143
- export { asyncAll, asyncEvery, asyncFilter, asyncFilterIndices, asyncFlatMap, asyncForEach, asyncMap, asyncSleep, asyncSome, autoPluralise, devCatch, generateShortUUID, generateUUID, getCanvasContext, getErrorMessage, gridItem, isValidEmailAddress, localTimeFormat, passthrough, refWrapper, SQLFriendly, SQLFriendlyWithLocalTime, vowels } from './Helpers/Helpers.svelte.js';
143
+ export { asyncAll, asyncEvery, asyncFilter, asyncFilterIndices, asyncFlatMap, asyncForEach, asyncMap, asyncSleep, asyncSome, autoPluralise, devCatch, generateShortUUID, generateUUID, getCanvasContext, getErrorMessage, gridItem, isDateTuple, isNumberTuple, isValidEmailAddress, localTimeFormat, passthrough, refWrapper, SQLFriendly, SQLFriendlyWithLocalTime, vowels } from './Helpers/Helpers.svelte.js';
144
144
  export {} from './Helpers/INamed.js';
145
145
  export { AttributeOperation } from './Types/Internal/AttributeOperation.js';
146
146
  export {} from './Types/Internal/BigRadioOption.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.13.3",
4
+ "version": "0.14.0",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
7
7
  },
@@ -33,13 +33,13 @@
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.11",
37
- "@storybook/addon-docs": "^10.2.11",
36
+ "@storybook/addon-a11y": "^10.2.12",
37
+ "@storybook/addon-docs": "^10.2.12",
38
38
  "@storybook/addon-svelte-csf": "^5.0.11",
39
- "@storybook/addon-vitest": "^10.2.11",
40
- "@storybook/sveltekit": "^10.2.11",
39
+ "@storybook/addon-vitest": "^10.2.12",
40
+ "@storybook/sveltekit": "^10.2.12",
41
41
  "@sveltejs/adapter-node": "^5.5.3",
42
- "@sveltejs/kit": "^2.53.0",
42
+ "@sveltejs/kit": "^2.53.1",
43
43
  "@sveltejs/package": "^2.5.7",
44
44
  "@sveltejs/vite-plugin-svelte": "^6.2.4",
45
45
  "@types/eslint": "^9.6.1",
@@ -50,7 +50,7 @@
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.11",
53
+ "eslint-plugin-storybook": "^10.2.12",
54
54
  "eslint-plugin-svelte": "^3.15.0",
55
55
  "globals": "^17.3.0",
56
56
  "mdsvex": "^0.12.6",
@@ -59,8 +59,8 @@
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.11",
63
- "svelte": "^5.53.3",
62
+ "storybook": "^10.2.12",
63
+ "svelte": "^5.53.4",
64
64
  "svelte-check": "^4.4.3",
65
65
  "svelte-render-scan": "^1.1.0",
66
66
  "typescript": "^5.9.3",