@vueye-table/headless 3.0.0-beta.2 → 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 +57 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -8
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AnyDataTableBinding, DataGridBinding, DataTableBinding, RowDraft, VirtualBinding, VirtualColumnItem, VirtualRowItem } from "@vueye-table/vue";
|
|
2
|
-
import { PropType, SlotsType, VNode, VNodeChild, shallowRef } from "vue";
|
|
2
|
+
import { PropType, SlotsType, StyleValue, VNode, VNodeChild, shallowRef } from "vue";
|
|
3
3
|
import { EditResult, EditorSpec, LoadState, PageItem, RowKey, SelectionCoverage, SortInfo, TableColumn, TableIssue, TableRow } from "@vueye-table/core";
|
|
4
4
|
//#region src/controls.d.ts
|
|
5
5
|
/**
|
|
@@ -124,8 +124,8 @@ declare const DataTablePagination: import("vue").DefineComponent<import("vue").E
|
|
|
124
124
|
default: undefined;
|
|
125
125
|
};
|
|
126
126
|
}>> & Readonly<{}>, {
|
|
127
|
-
as: string;
|
|
128
127
|
label: string | undefined;
|
|
128
|
+
as: string;
|
|
129
129
|
}, SlotsType<{
|
|
130
130
|
default?: (props: {
|
|
131
131
|
page: number;
|
|
@@ -185,8 +185,8 @@ declare const DataTableColumnVisibility: import("vue").DefineComponent<import("v
|
|
|
185
185
|
default: undefined;
|
|
186
186
|
};
|
|
187
187
|
}>> & Readonly<{}>, {
|
|
188
|
-
as: string;
|
|
189
188
|
legend: string | undefined;
|
|
189
|
+
as: string;
|
|
190
190
|
}, SlotsType<{
|
|
191
191
|
default?: (props: {
|
|
192
192
|
columns: readonly {
|
|
@@ -755,6 +755,30 @@ interface DetailSlotProps {
|
|
|
755
755
|
readonly rowIndex: number;
|
|
756
756
|
}
|
|
757
757
|
//#endregion
|
|
758
|
+
//#region src/row-attrs.d.ts
|
|
759
|
+
/** A class as Vue reads it: a string, an object of flags, or a list of either. */
|
|
760
|
+
type RowClass = string | Readonly<Record<string, boolean>> | ReadonlyArray<string | Readonly<Record<string, boolean>>>;
|
|
761
|
+
/**
|
|
762
|
+
* What a page may put on a body row: a class, a style, and `data-*` and `aria-*` attributes. The
|
|
763
|
+
* row's own attributes (`data-key`, `data-selected`, `aria-rowindex`, tree attributes, focus) win
|
|
764
|
+
* on a collision, and anything else, event handlers included, is left out.
|
|
765
|
+
*/
|
|
766
|
+
interface RowAttributes {
|
|
767
|
+
readonly class?: RowClass;
|
|
768
|
+
readonly style?: StyleValue;
|
|
769
|
+
readonly [attribute: `data-${string}`]: string | number | boolean | undefined;
|
|
770
|
+
readonly [attribute: `aria-${string}`]: string | number | boolean | undefined;
|
|
771
|
+
}
|
|
772
|
+
/** The attributes of a body row, read from its item on each render. */
|
|
773
|
+
type RowAttrs<T> = (item: T, row: TableRow<T>) => RowAttributes | null | undefined;
|
|
774
|
+
/** Accepts row attributes of any row type, as components accept any row. */
|
|
775
|
+
type AnyRowAttrs = RowAttrs<any>;
|
|
776
|
+
/**
|
|
777
|
+
* The attributes `attrs` gives `row`, keeping only a class, a style, and `data-*` and `aria-*`
|
|
778
|
+
* attributes. Merge them before the row's own so the row's win.
|
|
779
|
+
*/
|
|
780
|
+
declare function rowAttributes(attrs: AnyRowAttrs | undefined, row: TableRow<unknown>): Record<string, unknown>;
|
|
781
|
+
//#endregion
|
|
758
782
|
//#region src/grid.d.ts
|
|
759
783
|
declare function cellId(gridId: string, row: number, column: number): string;
|
|
760
784
|
/**
|
|
@@ -879,9 +903,9 @@ declare const DataGridRoot: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
879
903
|
onCancel?: (_key: string | number) => any;
|
|
880
904
|
onSave?: (_result: unknown) => any;
|
|
881
905
|
}>, {
|
|
906
|
+
label: string | undefined;
|
|
882
907
|
as: string;
|
|
883
908
|
height: string | undefined;
|
|
884
|
-
label: string | undefined;
|
|
885
909
|
virtualColumns: boolean;
|
|
886
910
|
gutter: number;
|
|
887
911
|
leadingColumns: number;
|
|
@@ -918,6 +942,11 @@ declare const DataGridBody: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
918
942
|
type: BooleanConstructor;
|
|
919
943
|
default: boolean;
|
|
920
944
|
};
|
|
945
|
+
/** A page's own attributes for each row; the row's own always win. */
|
|
946
|
+
rowAttrs: {
|
|
947
|
+
type: PropType<AnyRowAttrs | undefined>;
|
|
948
|
+
default: undefined;
|
|
949
|
+
};
|
|
921
950
|
virtual: {
|
|
922
951
|
readonly type: PropType<boolean | ComponentVirtualOptions>;
|
|
923
952
|
readonly default: false;
|
|
@@ -957,6 +986,11 @@ declare const DataGridBody: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
957
986
|
type: BooleanConstructor;
|
|
958
987
|
default: boolean;
|
|
959
988
|
};
|
|
989
|
+
/** A page's own attributes for each row; the row's own always win. */
|
|
990
|
+
rowAttrs: {
|
|
991
|
+
type: PropType<AnyRowAttrs | undefined>;
|
|
992
|
+
default: undefined;
|
|
993
|
+
};
|
|
960
994
|
virtual: {
|
|
961
995
|
readonly type: PropType<boolean | ComponentVirtualOptions>;
|
|
962
996
|
readonly default: false;
|
|
@@ -995,6 +1029,7 @@ declare const DataGridBody: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
995
1029
|
overscan: number;
|
|
996
1030
|
columnWidth: number;
|
|
997
1031
|
treeCell: boolean;
|
|
1032
|
+
rowAttrs: AnyRowAttrs | undefined;
|
|
998
1033
|
}, SlotsType<{
|
|
999
1034
|
default?: (props: {
|
|
1000
1035
|
rows: readonly TableRow<unknown>[];
|
|
@@ -1439,6 +1474,14 @@ declare const DataTableRow: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
1439
1474
|
type: PropType<number | undefined>;
|
|
1440
1475
|
default: undefined;
|
|
1441
1476
|
};
|
|
1477
|
+
/**
|
|
1478
|
+
* A page's own attributes for the row, from `rowAttributes`. They come before the row's own,
|
|
1479
|
+
* so `data-key`, selection, tree, and focus attributes always win; class and style merge.
|
|
1480
|
+
*/
|
|
1481
|
+
attributes: {
|
|
1482
|
+
type: PropType<Readonly<Record<string, unknown>> | undefined>;
|
|
1483
|
+
default: undefined;
|
|
1484
|
+
};
|
|
1442
1485
|
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
1443
1486
|
[key: string]: any;
|
|
1444
1487
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -1454,9 +1497,18 @@ declare const DataTableRow: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
1454
1497
|
type: PropType<number | undefined>;
|
|
1455
1498
|
default: undefined;
|
|
1456
1499
|
};
|
|
1500
|
+
/**
|
|
1501
|
+
* A page's own attributes for the row, from `rowAttributes`. They come before the row's own,
|
|
1502
|
+
* so `data-key`, selection, tree, and focus attributes always win; class and style merge.
|
|
1503
|
+
*/
|
|
1504
|
+
attributes: {
|
|
1505
|
+
type: PropType<Readonly<Record<string, unknown>> | undefined>;
|
|
1506
|
+
default: undefined;
|
|
1507
|
+
};
|
|
1457
1508
|
}>> & Readonly<{}>, {
|
|
1458
1509
|
as: string;
|
|
1459
1510
|
rowIndex: number | undefined;
|
|
1511
|
+
attributes: Readonly<Record<string, unknown>> | undefined;
|
|
1460
1512
|
}, SlotsType<{
|
|
1461
1513
|
default?: (props: {
|
|
1462
1514
|
row: TableRow<unknown>;
|
|
@@ -1531,5 +1583,5 @@ declare const DataTableEmpty: import("vue").DefineComponent<import("vue").Extrac
|
|
|
1531
1583
|
default?: () => VNode[];
|
|
1532
1584
|
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
1533
1585
|
//#endregion
|
|
1534
|
-
export { type CellEditorSlotProps, type ComponentVirtualBinding, type ComponentVirtualOptions, DataCellEditor, DataGridBody, DataGridCell, DataGridRoot, DataTableBody, DataTableCaption, DataTableCell, DataTableColumnVisibility, DataTableDetailRow, DataTableEditCell, DataTableEditRoot, DataTableEmpty, DataTableExpandToggle, DataTableHeader, DataTableHeaderCell, DataTableHeaderRow, DataTableLoadMore, DataTablePageSize, DataTablePagination, DataTableRoot, DataTableRow, DataTableRowActions, DataTableSearch, DataTableSelectAll, DataTableSelectRow, DataTableSortButton, DataTableStatus, DataTableTreeCell, DataTableViewport, DataTableVirtualColumns, type DetailSlotProps, type GridCellSlotProps, type TableStatusSlotProps, cellEditorProps, cellId, columnStyle, expandToggleProps, hierarchyProps, injectVirtual as injectVirtualRenderer, resolveTreeColumn, treeCellProps, virtualProps };
|
|
1586
|
+
export { type AnyRowAttrs, type CellEditorSlotProps, type ComponentVirtualBinding, type ComponentVirtualOptions, DataCellEditor, DataGridBody, DataGridCell, DataGridRoot, DataTableBody, DataTableCaption, DataTableCell, DataTableColumnVisibility, DataTableDetailRow, DataTableEditCell, DataTableEditRoot, DataTableEmpty, DataTableExpandToggle, DataTableHeader, DataTableHeaderCell, DataTableHeaderRow, DataTableLoadMore, DataTablePageSize, DataTablePagination, DataTableRoot, DataTableRow, DataTableRowActions, DataTableSearch, DataTableSelectAll, DataTableSelectRow, DataTableSortButton, DataTableStatus, DataTableTreeCell, DataTableViewport, DataTableVirtualColumns, type DetailSlotProps, type GridCellSlotProps, type RowAttributes, type RowAttrs, type RowClass, type TableStatusSlotProps, cellEditorProps, cellId, columnStyle, expandToggleProps, hierarchyProps, injectVirtual as injectVirtualRenderer, resolveTreeColumn, rowAttributes, treeCellProps, virtualProps };
|
|
1535
1587
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["_$__shared0.AnyTableColumn","_$__virtual0.ComponentVirtualOptions","_$__shared0.AnyTableColumn","_$__virtual0.ComponentVirtualOptions","_$__shared0.AnyTableColumn"],"sources":["../src/controls.ts","../src/loading.ts","../src/editor.ts","../src/shared.ts","../src/editing.ts","../src/virtual.ts","../src/hierarchy.ts","../src/grid.ts","../src/table.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["_$__shared0.AnyTableColumn","_$__virtual0.ComponentVirtualOptions","_$__shared0.AnyTableColumn","_$__virtual0.ComponentVirtualOptions","_$__shared0.AnyTableColumn"],"sources":["../src/controls.ts","../src/loading.ts","../src/editor.ts","../src/shared.ts","../src/editing.ts","../src/virtual.ts","../src/hierarchy.ts","../src/row-attrs.ts","../src/grid.ts","../src/table.ts"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { injectDataGrid, injectDataTable, provideDataGrid, provideDataTable, useDataGrid, useTableLocale, useVirtualColumns, useVirtualRows } from "@vueye-table/vue";
|
|
2
|
-
import { Fragment, computed, defineComponent, h, inject, nextTick, onMounted, onScopeDispose, provide, ref, shallowRef, useId, watch } from "vue";
|
|
2
|
+
import { Fragment, computed, defineComponent, h, inject, mergeProps, nextTick, onMounted, onScopeDispose, provide, ref, shallowRef, useId, watch } from "vue";
|
|
3
3
|
import { formatValue, getRowItemKey, gridCommand } from "@vueye-table/core";
|
|
4
4
|
|
|
5
5
|
//#region src/shared.ts
|
|
@@ -1303,6 +1303,14 @@ const DataTableRow = defineComponent({
|
|
|
1303
1303
|
rowIndex: {
|
|
1304
1304
|
type: Number,
|
|
1305
1305
|
default: void 0
|
|
1306
|
+
},
|
|
1307
|
+
/**
|
|
1308
|
+
* A page's own attributes for the row, from `rowAttributes`. They come before the row's own,
|
|
1309
|
+
* so `data-key`, selection, tree, and focus attributes always win; class and style merge.
|
|
1310
|
+
*/
|
|
1311
|
+
attributes: {
|
|
1312
|
+
type: Object,
|
|
1313
|
+
default: void 0
|
|
1306
1314
|
}
|
|
1307
1315
|
},
|
|
1308
1316
|
setup(props, { slots }) {
|
|
@@ -1314,7 +1322,7 @@ const DataTableRow = defineComponent({
|
|
|
1314
1322
|
const selected = table.isSelected(row.key);
|
|
1315
1323
|
const item = virtual ? virtualRow(virtual, row) : void 0;
|
|
1316
1324
|
const position = props.rowIndex ?? item?.renderItem.rowIndex ?? table.rows.indexOf(row);
|
|
1317
|
-
return h(props.as, {
|
|
1325
|
+
return h(props.as, mergeProps(props.attributes ?? {}, {
|
|
1318
1326
|
"aria-rowindex": position === -1 ? void 0 : table.pageStart + position + 1,
|
|
1319
1327
|
"aria-selected": table.selectionMode === "none" ? void 0 : String(selected),
|
|
1320
1328
|
"data-selected": flag(selected),
|
|
@@ -1329,7 +1337,7 @@ const DataTableRow = defineComponent({
|
|
|
1329
1337
|
ref: (element) => virtual.rows.measureElement(element, item.key),
|
|
1330
1338
|
"data-virtual-row": ""
|
|
1331
1339
|
} : {}
|
|
1332
|
-
}, slots.default?.({
|
|
1340
|
+
}), slots.default?.({
|
|
1333
1341
|
row,
|
|
1334
1342
|
selected,
|
|
1335
1343
|
columns: table.columns
|
|
@@ -1682,6 +1690,23 @@ const DataTableRowActions = defineComponent({
|
|
|
1682
1690
|
}
|
|
1683
1691
|
});
|
|
1684
1692
|
|
|
1693
|
+
//#endregion
|
|
1694
|
+
//#region src/row-attrs.ts
|
|
1695
|
+
function accepted(name) {
|
|
1696
|
+
return name === "class" || name === "style" || name.startsWith("data-") || name.startsWith("aria-");
|
|
1697
|
+
}
|
|
1698
|
+
/**
|
|
1699
|
+
* The attributes `attrs` gives `row`, keeping only a class, a style, and `data-*` and `aria-*`
|
|
1700
|
+
* attributes. Merge them before the row's own so the row's win.
|
|
1701
|
+
*/
|
|
1702
|
+
function rowAttributes(attrs, row) {
|
|
1703
|
+
const given = attrs?.(row.original, row);
|
|
1704
|
+
if (!given) return {};
|
|
1705
|
+
const kept = {};
|
|
1706
|
+
for (const [name, value] of Object.entries(given)) if (accepted(name)) kept[name] = value;
|
|
1707
|
+
return kept;
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1685
1710
|
//#endregion
|
|
1686
1711
|
//#region src/grid.ts
|
|
1687
1712
|
const gridContextKey = Symbol("vueye-table-grid-context");
|
|
@@ -1872,6 +1897,11 @@ const DataGridBody = defineComponent({
|
|
|
1872
1897
|
treeCell: {
|
|
1873
1898
|
type: Boolean,
|
|
1874
1899
|
default: true
|
|
1900
|
+
},
|
|
1901
|
+
/** A page's own attributes for each row; the row's own always win. */
|
|
1902
|
+
rowAttrs: {
|
|
1903
|
+
type: Function,
|
|
1904
|
+
default: void 0
|
|
1875
1905
|
}
|
|
1876
1906
|
},
|
|
1877
1907
|
setup(props, { slots }) {
|
|
@@ -1903,7 +1933,7 @@ const DataGridBody = defineComponent({
|
|
|
1903
1933
|
editor: slots.editor,
|
|
1904
1934
|
$stable: true
|
|
1905
1935
|
}), "td");
|
|
1906
|
-
return h("tr", {
|
|
1936
|
+
return h("tr", mergeProps(rowAttributes(props.rowAttrs, row), {
|
|
1907
1937
|
key: item.key,
|
|
1908
1938
|
role: "row",
|
|
1909
1939
|
"aria-rowindex": table.pageStart + rowIndex + 1,
|
|
@@ -1912,7 +1942,7 @@ const DataGridBody = defineComponent({
|
|
|
1912
1942
|
...hierarchyRowAttrs(table, row, hierarchy),
|
|
1913
1943
|
"data-virtual-row": "",
|
|
1914
1944
|
ref: (target) => binding.rows.measureElement(target, item.key)
|
|
1915
|
-
}, [slots.rowHeader?.({
|
|
1945
|
+
}), [slots.rowHeader?.({
|
|
1916
1946
|
row,
|
|
1917
1947
|
index: rowIndex
|
|
1918
1948
|
}), ...columns]);
|
|
@@ -1922,14 +1952,14 @@ const DataGridBody = defineComponent({
|
|
|
1922
1952
|
]);
|
|
1923
1953
|
const content = slots.default?.({ rows: table.rows }) ?? table.renderItems.map((item) => item.kind === "detail" ? details.render(item.row, item.rowIndex) : (() => {
|
|
1924
1954
|
const { row, rowIndex } = item;
|
|
1925
|
-
return h("tr", {
|
|
1955
|
+
return h("tr", mergeProps(rowAttributes(props.rowAttrs, row), {
|
|
1926
1956
|
key: item.key,
|
|
1927
1957
|
role: "row",
|
|
1928
1958
|
"aria-rowindex": rowIndex + 2,
|
|
1929
1959
|
"data-key": String(row.key),
|
|
1930
1960
|
"data-dirty": flag(row.isDirty),
|
|
1931
1961
|
...hierarchyRowAttrs(table, row, hierarchy)
|
|
1932
|
-
}, [slots.rowHeader?.({
|
|
1962
|
+
}), [slots.rowHeader?.({
|
|
1933
1963
|
row,
|
|
1934
1964
|
index: rowIndex
|
|
1935
1965
|
}), ...table.columns.map((column, columnIndex) => h(DataGridCell, {
|
|
@@ -2097,5 +2127,5 @@ const DataGridCell = defineComponent({
|
|
|
2097
2127
|
});
|
|
2098
2128
|
|
|
2099
2129
|
//#endregion
|
|
2100
|
-
export { DataCellEditor, DataGridBody, DataGridCell, DataGridRoot, DataTableBody, DataTableCaption, DataTableCell, DataTableColumnVisibility, DataTableDetailRow, DataTableEditCell, DataTableEditRoot, DataTableEmpty, DataTableExpandToggle, DataTableHeader, DataTableHeaderCell, DataTableHeaderRow, DataTableLoadMore, DataTablePageSize, DataTablePagination, DataTableRoot, DataTableRow, DataTableRowActions, DataTableSearch, DataTableSelectAll, DataTableSelectRow, DataTableSortButton, DataTableStatus, DataTableTreeCell, DataTableViewport, DataTableVirtualColumns, cellEditorProps, cellId, columnStyle, expandToggleProps, hierarchyProps, injectVirtual as injectVirtualRenderer, resolveTreeColumn, treeCellProps, virtualProps };
|
|
2130
|
+
export { DataCellEditor, DataGridBody, DataGridCell, DataGridRoot, DataTableBody, DataTableCaption, DataTableCell, DataTableColumnVisibility, DataTableDetailRow, DataTableEditCell, DataTableEditRoot, DataTableEmpty, DataTableExpandToggle, DataTableHeader, DataTableHeaderCell, DataTableHeaderRow, DataTableLoadMore, DataTablePageSize, DataTablePagination, DataTableRoot, DataTableRow, DataTableRowActions, DataTableSearch, DataTableSelectAll, DataTableSelectRow, DataTableSortButton, DataTableStatus, DataTableTreeCell, DataTableViewport, DataTableVirtualColumns, cellEditorProps, cellId, columnStyle, expandToggleProps, hierarchyProps, injectVirtual as injectVirtualRenderer, resolveTreeColumn, rowAttributes, treeCellProps, virtualProps };
|
|
2101
2131
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/shared.ts","../src/controls.ts","../src/loading.ts","../src/editor.ts","../src/virtual.ts","../src/hierarchy.ts","../src/table.ts","../src/editing.ts","../src/grid.ts"],"sourcesContent":["import type { TableColumn, TableRow } from \"@vueye-table/core\";\nimport { inject, provide, type InjectionKey, type PropType } from \"vue\";\n\n/** Leading native utility cells, independent of data-column coordinates. */\nexport const columnLayoutProps = {\n leadingColumns: { type: Number, default: 0 },\n} as const;\nconst columnOffsetKey: InjectionKey<() => number> = Symbol(\"vt-leading-columns\");\nexport function provideColumnOffset(offset: () => number): void {\n provide(columnOffsetKey, offset);\n}\nexport function injectColumnOffset(): () => number {\n return inject(columnOffsetKey, () => 0);\n}\n\n/** The element a component renders. Every headless component accepts `as`. */\nexport const asProp = (tag: string) =>\n ({\n type: String,\n default: tag,\n }) as const;\n\n/** Columns of any row type; callbacks on a column make `TableColumn<unknown>` too narrow. */\nexport type AnyTableColumn = TableColumn<any>;\n\nexport const columnProp = {\n type: Object as PropType<AnyTableColumn>,\n required: true,\n} as const;\n\nexport const rowProp = {\n type: Object as PropType<TableRow<unknown>>,\n required: true,\n} as const;\n\n/** `data-*` attributes take strings; `undefined` leaves the attribute off. */\nexport function flag(value: boolean): \"\" | undefined {\n return value ? \"\" : undefined;\n}\n\n/**\n * The direction an element is laid out in, read from the nearest `dir` attribute, so keyboard\n * arrows can follow what the reader sees. Without one, left to right.\n */\nexport function directionOf(element: Element | null | undefined): \"ltr\" | \"rtl\" {\n return element?.closest(\"[dir]\")?.getAttribute(\"dir\")?.toLowerCase() === \"rtl\" ? \"rtl\" : \"ltr\";\n}\n","import type {\n PageItem,\n SelectionCoverage,\n TableColumn,\n LoadState,\n TableIssue,\n} from \"@vueye-table/core\";\nimport { injectDataTable, useTableLocale } from \"@vueye-table/vue\";\nimport { defineComponent, h, onScopeDispose, type PropType, type SlotsType, type VNode } from \"vue\";\n\nimport { asProp, flag, rowProp } from \"./shared\";\n\nfunction checkbox(props: {\n readonly checked: boolean;\n readonly indeterminate: boolean;\n readonly label: string;\n readonly disabled: boolean;\n readonly onChange: () => void;\n}) {\n return h(\"input\", {\n type: \"checkbox\",\n checked: props.checked,\n indeterminate: props.indeterminate,\n disabled: props.disabled,\n \"aria-label\": props.label,\n \"data-state\": props.indeterminate ? \"indeterminate\" : props.checked ? \"checked\" : \"unchecked\",\n onChange: props.onChange,\n });\n}\n\n/**\n * Selects or clears every row in the table's select-all scope. It shows the indeterminate state\n * when only some are selected. The slot receives the state to draw a custom control.\n */\nexport const DataTableSelectAll = defineComponent({\n name: \"DataTableSelectAll\",\n slots: Object as SlotsType<{\n default?: (props: { state: SelectionCoverage; toggle: () => void }) => VNode[];\n }>,\n props: { label: { type: String as PropType<string | undefined>, default: undefined } },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableSelectAll>\");\n const locale = useTableLocale();\n return () => {\n const state = table.allSelection;\n const toggle = (): void => table.toggleAll();\n return (\n slots.default?.({ state, toggle }) ??\n checkbox({\n checked: state === \"all\",\n indeterminate: state === \"some\",\n label: props.label ?? locale().messages.selectAllRows,\n disabled: table.selectionMode !== \"multiple\" || table.rows.length === 0,\n onChange: toggle,\n })\n );\n };\n },\n});\n\n/** Selects or clears one row. */\nexport const DataTableSelectRow = defineComponent({\n name: \"DataTableSelectRow\",\n slots: Object as SlotsType<{\n default?: (props: { selected: boolean; indeterminate: boolean; toggle: () => void }) => VNode[];\n }>,\n props: {\n row: rowProp,\n /** Defaults to the locale's \"Select row 3\", the row's place in the table as shown. */\n label: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableSelectRow>\");\n const locale = useTableLocale();\n const position = (): number => {\n const index = table.rows.indexOf(props.row);\n return index < 0 ? props.row.index + 1 : Math.max(1, table.pageStart) + index;\n };\n return () => {\n const selected = table.tree ? props.row.selection === \"all\" : table.isSelected(props.row.key);\n const indeterminate = table.tree && props.row.selection === \"some\";\n const toggle = (): void => table.toggleRow(props.row.key);\n return (\n slots.default?.({ selected, indeterminate, toggle }) ??\n checkbox({\n checked: selected,\n indeterminate,\n label:\n props.label ?? locale().messages.selectRow({ position: locale().count(position()) }),\n disabled: table.selectionMode === \"none\",\n onChange: toggle,\n })\n );\n };\n },\n});\n\n/**\n * A search box bound to the table's free-text search. `debounce` waits that many milliseconds\n * after the last keystroke before searching.\n */\nexport const DataTableSearch = defineComponent({\n name: \"DataTableSearch\",\n props: {\n debounce: { type: Number, default: 0 },\n label: { type: String as PropType<string | undefined>, default: undefined },\n placeholder: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props) {\n const table = injectDataTable(\"<DataTableSearch>\");\n const locale = useTableLocale();\n let timer: ReturnType<typeof setTimeout> | undefined;\n onScopeDispose(() => clearTimeout(timer));\n return () =>\n h(\"input\", {\n type: \"search\",\n value: table.state.search,\n placeholder: props.placeholder,\n \"aria-label\": props.label ?? locale().messages.search,\n onInput: (event: Event) => {\n const { value } = event.target as HTMLInputElement;\n clearTimeout(timer);\n if (props.debounce > 0) {\n timer = setTimeout(() => table.search(value), props.debounce);\n } else {\n table.search(value);\n }\n },\n });\n },\n});\n\n/**\n * Page navigation. The slot receives everything needed to draw custom controls; without one it\n * renders previous, numbered, and next buttons with `aria-current` on the current page.\n */\nexport const DataTablePagination = defineComponent({\n name: \"DataTablePagination\",\n slots: Object as SlotsType<{\n default?: (props: {\n page: number;\n pageCount: number;\n items: readonly PageItem[];\n canPrevious: boolean;\n canNext: boolean;\n goToPage: (page: number) => void;\n next: () => void;\n previous: () => void;\n }) => VNode[];\n }>,\n props: {\n as: asProp(\"nav\"),\n label: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTablePagination>\");\n const locale = useTableLocale();\n return () => {\n const { messages, count } = locale();\n const slotProps = {\n page: table.page,\n pageCount: table.pageCount,\n items: table.pageItems,\n canPrevious: table.canPreviousPage,\n canNext: table.canNextPage,\n goToPage: table.goToPage,\n next: table.nextPage,\n previous: table.previousPage,\n };\n const button = (\n label: string,\n content: string,\n disabled: boolean,\n onClick: () => void,\n current = false,\n ) =>\n h(\n \"button\",\n {\n type: \"button\",\n disabled,\n \"aria-label\": label,\n \"aria-current\": current ? \"page\" : undefined,\n \"data-current\": flag(current),\n onClick,\n },\n content,\n );\n return h(\n props.as,\n { \"aria-label\": props.label ?? messages.pagination },\n slots.default?.(slotProps) ?? [\n button(messages.previousPage, \"‹\", !table.canPreviousPage, table.previousPage),\n ...table.pageItems.map((item) =>\n item.type === \"gap\"\n ? h(\"span\", { key: item.key, \"aria-hidden\": \"true\", \"data-gap\": \"\" }, \"…\")\n : button(\n messages.page(count(item.page)),\n count(item.page).text,\n false,\n () => table.goToPage(item.page),\n item.current,\n ),\n ),\n button(messages.nextPage, \"›\", !table.canNextPage, table.nextPage),\n ],\n );\n };\n },\n});\n\n/** A page size picker. */\nexport const DataTablePageSize = defineComponent({\n name: \"DataTablePageSize\",\n props: {\n options: { type: Array as PropType<readonly number[]>, default: () => [5, 10, 20, 50] },\n label: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props) {\n const table = injectDataTable(\"<DataTablePageSize>\");\n const locale = useTableLocale();\n return () => {\n const sizes = props.options.includes(table.pageSize)\n ? props.options\n : [...props.options, table.pageSize].toSorted((left, right) => left - right);\n return h(\n \"select\",\n {\n value: table.pageSize,\n \"aria-label\": props.label ?? locale().messages.rowsPerPage,\n onChange: (event: Event) =>\n table.setPageSize(Number((event.target as HTMLSelectElement).value)),\n },\n sizes.map((size) =>\n h(\n \"option\",\n { key: size, value: size, selected: size === table.pageSize },\n locale().count(size).text,\n ),\n ),\n );\n };\n },\n});\n\n/** A checkbox per column that shows or hides it. The slot receives the columns and `toggle`. */\nexport const DataTableColumnVisibility = defineComponent({\n name: \"DataTableColumnVisibility\",\n slots: Object as SlotsType<{\n default?: (props: {\n columns: readonly { column: TableColumn<unknown>; visible: boolean }[];\n toggle: (columnId: string, visible?: boolean) => void;\n }) => VNode[];\n }>,\n props: {\n as: asProp(\"fieldset\"),\n legend: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableColumnVisibility>\");\n const locale = useTableLocale();\n return () => {\n const hidden = new Set(table.state.hiddenColumns);\n const columns = table.allColumns.map((column) => ({\n column,\n visible: !hidden.has(column.id),\n }));\n return h(\n props.as,\n slots.default?.({ columns, toggle: table.toggleColumn }) ?? [\n props.as === \"fieldset\" ? h(\"legend\", props.legend ?? locale().messages.columns) : null,\n ...columns.map(({ column, visible }) =>\n h(\"label\", { key: column.id, \"data-column\": column.id }, [\n h(\"input\", {\n type: \"checkbox\",\n checked: visible,\n disabled: visible && table.columns.length === 1,\n onChange: () => table.toggleColumn(column.id),\n }),\n column.header,\n ]),\n ),\n ],\n );\n };\n },\n});\n\n/**\n * A polite live region describing what is shown, such as \"1–10 of 57 rows\". Screen readers\n * announce it after a search, filter, or page change.\n */\nexport interface TableStatusSlotProps {\n readonly start: number;\n readonly end: number;\n readonly rowCount: number;\n readonly totalRowCount: number;\n readonly selectedCount: number;\n readonly loadState: LoadState;\n readonly loadedRowCount: number;\n readonly loadError: TableIssue | undefined;\n readonly canLoadMore: boolean;\n readonly retry: () => void;\n readonly loadNext: () => Promise<void>;\n readonly loadingChildrenCount: number;\n readonly childErrorCount: number;\n}\nexport const DataTableStatus = defineComponent({\n name: \"DataTableStatus\",\n slots: Object as SlotsType<{\n default?: (props: TableStatusSlotProps) => VNode[];\n }>,\n props: { as: asProp(\"p\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableStatus>\");\n const locale = useTableLocale();\n return () => {\n const { messages, count } = locale();\n const slotProps = {\n start: table.pageStart,\n end: table.pageEnd,\n rowCount: table.rowCount,\n totalRowCount: table.totalRowCount,\n selectedCount: table.selectedCount,\n loadState: table.loadState,\n loadedRowCount: table.loadedRowCount,\n loadError: table.loadError,\n canLoadMore: table.canLoadMore,\n retry: () => table.retry(),\n loadNext: () => table.loadNext(),\n loadingChildrenCount: table.tree\n ? table.processedRows.filter((row) => row.childStatus === \"loading\").length\n : 0,\n childErrorCount: table.tree\n ? table.processedRows.filter((row) => row.childStatus === \"error\").length\n : 0,\n };\n const text = table.loadingMode\n ? messages.loadedStatus({ loaded: count(table.loadedRowCount), state: table.loadState })\n : table.rowCount === 0\n ? messages.noRows\n : messages.rangeStatus({\n start: count(table.pageStart),\n end: count(table.pageEnd),\n total: count(table.rowCount),\n selected: count(table.selectedCount),\n });\n return h(\n props.as,\n { role: \"status\", \"aria-live\": \"polite\" },\n slots.default?.(slotProps) ??\n [\n text,\n slotProps.loadingChildrenCount ? messages.loadingChildren : \"\",\n slotProps.childErrorCount ? messages.childrenError : \"\",\n ]\n .filter((part) => part !== \"\")\n .join(\" \"),\n );\n };\n },\n});\n","import {\n injectDataTable,\n useTableLocale,\n type AnyDataTableBinding,\n type TableLocale,\n} from \"@vueye-table/vue\";\nimport { defineComponent, h, type PropType, type VNode } from \"vue\";\n\n/** Keep this visual sentinel out of the live region and logical data-row count. */\nexport function loadSentinel(\n table: AnyDataTableBinding,\n colspan: number,\n locale?: TableLocale,\n): VNode | undefined {\n return table.loadingMode === \"cursor\" &&\n table.loadedRowCount > 0 &&\n (table.loadState === \"loading\" || table.loadState === \"streaming\")\n ? h(\"tr\", { key: \"vt-load-sentinel\", \"data-load-sentinel\": \"\", \"aria-hidden\": \"true\" }, [\n h(\n \"td\",\n { colspan: Math.max(1, colspan), class: \"vt-load-sentinel\" },\n locale?.messages.loadingMoreRows ?? \"Loading more rows…\",\n ),\n ])\n : undefined;\n}\n\n/** A keyboard-accessible alternative to automatic virtual-end loading, with error recovery. */\nexport const DataTableLoadMore = defineComponent({\n name: \"DataTableLoadMore\",\n props: {\n label: { type: String as PropType<string | undefined>, default: undefined },\n retryLabel: { type: String as PropType<string | undefined>, default: undefined },\n loadingLabel: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props) {\n const table = injectDataTable(\"<DataTableLoadMore>\");\n const locale = useTableLocale();\n return () =>\n table.loadState === \"error\"\n ? h(\n \"button\",\n { type: \"button\", onClick: () => table.retry() },\n props.retryLabel ?? locale().messages.retryLoading,\n )\n : table.loadingMode === \"cursor\" && table.loadState !== \"done\"\n ? h(\n \"button\",\n {\n type: \"button\",\n disabled: !table.canLoadMore,\n onClick: () => {\n void table.loadNext();\n },\n },\n table.loadState === \"loading\" || table.loadState === \"streaming\"\n ? (props.loadingLabel ?? locale().messages.loadingRows)\n : (props.label ?? locale().messages.loadMoreRows),\n )\n : null;\n },\n});\n","import {\n formatValue,\n type EditorSpec,\n type TableColumn,\n type TableIssue,\n type TableRow,\n type EditResult,\n} from \"@vueye-table/core\";\nimport { useTableLocale } from \"@vueye-table/vue\";\nimport {\n computed,\n defineComponent,\n h,\n onMounted,\n ref,\n useId,\n type PropType,\n type VNodeChild,\n} from \"vue\";\n\n/** Shared by native editors and application-owned editor slots. */\nexport interface CellEditorSlotProps {\n readonly row: TableRow<unknown>;\n readonly column: TableColumn<unknown>;\n readonly value: unknown;\n readonly draft: string;\n readonly spec: EditorSpec;\n readonly finish: (direction?: \"up\" | \"down\" | \"left\" | \"right\") => void;\n readonly input: (text: string) => void;\n /** Alias retained for existing headless grid slots. */\n readonly update: (text: string) => void;\n /** Strings pass through parse; typed values use core's value-edit path. */\n readonly commit: (\n value?: unknown,\n ) => EditResult<unknown> | Promise<EditResult<unknown>> | undefined;\n readonly cancel: () => void;\n readonly issues: readonly TableIssue[];\n readonly pending: boolean;\n /** Bind to a custom field to associate its validation message. */\n readonly attrs: Readonly<Record<string, string | undefined>>;\n}\n\nexport function editorText(value: unknown, kind: EditorSpec[\"kind\"]): string {\n if (value === null || value === undefined) return \"\";\n if (kind === \"date\" && value instanceof Date)\n return Number.isFinite(value.getTime()) ? value.toISOString().slice(0, 10) : \"\";\n return formatValue(value);\n}\n\nexport const cellEditorProps = {\n editor: { type: Object as PropType<CellEditorSlotProps>, required: true },\n spec: { type: Object as PropType<EditorSpec>, default: () => ({ kind: \"text\" }) },\n /** Keyboard movement is owned by the surrounding cell. */\n finish: {\n type: Function as PropType<\n ((direction?: \"up\" | \"down\" | \"left\" | \"right\") => void) | undefined\n >,\n default: undefined,\n },\n autofocus: { type: Boolean, default: true },\n blurCommit: { type: Boolean, default: true },\n tabCommit: { type: Boolean, default: true },\n} as const;\n\n/** Plain native fields. Select results are searched and capped at 50 mounted options. */\nexport const DataCellEditor = defineComponent({\n name: \"DataCellEditor\",\n props: cellEditorProps,\n setup(props) {\n const locale = useTableLocale();\n const field = ref<HTMLInputElement | HTMLSelectElement>();\n const query = ref(\"\");\n // The caller resolves the spec at edit entry, not on every keystroke.\n const options = props.spec.options ?? [];\n const matches = computed(() => {\n const search = query.value.trim().toLocaleLowerCase();\n return options\n .map((value, index) => ({ value, index }))\n .filter(({ value }) =>\n String(value ?? \"\")\n .toLocaleLowerCase()\n .includes(search),\n );\n });\n onMounted(() => {\n if (!props.autofocus) return;\n field.value?.focus();\n if (\n field.value &&\n \"setSelectionRange\" in field.value &&\n [\"text\", \"number\"].includes(props.spec.kind)\n )\n field.value.setSelectionRange(field.value.value.length, field.value.value.length);\n });\n const finish = (direction?: \"up\" | \"down\" | \"left\" | \"right\"): void => {\n if (props.finish) props.finish(direction);\n else void props.editor.commit();\n };\n const keydown = (event: KeyboardEvent): void => {\n if (event.isComposing) return;\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n if (!props.editor.pending) props.editor.cancel();\n } else if (event.key === \"Enter\" || event.key === \"Tab\") {\n if (event.key === \"Tab\" && !props.tabCommit) return;\n event.preventDefault();\n event.stopPropagation();\n if (!props.editor.pending)\n finish(\n event.key === \"Tab\"\n ? event.shiftKey\n ? \"left\"\n : \"right\"\n : event.shiftKey\n ? \"up\"\n : \"down\",\n );\n }\n };\n const paste = (event: ClipboardEvent): void => {\n const text = event.clipboardData?.getData(\"text/plain\");\n if (text === undefined || props.editor.pending) return;\n event.preventDefault();\n const target = event.target as HTMLInputElement;\n const start = target.selectionStart ?? 0;\n const end = target.selectionEnd ?? target.value.length;\n props.editor.input(target.value.slice(0, start) + text + target.value.slice(end));\n };\n return () => {\n const { editor, spec } = props;\n const { messages, count } = locale();\n const attrs = {\n ...editor.attrs,\n \"aria-label\": messages.editCell(editor.column.header),\n \"data-editor\": \"\",\n disabled: editor.pending,\n onKeydown: keydown,\n };\n if (spec.kind === \"select\") {\n const shown = matches.value.slice(0, 50);\n return h(\n \"div\",\n {\n \"data-select-editor\": \"\",\n onKeydown: (event: KeyboardEvent) => {\n if (event.key === \"Escape\") keydown(event);\n },\n },\n [\n h(\"input\", {\n ref: field,\n type: \"search\",\n value: query.value,\n \"aria-label\": messages.searchOptions(editor.column.header),\n disabled: editor.pending,\n onInput: (event: Event) => {\n query.value = (event.target as HTMLInputElement).value;\n },\n onKeydown: (event: KeyboardEvent) => {\n if (event.key === \"Enter\" && shown[0]) {\n event.preventDefault();\n void editor.commit(shown[0].value);\n } else keydown(event);\n },\n }),\n h(\n \"select\",\n {\n ...attrs,\n value: options.findIndex((value) => Object.is(value, editor.value)),\n size: Math.max(2, Math.min(5, shown.length)),\n onChange: (event: Event) => {\n const index = Number((event.target as HTMLSelectElement).value);\n if (index >= 0) void editor.commit(options[index]);\n },\n },\n shown.map(({ value, index }) =>\n h(\n \"option\",\n { key: index, value: index },\n value === null || value === undefined ? messages.emptyOption : String(value),\n ),\n ),\n ),\n h(\n \"span\",\n { role: \"status\", \"data-editor-hint\": \"\" },\n matches.value.length === 0\n ? messages.noMatchingOptions\n : matches.value.length > 50\n ? messages.firstMatchesOnly(count(50))\n : messages.optionCount(count(matches.value.length)),\n ),\n ],\n );\n }\n return h(\"input\", {\n ...attrs,\n ref: field,\n type: spec.kind === \"date\" ? \"date\" : spec.kind === \"checkbox\" ? \"checkbox\" : \"text\",\n inputmode: spec.kind === \"number\" ? \"decimal\" : undefined,\n value: editor.draft,\n checked: spec.kind === \"checkbox\" ? editor.value === true : undefined,\n onInput:\n spec.kind === \"checkbox\"\n ? undefined\n : (event: Event) => editor.input((event.target as HTMLInputElement).value),\n onChange:\n spec.kind === \"checkbox\"\n ? (event: Event) => editor.commit((event.target as HTMLInputElement).checked)\n : undefined,\n onBlur: () => {\n if (props.blurCommit && !editor.pending) finish();\n },\n onPaste: spec.kind === \"checkbox\" ? undefined : paste,\n });\n };\n },\n});\n\n/** The cell owns the id so it remains stable while its editor mounts and unmounts. */\nexport function issueAttrs(\n id: string,\n issues: readonly TableIssue[],\n pending: boolean,\n): Readonly<Record<string, string | undefined>> {\n return {\n \"aria-invalid\": issues.length ? \"true\" : undefined,\n \"aria-describedby\": issues.length ? id : undefined,\n \"aria-busy\": pending ? \"true\" : undefined,\n };\n}\n\nexport function editorIssues(\n id: string,\n issues: readonly TableIssue[],\n pending = false,\n): VNodeChild {\n return issues.length || pending\n ? h(\n \"span\",\n { id, \"data-edit-issues\": \"\", role: \"status\" },\n pending ? \"Checking changes…\" : issues.map((problem) => problem.message).join(\" \"),\n )\n : null;\n}\n\nexport function useEditorId(): string {\n return `vt-edit-${useId()}`;\n}\n","import type { TableColumn, TableRow } from \"@vueye-table/core\";\nimport {\n useVirtualColumns,\n useVirtualRows,\n type AnyDataTableBinding,\n type DataGridBinding,\n type VirtualBinding,\n type VirtualColumnItem,\n type VirtualRowItem,\n} from \"@vueye-table/vue\";\nimport {\n computed,\n onMounted,\n watch,\n defineComponent,\n h,\n inject,\n provide,\n shallowRef,\n type InjectionKey,\n type PropType,\n type ShallowRef,\n type SlotsType,\n type VNode,\n type VNodeChild,\n} from \"vue\";\n\nimport { asProp } from \"./shared\";\n\nexport interface ComponentVirtualOptions {\n readonly rowHeight?: number | ((index: number) => number) | undefined;\n readonly overscan?: number | undefined;\n readonly initialCount?: number | undefined;\n readonly columnWidth?: number | undefined;\n readonly columnOverscan?: number | undefined;\n readonly initialColumnCount?: number | undefined;\n}\n\n/** Shared opt-in renderer props. Options are applied when the virtual renderer is created. */\nexport const virtualProps = {\n virtual: {\n type: [Boolean, Object] as PropType<boolean | ComponentVirtualOptions>,\n default: false,\n },\n height: { type: String as PropType<string | undefined>, default: undefined },\n rowHeight: { type: Number, default: 40 },\n overscan: { type: Number, default: 5 },\n virtualColumns: { type: Boolean, default: false },\n columnWidth: { type: Number, default: 120 },\n} as const;\n\nexport function virtualOptions(props: {\n readonly virtual: boolean | ComponentVirtualOptions;\n readonly rowHeight: number;\n readonly overscan: number;\n readonly columnWidth: number;\n}): ComponentVirtualOptions {\n return {\n rowHeight: props.rowHeight,\n overscan: props.overscan,\n columnWidth: props.columnWidth,\n ...(typeof props.virtual === \"object\" ? props.virtual : {}),\n };\n}\n\nconst viewportKey: InjectionKey<ShallowRef<HTMLElement | null | undefined>> = Symbol(\"vt-viewport\");\nexport interface ComponentVirtualBinding {\n readonly rows: VirtualBinding<VirtualRowItem<unknown>>;\n readonly columns: VirtualBinding<VirtualColumnItem<unknown>> | undefined;\n readonly rowItems: readonly VirtualRowItem<unknown>[];\n readonly columnItems: readonly VirtualColumnItem<unknown>[] | undefined;\n readonly gutter: number;\n}\nconst virtualKey: InjectionKey<ComponentVirtualBinding> = Symbol(\"vt-virtual-renderer\");\nexport function injectVirtual(): ComponentVirtualBinding | undefined {\n return inject(virtualKey, undefined);\n}\n\n/** A scroll container for a headless table/grid. It supplies its element without global reads. */\nexport const DataTableViewport = defineComponent({\n name: \"DataTableViewport\",\n slots: Object as SlotsType<{ default?: () => VNode[] }>,\n props: { as: asProp(\"div\"), height: { type: String, default: \"24rem\" } },\n setup(props, { slots, expose }) {\n const element = shallowRef<HTMLElement | null>(null);\n provide(viewportKey, element);\n expose({ element });\n return () =>\n h(\n props.as,\n {\n ref: element,\n \"data-virtual-viewport\": \"\",\n style: { height: props.height, overflow: \"auto\", overflowAnchor: \"none\" },\n },\n slots.default?.(),\n );\n },\n});\n\nexport function createComponentVirtual(\n table: AnyDataTableBinding,\n options: ComponentVirtualOptions,\n tableElement: () => HTMLElement | null | undefined,\n grid?: DataGridBinding<unknown>,\n virtualColumns = false,\n gutter = 0,\n): ComponentVirtualBinding {\n const scrollElement = inject(viewportKey, shallowRef<HTMLElement | null>(null));\n const rows = useVirtualRows(table, {\n scrollElement,\n estimateRowHeight: options.rowHeight,\n overscan: options.overscan,\n initialCount: options.initialCount,\n grid,\n scrollMargin: () => tableElement()?.querySelector(\"thead\")?.getBoundingClientRect().height ?? 0,\n });\n onMounted(() => {\n watch(\n () => [rows.endIndex, table.renderItems.length, table.canLoadMore] as const,\n () => {\n if (\n table.loadingMode === \"cursor\" &&\n table.canLoadMore &&\n rows.endIndex >= table.renderItems.length - 1 - table.endThreshold\n )\n void table.loadNext();\n },\n { immediate: true },\n );\n });\n const columns =\n grid && virtualColumns\n ? useVirtualColumns(grid, {\n scrollElement,\n estimateColumnWidth: (index) => table.columns[index]?.width ?? options.columnWidth ?? 120,\n overscan: options.columnOverscan ?? 1,\n initialCount: options.initialColumnCount ?? 5,\n scrollMargin: gutter,\n })\n : undefined;\n const pinnedRows = computed(() => {\n const result = [...rows.items];\n const positions = new Set([grid?.selection?.focus.row, grid?.editor?.position.row]);\n for (const position of positions) {\n if (\n position === undefined ||\n result.some(\n (item) => item.renderItem.kind === \"row\" && item.renderItem.rowIndex === position,\n )\n )\n continue;\n const direct = table.renderItems[position];\n const index =\n direct?.kind === \"row\" && direct.rowIndex === position\n ? position\n : table.renderItems.findIndex(\n (item) => item.kind === \"row\" && item.rowIndex === position,\n );\n const item = rows.getItem(index);\n if (item) result.push(item);\n }\n return result.sort((a, b) => a.index - b.index);\n });\n const pinnedColumns = computed(() => {\n if (!columns) return undefined;\n const result = [...columns.items];\n const positions = new Set([grid?.selection?.focus.column, grid?.editor?.position.column]);\n for (const position of positions) {\n if (position === undefined || result.some((item) => item.index === position)) continue;\n const item = columns.getItem(position);\n if (item) result.push(item);\n }\n return result.sort((a, b) => a.index - b.index);\n });\n const binding: ComponentVirtualBinding = {\n rows,\n columns,\n gutter,\n get rowItems() {\n return pinnedRows.value;\n },\n get columnItems() {\n return pinnedColumns.value;\n },\n };\n provide(virtualKey, binding);\n return binding;\n}\n\n/** Create composables only for an enabled renderer, preserving the ordinary component path. */\nexport const VirtualContent = defineComponent({\n name: \"DataTableVirtualContent\",\n props: {\n table: { type: Object as PropType<AnyDataTableBinding>, required: true },\n options: { type: Object as PropType<ComponentVirtualOptions>, required: true },\n tableElement: {\n type: Function as PropType<() => HTMLElement | null | undefined>,\n required: true,\n },\n grid: { type: Object as PropType<DataGridBinding<unknown>>, default: undefined },\n virtualColumns: { type: Boolean, default: false },\n gutter: { type: Number, default: 0 },\n render: {\n type: Function as PropType<(binding: ComponentVirtualBinding) => VNode>,\n required: true,\n },\n },\n setup(props) {\n const binding = createComponentVirtual(\n props.table,\n props.options,\n props.tableElement,\n props.grid,\n props.virtualColumns,\n props.gutter,\n );\n return () => props.render(binding);\n },\n});\n\nexport function rowSpacer(size: number, colspan: number, key: string): VNode | null {\n return size > 0\n ? h(\n \"tr\",\n {\n key,\n \"aria-hidden\": \"true\",\n role: \"presentation\",\n \"data-virtual-spacer\": \"\",\n style: { height: `${size}px` },\n },\n [\n h(\"td\", {\n colspan: Math.max(1, colspan),\n style: { height: `${size}px`, padding: \"0\", border: \"0\", lineHeight: \"0\" },\n }),\n ],\n )\n : null;\n}\nexport function columnSpacer(size: number, tag: \"th\" | \"td\", key: string): VNode | null {\n return size > 0\n ? h(tag, {\n key,\n \"aria-hidden\": \"true\",\n role: \"presentation\",\n \"data-virtual-spacer\": \"\",\n style: { width: `${size}px`, minWidth: `${size}px`, padding: \"0\", border: \"0\" },\n })\n : null;\n}\nexport function renderColumns(\n tableColumns: readonly TableColumn<unknown>[],\n binding: ComponentVirtualBinding | undefined,\n render: (column: TableColumn<unknown>, index: number) => VNodeChild,\n tag: \"th\" | \"td\",\n): VNodeChild[] {\n if (!binding?.columns || !binding.columnItems) return tableColumns.map(render);\n const result: VNodeChild[] = [];\n let end = 0;\n for (const item of binding.columnItems) {\n result.push(\n columnSpacer(item.start - end, tag, `gap-${item.index}`),\n render(item.column, item.index),\n );\n end = item.start + item.size;\n }\n result.push(columnSpacer(binding.columns.totalSize - end, tag, \"gap-end\"));\n return result;\n}\nexport function renderRows(\n binding: ComponentVirtualBinding,\n colspan: number,\n render: (item: VirtualRowItem<unknown>) => VNodeChild,\n): VNodeChild[] {\n const result: VNodeChild[] = [];\n let end = 0;\n for (const item of binding.rowItems) {\n result.push(rowSpacer(item.start - end, colspan, `gap-${item.index}`), render(item));\n end = item.start + item.size;\n }\n result.push(rowSpacer(binding.rows.totalSize - end, colspan, \"gap-end\"));\n return result;\n}\nexport function virtualColgroup(\n tableColumns: readonly TableColumn<unknown>[],\n binding: ComponentVirtualBinding,\n): VNode | null {\n if (!binding.columns || !binding.columnItems) return null;\n const cols: VNodeChild[] = binding.gutter\n ? [h(\"col\", { style: { width: `${binding.gutter}px` } })]\n : [];\n let end = 0;\n for (const item of binding.columnItems) {\n if (item.start > end) cols.push(h(\"col\", { style: { width: `${item.start - end}px` } }));\n cols.push(h(\"col\", { style: { width: `${item.size}px` } }));\n end = item.start + item.size;\n }\n if (binding.columns.totalSize > end)\n cols.push(h(\"col\", { style: { width: `${binding.columns.totalSize - end}px` } }));\n void tableColumns;\n return h(\"colgroup\", cols);\n}\nexport function virtualRow(\n binding: ComponentVirtualBinding,\n row: TableRow<unknown>,\n): VirtualRowItem<unknown> | undefined {\n return binding.rowItems.find(\n (item) => item.renderItem.kind === \"row\" && item.renderItem.row.key === row.key,\n );\n}\n","import { getRowItemKey, gridCommand, type RowKey, type TableRow } from \"@vueye-table/core\";\nimport {\n injectDataGrid,\n injectDataTable,\n useTableLocale,\n type AnyDataTableBinding,\n} from \"@vueye-table/vue\";\nimport {\n defineComponent,\n computed,\n h,\n inject,\n nextTick,\n provide,\n shallowRef,\n useId,\n type ComponentPublicInstance,\n type InjectionKey,\n type PropType,\n type SlotsType,\n type VNode,\n type VNodeChild,\n} from \"vue\";\n\nimport { asProp, directionOf, rowProp } from \"./shared\";\nimport { injectVirtual, type ComponentVirtualBinding } from \"./virtual\";\n\nexport const hierarchyProps = {\n treeColumn: { type: String as PropType<string | undefined>, default: undefined },\n keepAliveDetail: { type: Boolean, default: false },\n} as const;\ninterface Hierarchy {\n readonly id: string;\n readonly table: AnyDataTableBinding;\n readonly treeColumn: string | undefined;\n readonly keepAliveDetail: boolean;\n readonly focus: ReturnType<typeof shallowRef<RowKey | undefined>>;\n readonly focusKey: RowKey | undefined;\n}\nconst hierarchyKey: InjectionKey<Hierarchy> = Symbol(\"vueye-table-hierarchy\");\nexport function provideHierarchy(\n table: AnyDataTableBinding,\n props: { readonly treeColumn?: string | undefined; readonly keepAliveDetail: boolean },\n): Hierarchy {\n const focus = shallowRef<RowKey>();\n const focusKey = computed(() =>\n table.rows.some((row) => row.key === focus.value) ? focus.value : table.rows[0]?.key,\n );\n const context: Hierarchy = {\n id: `vt-tree-${useId()}`,\n table,\n get treeColumn() {\n return props.treeColumn;\n },\n get keepAliveDetail() {\n return props.keepAliveDetail;\n },\n focus,\n get focusKey() {\n return focusKey.value;\n },\n };\n provide(hierarchyKey, context);\n return context;\n}\nexport function injectHierarchy(): Hierarchy | undefined {\n return inject(hierarchyKey, undefined);\n}\nexport function resolveTreeColumn(table: AnyDataTableBinding, column?: string): string | undefined {\n return table.columns.find((candidate) => candidate.id === column)?.id ?? table.columns[0]?.id;\n}\nfunction itemId(\n context: Hierarchy | undefined,\n row: TableRow<unknown>,\n detail = false,\n): string | undefined {\n return context\n ? `${context.id}-${encodeURIComponent(getRowItemKey(row.key, detail ? \"detail\" : \"row\"))}`\n : undefined;\n}\nconst siblingCache = new WeakMap<\n readonly TableRow<unknown>[],\n ReadonlyMap<RowKey, { position: number; size: number; index: number }>\n>();\nexport function hierarchyRowAttrs(\n table: AnyDataTableBinding,\n row: TableRow<unknown>,\n context?: Hierarchy,\n): Record<string, unknown> {\n if (!table.tree) return {};\n let positions = siblingCache.get(table.processedRows);\n if (!positions) {\n const groups = new Map<RowKey | undefined, TableRow<unknown>[]>();\n for (const candidate of table.processedRows) {\n const group = groups.get(candidate.parentKey) ?? [];\n group.push(candidate);\n groups.set(candidate.parentKey, group);\n }\n const indices = new Map(table.processedRows.map((candidate, index) => [candidate.key, index]));\n const result = new Map<RowKey, { position: number; size: number; index: number }>();\n for (const group of groups.values())\n group.forEach((candidate, index) =>\n result.set(candidate.key, {\n position: index + 1,\n size: group.length,\n index: indices.get(candidate.key)!,\n }),\n );\n positions = result;\n siblingCache.set(table.processedRows, result);\n }\n const position = positions.get(row.key);\n return {\n id: itemId(context, row),\n \"data-tree-key\": getRowItemKey(row.key),\n \"aria-level\": row.depth + 1,\n \"aria-expanded\": row.canExpand ? String(row.isExpanded) : undefined,\n \"aria-setsize\": position?.size,\n \"aria-posinset\": position?.position,\n \"aria-rowindex\": position ? position.index + 2 : undefined,\n \"aria-busy\": row.childStatus === \"loading\" ? \"true\" : undefined,\n };\n}\n\n/** Row-focused table navigation; cell-focused grids use the same pure core commands. */\nexport function treeKeydown(\n event: KeyboardEvent,\n context: Hierarchy,\n virtual?: ComponentVirtualBinding,\n): void {\n const table = context.table;\n const target = event.target as HTMLElement | null;\n if (!table.tree || !target?.closest) return;\n if (\n target.closest(\"input, textarea, select, [contenteditable=true]\") ||\n (target.closest(\"button\") && !target.closest(\"[data-expand-toggle]\"))\n )\n return;\n const key = target.closest(\"tr\")?.getAttribute(\"data-tree-key\");\n const index = table.rows.findIndex((row) => getRowItemKey(row.key) === key);\n const row = table.rows[index];\n if (!row) return;\n const command = gridCommand(\n {\n key: event.key,\n shiftKey: event.shiftKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n altKey: event.altKey,\n direction: directionOf(target),\n },\n { canExpand: row.canExpand, expanded: row.isExpanded },\n );\n let next = row;\n if (command?.type === \"tree\") {\n if (command.action === \"expand\" || command.action === \"collapse\")\n table.toggleExpanded(row.key, command.action === \"expand\");\n else if (command.action === \"siblings\") {\n for (const sibling of table.processedRows.filter(\n (candidate) => candidate.parentKey === row.parentKey && candidate.canExpand,\n ))\n table.toggleExpanded(sibling.key, true);\n } else if (command.action === \"child\")\n next = table.rows.find((candidate) => candidate.parentKey === row.key) ?? row;\n else next = table.rows.find((candidate) => candidate.key === row.parentKey) ?? row;\n } else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")\n next = table.rows[index + (event.key === \"ArrowDown\" ? 1 : -1)] ?? row;\n else if (event.key === \"Home\" || event.key === \"End\")\n next = table.rows[event.key === \"Home\" ? 0 : table.rows.length - 1] ?? row;\n else return;\n event.preventDefault();\n const root = target.closest(\"table\");\n context.focus.value = next.key;\n virtual?.rows.scrollToKey(next.key);\n const id = itemId(context, next);\n void nextTick(() => root?.ownerDocument.getElementById(id ?? \"\")?.focus());\n}\n\nexport const expandToggleProps = {\n row: rowProp,\n controls: { type: String as PropType<string | undefined>, default: undefined },\n expandLabel: { type: String as PropType<string | undefined>, default: undefined },\n collapseLabel: { type: String as PropType<string | undefined>, default: undefined },\n} as const;\nexport const treeCellProps = { row: rowProp, as: asProp(\"div\") } as const;\nexport const DataTableExpandToggle = defineComponent({\n name: \"DataTableExpandToggle\",\n props: expandToggleProps,\n slots: Object as SlotsType<{\n default?: (props: { row: TableRow<unknown>; expanded: boolean }) => VNodeChild;\n }>,\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableExpandToggle>\");\n const context = injectHierarchy();\n const grid = injectDataGrid();\n const locale = useTableLocale();\n const label = (): string =>\n props.row.isExpanded\n ? (props.collapseLabel ?? locale().messages.collapseRow)\n : (props.expandLabel ?? locale().messages.expandRow);\n return () =>\n props.row.canExpand\n ? h(\n \"button\",\n {\n type: \"button\",\n \"data-expand-toggle\": \"\",\n tabindex: table.tree ? -1 : undefined,\n \"aria-expanded\": String(props.row.isExpanded),\n \"aria-controls\":\n props.controls ??\n (!table.tree\n ? itemId(context, props.row, true)\n : props.row.isExpanded\n ? table.rows\n .filter((row) => row.parentKey === props.row.key)\n .map((row) => itemId(context, row))\n .filter(Boolean)\n .join(\" \") || undefined\n : undefined),\n \"aria-label\": label(),\n onMousedown: (event: Event) => event.stopPropagation(),\n onDblclick: (event: Event) => event.stopPropagation(),\n onClick: (event: Event) => {\n event.stopPropagation();\n if (grid?.table === table)\n grid.focusCell({\n row: table.rows.indexOf(props.row),\n column: Math.max(\n 0,\n table.columns.findIndex(\n (column) => column.id === resolveTreeColumn(table, context?.treeColumn),\n ),\n ),\n });\n table.toggleExpanded(props.row.key);\n if (grid?.table === table)\n void nextTick(() => (event.target as HTMLElement).closest(\"table\")?.focus());\n },\n },\n slots.default?.({ row: props.row, expanded: props.row.isExpanded }) ?? label(),\n )\n : null;\n },\n});\n\nexport const DataTableTreeCell = defineComponent({\n name: \"DataTableTreeCell\",\n props: treeCellProps,\n slots: Object as SlotsType<{\n default?: () => VNodeChild;\n toggle?: (props: { row: TableRow<unknown> }) => VNodeChild;\n }>,\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableTreeCell>\");\n const context = injectHierarchy();\n const grid = injectDataGrid();\n const locale = useTableLocale();\n return () =>\n h(\n props.as,\n {\n class: \"vt-tree-cell\",\n \"data-tree-cell\": \"\",\n style: {\n paddingInlineStart: `calc(var(--vt-tree-indent, 1.25rem) * ${props.row.depth})`,\n },\n },\n [\n h(\n \"span\",\n { class: \"vt-tree-toggle\" },\n slots.toggle?.({ row: props.row }) ?? h(DataTableExpandToggle, { row: props.row }),\n ),\n h(\"span\", { class: \"vt-tree-label\" }, [slots.default?.()]),\n props.row.childStatus === \"loading\"\n ? h(\"span\", { class: \"vt-tree-loading\" }, locale().messages.loadingChildren)\n : null,\n props.row.childStatus === \"error\"\n ? h(\"span\", { class: \"vt-tree-error\" }, [\n `${locale().messages.childrenError} `,\n h(\n \"button\",\n {\n type: \"button\",\n class: \"vt-tree-retry\",\n onMousedown: (event: Event) => event.stopPropagation(),\n onClick: (event: Event) => {\n event.stopPropagation();\n const element = (event.currentTarget as HTMLElement).closest(\"table\");\n if (grid?.table === table)\n grid.focusCell({\n row: table.rows.indexOf(props.row),\n column: Math.max(\n 0,\n table.columns.findIndex(\n (column) =>\n column.id === resolveTreeColumn(table, context?.treeColumn),\n ),\n ),\n });\n table.toggleExpanded(props.row.key, true);\n void nextTick(() => {\n if (grid?.table === table) element?.focus();\n else\n element?.ownerDocument\n .getElementById(itemId(context, props.row) ?? \"\")\n ?.focus();\n });\n },\n },\n locale().messages.retryChildren,\n ),\n ])\n : null,\n ],\n );\n },\n});\n\n/** One full-width detail; retained collapsed content remains hidden and unmeasured. */\nexport const DataTableDetailRow = defineComponent({\n name: \"DataTableDetailRow\",\n props: {\n row: rowProp,\n colspan: { type: Number, default: undefined },\n hidden: { type: Boolean, default: false },\n keepAlive: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n },\n slots: Object as SlotsType<{ default?: (props: { row: TableRow<unknown> }) => VNodeChild }>,\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableDetailRow>\");\n const context = injectHierarchy();\n const virtual = injectVirtual();\n let opened = false;\n return () => {\n if (props.row.isExpanded && !props.hidden) opened = true;\n if (\n !opened ||\n ((!props.row.isExpanded || props.hidden) && !(props.keepAlive ?? context?.keepAliveDetail))\n )\n return null;\n const hidden = props.hidden || !props.row.isExpanded;\n return h(\n \"tr\",\n {\n id: itemId(context, props.row, true),\n \"data-detail\": \"\",\n hidden,\n ...(virtual && !hidden\n ? {\n ref: (target: Element | ComponentPublicInstance | null) =>\n virtual.rows.measureElement(target, getRowItemKey(props.row.key, \"detail\")),\n }\n : {}),\n },\n [\n h(\n \"td\",\n {\n colspan: Math.max(1, props.colspan ?? table.columns.length),\n class: \"vt-detail-cell\",\n },\n [slots.default?.({ row: props.row })],\n ),\n ],\n );\n };\n },\n});\n\nexport interface DetailSlotProps {\n readonly row: TableRow<unknown>;\n readonly rowIndex: number;\n}\nexport function createDetails(\n table: AnyDataTableBinding,\n slot: () => ((props: DetailSlotProps) => VNodeChild) | undefined,\n colspan: () => number,\n): {\n render(row: TableRow<unknown>, rowIndex: number): VNode;\n retained(visible: ReadonlySet<RowKey>): VNode[];\n} {\n const context = injectHierarchy();\n const visited = new Set<RowKey>();\n const render = (row: TableRow<unknown>, rowIndex: number, hidden = false): VNode => {\n if (!hidden && context?.keepAliveDetail) visited.add(row.key);\n return h(\n DataTableDetailRow,\n { key: getRowItemKey(row.key, \"detail\"), row, colspan: colspan(), hidden },\n { default: () => slot()?.({ row, rowIndex }) },\n );\n };\n return {\n render,\n retained(visible) {\n if (!context?.keepAliveDetail) return [];\n return [...visited].flatMap((key) => {\n const index = table.rows.findIndex((row) => row.key === key);\n if (index < 0) {\n visited.delete(key);\n return [];\n }\n return visible.has(key) ? [] : [render(table.rows[index]!, index, true)];\n });\n },\n };\n}\n","import type { SortInfo, TableColumn, TableRow } from \"@vueye-table/core\";\nimport {\n injectDataTable,\n provideDataTable,\n useTableLocale,\n type AnyDataTableBinding,\n type DataTableBinding,\n} from \"@vueye-table/vue\";\nimport {\n defineComponent,\n Fragment,\n h,\n shallowRef,\n type PropType,\n type ShallowRef,\n type SlotsType,\n type VNode,\n type ComponentPublicInstance,\n type VNodeChild,\n} from \"vue\";\n\nimport { injectEditingGrid } from \"./editing\";\nimport {\n createDetails,\n DataTableTreeCell,\n hierarchyProps,\n hierarchyRowAttrs,\n injectHierarchy,\n provideHierarchy,\n resolveTreeColumn,\n treeKeydown,\n type DetailSlotProps,\n} from \"./hierarchy\";\nimport { loadSentinel } from \"./loading\";\nimport {\n asProp,\n columnProp,\n flag,\n rowProp,\n columnLayoutProps,\n provideColumnOffset,\n injectColumnOffset,\n} from \"./shared\";\nimport {\n createComponentVirtual,\n injectVirtual,\n renderColumns,\n renderRows,\n rowSpacer,\n virtualProps,\n virtualOptions,\n virtualRow,\n VirtualContent,\n type ComponentVirtualBinding,\n} from \"./virtual\";\n\n/**\n * Provides a table to the components inside it and renders the table element. Without a default\n * slot it renders a complete header and body.\n */\nexport const DataTableRoot = defineComponent({\n name: \"DataTableRoot\",\n slots: Object as SlotsType<{\n default?: (props: { table: DataTableBinding<unknown> }) => VNode[];\n }>,\n props: {\n table: { type: Object as PropType<AnyDataTableBinding>, required: true },\n as: asProp(\"table\"),\n ...virtualProps,\n ...hierarchyProps,\n ...columnLayoutProps,\n },\n setup(props, { slots }) {\n provideDataTable(props.table);\n provideColumnOffset(() => props.leadingColumns);\n const hierarchy = provideHierarchy(props.table, props);\n const element = shallowRef<HTMLElement>();\n const editingGrid = injectEditingGrid();\n const render = (virtual?: ComponentVirtualBinding) =>\n h(\n props.as,\n {\n role: props.table.tree ? \"treegrid\" : undefined,\n \"aria-rowcount\":\n (props.table.tree ? props.table.processedRows.length : props.table.rowCount) + 1,\n \"aria-colcount\": props.table.columns.length + props.leadingColumns,\n \"aria-busy\":\n props.table.loadState === \"loading\" || props.table.loadState === \"streaming\"\n ? \"true\"\n : undefined,\n \"data-empty\": flag(props.table.rowCount === 0),\n onKeydown: (event: KeyboardEvent) => treeKeydown(event, hierarchy, virtual),\n ...(virtual ? { ref: element, \"data-virtual\": \"\" } : {}),\n },\n slots.default?.({ table: props.table }) ?? [h(DataTableHeader), h(DataTableBody)],\n );\n return () =>\n props.virtual\n ? h(VirtualContent, {\n table: props.table,\n ...(editingGrid ? { grid: editingGrid } : {}),\n options: virtualOptions(props),\n tableElement: () => element.value,\n render,\n })\n : render();\n },\n});\n\nexport const DataTableCaption = defineComponent({\n name: \"DataTableCaption\",\n slots: Object as SlotsType<{ default?: () => VNode[] }>,\n props: { as: asProp(\"caption\") },\n setup(props, { slots }) {\n return () => h(props.as, slots.default?.());\n },\n});\n\n/** The header section. Without a slot it renders one header cell per visible column. */\nexport const DataTableHeader = defineComponent({\n name: \"DataTableHeader\",\n slots: Object as SlotsType<{\n default?: (props: { columns: readonly TableColumn<unknown>[] }) => VNode[];\n }>,\n props: { as: asProp(\"thead\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableHeader>\");\n const virtual = injectVirtual();\n return () =>\n h(\n props.as,\n slots.default?.({ columns: table.columns }) ??\n h(DataTableHeaderRow, () =>\n virtual?.columns\n ? h(DataTableVirtualColumns, null, {\n default: ({ column }: { column: TableColumn<unknown> }) => [\n h(DataTableHeaderCell, { key: column.id, column }),\n ],\n })\n : table.columns.map((column) => h(DataTableHeaderCell, { key: column.id, column })),\n ),\n );\n },\n});\n\nexport const DataTableHeaderRow = defineComponent({\n name: \"DataTableHeaderRow\",\n slots: Object as SlotsType<{ default?: () => VNode[] }>,\n props: { as: asProp(\"tr\") },\n setup(props, { slots }) {\n return () => h(props.as, { \"aria-rowindex\": 1 }, slots.default?.());\n },\n});\n\n/** Shared header/body column slice, with native spacer cells for omitted columns. */\nexport const DataTableVirtualColumns = defineComponent({\n name: \"DataTableVirtualColumns\",\n slots: Object as SlotsType<{\n default?: (props: { column: TableColumn<unknown>; index: number }) => VNode[];\n }>,\n props: { as: { type: String as PropType<\"th\" | \"td\">, default: \"th\" } },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableVirtualColumns>\");\n const virtual = injectVirtual();\n return () =>\n h(\n Fragment,\n renderColumns(\n table.columns,\n virtual,\n (column, index) => slots.default?.({ column, index }),\n props.as,\n ),\n );\n },\n});\n\n/**\n * A column header with `aria-sort`. Without a slot it shows the header text inside a sort button\n * for sortable columns.\n */\nexport const DataTableHeaderCell = defineComponent({\n name: \"DataTableHeaderCell\",\n slots: Object as SlotsType<{\n default?: (props: {\n column: TableColumn<unknown>;\n sort: SortInfo | undefined;\n toggleSort: (multi?: boolean) => void;\n }) => VNode[];\n }>,\n props: { column: columnProp, as: asProp(\"th\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableHeaderCell>\");\n const columnOffset = injectColumnOffset();\n return () => {\n const { column } = props;\n const sort = table.getSort(column.id);\n const ariaSort = sort\n ? sort.direction === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : column.sortable\n ? \"none\"\n : undefined;\n const content =\n slots.default?.({\n column,\n sort,\n toggleSort: (multi = false) => table.toggleSort(column.id, { multi }),\n }) ??\n (column.sortable ? h(DataTableSortButton, { column }, () => column.header) : column.header);\n return h(\n props.as,\n {\n scope: \"col\",\n \"aria-sort\": ariaSort,\n \"data-column\": column.id,\n \"data-align\": column.align,\n \"data-sortable\": flag(column.sortable),\n \"data-sort\": sort?.direction,\n style: columnStyle(column),\n \"aria-colindex\": table.columns.indexOf(column) + columnOffset() + 1,\n },\n content,\n );\n };\n },\n});\n\nexport function columnStyle(column: TableColumn<unknown>): Record<string, string> | undefined {\n const style: Record<string, string> = {};\n if (column.width !== undefined) {\n style[\"width\"] = `${column.width}px`;\n }\n if (column.minWidth !== undefined) {\n style[\"minWidth\"] = `${column.minWidth}px`;\n }\n return Object.keys(style).length > 0 ? style : undefined;\n}\n\n/**\n * Toggles a column's sort. Shift-click adds the column to the existing sort instead of replacing\n * it. The slot receives the current sort so it can draw an indicator.\n */\nexport const DataTableSortButton = defineComponent({\n name: \"DataTableSortButton\",\n slots: Object as SlotsType<{\n default?: (props: { sort: SortInfo | undefined }) => VNode[];\n indicator?: (props: { sort: SortInfo | undefined }) => VNode[];\n }>,\n props: { column: columnProp, as: asProp(\"button\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableSortButton>\");\n const locale = useTableLocale();\n return () => {\n const sort = table.getSort(props.column.id);\n const next = !sort ? \"ascending\" : sort.direction === \"asc\" ? \"descending\" : \"unsorted\";\n return h(\n props.as,\n {\n type: props.as === \"button\" ? \"button\" : undefined,\n \"data-sort\": sort?.direction,\n \"aria-label\": locale().messages.sortBy(props.column.header, next),\n onClick: (event: MouseEvent) =>\n table.toggleSort(props.column.id, { multi: event.shiftKey }),\n },\n [slots.default?.({ sort }) ?? props.column.header, slots.indicator?.({ sort })],\n );\n };\n },\n});\n\n/**\n * The body section. Without a slot it renders a row per row on the page, and the `empty` slot in\n * a full-width row when there are none.\n */\nexport const DataTableBody = defineComponent({\n name: \"DataTableBody\",\n slots: Object as SlotsType<{\n default?: (props: { rows: readonly TableRow<unknown>[] }) => VNode[];\n empty?: () => VNode[];\n detail?: (props: { row: TableRow<unknown>; rowIndex: number }) => VNode[];\n row?: (props: DetailSlotProps) => VNodeChild;\n }>,\n props: {\n as: asProp(\"tbody\"),\n ...virtualProps,\n colspan: { type: Number as PropType<number | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableBody>\");\n const locale = useTableLocale();\n const virtual = injectVirtual();\n const details = createDetails(\n table,\n () => slots.detail,\n () => props.colspan ?? table.columns.length,\n );\n return () => {\n if (props.virtual && !virtual) return h(VirtualDataTableBody, props, slots);\n if (virtual) return renderTableBody(table, virtual, props.as, props.colspan, slots, details);\n let content: VNode[] | VNode | undefined = slots.default?.({ rows: table.rows });\n if (!content) {\n content =\n table.rows.length === 0 && slots.empty\n ? h(\"tr\", { \"data-empty\": \"\" }, [\n h(\"td\", { colspan: Math.max(1, table.columns.length) }, slots.empty()),\n ])\n : table.renderItems.map((item) =>\n item.kind === \"row\"\n ? slots.row\n ? h(Fragment, { key: item.key }, [slots.row(item)])\n : h(DataTableRow, { key: item.key, row: item.row, rowIndex: item.rowIndex })\n : details.render(item.row, item.rowIndex),\n );\n }\n const visibleDetails = new Set(\n table.renderItems.filter((item) => item.kind === \"detail\").map((item) => item.row.key),\n );\n const retained = slots.default ? [] : details.retained(visibleDetails);\n const sentinel = loadSentinel(table, props.colspan ?? table.columns.length, locale());\n return h(props.as, [\n ...(Array.isArray(content) ? content : content ? [content] : []),\n ...retained,\n ...(sentinel ? [sentinel] : []),\n ]);\n };\n },\n});\n\ntype TableBodySlots = {\n default?: (props: { rows: readonly TableRow<unknown>[] }) => VNode[];\n empty?: () => VNode[];\n detail?: (props: { row: TableRow<unknown>; rowIndex: number }) => VNode[];\n row?: (props: DetailSlotProps) => VNodeChild;\n};\nfunction renderTableBody(\n table: DataTableBinding<unknown>,\n virtual: ComponentVirtualBinding,\n as: string,\n colspan: number | undefined,\n slots: TableBodySlots,\n details: ReturnType<typeof createDetails>,\n element?: ShallowRef<HTMLElement | undefined>,\n): VNode {\n const width = colspan ?? table.columns.length;\n const attrs = element ? { ref: element } : {};\n const content = slots.default?.({\n rows: virtual.rowItems\n .filter((item) => item.renderItem.kind === \"row\")\n .map((item) => item.renderItem.row),\n });\n if (table.rows.length === 0 && slots.empty)\n return h(\n as,\n attrs,\n h(\"tr\", { \"data-empty\": \"\" }, [h(\"td\", { colspan: Math.max(1, width) }, slots.empty())]),\n );\n if (content)\n return h(as, attrs, [\n rowSpacer(virtual.rows.paddingStart, width, \"gap-start\"),\n ...content,\n rowSpacer(virtual.rows.paddingEnd, width, \"gap-end\"),\n ...(loadSentinel(table, width) ? [loadSentinel(table, width)] : []),\n ]);\n return h(as, attrs, [\n ...renderRows(virtual, width, (item) =>\n item.renderItem.kind === \"row\"\n ? slots.row\n ? h(Fragment, { key: item.key }, [slots.row(item.renderItem)])\n : h(DataTableRow, {\n key: item.key,\n row: item.renderItem.row,\n rowIndex: item.renderItem.rowIndex,\n })\n : details.render(item.renderItem.row, item.renderItem.rowIndex),\n ),\n ...details.retained(\n new Set(\n virtual.rowItems\n .filter((item) => item.renderItem.kind === \"detail\")\n .map((item) => item.renderItem.row.key),\n ),\n ),\n ...(loadSentinel(table, width) ? [loadSentinel(table, width)] : []),\n ]);\n}\nconst VirtualDataTableBody = defineComponent({\n name: \"DataTableVirtualBody\",\n props: {\n as: asProp(\"tbody\"),\n ...virtualProps,\n colspan: { type: Number as PropType<number | undefined>, default: undefined },\n },\n slots: Object as SlotsType<TableBodySlots>,\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableBody>\");\n const element = shallowRef<HTMLElement>();\n const virtual = createComponentVirtual(table, virtualOptions(props), () =>\n element.value?.closest(\"table\"),\n );\n const details = createDetails(\n table,\n () => slots.detail,\n () => props.colspan ?? table.columns.length,\n );\n return () => renderTableBody(table, virtual, props.as, props.colspan, slots, details, element);\n },\n});\n\n/** A body row; `aria-selected` and `data-selected` follow the selection. */\nexport const DataTableRow = defineComponent({\n name: \"DataTableRow\",\n slots: Object as SlotsType<{\n default?: (props: {\n row: TableRow<unknown>;\n selected: boolean;\n columns: readonly TableColumn<unknown>[];\n }) => VNode[];\n }>,\n props: {\n row: rowProp,\n as: asProp(\"tr\"),\n rowIndex: { type: Number as PropType<number | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableRow>\");\n const virtual = injectVirtual();\n const hierarchy = injectHierarchy();\n return () => {\n const { row } = props;\n const selected = table.isSelected(row.key);\n const item = virtual ? virtualRow(virtual, row) : undefined;\n const position = props.rowIndex ?? item?.renderItem.rowIndex ?? table.rows.indexOf(row);\n return h(\n props.as,\n {\n \"aria-rowindex\": position === -1 ? undefined : table.pageStart + position + 1,\n \"aria-selected\": table.selectionMode === \"none\" ? undefined : String(selected),\n \"data-selected\": flag(selected),\n \"data-key\": String(row.key),\n \"data-dirty\": flag(row.isDirty),\n ...hierarchyRowAttrs(table, row, hierarchy),\n tabindex: table.tree\n ? (hierarchy?.focusKey ?? table.rows[0]?.key) === row.key\n ? 0\n : -1\n : undefined,\n onFocus: () => {\n if (hierarchy) hierarchy.focus.value = row.key;\n },\n ...(virtual && item\n ? {\n ref: (element: Element | ComponentPublicInstance | null) =>\n virtual.rows.measureElement(element, item.key),\n \"data-virtual-row\": \"\",\n }\n : {}),\n },\n slots.default?.({ row, selected, columns: table.columns }) ??\n table.columns.map((column) => h(DataTableCell, { key: column.id, row, column })),\n );\n };\n },\n});\n\n/** A body cell. The slot receives the raw value and the formatted text. */\nexport const DataTableCell = defineComponent({\n name: \"DataTableCell\",\n slots: Object as SlotsType<{\n default?: (props: {\n row: TableRow<unknown>;\n column: TableColumn<unknown>;\n value: unknown;\n display: string;\n }) => VNode[];\n }>,\n props: {\n row: rowProp,\n column: columnProp,\n as: asProp(\"td\"),\n tree: { type: Boolean, default: true },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableCell>\");\n const columnOffset = injectColumnOffset();\n const hierarchy = injectHierarchy();\n return () => {\n const { row, column } = props;\n const value = row.getValue(column.id);\n const display = row.getDisplay(column.id);\n const content = () => slots.default?.({ row, column, value, display }) ?? display;\n return h(\n props.as,\n {\n \"data-column\": column.id,\n \"data-align\": column.align,\n \"aria-colindex\": table.columns.indexOf(column) + columnOffset() + 1,\n },\n props.tree && table.tree && column.id === resolveTreeColumn(table, hierarchy?.treeColumn)\n ? h(DataTableTreeCell, { row }, { default: content })\n : content(),\n );\n };\n },\n});\n\n/** Renders its slot only when no row passes the search and filters. */\nexport const DataTableEmpty = defineComponent({\n name: \"DataTableEmpty\",\n slots: Object as SlotsType<{ default?: () => VNode[] }>,\n props: { as: asProp(\"div\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableEmpty>\");\n return () => (table.rowCount === 0 ? h(props.as, { role: \"status\" }, slots.default?.()) : null);\n },\n});\n","import type { EditResult, GridDirection, RowKey, TableIssue, TableRow } from \"@vueye-table/core\";\nimport {\n injectDataTable,\n useDataGrid,\n type AnyDataTableBinding,\n type DataGridBinding,\n type RowDraft,\n useTableLocale,\n} from \"@vueye-table/vue\";\nimport {\n computed,\n defineComponent,\n h,\n inject,\n nextTick,\n onScopeDispose,\n provide,\n shallowRef,\n watch,\n type InjectionKey,\n type PropType,\n type SlotsType,\n type VNodeChild,\n} from \"vue\";\n\nimport {\n DataCellEditor,\n editorIssues,\n editorText,\n issueAttrs,\n useEditorId,\n type CellEditorSlotProps,\n} from \"./editor\";\nimport { rowProp, columnProp } from \"./shared\";\nimport { DataTableCell } from \"./table\";\n\ninterface EditingContext {\n readonly grid: DataGridBinding<unknown>;\n readonly mode: \"cell\" | \"row\";\n readonly draft: RowDraft<unknown> | undefined;\n start(row: TableRow<unknown>): void;\n save(): Promise<EditResult<unknown> | undefined>;\n cancel(key: RowKey): void;\n}\nconst editingKey: InjectionKey<EditingContext> = Symbol(\"vueye-table-editing\");\nexport function injectEditingGrid(): DataGridBinding<unknown> | undefined {\n return inject(editingKey, undefined)?.grid;\n}\n\n/** Renderless provider for editable data-table cells and row forms. */\nexport const DataTableEditRoot = defineComponent({\n name: \"DataTableEditRoot\",\n slots: Object as SlotsType<{ default?: (props: { editing: EditingContext }) => VNodeChild }>,\n props: {\n table: { type: Object as PropType<AnyDataTableBinding>, required: true },\n mode: { type: String as PropType<\"cell\" | \"row\">, default: \"cell\" },\n },\n emits: {\n save: (_result: EditResult<unknown>) => true,\n cancel: (_key: RowKey) => true,\n },\n setup(props, { slots, emit, expose }) {\n const grid = useDataGrid(props.table);\n const draft = shallowRef<RowDraft<unknown>>();\n const context: EditingContext = {\n grid,\n get mode() {\n return props.mode;\n },\n get draft() {\n return draft.value;\n },\n start(row) {\n if (draft.value?.pending) return;\n if (draft.value) context.cancel(draft.value.rowKey);\n grid.cancelEdit();\n const column = props.table.columns.findIndex((candidate) =>\n candidate.isEditable(row.original),\n );\n grid.focusCell({\n row: props.table.rows.findIndex((candidate) => candidate.key === row.key),\n column,\n });\n grid.startEdit();\n draft.value = props.table.editRow(row.key);\n },\n async save() {\n const active = draft.value;\n if (!active || active.pending) return undefined;\n const result = await active.save();\n if (draft.value === active && active.status !== \"editing\" && !active.pending) {\n draft.value = undefined;\n grid.cancelEdit();\n }\n if (result.status !== \"rejected\") emit(\"save\", result);\n return result;\n },\n cancel(key) {\n if (draft.value?.rowKey === key && !draft.value.pending) {\n draft.value.cancel();\n draft.value = undefined;\n grid.cancelEdit();\n emit(\"cancel\", key);\n }\n },\n };\n provide(editingKey, context);\n expose({ editing: context });\n watch(\n () => props.table.rows,\n (rows) => {\n if (draft.value && !rows.some((row) => row.key === draft.value?.rowKey))\n context.cancel(draft.value.rowKey);\n },\n );\n onScopeDispose(() => draft.value?.cancel());\n return () => slots.default?.({ editing: context });\n },\n});\n\n/** A cell with on-demand editing; row mode shares one draft and one save operation. */\nexport const DataTableEditCell = defineComponent({\n name: \"DataTableEditCell\",\n props: {\n row: rowProp,\n column: columnProp,\n rowIndex: { type: Number as PropType<number | undefined>, default: undefined },\n tree: { type: Boolean, default: true },\n },\n slots: Object as SlotsType<{\n default?: (props: { row: TableRow<unknown>; value: unknown; display: string }) => VNodeChild;\n editor?: (props: CellEditorSlotProps) => VNodeChild;\n }>,\n emits: { save: (_result: EditResult<unknown>) => true, cancel: (_key: RowKey) => true },\n setup(props, { slots, emit }) {\n const table = injectDataTable(\"<DataTableEditCell>\");\n const context = inject(editingKey);\n if (!context) throw new Error(\"<DataTableEditCell> requires <DataTableEditRoot>.\");\n const { grid } = context;\n const id = useEditorId();\n const element = shallowRef<HTMLElement>();\n const position = () => ({\n row: props.rowIndex ?? table.rows.indexOf(props.row),\n column: table.columns.indexOf(props.column),\n });\n const active = computed(() =>\n context.mode === \"row\" ? context.draft?.rowKey === props.row.key : grid.isEditing(position()),\n );\n const pending = computed(() =>\n context.mode === \"row\"\n ? !!context.draft?.pending\n : active.value && grid.lastResult?.status === \"pending\",\n );\n const localText = shallowRef(\"\");\n watch(active, (value) => {\n if (value)\n localText.value = editorText(\n props.row.getValue(props.column.id),\n grid.editorFor(position())?.kind ?? \"text\",\n );\n });\n const focus = (direction?: GridDirection): void => {\n void nextTick(() => {\n if (!direction) {\n element.value?.focus();\n return;\n }\n const all = [\n ...(element.value\n ?.closest(\"table\")\n ?.querySelectorAll<HTMLElement>(\"[data-edit-cell][data-editable]\") ?? []),\n ];\n const at = all.indexOf(element.value!);\n all[at + (direction === \"left\" ? -1 : 1)]?.focus();\n });\n };\n const submit = (\n value?: unknown,\n direction?: GridDirection,\n ): EditResult<unknown> | Promise<EditResult<unknown>> | undefined => {\n if (context.mode === \"row\") {\n if (value !== undefined) {\n if (typeof value === \"string\") {\n localText.value = value;\n context.draft?.setValue(props.column.id, value);\n context.draft?.setInput(props.column.id, value);\n } else context.draft?.setValue(props.column.id, value);\n }\n return undefined;\n }\n const result = grid.submitEdit(\n value === undefined ? undefined : typeof value === \"string\" ? { input: value } : { value },\n );\n const finish = (final: EditResult<unknown>): void => {\n if (final.status !== \"rejected\") {\n emit(\"save\", final);\n focus(direction);\n }\n };\n if (result?.completion) void result.completion.then(finish);\n else if (result) finish(result);\n return result;\n };\n return () => {\n const { row, column } = props;\n const editable = column.isEditable(row.original);\n const editing = editable && active.value;\n const draft = context.draft?.rowKey === row.key ? context.draft : undefined;\n const issues =\n draft?.issues.filter((problem) => problem.column === column.id) ??\n (row.cellIssues?.get(column.id)\n ? [row.cellIssues.get(column.id)!]\n : active.value\n ? (grid.lastResult?.issues.filter(\n (problem) =>\n problem.rowKey === row.key && (problem.column === column.id || !problem.column),\n ) ?? [])\n : []);\n const spec = editing ? (grid.editorFor(position()) ?? { kind: \"text\" as const }) : undefined;\n const input = (text: string): void => {\n localText.value = text;\n if (context.mode === \"row\") {\n draft?.setValue(column.id, text);\n draft?.setInput(column.id, text);\n } else grid.updateDraft(text);\n };\n const cancel = (): void => {\n if (pending.value) return;\n if (context.mode === \"row\") context.cancel(row.key);\n else {\n grid.cancelEdit();\n emit(\"cancel\", row.key);\n }\n focus();\n };\n const editor: CellEditorSlotProps = {\n row,\n column,\n value:\n context.mode === \"row\"\n ? Reflect.get(draft?.values ?? {}, column.id)\n : row.getValue(column.id),\n draft: context.mode === \"row\" ? localText.value : (grid.editor?.draft ?? \"\"),\n spec: spec ?? { kind: \"text\" },\n finish: (direction) => {\n if (context.mode === \"row\") void context.save();\n else\n void submit(\n undefined,\n direction === \"left\" || direction === \"right\" ? direction : undefined,\n );\n },\n input,\n update: input,\n commit: submit,\n cancel,\n issues,\n pending: pending.value,\n attrs: issueAttrs(id, issues, pending.value),\n };\n return h(\n DataTableCell,\n {\n ref: (target: unknown) => {\n element.value =\n target && typeof target === \"object\" && \"$el\" in target\n ? (target.$el as HTMLElement)\n : undefined;\n },\n row,\n column,\n tree: props.tree,\n \"data-edit-cell\": \"\",\n \"data-editable\": editable ? \"\" : undefined,\n \"data-editing\": editing ? \"\" : undefined,\n \"data-dirty\": row.isDirty ? \"\" : undefined,\n ...issueAttrs(id, issues, pending.value),\n tabindex: editable ? 0 : undefined,\n onFocus: (event: FocusEvent) => {\n if (event.target === element.value && !grid.editor) grid.focusCell(position());\n },\n onDblclick: () => {\n if (editable && context.mode === \"cell\") {\n grid.focusCell(position());\n grid.startEdit(\n editorText(row.getValue(column.id), grid.editorFor(position())?.kind ?? \"text\"),\n );\n }\n },\n onKeydown: (event: KeyboardEvent) => {\n if (event.target === element.value && event.key === \"Enter\" && editable) {\n event.preventDefault();\n event.stopPropagation();\n if (context.mode === \"row\") context.start(row);\n else {\n grid.focusCell(position());\n grid.startEdit(\n editorText(row.getValue(column.id), grid.editorFor(position())?.kind ?? \"text\"),\n );\n }\n }\n },\n },\n {\n default: ({ value, display }: { value: unknown; display: string }) => [\n editing\n ? (slots.editor?.(editor) ??\n h(DataCellEditor, {\n editor,\n spec: spec ?? { kind: \"text\" },\n autofocus:\n context.mode === \"cell\" ||\n table.columns.find((candidate) => candidate.isEditable(row.original))?.id ===\n column.id,\n blurCommit: context.mode === \"cell\",\n tabCommit: context.mode === \"cell\",\n finish: (direction?: GridDirection) => {\n if (context.mode === \"row\") void context.save();\n else\n void submit(\n undefined,\n direction === \"left\" || direction === \"right\" ? direction : undefined,\n );\n },\n }))\n : (slots.default?.({ row, value, display }) ?? display),\n editorIssues(id, issues, pending.value),\n ],\n },\n );\n };\n },\n});\n\n/** One active row form. Controls share the provider's draft and core save/undo path. */\nexport const DataTableRowActions = defineComponent({\n name: \"DataTableRowActions\",\n props: {\n row: rowProp,\n editable: { type: Boolean, default: true },\n removable: { type: Boolean, default: false },\n },\n setup(props) {\n const table = injectDataTable(\"<DataTableRowActions>\");\n const locale = useTableLocale();\n const context = inject(editingKey, undefined);\n const id = useEditorId();\n const element = shallowRef<HTMLElement>();\n watch(\n () => context?.draft?.rowKey === props.row.key,\n (active, previous) => {\n const target = element.value;\n if (\n previous &&\n !active &&\n !context?.draft &&\n target?.closest(\"tr\")?.contains(target.ownerDocument.activeElement)\n )\n void nextTick(() =>\n target.querySelector<HTMLButtonElement>(\"button[data-edit-row]\")?.focus(),\n );\n },\n );\n return () => {\n const { messages } = locale();\n const rowName = String(props.row.key);\n const draft = context?.draft?.rowKey === props.row.key ? context.draft : undefined;\n const issues: readonly TableIssue[] = [\n ...new Map(draft?.issues.map((problem) => [problem.message, problem])).values(),\n ];\n const button = (\n label: string,\n action: () => unknown,\n disabled = false,\n role?: \"edit\" | \"save\",\n ) =>\n h(\n \"button\",\n {\n type: \"button\",\n disabled,\n \"aria-label\": messages.actionOnRow(label, rowName),\n \"data-edit-row\": role === \"edit\" ? \"\" : undefined,\n ...(role === \"save\" ? issueAttrs(id, issues, !!draft?.pending) : {}),\n onClick: action,\n },\n label,\n );\n return h(\n \"div\",\n {\n ref: element,\n \"data-row-actions\": \"\",\n role: \"group\",\n \"aria-label\": messages.rowActionsFor(rowName),\n \"aria-busy\": draft?.pending ? \"true\" : undefined,\n },\n [\n ...(context?.mode === \"row\" && props.editable\n ? draft\n ? [\n button(messages.saveRow, () => context.save(), draft.pending, \"save\"),\n button(messages.cancel, () => context.cancel(props.row.key), draft.pending),\n ]\n : [button(messages.editRow, () => context.start(props.row), false, \"edit\")]\n : []),\n h(\n \"details\",\n {\n onToggle: (event: Event) => {\n const menu = event.currentTarget as HTMLDetailsElement;\n if (menu.open)\n void nextTick(() =>\n menu.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" }),\n );\n },\n },\n [\n h(\"summary\", { \"aria-label\": messages.actionsForRow(rowName) }, messages.actions),\n h(\"div\", { \"data-row-menu\": \"\" }, [\n button(\n messages.revertRow,\n () => table.revert([props.row.key]),\n !props.row.isDirty || !!draft,\n ),\n props.removable\n ? button(messages.removeRow, () => table.removeRows([props.row.key]), !!draft)\n : null,\n ]),\n ],\n ),\n editorIssues(id, issues, !!draft?.pending),\n ],\n );\n };\n },\n});\n","import type { GridDirection, TableColumn, TableRow } from \"@vueye-table/core\";\nimport {\n injectDataGrid,\n injectDataTable,\n provideDataGrid,\n provideDataTable,\n useDataGrid,\n type DataGridBinding,\n type AnyDataTableBinding,\n type DataTableBinding,\n} from \"@vueye-table/vue\";\nimport {\n defineComponent,\n h,\n inject,\n nextTick,\n provide,\n ref,\n useId,\n watch,\n type InjectionKey,\n type PropType,\n type SlotsType,\n type VNode,\n type VNodeChild,\n} from \"vue\";\n\nimport {\n DataCellEditor,\n editorIssues,\n editorText,\n issueAttrs,\n useEditorId,\n type CellEditorSlotProps,\n} from \"./editor\";\nimport {\n createDetails,\n DataTableTreeCell,\n hierarchyProps,\n hierarchyRowAttrs,\n injectHierarchy,\n provideHierarchy,\n resolveTreeColumn,\n type DetailSlotProps,\n} from \"./hierarchy\";\nimport { loadSentinel } from \"./loading\";\nimport {\n asProp,\n columnProp,\n flag,\n rowProp,\n columnLayoutProps,\n provideColumnOffset,\n injectColumnOffset,\n directionOf,\n} from \"./shared\";\nimport { columnStyle, DataTableHeader } from \"./table\";\nimport {\n injectVirtual,\n renderColumns,\n renderRows,\n virtualColgroup,\n virtualOptions,\n virtualProps,\n VirtualContent,\n type ComponentVirtualBinding,\n} from \"./virtual\";\n\ninterface GridContext {\n readonly id: string;\n /** Return keyboard focus to the grid, after an edit ends from the keyboard. */\n focus(): void;\n cancel(key: string | number): void;\n}\n\nconst gridContextKey: InjectionKey<GridContext> = Symbol(\"vueye-table-grid-context\");\n\nfunction useGrid(consumer: string): { grid: DataGridBinding<unknown>; context: GridContext } {\n const grid = injectDataGrid();\n const context = inject(gridContextKey, undefined);\n if (!grid || !context) {\n throw new Error(`${consumer} must be rendered inside <DataGridRoot>.`);\n }\n return { grid, context };\n}\n\nexport function cellId(gridId: string, row: number, column: number): string {\n return `${gridId}-r${row}-c${column}`;\n}\n\n/**\n * A spreadsheet grid over a table. The grid element keeps keyboard focus and points at the active\n * cell with `aria-activedescendant`; arrows, Tab, Home, End, Enter, F2, Delete, Escape, typing,\n * undo, redo, and clipboard copy, cut, and paste all work on the selected range.\n */\nexport const DataGridRoot = defineComponent({\n name: \"DataGridRoot\",\n slots: Object as SlotsType<{\n default?: (props: {\n table: DataTableBinding<unknown>;\n grid: DataGridBinding<unknown>;\n }) => VNode[];\n }>,\n props: {\n table: { type: Object as PropType<AnyDataTableBinding>, required: true },\n as: asProp(\"table\"),\n label: { type: String as PropType<string | undefined>, default: undefined },\n ...virtualProps,\n ...hierarchyProps,\n ...columnLayoutProps,\n /** Width reserved before data columns, for a row-number/header column. */\n gutter: { type: Number, default: 0 },\n },\n emits: { save: (_result: unknown) => true, cancel: (_key: string | number) => true },\n setup(props, { slots, expose, emit }) {\n provideDataTable(props.table);\n provideColumnOffset(() => props.leadingColumns);\n const grid = useDataGrid(props.table, { treeColumn: () => props.treeColumn });\n provideDataGrid(grid);\n provideHierarchy(props.table, props);\n const element = ref<HTMLElement>();\n const id = `vt-grid-${useId()}`;\n const focus = (): void => {\n void nextTick(() => {\n if (!grid.editor) element.value?.focus({ preventScroll: true });\n });\n };\n provide(gridContextKey, { id, focus, cancel: (key) => emit(\"cancel\", key) });\n watch(\n () => grid.lastResult,\n (result) => {\n if (result && [\"applied\", \"partial\", \"unchanged\"].includes(result.status))\n emit(\"save\", result);\n },\n );\n expose({ grid, focus });\n let virtual: ComponentVirtualBinding | undefined;\n\n const onKeydown = (event: KeyboardEvent): void => {\n if (event.target !== element.value) {\n return;\n }\n if (\n event.key === \" \" &&\n !grid.editor &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n grid.toggleCheckbox()\n ) {\n event.preventDefault();\n return;\n }\n if (\n virtual &&\n !grid.editor &&\n (event.ctrlKey || event.metaKey) &&\n (event.key === \"Home\" || event.key === \"End\")\n ) {\n grid.focusCell(\n event.key === \"Home\"\n ? { row: 0, column: 0 }\n : { row: props.table.rows.length - 1, column: props.table.columns.length - 1 },\n { extend: event.shiftKey },\n );\n event.preventDefault();\n return;\n }\n if (virtual && !grid.editor && (event.key === \"PageUp\" || event.key === \"PageDown\")) {\n const current = grid.selection?.focus ?? { row: 0, column: 0 };\n const item = virtual.rowItems.find((entry) => entry.renderItem.rowIndex === current.row);\n const step = Math.max(\n 1,\n Math.floor(virtual.rows.viewportSize / (item?.size ?? props.rowHeight)),\n );\n grid.focusCell(\n { row: current.row + (event.key === \"PageDown\" ? step : -step), column: current.column },\n { extend: event.shiftKey },\n );\n event.preventDefault();\n return;\n }\n if (\n grid.handleKey({\n key: event.key,\n shiftKey: event.shiftKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n altKey: event.altKey,\n direction: directionOf(event.currentTarget as Element | null),\n })\n ) {\n event.preventDefault();\n }\n };\n const onCopy = (event: ClipboardEvent, cut = false): void => {\n if (grid.editor || !grid.range || !event.clipboardData) {\n return;\n }\n event.clipboardData.setData(\"text/plain\", grid.copy());\n event.preventDefault();\n if (cut) {\n grid.clear();\n }\n };\n const onPaste = (event: ClipboardEvent): void => {\n if (grid.editor || event.defaultPrevented) return;\n const text = event.clipboardData?.getData(\"text/plain\");\n if (text === undefined || text === \"\") {\n return;\n }\n event.preventDefault();\n grid.paste(text);\n };\n\n const render = (binding?: ComponentVirtualBinding): VNode => {\n virtual = binding;\n const focusPosition = grid.selection?.focus;\n return h(\n props.as,\n {\n ref: element,\n id,\n role: props.table.tree ? \"treegrid\" : \"grid\",\n tabindex: 0,\n \"aria-label\": props.label,\n \"aria-multiselectable\": \"true\",\n \"aria-rowcount\":\n (props.table.tree\n ? props.table.processedRows.length\n : binding\n ? props.table.rowCount\n : props.table.rows.length) + 1,\n \"aria-colcount\": props.table.columns.length + props.leadingColumns,\n \"aria-busy\":\n props.table.loadState === \"loading\" || props.table.loadState === \"streaming\"\n ? \"true\"\n : undefined,\n \"aria-activedescendant\":\n focusPosition && !grid.editor\n ? cellId(id, focusPosition.row, focusPosition.column)\n : undefined,\n onKeydown,\n onCopy: (event: ClipboardEvent) => onCopy(event),\n onCut: (event: ClipboardEvent) => onCopy(event, true),\n onPaste,\n ...(binding\n ? {\n \"data-virtual\": \"\",\n style: binding.columns\n ? {\n tableLayout: \"fixed\",\n width: `${binding.columns.totalSize + binding.gutter}px`,\n }\n : undefined,\n }\n : {}),\n },\n binding\n ? [\n virtualColgroup(props.table.columns, binding),\n slots.default?.({ table: props.table, grid }) ?? [\n h(DataTableHeader),\n h(DataGridBody),\n ],\n ]\n : (slots.default?.({ table: props.table, grid }) ?? [\n h(DataTableHeader),\n h(DataGridBody),\n ]),\n );\n };\n return () =>\n props.virtual\n ? h(VirtualContent, {\n table: props.table,\n grid,\n options: virtualOptions(props),\n virtualColumns: props.virtualColumns,\n gutter: props.gutter,\n tableElement: () => element.value,\n render,\n })\n : render();\n },\n});\n\n/** Slot props of a grid cell's content, while it is not being edited. */\nexport interface GridCellSlotProps {\n readonly row: TableRow<unknown>;\n readonly column: TableColumn<unknown>;\n readonly value: unknown;\n readonly display: string;\n readonly editable: boolean;\n}\n\n/**\n * The grid body: a row of cells per row on the page. The `cell` slot draws the content of every\n * cell that is not being edited; the `rowHeader` slot adds a leading cell to each row.\n */\nexport const DataGridBody = defineComponent({\n name: \"DataGridBody\",\n slots: Object as SlotsType<{\n default?: (props: { rows: readonly TableRow<unknown>[] }) => VNode[];\n rowHeader?: (props: { row: TableRow<unknown>; index: number }) => VNode[];\n cell?: (props: GridCellSlotProps) => VNodeChild;\n editor?: (props: CellEditorSlotProps) => VNodeChild;\n detail?: (props: DetailSlotProps) => VNodeChild;\n }>,\n props: {\n as: asProp(\"tbody\"),\n ...virtualProps,\n colspan: { type: Number, default: undefined },\n treeCell: { type: Boolean, default: true },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataGridBody>\");\n const { grid } = useGrid(\"<DataGridBody>\");\n const virtual = injectVirtual();\n const hierarchy = injectHierarchy();\n const details = createDetails(\n table,\n () => slots.detail,\n () => props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n );\n const element = ref<HTMLElement>();\n const render = (binding?: ComponentVirtualBinding): VNode => {\n if (binding && slots.default) {\n const sentinel = loadSentinel(\n table,\n props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n );\n const content = slots.default({\n rows: binding.rowItems\n .filter((item) => item.renderItem.kind === \"row\")\n .map((item) => item.renderItem.row),\n });\n return h(props.as, { ref: element }, sentinel ? [...content, sentinel] : content);\n }\n if (binding)\n return h(props.as, { ref: element }, [\n ...renderRows(\n binding,\n props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n (item) => {\n if (item.renderItem.kind !== \"row\")\n return details.render(item.renderItem.row, item.renderItem.rowIndex);\n const { row, rowIndex } = item.renderItem;\n const columns = renderColumns(\n table.columns,\n binding,\n (column, columnIndex) =>\n h(\n DataGridCell,\n { key: column.id, row, column, rowIndex, columnIndex, tree: props.treeCell },\n { default: slots.cell, editor: slots.editor, $stable: true },\n ),\n \"td\",\n );\n return h(\n \"tr\",\n {\n key: item.key,\n role: \"row\",\n \"aria-rowindex\": table.pageStart + rowIndex + 1,\n \"data-key\": String(row.key),\n \"data-dirty\": flag(row.isDirty),\n ...hierarchyRowAttrs(table, row, hierarchy),\n \"data-virtual-row\": \"\",\n ref: (target) => binding.rows.measureElement(target, item.key),\n },\n [slots.rowHeader?.({ row, index: rowIndex }), ...columns],\n );\n },\n ),\n ...details.retained(\n new Set(\n binding.rowItems\n .filter((item) => item.renderItem.kind === \"detail\")\n .map((item) => item.renderItem.row.key),\n ),\n ),\n ...(loadSentinel(table, props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0))\n ? [\n loadSentinel(\n table,\n props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n ),\n ]\n : []),\n ]);\n const content =\n slots.default?.({ rows: table.rows }) ??\n table.renderItems.map((item) =>\n item.kind === \"detail\"\n ? details.render(item.row, item.rowIndex)\n : (() => {\n const { row, rowIndex } = item;\n return h(\n \"tr\",\n {\n key: item.key,\n role: \"row\",\n \"aria-rowindex\": rowIndex + 2,\n \"data-key\": String(row.key),\n \"data-dirty\": flag(row.isDirty),\n ...hierarchyRowAttrs(table, row, hierarchy),\n },\n [\n slots.rowHeader?.({ row, index: rowIndex }),\n ...table.columns.map((column, columnIndex) =>\n h(\n DataGridCell,\n {\n key: column.id,\n row,\n column,\n rowIndex,\n columnIndex,\n tree: props.treeCell,\n },\n { default: slots.cell, editor: slots.editor, $stable: true },\n ),\n ),\n ],\n );\n })(),\n );\n const sentinel = loadSentinel(\n table,\n props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n );\n return h(props.as, [\n ...content,\n ...(slots.default\n ? []\n : details.retained(\n new Set(\n table.renderItems\n .filter((item) => item.kind === \"detail\")\n .map((item) => item.row.key),\n ),\n )),\n sentinel,\n ]);\n };\n return () =>\n props.virtual && !virtual\n ? h(VirtualContent, {\n table,\n grid,\n options: virtualOptions(props),\n tableElement: () => element.value?.closest(\"table\"),\n render,\n })\n : render(virtual);\n },\n});\n\n/**\n * A grid cell. A click selects it, Shift-click or dragging extends the range, and a double click\n * edits it. The `editor` slot replaces the default text box.\n */\nexport const DataGridCell = defineComponent({\n name: \"DataGridCell\",\n slots: Object as SlotsType<{\n default?: (props: GridCellSlotProps) => VNodeChild;\n editor?: (props: CellEditorSlotProps) => VNodeChild;\n }>,\n props: {\n row: rowProp,\n column: columnProp,\n as: asProp(\"td\"),\n tree: { type: Boolean, default: true },\n /** The row's position on the page. Found by searching the rows when left out. */\n rowIndex: { type: Number as PropType<number | undefined>, default: undefined },\n /** The column's position among the visible columns. Found by searching when left out. */\n columnIndex: { type: Number as PropType<number | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataGridCell>\");\n const columnOffset = injectColumnOffset();\n const { grid, context } = useGrid(\"<DataGridCell>\");\n const virtual = injectVirtual();\n const hierarchy = injectHierarchy();\n const element = ref<HTMLElement>();\n const issueId = useEditorId();\n const position = () => ({\n row: props.rowIndex ?? table.rows.indexOf(props.row),\n column: props.columnIndex ?? table.columns.indexOf(props.column),\n });\n\n watch(\n () => grid.isFocused(position()),\n (focused) => {\n if (focused && !virtual) {\n element.value?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }\n },\n );\n\n return () => {\n const at = position();\n const { row, column } = props;\n const editing = grid.isEditing(at);\n const editable = column.isEditable(row.original);\n const value = row.getValue(column.id);\n const display = row.getDisplay(column.id);\n const issues = row.cellIssues?.get(column.id)\n ? [row.cellIssues.get(column.id)!]\n : (grid.lastResult?.issues.filter(\n (problem) =>\n problem.rowKey === row.key && (problem.column === column.id || !problem.column),\n ) ?? []);\n const pending = table.pendingCells.some(\n (cell) => cell.rowKey === row.key && cell.column === column.id,\n );\n const finish = (\n edit?: { input: string } | { value: unknown },\n direction?: GridDirection,\n ): ReturnType<typeof grid.submitEdit> => {\n const result = grid.submitEdit(edit, direction);\n const focus = (): void => {\n if (!grid.editor) context.focus();\n };\n if (result?.completion) void result.completion.then(focus);\n else focus();\n return result;\n };\n let content;\n if (editing) {\n const editor: CellEditorSlotProps = {\n row,\n column,\n value,\n draft: grid.editor?.draft ?? \"\",\n spec: grid.editorFor(at) ?? { kind: \"text\" },\n finish: (direction) => {\n finish(undefined, direction);\n },\n input: (text) => grid.updateDraft(text),\n update: (text) => grid.updateDraft(text),\n commit: (next?: unknown) =>\n finish(\n next === undefined\n ? undefined\n : typeof next === \"string\"\n ? { input: next }\n : { value: next },\n ),\n cancel: () => {\n if (!pending) {\n grid.cancelEdit();\n context.cancel(row.key);\n context.focus();\n }\n },\n issues,\n pending,\n attrs: issueAttrs(issueId, issues, pending),\n };\n content =\n slots.editor?.(editor) ??\n h(DataCellEditor, {\n editor,\n spec: grid.editorFor(at) ?? { kind: \"text\" },\n finish: (direction?: GridDirection) => finish(undefined, direction),\n });\n } else {\n const children = () =>\n slots.default?.({ row, column, value, display, editable }) ?? display;\n content =\n props.tree && table.tree && column.id === resolveTreeColumn(table, hierarchy?.treeColumn)\n ? h(DataTableTreeCell, { row }, { default: children })\n : children();\n }\n return h(\n props.as,\n {\n ref: element,\n id: cellId(context.id, at.row, at.column),\n role: \"gridcell\",\n \"aria-selected\": String(grid.isSelected(at)),\n \"aria-readonly\": editable ? undefined : \"true\",\n \"aria-colindex\": at.column + columnOffset() + 1,\n \"data-column\": column.id,\n \"data-align\": column.align,\n \"data-focused\": flag(grid.isFocused(at)),\n \"data-selected\": flag(grid.isSelected(at)),\n \"data-editing\": flag(editing),\n \"data-readonly\": flag(!editable),\n \"data-dirty\": flag(row.isDirty),\n ...issueAttrs(issueId, issues, pending),\n style: columnStyle(column),\n onMousedown: (event: MouseEvent) => {\n if (editing || event.button !== 0) {\n return;\n }\n grid.focusCell(at, { extend: event.shiftKey });\n context.focus();\n },\n onMouseenter: (event: MouseEvent) => {\n if (event.buttons === 1 && !grid.editor) {\n grid.focusCell(at, { extend: true });\n }\n },\n onDblclick: () => {\n grid.focusCell(at);\n grid.startEdit(editorText(value, grid.editorFor(at)?.kind ?? \"text\"));\n },\n },\n [content, editorIssues(issueId, issues, pending)],\n );\n };\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/shared.ts","../src/controls.ts","../src/loading.ts","../src/editor.ts","../src/virtual.ts","../src/hierarchy.ts","../src/table.ts","../src/editing.ts","../src/row-attrs.ts","../src/grid.ts"],"sourcesContent":["import type { TableColumn, TableRow } from \"@vueye-table/core\";\nimport { inject, provide, type InjectionKey, type PropType } from \"vue\";\n\n/** Leading native utility cells, independent of data-column coordinates. */\nexport const columnLayoutProps = {\n leadingColumns: { type: Number, default: 0 },\n} as const;\nconst columnOffsetKey: InjectionKey<() => number> = Symbol(\"vt-leading-columns\");\nexport function provideColumnOffset(offset: () => number): void {\n provide(columnOffsetKey, offset);\n}\nexport function injectColumnOffset(): () => number {\n return inject(columnOffsetKey, () => 0);\n}\n\n/** The element a component renders. Every headless component accepts `as`. */\nexport const asProp = (tag: string) =>\n ({\n type: String,\n default: tag,\n }) as const;\n\n/** Columns of any row type; callbacks on a column make `TableColumn<unknown>` too narrow. */\nexport type AnyTableColumn = TableColumn<any>;\n\nexport const columnProp = {\n type: Object as PropType<AnyTableColumn>,\n required: true,\n} as const;\n\nexport const rowProp = {\n type: Object as PropType<TableRow<unknown>>,\n required: true,\n} as const;\n\n/** `data-*` attributes take strings; `undefined` leaves the attribute off. */\nexport function flag(value: boolean): \"\" | undefined {\n return value ? \"\" : undefined;\n}\n\n/**\n * The direction an element is laid out in, read from the nearest `dir` attribute, so keyboard\n * arrows can follow what the reader sees. Without one, left to right.\n */\nexport function directionOf(element: Element | null | undefined): \"ltr\" | \"rtl\" {\n return element?.closest(\"[dir]\")?.getAttribute(\"dir\")?.toLowerCase() === \"rtl\" ? \"rtl\" : \"ltr\";\n}\n","import type {\n PageItem,\n SelectionCoverage,\n TableColumn,\n LoadState,\n TableIssue,\n} from \"@vueye-table/core\";\nimport { injectDataTable, useTableLocale } from \"@vueye-table/vue\";\nimport { defineComponent, h, onScopeDispose, type PropType, type SlotsType, type VNode } from \"vue\";\n\nimport { asProp, flag, rowProp } from \"./shared\";\n\nfunction checkbox(props: {\n readonly checked: boolean;\n readonly indeterminate: boolean;\n readonly label: string;\n readonly disabled: boolean;\n readonly onChange: () => void;\n}) {\n return h(\"input\", {\n type: \"checkbox\",\n checked: props.checked,\n indeterminate: props.indeterminate,\n disabled: props.disabled,\n \"aria-label\": props.label,\n \"data-state\": props.indeterminate ? \"indeterminate\" : props.checked ? \"checked\" : \"unchecked\",\n onChange: props.onChange,\n });\n}\n\n/**\n * Selects or clears every row in the table's select-all scope. It shows the indeterminate state\n * when only some are selected. The slot receives the state to draw a custom control.\n */\nexport const DataTableSelectAll = defineComponent({\n name: \"DataTableSelectAll\",\n slots: Object as SlotsType<{\n default?: (props: { state: SelectionCoverage; toggle: () => void }) => VNode[];\n }>,\n props: { label: { type: String as PropType<string | undefined>, default: undefined } },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableSelectAll>\");\n const locale = useTableLocale();\n return () => {\n const state = table.allSelection;\n const toggle = (): void => table.toggleAll();\n return (\n slots.default?.({ state, toggle }) ??\n checkbox({\n checked: state === \"all\",\n indeterminate: state === \"some\",\n label: props.label ?? locale().messages.selectAllRows,\n disabled: table.selectionMode !== \"multiple\" || table.rows.length === 0,\n onChange: toggle,\n })\n );\n };\n },\n});\n\n/** Selects or clears one row. */\nexport const DataTableSelectRow = defineComponent({\n name: \"DataTableSelectRow\",\n slots: Object as SlotsType<{\n default?: (props: { selected: boolean; indeterminate: boolean; toggle: () => void }) => VNode[];\n }>,\n props: {\n row: rowProp,\n /** Defaults to the locale's \"Select row 3\", the row's place in the table as shown. */\n label: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableSelectRow>\");\n const locale = useTableLocale();\n const position = (): number => {\n const index = table.rows.indexOf(props.row);\n return index < 0 ? props.row.index + 1 : Math.max(1, table.pageStart) + index;\n };\n return () => {\n const selected = table.tree ? props.row.selection === \"all\" : table.isSelected(props.row.key);\n const indeterminate = table.tree && props.row.selection === \"some\";\n const toggle = (): void => table.toggleRow(props.row.key);\n return (\n slots.default?.({ selected, indeterminate, toggle }) ??\n checkbox({\n checked: selected,\n indeterminate,\n label:\n props.label ?? locale().messages.selectRow({ position: locale().count(position()) }),\n disabled: table.selectionMode === \"none\",\n onChange: toggle,\n })\n );\n };\n },\n});\n\n/**\n * A search box bound to the table's free-text search. `debounce` waits that many milliseconds\n * after the last keystroke before searching.\n */\nexport const DataTableSearch = defineComponent({\n name: \"DataTableSearch\",\n props: {\n debounce: { type: Number, default: 0 },\n label: { type: String as PropType<string | undefined>, default: undefined },\n placeholder: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props) {\n const table = injectDataTable(\"<DataTableSearch>\");\n const locale = useTableLocale();\n let timer: ReturnType<typeof setTimeout> | undefined;\n onScopeDispose(() => clearTimeout(timer));\n return () =>\n h(\"input\", {\n type: \"search\",\n value: table.state.search,\n placeholder: props.placeholder,\n \"aria-label\": props.label ?? locale().messages.search,\n onInput: (event: Event) => {\n const { value } = event.target as HTMLInputElement;\n clearTimeout(timer);\n if (props.debounce > 0) {\n timer = setTimeout(() => table.search(value), props.debounce);\n } else {\n table.search(value);\n }\n },\n });\n },\n});\n\n/**\n * Page navigation. The slot receives everything needed to draw custom controls; without one it\n * renders previous, numbered, and next buttons with `aria-current` on the current page.\n */\nexport const DataTablePagination = defineComponent({\n name: \"DataTablePagination\",\n slots: Object as SlotsType<{\n default?: (props: {\n page: number;\n pageCount: number;\n items: readonly PageItem[];\n canPrevious: boolean;\n canNext: boolean;\n goToPage: (page: number) => void;\n next: () => void;\n previous: () => void;\n }) => VNode[];\n }>,\n props: {\n as: asProp(\"nav\"),\n label: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTablePagination>\");\n const locale = useTableLocale();\n return () => {\n const { messages, count } = locale();\n const slotProps = {\n page: table.page,\n pageCount: table.pageCount,\n items: table.pageItems,\n canPrevious: table.canPreviousPage,\n canNext: table.canNextPage,\n goToPage: table.goToPage,\n next: table.nextPage,\n previous: table.previousPage,\n };\n const button = (\n label: string,\n content: string,\n disabled: boolean,\n onClick: () => void,\n current = false,\n ) =>\n h(\n \"button\",\n {\n type: \"button\",\n disabled,\n \"aria-label\": label,\n \"aria-current\": current ? \"page\" : undefined,\n \"data-current\": flag(current),\n onClick,\n },\n content,\n );\n return h(\n props.as,\n { \"aria-label\": props.label ?? messages.pagination },\n slots.default?.(slotProps) ?? [\n button(messages.previousPage, \"‹\", !table.canPreviousPage, table.previousPage),\n ...table.pageItems.map((item) =>\n item.type === \"gap\"\n ? h(\"span\", { key: item.key, \"aria-hidden\": \"true\", \"data-gap\": \"\" }, \"…\")\n : button(\n messages.page(count(item.page)),\n count(item.page).text,\n false,\n () => table.goToPage(item.page),\n item.current,\n ),\n ),\n button(messages.nextPage, \"›\", !table.canNextPage, table.nextPage),\n ],\n );\n };\n },\n});\n\n/** A page size picker. */\nexport const DataTablePageSize = defineComponent({\n name: \"DataTablePageSize\",\n props: {\n options: { type: Array as PropType<readonly number[]>, default: () => [5, 10, 20, 50] },\n label: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props) {\n const table = injectDataTable(\"<DataTablePageSize>\");\n const locale = useTableLocale();\n return () => {\n const sizes = props.options.includes(table.pageSize)\n ? props.options\n : [...props.options, table.pageSize].toSorted((left, right) => left - right);\n return h(\n \"select\",\n {\n value: table.pageSize,\n \"aria-label\": props.label ?? locale().messages.rowsPerPage,\n onChange: (event: Event) =>\n table.setPageSize(Number((event.target as HTMLSelectElement).value)),\n },\n sizes.map((size) =>\n h(\n \"option\",\n { key: size, value: size, selected: size === table.pageSize },\n locale().count(size).text,\n ),\n ),\n );\n };\n },\n});\n\n/** A checkbox per column that shows or hides it. The slot receives the columns and `toggle`. */\nexport const DataTableColumnVisibility = defineComponent({\n name: \"DataTableColumnVisibility\",\n slots: Object as SlotsType<{\n default?: (props: {\n columns: readonly { column: TableColumn<unknown>; visible: boolean }[];\n toggle: (columnId: string, visible?: boolean) => void;\n }) => VNode[];\n }>,\n props: {\n as: asProp(\"fieldset\"),\n legend: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableColumnVisibility>\");\n const locale = useTableLocale();\n return () => {\n const hidden = new Set(table.state.hiddenColumns);\n const columns = table.allColumns.map((column) => ({\n column,\n visible: !hidden.has(column.id),\n }));\n return h(\n props.as,\n slots.default?.({ columns, toggle: table.toggleColumn }) ?? [\n props.as === \"fieldset\" ? h(\"legend\", props.legend ?? locale().messages.columns) : null,\n ...columns.map(({ column, visible }) =>\n h(\"label\", { key: column.id, \"data-column\": column.id }, [\n h(\"input\", {\n type: \"checkbox\",\n checked: visible,\n disabled: visible && table.columns.length === 1,\n onChange: () => table.toggleColumn(column.id),\n }),\n column.header,\n ]),\n ),\n ],\n );\n };\n },\n});\n\n/**\n * A polite live region describing what is shown, such as \"1–10 of 57 rows\". Screen readers\n * announce it after a search, filter, or page change.\n */\nexport interface TableStatusSlotProps {\n readonly start: number;\n readonly end: number;\n readonly rowCount: number;\n readonly totalRowCount: number;\n readonly selectedCount: number;\n readonly loadState: LoadState;\n readonly loadedRowCount: number;\n readonly loadError: TableIssue | undefined;\n readonly canLoadMore: boolean;\n readonly retry: () => void;\n readonly loadNext: () => Promise<void>;\n readonly loadingChildrenCount: number;\n readonly childErrorCount: number;\n}\nexport const DataTableStatus = defineComponent({\n name: \"DataTableStatus\",\n slots: Object as SlotsType<{\n default?: (props: TableStatusSlotProps) => VNode[];\n }>,\n props: { as: asProp(\"p\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableStatus>\");\n const locale = useTableLocale();\n return () => {\n const { messages, count } = locale();\n const slotProps = {\n start: table.pageStart,\n end: table.pageEnd,\n rowCount: table.rowCount,\n totalRowCount: table.totalRowCount,\n selectedCount: table.selectedCount,\n loadState: table.loadState,\n loadedRowCount: table.loadedRowCount,\n loadError: table.loadError,\n canLoadMore: table.canLoadMore,\n retry: () => table.retry(),\n loadNext: () => table.loadNext(),\n loadingChildrenCount: table.tree\n ? table.processedRows.filter((row) => row.childStatus === \"loading\").length\n : 0,\n childErrorCount: table.tree\n ? table.processedRows.filter((row) => row.childStatus === \"error\").length\n : 0,\n };\n const text = table.loadingMode\n ? messages.loadedStatus({ loaded: count(table.loadedRowCount), state: table.loadState })\n : table.rowCount === 0\n ? messages.noRows\n : messages.rangeStatus({\n start: count(table.pageStart),\n end: count(table.pageEnd),\n total: count(table.rowCount),\n selected: count(table.selectedCount),\n });\n return h(\n props.as,\n { role: \"status\", \"aria-live\": \"polite\" },\n slots.default?.(slotProps) ??\n [\n text,\n slotProps.loadingChildrenCount ? messages.loadingChildren : \"\",\n slotProps.childErrorCount ? messages.childrenError : \"\",\n ]\n .filter((part) => part !== \"\")\n .join(\" \"),\n );\n };\n },\n});\n","import {\n injectDataTable,\n useTableLocale,\n type AnyDataTableBinding,\n type TableLocale,\n} from \"@vueye-table/vue\";\nimport { defineComponent, h, type PropType, type VNode } from \"vue\";\n\n/** Keep this visual sentinel out of the live region and logical data-row count. */\nexport function loadSentinel(\n table: AnyDataTableBinding,\n colspan: number,\n locale?: TableLocale,\n): VNode | undefined {\n return table.loadingMode === \"cursor\" &&\n table.loadedRowCount > 0 &&\n (table.loadState === \"loading\" || table.loadState === \"streaming\")\n ? h(\"tr\", { key: \"vt-load-sentinel\", \"data-load-sentinel\": \"\", \"aria-hidden\": \"true\" }, [\n h(\n \"td\",\n { colspan: Math.max(1, colspan), class: \"vt-load-sentinel\" },\n locale?.messages.loadingMoreRows ?? \"Loading more rows…\",\n ),\n ])\n : undefined;\n}\n\n/** A keyboard-accessible alternative to automatic virtual-end loading, with error recovery. */\nexport const DataTableLoadMore = defineComponent({\n name: \"DataTableLoadMore\",\n props: {\n label: { type: String as PropType<string | undefined>, default: undefined },\n retryLabel: { type: String as PropType<string | undefined>, default: undefined },\n loadingLabel: { type: String as PropType<string | undefined>, default: undefined },\n },\n setup(props) {\n const table = injectDataTable(\"<DataTableLoadMore>\");\n const locale = useTableLocale();\n return () =>\n table.loadState === \"error\"\n ? h(\n \"button\",\n { type: \"button\", onClick: () => table.retry() },\n props.retryLabel ?? locale().messages.retryLoading,\n )\n : table.loadingMode === \"cursor\" && table.loadState !== \"done\"\n ? h(\n \"button\",\n {\n type: \"button\",\n disabled: !table.canLoadMore,\n onClick: () => {\n void table.loadNext();\n },\n },\n table.loadState === \"loading\" || table.loadState === \"streaming\"\n ? (props.loadingLabel ?? locale().messages.loadingRows)\n : (props.label ?? locale().messages.loadMoreRows),\n )\n : null;\n },\n});\n","import {\n formatValue,\n type EditorSpec,\n type TableColumn,\n type TableIssue,\n type TableRow,\n type EditResult,\n} from \"@vueye-table/core\";\nimport { useTableLocale } from \"@vueye-table/vue\";\nimport {\n computed,\n defineComponent,\n h,\n onMounted,\n ref,\n useId,\n type PropType,\n type VNodeChild,\n} from \"vue\";\n\n/** Shared by native editors and application-owned editor slots. */\nexport interface CellEditorSlotProps {\n readonly row: TableRow<unknown>;\n readonly column: TableColumn<unknown>;\n readonly value: unknown;\n readonly draft: string;\n readonly spec: EditorSpec;\n readonly finish: (direction?: \"up\" | \"down\" | \"left\" | \"right\") => void;\n readonly input: (text: string) => void;\n /** Alias retained for existing headless grid slots. */\n readonly update: (text: string) => void;\n /** Strings pass through parse; typed values use core's value-edit path. */\n readonly commit: (\n value?: unknown,\n ) => EditResult<unknown> | Promise<EditResult<unknown>> | undefined;\n readonly cancel: () => void;\n readonly issues: readonly TableIssue[];\n readonly pending: boolean;\n /** Bind to a custom field to associate its validation message. */\n readonly attrs: Readonly<Record<string, string | undefined>>;\n}\n\nexport function editorText(value: unknown, kind: EditorSpec[\"kind\"]): string {\n if (value === null || value === undefined) return \"\";\n if (kind === \"date\" && value instanceof Date)\n return Number.isFinite(value.getTime()) ? value.toISOString().slice(0, 10) : \"\";\n return formatValue(value);\n}\n\nexport const cellEditorProps = {\n editor: { type: Object as PropType<CellEditorSlotProps>, required: true },\n spec: { type: Object as PropType<EditorSpec>, default: () => ({ kind: \"text\" }) },\n /** Keyboard movement is owned by the surrounding cell. */\n finish: {\n type: Function as PropType<\n ((direction?: \"up\" | \"down\" | \"left\" | \"right\") => void) | undefined\n >,\n default: undefined,\n },\n autofocus: { type: Boolean, default: true },\n blurCommit: { type: Boolean, default: true },\n tabCommit: { type: Boolean, default: true },\n} as const;\n\n/** Plain native fields. Select results are searched and capped at 50 mounted options. */\nexport const DataCellEditor = defineComponent({\n name: \"DataCellEditor\",\n props: cellEditorProps,\n setup(props) {\n const locale = useTableLocale();\n const field = ref<HTMLInputElement | HTMLSelectElement>();\n const query = ref(\"\");\n // The caller resolves the spec at edit entry, not on every keystroke.\n const options = props.spec.options ?? [];\n const matches = computed(() => {\n const search = query.value.trim().toLocaleLowerCase();\n return options\n .map((value, index) => ({ value, index }))\n .filter(({ value }) =>\n String(value ?? \"\")\n .toLocaleLowerCase()\n .includes(search),\n );\n });\n onMounted(() => {\n if (!props.autofocus) return;\n field.value?.focus();\n if (\n field.value &&\n \"setSelectionRange\" in field.value &&\n [\"text\", \"number\"].includes(props.spec.kind)\n )\n field.value.setSelectionRange(field.value.value.length, field.value.value.length);\n });\n const finish = (direction?: \"up\" | \"down\" | \"left\" | \"right\"): void => {\n if (props.finish) props.finish(direction);\n else void props.editor.commit();\n };\n const keydown = (event: KeyboardEvent): void => {\n if (event.isComposing) return;\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n if (!props.editor.pending) props.editor.cancel();\n } else if (event.key === \"Enter\" || event.key === \"Tab\") {\n if (event.key === \"Tab\" && !props.tabCommit) return;\n event.preventDefault();\n event.stopPropagation();\n if (!props.editor.pending)\n finish(\n event.key === \"Tab\"\n ? event.shiftKey\n ? \"left\"\n : \"right\"\n : event.shiftKey\n ? \"up\"\n : \"down\",\n );\n }\n };\n const paste = (event: ClipboardEvent): void => {\n const text = event.clipboardData?.getData(\"text/plain\");\n if (text === undefined || props.editor.pending) return;\n event.preventDefault();\n const target = event.target as HTMLInputElement;\n const start = target.selectionStart ?? 0;\n const end = target.selectionEnd ?? target.value.length;\n props.editor.input(target.value.slice(0, start) + text + target.value.slice(end));\n };\n return () => {\n const { editor, spec } = props;\n const { messages, count } = locale();\n const attrs = {\n ...editor.attrs,\n \"aria-label\": messages.editCell(editor.column.header),\n \"data-editor\": \"\",\n disabled: editor.pending,\n onKeydown: keydown,\n };\n if (spec.kind === \"select\") {\n const shown = matches.value.slice(0, 50);\n return h(\n \"div\",\n {\n \"data-select-editor\": \"\",\n onKeydown: (event: KeyboardEvent) => {\n if (event.key === \"Escape\") keydown(event);\n },\n },\n [\n h(\"input\", {\n ref: field,\n type: \"search\",\n value: query.value,\n \"aria-label\": messages.searchOptions(editor.column.header),\n disabled: editor.pending,\n onInput: (event: Event) => {\n query.value = (event.target as HTMLInputElement).value;\n },\n onKeydown: (event: KeyboardEvent) => {\n if (event.key === \"Enter\" && shown[0]) {\n event.preventDefault();\n void editor.commit(shown[0].value);\n } else keydown(event);\n },\n }),\n h(\n \"select\",\n {\n ...attrs,\n value: options.findIndex((value) => Object.is(value, editor.value)),\n size: Math.max(2, Math.min(5, shown.length)),\n onChange: (event: Event) => {\n const index = Number((event.target as HTMLSelectElement).value);\n if (index >= 0) void editor.commit(options[index]);\n },\n },\n shown.map(({ value, index }) =>\n h(\n \"option\",\n { key: index, value: index },\n value === null || value === undefined ? messages.emptyOption : String(value),\n ),\n ),\n ),\n h(\n \"span\",\n { role: \"status\", \"data-editor-hint\": \"\" },\n matches.value.length === 0\n ? messages.noMatchingOptions\n : matches.value.length > 50\n ? messages.firstMatchesOnly(count(50))\n : messages.optionCount(count(matches.value.length)),\n ),\n ],\n );\n }\n return h(\"input\", {\n ...attrs,\n ref: field,\n type: spec.kind === \"date\" ? \"date\" : spec.kind === \"checkbox\" ? \"checkbox\" : \"text\",\n inputmode: spec.kind === \"number\" ? \"decimal\" : undefined,\n value: editor.draft,\n checked: spec.kind === \"checkbox\" ? editor.value === true : undefined,\n onInput:\n spec.kind === \"checkbox\"\n ? undefined\n : (event: Event) => editor.input((event.target as HTMLInputElement).value),\n onChange:\n spec.kind === \"checkbox\"\n ? (event: Event) => editor.commit((event.target as HTMLInputElement).checked)\n : undefined,\n onBlur: () => {\n if (props.blurCommit && !editor.pending) finish();\n },\n onPaste: spec.kind === \"checkbox\" ? undefined : paste,\n });\n };\n },\n});\n\n/** The cell owns the id so it remains stable while its editor mounts and unmounts. */\nexport function issueAttrs(\n id: string,\n issues: readonly TableIssue[],\n pending: boolean,\n): Readonly<Record<string, string | undefined>> {\n return {\n \"aria-invalid\": issues.length ? \"true\" : undefined,\n \"aria-describedby\": issues.length ? id : undefined,\n \"aria-busy\": pending ? \"true\" : undefined,\n };\n}\n\nexport function editorIssues(\n id: string,\n issues: readonly TableIssue[],\n pending = false,\n): VNodeChild {\n return issues.length || pending\n ? h(\n \"span\",\n { id, \"data-edit-issues\": \"\", role: \"status\" },\n pending ? \"Checking changes…\" : issues.map((problem) => problem.message).join(\" \"),\n )\n : null;\n}\n\nexport function useEditorId(): string {\n return `vt-edit-${useId()}`;\n}\n","import type { TableColumn, TableRow } from \"@vueye-table/core\";\nimport {\n useVirtualColumns,\n useVirtualRows,\n type AnyDataTableBinding,\n type DataGridBinding,\n type VirtualBinding,\n type VirtualColumnItem,\n type VirtualRowItem,\n} from \"@vueye-table/vue\";\nimport {\n computed,\n onMounted,\n watch,\n defineComponent,\n h,\n inject,\n provide,\n shallowRef,\n type InjectionKey,\n type PropType,\n type ShallowRef,\n type SlotsType,\n type VNode,\n type VNodeChild,\n} from \"vue\";\n\nimport { asProp } from \"./shared\";\n\nexport interface ComponentVirtualOptions {\n readonly rowHeight?: number | ((index: number) => number) | undefined;\n readonly overscan?: number | undefined;\n readonly initialCount?: number | undefined;\n readonly columnWidth?: number | undefined;\n readonly columnOverscan?: number | undefined;\n readonly initialColumnCount?: number | undefined;\n}\n\n/** Shared opt-in renderer props. Options are applied when the virtual renderer is created. */\nexport const virtualProps = {\n virtual: {\n type: [Boolean, Object] as PropType<boolean | ComponentVirtualOptions>,\n default: false,\n },\n height: { type: String as PropType<string | undefined>, default: undefined },\n rowHeight: { type: Number, default: 40 },\n overscan: { type: Number, default: 5 },\n virtualColumns: { type: Boolean, default: false },\n columnWidth: { type: Number, default: 120 },\n} as const;\n\nexport function virtualOptions(props: {\n readonly virtual: boolean | ComponentVirtualOptions;\n readonly rowHeight: number;\n readonly overscan: number;\n readonly columnWidth: number;\n}): ComponentVirtualOptions {\n return {\n rowHeight: props.rowHeight,\n overscan: props.overscan,\n columnWidth: props.columnWidth,\n ...(typeof props.virtual === \"object\" ? props.virtual : {}),\n };\n}\n\nconst viewportKey: InjectionKey<ShallowRef<HTMLElement | null | undefined>> = Symbol(\"vt-viewport\");\nexport interface ComponentVirtualBinding {\n readonly rows: VirtualBinding<VirtualRowItem<unknown>>;\n readonly columns: VirtualBinding<VirtualColumnItem<unknown>> | undefined;\n readonly rowItems: readonly VirtualRowItem<unknown>[];\n readonly columnItems: readonly VirtualColumnItem<unknown>[] | undefined;\n readonly gutter: number;\n}\nconst virtualKey: InjectionKey<ComponentVirtualBinding> = Symbol(\"vt-virtual-renderer\");\nexport function injectVirtual(): ComponentVirtualBinding | undefined {\n return inject(virtualKey, undefined);\n}\n\n/** A scroll container for a headless table/grid. It supplies its element without global reads. */\nexport const DataTableViewport = defineComponent({\n name: \"DataTableViewport\",\n slots: Object as SlotsType<{ default?: () => VNode[] }>,\n props: { as: asProp(\"div\"), height: { type: String, default: \"24rem\" } },\n setup(props, { slots, expose }) {\n const element = shallowRef<HTMLElement | null>(null);\n provide(viewportKey, element);\n expose({ element });\n return () =>\n h(\n props.as,\n {\n ref: element,\n \"data-virtual-viewport\": \"\",\n style: { height: props.height, overflow: \"auto\", overflowAnchor: \"none\" },\n },\n slots.default?.(),\n );\n },\n});\n\nexport function createComponentVirtual(\n table: AnyDataTableBinding,\n options: ComponentVirtualOptions,\n tableElement: () => HTMLElement | null | undefined,\n grid?: DataGridBinding<unknown>,\n virtualColumns = false,\n gutter = 0,\n): ComponentVirtualBinding {\n const scrollElement = inject(viewportKey, shallowRef<HTMLElement | null>(null));\n const rows = useVirtualRows(table, {\n scrollElement,\n estimateRowHeight: options.rowHeight,\n overscan: options.overscan,\n initialCount: options.initialCount,\n grid,\n scrollMargin: () => tableElement()?.querySelector(\"thead\")?.getBoundingClientRect().height ?? 0,\n });\n onMounted(() => {\n watch(\n () => [rows.endIndex, table.renderItems.length, table.canLoadMore] as const,\n () => {\n if (\n table.loadingMode === \"cursor\" &&\n table.canLoadMore &&\n rows.endIndex >= table.renderItems.length - 1 - table.endThreshold\n )\n void table.loadNext();\n },\n { immediate: true },\n );\n });\n const columns =\n grid && virtualColumns\n ? useVirtualColumns(grid, {\n scrollElement,\n estimateColumnWidth: (index) => table.columns[index]?.width ?? options.columnWidth ?? 120,\n overscan: options.columnOverscan ?? 1,\n initialCount: options.initialColumnCount ?? 5,\n scrollMargin: gutter,\n })\n : undefined;\n const pinnedRows = computed(() => {\n const result = [...rows.items];\n const positions = new Set([grid?.selection?.focus.row, grid?.editor?.position.row]);\n for (const position of positions) {\n if (\n position === undefined ||\n result.some(\n (item) => item.renderItem.kind === \"row\" && item.renderItem.rowIndex === position,\n )\n )\n continue;\n const direct = table.renderItems[position];\n const index =\n direct?.kind === \"row\" && direct.rowIndex === position\n ? position\n : table.renderItems.findIndex(\n (item) => item.kind === \"row\" && item.rowIndex === position,\n );\n const item = rows.getItem(index);\n if (item) result.push(item);\n }\n return result.sort((a, b) => a.index - b.index);\n });\n const pinnedColumns = computed(() => {\n if (!columns) return undefined;\n const result = [...columns.items];\n const positions = new Set([grid?.selection?.focus.column, grid?.editor?.position.column]);\n for (const position of positions) {\n if (position === undefined || result.some((item) => item.index === position)) continue;\n const item = columns.getItem(position);\n if (item) result.push(item);\n }\n return result.sort((a, b) => a.index - b.index);\n });\n const binding: ComponentVirtualBinding = {\n rows,\n columns,\n gutter,\n get rowItems() {\n return pinnedRows.value;\n },\n get columnItems() {\n return pinnedColumns.value;\n },\n };\n provide(virtualKey, binding);\n return binding;\n}\n\n/** Create composables only for an enabled renderer, preserving the ordinary component path. */\nexport const VirtualContent = defineComponent({\n name: \"DataTableVirtualContent\",\n props: {\n table: { type: Object as PropType<AnyDataTableBinding>, required: true },\n options: { type: Object as PropType<ComponentVirtualOptions>, required: true },\n tableElement: {\n type: Function as PropType<() => HTMLElement | null | undefined>,\n required: true,\n },\n grid: { type: Object as PropType<DataGridBinding<unknown>>, default: undefined },\n virtualColumns: { type: Boolean, default: false },\n gutter: { type: Number, default: 0 },\n render: {\n type: Function as PropType<(binding: ComponentVirtualBinding) => VNode>,\n required: true,\n },\n },\n setup(props) {\n const binding = createComponentVirtual(\n props.table,\n props.options,\n props.tableElement,\n props.grid,\n props.virtualColumns,\n props.gutter,\n );\n return () => props.render(binding);\n },\n});\n\nexport function rowSpacer(size: number, colspan: number, key: string): VNode | null {\n return size > 0\n ? h(\n \"tr\",\n {\n key,\n \"aria-hidden\": \"true\",\n role: \"presentation\",\n \"data-virtual-spacer\": \"\",\n style: { height: `${size}px` },\n },\n [\n h(\"td\", {\n colspan: Math.max(1, colspan),\n style: { height: `${size}px`, padding: \"0\", border: \"0\", lineHeight: \"0\" },\n }),\n ],\n )\n : null;\n}\nexport function columnSpacer(size: number, tag: \"th\" | \"td\", key: string): VNode | null {\n return size > 0\n ? h(tag, {\n key,\n \"aria-hidden\": \"true\",\n role: \"presentation\",\n \"data-virtual-spacer\": \"\",\n style: { width: `${size}px`, minWidth: `${size}px`, padding: \"0\", border: \"0\" },\n })\n : null;\n}\nexport function renderColumns(\n tableColumns: readonly TableColumn<unknown>[],\n binding: ComponentVirtualBinding | undefined,\n render: (column: TableColumn<unknown>, index: number) => VNodeChild,\n tag: \"th\" | \"td\",\n): VNodeChild[] {\n if (!binding?.columns || !binding.columnItems) return tableColumns.map(render);\n const result: VNodeChild[] = [];\n let end = 0;\n for (const item of binding.columnItems) {\n result.push(\n columnSpacer(item.start - end, tag, `gap-${item.index}`),\n render(item.column, item.index),\n );\n end = item.start + item.size;\n }\n result.push(columnSpacer(binding.columns.totalSize - end, tag, \"gap-end\"));\n return result;\n}\nexport function renderRows(\n binding: ComponentVirtualBinding,\n colspan: number,\n render: (item: VirtualRowItem<unknown>) => VNodeChild,\n): VNodeChild[] {\n const result: VNodeChild[] = [];\n let end = 0;\n for (const item of binding.rowItems) {\n result.push(rowSpacer(item.start - end, colspan, `gap-${item.index}`), render(item));\n end = item.start + item.size;\n }\n result.push(rowSpacer(binding.rows.totalSize - end, colspan, \"gap-end\"));\n return result;\n}\nexport function virtualColgroup(\n tableColumns: readonly TableColumn<unknown>[],\n binding: ComponentVirtualBinding,\n): VNode | null {\n if (!binding.columns || !binding.columnItems) return null;\n const cols: VNodeChild[] = binding.gutter\n ? [h(\"col\", { style: { width: `${binding.gutter}px` } })]\n : [];\n let end = 0;\n for (const item of binding.columnItems) {\n if (item.start > end) cols.push(h(\"col\", { style: { width: `${item.start - end}px` } }));\n cols.push(h(\"col\", { style: { width: `${item.size}px` } }));\n end = item.start + item.size;\n }\n if (binding.columns.totalSize > end)\n cols.push(h(\"col\", { style: { width: `${binding.columns.totalSize - end}px` } }));\n void tableColumns;\n return h(\"colgroup\", cols);\n}\nexport function virtualRow(\n binding: ComponentVirtualBinding,\n row: TableRow<unknown>,\n): VirtualRowItem<unknown> | undefined {\n return binding.rowItems.find(\n (item) => item.renderItem.kind === \"row\" && item.renderItem.row.key === row.key,\n );\n}\n","import { getRowItemKey, gridCommand, type RowKey, type TableRow } from \"@vueye-table/core\";\nimport {\n injectDataGrid,\n injectDataTable,\n useTableLocale,\n type AnyDataTableBinding,\n} from \"@vueye-table/vue\";\nimport {\n defineComponent,\n computed,\n h,\n inject,\n nextTick,\n provide,\n shallowRef,\n useId,\n type ComponentPublicInstance,\n type InjectionKey,\n type PropType,\n type SlotsType,\n type VNode,\n type VNodeChild,\n} from \"vue\";\n\nimport { asProp, directionOf, rowProp } from \"./shared\";\nimport { injectVirtual, type ComponentVirtualBinding } from \"./virtual\";\n\nexport const hierarchyProps = {\n treeColumn: { type: String as PropType<string | undefined>, default: undefined },\n keepAliveDetail: { type: Boolean, default: false },\n} as const;\ninterface Hierarchy {\n readonly id: string;\n readonly table: AnyDataTableBinding;\n readonly treeColumn: string | undefined;\n readonly keepAliveDetail: boolean;\n readonly focus: ReturnType<typeof shallowRef<RowKey | undefined>>;\n readonly focusKey: RowKey | undefined;\n}\nconst hierarchyKey: InjectionKey<Hierarchy> = Symbol(\"vueye-table-hierarchy\");\nexport function provideHierarchy(\n table: AnyDataTableBinding,\n props: { readonly treeColumn?: string | undefined; readonly keepAliveDetail: boolean },\n): Hierarchy {\n const focus = shallowRef<RowKey>();\n const focusKey = computed(() =>\n table.rows.some((row) => row.key === focus.value) ? focus.value : table.rows[0]?.key,\n );\n const context: Hierarchy = {\n id: `vt-tree-${useId()}`,\n table,\n get treeColumn() {\n return props.treeColumn;\n },\n get keepAliveDetail() {\n return props.keepAliveDetail;\n },\n focus,\n get focusKey() {\n return focusKey.value;\n },\n };\n provide(hierarchyKey, context);\n return context;\n}\nexport function injectHierarchy(): Hierarchy | undefined {\n return inject(hierarchyKey, undefined);\n}\nexport function resolveTreeColumn(table: AnyDataTableBinding, column?: string): string | undefined {\n return table.columns.find((candidate) => candidate.id === column)?.id ?? table.columns[0]?.id;\n}\nfunction itemId(\n context: Hierarchy | undefined,\n row: TableRow<unknown>,\n detail = false,\n): string | undefined {\n return context\n ? `${context.id}-${encodeURIComponent(getRowItemKey(row.key, detail ? \"detail\" : \"row\"))}`\n : undefined;\n}\nconst siblingCache = new WeakMap<\n readonly TableRow<unknown>[],\n ReadonlyMap<RowKey, { position: number; size: number; index: number }>\n>();\nexport function hierarchyRowAttrs(\n table: AnyDataTableBinding,\n row: TableRow<unknown>,\n context?: Hierarchy,\n): Record<string, unknown> {\n if (!table.tree) return {};\n let positions = siblingCache.get(table.processedRows);\n if (!positions) {\n const groups = new Map<RowKey | undefined, TableRow<unknown>[]>();\n for (const candidate of table.processedRows) {\n const group = groups.get(candidate.parentKey) ?? [];\n group.push(candidate);\n groups.set(candidate.parentKey, group);\n }\n const indices = new Map(table.processedRows.map((candidate, index) => [candidate.key, index]));\n const result = new Map<RowKey, { position: number; size: number; index: number }>();\n for (const group of groups.values())\n group.forEach((candidate, index) =>\n result.set(candidate.key, {\n position: index + 1,\n size: group.length,\n index: indices.get(candidate.key)!,\n }),\n );\n positions = result;\n siblingCache.set(table.processedRows, result);\n }\n const position = positions.get(row.key);\n return {\n id: itemId(context, row),\n \"data-tree-key\": getRowItemKey(row.key),\n \"aria-level\": row.depth + 1,\n \"aria-expanded\": row.canExpand ? String(row.isExpanded) : undefined,\n \"aria-setsize\": position?.size,\n \"aria-posinset\": position?.position,\n \"aria-rowindex\": position ? position.index + 2 : undefined,\n \"aria-busy\": row.childStatus === \"loading\" ? \"true\" : undefined,\n };\n}\n\n/** Row-focused table navigation; cell-focused grids use the same pure core commands. */\nexport function treeKeydown(\n event: KeyboardEvent,\n context: Hierarchy,\n virtual?: ComponentVirtualBinding,\n): void {\n const table = context.table;\n const target = event.target as HTMLElement | null;\n if (!table.tree || !target?.closest) return;\n if (\n target.closest(\"input, textarea, select, [contenteditable=true]\") ||\n (target.closest(\"button\") && !target.closest(\"[data-expand-toggle]\"))\n )\n return;\n const key = target.closest(\"tr\")?.getAttribute(\"data-tree-key\");\n const index = table.rows.findIndex((row) => getRowItemKey(row.key) === key);\n const row = table.rows[index];\n if (!row) return;\n const command = gridCommand(\n {\n key: event.key,\n shiftKey: event.shiftKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n altKey: event.altKey,\n direction: directionOf(target),\n },\n { canExpand: row.canExpand, expanded: row.isExpanded },\n );\n let next = row;\n if (command?.type === \"tree\") {\n if (command.action === \"expand\" || command.action === \"collapse\")\n table.toggleExpanded(row.key, command.action === \"expand\");\n else if (command.action === \"siblings\") {\n for (const sibling of table.processedRows.filter(\n (candidate) => candidate.parentKey === row.parentKey && candidate.canExpand,\n ))\n table.toggleExpanded(sibling.key, true);\n } else if (command.action === \"child\")\n next = table.rows.find((candidate) => candidate.parentKey === row.key) ?? row;\n else next = table.rows.find((candidate) => candidate.key === row.parentKey) ?? row;\n } else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")\n next = table.rows[index + (event.key === \"ArrowDown\" ? 1 : -1)] ?? row;\n else if (event.key === \"Home\" || event.key === \"End\")\n next = table.rows[event.key === \"Home\" ? 0 : table.rows.length - 1] ?? row;\n else return;\n event.preventDefault();\n const root = target.closest(\"table\");\n context.focus.value = next.key;\n virtual?.rows.scrollToKey(next.key);\n const id = itemId(context, next);\n void nextTick(() => root?.ownerDocument.getElementById(id ?? \"\")?.focus());\n}\n\nexport const expandToggleProps = {\n row: rowProp,\n controls: { type: String as PropType<string | undefined>, default: undefined },\n expandLabel: { type: String as PropType<string | undefined>, default: undefined },\n collapseLabel: { type: String as PropType<string | undefined>, default: undefined },\n} as const;\nexport const treeCellProps = { row: rowProp, as: asProp(\"div\") } as const;\nexport const DataTableExpandToggle = defineComponent({\n name: \"DataTableExpandToggle\",\n props: expandToggleProps,\n slots: Object as SlotsType<{\n default?: (props: { row: TableRow<unknown>; expanded: boolean }) => VNodeChild;\n }>,\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableExpandToggle>\");\n const context = injectHierarchy();\n const grid = injectDataGrid();\n const locale = useTableLocale();\n const label = (): string =>\n props.row.isExpanded\n ? (props.collapseLabel ?? locale().messages.collapseRow)\n : (props.expandLabel ?? locale().messages.expandRow);\n return () =>\n props.row.canExpand\n ? h(\n \"button\",\n {\n type: \"button\",\n \"data-expand-toggle\": \"\",\n tabindex: table.tree ? -1 : undefined,\n \"aria-expanded\": String(props.row.isExpanded),\n \"aria-controls\":\n props.controls ??\n (!table.tree\n ? itemId(context, props.row, true)\n : props.row.isExpanded\n ? table.rows\n .filter((row) => row.parentKey === props.row.key)\n .map((row) => itemId(context, row))\n .filter(Boolean)\n .join(\" \") || undefined\n : undefined),\n \"aria-label\": label(),\n onMousedown: (event: Event) => event.stopPropagation(),\n onDblclick: (event: Event) => event.stopPropagation(),\n onClick: (event: Event) => {\n event.stopPropagation();\n if (grid?.table === table)\n grid.focusCell({\n row: table.rows.indexOf(props.row),\n column: Math.max(\n 0,\n table.columns.findIndex(\n (column) => column.id === resolveTreeColumn(table, context?.treeColumn),\n ),\n ),\n });\n table.toggleExpanded(props.row.key);\n if (grid?.table === table)\n void nextTick(() => (event.target as HTMLElement).closest(\"table\")?.focus());\n },\n },\n slots.default?.({ row: props.row, expanded: props.row.isExpanded }) ?? label(),\n )\n : null;\n },\n});\n\nexport const DataTableTreeCell = defineComponent({\n name: \"DataTableTreeCell\",\n props: treeCellProps,\n slots: Object as SlotsType<{\n default?: () => VNodeChild;\n toggle?: (props: { row: TableRow<unknown> }) => VNodeChild;\n }>,\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableTreeCell>\");\n const context = injectHierarchy();\n const grid = injectDataGrid();\n const locale = useTableLocale();\n return () =>\n h(\n props.as,\n {\n class: \"vt-tree-cell\",\n \"data-tree-cell\": \"\",\n style: {\n paddingInlineStart: `calc(var(--vt-tree-indent, 1.25rem) * ${props.row.depth})`,\n },\n },\n [\n h(\n \"span\",\n { class: \"vt-tree-toggle\" },\n slots.toggle?.({ row: props.row }) ?? h(DataTableExpandToggle, { row: props.row }),\n ),\n h(\"span\", { class: \"vt-tree-label\" }, [slots.default?.()]),\n props.row.childStatus === \"loading\"\n ? h(\"span\", { class: \"vt-tree-loading\" }, locale().messages.loadingChildren)\n : null,\n props.row.childStatus === \"error\"\n ? h(\"span\", { class: \"vt-tree-error\" }, [\n `${locale().messages.childrenError} `,\n h(\n \"button\",\n {\n type: \"button\",\n class: \"vt-tree-retry\",\n onMousedown: (event: Event) => event.stopPropagation(),\n onClick: (event: Event) => {\n event.stopPropagation();\n const element = (event.currentTarget as HTMLElement).closest(\"table\");\n if (grid?.table === table)\n grid.focusCell({\n row: table.rows.indexOf(props.row),\n column: Math.max(\n 0,\n table.columns.findIndex(\n (column) =>\n column.id === resolveTreeColumn(table, context?.treeColumn),\n ),\n ),\n });\n table.toggleExpanded(props.row.key, true);\n void nextTick(() => {\n if (grid?.table === table) element?.focus();\n else\n element?.ownerDocument\n .getElementById(itemId(context, props.row) ?? \"\")\n ?.focus();\n });\n },\n },\n locale().messages.retryChildren,\n ),\n ])\n : null,\n ],\n );\n },\n});\n\n/** One full-width detail; retained collapsed content remains hidden and unmeasured. */\nexport const DataTableDetailRow = defineComponent({\n name: \"DataTableDetailRow\",\n props: {\n row: rowProp,\n colspan: { type: Number, default: undefined },\n hidden: { type: Boolean, default: false },\n keepAlive: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n },\n slots: Object as SlotsType<{ default?: (props: { row: TableRow<unknown> }) => VNodeChild }>,\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableDetailRow>\");\n const context = injectHierarchy();\n const virtual = injectVirtual();\n let opened = false;\n return () => {\n if (props.row.isExpanded && !props.hidden) opened = true;\n if (\n !opened ||\n ((!props.row.isExpanded || props.hidden) && !(props.keepAlive ?? context?.keepAliveDetail))\n )\n return null;\n const hidden = props.hidden || !props.row.isExpanded;\n return h(\n \"tr\",\n {\n id: itemId(context, props.row, true),\n \"data-detail\": \"\",\n hidden,\n ...(virtual && !hidden\n ? {\n ref: (target: Element | ComponentPublicInstance | null) =>\n virtual.rows.measureElement(target, getRowItemKey(props.row.key, \"detail\")),\n }\n : {}),\n },\n [\n h(\n \"td\",\n {\n colspan: Math.max(1, props.colspan ?? table.columns.length),\n class: \"vt-detail-cell\",\n },\n [slots.default?.({ row: props.row })],\n ),\n ],\n );\n };\n },\n});\n\nexport interface DetailSlotProps {\n readonly row: TableRow<unknown>;\n readonly rowIndex: number;\n}\nexport function createDetails(\n table: AnyDataTableBinding,\n slot: () => ((props: DetailSlotProps) => VNodeChild) | undefined,\n colspan: () => number,\n): {\n render(row: TableRow<unknown>, rowIndex: number): VNode;\n retained(visible: ReadonlySet<RowKey>): VNode[];\n} {\n const context = injectHierarchy();\n const visited = new Set<RowKey>();\n const render = (row: TableRow<unknown>, rowIndex: number, hidden = false): VNode => {\n if (!hidden && context?.keepAliveDetail) visited.add(row.key);\n return h(\n DataTableDetailRow,\n { key: getRowItemKey(row.key, \"detail\"), row, colspan: colspan(), hidden },\n { default: () => slot()?.({ row, rowIndex }) },\n );\n };\n return {\n render,\n retained(visible) {\n if (!context?.keepAliveDetail) return [];\n return [...visited].flatMap((key) => {\n const index = table.rows.findIndex((row) => row.key === key);\n if (index < 0) {\n visited.delete(key);\n return [];\n }\n return visible.has(key) ? [] : [render(table.rows[index]!, index, true)];\n });\n },\n };\n}\n","import type { SortInfo, TableColumn, TableRow } from \"@vueye-table/core\";\nimport {\n injectDataTable,\n provideDataTable,\n useTableLocale,\n type AnyDataTableBinding,\n type DataTableBinding,\n} from \"@vueye-table/vue\";\nimport {\n defineComponent,\n Fragment,\n h,\n mergeProps,\n shallowRef,\n type PropType,\n type ShallowRef,\n type SlotsType,\n type VNode,\n type ComponentPublicInstance,\n type VNodeChild,\n} from \"vue\";\n\nimport { injectEditingGrid } from \"./editing\";\nimport {\n createDetails,\n DataTableTreeCell,\n hierarchyProps,\n hierarchyRowAttrs,\n injectHierarchy,\n provideHierarchy,\n resolveTreeColumn,\n treeKeydown,\n type DetailSlotProps,\n} from \"./hierarchy\";\nimport { loadSentinel } from \"./loading\";\nimport {\n asProp,\n columnProp,\n flag,\n rowProp,\n columnLayoutProps,\n provideColumnOffset,\n injectColumnOffset,\n} from \"./shared\";\nimport {\n createComponentVirtual,\n injectVirtual,\n renderColumns,\n renderRows,\n rowSpacer,\n virtualProps,\n virtualOptions,\n virtualRow,\n VirtualContent,\n type ComponentVirtualBinding,\n} from \"./virtual\";\n\n/**\n * Provides a table to the components inside it and renders the table element. Without a default\n * slot it renders a complete header and body.\n */\nexport const DataTableRoot = defineComponent({\n name: \"DataTableRoot\",\n slots: Object as SlotsType<{\n default?: (props: { table: DataTableBinding<unknown> }) => VNode[];\n }>,\n props: {\n table: { type: Object as PropType<AnyDataTableBinding>, required: true },\n as: asProp(\"table\"),\n ...virtualProps,\n ...hierarchyProps,\n ...columnLayoutProps,\n },\n setup(props, { slots }) {\n provideDataTable(props.table);\n provideColumnOffset(() => props.leadingColumns);\n const hierarchy = provideHierarchy(props.table, props);\n const element = shallowRef<HTMLElement>();\n const editingGrid = injectEditingGrid();\n const render = (virtual?: ComponentVirtualBinding) =>\n h(\n props.as,\n {\n role: props.table.tree ? \"treegrid\" : undefined,\n \"aria-rowcount\":\n (props.table.tree ? props.table.processedRows.length : props.table.rowCount) + 1,\n \"aria-colcount\": props.table.columns.length + props.leadingColumns,\n \"aria-busy\":\n props.table.loadState === \"loading\" || props.table.loadState === \"streaming\"\n ? \"true\"\n : undefined,\n \"data-empty\": flag(props.table.rowCount === 0),\n onKeydown: (event: KeyboardEvent) => treeKeydown(event, hierarchy, virtual),\n ...(virtual ? { ref: element, \"data-virtual\": \"\" } : {}),\n },\n slots.default?.({ table: props.table }) ?? [h(DataTableHeader), h(DataTableBody)],\n );\n return () =>\n props.virtual\n ? h(VirtualContent, {\n table: props.table,\n ...(editingGrid ? { grid: editingGrid } : {}),\n options: virtualOptions(props),\n tableElement: () => element.value,\n render,\n })\n : render();\n },\n});\n\nexport const DataTableCaption = defineComponent({\n name: \"DataTableCaption\",\n slots: Object as SlotsType<{ default?: () => VNode[] }>,\n props: { as: asProp(\"caption\") },\n setup(props, { slots }) {\n return () => h(props.as, slots.default?.());\n },\n});\n\n/** The header section. Without a slot it renders one header cell per visible column. */\nexport const DataTableHeader = defineComponent({\n name: \"DataTableHeader\",\n slots: Object as SlotsType<{\n default?: (props: { columns: readonly TableColumn<unknown>[] }) => VNode[];\n }>,\n props: { as: asProp(\"thead\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableHeader>\");\n const virtual = injectVirtual();\n return () =>\n h(\n props.as,\n slots.default?.({ columns: table.columns }) ??\n h(DataTableHeaderRow, () =>\n virtual?.columns\n ? h(DataTableVirtualColumns, null, {\n default: ({ column }: { column: TableColumn<unknown> }) => [\n h(DataTableHeaderCell, { key: column.id, column }),\n ],\n })\n : table.columns.map((column) => h(DataTableHeaderCell, { key: column.id, column })),\n ),\n );\n },\n});\n\nexport const DataTableHeaderRow = defineComponent({\n name: \"DataTableHeaderRow\",\n slots: Object as SlotsType<{ default?: () => VNode[] }>,\n props: { as: asProp(\"tr\") },\n setup(props, { slots }) {\n return () => h(props.as, { \"aria-rowindex\": 1 }, slots.default?.());\n },\n});\n\n/** Shared header/body column slice, with native spacer cells for omitted columns. */\nexport const DataTableVirtualColumns = defineComponent({\n name: \"DataTableVirtualColumns\",\n slots: Object as SlotsType<{\n default?: (props: { column: TableColumn<unknown>; index: number }) => VNode[];\n }>,\n props: { as: { type: String as PropType<\"th\" | \"td\">, default: \"th\" } },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableVirtualColumns>\");\n const virtual = injectVirtual();\n return () =>\n h(\n Fragment,\n renderColumns(\n table.columns,\n virtual,\n (column, index) => slots.default?.({ column, index }),\n props.as,\n ),\n );\n },\n});\n\n/**\n * A column header with `aria-sort`. Without a slot it shows the header text inside a sort button\n * for sortable columns.\n */\nexport const DataTableHeaderCell = defineComponent({\n name: \"DataTableHeaderCell\",\n slots: Object as SlotsType<{\n default?: (props: {\n column: TableColumn<unknown>;\n sort: SortInfo | undefined;\n toggleSort: (multi?: boolean) => void;\n }) => VNode[];\n }>,\n props: { column: columnProp, as: asProp(\"th\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableHeaderCell>\");\n const columnOffset = injectColumnOffset();\n return () => {\n const { column } = props;\n const sort = table.getSort(column.id);\n const ariaSort = sort\n ? sort.direction === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : column.sortable\n ? \"none\"\n : undefined;\n const content =\n slots.default?.({\n column,\n sort,\n toggleSort: (multi = false) => table.toggleSort(column.id, { multi }),\n }) ??\n (column.sortable ? h(DataTableSortButton, { column }, () => column.header) : column.header);\n return h(\n props.as,\n {\n scope: \"col\",\n \"aria-sort\": ariaSort,\n \"data-column\": column.id,\n \"data-align\": column.align,\n \"data-sortable\": flag(column.sortable),\n \"data-sort\": sort?.direction,\n style: columnStyle(column),\n \"aria-colindex\": table.columns.indexOf(column) + columnOffset() + 1,\n },\n content,\n );\n };\n },\n});\n\nexport function columnStyle(column: TableColumn<unknown>): Record<string, string> | undefined {\n const style: Record<string, string> = {};\n if (column.width !== undefined) {\n style[\"width\"] = `${column.width}px`;\n }\n if (column.minWidth !== undefined) {\n style[\"minWidth\"] = `${column.minWidth}px`;\n }\n return Object.keys(style).length > 0 ? style : undefined;\n}\n\n/**\n * Toggles a column's sort. Shift-click adds the column to the existing sort instead of replacing\n * it. The slot receives the current sort so it can draw an indicator.\n */\nexport const DataTableSortButton = defineComponent({\n name: \"DataTableSortButton\",\n slots: Object as SlotsType<{\n default?: (props: { sort: SortInfo | undefined }) => VNode[];\n indicator?: (props: { sort: SortInfo | undefined }) => VNode[];\n }>,\n props: { column: columnProp, as: asProp(\"button\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableSortButton>\");\n const locale = useTableLocale();\n return () => {\n const sort = table.getSort(props.column.id);\n const next = !sort ? \"ascending\" : sort.direction === \"asc\" ? \"descending\" : \"unsorted\";\n return h(\n props.as,\n {\n type: props.as === \"button\" ? \"button\" : undefined,\n \"data-sort\": sort?.direction,\n \"aria-label\": locale().messages.sortBy(props.column.header, next),\n onClick: (event: MouseEvent) =>\n table.toggleSort(props.column.id, { multi: event.shiftKey }),\n },\n [slots.default?.({ sort }) ?? props.column.header, slots.indicator?.({ sort })],\n );\n };\n },\n});\n\n/**\n * The body section. Without a slot it renders a row per row on the page, and the `empty` slot in\n * a full-width row when there are none.\n */\nexport const DataTableBody = defineComponent({\n name: \"DataTableBody\",\n slots: Object as SlotsType<{\n default?: (props: { rows: readonly TableRow<unknown>[] }) => VNode[];\n empty?: () => VNode[];\n detail?: (props: { row: TableRow<unknown>; rowIndex: number }) => VNode[];\n row?: (props: DetailSlotProps) => VNodeChild;\n }>,\n props: {\n as: asProp(\"tbody\"),\n ...virtualProps,\n colspan: { type: Number as PropType<number | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableBody>\");\n const locale = useTableLocale();\n const virtual = injectVirtual();\n const details = createDetails(\n table,\n () => slots.detail,\n () => props.colspan ?? table.columns.length,\n );\n return () => {\n if (props.virtual && !virtual) return h(VirtualDataTableBody, props, slots);\n if (virtual) return renderTableBody(table, virtual, props.as, props.colspan, slots, details);\n let content: VNode[] | VNode | undefined = slots.default?.({ rows: table.rows });\n if (!content) {\n content =\n table.rows.length === 0 && slots.empty\n ? h(\"tr\", { \"data-empty\": \"\" }, [\n h(\"td\", { colspan: Math.max(1, table.columns.length) }, slots.empty()),\n ])\n : table.renderItems.map((item) =>\n item.kind === \"row\"\n ? slots.row\n ? h(Fragment, { key: item.key }, [slots.row(item)])\n : h(DataTableRow, { key: item.key, row: item.row, rowIndex: item.rowIndex })\n : details.render(item.row, item.rowIndex),\n );\n }\n const visibleDetails = new Set(\n table.renderItems.filter((item) => item.kind === \"detail\").map((item) => item.row.key),\n );\n const retained = slots.default ? [] : details.retained(visibleDetails);\n const sentinel = loadSentinel(table, props.colspan ?? table.columns.length, locale());\n return h(props.as, [\n ...(Array.isArray(content) ? content : content ? [content] : []),\n ...retained,\n ...(sentinel ? [sentinel] : []),\n ]);\n };\n },\n});\n\ntype TableBodySlots = {\n default?: (props: { rows: readonly TableRow<unknown>[] }) => VNode[];\n empty?: () => VNode[];\n detail?: (props: { row: TableRow<unknown>; rowIndex: number }) => VNode[];\n row?: (props: DetailSlotProps) => VNodeChild;\n};\nfunction renderTableBody(\n table: DataTableBinding<unknown>,\n virtual: ComponentVirtualBinding,\n as: string,\n colspan: number | undefined,\n slots: TableBodySlots,\n details: ReturnType<typeof createDetails>,\n element?: ShallowRef<HTMLElement | undefined>,\n): VNode {\n const width = colspan ?? table.columns.length;\n const attrs = element ? { ref: element } : {};\n const content = slots.default?.({\n rows: virtual.rowItems\n .filter((item) => item.renderItem.kind === \"row\")\n .map((item) => item.renderItem.row),\n });\n if (table.rows.length === 0 && slots.empty)\n return h(\n as,\n attrs,\n h(\"tr\", { \"data-empty\": \"\" }, [h(\"td\", { colspan: Math.max(1, width) }, slots.empty())]),\n );\n if (content)\n return h(as, attrs, [\n rowSpacer(virtual.rows.paddingStart, width, \"gap-start\"),\n ...content,\n rowSpacer(virtual.rows.paddingEnd, width, \"gap-end\"),\n ...(loadSentinel(table, width) ? [loadSentinel(table, width)] : []),\n ]);\n return h(as, attrs, [\n ...renderRows(virtual, width, (item) =>\n item.renderItem.kind === \"row\"\n ? slots.row\n ? h(Fragment, { key: item.key }, [slots.row(item.renderItem)])\n : h(DataTableRow, {\n key: item.key,\n row: item.renderItem.row,\n rowIndex: item.renderItem.rowIndex,\n })\n : details.render(item.renderItem.row, item.renderItem.rowIndex),\n ),\n ...details.retained(\n new Set(\n virtual.rowItems\n .filter((item) => item.renderItem.kind === \"detail\")\n .map((item) => item.renderItem.row.key),\n ),\n ),\n ...(loadSentinel(table, width) ? [loadSentinel(table, width)] : []),\n ]);\n}\nconst VirtualDataTableBody = defineComponent({\n name: \"DataTableVirtualBody\",\n props: {\n as: asProp(\"tbody\"),\n ...virtualProps,\n colspan: { type: Number as PropType<number | undefined>, default: undefined },\n },\n slots: Object as SlotsType<TableBodySlots>,\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableBody>\");\n const element = shallowRef<HTMLElement>();\n const virtual = createComponentVirtual(table, virtualOptions(props), () =>\n element.value?.closest(\"table\"),\n );\n const details = createDetails(\n table,\n () => slots.detail,\n () => props.colspan ?? table.columns.length,\n );\n return () => renderTableBody(table, virtual, props.as, props.colspan, slots, details, element);\n },\n});\n\n/** A body row; `aria-selected` and `data-selected` follow the selection. */\nexport const DataTableRow = defineComponent({\n name: \"DataTableRow\",\n slots: Object as SlotsType<{\n default?: (props: {\n row: TableRow<unknown>;\n selected: boolean;\n columns: readonly TableColumn<unknown>[];\n }) => VNode[];\n }>,\n props: {\n row: rowProp,\n as: asProp(\"tr\"),\n rowIndex: { type: Number as PropType<number | undefined>, default: undefined },\n /**\n * A page's own attributes for the row, from `rowAttributes`. They come before the row's own,\n * so `data-key`, selection, tree, and focus attributes always win; class and style merge.\n */\n attributes: {\n type: Object as PropType<Readonly<Record<string, unknown>> | undefined>,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableRow>\");\n const virtual = injectVirtual();\n const hierarchy = injectHierarchy();\n return () => {\n const { row } = props;\n const selected = table.isSelected(row.key);\n const item = virtual ? virtualRow(virtual, row) : undefined;\n const position = props.rowIndex ?? item?.renderItem.rowIndex ?? table.rows.indexOf(row);\n return h(\n props.as,\n mergeProps(props.attributes ?? {}, {\n \"aria-rowindex\": position === -1 ? undefined : table.pageStart + position + 1,\n \"aria-selected\": table.selectionMode === \"none\" ? undefined : String(selected),\n \"data-selected\": flag(selected),\n \"data-key\": String(row.key),\n \"data-dirty\": flag(row.isDirty),\n ...hierarchyRowAttrs(table, row, hierarchy),\n tabindex: table.tree\n ? (hierarchy?.focusKey ?? table.rows[0]?.key) === row.key\n ? 0\n : -1\n : undefined,\n onFocus: () => {\n if (hierarchy) hierarchy.focus.value = row.key;\n },\n ...(virtual && item\n ? {\n ref: (element: Element | ComponentPublicInstance | null) =>\n virtual.rows.measureElement(element, item.key),\n \"data-virtual-row\": \"\",\n }\n : {}),\n }),\n slots.default?.({ row, selected, columns: table.columns }) ??\n table.columns.map((column) => h(DataTableCell, { key: column.id, row, column })),\n );\n };\n },\n});\n\n/** A body cell. The slot receives the raw value and the formatted text. */\nexport const DataTableCell = defineComponent({\n name: \"DataTableCell\",\n slots: Object as SlotsType<{\n default?: (props: {\n row: TableRow<unknown>;\n column: TableColumn<unknown>;\n value: unknown;\n display: string;\n }) => VNode[];\n }>,\n props: {\n row: rowProp,\n column: columnProp,\n as: asProp(\"td\"),\n tree: { type: Boolean, default: true },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableCell>\");\n const columnOffset = injectColumnOffset();\n const hierarchy = injectHierarchy();\n return () => {\n const { row, column } = props;\n const value = row.getValue(column.id);\n const display = row.getDisplay(column.id);\n const content = () => slots.default?.({ row, column, value, display }) ?? display;\n return h(\n props.as,\n {\n \"data-column\": column.id,\n \"data-align\": column.align,\n \"aria-colindex\": table.columns.indexOf(column) + columnOffset() + 1,\n },\n props.tree && table.tree && column.id === resolveTreeColumn(table, hierarchy?.treeColumn)\n ? h(DataTableTreeCell, { row }, { default: content })\n : content(),\n );\n };\n },\n});\n\n/** Renders its slot only when no row passes the search and filters. */\nexport const DataTableEmpty = defineComponent({\n name: \"DataTableEmpty\",\n slots: Object as SlotsType<{ default?: () => VNode[] }>,\n props: { as: asProp(\"div\") },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataTableEmpty>\");\n return () => (table.rowCount === 0 ? h(props.as, { role: \"status\" }, slots.default?.()) : null);\n },\n});\n","import type { EditResult, GridDirection, RowKey, TableIssue, TableRow } from \"@vueye-table/core\";\nimport {\n injectDataTable,\n useDataGrid,\n type AnyDataTableBinding,\n type DataGridBinding,\n type RowDraft,\n useTableLocale,\n} from \"@vueye-table/vue\";\nimport {\n computed,\n defineComponent,\n h,\n inject,\n nextTick,\n onScopeDispose,\n provide,\n shallowRef,\n watch,\n type InjectionKey,\n type PropType,\n type SlotsType,\n type VNodeChild,\n} from \"vue\";\n\nimport {\n DataCellEditor,\n editorIssues,\n editorText,\n issueAttrs,\n useEditorId,\n type CellEditorSlotProps,\n} from \"./editor\";\nimport { rowProp, columnProp } from \"./shared\";\nimport { DataTableCell } from \"./table\";\n\ninterface EditingContext {\n readonly grid: DataGridBinding<unknown>;\n readonly mode: \"cell\" | \"row\";\n readonly draft: RowDraft<unknown> | undefined;\n start(row: TableRow<unknown>): void;\n save(): Promise<EditResult<unknown> | undefined>;\n cancel(key: RowKey): void;\n}\nconst editingKey: InjectionKey<EditingContext> = Symbol(\"vueye-table-editing\");\nexport function injectEditingGrid(): DataGridBinding<unknown> | undefined {\n return inject(editingKey, undefined)?.grid;\n}\n\n/** Renderless provider for editable data-table cells and row forms. */\nexport const DataTableEditRoot = defineComponent({\n name: \"DataTableEditRoot\",\n slots: Object as SlotsType<{ default?: (props: { editing: EditingContext }) => VNodeChild }>,\n props: {\n table: { type: Object as PropType<AnyDataTableBinding>, required: true },\n mode: { type: String as PropType<\"cell\" | \"row\">, default: \"cell\" },\n },\n emits: {\n save: (_result: EditResult<unknown>) => true,\n cancel: (_key: RowKey) => true,\n },\n setup(props, { slots, emit, expose }) {\n const grid = useDataGrid(props.table);\n const draft = shallowRef<RowDraft<unknown>>();\n const context: EditingContext = {\n grid,\n get mode() {\n return props.mode;\n },\n get draft() {\n return draft.value;\n },\n start(row) {\n if (draft.value?.pending) return;\n if (draft.value) context.cancel(draft.value.rowKey);\n grid.cancelEdit();\n const column = props.table.columns.findIndex((candidate) =>\n candidate.isEditable(row.original),\n );\n grid.focusCell({\n row: props.table.rows.findIndex((candidate) => candidate.key === row.key),\n column,\n });\n grid.startEdit();\n draft.value = props.table.editRow(row.key);\n },\n async save() {\n const active = draft.value;\n if (!active || active.pending) return undefined;\n const result = await active.save();\n if (draft.value === active && active.status !== \"editing\" && !active.pending) {\n draft.value = undefined;\n grid.cancelEdit();\n }\n if (result.status !== \"rejected\") emit(\"save\", result);\n return result;\n },\n cancel(key) {\n if (draft.value?.rowKey === key && !draft.value.pending) {\n draft.value.cancel();\n draft.value = undefined;\n grid.cancelEdit();\n emit(\"cancel\", key);\n }\n },\n };\n provide(editingKey, context);\n expose({ editing: context });\n watch(\n () => props.table.rows,\n (rows) => {\n if (draft.value && !rows.some((row) => row.key === draft.value?.rowKey))\n context.cancel(draft.value.rowKey);\n },\n );\n onScopeDispose(() => draft.value?.cancel());\n return () => slots.default?.({ editing: context });\n },\n});\n\n/** A cell with on-demand editing; row mode shares one draft and one save operation. */\nexport const DataTableEditCell = defineComponent({\n name: \"DataTableEditCell\",\n props: {\n row: rowProp,\n column: columnProp,\n rowIndex: { type: Number as PropType<number | undefined>, default: undefined },\n tree: { type: Boolean, default: true },\n },\n slots: Object as SlotsType<{\n default?: (props: { row: TableRow<unknown>; value: unknown; display: string }) => VNodeChild;\n editor?: (props: CellEditorSlotProps) => VNodeChild;\n }>,\n emits: { save: (_result: EditResult<unknown>) => true, cancel: (_key: RowKey) => true },\n setup(props, { slots, emit }) {\n const table = injectDataTable(\"<DataTableEditCell>\");\n const context = inject(editingKey);\n if (!context) throw new Error(\"<DataTableEditCell> requires <DataTableEditRoot>.\");\n const { grid } = context;\n const id = useEditorId();\n const element = shallowRef<HTMLElement>();\n const position = () => ({\n row: props.rowIndex ?? table.rows.indexOf(props.row),\n column: table.columns.indexOf(props.column),\n });\n const active = computed(() =>\n context.mode === \"row\" ? context.draft?.rowKey === props.row.key : grid.isEditing(position()),\n );\n const pending = computed(() =>\n context.mode === \"row\"\n ? !!context.draft?.pending\n : active.value && grid.lastResult?.status === \"pending\",\n );\n const localText = shallowRef(\"\");\n watch(active, (value) => {\n if (value)\n localText.value = editorText(\n props.row.getValue(props.column.id),\n grid.editorFor(position())?.kind ?? \"text\",\n );\n });\n const focus = (direction?: GridDirection): void => {\n void nextTick(() => {\n if (!direction) {\n element.value?.focus();\n return;\n }\n const all = [\n ...(element.value\n ?.closest(\"table\")\n ?.querySelectorAll<HTMLElement>(\"[data-edit-cell][data-editable]\") ?? []),\n ];\n const at = all.indexOf(element.value!);\n all[at + (direction === \"left\" ? -1 : 1)]?.focus();\n });\n };\n const submit = (\n value?: unknown,\n direction?: GridDirection,\n ): EditResult<unknown> | Promise<EditResult<unknown>> | undefined => {\n if (context.mode === \"row\") {\n if (value !== undefined) {\n if (typeof value === \"string\") {\n localText.value = value;\n context.draft?.setValue(props.column.id, value);\n context.draft?.setInput(props.column.id, value);\n } else context.draft?.setValue(props.column.id, value);\n }\n return undefined;\n }\n const result = grid.submitEdit(\n value === undefined ? undefined : typeof value === \"string\" ? { input: value } : { value },\n );\n const finish = (final: EditResult<unknown>): void => {\n if (final.status !== \"rejected\") {\n emit(\"save\", final);\n focus(direction);\n }\n };\n if (result?.completion) void result.completion.then(finish);\n else if (result) finish(result);\n return result;\n };\n return () => {\n const { row, column } = props;\n const editable = column.isEditable(row.original);\n const editing = editable && active.value;\n const draft = context.draft?.rowKey === row.key ? context.draft : undefined;\n const issues =\n draft?.issues.filter((problem) => problem.column === column.id) ??\n (row.cellIssues?.get(column.id)\n ? [row.cellIssues.get(column.id)!]\n : active.value\n ? (grid.lastResult?.issues.filter(\n (problem) =>\n problem.rowKey === row.key && (problem.column === column.id || !problem.column),\n ) ?? [])\n : []);\n const spec = editing ? (grid.editorFor(position()) ?? { kind: \"text\" as const }) : undefined;\n const input = (text: string): void => {\n localText.value = text;\n if (context.mode === \"row\") {\n draft?.setValue(column.id, text);\n draft?.setInput(column.id, text);\n } else grid.updateDraft(text);\n };\n const cancel = (): void => {\n if (pending.value) return;\n if (context.mode === \"row\") context.cancel(row.key);\n else {\n grid.cancelEdit();\n emit(\"cancel\", row.key);\n }\n focus();\n };\n const editor: CellEditorSlotProps = {\n row,\n column,\n value:\n context.mode === \"row\"\n ? Reflect.get(draft?.values ?? {}, column.id)\n : row.getValue(column.id),\n draft: context.mode === \"row\" ? localText.value : (grid.editor?.draft ?? \"\"),\n spec: spec ?? { kind: \"text\" },\n finish: (direction) => {\n if (context.mode === \"row\") void context.save();\n else\n void submit(\n undefined,\n direction === \"left\" || direction === \"right\" ? direction : undefined,\n );\n },\n input,\n update: input,\n commit: submit,\n cancel,\n issues,\n pending: pending.value,\n attrs: issueAttrs(id, issues, pending.value),\n };\n return h(\n DataTableCell,\n {\n ref: (target: unknown) => {\n element.value =\n target && typeof target === \"object\" && \"$el\" in target\n ? (target.$el as HTMLElement)\n : undefined;\n },\n row,\n column,\n tree: props.tree,\n \"data-edit-cell\": \"\",\n \"data-editable\": editable ? \"\" : undefined,\n \"data-editing\": editing ? \"\" : undefined,\n \"data-dirty\": row.isDirty ? \"\" : undefined,\n ...issueAttrs(id, issues, pending.value),\n tabindex: editable ? 0 : undefined,\n onFocus: (event: FocusEvent) => {\n if (event.target === element.value && !grid.editor) grid.focusCell(position());\n },\n onDblclick: () => {\n if (editable && context.mode === \"cell\") {\n grid.focusCell(position());\n grid.startEdit(\n editorText(row.getValue(column.id), grid.editorFor(position())?.kind ?? \"text\"),\n );\n }\n },\n onKeydown: (event: KeyboardEvent) => {\n if (event.target === element.value && event.key === \"Enter\" && editable) {\n event.preventDefault();\n event.stopPropagation();\n if (context.mode === \"row\") context.start(row);\n else {\n grid.focusCell(position());\n grid.startEdit(\n editorText(row.getValue(column.id), grid.editorFor(position())?.kind ?? \"text\"),\n );\n }\n }\n },\n },\n {\n default: ({ value, display }: { value: unknown; display: string }) => [\n editing\n ? (slots.editor?.(editor) ??\n h(DataCellEditor, {\n editor,\n spec: spec ?? { kind: \"text\" },\n autofocus:\n context.mode === \"cell\" ||\n table.columns.find((candidate) => candidate.isEditable(row.original))?.id ===\n column.id,\n blurCommit: context.mode === \"cell\",\n tabCommit: context.mode === \"cell\",\n finish: (direction?: GridDirection) => {\n if (context.mode === \"row\") void context.save();\n else\n void submit(\n undefined,\n direction === \"left\" || direction === \"right\" ? direction : undefined,\n );\n },\n }))\n : (slots.default?.({ row, value, display }) ?? display),\n editorIssues(id, issues, pending.value),\n ],\n },\n );\n };\n },\n});\n\n/** One active row form. Controls share the provider's draft and core save/undo path. */\nexport const DataTableRowActions = defineComponent({\n name: \"DataTableRowActions\",\n props: {\n row: rowProp,\n editable: { type: Boolean, default: true },\n removable: { type: Boolean, default: false },\n },\n setup(props) {\n const table = injectDataTable(\"<DataTableRowActions>\");\n const locale = useTableLocale();\n const context = inject(editingKey, undefined);\n const id = useEditorId();\n const element = shallowRef<HTMLElement>();\n watch(\n () => context?.draft?.rowKey === props.row.key,\n (active, previous) => {\n const target = element.value;\n if (\n previous &&\n !active &&\n !context?.draft &&\n target?.closest(\"tr\")?.contains(target.ownerDocument.activeElement)\n )\n void nextTick(() =>\n target.querySelector<HTMLButtonElement>(\"button[data-edit-row]\")?.focus(),\n );\n },\n );\n return () => {\n const { messages } = locale();\n const rowName = String(props.row.key);\n const draft = context?.draft?.rowKey === props.row.key ? context.draft : undefined;\n const issues: readonly TableIssue[] = [\n ...new Map(draft?.issues.map((problem) => [problem.message, problem])).values(),\n ];\n const button = (\n label: string,\n action: () => unknown,\n disabled = false,\n role?: \"edit\" | \"save\",\n ) =>\n h(\n \"button\",\n {\n type: \"button\",\n disabled,\n \"aria-label\": messages.actionOnRow(label, rowName),\n \"data-edit-row\": role === \"edit\" ? \"\" : undefined,\n ...(role === \"save\" ? issueAttrs(id, issues, !!draft?.pending) : {}),\n onClick: action,\n },\n label,\n );\n return h(\n \"div\",\n {\n ref: element,\n \"data-row-actions\": \"\",\n role: \"group\",\n \"aria-label\": messages.rowActionsFor(rowName),\n \"aria-busy\": draft?.pending ? \"true\" : undefined,\n },\n [\n ...(context?.mode === \"row\" && props.editable\n ? draft\n ? [\n button(messages.saveRow, () => context.save(), draft.pending, \"save\"),\n button(messages.cancel, () => context.cancel(props.row.key), draft.pending),\n ]\n : [button(messages.editRow, () => context.start(props.row), false, \"edit\")]\n : []),\n h(\n \"details\",\n {\n onToggle: (event: Event) => {\n const menu = event.currentTarget as HTMLDetailsElement;\n if (menu.open)\n void nextTick(() =>\n menu.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" }),\n );\n },\n },\n [\n h(\"summary\", { \"aria-label\": messages.actionsForRow(rowName) }, messages.actions),\n h(\"div\", { \"data-row-menu\": \"\" }, [\n button(\n messages.revertRow,\n () => table.revert([props.row.key]),\n !props.row.isDirty || !!draft,\n ),\n props.removable\n ? button(messages.removeRow, () => table.removeRows([props.row.key]), !!draft)\n : null,\n ]),\n ],\n ),\n editorIssues(id, issues, !!draft?.pending),\n ],\n );\n };\n },\n});\n","import type { TableRow } from \"@vueye-table/core\";\nimport type { StyleValue } from \"vue\";\n\n/** A class as Vue reads it: a string, an object of flags, or a list of either. */\nexport type RowClass =\n | string\n | Readonly<Record<string, boolean>>\n | ReadonlyArray<string | Readonly<Record<string, boolean>>>;\n\n/**\n * What a page may put on a body row: a class, a style, and `data-*` and `aria-*` attributes. The\n * row's own attributes (`data-key`, `data-selected`, `aria-rowindex`, tree attributes, focus) win\n * on a collision, and anything else, event handlers included, is left out.\n */\nexport interface RowAttributes {\n readonly class?: RowClass;\n readonly style?: StyleValue;\n readonly [attribute: `data-${string}`]: string | number | boolean | undefined;\n readonly [attribute: `aria-${string}`]: string | number | boolean | undefined;\n}\n\n/** The attributes of a body row, read from its item on each render. */\nexport type RowAttrs<T> = (item: T, row: TableRow<T>) => RowAttributes | null | undefined;\n\n/** Accepts row attributes of any row type, as components accept any row. */\nexport type AnyRowAttrs = RowAttrs<any>;\n\nfunction accepted(name: string): boolean {\n return (\n name === \"class\" || name === \"style\" || name.startsWith(\"data-\") || name.startsWith(\"aria-\")\n );\n}\n\n/**\n * The attributes `attrs` gives `row`, keeping only a class, a style, and `data-*` and `aria-*`\n * attributes. Merge them before the row's own so the row's win.\n */\nexport function rowAttributes(\n attrs: AnyRowAttrs | undefined,\n row: TableRow<unknown>,\n): Record<string, unknown> {\n const given = attrs?.(row.original, row);\n if (!given) return {};\n const kept: Record<string, unknown> = {};\n for (const [name, value] of Object.entries(given)) if (accepted(name)) kept[name] = value;\n return kept;\n}\n","import type { GridDirection, TableColumn, TableRow } from \"@vueye-table/core\";\nimport {\n injectDataGrid,\n injectDataTable,\n provideDataGrid,\n provideDataTable,\n useDataGrid,\n type DataGridBinding,\n type AnyDataTableBinding,\n type DataTableBinding,\n} from \"@vueye-table/vue\";\nimport {\n defineComponent,\n h,\n inject,\n mergeProps,\n nextTick,\n provide,\n ref,\n useId,\n watch,\n type ComponentPublicInstance,\n type InjectionKey,\n type PropType,\n type SlotsType,\n type VNode,\n type VNodeChild,\n} from \"vue\";\n\nimport {\n DataCellEditor,\n editorIssues,\n editorText,\n issueAttrs,\n useEditorId,\n type CellEditorSlotProps,\n} from \"./editor\";\nimport {\n createDetails,\n DataTableTreeCell,\n hierarchyProps,\n hierarchyRowAttrs,\n injectHierarchy,\n provideHierarchy,\n resolveTreeColumn,\n type DetailSlotProps,\n} from \"./hierarchy\";\nimport { loadSentinel } from \"./loading\";\nimport { rowAttributes, type AnyRowAttrs } from \"./row-attrs\";\nimport {\n asProp,\n columnProp,\n flag,\n rowProp,\n columnLayoutProps,\n provideColumnOffset,\n injectColumnOffset,\n directionOf,\n} from \"./shared\";\nimport { columnStyle, DataTableHeader } from \"./table\";\nimport {\n injectVirtual,\n renderColumns,\n renderRows,\n virtualColgroup,\n virtualOptions,\n virtualProps,\n VirtualContent,\n type ComponentVirtualBinding,\n} from \"./virtual\";\n\ninterface GridContext {\n readonly id: string;\n /** Return keyboard focus to the grid, after an edit ends from the keyboard. */\n focus(): void;\n cancel(key: string | number): void;\n}\n\nconst gridContextKey: InjectionKey<GridContext> = Symbol(\"vueye-table-grid-context\");\n\nfunction useGrid(consumer: string): { grid: DataGridBinding<unknown>; context: GridContext } {\n const grid = injectDataGrid();\n const context = inject(gridContextKey, undefined);\n if (!grid || !context) {\n throw new Error(`${consumer} must be rendered inside <DataGridRoot>.`);\n }\n return { grid, context };\n}\n\nexport function cellId(gridId: string, row: number, column: number): string {\n return `${gridId}-r${row}-c${column}`;\n}\n\n/**\n * A spreadsheet grid over a table. The grid element keeps keyboard focus and points at the active\n * cell with `aria-activedescendant`; arrows, Tab, Home, End, Enter, F2, Delete, Escape, typing,\n * undo, redo, and clipboard copy, cut, and paste all work on the selected range.\n */\nexport const DataGridRoot = defineComponent({\n name: \"DataGridRoot\",\n slots: Object as SlotsType<{\n default?: (props: {\n table: DataTableBinding<unknown>;\n grid: DataGridBinding<unknown>;\n }) => VNode[];\n }>,\n props: {\n table: { type: Object as PropType<AnyDataTableBinding>, required: true },\n as: asProp(\"table\"),\n label: { type: String as PropType<string | undefined>, default: undefined },\n ...virtualProps,\n ...hierarchyProps,\n ...columnLayoutProps,\n /** Width reserved before data columns, for a row-number/header column. */\n gutter: { type: Number, default: 0 },\n },\n emits: { save: (_result: unknown) => true, cancel: (_key: string | number) => true },\n setup(props, { slots, expose, emit }) {\n provideDataTable(props.table);\n provideColumnOffset(() => props.leadingColumns);\n const grid = useDataGrid(props.table, { treeColumn: () => props.treeColumn });\n provideDataGrid(grid);\n provideHierarchy(props.table, props);\n const element = ref<HTMLElement>();\n const id = `vt-grid-${useId()}`;\n const focus = (): void => {\n void nextTick(() => {\n if (!grid.editor) element.value?.focus({ preventScroll: true });\n });\n };\n provide(gridContextKey, { id, focus, cancel: (key) => emit(\"cancel\", key) });\n watch(\n () => grid.lastResult,\n (result) => {\n if (result && [\"applied\", \"partial\", \"unchanged\"].includes(result.status))\n emit(\"save\", result);\n },\n );\n expose({ grid, focus });\n let virtual: ComponentVirtualBinding | undefined;\n\n const onKeydown = (event: KeyboardEvent): void => {\n if (event.target !== element.value) {\n return;\n }\n if (\n event.key === \" \" &&\n !grid.editor &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n grid.toggleCheckbox()\n ) {\n event.preventDefault();\n return;\n }\n if (\n virtual &&\n !grid.editor &&\n (event.ctrlKey || event.metaKey) &&\n (event.key === \"Home\" || event.key === \"End\")\n ) {\n grid.focusCell(\n event.key === \"Home\"\n ? { row: 0, column: 0 }\n : { row: props.table.rows.length - 1, column: props.table.columns.length - 1 },\n { extend: event.shiftKey },\n );\n event.preventDefault();\n return;\n }\n if (virtual && !grid.editor && (event.key === \"PageUp\" || event.key === \"PageDown\")) {\n const current = grid.selection?.focus ?? { row: 0, column: 0 };\n const item = virtual.rowItems.find((entry) => entry.renderItem.rowIndex === current.row);\n const step = Math.max(\n 1,\n Math.floor(virtual.rows.viewportSize / (item?.size ?? props.rowHeight)),\n );\n grid.focusCell(\n { row: current.row + (event.key === \"PageDown\" ? step : -step), column: current.column },\n { extend: event.shiftKey },\n );\n event.preventDefault();\n return;\n }\n if (\n grid.handleKey({\n key: event.key,\n shiftKey: event.shiftKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n altKey: event.altKey,\n direction: directionOf(event.currentTarget as Element | null),\n })\n ) {\n event.preventDefault();\n }\n };\n const onCopy = (event: ClipboardEvent, cut = false): void => {\n if (grid.editor || !grid.range || !event.clipboardData) {\n return;\n }\n event.clipboardData.setData(\"text/plain\", grid.copy());\n event.preventDefault();\n if (cut) {\n grid.clear();\n }\n };\n const onPaste = (event: ClipboardEvent): void => {\n if (grid.editor || event.defaultPrevented) return;\n const text = event.clipboardData?.getData(\"text/plain\");\n if (text === undefined || text === \"\") {\n return;\n }\n event.preventDefault();\n grid.paste(text);\n };\n\n const render = (binding?: ComponentVirtualBinding): VNode => {\n virtual = binding;\n const focusPosition = grid.selection?.focus;\n return h(\n props.as,\n {\n ref: element,\n id,\n role: props.table.tree ? \"treegrid\" : \"grid\",\n tabindex: 0,\n \"aria-label\": props.label,\n \"aria-multiselectable\": \"true\",\n \"aria-rowcount\":\n (props.table.tree\n ? props.table.processedRows.length\n : binding\n ? props.table.rowCount\n : props.table.rows.length) + 1,\n \"aria-colcount\": props.table.columns.length + props.leadingColumns,\n \"aria-busy\":\n props.table.loadState === \"loading\" || props.table.loadState === \"streaming\"\n ? \"true\"\n : undefined,\n \"aria-activedescendant\":\n focusPosition && !grid.editor\n ? cellId(id, focusPosition.row, focusPosition.column)\n : undefined,\n onKeydown,\n onCopy: (event: ClipboardEvent) => onCopy(event),\n onCut: (event: ClipboardEvent) => onCopy(event, true),\n onPaste,\n ...(binding\n ? {\n \"data-virtual\": \"\",\n style: binding.columns\n ? {\n tableLayout: \"fixed\",\n width: `${binding.columns.totalSize + binding.gutter}px`,\n }\n : undefined,\n }\n : {}),\n },\n binding\n ? [\n virtualColgroup(props.table.columns, binding),\n slots.default?.({ table: props.table, grid }) ?? [\n h(DataTableHeader),\n h(DataGridBody),\n ],\n ]\n : (slots.default?.({ table: props.table, grid }) ?? [\n h(DataTableHeader),\n h(DataGridBody),\n ]),\n );\n };\n return () =>\n props.virtual\n ? h(VirtualContent, {\n table: props.table,\n grid,\n options: virtualOptions(props),\n virtualColumns: props.virtualColumns,\n gutter: props.gutter,\n tableElement: () => element.value,\n render,\n })\n : render();\n },\n});\n\n/** Slot props of a grid cell's content, while it is not being edited. */\nexport interface GridCellSlotProps {\n readonly row: TableRow<unknown>;\n readonly column: TableColumn<unknown>;\n readonly value: unknown;\n readonly display: string;\n readonly editable: boolean;\n}\n\n/**\n * The grid body: a row of cells per row on the page. The `cell` slot draws the content of every\n * cell that is not being edited; the `rowHeader` slot adds a leading cell to each row.\n */\nexport const DataGridBody = defineComponent({\n name: \"DataGridBody\",\n slots: Object as SlotsType<{\n default?: (props: { rows: readonly TableRow<unknown>[] }) => VNode[];\n rowHeader?: (props: { row: TableRow<unknown>; index: number }) => VNode[];\n cell?: (props: GridCellSlotProps) => VNodeChild;\n editor?: (props: CellEditorSlotProps) => VNodeChild;\n detail?: (props: DetailSlotProps) => VNodeChild;\n }>,\n props: {\n as: asProp(\"tbody\"),\n ...virtualProps,\n colspan: { type: Number, default: undefined },\n treeCell: { type: Boolean, default: true },\n /** A page's own attributes for each row; the row's own always win. */\n rowAttrs: { type: Function as PropType<AnyRowAttrs | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataGridBody>\");\n const { grid } = useGrid(\"<DataGridBody>\");\n const virtual = injectVirtual();\n const hierarchy = injectHierarchy();\n const details = createDetails(\n table,\n () => slots.detail,\n () => props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n );\n const element = ref<HTMLElement>();\n const render = (binding?: ComponentVirtualBinding): VNode => {\n if (binding && slots.default) {\n const sentinel = loadSentinel(\n table,\n props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n );\n const content = slots.default({\n rows: binding.rowItems\n .filter((item) => item.renderItem.kind === \"row\")\n .map((item) => item.renderItem.row),\n });\n return h(props.as, { ref: element }, sentinel ? [...content, sentinel] : content);\n }\n if (binding)\n return h(props.as, { ref: element }, [\n ...renderRows(\n binding,\n props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n (item) => {\n if (item.renderItem.kind !== \"row\")\n return details.render(item.renderItem.row, item.renderItem.rowIndex);\n const { row, rowIndex } = item.renderItem;\n const columns = renderColumns(\n table.columns,\n binding,\n (column, columnIndex) =>\n h(\n DataGridCell,\n { key: column.id, row, column, rowIndex, columnIndex, tree: props.treeCell },\n { default: slots.cell, editor: slots.editor, $stable: true },\n ),\n \"td\",\n );\n return h(\n \"tr\",\n mergeProps(rowAttributes(props.rowAttrs, row), {\n key: item.key,\n role: \"row\",\n \"aria-rowindex\": table.pageStart + rowIndex + 1,\n \"data-key\": String(row.key),\n \"data-dirty\": flag(row.isDirty),\n ...hierarchyRowAttrs(table, row, hierarchy),\n \"data-virtual-row\": \"\",\n ref: (target: Element | ComponentPublicInstance | null) =>\n binding.rows.measureElement(target, item.key),\n }),\n [slots.rowHeader?.({ row, index: rowIndex }), ...columns],\n );\n },\n ),\n ...details.retained(\n new Set(\n binding.rowItems\n .filter((item) => item.renderItem.kind === \"detail\")\n .map((item) => item.renderItem.row.key),\n ),\n ),\n ...(loadSentinel(table, props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0))\n ? [\n loadSentinel(\n table,\n props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n ),\n ]\n : []),\n ]);\n const content =\n slots.default?.({ rows: table.rows }) ??\n table.renderItems.map((item) =>\n item.kind === \"detail\"\n ? details.render(item.row, item.rowIndex)\n : (() => {\n const { row, rowIndex } = item;\n return h(\n \"tr\",\n mergeProps(rowAttributes(props.rowAttrs, row), {\n key: item.key,\n role: \"row\",\n \"aria-rowindex\": rowIndex + 2,\n \"data-key\": String(row.key),\n \"data-dirty\": flag(row.isDirty),\n ...hierarchyRowAttrs(table, row, hierarchy),\n }),\n [\n slots.rowHeader?.({ row, index: rowIndex }),\n ...table.columns.map((column, columnIndex) =>\n h(\n DataGridCell,\n {\n key: column.id,\n row,\n column,\n rowIndex,\n columnIndex,\n tree: props.treeCell,\n },\n { default: slots.cell, editor: slots.editor, $stable: true },\n ),\n ),\n ],\n );\n })(),\n );\n const sentinel = loadSentinel(\n table,\n props.colspan ?? table.columns.length + (slots.rowHeader ? 1 : 0),\n );\n return h(props.as, [\n ...content,\n ...(slots.default\n ? []\n : details.retained(\n new Set(\n table.renderItems\n .filter((item) => item.kind === \"detail\")\n .map((item) => item.row.key),\n ),\n )),\n sentinel,\n ]);\n };\n return () =>\n props.virtual && !virtual\n ? h(VirtualContent, {\n table,\n grid,\n options: virtualOptions(props),\n tableElement: () => element.value?.closest(\"table\"),\n render,\n })\n : render(virtual);\n },\n});\n\n/**\n * A grid cell. A click selects it, Shift-click or dragging extends the range, and a double click\n * edits it. The `editor` slot replaces the default text box.\n */\nexport const DataGridCell = defineComponent({\n name: \"DataGridCell\",\n slots: Object as SlotsType<{\n default?: (props: GridCellSlotProps) => VNodeChild;\n editor?: (props: CellEditorSlotProps) => VNodeChild;\n }>,\n props: {\n row: rowProp,\n column: columnProp,\n as: asProp(\"td\"),\n tree: { type: Boolean, default: true },\n /** The row's position on the page. Found by searching the rows when left out. */\n rowIndex: { type: Number as PropType<number | undefined>, default: undefined },\n /** The column's position among the visible columns. Found by searching when left out. */\n columnIndex: { type: Number as PropType<number | undefined>, default: undefined },\n },\n setup(props, { slots }) {\n const table = injectDataTable(\"<DataGridCell>\");\n const columnOffset = injectColumnOffset();\n const { grid, context } = useGrid(\"<DataGridCell>\");\n const virtual = injectVirtual();\n const hierarchy = injectHierarchy();\n const element = ref<HTMLElement>();\n const issueId = useEditorId();\n const position = () => ({\n row: props.rowIndex ?? table.rows.indexOf(props.row),\n column: props.columnIndex ?? table.columns.indexOf(props.column),\n });\n\n watch(\n () => grid.isFocused(position()),\n (focused) => {\n if (focused && !virtual) {\n element.value?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }\n },\n );\n\n return () => {\n const at = position();\n const { row, column } = props;\n const editing = grid.isEditing(at);\n const editable = column.isEditable(row.original);\n const value = row.getValue(column.id);\n const display = row.getDisplay(column.id);\n const issues = row.cellIssues?.get(column.id)\n ? [row.cellIssues.get(column.id)!]\n : (grid.lastResult?.issues.filter(\n (problem) =>\n problem.rowKey === row.key && (problem.column === column.id || !problem.column),\n ) ?? []);\n const pending = table.pendingCells.some(\n (cell) => cell.rowKey === row.key && cell.column === column.id,\n );\n const finish = (\n edit?: { input: string } | { value: unknown },\n direction?: GridDirection,\n ): ReturnType<typeof grid.submitEdit> => {\n const result = grid.submitEdit(edit, direction);\n const focus = (): void => {\n if (!grid.editor) context.focus();\n };\n if (result?.completion) void result.completion.then(focus);\n else focus();\n return result;\n };\n let content;\n if (editing) {\n const editor: CellEditorSlotProps = {\n row,\n column,\n value,\n draft: grid.editor?.draft ?? \"\",\n spec: grid.editorFor(at) ?? { kind: \"text\" },\n finish: (direction) => {\n finish(undefined, direction);\n },\n input: (text) => grid.updateDraft(text),\n update: (text) => grid.updateDraft(text),\n commit: (next?: unknown) =>\n finish(\n next === undefined\n ? undefined\n : typeof next === \"string\"\n ? { input: next }\n : { value: next },\n ),\n cancel: () => {\n if (!pending) {\n grid.cancelEdit();\n context.cancel(row.key);\n context.focus();\n }\n },\n issues,\n pending,\n attrs: issueAttrs(issueId, issues, pending),\n };\n content =\n slots.editor?.(editor) ??\n h(DataCellEditor, {\n editor,\n spec: grid.editorFor(at) ?? { kind: \"text\" },\n finish: (direction?: GridDirection) => finish(undefined, direction),\n });\n } else {\n const children = () =>\n slots.default?.({ row, column, value, display, editable }) ?? display;\n content =\n props.tree && table.tree && column.id === resolveTreeColumn(table, hierarchy?.treeColumn)\n ? h(DataTableTreeCell, { row }, { default: children })\n : children();\n }\n return h(\n props.as,\n {\n ref: element,\n id: cellId(context.id, at.row, at.column),\n role: \"gridcell\",\n \"aria-selected\": String(grid.isSelected(at)),\n \"aria-readonly\": editable ? undefined : \"true\",\n \"aria-colindex\": at.column + columnOffset() + 1,\n \"data-column\": column.id,\n \"data-align\": column.align,\n \"data-focused\": flag(grid.isFocused(at)),\n \"data-selected\": flag(grid.isSelected(at)),\n \"data-editing\": flag(editing),\n \"data-readonly\": flag(!editable),\n \"data-dirty\": flag(row.isDirty),\n ...issueAttrs(issueId, issues, pending),\n style: columnStyle(column),\n onMousedown: (event: MouseEvent) => {\n if (editing || event.button !== 0) {\n return;\n }\n grid.focusCell(at, { extend: event.shiftKey });\n context.focus();\n },\n onMouseenter: (event: MouseEvent) => {\n if (event.buttons === 1 && !grid.editor) {\n grid.focusCell(at, { extend: true });\n }\n },\n onDblclick: () => {\n grid.focusCell(at);\n grid.startEdit(editorText(value, grid.editorFor(at)?.kind ?? \"text\"));\n },\n },\n [content, editorIssues(issueId, issues, pending)],\n );\n };\n },\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vueye-table/headless",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.3",
|
|
4
4
|
"description": "Unstyled, accessible Vue components for vueye-table: tables, controls, and spreadsheet grids.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"data-table",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"provenance": true
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@vueye-table/core": "3.0.0-beta.
|
|
42
|
-
"@vueye-table/vue": "3.0.0-beta.
|
|
41
|
+
"@vueye-table/core": "3.0.0-beta.3",
|
|
42
|
+
"@vueye-table/vue": "3.0.0-beta.3"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"vue": "3.5.43",
|