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 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
- /** Register `<VueyeTable>` and `<VueyeGrid>` globally. */
10
- declare const VueyeTablePlugin: Plugin;
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: StringConstructor;
48
- default: string;
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: StringConstructor;
165
- readonly default: "Search…";
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
- "update:page": null;
263
- "update:pageSize": null;
264
- "update:sorting": null;
265
- "update:search": null;
266
- "update:filters": null;
267
- "update:hiddenColumns": null;
268
- "update:selected": null;
269
- "update:expanded": null;
270
- } & {
271
- "update:data": (_data: readonly unknown[]) => boolean;
272
- edit: (_changes: readonly CellChange<unknown>[]) => boolean;
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: StringConstructor;
314
- default: string;
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: StringConstructor;
431
- readonly default: "Search…";
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
- "onUpdate:page"?: (...args: any[]) => any;
527
- "onUpdate:pageSize"?: (...args: any[]) => any;
528
- "onUpdate:sorting"?: (...args: any[]) => any;
529
- "onUpdate:search"?: (...args: any[]) => any;
530
- "onUpdate:filters"?: (...args: any[]) => any;
531
- "onUpdate:hiddenColumns"?: (...args: any[]) => any;
532
- "onUpdate:selected"?: (...args: any[]) => any;
533
- "onUpdate:expanded"?: (...args: any[]) => any;
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
- "onState-change"?: (state: TableState) => any;
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: StringConstructor;
652
- default: string;
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: StringConstructor;
768
- readonly default: "Search…";
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
- "update:page": null;
874
- "update:pageSize": null;
875
- "update:sorting": null;
876
- "update:search": null;
877
- "update:filters": null;
878
- "update:hiddenColumns": null;
879
- "update:selected": null;
880
- "update:expanded": null;
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: StringConstructor;
911
- default: string;
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: StringConstructor;
1027
- readonly default: "Search…";
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
- "onUpdate:page"?: (...args: any[]) => any;
1131
- "onUpdate:pageSize"?: (...args: any[]) => any;
1132
- "onUpdate:sorting"?: (...args: any[]) => any;
1133
- "onUpdate:search"?: (...args: any[]) => any;
1134
- "onUpdate:filters"?: (...args: any[]) => any;
1135
- "onUpdate:hiddenColumns"?: (...args: any[]) => any;
1136
- "onUpdate:selected"?: (...args: any[]) => any;
1137
- "onUpdate:expanded"?: (...args: any[]) => any;
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
@@ -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":";;;;;;;;;cAMa,kBAAkB;;;;;;;;;cCuClB,yBAAS,8BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAaK,MAAA;;;;;;;;;;;;;;;;;;;;;;EAyBL,iBAAC,OAAO;EACT,gBAAC;EACV,OAAC,kBAAkB;EACX,eAAC,iBAAiB;EACxB,SAAC;EACD,SAAC,eAAe,KAAK;EACnB,WAAC,eAAe,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA/BV,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aATyC;;;;EAGpD,WAAC,OAAO,4BAA4B;EACrC,UAAC,OAAO,yBAAyB;EAC/B,YAAC,OAAO,oBAAoB;kCAwM3C;;;;UCtMe;WACN;WACA,KAAK;WACL;WACA;WACA;aAAmB;aAAqB;;;;KAIvC,kBAAkB;;;;;;cAOjB,0BAAU,8BAAA;;IAMS,MAAA;;;;;IAGC,MAAA;;;;IAGF,MAAA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IARtB,MAAA;;;;;;;;;;;;;;;;;;;;;;EAuBL,iBAAC,OAAO;EACX,cAAC,eAAe,KAAK;EAC1B,SAAC,eAAe,KAAK;EACnB,WAAC,eAAe,KAAK;;;IAxBL,MAAA;;;;;IAGC,MAAA;;;;IAGF,MAAA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IARtB,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgCgB;MAAE;MAAY;;;;EAE1C;IAAE;;EACJ,OAAA;EACE,SAAA;EACD;IAAE;;EACF,QAAA;EACE,UAAA;kCAyUd;;;;YChbiB;IACf,mBAAmB;IACnB,kBAAkB"}
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: "Search…"
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
- const stateEmits = [
267
- "update:page",
268
- "update:pageSize",
269
- "update:sorting",
270
- "update:search",
271
- "update:filters",
272
- "update:hiddenColumns",
273
- "update:selected",
274
- "update:expanded"
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: "Spreadsheet"
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
- ...Object.fromEntries(stateEmits.map((name) => [name, null])),
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("Add row", false, () => {
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("Undo", !table.canUndo, () => table.undo()),
513
- button("Redo", !table.canRedo, () => table.redo()),
514
- button("Export CSV", false, () => emit("export", table.exportRows()))
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: "Loading…"
633
+ default: void 0
587
634
  }
588
635
  },
589
636
  emits: {
590
637
  ...editingEmits,
591
- ...Object.fromEntries(stateEmits.map((name) => [name, null])),
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: props.loadingText }) : slots.empty?.({}) ?? h(VtEmpty, { text: table.loadingMode && table.loadState === "error" ? "Could not load rows." : "No matching rows" });
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
- ...forwarded,
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
- }, "Row actions") : null,
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": "Details"
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
- }, "Add row") : null,
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: () => props.loadingText } : void 0),
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
- /** Register `<VueyeTable>` and `<VueyeGrid>` globally. */
823
- const VueyeTablePlugin = { install(app) {
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.1",
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.1",
46
- "@vueye-table/headless": "3.0.0-beta.1",
47
- "@vueye-table/vue": "3.0.0-beta.1",
48
- "@vueye-table/styled": "3.0.0-beta.1"
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",