@inandu-solutions/grid-vue 0.2.0 → 0.2.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/README.md +209 -196
- package/package.json +92 -92
package/README.md
CHANGED
|
@@ -1,196 +1,209 @@
|
|
|
1
|
-
# inandu-grid-vue
|
|
2
|
-
|
|
3
|
-
**A lightweight Vue 3 data grid with the essentials other grids gate behind a paid enterprise
|
|
4
|
-
licence — row grouping, aggregates, inline editing and Excel-compatible export — fully MIT.** The
|
|
5
|
-
Vue port of [`@inandu-solutions/grid-angular`](https://github.com/inandusolutions/inandu-grid),
|
|
6
|
-
kept in sync feature-for-feature by hand (and with its React sibling,
|
|
7
|
-
[`@inandu-solutions/grid-react`](https://github.com/inandusolutions/inandu-grid-react)).
|
|
8
|
-
|
|
9
|
-
[](https://www.npmjs.com/package/@inandu-solutions/grid-vue)
|
|
10
|
-
[,
|
|
6
|
+
kept in sync feature-for-feature by hand (and with its React sibling,
|
|
7
|
+
[`@inandu-solutions/grid-react`](https://github.com/inandusolutions/inandu-grid-react)).
|
|
8
|
+
|
|
9
|
+
[](https://www.npmjs.com/package/@inandu-solutions/grid-vue)
|
|
10
|
+
[](https://www.npmjs.com/package/@inandu-solutions/grid-vue)
|
|
11
|
+
[](https://github.com/inandusolutions/inandu-grid-vue/actions/workflows/ci.yml)
|
|
12
|
+
[](https://bundlephobia.com/package/@inandu-solutions/grid-vue)
|
|
13
|
+
[](LICENSE)
|
|
14
|
+

|
|
15
|
+
[](https://inandusolutions.github.io/inandu-grid-vue/)
|
|
16
|
+
[](https://stackblitz.com/github/inandusolutions/inandu-grid-vue/tree/main/examples/stackblitz)
|
|
17
|
+
|
|
18
|
+
[](https://inandusolutions.github.io/inandu-grid-vue/)
|
|
19
|
+
|
|
20
|
+
<sub>Live free-text search on the demo grid. [Try every feature →](https://inandusolutions.github.io/inandu-grid-vue/)</sub>
|
|
21
|
+
|
|
22
|
+
## Try it in 30 seconds
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install @inandu-solutions/grid-vue
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```vue
|
|
29
|
+
<script setup lang="ts">
|
|
30
|
+
import { InanduGrid, type InanduGridColumn } from '@inandu-solutions/grid-vue';
|
|
31
|
+
import '@inandu-solutions/grid-vue/style.css';
|
|
32
|
+
|
|
33
|
+
const rows = [{ name: 'Ada', age: 36 }, { name: 'Alan', age: 41 }];
|
|
34
|
+
const columns: InanduGridColumn[] = [{ field: 'name', headerText: 'Name' }, { field: 'age', headerText: 'Age', type: 'number' }];
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<template>
|
|
38
|
+
<!-- sorting + filtering are on by default -->
|
|
39
|
+
<InanduGrid :rows="rows" :columns="columns" :page-size="25" />
|
|
40
|
+
</template>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- **▶️ [Live demo](https://inandusolutions.github.io/inandu-grid-vue/)** — try every feature in the browser.
|
|
44
|
+
- **⚡ [Edit in StackBlitz](https://stackblitz.com/github/inandusolutions/inandu-grid-vue/tree/main/examples/stackblitz)** —
|
|
45
|
+
installs `@inandu-solutions/grid-vue` from npm; edit `src/App.vue` and it updates live ([source](examples/stackblitz)).
|
|
46
|
+
- **📦 [`@inandu-solutions/grid-vue` on npm](https://www.npmjs.com/package/@inandu-solutions/grid-vue)**
|
|
47
|
+
(MIT) — `0.x` while the API settles; expect breaking changes between minors until `1.0.0`.
|
|
48
|
+
|
|
49
|
+
## Who is this for?
|
|
50
|
+
|
|
51
|
+
- **CRUD / business apps** that need sortable, filterable, editable tables without pulling in a
|
|
52
|
+
full enterprise grid framework.
|
|
53
|
+
- **Admin dashboards** that need grouping, aggregates and CSV/Excel/PDF export out of the box.
|
|
54
|
+
- **Data-heavy Vue apps** that need virtual scroll, or server-side sort / filter / paging against a
|
|
55
|
+
backend (see [Server-side data](#server-side-data)), without the bundle size of a kitchen-sink grid.
|
|
56
|
+
|
|
57
|
+
**When not to use it:** if you need pivot tables or integrated charting built into the grid itself,
|
|
58
|
+
this isn't that — see [Not included](#not-included) below.
|
|
59
|
+
|
|
60
|
+
## Angular and React versions
|
|
61
|
+
|
|
62
|
+
[`inandu-grid`](https://github.com/inandusolutions/inandu-grid) is the original, feature-complete,
|
|
63
|
+
MIT-licensed Angular grid this repo is ported from, and
|
|
64
|
+
[`inandu-grid-react`](https://github.com/inandusolutions/inandu-grid-react) is its React port — same
|
|
65
|
+
feature set, same core logic, adapted for Vue's composition API (`computed`/`shallowRef`, SFCs,
|
|
66
|
+
scoped slots, emitted events) instead of Angular signals or React hooks.
|
|
67
|
+
|
|
68
|
+
## Not included
|
|
69
|
+
|
|
70
|
+
Deliberately *not* a kitchen sink: no pivoting and no integrated charts — those stay out of scope
|
|
71
|
+
so the core stays small and auditable. Everything else on this page (grouping, aggregates, editing,
|
|
72
|
+
export, virtual scroll, paged server-side mode) is included, free, no enterprise tier.
|
|
73
|
+
|
|
74
|
+
## Commercial add-ons
|
|
75
|
+
|
|
76
|
+
`@inandu-solutions/grid-pro-vue` *(private, paid, not released yet)* — the Vue port of
|
|
77
|
+
`@inandu-solutions/grid-pro`, depends on this package the same way grid-pro depends on grid-angular.
|
|
78
|
+
|
|
79
|
+
## See it
|
|
80
|
+
|
|
81
|
+
Grouping and live free-text search — running in the [demo](https://inandusolutions.github.io/inandu-grid-vue/),
|
|
82
|
+
which also has tabs for inline editing and tree data.
|
|
83
|
+
|
|
84
|
+
[](https://inandusolutions.github.io/inandu-grid-vue/)
|
|
85
|
+
|
|
86
|
+
## Features
|
|
87
|
+
|
|
88
|
+
**Feature-complete with grid-angular and grid-react.** The framework-agnostic core (sorting,
|
|
89
|
+
filtering, aggregation, export, i18n) is ported from grid-angular's
|
|
90
|
+
[`core/`](https://github.com/inandusolutions/inandu-grid/tree/main/projects/inandu-grid/src/lib/core)
|
|
91
|
+
folder and kept in sync by hand across the three repos. The Vue-specific layer — the
|
|
92
|
+
[`<InanduGrid>`](#api-shape) component and the [`useInanduGrid()`](#api-shape) headless
|
|
93
|
+
composable — covers:
|
|
94
|
+
|
|
95
|
+
- Sorting — single-column, or multi-column via shift-click
|
|
96
|
+
- Free-text search and per-column filtering, plus an `extra-row-filter` escape hatch for your own predicates
|
|
97
|
+
- Pagination, single-column grouping with aggregates, row selection
|
|
98
|
+
- CSV / Excel (`.xls`) / PDF export, and print
|
|
99
|
+
- i18n — 5 built-in languages via a `lang` prop
|
|
100
|
+
- Inline row editing, creation and deletion, with validation (required / min / max / pattern / custom / async)
|
|
101
|
+
- Excel-style Ctrl+C / Ctrl+V clipboard copy/paste
|
|
102
|
+
- Runtime column show/hide, sticky (pinned left/right) columns, drag-reorder
|
|
103
|
+
- Column resize (drag a header's handle) and autosize (double-click it to fit content)
|
|
104
|
+
- Row drag-reorder
|
|
105
|
+
- Tree data (`tree-children-key`) — display and expand only, no inline editing/drag/clipboard on
|
|
106
|
+
tree rows, same restriction as grid-angular
|
|
107
|
+
- Master-detail — a `#detail="{ row }"` slot (or a `renderDetail` render-function prop)
|
|
108
|
+
- Custom cell / header / edit-control rendering per column — `#cell-<field>`, `#header-<field>` and
|
|
109
|
+
`#editor-<field>` scoped slots, or `renderCell` / `renderHeader` / `renderEditor` render functions
|
|
110
|
+
on the column definition — without losing sorting, resizing, or validation
|
|
111
|
+
- Excel-style cell range selection (`cell-range-selection`, `multi-range`) — click-and-drag or
|
|
112
|
+
shift-click across cells to select a rectangular block; `Ctrl+C` copies the whole range as TSV
|
|
113
|
+
when `clipboard` is also on
|
|
114
|
+
- Row virtualization (`virtual-scroll`) for large datasets
|
|
115
|
+
- Server-side sort / search / filter / paging (`server-side` + `useInanduGridServer`) — paged only;
|
|
116
|
+
grid-angular's server-side infinite scroll isn't ported. See [Server-side data](#server-side-data)
|
|
117
|
+
|
|
118
|
+
Two things work slightly differently from grid-angular because they need a real browser layout
|
|
119
|
+
engine that a unit-test environment can't provide: virtual scroll's row height isn't
|
|
120
|
+
auto-measured — pass `virtual-row-height` explicitly — and autosize's content measurement itself is
|
|
121
|
+
trusted (ported verbatim, same DOM APIs) rather than end-to-end tested; see
|
|
122
|
+
[`measureColumn.ts`](src/utils/measureColumn.ts)'s doc comment for exactly what its test suite does
|
|
123
|
+
and doesn't cover.
|
|
124
|
+
|
|
125
|
+
## API shape
|
|
126
|
+
|
|
127
|
+
```vue
|
|
128
|
+
<script setup lang="ts">
|
|
129
|
+
import { useTemplateRef } from 'vue';
|
|
130
|
+
import { InanduGrid, useInanduGrid, type InanduGridRowSave } from '@inandu-solutions/grid-vue';
|
|
131
|
+
import '@inandu-solutions/grid-vue/style.css'; // optional default styling — skip it and bring your own
|
|
132
|
+
|
|
133
|
+
// Component: batteries-included table. The grid never mutates `rows` — events hand you the change.
|
|
134
|
+
function onRowSave({ row, values }: InanduGridRowSave) {
|
|
135
|
+
rows.value = rows.value.map(r => (r === row ? { ...r, ...values } : r));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Its headless engine is exposed on a template ref, for programmatic control.
|
|
139
|
+
const gridRef = useTemplateRef('grid');
|
|
140
|
+
const sortByName = () => gridRef.value?.grid.toggleSort('name');
|
|
141
|
+
|
|
142
|
+
// Composable: headless — bring your own markup. Pass a getter to follow reactive data; every
|
|
143
|
+
// piece of state is a reactive getter (`headless.visibleRows`, no `.value`).
|
|
144
|
+
const headless = useInanduGrid(() => ({ rows: rows.value, columns, pageSize: 25 }));
|
|
145
|
+
</script>
|
|
146
|
+
|
|
147
|
+
<template>
|
|
148
|
+
<InanduGrid ref="grid" :rows="rows" :columns="columns" selectable @row-save="onRowSave" @selection-change="selected = $event">
|
|
149
|
+
<template #cell-status="{ value }"><StatusBadge :status="value" /></template>
|
|
150
|
+
<template #detail="{ row }"><OrderLines :order="row" /></template>
|
|
151
|
+
</InanduGrid>
|
|
152
|
+
</template>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Events: `selection-change`, `row-save`, `row-create`, `row-delete`, `rows-delete`, `cells-paste`,
|
|
156
|
+
`row-order-change`, `cell-range-change`, `cell-ranges-change`.
|
|
157
|
+
|
|
158
|
+
## Server-side data
|
|
159
|
+
|
|
160
|
+
For tables too big to load whole, let the backend sort, filter and page, and keep the grid's UI
|
|
161
|
+
unchanged:
|
|
162
|
+
|
|
163
|
+
```vue
|
|
164
|
+
<script setup lang="ts">
|
|
165
|
+
import { InanduGrid, useInanduGridServer } from '@inandu-solutions/grid-vue';
|
|
166
|
+
|
|
167
|
+
const server = useInanduGridServer({ url: '/api/products' });
|
|
168
|
+
</script>
|
|
169
|
+
|
|
170
|
+
<template>
|
|
171
|
+
<InanduGrid
|
|
172
|
+
:rows="server.rows.value"
|
|
173
|
+
:columns="columns"
|
|
174
|
+
:page-size="25"
|
|
175
|
+
:server-side="{ totalItems: server.total.value }"
|
|
176
|
+
@query-change="server.setQuery"
|
|
177
|
+
/>
|
|
178
|
+
</template>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
`useInanduGridServer` turns the grid's page / sort / search / column filters into a query string
|
|
182
|
+
(`?page=2&pageSize=25&sort=-price&q=cable&price_gte=20`), aborts superseded requests, debounces typing,
|
|
183
|
+
and keeps the previous page on screen while the next loads. It expects `{ data: [...], total: n }`.
|
|
184
|
+
That is exactly what [`Inandu.Grid.Extensions`](https://github.com/inandusolutions/inandu-grid-extensions)
|
|
185
|
+
(.NET / EF Core) returns from one `ToInanduGrid()` call — [request contract](https://github.com/inandusolutions/inandu-grid-extensions/blob/main/docs/request-contract.md) —
|
|
186
|
+
but any backend that speaks the same params works. Runnable example: [`examples/server-side`](examples/server-side).
|
|
187
|
+
|
|
188
|
+
In `serverSide` mode grouping, tree data, virtual scroll, `extraRowFilter` and column aggregate
|
|
189
|
+
totals are off (they would only ever see one page), and a column's Excel-style value checklist lists
|
|
190
|
+
the values on the current page. Use `buildInanduGridQuery(query)` if you'd rather do the fetching
|
|
191
|
+
yourself, and `fetcher` / `init` on the composable for auth headers or a custom client.
|
|
192
|
+
|
|
193
|
+
## Development
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
npm install
|
|
197
|
+
npm test # Vitest + Vue Testing Library
|
|
198
|
+
npm run typecheck # vue-tsc --noEmit
|
|
199
|
+
npm run build # library build (dist/)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Contributing
|
|
203
|
+
|
|
204
|
+
Issues and PRs welcome. Please read [`CONTRIBUTING.md`](CONTRIBUTING.md) first, and note the
|
|
205
|
+
[Code of Conduct](.github/CODE_OF_CONDUCT.md). Security reports: [`.github/SECURITY.md`](.github/SECURITY.md).
|
|
206
|
+
|
|
207
|
+
## License
|
|
208
|
+
|
|
209
|
+
MIT © [Inandu SAS](https://www.inandu.com/)
|
package/package.json
CHANGED
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@inandu-solutions/grid-vue",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Standalone Vue 3 data grid: sorting, free-text and per-column filtering, grouping, pagination, CSV/Excel (.xls)/PDF export and print, i18n (5 languages) and theming, with a deliberately small dependency footprint. The Vue port of @inandu-solutions/grid-angular.",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"vue",
|
|
7
|
-
"vue3",
|
|
8
|
-
"vue-grid",
|
|
9
|
-
"vue-datagrid",
|
|
10
|
-
"vue-table",
|
|
11
|
-
"vue-component",
|
|
12
|
-
"composable",
|
|
13
|
-
"data-grid",
|
|
14
|
-
"datagrid",
|
|
15
|
-
"grid",
|
|
16
|
-
"table",
|
|
17
|
-
"data-table",
|
|
18
|
-
"virtual-scroll",
|
|
19
|
-
"pagination",
|
|
20
|
-
"grouping",
|
|
21
|
-
"inline-editing",
|
|
22
|
-
"csv-export",
|
|
23
|
-
"excel-export",
|
|
24
|
-
"i18n",
|
|
25
|
-
"headless"
|
|
26
|
-
],
|
|
27
|
-
"license": "MIT",
|
|
28
|
-
"author": {
|
|
29
|
-
"name": "Inandu SAS",
|
|
30
|
-
"url": "https://www.inandu.com/"
|
|
31
|
-
},
|
|
32
|
-
"homepage": "https://github.com/inandusolutions/inandu-grid-vue#readme",
|
|
33
|
-
"repository": {
|
|
34
|
-
"type": "git",
|
|
35
|
-
"url": "git+https://github.com/inandusolutions/inandu-grid-vue.git"
|
|
36
|
-
},
|
|
37
|
-
"bugs": {
|
|
38
|
-
"url": "https://github.com/inandusolutions/inandu-grid-vue/issues"
|
|
39
|
-
},
|
|
40
|
-
"type": "module",
|
|
41
|
-
"main": "./dist/inandu-grid-vue.cjs",
|
|
42
|
-
"module": "./dist/inandu-grid-vue.js",
|
|
43
|
-
"types": "./dist/index.d.ts",
|
|
44
|
-
"exports": {
|
|
45
|
-
".": {
|
|
46
|
-
"types": "./dist/index.d.ts",
|
|
47
|
-
"import": "./dist/inandu-grid-vue.js",
|
|
48
|
-
"require": "./dist/inandu-grid-vue.cjs"
|
|
49
|
-
},
|
|
50
|
-
"./style.css": {
|
|
51
|
-
"default": "./dist/style.css"
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
"files": [
|
|
55
|
-
"dist"
|
|
56
|
-
],
|
|
57
|
-
"sideEffects": [
|
|
58
|
-
"*.css"
|
|
59
|
-
],
|
|
60
|
-
"publishConfig": {
|
|
61
|
-
"access": "public"
|
|
62
|
-
},
|
|
63
|
-
"engines": {
|
|
64
|
-
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
65
|
-
"npm": ">=10.0.0"
|
|
66
|
-
},
|
|
67
|
-
"scripts": {
|
|
68
|
-
"build": "vite build && node -e \"require('fs').copyFileSync('src/styles/inandu-grid.css','dist/style.css')\"",
|
|
69
|
-
"typecheck": "vue-tsc --noEmit",
|
|
70
|
-
"test": "vitest run",
|
|
71
|
-
"test:watch": "vitest"
|
|
72
|
-
},
|
|
73
|
-
"peerDependencies": {
|
|
74
|
-
"vue": "^3.4.0"
|
|
75
|
-
},
|
|
76
|
-
"dependencies": {
|
|
77
|
-
"jspdf": "^4.2.1"
|
|
78
|
-
},
|
|
79
|
-
"devDependencies": {
|
|
80
|
-
"@testing-library/jest-dom": "^7.0.1",
|
|
81
|
-
"@testing-library/vue": "^8.1.0",
|
|
82
|
-
"@vitejs/plugin-vue": "^6.0.
|
|
83
|
-
"@vue/test-utils": "^2.5.1",
|
|
84
|
-
"jsdom": "^30.1.
|
|
85
|
-
"typescript": "~5.9.3",
|
|
86
|
-
"vite": "^8.3.
|
|
87
|
-
"vite-plugin-dts": "^5.1.2",
|
|
88
|
-
"vitest": "^5.0.
|
|
89
|
-
"vue": "^3.5.43",
|
|
90
|
-
"vue-tsc": "^3.3.
|
|
91
|
-
}
|
|
92
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@inandu-solutions/grid-vue",
|
|
3
|
+
"version": "0.2.2",
|
|
4
|
+
"description": "Standalone Vue 3 data grid: sorting, free-text and per-column filtering, grouping, pagination, CSV/Excel (.xls)/PDF export and print, i18n (5 languages) and theming, with a deliberately small dependency footprint. The Vue port of @inandu-solutions/grid-angular.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"vue",
|
|
7
|
+
"vue3",
|
|
8
|
+
"vue-grid",
|
|
9
|
+
"vue-datagrid",
|
|
10
|
+
"vue-table",
|
|
11
|
+
"vue-component",
|
|
12
|
+
"composable",
|
|
13
|
+
"data-grid",
|
|
14
|
+
"datagrid",
|
|
15
|
+
"grid",
|
|
16
|
+
"table",
|
|
17
|
+
"data-table",
|
|
18
|
+
"virtual-scroll",
|
|
19
|
+
"pagination",
|
|
20
|
+
"grouping",
|
|
21
|
+
"inline-editing",
|
|
22
|
+
"csv-export",
|
|
23
|
+
"excel-export",
|
|
24
|
+
"i18n",
|
|
25
|
+
"headless"
|
|
26
|
+
],
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"author": {
|
|
29
|
+
"name": "Inandu SAS",
|
|
30
|
+
"url": "https://www.inandu.com/"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://github.com/inandusolutions/inandu-grid-vue#readme",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/inandusolutions/inandu-grid-vue.git"
|
|
36
|
+
},
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/inandusolutions/inandu-grid-vue/issues"
|
|
39
|
+
},
|
|
40
|
+
"type": "module",
|
|
41
|
+
"main": "./dist/inandu-grid-vue.cjs",
|
|
42
|
+
"module": "./dist/inandu-grid-vue.js",
|
|
43
|
+
"types": "./dist/index.d.ts",
|
|
44
|
+
"exports": {
|
|
45
|
+
".": {
|
|
46
|
+
"types": "./dist/index.d.ts",
|
|
47
|
+
"import": "./dist/inandu-grid-vue.js",
|
|
48
|
+
"require": "./dist/inandu-grid-vue.cjs"
|
|
49
|
+
},
|
|
50
|
+
"./style.css": {
|
|
51
|
+
"default": "./dist/style.css"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"files": [
|
|
55
|
+
"dist"
|
|
56
|
+
],
|
|
57
|
+
"sideEffects": [
|
|
58
|
+
"*.css"
|
|
59
|
+
],
|
|
60
|
+
"publishConfig": {
|
|
61
|
+
"access": "public"
|
|
62
|
+
},
|
|
63
|
+
"engines": {
|
|
64
|
+
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
65
|
+
"npm": ">=10.0.0"
|
|
66
|
+
},
|
|
67
|
+
"scripts": {
|
|
68
|
+
"build": "vite build && node -e \"require('fs').copyFileSync('src/styles/inandu-grid.css','dist/style.css')\"",
|
|
69
|
+
"typecheck": "vue-tsc --noEmit",
|
|
70
|
+
"test": "vitest run",
|
|
71
|
+
"test:watch": "vitest"
|
|
72
|
+
},
|
|
73
|
+
"peerDependencies": {
|
|
74
|
+
"vue": "^3.4.0"
|
|
75
|
+
},
|
|
76
|
+
"dependencies": {
|
|
77
|
+
"jspdf": "^4.2.1"
|
|
78
|
+
},
|
|
79
|
+
"devDependencies": {
|
|
80
|
+
"@testing-library/jest-dom": "^7.0.1",
|
|
81
|
+
"@testing-library/vue": "^8.1.0",
|
|
82
|
+
"@vitejs/plugin-vue": "^6.0.10",
|
|
83
|
+
"@vue/test-utils": "^2.5.1",
|
|
84
|
+
"jsdom": "^30.1.3",
|
|
85
|
+
"typescript": "~5.9.3",
|
|
86
|
+
"vite": "^8.3.4",
|
|
87
|
+
"vite-plugin-dts": "^5.1.2",
|
|
88
|
+
"vitest": "^5.0.5",
|
|
89
|
+
"vue": "^3.5.43",
|
|
90
|
+
"vue-tsc": "^3.3.13"
|
|
91
|
+
}
|
|
92
|
+
}
|