@iris-ui-kit/vue 0.2.37 → 0.2.39
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/admin.cjs +1 -1
- package/dist/admin.cjs.map +1 -1
- package/dist/admin.js +3 -3
- package/dist/chunk-5Q3JCKNE.js +380 -0
- package/dist/chunk-5Q3JCKNE.js.map +1 -0
- package/dist/{chunk-FZI5BGWH.js → chunk-IFRH33BT.js} +5 -5
- package/dist/chunk-IFRH33BT.js.map +1 -0
- package/dist/{chunk-S43IHHBU.js → chunk-U635XRYU.js} +27 -8
- package/dist/chunk-U635XRYU.js.map +1 -0
- package/dist/grid.cjs +398 -0
- package/dist/grid.cjs.map +1 -0
- package/dist/grid.d.cts +184 -0
- package/dist/grid.d.ts +184 -0
- package/dist/grid.js +4 -0
- package/dist/grid.js.map +1 -0
- package/dist/index.cjs +1858 -386
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +123 -30
- package/dist/index.d.ts +123 -30
- package/dist/index.js +1456 -386
- package/dist/index.js.map +1 -1
- package/dist/layouts.d.cts +2 -2
- package/dist/layouts.d.ts +2 -2
- package/dist/motion.cjs +24 -5
- package/dist/motion.cjs.map +1 -1
- package/dist/motion.d.cts +1 -1
- package/dist/motion.d.ts +1 -1
- package/dist/motion.js +1 -1
- package/package.json +7 -2
- package/dist/chunk-FZI5BGWH.js.map +0 -1
- package/dist/chunk-S43IHHBU.js.map +0 -1
package/dist/grid.cjs
ADDED
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
var grid = require('@iris-ui-kit/core/grid');
|
|
5
|
+
|
|
6
|
+
// src/grid/index.ts
|
|
7
|
+
function useStore(store) {
|
|
8
|
+
const state = vue.shallowRef(store.getState());
|
|
9
|
+
vue.onScopeDispose(store.subscribe((next) => state.value = next));
|
|
10
|
+
return state;
|
|
11
|
+
}
|
|
12
|
+
function defaultValue(row, column) {
|
|
13
|
+
return row[column.dataIndex ?? column.key];
|
|
14
|
+
}
|
|
15
|
+
function defaultSetValue(row, column, value) {
|
|
16
|
+
return { ...row, [column.dataIndex ?? column.key]: value };
|
|
17
|
+
}
|
|
18
|
+
function useGridClipboard(core, options) {
|
|
19
|
+
const latest = vue.shallowRef(options);
|
|
20
|
+
if (!core.hasFeature("clipboard")) {
|
|
21
|
+
core.use(
|
|
22
|
+
grid.createGridClipboardFeature({
|
|
23
|
+
getRows: () => latest.value.getRows?.() ?? core.invoke("getRows"),
|
|
24
|
+
getColumns: () => latest.value.getColumns(),
|
|
25
|
+
rowKeyField: latest.value.rowKeyField,
|
|
26
|
+
overflowRows: (context) => latest.value.overflowRows?.(context),
|
|
27
|
+
resolveValue: (row, column) => {
|
|
28
|
+
const resolve = latest.value.resolveValue;
|
|
29
|
+
return resolve ? resolve(row, column) : defaultValue(row, column);
|
|
30
|
+
},
|
|
31
|
+
parseValue: (text, row, column) => {
|
|
32
|
+
const parse = latest.value.parseValue;
|
|
33
|
+
return parse ? parse(text, row, column) : text;
|
|
34
|
+
},
|
|
35
|
+
setValue: (row, column, value) => latest.value.setValue?.(row, column, value) ?? defaultSetValue(row, column, value),
|
|
36
|
+
isCellEditable: (row, column, rowIndex, columnIndex) => latest.value.isCellEditable?.(row, column, rowIndex, columnIndex) ?? true,
|
|
37
|
+
reconcileRows: (sourceRows, previousRows, rows) => latest.value.reconcileRows?.(sourceRows, previousRows, rows) ?? rows,
|
|
38
|
+
commitOptions: () => {
|
|
39
|
+
const configured = latest.value.commitOptions;
|
|
40
|
+
return typeof configured === "function" ? configured() : configured ?? {};
|
|
41
|
+
},
|
|
42
|
+
onCopy: (change) => latest.value.onCopy?.(change),
|
|
43
|
+
onPaste: (change) => latest.value.onPaste?.(change)
|
|
44
|
+
})
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
const model = core.invoke("getClipboardModel");
|
|
48
|
+
return {
|
|
49
|
+
core,
|
|
50
|
+
model,
|
|
51
|
+
serialize: (format, copyWithFormat) => model.serialize(
|
|
52
|
+
format ?? latest.value.copyFormat ?? "tsv",
|
|
53
|
+
copyWithFormat ?? latest.value.copyWithFormat ?? false
|
|
54
|
+
),
|
|
55
|
+
paste: (text, range) => model.paste(text, range)
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function useGridFeature(core, name, method, create) {
|
|
59
|
+
if (!core.hasFeature(name)) core.use(create());
|
|
60
|
+
return core.invoke(method);
|
|
61
|
+
}
|
|
62
|
+
function useGridEditing(core, options) {
|
|
63
|
+
const latest = vue.shallowRef(options);
|
|
64
|
+
const model = useGridFeature(
|
|
65
|
+
core,
|
|
66
|
+
"editing",
|
|
67
|
+
"getEditingModel",
|
|
68
|
+
() => grid.createGridEditingFeature({
|
|
69
|
+
getRowKey: (row, index) => latest.value.getRowKey(row, index),
|
|
70
|
+
getRowIndex: (rowKey, row, rootRows) => latest.value.getRowIndex?.(rowKey, row, rootRows),
|
|
71
|
+
getRules: (columnKey) => latest.value.getRules?.(columnKey),
|
|
72
|
+
getValue: (row, columnKey) => latest.value.getValue?.(row, columnKey) ?? row[columnKey],
|
|
73
|
+
setValue: (row, columnKey, value) => latest.value.setValue?.(row, columnKey, value) ?? { ...row, [columnKey]: value },
|
|
74
|
+
coerce: (draft, row, columnKey) => latest.value.coerce?.(draft, row, columnKey) ?? draft,
|
|
75
|
+
validate: (value, row, columnKey) => latest.value.validate?.(value, row, columnKey) ?? null,
|
|
76
|
+
isEditable: (row, columnKey) => latest.value.isEditable?.(row, columnKey) ?? true,
|
|
77
|
+
missingRowMessage: options.missingRowMessage,
|
|
78
|
+
commitOptions: () => {
|
|
79
|
+
const configured = latest.value.commitOptions;
|
|
80
|
+
return typeof configured === "function" ? configured() : configured ?? {};
|
|
81
|
+
},
|
|
82
|
+
onStateChange: (state2) => latest.value.onStateChange?.(state2),
|
|
83
|
+
onValidation: (validation) => latest.value.onValidation?.(validation),
|
|
84
|
+
onCommit: (commit) => latest.value.onCommit?.(commit)
|
|
85
|
+
})
|
|
86
|
+
);
|
|
87
|
+
const state = useStore(model.store);
|
|
88
|
+
return {
|
|
89
|
+
core,
|
|
90
|
+
model,
|
|
91
|
+
state,
|
|
92
|
+
startCellEdit: (rowKey, columnKey, initialDraft) => model.start(rowKey, columnKey, initialDraft),
|
|
93
|
+
setCellDraft: (value) => model.setDraft(value),
|
|
94
|
+
cancelCellEdit: () => model.cancelEdit(),
|
|
95
|
+
commitCellEdit: (value) => model.commitEdit(value),
|
|
96
|
+
isCellEditing: (rowKey, columnKey) => model.isEditing(rowKey, columnKey)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function useGridRange(core, options = {}) {
|
|
100
|
+
const latest = vue.shallowRef(options);
|
|
101
|
+
if (!core.hasFeature("range")) {
|
|
102
|
+
core.use(
|
|
103
|
+
grid.createGridRangeFeature({
|
|
104
|
+
onChange: (change) => latest.value.onChange?.(change)
|
|
105
|
+
})
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
const model = core.invoke("getRangeModel");
|
|
109
|
+
const state = useStore(model);
|
|
110
|
+
const range = vue.computed(() => {
|
|
111
|
+
const { anchor, active } = state.value;
|
|
112
|
+
if (!anchor || !active) return null;
|
|
113
|
+
return {
|
|
114
|
+
start: {
|
|
115
|
+
row: Math.min(anchor.row, active.row),
|
|
116
|
+
col: Math.min(anchor.col, active.col)
|
|
117
|
+
},
|
|
118
|
+
end: {
|
|
119
|
+
row: Math.max(anchor.row, active.row),
|
|
120
|
+
col: Math.max(anchor.col, active.col)
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
return { model, state, range };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// src/grid/index.ts
|
|
128
|
+
function useGridCore(options = {}) {
|
|
129
|
+
const core = grid.createGridCore(options);
|
|
130
|
+
vue.onMounted(() => core.ready());
|
|
131
|
+
vue.onBeforeUnmount(() => core.destroy());
|
|
132
|
+
return core;
|
|
133
|
+
}
|
|
134
|
+
function useGridFeature2(core, name, method, create) {
|
|
135
|
+
if (!core.hasFeature(name)) core.use(create());
|
|
136
|
+
return core.invoke(method);
|
|
137
|
+
}
|
|
138
|
+
function useGridSelection(core, options = {}) {
|
|
139
|
+
const latest = vue.shallowRef(options);
|
|
140
|
+
const model = useGridFeature2(
|
|
141
|
+
core,
|
|
142
|
+
"selection",
|
|
143
|
+
"getSelectionModel",
|
|
144
|
+
() => grid.createGridSelectionFeature({
|
|
145
|
+
mode: options.mode,
|
|
146
|
+
defaultSelected: options.value ?? options.defaultValue,
|
|
147
|
+
getKeys: () => latest.value.getKeys?.() ?? [],
|
|
148
|
+
onChange: (keys) => latest.value.onChange?.(keys)
|
|
149
|
+
})
|
|
150
|
+
);
|
|
151
|
+
const state = useStore(model.store);
|
|
152
|
+
const controlled = vue.computed(() => options.value !== void 0);
|
|
153
|
+
vue.watch(
|
|
154
|
+
() => options.value,
|
|
155
|
+
(value) => {
|
|
156
|
+
if (value !== void 0) model.sync(value);
|
|
157
|
+
},
|
|
158
|
+
{ immediate: true }
|
|
159
|
+
);
|
|
160
|
+
return {
|
|
161
|
+
model,
|
|
162
|
+
controlled,
|
|
163
|
+
selection: vue.computed(() => controlled.value ? options.value ?? [] : state.value)
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function useGridExpansion(core, options = {}) {
|
|
167
|
+
const latest = vue.shallowRef(options);
|
|
168
|
+
const model = useGridFeature2(
|
|
169
|
+
core,
|
|
170
|
+
"expansion",
|
|
171
|
+
"getExpansionModel",
|
|
172
|
+
() => grid.createGridExpansionFeature({
|
|
173
|
+
mode: options.mode,
|
|
174
|
+
defaultExpanded: options.defaultValue,
|
|
175
|
+
getKeys: () => latest.value.getKeys?.() ?? [],
|
|
176
|
+
onChange: (keys) => latest.value.onChange?.(keys)
|
|
177
|
+
})
|
|
178
|
+
);
|
|
179
|
+
return { model, expandedKeys: useStore(model.store) };
|
|
180
|
+
}
|
|
181
|
+
function useGridRows(core, initialRows, options = {}) {
|
|
182
|
+
const latest = vue.shallowRef(options);
|
|
183
|
+
const model = useGridFeature2(
|
|
184
|
+
core,
|
|
185
|
+
"rows",
|
|
186
|
+
"getRowsModel",
|
|
187
|
+
() => grid.createGridRowsFeature({
|
|
188
|
+
defaultRows: initialRows,
|
|
189
|
+
cloneDefaultRows: options.cloneDefaultRows,
|
|
190
|
+
rowKeyField: options.rowKeyField,
|
|
191
|
+
getRowKey: (row, index) => latest.value.getRowKey?.(row, index),
|
|
192
|
+
getChildren: options.getChildren,
|
|
193
|
+
setChildren: options.setChildren,
|
|
194
|
+
onBeforeRowsChange: (tx) => latest.value.onBeforeRowsChange?.(tx),
|
|
195
|
+
onRowsChange: (tx) => latest.value.onRowsChange?.(tx)
|
|
196
|
+
})
|
|
197
|
+
);
|
|
198
|
+
return { model, rows: useStore(model.store) };
|
|
199
|
+
}
|
|
200
|
+
function useGridColumns(core, options = {}) {
|
|
201
|
+
const latest = vue.shallowRef(options);
|
|
202
|
+
const model = useGridFeature2(
|
|
203
|
+
core,
|
|
204
|
+
"columns",
|
|
205
|
+
"getColumnsModel",
|
|
206
|
+
() => grid.createGridColumnsFeature({
|
|
207
|
+
defaultVisibility: options.visibility ?? options.defaultVisibility,
|
|
208
|
+
defaultOrder: options.order ?? options.defaultOrder,
|
|
209
|
+
defaultWidths: options.widths ?? options.defaultWidths,
|
|
210
|
+
defaultPinned: options.pinned ?? options.defaultPinned,
|
|
211
|
+
onVisibilityChange: (v) => latest.value.onVisibilityChange?.(v),
|
|
212
|
+
onOrderChange: (v) => latest.value.onOrderChange?.(v),
|
|
213
|
+
onWidthsChange: (v) => latest.value.onWidthsChange?.(v),
|
|
214
|
+
onPinnedChange: (k, v) => latest.value.onPinnedChange?.(k, v)
|
|
215
|
+
})
|
|
216
|
+
);
|
|
217
|
+
const state = useStore(model.store);
|
|
218
|
+
vue.watch(
|
|
219
|
+
() => options.visibility,
|
|
220
|
+
(v) => v !== void 0 && model.syncVisibility(v)
|
|
221
|
+
);
|
|
222
|
+
vue.watch(
|
|
223
|
+
() => options.order,
|
|
224
|
+
(v) => v !== void 0 && model.syncOrder(v)
|
|
225
|
+
);
|
|
226
|
+
vue.watch(
|
|
227
|
+
() => options.widths,
|
|
228
|
+
(v) => v !== void 0 && model.syncWidths(v)
|
|
229
|
+
);
|
|
230
|
+
vue.watch(
|
|
231
|
+
() => options.pinned,
|
|
232
|
+
(v) => v !== void 0 && model.syncPinned(v)
|
|
233
|
+
);
|
|
234
|
+
return {
|
|
235
|
+
model,
|
|
236
|
+
state,
|
|
237
|
+
setVisibility: (v) => model.setVisibility(v),
|
|
238
|
+
toggleVisibility: (k) => model.toggleVisibility(k),
|
|
239
|
+
setOrder: (v) => model.setOrder(v),
|
|
240
|
+
clearOrder: () => model.setOrder(void 0),
|
|
241
|
+
setWidth: (k, v) => model.setWidth(k, v),
|
|
242
|
+
setWidths: (v) => model.setWidths(v),
|
|
243
|
+
resetWidths: () => model.setWidths({}),
|
|
244
|
+
setPinned: (k, v) => model.setPinned(k, v)
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
function useGridPagination(core, options = {}) {
|
|
248
|
+
const latest = vue.shallowRef(options);
|
|
249
|
+
const model = useGridFeature2(
|
|
250
|
+
core,
|
|
251
|
+
"pagination",
|
|
252
|
+
"getPaginationModel",
|
|
253
|
+
() => grid.createGridPaginationFeature({
|
|
254
|
+
defaultPage: options.page ?? options.defaultPage,
|
|
255
|
+
defaultPageSize: options.pageSize ?? options.defaultPageSize,
|
|
256
|
+
defaultTotal: options.total ?? options.defaultTotal,
|
|
257
|
+
onChange: (change) => latest.value.onChange?.(change)
|
|
258
|
+
})
|
|
259
|
+
);
|
|
260
|
+
const pagination = useStore(model.store);
|
|
261
|
+
vue.watch(
|
|
262
|
+
() => [options.page, options.pageSize, options.total],
|
|
263
|
+
([page, pageSize, total]) => model.sync({ page, pageSize, total }),
|
|
264
|
+
{ immediate: true }
|
|
265
|
+
);
|
|
266
|
+
return {
|
|
267
|
+
model,
|
|
268
|
+
pagination,
|
|
269
|
+
setPage: (v) => model.setPage(v),
|
|
270
|
+
setPageSize: (v) => model.setPageSize(v),
|
|
271
|
+
setPagination: (page, size) => model.set(page, size)
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
function useGridSorting(core, options = {}) {
|
|
275
|
+
const latest = vue.shallowRef(options);
|
|
276
|
+
const model = useGridFeature2(
|
|
277
|
+
core,
|
|
278
|
+
"sorting",
|
|
279
|
+
"getSortingModel",
|
|
280
|
+
() => grid.createGridSortingFeature({
|
|
281
|
+
mode: options.mode,
|
|
282
|
+
defaultSort: options.sort ?? options.defaultSort,
|
|
283
|
+
defaultMultiSort: options.multiSortState ?? options.defaultMultiSort,
|
|
284
|
+
onSortChange: (v) => latest.value.onSortChange?.(v),
|
|
285
|
+
onMultiSortChange: (v) => latest.value.onMultiSortChange?.(v)
|
|
286
|
+
})
|
|
287
|
+
);
|
|
288
|
+
const state = useStore(model.store);
|
|
289
|
+
vue.watch(
|
|
290
|
+
() => options.sort,
|
|
291
|
+
(v) => v !== void 0 && model.syncSort(v)
|
|
292
|
+
);
|
|
293
|
+
vue.watch(
|
|
294
|
+
() => options.multiSortState,
|
|
295
|
+
(v) => v !== void 0 && model.syncMultiSort(v)
|
|
296
|
+
);
|
|
297
|
+
return {
|
|
298
|
+
model,
|
|
299
|
+
sort: vue.computed(() => options.sort !== void 0 ? options.sort : state.value.sort),
|
|
300
|
+
multiSort: vue.computed(
|
|
301
|
+
() => options.multiSortState !== void 0 ? options.multiSortState : state.value.multiSort
|
|
302
|
+
),
|
|
303
|
+
cycleSort: (key) => model.cycleSort(key),
|
|
304
|
+
setSort: (v) => model.setSort(v),
|
|
305
|
+
cycleMultiSort: (key) => model.cycleMultiSort(key),
|
|
306
|
+
setMultiSort: (v) => model.setMultiSort(v)
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
function useGridFiltering(core, options = {}) {
|
|
310
|
+
const latest = vue.shallowRef(options);
|
|
311
|
+
const model = useGridFeature2(
|
|
312
|
+
core,
|
|
313
|
+
"filtering",
|
|
314
|
+
"getFilteringModel",
|
|
315
|
+
() => grid.createGridFilteringFeature({
|
|
316
|
+
defaultFilters: options.filters ?? options.defaultFilters,
|
|
317
|
+
defaultFilterValues: options.filterValues ?? options.defaultFilterValues,
|
|
318
|
+
onFiltersChange: (v) => latest.value.onFiltersChange?.(v),
|
|
319
|
+
onFilterValuesChange: (v) => latest.value.onFilterValuesChange?.(v)
|
|
320
|
+
})
|
|
321
|
+
);
|
|
322
|
+
const state = useStore(model.store);
|
|
323
|
+
vue.watch(
|
|
324
|
+
() => options.filters,
|
|
325
|
+
(v) => v !== void 0 && model.syncFilters(v)
|
|
326
|
+
);
|
|
327
|
+
vue.watch(
|
|
328
|
+
() => options.filterValues,
|
|
329
|
+
(v) => v !== void 0 && model.syncFilterValues(v)
|
|
330
|
+
);
|
|
331
|
+
return {
|
|
332
|
+
model,
|
|
333
|
+
filters: vue.computed(() => options.filters ?? state.value.filters),
|
|
334
|
+
filterValues: vue.computed(() => options.filterValues ?? state.value.filterValues)
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
function useGridVirtual(core, options) {
|
|
338
|
+
const model = useGridFeature2(
|
|
339
|
+
core,
|
|
340
|
+
"virtual",
|
|
341
|
+
"getVirtualModel",
|
|
342
|
+
() => grid.createGridVirtualFeature({
|
|
343
|
+
count: options.items.length,
|
|
344
|
+
estimateSize: (index) => {
|
|
345
|
+
const estimate = options.estimateSize;
|
|
346
|
+
return typeof estimate === "function" ? estimate(index) : estimate;
|
|
347
|
+
},
|
|
348
|
+
viewportSize: options.viewportSize,
|
|
349
|
+
scrollOffset: options.scrollOffset,
|
|
350
|
+
buffer: options.buffer,
|
|
351
|
+
fixedSize: typeof options.estimateSize === "number" ? options.estimateSize : null,
|
|
352
|
+
getItemKey: (index) => {
|
|
353
|
+
const item = options.items[index];
|
|
354
|
+
return item !== void 0 && options.getItemKey ? options.getItemKey(item, index) : index;
|
|
355
|
+
},
|
|
356
|
+
onRangeChange: options.onRangeChange
|
|
357
|
+
})
|
|
358
|
+
);
|
|
359
|
+
vue.watch(
|
|
360
|
+
() => options.items,
|
|
361
|
+
(items) => model.setCount(items.length)
|
|
362
|
+
);
|
|
363
|
+
vue.watch(
|
|
364
|
+
() => options.buffer,
|
|
365
|
+
(buffer) => model.setBuffer(buffer ?? 0)
|
|
366
|
+
);
|
|
367
|
+
vue.watch(
|
|
368
|
+
() => options.estimateSize,
|
|
369
|
+
(estimate) => {
|
|
370
|
+
model.setFixedSize(typeof estimate === "number" ? estimate : null);
|
|
371
|
+
model.remeasure();
|
|
372
|
+
}
|
|
373
|
+
);
|
|
374
|
+
vue.watch(
|
|
375
|
+
() => options.viewportSize,
|
|
376
|
+
(size) => size !== void 0 && model.setViewportSize(size)
|
|
377
|
+
);
|
|
378
|
+
vue.watch(
|
|
379
|
+
() => options.scrollOffset,
|
|
380
|
+
(offset) => offset !== void 0 && model.setScroll(offset)
|
|
381
|
+
);
|
|
382
|
+
return { model, state: useStore(model.store) };
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
exports.useGridClipboard = useGridClipboard;
|
|
386
|
+
exports.useGridColumns = useGridColumns;
|
|
387
|
+
exports.useGridCore = useGridCore;
|
|
388
|
+
exports.useGridEditing = useGridEditing;
|
|
389
|
+
exports.useGridExpansion = useGridExpansion;
|
|
390
|
+
exports.useGridFiltering = useGridFiltering;
|
|
391
|
+
exports.useGridPagination = useGridPagination;
|
|
392
|
+
exports.useGridRange = useGridRange;
|
|
393
|
+
exports.useGridRows = useGridRows;
|
|
394
|
+
exports.useGridSelection = useGridSelection;
|
|
395
|
+
exports.useGridSorting = useGridSorting;
|
|
396
|
+
exports.useGridVirtual = useGridVirtual;
|
|
397
|
+
//# sourceMappingURL=grid.cjs.map
|
|
398
|
+
//# sourceMappingURL=grid.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/useStore.ts","../src/grid/useGridClipboard.ts","../src/grid/useGridEditing.ts","../src/grid/useGridRange.ts","../src/grid/index.ts"],"names":["shallowRef","onScopeDispose","createGridClipboardFeature","createGridEditingFeature","state","createGridRangeFeature","computed","createGridCore","onMounted","onBeforeUnmount","useGridFeature","createGridSelectionFeature","watch","createGridExpansionFeature","createGridRowsFeature","createGridColumnsFeature","createGridPaginationFeature","createGridSortingFeature","createGridFilteringFeature","createGridVirtualFeature"],"mappings":"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","file":"grid.cjs","sourcesContent":["import { shallowRef, onScopeDispose, type ShallowRef } from 'vue'\nimport type { ReadonlyStore, Store } from '@iris-ui-kit/core'\n\n/**\n * Bridge a framework-agnostic `@iris-ui-kit/core` store into a Vue ref — updates on\n * every store emission. The mirror of React's `useSyncExternalStore`, Solid's\n * `createSignal`, and Svelte's `readable`. Seeds synchronously from\n * `store.getState()` (SSR-safe); detaches on scope dispose.\n */\nexport function useStore<T>(store: ReadonlyStore<T>): Readonly<ShallowRef<T>> {\n const state = shallowRef(store.getState()) as ShallowRef<T>\n onScopeDispose(store.subscribe((next) => (state.value = next)))\n return state\n}\n\n/**\n * Subscribe to a DERIVED slice of a core store — the ref updates only when\n * `selector(state)` changes per `equals` (default `Object.is`), not on every\n * store emission. Built on {@link Store.subscribeWith}.\n */\nexport function useStoreSelector<T, U>(\n store: Store<T>,\n selector: (state: T) => U,\n equals?: (a: U, b: U) => boolean,\n): Readonly<ShallowRef<U>> {\n const slice = shallowRef(selector(store.getState())) as ShallowRef<U>\n onScopeDispose(store.subscribeWith(selector, (v) => (slice.value = v), equals))\n return slice\n}\n","import { shallowRef } from 'vue'\nimport {\n createGridClipboardFeature,\n type GridClipboardFeatureOptions,\n type GridClipboardModel,\n type GridCore,\n} from '@iris-ui-kit/core/grid'\nimport type { TableClipboardColumn, TableClipboardRange, TableCopyFormat } from '@iris-ui-kit/core'\n\nexport type UseGridClipboardOptions<Row extends Record<string, unknown>> =\n GridClipboardFeatureOptions<Row>\n\nexport interface UseGridClipboardResult<Row extends Record<string, unknown>> {\n core: GridCore<Row>\n model: GridClipboardModel\n serialize(format?: TableCopyFormat, copyWithFormat?: boolean): string | null\n paste(text: string, range?: TableClipboardRange): boolean\n}\n\nfunction defaultValue<Row extends Record<string, unknown>>(\n row: Row,\n column: TableClipboardColumn<Row>,\n): unknown {\n return row[(column.dataIndex ?? column.key) as keyof Row]\n}\n\nfunction defaultSetValue<Row extends Record<string, unknown>>(\n row: Row,\n column: TableClipboardColumn<Row>,\n value: unknown,\n): Row {\n return { ...row, [column.dataIndex ?? column.key]: value }\n}\n\n/** Installs clipboard pure logic while leaving system clipboard I/O in Vue. */\nexport function useGridClipboard<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridClipboardOptions<Row>,\n): UseGridClipboardResult<Row> {\n const latest = shallowRef(options)\n if (!core.hasFeature('clipboard')) {\n core.use(\n createGridClipboardFeature<Row>({\n getRows: () => latest.value.getRows?.() ?? core.invoke<Row[]>('getRows'),\n getColumns: () => latest.value.getColumns(),\n rowKeyField: latest.value.rowKeyField,\n overflowRows: (context) => latest.value.overflowRows?.(context),\n resolveValue: (row, column) => {\n const resolve = latest.value.resolveValue\n return resolve ? resolve(row, column) : defaultValue(row, column)\n },\n parseValue: (text, row, column) => {\n const parse = latest.value.parseValue\n return parse ? parse(text, row, column) : text\n },\n setValue: (row, column, value) =>\n latest.value.setValue?.(row, column, value) ?? defaultSetValue(row, column, value),\n isCellEditable: (row, column, rowIndex, columnIndex) =>\n latest.value.isCellEditable?.(row, column, rowIndex, columnIndex) ?? true,\n reconcileRows: (sourceRows, previousRows, rows) =>\n latest.value.reconcileRows?.(sourceRows, previousRows, rows) ?? rows,\n commitOptions: () => {\n const configured = latest.value.commitOptions\n return typeof configured === 'function' ? configured() : (configured ?? {})\n },\n onCopy: (change) => latest.value.onCopy?.(change),\n onPaste: (change) => latest.value.onPaste?.(change),\n }),\n )\n }\n const model = core.invoke<GridClipboardModel>('getClipboardModel')\n return {\n core,\n model,\n serialize: (format, copyWithFormat) =>\n model.serialize(\n format ?? latest.value.copyFormat ?? 'tsv',\n copyWithFormat ?? latest.value.copyWithFormat ?? false,\n ),\n paste: (text, range) => model.paste(text, range),\n }\n}\n","import { shallowRef, type ShallowRef } from 'vue'\nimport {\n createGridEditingFeature,\n type GridCore,\n type GridEditingCommit,\n type GridEditingFeatureOptions,\n type GridEditingKey,\n type GridEditingModel,\n type GridEditingValidation,\n type GridFeature,\n} from '@iris-ui-kit/core/grid'\nimport type { CellEditState } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseGridEditingOptions<Row extends Record<string, unknown>> extends Omit<\n GridEditingFeatureOptions<Row>,\n 'onStateChange' | 'onCommit'\n> {\n onStateChange?: (state: CellEditState<GridEditingKey>) => void\n onValidation?: (validation: GridEditingValidation) => void\n onCommit?: (commit: GridEditingCommit<Row>) => void\n}\n\nexport interface UseGridEditingResult<Row extends Record<string, unknown>> {\n core: GridCore<Row>\n model: GridEditingModel\n state: Readonly<ShallowRef<CellEditState<GridEditingKey>>>\n startCellEdit(rowKey: GridEditingKey, columnKey: string, initialDraft?: unknown): boolean\n setCellDraft(value: unknown): void\n cancelCellEdit(): void\n commitCellEdit(value?: unknown): boolean\n isCellEditing(rowKey: GridEditingKey, columnKey: string): boolean\n}\n\nfunction useGridFeature<Row extends Record<string, unknown>, Model>(\n core: GridCore<Row>,\n name: string,\n method: string,\n create: () => GridFeature<Row>,\n): Model {\n if (!core.hasFeature(name)) core.use(create())\n return core.invoke<Model>(method)\n}\n\n/** Installs the framework-independent editing feature and bridges its state into Vue. */\nexport function useGridEditing<Row extends Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridEditingOptions<Row>,\n): UseGridEditingResult<Row> {\n const latest = shallowRef(options)\n const model = useGridFeature<Row, GridEditingModel>(core, 'editing', 'getEditingModel', () =>\n createGridEditingFeature<Row>({\n getRowKey: (row, index) => latest.value.getRowKey(row, index),\n getRowIndex: (rowKey, row, rootRows) => latest.value.getRowIndex?.(rowKey, row, rootRows),\n getRules: (columnKey) => latest.value.getRules?.(columnKey),\n getValue: (row, columnKey) => latest.value.getValue?.(row, columnKey) ?? row[columnKey],\n setValue: (row, columnKey, value) =>\n latest.value.setValue?.(row, columnKey, value) ?? { ...row, [columnKey]: value },\n coerce: (draft, row, columnKey) => latest.value.coerce?.(draft, row, columnKey) ?? draft,\n validate: (value, row, columnKey) => latest.value.validate?.(value, row, columnKey) ?? null,\n isEditable: (row, columnKey) => latest.value.isEditable?.(row, columnKey) ?? true,\n missingRowMessage: options.missingRowMessage,\n commitOptions: () => {\n const configured = latest.value.commitOptions\n return typeof configured === 'function' ? configured() : (configured ?? {})\n },\n onStateChange: (state) => latest.value.onStateChange?.(state),\n onValidation: (validation) => latest.value.onValidation?.(validation),\n onCommit: (commit) => latest.value.onCommit?.(commit),\n }),\n )\n const state = useStore(model.store) as ShallowRef<CellEditState<GridEditingKey>>\n return {\n core,\n model,\n state,\n startCellEdit: (rowKey, columnKey, initialDraft) =>\n model.start(rowKey, columnKey, initialDraft),\n setCellDraft: (value) => model.setDraft(value),\n cancelCellEdit: () => model.cancelEdit(),\n commitCellEdit: (value) => model.commitEdit(value),\n isCellEditing: (rowKey, columnKey) => model.isEditing(rowKey, columnKey),\n }\n}\n","import { computed, shallowRef, type ComputedRef, type ShallowRef } from 'vue'\nimport {\n createGridRangeFeature,\n type GridCore,\n type GridRangeChange,\n type GridRangeModel,\n} from '@iris-ui-kit/core/grid'\nimport type { CellRange, CellRangeState } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseGridRangeOptions {\n onChange?: (change: GridRangeChange) => void\n}\n\nexport interface UseGridRangeResult {\n model: GridRangeModel\n state: Readonly<ShallowRef<CellRangeState>>\n range: ComputedRef<CellRange | null>\n}\n\n/** Installs the range feature and bridges its controller snapshot into Vue. */\nexport function useGridRange<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridRangeOptions = {},\n): UseGridRangeResult {\n const latest = shallowRef(options)\n if (!core.hasFeature('range')) {\n core.use(\n createGridRangeFeature<Row>({\n onChange: (change) => latest.value.onChange?.(change),\n }),\n )\n }\n const model = core.invoke<GridRangeModel>('getRangeModel')\n const state = useStore(model)\n const range = computed(() => {\n const { anchor, active } = state.value\n if (!anchor || !active) return null\n return {\n start: {\n row: Math.min(anchor.row, active.row),\n col: Math.min(anchor.col, active.col),\n },\n end: {\n row: Math.max(anchor.row, active.row),\n col: Math.max(anchor.col, active.col),\n },\n }\n })\n return { model, state, range }\n}\n","import {\n computed,\n onBeforeUnmount,\n onMounted,\n shallowRef,\n watch,\n type ComputedRef,\n type ShallowRef,\n} from 'vue'\nimport {\n createGridColumnsFeature,\n createGridCore,\n createGridExpansionFeature,\n createGridFilteringFeature,\n createGridPaginationFeature,\n createGridRowsFeature,\n createGridSelectionFeature,\n createGridSortingFeature,\n createGridVirtualFeature,\n type GridColumnPin,\n type GridColumnsModel,\n type GridColumnsState,\n type GridCore,\n type GridExpansionKey,\n type GridFeature,\n type GridFilterValues,\n type GridFilteringModel,\n type GridPaginationChange,\n type GridPaginationModel,\n type GridPaginationState,\n type GridRowKey,\n type GridRowsCommitOptions,\n type GridRowsModel,\n type GridRowsTransaction,\n type SelectionModel,\n type SelectionKey,\n type SelectionMode,\n type GridSortingModel,\n type GridVirtualModel,\n type GridVirtualRangeChange,\n type VirtualizerState,\n type SortState,\n} from '@iris-ui-kit/core/grid'\nimport type { ExpansionModel } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseGridCoreOptions<Row extends Record<string, unknown>> {\n readonly features?: readonly GridFeature<Row>[]\n}\n\n/** Vue lifecycle bridge for one framework-independent Grid Core instance. */\nexport function useGridCore<Row extends Record<string, unknown> = Record<string, unknown>>(\n options: UseGridCoreOptions<Row> = {},\n): GridCore<Row> {\n const core = createGridCore(options)\n onMounted(() => core.ready())\n onBeforeUnmount(() => core.destroy())\n return core\n}\n\nfunction useGridFeature<Row extends Record<string, unknown>, Model>(\n core: GridCore<Row>,\n name: string,\n method: string,\n create: () => GridFeature<Row>,\n): Model {\n if (!core.hasFeature(name)) core.use(create())\n return core.invoke<Model>(method)\n}\n\nexport interface UseGridSelectionOptions<K extends SelectionKey = string> {\n mode?: SelectionMode\n value?: K[]\n defaultValue?: K[]\n onChange?: (keys: K[]) => void\n getKeys?: () => readonly K[]\n}\nexport interface UseGridSelectionResult<K extends SelectionKey = string> {\n model: SelectionModel<K>\n selection: ComputedRef<K[]>\n controlled: ComputedRef<boolean>\n}\nexport function useGridSelection<\n Row extends Record<string, unknown> = Record<string, unknown>,\n K extends SelectionKey = string,\n>(core: GridCore<Row>, options: UseGridSelectionOptions<K> = {}): UseGridSelectionResult<K> {\n const latest = shallowRef(options)\n const model = useGridFeature<Row, SelectionModel<K>>(core, 'selection', 'getSelectionModel', () =>\n createGridSelectionFeature<Row, K>({\n mode: options.mode,\n defaultSelected: options.value ?? options.defaultValue,\n getKeys: () => latest.value.getKeys?.() ?? [],\n onChange: (keys) => latest.value.onChange?.(keys),\n }),\n )\n const state = useStore(model.store)\n const controlled = computed(() => options.value !== undefined)\n watch(\n () => options.value,\n (value) => {\n if (value !== undefined) model.sync(value)\n },\n { immediate: true },\n )\n return {\n model,\n controlled,\n selection: computed(() => (controlled.value ? (options.value ?? []) : state.value)),\n }\n}\n\nexport interface UseGridExpansionOptions<K extends GridExpansionKey = string> {\n mode?: 'single' | 'multiple'\n defaultValue?: K[]\n onChange?: (keys: K[]) => void\n getKeys?: () => readonly K[]\n}\nexport interface UseGridExpansionResult<K extends GridExpansionKey = string> {\n model: ExpansionModel<K>\n expandedKeys: ShallowRef<K[]>\n}\nexport function useGridExpansion<\n Row extends Record<string, unknown> = Record<string, unknown>,\n K extends GridExpansionKey = string,\n>(core: GridCore<Row>, options: UseGridExpansionOptions<K> = {}): UseGridExpansionResult<K> {\n const latest = shallowRef(options)\n const model = useGridFeature<Row, ExpansionModel<K>>(core, 'expansion', 'getExpansionModel', () =>\n createGridExpansionFeature<Row, K>({\n mode: options.mode,\n defaultExpanded: options.defaultValue,\n getKeys: () => latest.value.getKeys?.() ?? [],\n onChange: (keys) => latest.value.onChange?.(keys),\n }),\n )\n return { model, expandedKeys: useStore(model.store) as ShallowRef<K[]> }\n}\n\nexport interface UseGridRowsOptions<Row extends Record<string, unknown>, Meta = unknown> {\n /** Copy the initial seed before the rows feature stores it (default true). */\n cloneDefaultRows?: boolean\n rowKeyField?: string\n getRowKey?: (row: Row, index: number) => GridRowKey | undefined\n /** Read nested rows when the source is a tree; omitted keeps flat-row semantics. */\n getChildren?: (row: Row) => readonly Row[] | undefined\n /** Replace nested rows immutably when `getChildren` is not a direct property. */\n setChildren?: (row: Row, children: Row[]) => Row\n onBeforeRowsChange?: (transaction: GridRowsTransaction<Row, Meta>) => void\n onRowsChange?: (transaction: GridRowsTransaction<Row, Meta>) => void\n}\nexport interface UseGridRowsResult<Row extends Record<string, unknown>, Meta = unknown> {\n model: GridRowsModel<Row, Meta>\n rows: ShallowRef<Row[]>\n}\nexport function useGridRows<\n Row extends Record<string, unknown> = Record<string, unknown>,\n Meta = unknown,\n>(\n core: GridCore<Row>,\n initialRows: readonly Row[],\n options: UseGridRowsOptions<Row, Meta> = {},\n): UseGridRowsResult<Row, Meta> {\n const latest = shallowRef(options)\n const model = useGridFeature<Row, GridRowsModel<Row, Meta>>(core, 'rows', 'getRowsModel', () =>\n createGridRowsFeature<Row, Meta>({\n defaultRows: initialRows,\n cloneDefaultRows: options.cloneDefaultRows,\n rowKeyField: options.rowKeyField,\n getRowKey: (row, index) => latest.value.getRowKey?.(row, index),\n getChildren: options.getChildren,\n setChildren: options.setChildren,\n onBeforeRowsChange: (tx) => latest.value.onBeforeRowsChange?.(tx),\n onRowsChange: (tx) => latest.value.onRowsChange?.(tx),\n }),\n )\n return { model, rows: useStore(model.store) as ShallowRef<Row[]> }\n}\n\nexport interface UseGridColumnsOptions {\n visibility?: Record<string, boolean>\n defaultVisibility?: Record<string, boolean>\n onVisibilityChange?: (value: Record<string, boolean>) => void\n order?: string[]\n defaultOrder?: string[]\n orderControlled?: boolean\n onOrderChange?: (value: string[] | undefined) => void\n widths?: Record<string, number>\n defaultWidths?: Record<string, number>\n onWidthsChange?: (value: Record<string, number>) => void\n pinned?: Record<string, GridColumnPin>\n defaultPinned?: Record<string, GridColumnPin>\n onPinnedChange?: (key: string, side: GridColumnPin) => void\n}\nexport interface UseGridColumnsResult {\n model: GridColumnsModel\n state: ShallowRef<GridColumnsState>\n setVisibility(value: Record<string, boolean>): void\n toggleVisibility(key: string): void\n setOrder(value: string[] | undefined): void\n clearOrder(): void\n setWidth(key: string, width: number): void\n setWidths(value: Record<string, number>): void\n resetWidths(): void\n setPinned(key: string, side: GridColumnPin): void\n}\nexport function useGridColumns<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridColumnsOptions = {},\n): UseGridColumnsResult {\n const latest = shallowRef(options)\n const model = useGridFeature<Row, GridColumnsModel>(core, 'columns', 'getColumnsModel', () =>\n createGridColumnsFeature<Row>({\n defaultVisibility: options.visibility ?? options.defaultVisibility,\n defaultOrder: options.order ?? options.defaultOrder,\n defaultWidths: options.widths ?? options.defaultWidths,\n defaultPinned: options.pinned ?? options.defaultPinned,\n onVisibilityChange: (v) => latest.value.onVisibilityChange?.(v),\n onOrderChange: (v) => latest.value.onOrderChange?.(v),\n onWidthsChange: (v) => latest.value.onWidthsChange?.(v),\n onPinnedChange: (k, v) => latest.value.onPinnedChange?.(k, v),\n }),\n )\n const state = useStore(model.store)\n watch(\n () => options.visibility,\n (v) => v !== undefined && model.syncVisibility(v),\n )\n watch(\n () => options.order,\n (v) => v !== undefined && model.syncOrder(v),\n )\n watch(\n () => options.widths,\n (v) => v !== undefined && model.syncWidths(v),\n )\n watch(\n () => options.pinned,\n (v) => v !== undefined && model.syncPinned(v),\n )\n return {\n model,\n state,\n setVisibility: (v) => model.setVisibility(v),\n toggleVisibility: (k) => model.toggleVisibility(k),\n setOrder: (v) => model.setOrder(v),\n clearOrder: () => model.setOrder(undefined),\n setWidth: (k, v) => model.setWidth(k, v),\n setWidths: (v) => model.setWidths(v),\n resetWidths: () => model.setWidths({}),\n setPinned: (k, v) => model.setPinned(k, v),\n }\n}\n\nexport interface UseGridPaginationOptions {\n page?: number\n defaultPage?: number\n pageSize?: number\n defaultPageSize?: number\n total?: number\n defaultTotal?: number\n onChange?: (change: GridPaginationChange) => void\n}\nexport interface UseGridPaginationResult {\n model: GridPaginationModel\n pagination: ShallowRef<GridPaginationState>\n setPage(page: number): void\n setPageSize(pageSize: number): void\n setPagination(page: number, pageSize: number): void\n}\nexport function useGridPagination<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridPaginationOptions = {},\n): UseGridPaginationResult {\n const latest = shallowRef(options)\n const model = useGridFeature<Row, GridPaginationModel>(\n core,\n 'pagination',\n 'getPaginationModel',\n () =>\n createGridPaginationFeature<Row>({\n defaultPage: options.page ?? options.defaultPage,\n defaultPageSize: options.pageSize ?? options.defaultPageSize,\n defaultTotal: options.total ?? options.defaultTotal,\n onChange: (change) => latest.value.onChange?.(change),\n }),\n )\n const pagination = useStore(model.store)\n watch(\n () => [options.page, options.pageSize, options.total] as const,\n ([page, pageSize, total]) => model.sync({ page, pageSize, total }),\n { immediate: true },\n )\n return {\n model,\n pagination,\n setPage: (v) => model.setPage(v),\n setPageSize: (v) => model.setPageSize(v),\n setPagination: (page, size) => model.set(page, size),\n }\n}\n\nexport interface UseGridSortingOptions {\n mode?: 'single' | 'multiple'\n sort?: SortState | null\n defaultSort?: SortState | null\n onSortChange?: (sort: SortState | null) => void\n multiSortState?: SortState[]\n defaultMultiSort?: SortState[]\n onMultiSortChange?: (sorts: SortState[]) => void\n}\nexport interface UseGridSortingResult {\n model: GridSortingModel\n sort: ComputedRef<SortState | null>\n multiSort: ComputedRef<SortState[]>\n cycleSort(key: string): void\n setSort(sort: SortState | null): void\n cycleMultiSort(key: string): void\n setMultiSort(sorts: SortState[]): void\n}\nexport function useGridSorting<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridSortingOptions = {},\n): UseGridSortingResult {\n const latest = shallowRef(options)\n const model = useGridFeature<Row, GridSortingModel>(core, 'sorting', 'getSortingModel', () =>\n createGridSortingFeature<Row>({\n mode: options.mode,\n defaultSort: options.sort ?? options.defaultSort,\n defaultMultiSort: options.multiSortState ?? options.defaultMultiSort,\n onSortChange: (v) => latest.value.onSortChange?.(v),\n onMultiSortChange: (v) => latest.value.onMultiSortChange?.(v),\n }),\n )\n const state = useStore(model.store)\n watch(\n () => options.sort,\n (v) => v !== undefined && model.syncSort(v),\n )\n watch(\n () => options.multiSortState,\n (v) => v !== undefined && model.syncMultiSort(v),\n )\n return {\n model,\n sort: computed(() => (options.sort !== undefined ? options.sort : state.value.sort)),\n multiSort: computed(() =>\n options.multiSortState !== undefined ? options.multiSortState : state.value.multiSort,\n ),\n cycleSort: (key) => model.cycleSort(key),\n setSort: (v) => model.setSort(v),\n cycleMultiSort: (key) => model.cycleMultiSort(key),\n setMultiSort: (v) => model.setMultiSort(v),\n }\n}\n\nexport interface UseGridFilteringOptions {\n filters?: Record<string, string>\n defaultFilters?: Record<string, string>\n onFiltersChange?: (filters: Record<string, string>) => void\n filterValues?: GridFilterValues\n defaultFilterValues?: GridFilterValues\n onFilterValuesChange?: (values: GridFilterValues) => void\n}\nexport interface UseGridFilteringResult {\n model: GridFilteringModel\n filters: ComputedRef<Record<string, string>>\n filterValues: ComputedRef<GridFilterValues>\n}\nexport function useGridFiltering<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridFilteringOptions = {},\n): UseGridFilteringResult {\n const latest = shallowRef(options)\n const model = useGridFeature<Row, GridFilteringModel>(\n core,\n 'filtering',\n 'getFilteringModel',\n () =>\n createGridFilteringFeature<Row>({\n defaultFilters: options.filters ?? options.defaultFilters,\n defaultFilterValues: options.filterValues ?? options.defaultFilterValues,\n onFiltersChange: (v) => latest.value.onFiltersChange?.(v),\n onFilterValuesChange: (v) => latest.value.onFilterValuesChange?.(v),\n }),\n )\n const state = useStore(model.store)\n watch(\n () => options.filters,\n (v) => v !== undefined && model.syncFilters(v),\n )\n watch(\n () => options.filterValues,\n (v) => v !== undefined && model.syncFilterValues(v),\n )\n return {\n model,\n filters: computed(() => options.filters ?? state.value.filters),\n filterValues: computed(() => options.filterValues ?? state.value.filterValues),\n }\n}\n\nexport interface UseGridVirtualOptions<Item> {\n items: readonly Item[]\n estimateSize: number | ((index: number) => number)\n viewportSize?: number\n scrollOffset?: number\n buffer?: number\n getItemKey?: (item: Item, index: number) => string | number\n onRangeChange?: (change: GridVirtualRangeChange) => void\n}\nexport interface UseGridVirtualResult {\n model: GridVirtualModel\n state: ShallowRef<VirtualizerState>\n}\nexport function useGridVirtual<\n Row extends Record<string, unknown> = Record<string, unknown>,\n Item = Row,\n>(core: GridCore<Row>, options: UseGridVirtualOptions<Item>): UseGridVirtualResult {\n const model = useGridFeature<Row, GridVirtualModel>(core, 'virtual', 'getVirtualModel', () =>\n createGridVirtualFeature<Row>({\n count: options.items.length,\n estimateSize: (index) => {\n const estimate = options.estimateSize\n return typeof estimate === 'function' ? estimate(index) : estimate\n },\n viewportSize: options.viewportSize,\n scrollOffset: options.scrollOffset,\n buffer: options.buffer,\n fixedSize: typeof options.estimateSize === 'number' ? options.estimateSize : null,\n getItemKey: (index) => {\n const item = options.items[index]\n return item !== undefined && options.getItemKey ? options.getItemKey(item, index) : index\n },\n onRangeChange: options.onRangeChange,\n }),\n )\n watch(\n () => options.items,\n (items) => model.setCount(items.length),\n )\n watch(\n () => options.buffer,\n (buffer) => model.setBuffer(buffer ?? 0),\n )\n watch(\n () => options.estimateSize,\n (estimate) => {\n model.setFixedSize(typeof estimate === 'number' ? estimate : null)\n model.remeasure()\n },\n )\n watch(\n () => options.viewportSize,\n (size) => size !== undefined && model.setViewportSize(size),\n )\n watch(\n () => options.scrollOffset,\n (offset) => offset !== undefined && model.setScroll(offset),\n )\n return { model, state: useStore(model.store) }\n}\n\nexport type { GridColumnPin, GridCore, GridFeature, GridRowsCommitOptions }\nexport {\n useGridClipboard,\n type UseGridClipboardOptions,\n type UseGridClipboardResult,\n} from './useGridClipboard'\nexport {\n useGridEditing,\n type UseGridEditingOptions,\n type UseGridEditingResult,\n} from './useGridEditing'\nexport { useGridRange, type UseGridRangeOptions, type UseGridRangeResult } from './useGridRange'\n"]}
|