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