@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.
- package/dist/Components/Table/Body/QuickSearchCell.svelte +4 -5
- package/dist/Components/Table/Body/QuickSearchCell.svelte.d.ts +12 -12
- package/dist/Components/Table/Body/QuickSearchCellProps.d.ts +2 -2
- package/dist/Components/Table/Body/Rows/ColumnList.svelte +2 -2
- package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +3 -3
- package/dist/Components/Table/Body/Rows/ColumnListRow.svelte.d.ts +12 -12
- package/dist/Components/Table/Body/Rows/ColumnListRowProps.d.ts +2 -2
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +26 -16
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte.d.ts +1 -1
- package/dist/Components/Table/Body/Rows/Columns/ActionsCellProps.d.ts +2 -2
- package/dist/Components/Table/Body/Rows/Columns/ActionsColumn.d.ts +1 -1
- package/dist/Components/Table/Body/Rows/Columns/ActionsTableCell.d.ts +2 -2
- package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +8 -6
- package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +11 -3
- package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte.d.ts +13 -12
- package/dist/Components/Table/Body/Rows/Columns/ExpandCellProps.d.ts +5 -4
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +1 -1
- package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +8 -6
- package/dist/Components/Table/Body/Rows/Columns/RowSelectionColumn.d.ts +2 -1
- package/dist/Components/Table/Body/Rows/Columns/RowSelectionTableCell.d.ts +2 -1
- package/dist/Components/Table/Body/Rows/Columns/SelectColumn.d.ts +2 -1
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +4 -4
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte.d.ts +14 -14
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +1 -1
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +7 -4
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte.d.ts +3 -2
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +3 -3
- package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +7 -6
- package/dist/Components/Table/Body/Rows/Columns/TableQueryColumn.d.ts +2 -1
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +8 -6
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +7 -4
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +8 -6
- package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +8 -6
- package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +3 -3
- package/dist/Components/Table/Body/Rows/TableRow.svelte +8 -7
- package/dist/Components/Table/Body/TableBody.svelte +19 -15
- package/dist/Components/Table/Body/TableBodyProps.d.ts +1 -1
- package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.d.ts +1 -1
- package/dist/Components/Table/ColumnDefinitions/ExampleItemColumnDefRepository.svelte.js +17 -15
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte +29 -16
- package/dist/Components/Table/Headers/SelectAllHeader.svelte +1 -1
- package/dist/Components/Table/Headers/TableHead.svelte +4 -4
- package/dist/Components/Table/Misc/ColumnPanel.svelte +1 -1
- package/dist/Components/Table/Misc/ColumnPanelModal.svelte +1 -1
- package/dist/Components/Table/Misc/FilterInput.svelte +3 -5
- package/dist/Components/Table/Misc/FilterInput.svelte.d.ts +12 -12
- package/dist/Components/Table/Misc/FilterInputProps.d.ts +2 -2
- package/dist/Components/Table/Misc/FilterPanel.svelte +2 -2
- package/dist/Components/Table/Misc/FilterPanelModal.svelte +2 -2
- package/dist/Components/Table/Misc/TableFooter.svelte +1 -1
- package/dist/Components/Table/Misc/TableHorizontalBar.svelte +1 -1
- package/dist/Components/Table/Misc/TableSidebar.svelte +2 -1
- package/dist/Components/Table/Misc/ToolboxPanel.svelte +2 -2
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +1 -1
- package/dist/Components/Table/NestedTable.svelte +12 -8
- package/dist/Components/Table/NestedTable.svelte.d.ts +15 -15
- package/dist/Components/Table/Table.svelte +111 -118
- package/dist/Components/Table/Table.svelte.d.ts +16 -15
- package/dist/Components/Table/Types/Columns/Column.d.ts +1 -1
- package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.d.ts +1 -1
- package/dist/Components/Table/Types/Columns/Definitions/ColumnDef.svelte.d.ts +2 -2
- package/dist/Components/Table/Types/Columns/Definitions/ColumnDefSet.d.ts +1 -1
- package/dist/Components/Table/Types/Columns/Definitions/Expand/ExpandDef.svelte.d.ts +6 -6
- package/dist/Components/Table/Types/Columns/Definitions/JSONColumnDefSet.d.ts +1 -1
- package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.d.ts +2 -1
- package/dist/Components/Table/Types/Columns/DefsWrapper.d.ts +2 -2
- package/dist/Components/Table/Types/Columns/ExpandColumn.d.ts +3 -2
- package/dist/Components/Table/Types/Columns/ExpandTableCell.d.ts +3 -2
- package/dist/Components/Table/Types/Context/ITable.d.ts +5 -5
- package/dist/Components/Table/Types/Context/Row.d.ts +3 -3
- package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +40 -37
- package/dist/Components/Table/Types/Context/TableContext.svelte.js +318 -279
- package/dist/Components/Table/Types/Context/TableInitOptions.d.ts +4 -2
- package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +1 -1
- package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +1 -2
- package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.d.ts +2 -1
- package/dist/Components/Table/Types/DataRepository/LocalTableDataRepository.svelte.js +31 -8
- package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +2 -1
- package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +4 -1
- package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.d.ts +3 -3
- package/dist/Components/Table/Types/Focus/TableFocusDetails.svelte.js +1 -1
- package/dist/Components/Table/Types/Header.d.ts +2 -2
- package/dist/Components/Table/Types/HeaderGroup.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- 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
|
|
4
|
-
|
|
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:
|
|
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:
|
|
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.
|
|
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.
|
|
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
|
-
(
|
|
91
|
-
|
|
92
|
-
(typeof value === '
|
|
93
|
-
(typeof value
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|
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.
|
|
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.
|
|
37
|
-
"@storybook/addon-docs": "^10.2.
|
|
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.
|
|
40
|
-
"@storybook/sveltekit": "^10.2.
|
|
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.
|
|
48
|
-
"@typescript-eslint/parser": "^8.56.
|
|
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.
|
|
51
|
+
"eslint": "^10.0.2",
|
|
52
52
|
"eslint-config-prettier": "^10.1.8",
|
|
53
|
-
"eslint-plugin-storybook": "^10.2.
|
|
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.
|
|
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.
|
|
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",
|