vueye-table 3.0.0-beta.1 → 3.0.0-beta.3
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/index.d.ts +189 -102
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -37
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import { CellChange, EditResult, RowKey, TableIssue, TableRow, TableState } from "@vueye-table/core";
|
|
1
|
+
import { CellChange, EditResult, RowKey, SortInfo, TableIssue, TableRow, TableState } from "@vueye-table/core";
|
|
2
2
|
import { CellEditorSlotProps, DetailSlotProps, GridCellSlotProps, TableStatusSlotProps } from "@vueye-table/headless";
|
|
3
|
+
import { DataTableBinding, TableLocaleOptions } from "@vueye-table/vue";
|
|
3
4
|
import { Plugin, PropType, SlotsType, VNode } from "vue";
|
|
4
5
|
export * from "@vueye-table/core";
|
|
5
6
|
export * from "@vueye-table/headless";
|
|
6
7
|
export * from "@vueye-table/styled";
|
|
7
8
|
export * from "@vueye-table/vue";
|
|
8
9
|
//#region src/plugin.d.ts
|
|
9
|
-
/**
|
|
10
|
-
|
|
10
|
+
/** Options of `VueyeTablePlugin`: the application's language, which every table speaks. */
|
|
11
|
+
type VueyeTablePluginOptions = TableLocaleOptions;
|
|
12
|
+
/**
|
|
13
|
+
* Register `<VueyeTable>` and `<VueyeGrid>` globally. A `locale` and `messages` given here are
|
|
14
|
+
* the default of every table in the application; a table's own props win over them.
|
|
15
|
+
*/
|
|
16
|
+
declare const VueyeTablePlugin: Plugin<[VueyeTablePluginOptions?]>;
|
|
11
17
|
//#endregion
|
|
12
18
|
//#region src/vueye-grid.d.ts
|
|
13
19
|
/**
|
|
@@ -43,9 +49,10 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
43
49
|
type: BooleanConstructor;
|
|
44
50
|
default: boolean;
|
|
45
51
|
};
|
|
52
|
+
/** The grid's accessible name. Defaults to the messages' `spreadsheet`. */
|
|
46
53
|
label: {
|
|
47
|
-
type:
|
|
48
|
-
default:
|
|
54
|
+
type: PropType<string | undefined>;
|
|
55
|
+
default: undefined;
|
|
49
56
|
};
|
|
50
57
|
/** Show undo, redo, and CSV export buttons. */
|
|
51
58
|
toolbar: {
|
|
@@ -153,7 +160,19 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
153
160
|
readonly default: false;
|
|
154
161
|
};
|
|
155
162
|
theme: {
|
|
156
|
-
readonly type: PropType<"light" | "dark">;
|
|
163
|
+
readonly type: PropType<"light" | "dark" | "inherit">;
|
|
164
|
+
readonly default: undefined;
|
|
165
|
+
};
|
|
166
|
+
locale: {
|
|
167
|
+
readonly type: PropType<string | undefined>;
|
|
168
|
+
readonly default: undefined;
|
|
169
|
+
};
|
|
170
|
+
messages: {
|
|
171
|
+
readonly type: PropType<Partial<import("@vueye-table/core").TableMessages> | undefined>;
|
|
172
|
+
readonly default: undefined;
|
|
173
|
+
};
|
|
174
|
+
normalizeText: {
|
|
175
|
+
readonly type: PropType<import("@vueye-table/core").TextNormalizer | undefined>;
|
|
157
176
|
readonly default: undefined;
|
|
158
177
|
};
|
|
159
178
|
maxHeight: {
|
|
@@ -161,8 +180,8 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
161
180
|
readonly default: undefined;
|
|
162
181
|
};
|
|
163
182
|
searchPlaceholder: {
|
|
164
|
-
readonly type:
|
|
165
|
-
readonly default:
|
|
183
|
+
readonly type: PropType<string | undefined>;
|
|
184
|
+
readonly default: undefined;
|
|
166
185
|
};
|
|
167
186
|
pageSizeOptions: {
|
|
168
187
|
readonly type: PropType<readonly number[]>;
|
|
@@ -228,6 +247,10 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
228
247
|
readonly type: NumberConstructor;
|
|
229
248
|
readonly default: 120;
|
|
230
249
|
};
|
|
250
|
+
rowAttrs: {
|
|
251
|
+
readonly type: PropType<import("@vueye-table/headless").AnyRowAttrs | undefined>;
|
|
252
|
+
readonly default: undefined;
|
|
253
|
+
};
|
|
231
254
|
validateRow: {
|
|
232
255
|
readonly type: PropType<import("@vueye-table/core").TableOptions<any>["validateRow"]>;
|
|
233
256
|
readonly default: undefined;
|
|
@@ -259,29 +282,24 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
259
282
|
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
260
283
|
[key: string]: any;
|
|
261
284
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
262
|
-
"
|
|
263
|
-
"update:
|
|
264
|
-
|
|
265
|
-
"
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
"update:
|
|
270
|
-
|
|
271
|
-
"update:
|
|
272
|
-
|
|
285
|
+
"state-change": (_state: TableState) => true;
|
|
286
|
+
"update:data": (_data: readonly unknown[]) => true;
|
|
287
|
+
edit: (_changes: readonly CellChange<unknown>[]) => true;
|
|
288
|
+
"edit-error": (_issues: readonly TableIssue[]) => true;
|
|
289
|
+
export: (_csv: string) => true;
|
|
290
|
+
expand: (_item: unknown, _row: TableRow<unknown>) => true;
|
|
291
|
+
collapse: (_item: unknown, _row: TableRow<unknown>) => true;
|
|
292
|
+
"update:page": (_page: number) => boolean;
|
|
293
|
+
"update:pageSize": (_pageSize: number) => boolean;
|
|
294
|
+
"update:sorting": (_sorting: readonly import("@vueye-table/core").SortRule[]) => boolean;
|
|
295
|
+
"update:search": (_search: string) => boolean;
|
|
296
|
+
"update:filters": (_filters: Readonly<Record<string, unknown>>) => boolean;
|
|
297
|
+
"update:hiddenColumns": (_hiddenColumns: readonly string[]) => boolean;
|
|
298
|
+
"update:selected": (_selected: readonly import("@vueye-table/core").RowKey[]) => boolean;
|
|
299
|
+
"update:expanded": (_expanded: import("@vueye-table/core").ExpandedState) => boolean;
|
|
273
300
|
save: (_result: EditResult<unknown>) => boolean;
|
|
274
301
|
cancel: (_key: import("@vueye-table/core").RowKey) => boolean;
|
|
275
302
|
"edit-issues": (_issues: readonly TableIssue[]) => boolean;
|
|
276
|
-
"edit-error": (_issues: readonly TableIssue[]) => boolean;
|
|
277
|
-
} & {
|
|
278
|
-
"state-change": (state: TableState) => boolean;
|
|
279
|
-
"update:data": (data: readonly unknown[]) => boolean;
|
|
280
|
-
edit: (changes: readonly CellChange<unknown>[]) => boolean;
|
|
281
|
-
"edit-error": (issues: readonly TableIssue[]) => boolean;
|
|
282
|
-
export: (csv: string) => boolean;
|
|
283
|
-
expand: (item: unknown, row: TableRow<unknown>) => boolean;
|
|
284
|
-
collapse: (item: unknown, row: TableRow<unknown>) => boolean;
|
|
285
303
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
286
304
|
searchable: {
|
|
287
305
|
type: BooleanConstructor;
|
|
@@ -309,9 +327,10 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
309
327
|
type: BooleanConstructor;
|
|
310
328
|
default: boolean;
|
|
311
329
|
};
|
|
330
|
+
/** The grid's accessible name. Defaults to the messages' `spreadsheet`. */
|
|
312
331
|
label: {
|
|
313
|
-
type:
|
|
314
|
-
default:
|
|
332
|
+
type: PropType<string | undefined>;
|
|
333
|
+
default: undefined;
|
|
315
334
|
};
|
|
316
335
|
/** Show undo, redo, and CSV export buttons. */
|
|
317
336
|
toolbar: {
|
|
@@ -419,7 +438,19 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
419
438
|
readonly default: false;
|
|
420
439
|
};
|
|
421
440
|
theme: {
|
|
422
|
-
readonly type: PropType<"light" | "dark">;
|
|
441
|
+
readonly type: PropType<"light" | "dark" | "inherit">;
|
|
442
|
+
readonly default: undefined;
|
|
443
|
+
};
|
|
444
|
+
locale: {
|
|
445
|
+
readonly type: PropType<string | undefined>;
|
|
446
|
+
readonly default: undefined;
|
|
447
|
+
};
|
|
448
|
+
messages: {
|
|
449
|
+
readonly type: PropType<Partial<import("@vueye-table/core").TableMessages> | undefined>;
|
|
450
|
+
readonly default: undefined;
|
|
451
|
+
};
|
|
452
|
+
normalizeText: {
|
|
453
|
+
readonly type: PropType<import("@vueye-table/core").TextNormalizer | undefined>;
|
|
423
454
|
readonly default: undefined;
|
|
424
455
|
};
|
|
425
456
|
maxHeight: {
|
|
@@ -427,8 +458,8 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
427
458
|
readonly default: undefined;
|
|
428
459
|
};
|
|
429
460
|
searchPlaceholder: {
|
|
430
|
-
readonly type:
|
|
431
|
-
readonly default:
|
|
461
|
+
readonly type: PropType<string | undefined>;
|
|
462
|
+
readonly default: undefined;
|
|
432
463
|
};
|
|
433
464
|
pageSizeOptions: {
|
|
434
465
|
readonly type: PropType<readonly number[]>;
|
|
@@ -494,6 +525,10 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
494
525
|
readonly type: NumberConstructor;
|
|
495
526
|
readonly default: 120;
|
|
496
527
|
};
|
|
528
|
+
rowAttrs: {
|
|
529
|
+
readonly type: PropType<import("@vueye-table/headless").AnyRowAttrs | undefined>;
|
|
530
|
+
readonly default: undefined;
|
|
531
|
+
};
|
|
497
532
|
validateRow: {
|
|
498
533
|
readonly type: PropType<import("@vueye-table/core").TableOptions<any>["validateRow"]>;
|
|
499
534
|
readonly default: undefined;
|
|
@@ -523,24 +558,24 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
523
558
|
default: () => never[];
|
|
524
559
|
};
|
|
525
560
|
}>> & Readonly<{
|
|
526
|
-
"
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
"onUpdate:
|
|
531
|
-
"onUpdate:
|
|
532
|
-
"onUpdate:
|
|
533
|
-
"onUpdate:
|
|
561
|
+
"onState-change"?: (_state: TableState) => any;
|
|
562
|
+
onExpand?: (_item: unknown, _row: TableRow<unknown>) => any;
|
|
563
|
+
onCollapse?: (_item: unknown, _row: TableRow<unknown>) => any;
|
|
564
|
+
onCancel?: (_key: import("@vueye-table/core").RowKey) => any;
|
|
565
|
+
"onUpdate:page"?: (_page: number) => any;
|
|
566
|
+
"onUpdate:pageSize"?: (_pageSize: number) => any;
|
|
567
|
+
"onUpdate:sorting"?: (_sorting: readonly import("@vueye-table/core").SortRule[]) => any;
|
|
568
|
+
"onUpdate:search"?: (_search: string) => any;
|
|
569
|
+
"onUpdate:filters"?: (_filters: Readonly<Record<string, unknown>>) => any;
|
|
570
|
+
"onUpdate:hiddenColumns"?: (_hiddenColumns: readonly string[]) => any;
|
|
571
|
+
"onUpdate:selected"?: (_selected: readonly import("@vueye-table/core").RowKey[]) => any;
|
|
572
|
+
"onUpdate:expanded"?: (_expanded: import("@vueye-table/core").ExpandedState) => any;
|
|
534
573
|
"onUpdate:data"?: (_data: readonly unknown[]) => any;
|
|
535
574
|
onEdit?: (_changes: readonly CellChange<unknown>[]) => any;
|
|
536
575
|
onSave?: (_result: EditResult<unknown>) => any;
|
|
537
|
-
onCancel?: (_key: import("@vueye-table/core").RowKey) => any;
|
|
538
576
|
"onEdit-issues"?: (_issues: readonly TableIssue[]) => any;
|
|
539
577
|
"onEdit-error"?: (_issues: readonly TableIssue[]) => any;
|
|
540
|
-
|
|
541
|
-
onExpand?: (item: unknown, row: TableRow<unknown>) => any;
|
|
542
|
-
onCollapse?: (item: unknown, row: TableRow<unknown>) => any;
|
|
543
|
-
onExport?: (csv: string) => any;
|
|
578
|
+
onExport?: (_csv: string) => any;
|
|
544
579
|
}>, {
|
|
545
580
|
validateRow: ((next: any, previous: any) => import("@vueye-table/core").ValidationResult | Promise<import("@vueye-table/core").ValidationResult>) | undefined;
|
|
546
581
|
setParentKey: ((row: any, parent: import("@vueye-table/core").RowKey | undefined) => any) | undefined;
|
|
@@ -571,16 +606,20 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
571
606
|
bordered: boolean;
|
|
572
607
|
hover: boolean;
|
|
573
608
|
stickyHeader: boolean;
|
|
574
|
-
theme: "light" | "dark";
|
|
609
|
+
theme: "light" | "dark" | "inherit";
|
|
610
|
+
locale: string | undefined;
|
|
611
|
+
messages: Partial<import("@vueye-table/core").TableMessages> | undefined;
|
|
612
|
+
search: string;
|
|
613
|
+
searchPlaceholder: string | undefined;
|
|
614
|
+
pagination: boolean;
|
|
615
|
+
addRow: boolean;
|
|
616
|
+
normalizeText: import("@vueye-table/core").TextNormalizer | undefined;
|
|
575
617
|
maxHeight: string;
|
|
576
618
|
searchable: boolean;
|
|
577
|
-
searchPlaceholder: string;
|
|
578
619
|
columnToggle: boolean;
|
|
579
|
-
pagination: boolean;
|
|
580
620
|
pageSizeOptions: readonly number[];
|
|
581
621
|
pageSize: number;
|
|
582
622
|
sorting: readonly import("@vueye-table/core").SortRule[];
|
|
583
|
-
search: string;
|
|
584
623
|
filters: Readonly<Record<string, unknown>>;
|
|
585
624
|
hiddenColumns: readonly string[];
|
|
586
625
|
selectScope: import("@vueye-table/core").SelectScope;
|
|
@@ -592,12 +631,12 @@ declare const VueyeGrid: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
592
631
|
overscan: number;
|
|
593
632
|
virtualColumns: boolean;
|
|
594
633
|
columnWidth: number;
|
|
634
|
+
rowAttrs: import("@vueye-table/headless").AnyRowAttrs | undefined;
|
|
595
635
|
asyncValidation: "held" | "optimistic" | undefined;
|
|
596
636
|
createRow: (() => any) | undefined;
|
|
597
|
-
addRow: boolean;
|
|
598
637
|
removeRows: boolean;
|
|
599
638
|
toolbar: boolean;
|
|
600
|
-
label: string;
|
|
639
|
+
label: string | undefined;
|
|
601
640
|
editable: boolean;
|
|
602
641
|
rowNumbers: boolean;
|
|
603
642
|
columnLetters: boolean;
|
|
@@ -624,8 +663,27 @@ interface CellSlotProps {
|
|
|
624
663
|
readonly header: string;
|
|
625
664
|
};
|
|
626
665
|
}
|
|
666
|
+
/**
|
|
667
|
+
* What a `<VueyeTable>` exposes on its template ref: the table binding, with every snapshot field
|
|
668
|
+
* and operation. `useTemplateRef<VueyeTableExposed>("table")` reads it typed.
|
|
669
|
+
*/
|
|
670
|
+
interface VueyeTableExposed {
|
|
671
|
+
readonly table: DataTableBinding<unknown>;
|
|
672
|
+
}
|
|
627
673
|
/** Slot props of `status`, the "1–10 of 57 rows" line. */
|
|
628
674
|
type StatusSlotProps = TableStatusSlotProps;
|
|
675
|
+
/**
|
|
676
|
+
* Slot props of `header.<column id>`. The slot fills the header cell; on a sortable column it sits
|
|
677
|
+
* inside the sort button, so the header still sorts on click and shows its indicator.
|
|
678
|
+
*/
|
|
679
|
+
interface HeaderSlotProps {
|
|
680
|
+
readonly column: {
|
|
681
|
+
readonly id: string;
|
|
682
|
+
readonly header: string;
|
|
683
|
+
};
|
|
684
|
+
readonly sort: SortInfo | undefined;
|
|
685
|
+
readonly toggleSort: (multi?: boolean) => void;
|
|
686
|
+
}
|
|
629
687
|
/**
|
|
630
688
|
* A complete data table: search, column visibility, sorting, selection, pagination, a live
|
|
631
689
|
* status line, loading and empty states, and theming. Every piece of state is available as a
|
|
@@ -648,8 +706,8 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
648
706
|
/** The data is one page from a server; `rowCount` is the total. */
|
|
649
707
|
/** Shown instead of the empty state while `loading` and there are no rows yet. */
|
|
650
708
|
loadingText: {
|
|
651
|
-
type:
|
|
652
|
-
default:
|
|
709
|
+
type: PropType<string | undefined>;
|
|
710
|
+
default: undefined;
|
|
653
711
|
};
|
|
654
712
|
rowCanExpand: {
|
|
655
713
|
readonly type: PropType<((row: any) => boolean) | undefined>;
|
|
@@ -752,7 +810,19 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
752
810
|
readonly default: false;
|
|
753
811
|
};
|
|
754
812
|
theme: {
|
|
755
|
-
readonly type: PropType<"light" | "dark">;
|
|
813
|
+
readonly type: PropType<"light" | "dark" | "inherit">;
|
|
814
|
+
readonly default: undefined;
|
|
815
|
+
};
|
|
816
|
+
locale: {
|
|
817
|
+
readonly type: PropType<string | undefined>;
|
|
818
|
+
readonly default: undefined;
|
|
819
|
+
};
|
|
820
|
+
messages: {
|
|
821
|
+
readonly type: PropType<Partial<import("@vueye-table/core").TableMessages> | undefined>;
|
|
822
|
+
readonly default: undefined;
|
|
823
|
+
};
|
|
824
|
+
normalizeText: {
|
|
825
|
+
readonly type: PropType<import("@vueye-table/core").TextNormalizer | undefined>;
|
|
756
826
|
readonly default: undefined;
|
|
757
827
|
};
|
|
758
828
|
maxHeight: {
|
|
@@ -764,8 +834,8 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
764
834
|
readonly default: true;
|
|
765
835
|
};
|
|
766
836
|
searchPlaceholder: {
|
|
767
|
-
readonly type:
|
|
768
|
-
readonly default:
|
|
837
|
+
readonly type: PropType<string | undefined>;
|
|
838
|
+
readonly default: undefined;
|
|
769
839
|
};
|
|
770
840
|
columnToggle: {
|
|
771
841
|
readonly type: BooleanConstructor;
|
|
@@ -839,6 +909,10 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
839
909
|
readonly type: NumberConstructor;
|
|
840
910
|
readonly default: 120;
|
|
841
911
|
};
|
|
912
|
+
rowAttrs: {
|
|
913
|
+
readonly type: PropType<import("@vueye-table/headless").AnyRowAttrs | undefined>;
|
|
914
|
+
readonly default: undefined;
|
|
915
|
+
};
|
|
842
916
|
validateRow: {
|
|
843
917
|
readonly type: PropType<import("@vueye-table/core").TableOptions<any>["validateRow"]>;
|
|
844
918
|
readonly default: undefined;
|
|
@@ -870,26 +944,24 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
870
944
|
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
871
945
|
[key: string]: any;
|
|
872
946
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
873
|
-
"
|
|
874
|
-
"
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
"update:
|
|
878
|
-
"update:
|
|
879
|
-
"update:
|
|
880
|
-
"update:
|
|
881
|
-
|
|
947
|
+
"state-change": (_state: TableState) => true;
|
|
948
|
+
"row-click": (_item: unknown, _row: TableRow<unknown>) => true;
|
|
949
|
+
expand: (_item: unknown, _row: TableRow<unknown>) => true;
|
|
950
|
+
collapse: (_item: unknown, _row: TableRow<unknown>) => true;
|
|
951
|
+
"update:page": (_page: number) => boolean;
|
|
952
|
+
"update:pageSize": (_pageSize: number) => boolean;
|
|
953
|
+
"update:sorting": (_sorting: readonly import("@vueye-table/core").SortRule[]) => boolean;
|
|
954
|
+
"update:search": (_search: string) => boolean;
|
|
955
|
+
"update:filters": (_filters: Readonly<Record<string, unknown>>) => boolean;
|
|
956
|
+
"update:hiddenColumns": (_hiddenColumns: readonly string[]) => boolean;
|
|
957
|
+
"update:selected": (_selected: readonly RowKey[]) => boolean;
|
|
958
|
+
"update:expanded": (_expanded: import("@vueye-table/core").ExpandedState) => boolean;
|
|
882
959
|
"update:data": (_data: readonly unknown[]) => boolean;
|
|
883
960
|
edit: (_changes: readonly import("@vueye-table/core").CellChange<unknown>[]) => boolean;
|
|
884
961
|
save: (_result: EditResult<unknown>) => boolean;
|
|
885
962
|
cancel: (_key: RowKey) => boolean;
|
|
886
963
|
"edit-issues": (_issues: readonly import("@vueye-table/core").TableIssue[]) => boolean;
|
|
887
964
|
"edit-error": (_issues: readonly import("@vueye-table/core").TableIssue[]) => boolean;
|
|
888
|
-
} & {
|
|
889
|
-
"state-change": (state: TableState) => boolean;
|
|
890
|
-
"row-click": (item: unknown, row: TableRow<unknown>) => boolean;
|
|
891
|
-
expand: (item: unknown, row: TableRow<unknown>) => boolean;
|
|
892
|
-
collapse: (item: unknown, row: TableRow<unknown>) => boolean;
|
|
893
965
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
894
966
|
editMode: {
|
|
895
967
|
type: PropType<"cell" | "row" | undefined>;
|
|
@@ -907,8 +979,8 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
907
979
|
/** The data is one page from a server; `rowCount` is the total. */
|
|
908
980
|
/** Shown instead of the empty state while `loading` and there are no rows yet. */
|
|
909
981
|
loadingText: {
|
|
910
|
-
type:
|
|
911
|
-
default:
|
|
982
|
+
type: PropType<string | undefined>;
|
|
983
|
+
default: undefined;
|
|
912
984
|
};
|
|
913
985
|
rowCanExpand: {
|
|
914
986
|
readonly type: PropType<((row: any) => boolean) | undefined>;
|
|
@@ -1011,7 +1083,19 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
1011
1083
|
readonly default: false;
|
|
1012
1084
|
};
|
|
1013
1085
|
theme: {
|
|
1014
|
-
readonly type: PropType<"light" | "dark">;
|
|
1086
|
+
readonly type: PropType<"light" | "dark" | "inherit">;
|
|
1087
|
+
readonly default: undefined;
|
|
1088
|
+
};
|
|
1089
|
+
locale: {
|
|
1090
|
+
readonly type: PropType<string | undefined>;
|
|
1091
|
+
readonly default: undefined;
|
|
1092
|
+
};
|
|
1093
|
+
messages: {
|
|
1094
|
+
readonly type: PropType<Partial<import("@vueye-table/core").TableMessages> | undefined>;
|
|
1095
|
+
readonly default: undefined;
|
|
1096
|
+
};
|
|
1097
|
+
normalizeText: {
|
|
1098
|
+
readonly type: PropType<import("@vueye-table/core").TextNormalizer | undefined>;
|
|
1015
1099
|
readonly default: undefined;
|
|
1016
1100
|
};
|
|
1017
1101
|
maxHeight: {
|
|
@@ -1023,8 +1107,8 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
1023
1107
|
readonly default: true;
|
|
1024
1108
|
};
|
|
1025
1109
|
searchPlaceholder: {
|
|
1026
|
-
readonly type:
|
|
1027
|
-
readonly default:
|
|
1110
|
+
readonly type: PropType<string | undefined>;
|
|
1111
|
+
readonly default: undefined;
|
|
1028
1112
|
};
|
|
1029
1113
|
columnToggle: {
|
|
1030
1114
|
readonly type: BooleanConstructor;
|
|
@@ -1098,6 +1182,10 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
1098
1182
|
readonly type: NumberConstructor;
|
|
1099
1183
|
readonly default: 120;
|
|
1100
1184
|
};
|
|
1185
|
+
rowAttrs: {
|
|
1186
|
+
readonly type: PropType<import("@vueye-table/headless").AnyRowAttrs | undefined>;
|
|
1187
|
+
readonly default: undefined;
|
|
1188
|
+
};
|
|
1101
1189
|
validateRow: {
|
|
1102
1190
|
readonly type: PropType<import("@vueye-table/core").TableOptions<any>["validateRow"]>;
|
|
1103
1191
|
readonly default: undefined;
|
|
@@ -1127,24 +1215,24 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
1127
1215
|
default: () => never[];
|
|
1128
1216
|
};
|
|
1129
1217
|
}>> & Readonly<{
|
|
1130
|
-
"
|
|
1131
|
-
"
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
"onUpdate:
|
|
1136
|
-
"onUpdate:
|
|
1137
|
-
"onUpdate:
|
|
1218
|
+
"onState-change"?: (_state: TableState) => any;
|
|
1219
|
+
"onRow-click"?: (_item: unknown, _row: TableRow<unknown>) => any;
|
|
1220
|
+
onExpand?: (_item: unknown, _row: TableRow<unknown>) => any;
|
|
1221
|
+
onCollapse?: (_item: unknown, _row: TableRow<unknown>) => any;
|
|
1222
|
+
onCancel?: (_key: RowKey) => any;
|
|
1223
|
+
"onUpdate:page"?: (_page: number) => any;
|
|
1224
|
+
"onUpdate:pageSize"?: (_pageSize: number) => any;
|
|
1225
|
+
"onUpdate:sorting"?: (_sorting: readonly import("@vueye-table/core").SortRule[]) => any;
|
|
1226
|
+
"onUpdate:search"?: (_search: string) => any;
|
|
1227
|
+
"onUpdate:filters"?: (_filters: Readonly<Record<string, unknown>>) => any;
|
|
1228
|
+
"onUpdate:hiddenColumns"?: (_hiddenColumns: readonly string[]) => any;
|
|
1229
|
+
"onUpdate:selected"?: (_selected: readonly RowKey[]) => any;
|
|
1230
|
+
"onUpdate:expanded"?: (_expanded: import("@vueye-table/core").ExpandedState) => any;
|
|
1138
1231
|
"onUpdate:data"?: (_data: readonly unknown[]) => any;
|
|
1139
1232
|
onEdit?: (_changes: readonly import("@vueye-table/core").CellChange<unknown>[]) => any;
|
|
1140
1233
|
onSave?: (_result: EditResult<unknown>) => any;
|
|
1141
|
-
onCancel?: (_key: RowKey) => any;
|
|
1142
1234
|
"onEdit-issues"?: (_issues: readonly import("@vueye-table/core").TableIssue[]) => any;
|
|
1143
1235
|
"onEdit-error"?: (_issues: readonly import("@vueye-table/core").TableIssue[]) => any;
|
|
1144
|
-
"onState-change"?: (state: TableState) => any;
|
|
1145
|
-
"onRow-click"?: (item: unknown, row: TableRow<unknown>) => any;
|
|
1146
|
-
onExpand?: (item: unknown, row: TableRow<unknown>) => any;
|
|
1147
|
-
onCollapse?: (item: unknown, row: TableRow<unknown>) => any;
|
|
1148
1236
|
}>, {
|
|
1149
1237
|
validateRow: ((next: any, previous: any) => import("@vueye-table/core").ValidationResult | Promise<import("@vueye-table/core").ValidationResult>) | undefined;
|
|
1150
1238
|
setParentKey: ((row: any, parent: RowKey | undefined) => any) | undefined;
|
|
@@ -1160,7 +1248,7 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
1160
1248
|
editMode: "row" | "cell" | undefined;
|
|
1161
1249
|
selectable: boolean | "single" | "multiple";
|
|
1162
1250
|
selected: readonly RowKey[];
|
|
1163
|
-
loadingText: string;
|
|
1251
|
+
loadingText: string | undefined;
|
|
1164
1252
|
rowCanExpand: ((row: any) => boolean) | undefined;
|
|
1165
1253
|
expandMode: import("@vueye-table/core").ExpandMode;
|
|
1166
1254
|
expanded: import("@vueye-table/core").ExpandedState | undefined;
|
|
@@ -1179,16 +1267,20 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
1179
1267
|
bordered: boolean;
|
|
1180
1268
|
hover: boolean;
|
|
1181
1269
|
stickyHeader: boolean;
|
|
1182
|
-
theme: "light" | "dark";
|
|
1270
|
+
theme: "light" | "dark" | "inherit";
|
|
1271
|
+
locale: string | undefined;
|
|
1272
|
+
messages: Partial<import("@vueye-table/core").TableMessages> | undefined;
|
|
1273
|
+
search: string;
|
|
1274
|
+
searchPlaceholder: string | undefined;
|
|
1275
|
+
pagination: boolean;
|
|
1276
|
+
addRow: boolean;
|
|
1277
|
+
normalizeText: import("@vueye-table/core").TextNormalizer | undefined;
|
|
1183
1278
|
maxHeight: string;
|
|
1184
1279
|
searchable: boolean;
|
|
1185
|
-
searchPlaceholder: string;
|
|
1186
1280
|
columnToggle: boolean;
|
|
1187
|
-
pagination: boolean;
|
|
1188
1281
|
pageSizeOptions: readonly number[];
|
|
1189
1282
|
pageSize: number;
|
|
1190
1283
|
sorting: readonly import("@vueye-table/core").SortRule[];
|
|
1191
|
-
search: string;
|
|
1192
1284
|
filters: Readonly<Record<string, unknown>>;
|
|
1193
1285
|
hiddenColumns: readonly string[];
|
|
1194
1286
|
selectScope: import("@vueye-table/core").SelectScope;
|
|
@@ -1200,19 +1292,14 @@ declare const VueyeTable: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
1200
1292
|
overscan: number;
|
|
1201
1293
|
virtualColumns: boolean;
|
|
1202
1294
|
columnWidth: number;
|
|
1295
|
+
rowAttrs: import("@vueye-table/headless").AnyRowAttrs | undefined;
|
|
1203
1296
|
asyncValidation: "held" | "optimistic" | undefined;
|
|
1204
1297
|
createRow: (() => any) | undefined;
|
|
1205
|
-
addRow: boolean;
|
|
1206
1298
|
removeRows: boolean;
|
|
1207
1299
|
}, SlotsType<{
|
|
1208
1300
|
[key: `cell.${string}`]: CellSlotProps;
|
|
1209
1301
|
[key: `editor.${string}`]: CellEditorSlotProps;
|
|
1210
|
-
[key: `header.${string}`]:
|
|
1211
|
-
column: {
|
|
1212
|
-
id: string;
|
|
1213
|
-
header: string;
|
|
1214
|
-
};
|
|
1215
|
-
};
|
|
1302
|
+
[key: `header.${string}`]: HeaderSlotProps;
|
|
1216
1303
|
} & {
|
|
1217
1304
|
toolbar: {
|
|
1218
1305
|
table: unknown;
|
|
@@ -1234,5 +1321,5 @@ declare module "vue" {
|
|
|
1234
1321
|
}
|
|
1235
1322
|
}
|
|
1236
1323
|
//#endregion
|
|
1237
|
-
export { type CellSlotProps, type StatusSlotProps, VueyeGrid, VueyeTable, VueyeTablePlugin };
|
|
1324
|
+
export { type CellSlotProps, type HeaderSlotProps, type StatusSlotProps, VueyeGrid, VueyeTable, type VueyeTableExposed, VueyeTablePlugin, type VueyeTablePluginOptions };
|
|
1238
1325
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/plugin.ts","../src/vueye-grid.ts","../src/vueye-table.ts","../src/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/plugin.ts","../src/vueye-grid.ts","../src/vueye-table.ts","../src/index.ts"],"mappings":";;;;;;;;;;KAOY,0BAA0B;;;;;cAMzB,kBAAkB,QAAQ;;;;;;;;;cCsC1B,yBAAS,8BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwBO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAXF,MAAA;;;;;;EAkBE,iBAAA,QAAA;EACF,gBAAA;EACN,OAAA,mBAAS;EACF,eAAA,kBAAS;EAClB,SAAA;EACC,SAAA,gBAAO,MAAQ;EACb,WAAA,gBAAO,MAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAbR,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAXF,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aATyC;;;;EAGpD,WAAC,OAAO,4BAA4B;EACrC,UAAC,OAAO,yBAAyB;EAC/B,YAAC,OAAO,oBAAoB;kCA4M3C;;;;UClMe;WACN;WACA,KAAK;WACL;WACA;WACA;aAAmB;aAAqB;;;;;;;UAOlC;WACN,OAAO;;;KAIN,kBAAkB;;;;;UAMb;WACN;aAAmB;aAAqB;;WACxC,MAAM;WACN,aAAa;;;;;;;cAQX,0BAAU,8BAAA;;IAMS,MAAA;;;;;IAGC,MAAA;;;;IAGF,MAAA,kBAAkB;;;;;;IAGd,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAXR,MAAA;;;;;;EAgBE,iBAAA,QAAA;EACJ,cAAA,gBAAO,MAAQ;EACpB,SAAA,gBAAO,MAAQ;EACb,WAAA,gBAAO,MAAQ;;;;;;;;;;;;;;;;;IAjBL,MAAA;;;;;IAGC,MAAA;;;;IAGF,MAAA,kBAAkB;;;;;;IAGd,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAXR,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BZ;IAAE;;EACJ,OAAA;EACE,SAAA;EACD;IAAE;;EACF,QAAA;EACE,UAAA;kCAsVd;;;;YChdiB;IACf,mBAAmB;IACnB,kBAAkB"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inferColumns } from "@vueye-table/core";
|
|
2
|
-
import { DataTableBody, DataTableCaption, DataTableCell, DataTableEditCell, DataTableEditRoot, DataTableRoot, DataTableRow, DataTableSelectAll, DataTableSelectRow, DataTableViewport, hierarchyProps, resolveTreeColumn, virtualProps } from "@vueye-table/headless";
|
|
2
|
+
import { DataTableBody, DataTableCaption, DataTableCell, DataTableEditCell, DataTableEditRoot, DataTableRoot, DataTableRow, DataTableSelectAll, DataTableSelectRow, DataTableViewport, hierarchyProps, resolveTreeColumn, rowAttributes, virtualProps } from "@vueye-table/headless";
|
|
3
3
|
import { VtColumnVisibility, VtEmpty, VtExpandToggle, VtGrid, VtHeader, VtLoadMore, VtPageSize, VtPagination, VtRowActions, VtSearch, VtStatus, VtToolbar, VtTreeCell } from "@vueye-table/styled";
|
|
4
|
-
import { provideDataTable, useDataTable } from "@vueye-table/vue";
|
|
4
|
+
import { provideDataTable, provideTableLocale, tableLocaleKey, useDataTable, useTableLocale } from "@vueye-table/vue";
|
|
5
5
|
import { computed, defineComponent, h, mergeProps } from "vue";
|
|
6
6
|
|
|
7
7
|
export * from "@vueye-table/core"
|
|
@@ -55,6 +55,14 @@ const CellContent = defineComponent({
|
|
|
55
55
|
});
|
|
56
56
|
/** Props both full components share. */
|
|
57
57
|
const commonProps = {
|
|
58
|
+
/**
|
|
59
|
+
* `(item, row) => attributes`: a class, a style, and `data-*` and `aria-*` attributes for each
|
|
60
|
+
* body row, read on every render. The row's own attributes win, and handlers are left out.
|
|
61
|
+
*/
|
|
62
|
+
rowAttrs: {
|
|
63
|
+
type: Function,
|
|
64
|
+
default: void 0
|
|
65
|
+
},
|
|
58
66
|
validateRow: {
|
|
59
67
|
type: Function,
|
|
60
68
|
default: void 0
|
|
@@ -184,10 +192,37 @@ const commonProps = {
|
|
|
184
192
|
type: Boolean,
|
|
185
193
|
default: false
|
|
186
194
|
},
|
|
195
|
+
/**
|
|
196
|
+
* `"light"` or `"dark"` forces a palette; by default the table follows `prefers-color-scheme`.
|
|
197
|
+
* `"inherit"` uses no built-in palette: the host declares the `--vt-*` tokens on an ancestor,
|
|
198
|
+
* in its own light and dark themes.
|
|
199
|
+
*/
|
|
187
200
|
theme: {
|
|
188
201
|
type: String,
|
|
189
202
|
default: void 0
|
|
190
203
|
},
|
|
204
|
+
/**
|
|
205
|
+
* The BCP 47 locale numbers are written and text is ordered in, such as `"fr"` or `"ar-DZ"`.
|
|
206
|
+
* Defaults to the plugin's, then the runtime's. Ordering reads it once, when the table is
|
|
207
|
+
* created; give the table a new `key` to change it.
|
|
208
|
+
*/
|
|
209
|
+
locale: {
|
|
210
|
+
type: String,
|
|
211
|
+
default: void 0
|
|
212
|
+
},
|
|
213
|
+
/** The host's words for what the table shows and announces, over the plugin's and English. */
|
|
214
|
+
messages: {
|
|
215
|
+
type: Object,
|
|
216
|
+
default: void 0
|
|
217
|
+
},
|
|
218
|
+
/**
|
|
219
|
+
* How search and text filters read text. Defaults to `foldText`: case, accents and Arabic
|
|
220
|
+
* letter shapes ignored. Read once, when the table is created.
|
|
221
|
+
*/
|
|
222
|
+
normalizeText: {
|
|
223
|
+
type: Function,
|
|
224
|
+
default: void 0
|
|
225
|
+
},
|
|
191
226
|
/** A CSS height that makes the body scroll, such as `"24rem"`. */
|
|
192
227
|
maxHeight: {
|
|
193
228
|
type: String,
|
|
@@ -197,9 +232,10 @@ const commonProps = {
|
|
|
197
232
|
type: Boolean,
|
|
198
233
|
default: true
|
|
199
234
|
},
|
|
235
|
+
/** Defaults to the messages' `searchPlaceholder`. */
|
|
200
236
|
searchPlaceholder: {
|
|
201
237
|
type: String,
|
|
202
|
-
default:
|
|
238
|
+
default: void 0
|
|
203
239
|
},
|
|
204
240
|
columnToggle: {
|
|
205
241
|
type: Boolean,
|
|
@@ -263,16 +299,18 @@ function editingOptions(props) {
|
|
|
263
299
|
setParentKey: props.setParentKey
|
|
264
300
|
};
|
|
265
301
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
"update:
|
|
269
|
-
"update:
|
|
270
|
-
"update:
|
|
271
|
-
"update:
|
|
272
|
-
"update:
|
|
273
|
-
"update:
|
|
274
|
-
"update:
|
|
275
|
-
|
|
302
|
+
/** The `v-model` events of table state, typed by the value each carries. */
|
|
303
|
+
const stateEmitValidators = {
|
|
304
|
+
"update:page": (_page) => true,
|
|
305
|
+
"update:pageSize": (_pageSize) => true,
|
|
306
|
+
"update:sorting": (_sorting) => true,
|
|
307
|
+
"update:search": (_search) => true,
|
|
308
|
+
"update:filters": (_filters) => true,
|
|
309
|
+
"update:hiddenColumns": (_hiddenColumns) => true,
|
|
310
|
+
"update:selected": (_selected) => true,
|
|
311
|
+
"update:expanded": (_expanded) => true
|
|
312
|
+
};
|
|
313
|
+
const stateEmits = Object.keys(stateEmitValidators);
|
|
276
314
|
/** The state a parent controls through `v-model`, as a table state patch. */
|
|
277
315
|
function controlledState(props, current) {
|
|
278
316
|
return {
|
|
@@ -393,9 +431,10 @@ const VueyeGrid = defineComponent({
|
|
|
393
431
|
type: Boolean,
|
|
394
432
|
default: false
|
|
395
433
|
},
|
|
434
|
+
/** The grid's accessible name. Defaults to the messages' `spreadsheet`. */
|
|
396
435
|
label: {
|
|
397
436
|
type: String,
|
|
398
|
-
default:
|
|
437
|
+
default: void 0
|
|
399
438
|
},
|
|
400
439
|
/** Show undo, redo, and CSV export buttons. */
|
|
401
440
|
toolbar: {
|
|
@@ -405,7 +444,7 @@ const VueyeGrid = defineComponent({
|
|
|
405
444
|
},
|
|
406
445
|
emits: {
|
|
407
446
|
...editingEmits,
|
|
408
|
-
...
|
|
447
|
+
...stateEmitValidators,
|
|
409
448
|
"state-change": (_state) => true,
|
|
410
449
|
"update:data": (_data) => true,
|
|
411
450
|
edit: (_changes) => true,
|
|
@@ -415,6 +454,11 @@ const VueyeGrid = defineComponent({
|
|
|
415
454
|
collapse: (_item, _row) => true
|
|
416
455
|
},
|
|
417
456
|
setup(props, { emit, slots, expose, attrs }) {
|
|
457
|
+
const inherited = useTableLocale();
|
|
458
|
+
const locale = provideTableLocale(() => ({
|
|
459
|
+
locale: props.locale,
|
|
460
|
+
messages: props.messages
|
|
461
|
+
}));
|
|
418
462
|
const resolveColumns = createColumnResolver();
|
|
419
463
|
let previousColumns;
|
|
420
464
|
const columns = computed(() => {
|
|
@@ -448,6 +492,8 @@ const VueyeGrid = defineComponent({
|
|
|
448
492
|
rowCount: () => props.rowCount,
|
|
449
493
|
columns,
|
|
450
494
|
rowKey: props.rowKey,
|
|
495
|
+
locale: props.locale ?? inherited().locale,
|
|
496
|
+
normalizeText: props.normalizeText,
|
|
451
497
|
paginate: props.paginate ?? (props.source || props.loadMore ? false : props.virtual ? props.pagination : true),
|
|
452
498
|
selectionMode: "none",
|
|
453
499
|
initialState: { pagination: initialPagination },
|
|
@@ -503,22 +549,23 @@ const VueyeGrid = defineComponent({
|
|
|
503
549
|
"data-vt-theme": props.theme
|
|
504
550
|
}, [
|
|
505
551
|
props.toolbar || props.searchable || props.addRow ? h(VtToolbar, () => [
|
|
506
|
-
props.searchable ? h(VtSearch, { placeholder: props.searchPlaceholder }) : null,
|
|
507
|
-
props.addRow ? button(
|
|
552
|
+
props.searchable ? h(VtSearch, { placeholder: props.searchPlaceholder ?? locale().messages.searchPlaceholder }) : null,
|
|
553
|
+
props.addRow ? button(locale().messages.addRow, false, () => {
|
|
508
554
|
table.insertRows();
|
|
509
555
|
}) : null,
|
|
510
556
|
h("div", { class: "vt-toolbar-spacer" }),
|
|
511
557
|
props.toolbar ? [
|
|
512
|
-
button(
|
|
513
|
-
button(
|
|
514
|
-
button(
|
|
558
|
+
button(locale().messages.undo, !table.canUndo, () => table.undo()),
|
|
559
|
+
button(locale().messages.redo, !table.canRedo, () => table.redo()),
|
|
560
|
+
button(locale().messages.exportCsv, false, () => emit("export", table.exportRows()))
|
|
515
561
|
] : null
|
|
516
562
|
]) : null,
|
|
517
563
|
h(VtGrid, {
|
|
518
564
|
table,
|
|
519
|
-
label: props.label,
|
|
565
|
+
label: props.label ?? locale().messages.spreadsheet,
|
|
520
566
|
"aria-describedby": attrs["aria-describedby"],
|
|
521
567
|
rowNumbers: props.rowNumbers,
|
|
568
|
+
rowAttrs: props.rowAttrs,
|
|
522
569
|
rowActions: props.editable || props.removeRows,
|
|
523
570
|
removable: props.removeRows,
|
|
524
571
|
onSave: (result) => emit("save", result),
|
|
@@ -583,12 +630,12 @@ const VueyeTable = defineComponent({
|
|
|
583
630
|
/** Shown instead of the empty state while `loading` and there are no rows yet. */
|
|
584
631
|
loadingText: {
|
|
585
632
|
type: String,
|
|
586
|
-
default:
|
|
633
|
+
default: void 0
|
|
587
634
|
}
|
|
588
635
|
},
|
|
589
636
|
emits: {
|
|
590
637
|
...editingEmits,
|
|
591
|
-
...
|
|
638
|
+
...stateEmitValidators,
|
|
592
639
|
"state-change": (_state) => true,
|
|
593
640
|
"row-click": (_item, _row) => true,
|
|
594
641
|
expand: (_item, _row) => true,
|
|
@@ -596,6 +643,12 @@ const VueyeTable = defineComponent({
|
|
|
596
643
|
},
|
|
597
644
|
slots: Object,
|
|
598
645
|
setup(props, { emit, slots, expose, attrs }) {
|
|
646
|
+
const inherited = useTableLocale();
|
|
647
|
+
const locale = provideTableLocale(() => ({
|
|
648
|
+
locale: props.locale,
|
|
649
|
+
messages: props.messages
|
|
650
|
+
}));
|
|
651
|
+
const loadingText = () => props.loadingText ?? locale().messages.loading;
|
|
599
652
|
const selectionMode = computed(() => props.selectable === false ? "none" : props.selectable === "single" ? "single" : "multiple");
|
|
600
653
|
const initialPagination = {
|
|
601
654
|
page: props.page ?? 1,
|
|
@@ -612,6 +665,8 @@ const VueyeTable = defineComponent({
|
|
|
612
665
|
endThreshold: props.endThreshold,
|
|
613
666
|
columns: () => resolveColumns(props.columns, props.data),
|
|
614
667
|
rowKey: props.rowKey,
|
|
668
|
+
locale: props.locale ?? inherited().locale,
|
|
669
|
+
normalizeText: props.normalizeText,
|
|
615
670
|
manual: props.manual,
|
|
616
671
|
paginate: props.paginate ?? !(props.virtual || props.source || props.loadMore),
|
|
617
672
|
rowCount: () => props.rowCount,
|
|
@@ -672,7 +727,7 @@ const VueyeTable = defineComponent({
|
|
|
672
727
|
const width = () => table.columns.length + (selectable() ? 1 : 0) + (hasDetails() ? 1 : 0) + (hasActions() ? 1 : 0);
|
|
673
728
|
const emptyBody = () => {
|
|
674
729
|
if (table.rows.length === 0) {
|
|
675
|
-
const content = busy() ? slots.loading?.({}) ?? h(VtEmpty, { text:
|
|
730
|
+
const content = busy() ? slots.loading?.({}) ?? h(VtEmpty, { text: loadingText() }) : slots.empty?.({}) ?? h(VtEmpty, { text: table.loadingMode && table.loadState === "error" ? locale().messages.couldNotLoadRows : locale().messages.noMatchingRows });
|
|
676
731
|
return h("tr", { "data-empty": "" }, [h("td", { colspan: Math.max(1, width()) }, content)]);
|
|
677
732
|
}
|
|
678
733
|
return null;
|
|
@@ -704,30 +759,26 @@ const VueyeTable = defineComponent({
|
|
|
704
759
|
key: row.key,
|
|
705
760
|
row,
|
|
706
761
|
rowIndex,
|
|
762
|
+
attributes: rowAttributes(props.rowAttrs, row),
|
|
707
763
|
onClick: () => emit("row-click", row.original, row)
|
|
708
764
|
}, {
|
|
709
765
|
default: () => cells(row, rowIndex),
|
|
710
766
|
$stable: true
|
|
711
767
|
});
|
|
712
768
|
const headerSlots = () => {
|
|
713
|
-
const forwarded = {};
|
|
714
|
-
for (const column of table.columns) {
|
|
715
|
-
const slot = slots[`header.${column.id}`];
|
|
716
|
-
if (slot) forwarded[`header.${column.id}`] = () => slot({ column });
|
|
717
|
-
}
|
|
718
769
|
return {
|
|
719
|
-
|
|
770
|
+
header: (header) => slots[`header.${header.column.id}`]?.(header) ?? header.column.header,
|
|
720
771
|
before: () => [
|
|
721
772
|
hasActions() ? h("th", {
|
|
722
773
|
class: "vt-row-controls",
|
|
723
774
|
scope: "col",
|
|
724
775
|
"aria-colindex": 1
|
|
725
|
-
},
|
|
776
|
+
}, locale().messages.rowActions) : null,
|
|
726
777
|
hasDetails() ? h("th", {
|
|
727
778
|
class: "vt-expansion-cell",
|
|
728
779
|
scope: "col",
|
|
729
780
|
"aria-colindex": Number(hasActions()) + 1,
|
|
730
|
-
"aria-label":
|
|
781
|
+
"aria-label": locale().messages.details
|
|
731
782
|
}) : null,
|
|
732
783
|
selectable() ? h("th", {
|
|
733
784
|
class: "vt-selection-cell",
|
|
@@ -786,12 +837,12 @@ const VueyeTable = defineComponent({
|
|
|
786
837
|
style: props.maxHeight ? { "--vt-max-height": props.maxHeight } : void 0
|
|
787
838
|
}), [h("div", { class: "vt-root" }, [
|
|
788
839
|
props.searchable || props.columnToggle || slots.toolbar || props.addRow ? h(VtToolbar, () => [
|
|
789
|
-
props.searchable ? h(VtSearch, { placeholder: props.searchPlaceholder }) : null,
|
|
840
|
+
props.searchable ? h(VtSearch, { placeholder: props.searchPlaceholder ?? locale().messages.searchPlaceholder }) : null,
|
|
790
841
|
props.addRow ? h("button", {
|
|
791
842
|
type: "button",
|
|
792
843
|
class: "vt-button",
|
|
793
844
|
onClick: () => table.insertRows()
|
|
794
|
-
},
|
|
845
|
+
}, locale().messages.addRow) : null,
|
|
795
846
|
h("div", { class: "vt-toolbar-spacer" }),
|
|
796
847
|
slots.toolbar?.({ table }),
|
|
797
848
|
props.columnToggle ? h(VtColumnVisibility) : null
|
|
@@ -802,7 +853,7 @@ const VueyeTable = defineComponent({
|
|
|
802
853
|
}),
|
|
803
854
|
tableContent(),
|
|
804
855
|
props.pagination && (!props.virtual || table.paginate) || slots.footer || slots.status || table.tree || table.loadingMode ? h(VtToolbar, { class: "vt-footer" }, () => [
|
|
805
|
-
h(VtStatus, null, slots.status ? { default: (status) => slots.status?.(status) } : props.loading && table.rows.length === 0 ? { default: () =>
|
|
856
|
+
h(VtStatus, null, slots.status ? { default: (status) => slots.status?.(status) } : props.loading && table.rows.length === 0 ? { default: () => loadingText() } : void 0),
|
|
806
857
|
...table.loadingMode ? [h(VtLoadMore)] : [],
|
|
807
858
|
slots.footer?.({ table }),
|
|
808
859
|
props.pagination && table.paginate && (!props.virtual || table.paginate) ? h("div", { class: "vt-footer-controls" }, [h(VtPageSize, { options: props.pageSizeOptions }), h(VtPagination)]) : null
|
|
@@ -819,10 +870,20 @@ const VueyeTable = defineComponent({
|
|
|
819
870
|
|
|
820
871
|
//#endregion
|
|
821
872
|
//#region src/plugin.ts
|
|
822
|
-
/**
|
|
823
|
-
|
|
873
|
+
/**
|
|
874
|
+
* Register `<VueyeTable>` and `<VueyeGrid>` globally. A `locale` and `messages` given here are
|
|
875
|
+
* the default of every table in the application; a table's own props win over them.
|
|
876
|
+
*/
|
|
877
|
+
const VueyeTablePlugin = { install(app, options) {
|
|
824
878
|
app.component("VueyeTable", VueyeTable);
|
|
825
879
|
app.component("VueyeGrid", VueyeGrid);
|
|
880
|
+
if (options?.locale !== void 0 || options?.messages !== void 0) {
|
|
881
|
+
const language = {
|
|
882
|
+
locale: options.locale,
|
|
883
|
+
messages: options.messages
|
|
884
|
+
};
|
|
885
|
+
app.provide(tableLocaleKey, () => language);
|
|
886
|
+
}
|
|
826
887
|
} };
|
|
827
888
|
|
|
828
889
|
//#endregion
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/shared.ts","../src/vueye-grid.ts","../src/vueye-table.ts","../src/plugin.ts"],"sourcesContent":["import {\n inferColumns,\n type AnyColumnDef,\n type PaginationState,\n type RowKey,\n type SelectScope,\n type SortRule,\n type TableState,\n type TableStatePatch,\n type ExpandedState,\n type ExpandMode,\n type TreeOptions,\n type TableRow,\n type TableColumn,\n type TableOptions,\n type EditResult,\n type TableIssue,\n type CellChange,\n} from \"@vueye-table/core\";\nimport { virtualProps } from \"@vueye-table/headless\";\nimport { hierarchyProps } from \"@vueye-table/headless\";\nimport type { Density } from \"@vueye-table/styled\";\nimport type { TableSource, LoadMore } from \"@vueye-table/vue\";\nimport { defineComponent, type PropType, type VNodeChild } from \"vue\";\n\ninterface ContentProps {\n readonly item: unknown;\n readonly row: TableRow<unknown>;\n readonly column: TableColumn<unknown>;\n readonly value: unknown;\n readonly display: string;\n readonly editable: boolean;\n}\n/** Isolate application cell slots from unrelated table/grid navigation updates. */\nexport const CellContent = defineComponent({\n name: \"VueyeCellContent\",\n props: {\n row: { type: Object as PropType<TableRow<unknown>>, required: true },\n column: { type: Object as PropType<TableColumn<unknown>>, required: true },\n value: { type: null as unknown as PropType<unknown>, required: true },\n display: { type: String, required: true },\n editable: { type: Boolean, default: false },\n render: { type: Function as PropType<(props: ContentProps) => VNodeChild>, required: true },\n },\n setup(props) {\n return () =>\n props.render({\n item: props.row.original,\n row: props.row,\n column: props.column,\n value: props.value,\n display: props.display,\n editable: props.editable,\n });\n },\n});\n\n/** Props both full components share. */\nexport const commonProps = {\n validateRow: { type: Function as PropType<TableOptions<any>[\"validateRow\"]>, default: undefined },\n asyncValidation: {\n type: String as PropType<\"held\" | \"optimistic\" | undefined>,\n default: undefined,\n },\n createRow: { type: Function as PropType<(() => any) | undefined>, default: undefined },\n setParentKey: {\n type: Function as PropType<TableOptions<any>[\"setParentKey\"]>,\n default: undefined,\n },\n addRow: { type: Boolean, default: false },\n removeRows: { type: Boolean, default: false },\n ...virtualProps,\n ...hierarchyProps,\n rowCanExpand: {\n type: Function as PropType<((row: any) => boolean) | undefined>,\n default: undefined,\n },\n expandMode: { type: String as PropType<ExpandMode>, default: \"multiple\" },\n expanded: { type: [Boolean, Array] as PropType<ExpandedState | undefined>, default: undefined },\n getChildren: { type: Function as PropType<TreeOptions<any>[\"getChildren\"]>, default: undefined },\n setChildren: { type: Function as PropType<TreeOptions<any>[\"setChildren\"]>, default: undefined },\n getParentKey: {\n type: Function as PropType<TreeOptions<any>[\"getParentKey\"]>,\n default: undefined,\n },\n hasChildren: { type: Function as PropType<TreeOptions<any>[\"hasChildren\"]>, default: undefined },\n loadChildren: {\n type: Function as PropType<TreeOptions<any, AbortSignal>[\"loadChildren\"]>,\n default: undefined,\n },\n treeFilter: { type: String as PropType<TreeOptions<unknown>[\"treeFilter\"]>, default: undefined },\n paginateBy: { type: String as PropType<TreeOptions<unknown>[\"paginateBy\"]>, default: undefined },\n source: {\n type: [Object, Function] as PropType<TableSource<unknown> | undefined>,\n default: undefined,\n },\n loadMore: { type: Function as PropType<LoadMore<unknown> | undefined>, default: undefined },\n endThreshold: { type: Number, default: 5 },\n manual: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n rowCount: { type: Number as PropType<number | undefined>, default: undefined },\n /** Override the virtual default of no pagination; permits virtualizing a large page. */\n paginate: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n /** Column definitions. Without them, columns are inferred from the data. */\n columns: { type: Array as PropType<readonly AnyColumnDef[]>, default: undefined },\n /** A path into each row, or a function, giving its key. Defaults to `id`, then position. */\n rowKey: {\n type: [String, Function] as PropType<string | ((row: any, index: number) => RowKey)>,\n default: undefined,\n },\n caption: { type: String, default: undefined },\n loading: { type: Boolean, default: false },\n density: { type: String as PropType<Density>, default: \"comfortable\" },\n striped: { type: Boolean, default: false },\n bordered: { type: Boolean, default: false },\n hover: { type: Boolean, default: true },\n stickyHeader: { type: Boolean, default: false },\n theme: { type: String as PropType<\"light\" | \"dark\">, default: undefined },\n /** A CSS height that makes the body scroll, such as `\"24rem\"`. */\n maxHeight: { type: String, default: undefined },\n\n searchable: { type: Boolean, default: true },\n searchPlaceholder: { type: String, default: \"Search…\" },\n columnToggle: { type: Boolean, default: true },\n pagination: { type: Boolean, default: true },\n pageSizeOptions: { type: Array as PropType<readonly number[]>, default: () => [5, 10, 20, 50] },\n\n page: { type: Number, default: undefined },\n pageSize: { type: Number, default: undefined },\n sorting: { type: Array as PropType<readonly SortRule[]>, default: undefined },\n search: { type: String, default: undefined },\n filters: { type: Object as PropType<Readonly<Record<string, unknown>>>, default: undefined },\n hiddenColumns: { type: Array as PropType<readonly string[]>, default: undefined },\n selectScope: { type: String as PropType<SelectScope>, default: \"all\" },\n} as const;\n\nexport const editingEmits = {\n \"update:data\": (_data: readonly unknown[]) => true,\n edit: (_changes: readonly CellChange<unknown>[]) => true,\n save: (_result: EditResult<unknown>) => true,\n cancel: (_key: RowKey) => true,\n \"edit-issues\": (_issues: readonly TableIssue[]) => true,\n \"edit-error\": (_issues: readonly TableIssue[]) => true,\n};\n\nexport function editingOptions(\n props: Pick<\n TableOptions<unknown>,\n \"validateRow\" | \"asyncValidation\" | \"createRow\" | \"setParentKey\"\n >,\n): Pick<TableOptions<unknown>, \"validateRow\" | \"asyncValidation\" | \"createRow\" | \"setParentKey\"> {\n return {\n validateRow: props.validateRow,\n asyncValidation: props.asyncValidation,\n createRow: props.createRow,\n setParentKey: props.setParentKey,\n };\n}\n\nexport const stateEmits = [\n \"update:page\",\n \"update:pageSize\",\n \"update:sorting\",\n \"update:search\",\n \"update:filters\",\n \"update:hiddenColumns\",\n \"update:selected\",\n \"update:expanded\",\n] as const;\n\ninterface ControlledProps {\n readonly page: number | undefined;\n readonly pageSize: number | undefined;\n readonly sorting: readonly SortRule[] | undefined;\n readonly search: string | undefined;\n readonly filters: Readonly<Record<string, unknown>> | undefined;\n readonly hiddenColumns: readonly string[] | undefined;\n readonly selected?: readonly RowKey[] | undefined;\n readonly expanded?: ExpandedState | undefined;\n}\n\n/** The state a parent controls through `v-model`, as a table state patch. */\nexport function controlledState(props: ControlledProps, current: PaginationState): TableStatePatch {\n return {\n sorting: props.sorting,\n search: props.search,\n filters: props.filters,\n hiddenColumns: props.hiddenColumns,\n selection: props.selected,\n expanded: props.expanded,\n pagination:\n props.page !== undefined || props.pageSize !== undefined\n ? { page: props.page ?? current.page, pageSize: props.pageSize ?? current.pageSize }\n : undefined,\n };\n}\n\n/**\n * Emit a `v-model` update for each piece of state that changed. The state is frozen and replaced\n * piece by piece, so identity tells what changed.\n */\nexport function emitStateChanges(\n emit: (event: (typeof stateEmits)[number], value: unknown) => void,\n state: TableState,\n previous: TableState,\n): void {\n if (state.pagination.page !== previous.pagination.page) {\n emit(\"update:page\", state.pagination.page);\n }\n if (state.pagination.pageSize !== previous.pagination.pageSize) {\n emit(\"update:pageSize\", state.pagination.pageSize);\n }\n if (state.sorting !== previous.sorting) {\n emit(\"update:sorting\", state.sorting);\n }\n if (state.search !== previous.search) {\n emit(\"update:search\", state.search);\n }\n if (state.filters !== previous.filters) {\n emit(\"update:filters\", state.filters);\n }\n if (state.hiddenColumns !== previous.hiddenColumns) {\n emit(\"update:hiddenColumns\", state.hiddenColumns);\n }\n if (state.selection !== previous.selection) {\n emit(\"update:selected\", state.selection);\n }\n if (state.expanded !== previous.expanded) emit(\"update:expanded\", state.expanded);\n}\n\nexport function expansionOptions(\n props: {\n readonly rowCanExpand: ((row: any) => boolean) | undefined;\n readonly expandMode: ExpandMode;\n } & TreeOptions<unknown, AbortSignal>,\n detail: boolean,\n): Omit<TreeOptions<unknown, AbortSignal>, \"treeFilter\"> & {\n readonly treeFilter: () => TreeOptions<unknown>[\"treeFilter\"];\n readonly getRowCanExpand: ((row: unknown) => boolean) | undefined;\n readonly expandMode: ExpandMode;\n} {\n return {\n getRowCanExpand: props.rowCanExpand ?? (detail ? () => true : undefined),\n expandMode: props.expandMode,\n getChildren: props.getChildren,\n setChildren: props.setChildren,\n getParentKey: props.getParentKey,\n hasChildren: props.hasChildren,\n loadChildren: props.loadChildren,\n treeFilter: () => props.treeFilter,\n paginateBy: props.paginateBy,\n };\n}\n\nexport function emitExpansionChanges(\n emit: {\n (event: \"expand\", item: unknown, row: TableRow<unknown>): void;\n (event: \"collapse\", item: unknown, row: TableRow<unknown>): void;\n },\n state: TableState,\n previous: TableState,\n table:\n | {\n readonly processedRows: readonly TableRow<unknown>[];\n getRow(key: RowKey): TableRow<unknown> | undefined;\n }\n | undefined,\n): void {\n if (!table || state.expanded === previous.expanded) return;\n const keys = new Set([\n ...table.processedRows.map((row) => row.key),\n ...(state.expanded === true ? [] : state.expanded),\n ...(previous.expanded === true ? [] : previous.expanded),\n ]);\n for (const key of keys) {\n const before = previous.expanded === true || previous.expanded.includes(key);\n const after = state.expanded === true || state.expanded.includes(key);\n const row = table.getRow(key);\n if (row?.canExpand && before !== after) {\n if (after) emit(\"expand\", row.original, row);\n else emit(\"collapse\", row.original, row);\n }\n }\n}\n\n/**\n * The given columns, or columns inferred from the data. Inferred columns are reused while the\n * data keeps the same fields, so an edit that replaces the array does not rebuild every row.\n */\nexport function createColumnResolver(): (\n columns: readonly AnyColumnDef[] | undefined,\n data: readonly unknown[],\n) => readonly AnyColumnDef[] {\n let inferred:\n | { readonly signature: string; readonly columns: readonly AnyColumnDef[] }\n | undefined;\n return (columns, data) => {\n if (columns) {\n return columns;\n }\n const next = inferColumns(data);\n const signature = next.map((column) => column.id).join(\"\\u0000\");\n if (inferred?.signature !== signature) {\n inferred = { signature, columns: next };\n }\n return inferred.columns;\n };\n}\n","import type {\n CellChange,\n ColumnDef,\n TableIssue,\n TableState,\n TableRow,\n EditResult,\n} from \"@vueye-table/core\";\nimport type {\n GridCellSlotProps,\n TableStatusSlotProps,\n DetailSlotProps,\n CellEditorSlotProps,\n} from \"@vueye-table/headless\";\nimport {\n VtGrid,\n VtPageSize,\n VtPagination,\n VtSearch,\n VtStatus,\n VtLoadMore,\n VtToolbar,\n} from \"@vueye-table/styled\";\nimport { provideDataTable, useDataTable, type DataTableBinding } from \"@vueye-table/vue\";\nimport { computed, defineComponent, h, type PropType, type SlotsType, type VNode } from \"vue\";\n\nimport {\n commonProps,\n controlledState,\n createColumnResolver,\n emitStateChanges,\n stateEmits,\n expansionOptions,\n emitExpansionChanges,\n CellContent,\n editingOptions,\n editingEmits,\n} from \"./shared\";\n\n/**\n * An editable spreadsheet over an array. Cells are edited in place with the keyboard or a double\n * click, ranges are selected with Shift or by dragging, and copy, cut, paste, clear, undo, and\n * redo work like a spreadsheet application. Every edit produces a new array through\n * `update:data`; the array passed in is never mutated.\n */\nexport const VueyeGrid = defineComponent({\n name: \"VueyeGrid\",\n slots: Object as SlotsType<\n {\n [key: `cell.${string}`]: GridCellSlotProps & { readonly item: unknown };\n [key: `editor.${string}`]: CellEditorSlotProps;\n } & {\n default?: (props: Record<string, unknown>) => VNode[];\n status?: (props: TableStatusSlotProps) => VNode[];\n expanded?: (props: DetailSlotProps) => VNode[];\n }\n >,\n props: {\n data: { type: Array as PropType<readonly unknown[]>, default: () => [] },\n ...commonProps,\n searchable: { type: Boolean, default: false },\n columnToggle: { type: Boolean, default: false },\n /** Page the grid. By default every row is on one page. */\n pagination: { type: Boolean, default: false },\n /** Columns are editable unless their definition says otherwise. Set `false` to lock all. */\n editable: { type: Boolean, default: true },\n rowNumbers: { type: Boolean, default: true },\n columnLetters: { type: Boolean, default: false },\n label: { type: String, default: \"Spreadsheet\" },\n /** Show undo, redo, and CSV export buttons. */\n toolbar: { type: Boolean, default: true },\n },\n emits: {\n ...editingEmits,\n ...Object.fromEntries(stateEmits.map((name) => [name, null])),\n \"state-change\": (_state: TableState) => true,\n \"update:data\": (_data: readonly unknown[]) => true,\n edit: (_changes: readonly CellChange<unknown>[]) => true,\n \"edit-error\": (_issues: readonly TableIssue[]) => true,\n export: (_csv: string) => true,\n expand: (_item: unknown, _row: TableRow<unknown>) => true,\n collapse: (_item: unknown, _row: TableRow<unknown>) => true,\n } as { [K in (typeof stateEmits)[number]]: null } & typeof editingEmits & {\n \"state-change\": (state: TableState) => boolean;\n \"update:data\": (data: readonly unknown[]) => boolean;\n edit: (changes: readonly CellChange<unknown>[]) => boolean;\n \"edit-error\": (issues: readonly TableIssue[]) => boolean;\n export: (csv: string) => boolean;\n expand: (item: unknown, row: TableRow<unknown>) => boolean;\n collapse: (item: unknown, row: TableRow<unknown>) => boolean;\n },\n setup(props, { emit, slots, expose, attrs }) {\n const resolveColumns = createColumnResolver();\n let previousColumns:\n | { source: readonly unknown[]; editable: boolean; columns: readonly ColumnDef<unknown>[] }\n | undefined;\n const columns = computed(() => {\n const source = resolveColumns(props.columns, props.data);\n if (previousColumns?.source === source && previousColumns.editable === props.editable)\n return previousColumns.columns;\n const resolved = source.map(\n (column) =>\n ({\n ...column,\n editable: props.editable ? (column.editable ?? true) : false,\n }) as ColumnDef<unknown>,\n );\n previousColumns = { source, editable: props.editable, columns: resolved };\n return resolved;\n });\n const everyRow = (): number => Math.max(1, props.data.length);\n const initialPagination = {\n page: props.page ?? 1,\n pageSize: props.pagination ? (props.pageSize ?? props.pageSizeOptions[0] ?? 10) : everyRow(),\n };\n let binding: DataTableBinding<unknown> | undefined;\n const table = useDataTable<unknown>({\n ...expansionOptions(props, !!slots.expanded),\n ...editingOptions(props),\n data: () => props.data,\n source: computed(() => props.source),\n loadMore: computed(() => props.loadMore),\n endThreshold: props.endThreshold,\n manual: props.manual,\n rowCount: () => props.rowCount,\n columns,\n rowKey: props.rowKey as never,\n paginate:\n props.paginate ??\n (props.source || props.loadMore ? false : props.virtual ? props.pagination : true),\n selectionMode: \"none\",\n initialState: { pagination: initialPagination },\n state: () => {\n const controlled = controlledState(\n props,\n binding?.table.getState().pagination ?? initialPagination,\n );\n return {\n ...controlled,\n selection: undefined,\n pagination: props.pagination ? controlled.pagination : { page: 1, pageSize: everyRow() },\n };\n },\n onEditIssues(issues) {\n emit(\"edit-error\", issues);\n emit(\"edit-issues\", issues);\n },\n onDataChange(data, changes) {\n emit(\"update:data\", data);\n emit(\"edit\", changes);\n },\n onStateChange(state, previous) {\n emitStateChanges(emit as never, state, previous);\n emitExpansionChanges(emit, state, previous, binding?.table.getSnapshot());\n emit(\"state-change\", state);\n },\n });\n binding = table;\n provideDataTable(table);\n expose({ table });\n\n // `cell.<id>` slots also receive the row's data as `item`, as they do on `<VueyeTable>`.\n const gridSlots = (): Record<string, unknown> => {\n const forwarded: Record<string, unknown> = {};\n if (slots.expanded) forwarded[\"expanded\"] = slots.expanded;\n for (const [name, slot] of Object.entries(slots)) {\n if (name === \"default\" && slot) {\n forwarded[name] = slot;\n } else if (name.startsWith(\"cell.\")) {\n const cellSlot = slots[name as `cell.${string}`];\n forwarded[name] = (cellProps: GridCellSlotProps) =>\n cellSlot ? h(CellContent, { ...cellProps, render: cellSlot }) : cellProps.display;\n } else if (name.startsWith(\"editor.\")) {\n forwarded[name] = slot;\n }\n }\n return forwarded;\n };\n\n const button = (label: string, disabled: boolean, onClick: () => void) =>\n h(\"button\", { type: \"button\", class: \"vt-button\", disabled, onClick }, label);\n\n return () =>\n h(\"div\", { class: \"vt-theme vueye-grid\", \"data-vt-theme\": props.theme }, [\n props.toolbar || props.searchable || props.addRow\n ? h(VtToolbar, () => [\n props.searchable ? h(VtSearch, { placeholder: props.searchPlaceholder }) : null,\n props.addRow\n ? button(\"Add row\", false, () => {\n table.insertRows();\n })\n : null,\n h(\"div\", { class: \"vt-toolbar-spacer\" }),\n props.toolbar\n ? [\n button(\"Undo\", !table.canUndo, () => table.undo()),\n button(\"Redo\", !table.canRedo, () => table.redo()),\n button(\"Export CSV\", false, () => emit(\"export\", table.exportRows())),\n ]\n : null,\n ])\n : null,\n h(\n VtGrid,\n {\n table,\n label: props.label,\n \"aria-describedby\": attrs[\"aria-describedby\"],\n rowNumbers: props.rowNumbers,\n rowActions: props.editable || props.removeRows,\n removable: props.removeRows,\n onSave: (result: unknown) => emit(\"save\", result as EditResult<unknown>),\n onCancel: (key: unknown) => emit(\"cancel\", key as string | number),\n columnLetters: props.columnLetters,\n density: props.density,\n striped: props.striped,\n bordered: props.bordered,\n hover: false,\n stickyHeader: props.stickyHeader,\n loading:\n props.loading || table.loadState === \"loading\" || table.loadState === \"streaming\",\n theme: props.theme,\n virtual: props.virtual,\n virtualColumns: props.virtualColumns,\n height: props.height,\n rowHeight: props.rowHeight,\n overscan: props.overscan,\n columnWidth: props.columnWidth,\n treeColumn: props.treeColumn,\n keepAliveDetail: props.keepAliveDetail,\n ...(props.maxHeight ? { style: { \"--vt-max-height\": props.maxHeight } } : {}),\n },\n gridSlots(),\n ),\n props.pagination || table.loadingMode || slots.status || table.tree\n ? h(VtToolbar, { class: \"vt-footer\" }, () => [\n h(\n VtStatus,\n null,\n slots.status\n ? { default: (status: TableStatusSlotProps) => slots.status?.(status) }\n : undefined,\n ),\n ...(table.loadingMode ? [h(VtLoadMore)] : []),\n props.pagination && table.paginate\n ? h(\"div\", { class: \"vt-footer-controls\" }, [\n h(VtPageSize, { options: props.pageSizeOptions }),\n h(VtPagination),\n ])\n : null,\n ])\n : null,\n ]);\n },\n});\n","import type { ColumnDef, RowKey, TableRow, TableState, EditResult } from \"@vueye-table/core\";\nimport {\n DataTableBody,\n DataTableCaption,\n DataTableCell,\n DataTableRow,\n DataTableSelectAll,\n DataTableSelectRow,\n DataTableRoot,\n DataTableViewport,\n type TableStatusSlotProps,\n type DetailSlotProps,\n resolveTreeColumn,\n DataTableEditRoot,\n DataTableEditCell,\n type CellEditorSlotProps,\n} from \"@vueye-table/headless\";\nimport {\n VtColumnVisibility,\n VtEmpty,\n VtHeader,\n VtPageSize,\n VtPagination,\n VtSearch,\n VtStatus,\n VtLoadMore,\n VtToolbar,\n VtExpandToggle,\n VtTreeCell,\n VtRowActions,\n} from \"@vueye-table/styled\";\nimport { provideDataTable, useDataTable, type DataTableBinding } from \"@vueye-table/vue\";\nimport {\n computed,\n defineComponent,\n h,\n mergeProps,\n type PropType,\n type SlotsType,\n type VNodeChild,\n} from \"vue\";\n\nimport {\n commonProps,\n controlledState,\n createColumnResolver,\n emitStateChanges,\n stateEmits,\n expansionOptions,\n emitExpansionChanges,\n CellContent,\n editingEmits,\n editingOptions,\n} from \"./shared\";\n\n/** Slot props of `cell.<column id>` and `cell`. */\nexport interface CellSlotProps {\n readonly item: unknown;\n readonly row: TableRow<unknown>;\n readonly value: unknown;\n readonly display: string;\n readonly column: { readonly id: string; readonly header: string };\n}\n\n/** Slot props of `status`, the \"1–10 of 57 rows\" line. */\nexport type StatusSlotProps = TableStatusSlotProps;\n\n/**\n * A complete data table: search, column visibility, sorting, selection, pagination, a live\n * status line, loading and empty states, and theming. Every piece of state is available as a\n * `v-model`, and `manual` hands searching, sorting, and paging to a server.\n */\nexport const VueyeTable = defineComponent({\n name: \"VueyeTable\",\n inheritAttrs: false,\n props: {\n data: { type: Array as PropType<readonly unknown[]>, default: () => [] },\n ...commonProps,\n editMode: { type: String as PropType<\"cell\" | \"row\" | undefined>, default: undefined },\n /** `true` or `\"multiple\"` for checkboxes, `\"single\"` for one row at a time. */\n selectable: {\n type: [Boolean, String] as PropType<boolean | \"single\" | \"multiple\">,\n default: false,\n },\n selected: { type: Array as PropType<readonly RowKey[]>, default: undefined },\n /** The data is one page from a server; `rowCount` is the total. */\n /** Shown instead of the empty state while `loading` and there are no rows yet. */\n loadingText: { type: String, default: \"Loading…\" },\n },\n emits: {\n ...editingEmits,\n ...Object.fromEntries(stateEmits.map((name) => [name, null])),\n \"state-change\": (_state: TableState) => true,\n \"row-click\": (_item: unknown, _row: TableRow<unknown>) => true,\n expand: (_item: unknown, _row: TableRow<unknown>) => true,\n collapse: (_item: unknown, _row: TableRow<unknown>) => true,\n } as {\n [K in (typeof stateEmits)[number]]: null;\n } & typeof editingEmits & {\n \"state-change\": (state: TableState) => boolean;\n \"row-click\": (item: unknown, row: TableRow<unknown>) => boolean;\n expand: (item: unknown, row: TableRow<unknown>) => boolean;\n collapse: (item: unknown, row: TableRow<unknown>) => boolean;\n },\n slots: Object as SlotsType<\n {\n [key: `cell.${string}`]: CellSlotProps;\n [key: `editor.${string}`]: CellEditorSlotProps;\n [key: `header.${string}`]: { column: { id: string; header: string } };\n } & {\n toolbar: { table: unknown };\n empty: Record<string, never>;\n loading: Record<string, never>;\n footer: { table: unknown };\n status: StatusSlotProps;\n expanded: DetailSlotProps;\n }\n >,\n setup(props, { emit, slots, expose, attrs }) {\n const selectionMode = computed(() =>\n props.selectable === false ? \"none\" : props.selectable === \"single\" ? \"single\" : \"multiple\",\n );\n const initialPagination = {\n page: props.page ?? 1,\n pageSize: props.pageSize ?? props.pageSizeOptions[0] ?? 10,\n };\n const resolveColumns = createColumnResolver();\n let binding: DataTableBinding<unknown> | undefined;\n const table = useDataTable<unknown>({\n ...expansionOptions(props, !!slots.expanded),\n ...editingOptions(props),\n data: () => props.data,\n source: computed(() => props.source),\n loadMore: computed(() => props.loadMore),\n endThreshold: props.endThreshold,\n columns: () => resolveColumns(props.columns, props.data) as readonly ColumnDef<unknown>[],\n rowKey: props.rowKey as never,\n manual: props.manual,\n paginate: props.paginate ?? !(props.virtual || props.source || props.loadMore),\n rowCount: () => props.rowCount,\n selectionMode: selectionMode.value,\n selectScope: props.selectScope,\n initialState: { pagination: initialPagination },\n onDataChange(data, changes) {\n emit(\"update:data\", data);\n emit(\"edit\", changes);\n },\n onEditIssues(issues) {\n emit(\"edit-issues\", issues);\n emit(\"edit-error\", issues);\n },\n state: () =>\n controlledState(props, binding?.table.getState().pagination ?? initialPagination),\n onStateChange(state, previous) {\n emitStateChanges(emit as never, state, previous);\n emitExpansionChanges(emit, state, previous, binding?.table.getSnapshot());\n emit(\"state-change\", state);\n },\n });\n binding = table;\n provideDataTable(table);\n expose({ table });\n const busy = (): boolean =>\n props.loading || table.loadState === \"loading\" || table.loadState === \"streaming\";\n\n const selectable = (): boolean => selectionMode.value !== \"none\";\n\n const cell = (\n row: TableRow<unknown>,\n column: (typeof table.columns)[number],\n rowIndex: number,\n ): VNodeChild => {\n const slot = slots[`cell.${column.id}`];\n const treeCell = table.tree && column.id === resolveTreeColumn(table, props.treeColumn);\n return h(\n props.editMode ? DataTableEditCell : DataTableCell,\n {\n key: column.id,\n row,\n column,\n tree: false,\n ...(props.editMode\n ? {\n rowIndex,\n onSave: (result: EditResult<unknown>) => emit(\"save\", result),\n onCancel: (key: RowKey) => emit(\"cancel\", key),\n }\n : {}),\n },\n {\n editor: slots[`editor.${column.id}`],\n default: ({ value, display }: { value: unknown; display: string }) => {\n const content = () =>\n slot ? h(CellContent, { row, column, value, display, render: slot }) : display;\n return treeCell ? h(VtTreeCell, { row }, { default: content }) : content();\n },\n $stable: true,\n },\n );\n };\n\n const hasDetails = (): boolean => !!slots.expanded && !table.tree;\n const hasActions = (): boolean => !!props.editMode || props.removeRows;\n const leadingColumns = (): number =>\n Number(hasActions()) + Number(hasDetails()) + Number(selectable());\n const width = (): number =>\n table.columns.length +\n (selectable() ? 1 : 0) +\n (hasDetails() ? 1 : 0) +\n (hasActions() ? 1 : 0);\n const emptyBody = (): VNodeChild => {\n if (table.rows.length === 0) {\n // While the first page is loading there is nothing to match yet, so say that instead.\n const content = busy()\n ? (slots.loading?.({}) ?? h(VtEmpty, { text: props.loadingText }))\n : (slots.empty?.({}) ??\n h(VtEmpty, {\n text:\n table.loadingMode && table.loadState === \"error\"\n ? \"Could not load rows.\"\n : \"No matching rows\",\n }));\n return h(\"tr\", { \"data-empty\": \"\" }, [h(\"td\", { colspan: Math.max(1, width()) }, content)]);\n }\n return null;\n };\n const cells = (row: TableRow<unknown>, rowIndex: number): VNodeChild[] => {\n const result = [\n hasActions()\n ? h(\n \"td\",\n {\n class: \"vt-row-controls\",\n \"aria-colindex\": 1,\n onClick: (event: Event) => event.stopPropagation(),\n },\n [\n h(VtRowActions, {\n row,\n editable: props.editMode === \"row\",\n removable: props.removeRows,\n }),\n ],\n )\n : null,\n hasDetails()\n ? h(\"td\", { class: \"vt-expansion-cell\", \"aria-colindex\": Number(hasActions()) + 1 }, [\n h(VtExpandToggle, { row }),\n ])\n : null,\n selectable()\n ? h(\n \"td\",\n {\n class: \"vt-selection-cell\",\n \"aria-colindex\": Number(hasActions()) + Number(hasDetails()) + 1,\n onClick: (event: Event) => event.stopPropagation(),\n },\n [h(DataTableSelectRow, { row })],\n )\n : null,\n ...table.columns.map((column) => cell(row, column, rowIndex)),\n ];\n return result;\n };\n const bodyRow = ({ row, rowIndex }: DetailSlotProps): VNodeChild =>\n h(\n DataTableRow,\n { key: row.key, row, rowIndex, onClick: () => emit(\"row-click\", row.original, row) },\n { default: () => cells(row, rowIndex), $stable: true },\n );\n\n const headerSlots = () => {\n const forwarded: Record<string, unknown> = {};\n for (const column of table.columns) {\n const slot = slots[`header.${column.id}`];\n if (slot) {\n forwarded[`header.${column.id}`] = () => slot({ column });\n }\n }\n return {\n ...forwarded,\n before: () => [\n hasActions()\n ? h(\"th\", { class: \"vt-row-controls\", scope: \"col\", \"aria-colindex\": 1 }, \"Row actions\")\n : null,\n hasDetails()\n ? h(\"th\", {\n class: \"vt-expansion-cell\",\n scope: \"col\",\n \"aria-colindex\": Number(hasActions()) + 1,\n \"aria-label\": \"Details\",\n })\n : null,\n selectable()\n ? h(\n \"th\",\n {\n class: \"vt-selection-cell\",\n scope: \"col\",\n \"aria-colindex\": Number(hasActions()) + Number(hasDetails()) + 1,\n },\n selectionMode.value === \"multiple\" ? [h(DataTableSelectAll)] : [],\n )\n : null,\n ],\n };\n };\n\n const tableContent = (): VNodeChild => {\n const children = () => [\n props.caption ? h(DataTableCaption, () => props.caption) : null,\n h(VtHeader, null, headerSlots()),\n h(\n DataTableBody,\n { class: \"vt-body\", colspan: width() },\n {\n ...(table.rows.length === 0 ? { default: emptyBody } : {}),\n row: bodyRow,\n detail: slots.expanded\n ? (detail: DetailSlotProps) => slots.expanded?.(detail)\n : undefined,\n },\n ),\n ];\n return props.virtual\n ? h(\n DataTableViewport,\n {\n class: \"vt-scroll\",\n height: props.height ?? \"24rem\",\n style: { \"--vt-row-height\": `${props.rowHeight}px` },\n },\n {\n default: () =>\n h(\n DataTableRoot,\n {\n table,\n class: \"vt-table\",\n leadingColumns: leadingColumns(),\n virtual: props.virtual,\n rowHeight: props.rowHeight,\n overscan: props.overscan,\n treeColumn: props.treeColumn,\n keepAliveDetail: props.keepAliveDetail,\n },\n children,\n ),\n },\n )\n : h(\"div\", { class: \"vt-scroll\" }, [\n h(\n DataTableRoot,\n {\n table,\n treeColumn: props.treeColumn,\n keepAliveDetail: props.keepAliveDetail,\n class: \"vt-table\",\n leadingColumns: leadingColumns(),\n \"aria-busy\": busy() ? \"true\" : undefined,\n },\n children,\n ),\n ]);\n };\n\n const surface = () =>\n h(\n \"div\",\n mergeProps(attrs, {\n class: \"vt-surface vueye-table\",\n \"data-density\": props.density,\n \"data-striped\": props.striped ? \"\" : undefined,\n \"data-bordered\": props.bordered ? \"\" : undefined,\n \"data-hover\": props.hover ? \"\" : undefined,\n \"data-sticky-header\": props.stickyHeader || props.virtual ? \"\" : undefined,\n \"data-virtual\": props.virtual ? \"\" : undefined,\n \"data-loading\": busy() ? \"\" : undefined,\n \"data-vt-theme\": props.theme,\n \"aria-busy\": props.loading ? \"true\" : undefined,\n style: props.maxHeight ? { \"--vt-max-height\": props.maxHeight } : undefined,\n }),\n [\n h(\"div\", { class: \"vt-root\" }, [\n props.searchable || props.columnToggle || slots.toolbar || props.addRow\n ? h(VtToolbar, () => [\n props.searchable ? h(VtSearch, { placeholder: props.searchPlaceholder }) : null,\n props.addRow\n ? h(\n \"button\",\n { type: \"button\", class: \"vt-button\", onClick: () => table.insertRows() },\n \"Add row\",\n )\n : null,\n h(\"div\", { class: \"vt-toolbar-spacer\" }),\n slots.toolbar?.({ table }),\n props.columnToggle ? h(VtColumnVisibility) : null,\n ])\n : null,\n h(\"div\", { class: \"vt-progress\", role: \"presentation\" }),\n tableContent(),\n (props.pagination && (!props.virtual || table.paginate)) ||\n slots.footer ||\n slots.status ||\n table.tree ||\n table.loadingMode\n ? h(VtToolbar, { class: \"vt-footer\" }, () => [\n h(\n VtStatus,\n null,\n slots.status\n ? { default: (status: StatusSlotProps) => slots.status?.(status) }\n : props.loading && table.rows.length === 0\n ? { default: () => props.loadingText }\n : undefined,\n ),\n ...(table.loadingMode ? [h(VtLoadMore)] : []),\n slots.footer?.({ table }),\n props.pagination && table.paginate && (!props.virtual || table.paginate)\n ? h(\"div\", { class: \"vt-footer-controls\" }, [\n h(VtPageSize, { options: props.pageSizeOptions }),\n h(VtPagination),\n ])\n : null,\n ])\n : null,\n ]),\n ],\n );\n return () =>\n props.editMode\n ? h(\n DataTableEditRoot,\n {\n table,\n mode: props.editMode,\n onSave: (result) => emit(\"save\", result),\n onCancel: (key) => emit(\"cancel\", key),\n },\n surface,\n )\n : surface();\n },\n});\n","import type { App, Plugin } from \"vue\";\n\nimport { VueyeGrid } from \"./vueye-grid\";\nimport { VueyeTable } from \"./vueye-table\";\n\n/** Register `<VueyeTable>` and `<VueyeGrid>` globally. */\nexport const VueyeTablePlugin: Plugin = {\n install(app: App): void {\n app.component(\"VueyeTable\", VueyeTable);\n app.component(\"VueyeGrid\", VueyeGrid);\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/shared.ts","../src/vueye-grid.ts","../src/vueye-table.ts","../src/plugin.ts"],"sourcesContent":["import {\n inferColumns,\n type AnyColumnDef,\n type PaginationState,\n type RowKey,\n type SelectScope,\n type SortRule,\n type TableState,\n type TableStatePatch,\n type ExpandedState,\n type ExpandMode,\n type TreeOptions,\n type TableRow,\n type TableColumn,\n type TableOptions,\n type EditResult,\n type TableIssue,\n type CellChange,\n type TableMessages,\n type TextNormalizer,\n} from \"@vueye-table/core\";\nimport { virtualProps } from \"@vueye-table/headless\";\nimport { hierarchyProps, type AnyRowAttrs } from \"@vueye-table/headless\";\nimport type { Density } from \"@vueye-table/styled\";\nimport type { TableSource, LoadMore } from \"@vueye-table/vue\";\nimport { defineComponent, type PropType, type VNodeChild } from \"vue\";\n\ninterface ContentProps {\n readonly item: unknown;\n readonly row: TableRow<unknown>;\n readonly column: TableColumn<unknown>;\n readonly value: unknown;\n readonly display: string;\n readonly editable: boolean;\n}\n/** Isolate application cell slots from unrelated table/grid navigation updates. */\nexport const CellContent = defineComponent({\n name: \"VueyeCellContent\",\n props: {\n row: { type: Object as PropType<TableRow<unknown>>, required: true },\n column: { type: Object as PropType<TableColumn<unknown>>, required: true },\n value: { type: null as unknown as PropType<unknown>, required: true },\n display: { type: String, required: true },\n editable: { type: Boolean, default: false },\n render: { type: Function as PropType<(props: ContentProps) => VNodeChild>, required: true },\n },\n setup(props) {\n return () =>\n props.render({\n item: props.row.original,\n row: props.row,\n column: props.column,\n value: props.value,\n display: props.display,\n editable: props.editable,\n });\n },\n});\n\n/** Props both full components share. */\nexport const commonProps = {\n /**\n * `(item, row) => attributes`: a class, a style, and `data-*` and `aria-*` attributes for each\n * body row, read on every render. The row's own attributes win, and handlers are left out.\n */\n rowAttrs: { type: Function as PropType<AnyRowAttrs | undefined>, default: undefined },\n validateRow: { type: Function as PropType<TableOptions<any>[\"validateRow\"]>, default: undefined },\n asyncValidation: {\n type: String as PropType<\"held\" | \"optimistic\" | undefined>,\n default: undefined,\n },\n createRow: { type: Function as PropType<(() => any) | undefined>, default: undefined },\n setParentKey: {\n type: Function as PropType<TableOptions<any>[\"setParentKey\"]>,\n default: undefined,\n },\n addRow: { type: Boolean, default: false },\n removeRows: { type: Boolean, default: false },\n ...virtualProps,\n ...hierarchyProps,\n rowCanExpand: {\n type: Function as PropType<((row: any) => boolean) | undefined>,\n default: undefined,\n },\n expandMode: { type: String as PropType<ExpandMode>, default: \"multiple\" },\n expanded: { type: [Boolean, Array] as PropType<ExpandedState | undefined>, default: undefined },\n getChildren: { type: Function as PropType<TreeOptions<any>[\"getChildren\"]>, default: undefined },\n setChildren: { type: Function as PropType<TreeOptions<any>[\"setChildren\"]>, default: undefined },\n getParentKey: {\n type: Function as PropType<TreeOptions<any>[\"getParentKey\"]>,\n default: undefined,\n },\n hasChildren: { type: Function as PropType<TreeOptions<any>[\"hasChildren\"]>, default: undefined },\n loadChildren: {\n type: Function as PropType<TreeOptions<any, AbortSignal>[\"loadChildren\"]>,\n default: undefined,\n },\n treeFilter: { type: String as PropType<TreeOptions<unknown>[\"treeFilter\"]>, default: undefined },\n paginateBy: { type: String as PropType<TreeOptions<unknown>[\"paginateBy\"]>, default: undefined },\n source: {\n type: [Object, Function] as PropType<TableSource<unknown> | undefined>,\n default: undefined,\n },\n loadMore: { type: Function as PropType<LoadMore<unknown> | undefined>, default: undefined },\n endThreshold: { type: Number, default: 5 },\n manual: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n rowCount: { type: Number as PropType<number | undefined>, default: undefined },\n /** Override the virtual default of no pagination; permits virtualizing a large page. */\n paginate: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n /** Column definitions. Without them, columns are inferred from the data. */\n columns: { type: Array as PropType<readonly AnyColumnDef[]>, default: undefined },\n /** A path into each row, or a function, giving its key. Defaults to `id`, then position. */\n rowKey: {\n type: [String, Function] as PropType<string | ((row: any, index: number) => RowKey)>,\n default: undefined,\n },\n caption: { type: String, default: undefined },\n loading: { type: Boolean, default: false },\n density: { type: String as PropType<Density>, default: \"comfortable\" },\n striped: { type: Boolean, default: false },\n bordered: { type: Boolean, default: false },\n hover: { type: Boolean, default: true },\n stickyHeader: { type: Boolean, default: false },\n /**\n * `\"light\"` or `\"dark\"` forces a palette; by default the table follows `prefers-color-scheme`.\n * `\"inherit\"` uses no built-in palette: the host declares the `--vt-*` tokens on an ancestor,\n * in its own light and dark themes.\n */\n theme: { type: String as PropType<\"light\" | \"dark\" | \"inherit\">, default: undefined },\n /**\n * The BCP 47 locale numbers are written and text is ordered in, such as `\"fr\"` or `\"ar-DZ\"`.\n * Defaults to the plugin's, then the runtime's. Ordering reads it once, when the table is\n * created; give the table a new `key` to change it.\n */\n locale: { type: String as PropType<string | undefined>, default: undefined },\n /** The host's words for what the table shows and announces, over the plugin's and English. */\n messages: { type: Object as PropType<Partial<TableMessages> | undefined>, default: undefined },\n /**\n * How search and text filters read text. Defaults to `foldText`: case, accents and Arabic\n * letter shapes ignored. Read once, when the table is created.\n */\n normalizeText: { type: Function as PropType<TextNormalizer | undefined>, default: undefined },\n /** A CSS height that makes the body scroll, such as `\"24rem\"`. */\n maxHeight: { type: String, default: undefined },\n\n searchable: { type: Boolean, default: true },\n /** Defaults to the messages' `searchPlaceholder`. */\n searchPlaceholder: { type: String as PropType<string | undefined>, default: undefined },\n columnToggle: { type: Boolean, default: true },\n pagination: { type: Boolean, default: true },\n pageSizeOptions: { type: Array as PropType<readonly number[]>, default: () => [5, 10, 20, 50] },\n\n page: { type: Number, default: undefined },\n pageSize: { type: Number, default: undefined },\n sorting: { type: Array as PropType<readonly SortRule[]>, default: undefined },\n search: { type: String, default: undefined },\n filters: { type: Object as PropType<Readonly<Record<string, unknown>>>, default: undefined },\n hiddenColumns: { type: Array as PropType<readonly string[]>, default: undefined },\n selectScope: { type: String as PropType<SelectScope>, default: \"all\" },\n} as const;\n\nexport const editingEmits = {\n \"update:data\": (_data: readonly unknown[]) => true,\n edit: (_changes: readonly CellChange<unknown>[]) => true,\n save: (_result: EditResult<unknown>) => true,\n cancel: (_key: RowKey) => true,\n \"edit-issues\": (_issues: readonly TableIssue[]) => true,\n \"edit-error\": (_issues: readonly TableIssue[]) => true,\n};\n\nexport function editingOptions(\n props: Pick<\n TableOptions<unknown>,\n \"validateRow\" | \"asyncValidation\" | \"createRow\" | \"setParentKey\"\n >,\n): Pick<TableOptions<unknown>, \"validateRow\" | \"asyncValidation\" | \"createRow\" | \"setParentKey\"> {\n return {\n validateRow: props.validateRow,\n asyncValidation: props.asyncValidation,\n createRow: props.createRow,\n setParentKey: props.setParentKey,\n };\n}\n\n/** The `v-model` events of table state, typed by the value each carries. */\nexport const stateEmitValidators = {\n \"update:page\": (_page: number) => true,\n \"update:pageSize\": (_pageSize: number) => true,\n \"update:sorting\": (_sorting: readonly SortRule[]) => true,\n \"update:search\": (_search: string) => true,\n \"update:filters\": (_filters: Readonly<Record<string, unknown>>) => true,\n \"update:hiddenColumns\": (_hiddenColumns: readonly string[]) => true,\n \"update:selected\": (_selected: readonly RowKey[]) => true,\n \"update:expanded\": (_expanded: ExpandedState) => true,\n};\n\nexport const stateEmits = Object.keys(\n stateEmitValidators,\n) as readonly (keyof typeof stateEmitValidators)[];\n\ninterface ControlledProps {\n readonly page: number | undefined;\n readonly pageSize: number | undefined;\n readonly sorting: readonly SortRule[] | undefined;\n readonly search: string | undefined;\n readonly filters: Readonly<Record<string, unknown>> | undefined;\n readonly hiddenColumns: readonly string[] | undefined;\n readonly selected?: readonly RowKey[] | undefined;\n readonly expanded?: ExpandedState | undefined;\n}\n\n/** The state a parent controls through `v-model`, as a table state patch. */\nexport function controlledState(props: ControlledProps, current: PaginationState): TableStatePatch {\n return {\n sorting: props.sorting,\n search: props.search,\n filters: props.filters,\n hiddenColumns: props.hiddenColumns,\n selection: props.selected,\n expanded: props.expanded,\n pagination:\n props.page !== undefined || props.pageSize !== undefined\n ? { page: props.page ?? current.page, pageSize: props.pageSize ?? current.pageSize }\n : undefined,\n };\n}\n\n/**\n * Emit a `v-model` update for each piece of state that changed. The state is frozen and replaced\n * piece by piece, so identity tells what changed.\n */\nexport function emitStateChanges(\n emit: (event: (typeof stateEmits)[number], value: unknown) => void,\n state: TableState,\n previous: TableState,\n): void {\n if (state.pagination.page !== previous.pagination.page) {\n emit(\"update:page\", state.pagination.page);\n }\n if (state.pagination.pageSize !== previous.pagination.pageSize) {\n emit(\"update:pageSize\", state.pagination.pageSize);\n }\n if (state.sorting !== previous.sorting) {\n emit(\"update:sorting\", state.sorting);\n }\n if (state.search !== previous.search) {\n emit(\"update:search\", state.search);\n }\n if (state.filters !== previous.filters) {\n emit(\"update:filters\", state.filters);\n }\n if (state.hiddenColumns !== previous.hiddenColumns) {\n emit(\"update:hiddenColumns\", state.hiddenColumns);\n }\n if (state.selection !== previous.selection) {\n emit(\"update:selected\", state.selection);\n }\n if (state.expanded !== previous.expanded) emit(\"update:expanded\", state.expanded);\n}\n\nexport function expansionOptions(\n props: {\n readonly rowCanExpand: ((row: any) => boolean) | undefined;\n readonly expandMode: ExpandMode;\n } & TreeOptions<unknown, AbortSignal>,\n detail: boolean,\n): Omit<TreeOptions<unknown, AbortSignal>, \"treeFilter\"> & {\n readonly treeFilter: () => TreeOptions<unknown>[\"treeFilter\"];\n readonly getRowCanExpand: ((row: unknown) => boolean) | undefined;\n readonly expandMode: ExpandMode;\n} {\n return {\n getRowCanExpand: props.rowCanExpand ?? (detail ? () => true : undefined),\n expandMode: props.expandMode,\n getChildren: props.getChildren,\n setChildren: props.setChildren,\n getParentKey: props.getParentKey,\n hasChildren: props.hasChildren,\n loadChildren: props.loadChildren,\n treeFilter: () => props.treeFilter,\n paginateBy: props.paginateBy,\n };\n}\n\nexport function emitExpansionChanges(\n emit: {\n (event: \"expand\", item: unknown, row: TableRow<unknown>): void;\n (event: \"collapse\", item: unknown, row: TableRow<unknown>): void;\n },\n state: TableState,\n previous: TableState,\n table:\n | {\n readonly processedRows: readonly TableRow<unknown>[];\n getRow(key: RowKey): TableRow<unknown> | undefined;\n }\n | undefined,\n): void {\n if (!table || state.expanded === previous.expanded) return;\n const keys = new Set([\n ...table.processedRows.map((row) => row.key),\n ...(state.expanded === true ? [] : state.expanded),\n ...(previous.expanded === true ? [] : previous.expanded),\n ]);\n for (const key of keys) {\n const before = previous.expanded === true || previous.expanded.includes(key);\n const after = state.expanded === true || state.expanded.includes(key);\n const row = table.getRow(key);\n if (row?.canExpand && before !== after) {\n if (after) emit(\"expand\", row.original, row);\n else emit(\"collapse\", row.original, row);\n }\n }\n}\n\n/**\n * The given columns, or columns inferred from the data. Inferred columns are reused while the\n * data keeps the same fields, so an edit that replaces the array does not rebuild every row.\n */\nexport function createColumnResolver(): (\n columns: readonly AnyColumnDef[] | undefined,\n data: readonly unknown[],\n) => readonly AnyColumnDef[] {\n let inferred:\n | { readonly signature: string; readonly columns: readonly AnyColumnDef[] }\n | undefined;\n return (columns, data) => {\n if (columns) {\n return columns;\n }\n const next = inferColumns(data);\n const signature = next.map((column) => column.id).join(\"\\u0000\");\n if (inferred?.signature !== signature) {\n inferred = { signature, columns: next };\n }\n return inferred.columns;\n };\n}\n","import type {\n CellChange,\n ColumnDef,\n TableIssue,\n TableState,\n TableRow,\n EditResult,\n} from \"@vueye-table/core\";\nimport type {\n GridCellSlotProps,\n TableStatusSlotProps,\n DetailSlotProps,\n CellEditorSlotProps,\n} from \"@vueye-table/headless\";\nimport {\n VtGrid,\n VtPageSize,\n VtPagination,\n VtSearch,\n VtStatus,\n VtLoadMore,\n VtToolbar,\n} from \"@vueye-table/styled\";\nimport {\n provideDataTable,\n provideTableLocale,\n useDataTable,\n useTableLocale,\n type DataTableBinding,\n} from \"@vueye-table/vue\";\nimport { computed, defineComponent, h, type PropType, type SlotsType, type VNode } from \"vue\";\n\nimport {\n commonProps,\n controlledState,\n createColumnResolver,\n emitStateChanges,\n stateEmitValidators,\n expansionOptions,\n emitExpansionChanges,\n CellContent,\n editingOptions,\n editingEmits,\n} from \"./shared\";\n\n/**\n * An editable spreadsheet over an array. Cells are edited in place with the keyboard or a double\n * click, ranges are selected with Shift or by dragging, and copy, cut, paste, clear, undo, and\n * redo work like a spreadsheet application. Every edit produces a new array through\n * `update:data`; the array passed in is never mutated.\n */\nexport const VueyeGrid = defineComponent({\n name: \"VueyeGrid\",\n slots: Object as SlotsType<\n {\n [key: `cell.${string}`]: GridCellSlotProps & { readonly item: unknown };\n [key: `editor.${string}`]: CellEditorSlotProps;\n } & {\n default?: (props: Record<string, unknown>) => VNode[];\n status?: (props: TableStatusSlotProps) => VNode[];\n expanded?: (props: DetailSlotProps) => VNode[];\n }\n >,\n props: {\n data: { type: Array as PropType<readonly unknown[]>, default: () => [] },\n ...commonProps,\n searchable: { type: Boolean, default: false },\n columnToggle: { type: Boolean, default: false },\n /** Page the grid. By default every row is on one page. */\n pagination: { type: Boolean, default: false },\n /** Columns are editable unless their definition says otherwise. Set `false` to lock all. */\n editable: { type: Boolean, default: true },\n rowNumbers: { type: Boolean, default: true },\n columnLetters: { type: Boolean, default: false },\n /** The grid's accessible name. Defaults to the messages' `spreadsheet`. */\n label: { type: String as PropType<string | undefined>, default: undefined },\n /** Show undo, redo, and CSV export buttons. */\n toolbar: { type: Boolean, default: true },\n },\n emits: {\n ...editingEmits,\n ...stateEmitValidators,\n \"state-change\": (_state: TableState) => true,\n \"update:data\": (_data: readonly unknown[]) => true,\n edit: (_changes: readonly CellChange<unknown>[]) => true,\n \"edit-error\": (_issues: readonly TableIssue[]) => true,\n export: (_csv: string) => true,\n expand: (_item: unknown, _row: TableRow<unknown>) => true,\n collapse: (_item: unknown, _row: TableRow<unknown>) => true,\n },\n setup(props, { emit, slots, expose, attrs }) {\n const inherited = useTableLocale();\n const locale = provideTableLocale(() => ({ locale: props.locale, messages: props.messages }));\n const resolveColumns = createColumnResolver();\n let previousColumns:\n | { source: readonly unknown[]; editable: boolean; columns: readonly ColumnDef<unknown>[] }\n | undefined;\n const columns = computed(() => {\n const source = resolveColumns(props.columns, props.data);\n if (previousColumns?.source === source && previousColumns.editable === props.editable)\n return previousColumns.columns;\n const resolved = source.map(\n (column) =>\n ({\n ...column,\n editable: props.editable ? (column.editable ?? true) : false,\n }) as ColumnDef<unknown>,\n );\n previousColumns = { source, editable: props.editable, columns: resolved };\n return resolved;\n });\n const everyRow = (): number => Math.max(1, props.data.length);\n const initialPagination = {\n page: props.page ?? 1,\n pageSize: props.pagination ? (props.pageSize ?? props.pageSizeOptions[0] ?? 10) : everyRow(),\n };\n let binding: DataTableBinding<unknown> | undefined;\n const table = useDataTable<unknown>({\n ...expansionOptions(props, !!slots.expanded),\n ...editingOptions(props),\n data: () => props.data,\n source: computed(() => props.source),\n loadMore: computed(() => props.loadMore),\n endThreshold: props.endThreshold,\n manual: props.manual,\n rowCount: () => props.rowCount,\n columns,\n rowKey: props.rowKey as never,\n locale: props.locale ?? inherited().locale,\n normalizeText: props.normalizeText,\n paginate:\n props.paginate ??\n (props.source || props.loadMore ? false : props.virtual ? props.pagination : true),\n selectionMode: \"none\",\n initialState: { pagination: initialPagination },\n state: () => {\n const controlled = controlledState(\n props,\n binding?.table.getState().pagination ?? initialPagination,\n );\n return {\n ...controlled,\n selection: undefined,\n pagination: props.pagination ? controlled.pagination : { page: 1, pageSize: everyRow() },\n };\n },\n onEditIssues(issues) {\n emit(\"edit-error\", issues);\n emit(\"edit-issues\", issues);\n },\n onDataChange(data, changes) {\n emit(\"update:data\", data);\n emit(\"edit\", changes);\n },\n onStateChange(state, previous) {\n emitStateChanges(emit as never, state, previous);\n emitExpansionChanges(emit, state, previous, binding?.table.getSnapshot());\n emit(\"state-change\", state);\n },\n });\n binding = table;\n provideDataTable(table);\n expose({ table });\n\n // `cell.<id>` slots also receive the row's data as `item`, as they do on `<VueyeTable>`.\n const gridSlots = (): Record<string, unknown> => {\n const forwarded: Record<string, unknown> = {};\n if (slots.expanded) forwarded[\"expanded\"] = slots.expanded;\n for (const [name, slot] of Object.entries(slots)) {\n if (name === \"default\" && slot) {\n forwarded[name] = slot;\n } else if (name.startsWith(\"cell.\")) {\n const cellSlot = slots[name as `cell.${string}`];\n forwarded[name] = (cellProps: GridCellSlotProps) =>\n cellSlot ? h(CellContent, { ...cellProps, render: cellSlot }) : cellProps.display;\n } else if (name.startsWith(\"editor.\")) {\n forwarded[name] = slot;\n }\n }\n return forwarded;\n };\n\n const button = (label: string, disabled: boolean, onClick: () => void) =>\n h(\"button\", { type: \"button\", class: \"vt-button\", disabled, onClick }, label);\n\n return () =>\n h(\"div\", { class: \"vt-theme vueye-grid\", \"data-vt-theme\": props.theme }, [\n props.toolbar || props.searchable || props.addRow\n ? h(VtToolbar, () => [\n props.searchable\n ? h(VtSearch, {\n placeholder: props.searchPlaceholder ?? locale().messages.searchPlaceholder,\n })\n : null,\n props.addRow\n ? button(locale().messages.addRow, false, () => {\n table.insertRows();\n })\n : null,\n h(\"div\", { class: \"vt-toolbar-spacer\" }),\n props.toolbar\n ? [\n button(locale().messages.undo, !table.canUndo, () => table.undo()),\n button(locale().messages.redo, !table.canRedo, () => table.redo()),\n button(locale().messages.exportCsv, false, () =>\n emit(\"export\", table.exportRows()),\n ),\n ]\n : null,\n ])\n : null,\n h(\n VtGrid,\n {\n table,\n label: props.label ?? locale().messages.spreadsheet,\n \"aria-describedby\": attrs[\"aria-describedby\"],\n rowNumbers: props.rowNumbers,\n rowAttrs: props.rowAttrs,\n rowActions: props.editable || props.removeRows,\n removable: props.removeRows,\n onSave: (result: unknown) => emit(\"save\", result as EditResult<unknown>),\n onCancel: (key: unknown) => emit(\"cancel\", key as string | number),\n columnLetters: props.columnLetters,\n density: props.density,\n striped: props.striped,\n bordered: props.bordered,\n hover: false,\n stickyHeader: props.stickyHeader,\n loading:\n props.loading || table.loadState === \"loading\" || table.loadState === \"streaming\",\n theme: props.theme,\n virtual: props.virtual,\n virtualColumns: props.virtualColumns,\n height: props.height,\n rowHeight: props.rowHeight,\n overscan: props.overscan,\n columnWidth: props.columnWidth,\n treeColumn: props.treeColumn,\n keepAliveDetail: props.keepAliveDetail,\n ...(props.maxHeight ? { style: { \"--vt-max-height\": props.maxHeight } } : {}),\n },\n gridSlots(),\n ),\n props.pagination || table.loadingMode || slots.status || table.tree\n ? h(VtToolbar, { class: \"vt-footer\" }, () => [\n h(\n VtStatus,\n null,\n slots.status\n ? { default: (status: TableStatusSlotProps) => slots.status?.(status) }\n : undefined,\n ),\n ...(table.loadingMode ? [h(VtLoadMore)] : []),\n props.pagination && table.paginate\n ? h(\"div\", { class: \"vt-footer-controls\" }, [\n h(VtPageSize, { options: props.pageSizeOptions }),\n h(VtPagination),\n ])\n : null,\n ])\n : null,\n ]);\n },\n});\n","import type {\n ColumnDef,\n RowKey,\n SortInfo,\n TableRow,\n TableState,\n EditResult,\n} from \"@vueye-table/core\";\nimport {\n DataTableBody,\n DataTableCaption,\n DataTableCell,\n DataTableRow,\n DataTableSelectAll,\n DataTableSelectRow,\n DataTableRoot,\n DataTableViewport,\n type TableStatusSlotProps,\n type DetailSlotProps,\n resolveTreeColumn,\n DataTableEditRoot,\n DataTableEditCell,\n type CellEditorSlotProps,\n rowAttributes,\n} from \"@vueye-table/headless\";\nimport {\n VtColumnVisibility,\n VtEmpty,\n VtHeader,\n VtPageSize,\n VtPagination,\n VtSearch,\n VtStatus,\n VtLoadMore,\n VtToolbar,\n VtExpandToggle,\n VtTreeCell,\n VtRowActions,\n} from \"@vueye-table/styled\";\nimport {\n provideDataTable,\n provideTableLocale,\n useDataTable,\n useTableLocale,\n type DataTableBinding,\n} from \"@vueye-table/vue\";\nimport {\n computed,\n defineComponent,\n h,\n mergeProps,\n type PropType,\n type SlotsType,\n type VNodeChild,\n} from \"vue\";\n\nimport {\n commonProps,\n controlledState,\n createColumnResolver,\n emitStateChanges,\n stateEmitValidators,\n expansionOptions,\n emitExpansionChanges,\n CellContent,\n editingEmits,\n editingOptions,\n} from \"./shared\";\n\n/** Slot props of `cell.<column id>` and `cell`. */\nexport interface CellSlotProps {\n readonly item: unknown;\n readonly row: TableRow<unknown>;\n readonly value: unknown;\n readonly display: string;\n readonly column: { readonly id: string; readonly header: string };\n}\n\n/**\n * What a `<VueyeTable>` exposes on its template ref: the table binding, with every snapshot field\n * and operation. `useTemplateRef<VueyeTableExposed>(\"table\")` reads it typed.\n */\nexport interface VueyeTableExposed {\n readonly table: DataTableBinding<unknown>;\n}\n\n/** Slot props of `status`, the \"1–10 of 57 rows\" line. */\nexport type StatusSlotProps = TableStatusSlotProps;\n\n/**\n * Slot props of `header.<column id>`. The slot fills the header cell; on a sortable column it sits\n * inside the sort button, so the header still sorts on click and shows its indicator.\n */\nexport interface HeaderSlotProps {\n readonly column: { readonly id: string; readonly header: string };\n readonly sort: SortInfo | undefined;\n readonly toggleSort: (multi?: boolean) => void;\n}\n\n/**\n * A complete data table: search, column visibility, sorting, selection, pagination, a live\n * status line, loading and empty states, and theming. Every piece of state is available as a\n * `v-model`, and `manual` hands searching, sorting, and paging to a server.\n */\nexport const VueyeTable = defineComponent({\n name: \"VueyeTable\",\n inheritAttrs: false,\n props: {\n data: { type: Array as PropType<readonly unknown[]>, default: () => [] },\n ...commonProps,\n editMode: { type: String as PropType<\"cell\" | \"row\" | undefined>, default: undefined },\n /** `true` or `\"multiple\"` for checkboxes, `\"single\"` for one row at a time. */\n selectable: {\n type: [Boolean, String] as PropType<boolean | \"single\" | \"multiple\">,\n default: false,\n },\n selected: { type: Array as PropType<readonly RowKey[]>, default: undefined },\n /** The data is one page from a server; `rowCount` is the total. */\n /** Shown instead of the empty state while `loading` and there are no rows yet. */\n loadingText: { type: String as PropType<string | undefined>, default: undefined },\n },\n emits: {\n ...editingEmits,\n ...stateEmitValidators,\n \"state-change\": (_state: TableState) => true,\n \"row-click\": (_item: unknown, _row: TableRow<unknown>) => true,\n expand: (_item: unknown, _row: TableRow<unknown>) => true,\n collapse: (_item: unknown, _row: TableRow<unknown>) => true,\n },\n slots: Object as SlotsType<\n {\n [key: `cell.${string}`]: CellSlotProps;\n [key: `editor.${string}`]: CellEditorSlotProps;\n [key: `header.${string}`]: HeaderSlotProps;\n } & {\n toolbar: { table: unknown };\n empty: Record<string, never>;\n loading: Record<string, never>;\n footer: { table: unknown };\n status: StatusSlotProps;\n expanded: DetailSlotProps;\n }\n >,\n setup(props, { emit, slots, expose, attrs }) {\n const inherited = useTableLocale();\n const locale = provideTableLocale(() => ({ locale: props.locale, messages: props.messages }));\n const loadingText = (): string => props.loadingText ?? locale().messages.loading;\n const selectionMode = computed(() =>\n props.selectable === false ? \"none\" : props.selectable === \"single\" ? \"single\" : \"multiple\",\n );\n const initialPagination = {\n page: props.page ?? 1,\n pageSize: props.pageSize ?? props.pageSizeOptions[0] ?? 10,\n };\n const resolveColumns = createColumnResolver();\n let binding: DataTableBinding<unknown> | undefined;\n const table = useDataTable<unknown>({\n ...expansionOptions(props, !!slots.expanded),\n ...editingOptions(props),\n data: () => props.data,\n source: computed(() => props.source),\n loadMore: computed(() => props.loadMore),\n endThreshold: props.endThreshold,\n columns: () => resolveColumns(props.columns, props.data) as readonly ColumnDef<unknown>[],\n rowKey: props.rowKey as never,\n locale: props.locale ?? inherited().locale,\n normalizeText: props.normalizeText,\n manual: props.manual,\n paginate: props.paginate ?? !(props.virtual || props.source || props.loadMore),\n rowCount: () => props.rowCount,\n selectionMode: selectionMode.value,\n selectScope: props.selectScope,\n initialState: { pagination: initialPagination },\n onDataChange(data, changes) {\n emit(\"update:data\", data);\n emit(\"edit\", changes);\n },\n onEditIssues(issues) {\n emit(\"edit-issues\", issues);\n emit(\"edit-error\", issues);\n },\n state: () =>\n controlledState(props, binding?.table.getState().pagination ?? initialPagination),\n onStateChange(state, previous) {\n emitStateChanges(emit as never, state, previous);\n emitExpansionChanges(emit, state, previous, binding?.table.getSnapshot());\n emit(\"state-change\", state);\n },\n });\n binding = table;\n provideDataTable(table);\n expose({ table } satisfies VueyeTableExposed);\n const busy = (): boolean =>\n props.loading || table.loadState === \"loading\" || table.loadState === \"streaming\";\n\n const selectable = (): boolean => selectionMode.value !== \"none\";\n\n const cell = (\n row: TableRow<unknown>,\n column: (typeof table.columns)[number],\n rowIndex: number,\n ): VNodeChild => {\n const slot = slots[`cell.${column.id}`];\n const treeCell = table.tree && column.id === resolveTreeColumn(table, props.treeColumn);\n return h(\n props.editMode ? DataTableEditCell : DataTableCell,\n {\n key: column.id,\n row,\n column,\n tree: false,\n ...(props.editMode\n ? {\n rowIndex,\n onSave: (result: EditResult<unknown>) => emit(\"save\", result),\n onCancel: (key: RowKey) => emit(\"cancel\", key),\n }\n : {}),\n },\n {\n editor: slots[`editor.${column.id}`],\n default: ({ value, display }: { value: unknown; display: string }) => {\n const content = () =>\n slot ? h(CellContent, { row, column, value, display, render: slot }) : display;\n return treeCell ? h(VtTreeCell, { row }, { default: content }) : content();\n },\n $stable: true,\n },\n );\n };\n\n const hasDetails = (): boolean => !!slots.expanded && !table.tree;\n const hasActions = (): boolean => !!props.editMode || props.removeRows;\n const leadingColumns = (): number =>\n Number(hasActions()) + Number(hasDetails()) + Number(selectable());\n const width = (): number =>\n table.columns.length +\n (selectable() ? 1 : 0) +\n (hasDetails() ? 1 : 0) +\n (hasActions() ? 1 : 0);\n const emptyBody = (): VNodeChild => {\n if (table.rows.length === 0) {\n // While the first page is loading there is nothing to match yet, so say that instead.\n const content = busy()\n ? (slots.loading?.({}) ?? h(VtEmpty, { text: loadingText() }))\n : (slots.empty?.({}) ??\n h(VtEmpty, {\n text:\n table.loadingMode && table.loadState === \"error\"\n ? locale().messages.couldNotLoadRows\n : locale().messages.noMatchingRows,\n }));\n return h(\"tr\", { \"data-empty\": \"\" }, [h(\"td\", { colspan: Math.max(1, width()) }, content)]);\n }\n return null;\n };\n const cells = (row: TableRow<unknown>, rowIndex: number): VNodeChild[] => {\n const result = [\n hasActions()\n ? h(\n \"td\",\n {\n class: \"vt-row-controls\",\n \"aria-colindex\": 1,\n onClick: (event: Event) => event.stopPropagation(),\n },\n [\n h(VtRowActions, {\n row,\n editable: props.editMode === \"row\",\n removable: props.removeRows,\n }),\n ],\n )\n : null,\n hasDetails()\n ? h(\"td\", { class: \"vt-expansion-cell\", \"aria-colindex\": Number(hasActions()) + 1 }, [\n h(VtExpandToggle, { row }),\n ])\n : null,\n selectable()\n ? h(\n \"td\",\n {\n class: \"vt-selection-cell\",\n \"aria-colindex\": Number(hasActions()) + Number(hasDetails()) + 1,\n onClick: (event: Event) => event.stopPropagation(),\n },\n [h(DataTableSelectRow, { row })],\n )\n : null,\n ...table.columns.map((column) => cell(row, column, rowIndex)),\n ];\n return result;\n };\n const bodyRow = ({ row, rowIndex }: DetailSlotProps): VNodeChild =>\n h(\n DataTableRow,\n {\n key: row.key,\n row,\n rowIndex,\n attributes: rowAttributes(props.rowAttrs, row),\n onClick: () => emit(\"row-click\", row.original, row),\n },\n { default: () => cells(row, rowIndex), $stable: true },\n );\n\n const headerSlots = () => {\n return {\n header: (header: HeaderSlotProps) =>\n slots[`header.${header.column.id}`]?.(header) ?? header.column.header,\n before: () => [\n hasActions()\n ? h(\n \"th\",\n { class: \"vt-row-controls\", scope: \"col\", \"aria-colindex\": 1 },\n locale().messages.rowActions,\n )\n : null,\n hasDetails()\n ? h(\"th\", {\n class: \"vt-expansion-cell\",\n scope: \"col\",\n \"aria-colindex\": Number(hasActions()) + 1,\n \"aria-label\": locale().messages.details,\n })\n : null,\n selectable()\n ? h(\n \"th\",\n {\n class: \"vt-selection-cell\",\n scope: \"col\",\n \"aria-colindex\": Number(hasActions()) + Number(hasDetails()) + 1,\n },\n selectionMode.value === \"multiple\" ? [h(DataTableSelectAll)] : [],\n )\n : null,\n ],\n };\n };\n\n const tableContent = (): VNodeChild => {\n const children = () => [\n props.caption ? h(DataTableCaption, () => props.caption) : null,\n h(VtHeader, null, headerSlots()),\n h(\n DataTableBody,\n { class: \"vt-body\", colspan: width() },\n {\n ...(table.rows.length === 0 ? { default: emptyBody } : {}),\n row: bodyRow,\n detail: slots.expanded\n ? (detail: DetailSlotProps) => slots.expanded?.(detail)\n : undefined,\n },\n ),\n ];\n return props.virtual\n ? h(\n DataTableViewport,\n {\n class: \"vt-scroll\",\n height: props.height ?? \"24rem\",\n style: { \"--vt-row-height\": `${props.rowHeight}px` },\n },\n {\n default: () =>\n h(\n DataTableRoot,\n {\n table,\n class: \"vt-table\",\n leadingColumns: leadingColumns(),\n virtual: props.virtual,\n rowHeight: props.rowHeight,\n overscan: props.overscan,\n treeColumn: props.treeColumn,\n keepAliveDetail: props.keepAliveDetail,\n },\n children,\n ),\n },\n )\n : h(\"div\", { class: \"vt-scroll\" }, [\n h(\n DataTableRoot,\n {\n table,\n treeColumn: props.treeColumn,\n keepAliveDetail: props.keepAliveDetail,\n class: \"vt-table\",\n leadingColumns: leadingColumns(),\n \"aria-busy\": busy() ? \"true\" : undefined,\n },\n children,\n ),\n ]);\n };\n\n const surface = () =>\n h(\n \"div\",\n mergeProps(attrs, {\n class: \"vt-surface vueye-table\",\n \"data-density\": props.density,\n \"data-striped\": props.striped ? \"\" : undefined,\n \"data-bordered\": props.bordered ? \"\" : undefined,\n \"data-hover\": props.hover ? \"\" : undefined,\n \"data-sticky-header\": props.stickyHeader || props.virtual ? \"\" : undefined,\n \"data-virtual\": props.virtual ? \"\" : undefined,\n \"data-loading\": busy() ? \"\" : undefined,\n \"data-vt-theme\": props.theme,\n \"aria-busy\": props.loading ? \"true\" : undefined,\n style: props.maxHeight ? { \"--vt-max-height\": props.maxHeight } : undefined,\n }),\n [\n h(\"div\", { class: \"vt-root\" }, [\n props.searchable || props.columnToggle || slots.toolbar || props.addRow\n ? h(VtToolbar, () => [\n props.searchable\n ? h(VtSearch, {\n placeholder: props.searchPlaceholder ?? locale().messages.searchPlaceholder,\n })\n : null,\n props.addRow\n ? h(\n \"button\",\n { type: \"button\", class: \"vt-button\", onClick: () => table.insertRows() },\n locale().messages.addRow,\n )\n : null,\n h(\"div\", { class: \"vt-toolbar-spacer\" }),\n slots.toolbar?.({ table }),\n props.columnToggle ? h(VtColumnVisibility) : null,\n ])\n : null,\n h(\"div\", { class: \"vt-progress\", role: \"presentation\" }),\n tableContent(),\n (props.pagination && (!props.virtual || table.paginate)) ||\n slots.footer ||\n slots.status ||\n table.tree ||\n table.loadingMode\n ? h(VtToolbar, { class: \"vt-footer\" }, () => [\n h(\n VtStatus,\n null,\n slots.status\n ? { default: (status: StatusSlotProps) => slots.status?.(status) }\n : props.loading && table.rows.length === 0\n ? { default: () => loadingText() }\n : undefined,\n ),\n ...(table.loadingMode ? [h(VtLoadMore)] : []),\n slots.footer?.({ table }),\n props.pagination && table.paginate && (!props.virtual || table.paginate)\n ? h(\"div\", { class: \"vt-footer-controls\" }, [\n h(VtPageSize, { options: props.pageSizeOptions }),\n h(VtPagination),\n ])\n : null,\n ])\n : null,\n ]),\n ],\n );\n return () =>\n props.editMode\n ? h(\n DataTableEditRoot,\n {\n table,\n mode: props.editMode,\n onSave: (result) => emit(\"save\", result),\n onCancel: (key) => emit(\"cancel\", key),\n },\n surface,\n )\n : surface();\n },\n});\n","import { tableLocaleKey, type TableLocaleOptions } from \"@vueye-table/vue\";\nimport type { App, Plugin } from \"vue\";\n\nimport { VueyeGrid } from \"./vueye-grid\";\nimport { VueyeTable } from \"./vueye-table\";\n\n/** Options of `VueyeTablePlugin`: the application's language, which every table speaks. */\nexport type VueyeTablePluginOptions = TableLocaleOptions;\n\n/**\n * Register `<VueyeTable>` and `<VueyeGrid>` globally. A `locale` and `messages` given here are\n * the default of every table in the application; a table's own props win over them.\n */\nexport const VueyeTablePlugin: Plugin<[VueyeTablePluginOptions?]> = {\n install(app: App, options?: VueyeTablePluginOptions): void {\n app.component(\"VueyeTable\", VueyeTable);\n app.component(\"VueyeGrid\", VueyeGrid);\n if (options?.locale !== undefined || options?.messages !== undefined) {\n const language: TableLocaleOptions = { locale: options.locale, messages: options.messages };\n app.provide(tableLocaleKey, () => language);\n }\n },\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vueye-table",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.3",
|
|
4
4
|
"description": "A Vue framework for data tables and spreadsheets: a complete, themeable data table and grid, plus every layer beneath them.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"data-grid",
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
"provenance": true
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@vueye-table/core": "3.0.0-beta.
|
|
46
|
-
"@vueye-table/
|
|
47
|
-
"@vueye-table/vue": "3.0.0-beta.
|
|
48
|
-
"@vueye-table/
|
|
45
|
+
"@vueye-table/core": "3.0.0-beta.3",
|
|
46
|
+
"@vueye-table/styled": "3.0.0-beta.3",
|
|
47
|
+
"@vueye-table/vue": "3.0.0-beta.3",
|
|
48
|
+
"@vueye-table/headless": "3.0.0-beta.3"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"vue": "3.5.43",
|