@trsys-tech/matrix-library 1.1.5 → 1.1.7
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/README.md +18 -10
- package/dist/components/data-table/DataTable.d.ts +8 -0
- package/dist/components/data-table/DataTable.d.ts.map +1 -0
- package/dist/components/data-table/DataTable.types.d.ts +176 -0
- package/dist/components/data-table/DataTable.types.d.ts.map +1 -0
- package/dist/components/data-table/DataTableActions.d.ts +42 -0
- package/dist/components/data-table/DataTableActions.d.ts.map +1 -0
- package/dist/components/data-table/DataTableAlignment.d.ts +9 -0
- package/dist/components/data-table/DataTableAlignment.d.ts.map +1 -0
- package/dist/components/data-table/DataTableColumnHeader.d.ts +11 -0
- package/dist/components/data-table/DataTableColumnHeader.d.ts.map +1 -0
- package/dist/components/data-table/DataTableColumnMenu.d.ts +9 -0
- package/dist/components/data-table/DataTableColumnMenu.d.ts.map +1 -0
- package/dist/components/data-table/DataTableContent.d.ts +7 -0
- package/dist/components/data-table/DataTableContent.d.ts.map +1 -0
- package/dist/components/data-table/DataTableContext.d.ts +37 -0
- package/dist/components/data-table/DataTableContext.d.ts.map +1 -0
- package/dist/components/data-table/DataTableHeader.d.ts +22 -0
- package/dist/components/data-table/DataTableHeader.d.ts.map +1 -0
- package/dist/components/data-table/DataTablePagination.d.ts +8 -0
- package/dist/components/data-table/DataTablePagination.d.ts.map +1 -0
- package/dist/components/data-table/DataTableRowView.d.ts +40 -0
- package/dist/components/data-table/DataTableRowView.d.ts.map +1 -0
- package/dist/components/data-table/dataTableColumnDrag.d.ts +13 -0
- package/dist/components/data-table/dataTableColumnDrag.d.ts.map +1 -0
- package/dist/components/data-table/dataTableEditing.d.ts +11 -0
- package/dist/components/data-table/dataTableEditing.d.ts.map +1 -0
- package/dist/components/data-table/dataTableFeatures.d.ts +25 -0
- package/dist/components/data-table/dataTableFeatures.d.ts.map +1 -0
- package/dist/components/data-table/dataTableModel.d.ts +23 -0
- package/dist/components/data-table/dataTableModel.d.ts.map +1 -0
- package/dist/components/data-table/dataTablePrint.d.ts +3 -0
- package/dist/components/data-table/dataTablePrint.d.ts.map +1 -0
- package/dist/components/data-table/dataTableStyles.d.ts +2 -0
- package/dist/components/data-table/dataTableStyles.d.ts.map +1 -0
- package/dist/components/data-table/useDataTableApi.d.ts +34 -0
- package/dist/components/data-table/useDataTableApi.d.ts.map +1 -0
- package/dist/components/data-table/useDataTableColumnDrag.d.ts +16 -0
- package/dist/components/data-table/useDataTableColumnDrag.d.ts.map +1 -0
- package/dist/components/data-table/useDataTableInstance.d.ts +96 -0
- package/dist/components/data-table/useDataTableInstance.d.ts.map +1 -0
- package/dist/components/data-table/useDataTableMotion.d.ts +4 -0
- package/dist/components/data-table/useDataTableMotion.d.ts.map +1 -0
- package/dist/components/resource-scheduler/ResourceScheduler.d.ts +96 -0
- package/dist/components/resource-scheduler/ResourceScheduler.d.ts.map +1 -0
- package/dist/datatable.es.js +40 -0
- package/dist/datatable.es.js.map +1 -0
- package/dist/datatableactions.es.js +193 -0
- package/dist/datatableactions.es.js.map +1 -0
- package/dist/datatablealignment.es.js +11 -0
- package/dist/datatablealignment.es.js.map +1 -0
- package/dist/datatablecolumndrag.es.js +34 -0
- package/dist/datatablecolumndrag.es.js.map +1 -0
- package/dist/datatablecolumnheader.es.js +81 -0
- package/dist/datatablecolumnheader.es.js.map +1 -0
- package/dist/datatablecolumnmenu.es.js +191 -0
- package/dist/datatablecolumnmenu.es.js.map +1 -0
- package/dist/datatablecontent.es.js +376 -0
- package/dist/datatablecontent.es.js.map +1 -0
- package/dist/datatablecontext.es.js +14 -0
- package/dist/datatablecontext.es.js.map +1 -0
- package/dist/datatablefeatures.es.js +24 -0
- package/dist/datatablefeatures.es.js.map +1 -0
- package/dist/datatableheader.es.js +126 -0
- package/dist/datatableheader.es.js.map +1 -0
- package/dist/datatablemodel.es.js +126 -0
- package/dist/datatablemodel.es.js.map +1 -0
- package/dist/datatablepagination.es.js +43 -0
- package/dist/datatablepagination.es.js.map +1 -0
- package/dist/datatableprint.es.js +65 -0
- package/dist/datatableprint.es.js.map +1 -0
- package/dist/datatablerowview.es.js +201 -0
- package/dist/datatablerowview.es.js.map +1 -0
- package/dist/datatablestyles.es.js +5 -0
- package/dist/datatablestyles.es.js.map +1 -0
- package/dist/ganttchart.es.js +2 -2
- package/dist/ganttchart.es.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +173 -154
- package/dist/index.es.js.map +1 -1
- package/dist/resourcescheduler.es.js +450 -0
- package/dist/resourcescheduler.es.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/tabs.es.js +15 -15
- package/dist/tabs.es.js.map +1 -1
- package/dist/usedatatableapi.es.js +117 -0
- package/dist/usedatatableapi.es.js.map +1 -0
- package/dist/usedatatablecolumndrag.es.js +40 -0
- package/dist/usedatatablecolumndrag.es.js.map +1 -0
- package/dist/usedatatableinstance.es.js +178 -0
- package/dist/usedatatableinstance.es.js.map +1 -0
- package/dist/usedatatablemotion.es.js +99 -0
- package/dist/usedatatablemotion.es.js.map +1 -0
- package/package.json +33 -12
package/dist/tabs.es.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
2
|
import * as o from "react";
|
|
3
|
-
import { Root as
|
|
3
|
+
import { Root as d, Content as x, List as i, Trigger as s } from "@radix-ui/react-tabs";
|
|
4
4
|
import { cn as r } from "./utils.es.js";
|
|
5
|
-
const
|
|
6
|
-
|
|
5
|
+
const y = d, b = o.forwardRef(({ className: t, ...e }, a) => /* @__PURE__ */ m(
|
|
6
|
+
i,
|
|
7
7
|
{
|
|
8
|
-
ref:
|
|
8
|
+
ref: a,
|
|
9
9
|
className: r(
|
|
10
|
-
"mtx-inline-flex mtx-h-8 mtx-w-full mtx-overflow-auto mtx-thin-scrollbar mtx-items-center mtx-justify-start mtx-bg-background mtx-p-0 mtx-text-muted-foreground md:mtx-[box-shadow:inset_0_-oklch(var(--gray-300))]",
|
|
10
|
+
"mtx-inline-flex mtx-h-8 mtx-w-full mtx-overflow-auto mtx-thin-scrollbar mtx-items-center mtx-justify-start mtx-bg-background mtx-p-0 mtx-text-muted-foreground md:mtx-[box-shadow:inset_0_-oklch(var(--gray-300))] data-[orientation=horizontal]:mtx-border-b data-[orientation=horizontal]:mtx-border-b-gray-300",
|
|
11
11
|
t
|
|
12
12
|
),
|
|
13
13
|
...e
|
|
14
14
|
}
|
|
15
15
|
));
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
16
|
+
b.displayName = i.displayName;
|
|
17
|
+
const f = o.forwardRef(({ className: t, hasAlert: e, ...a }, n) => /* @__PURE__ */ m(
|
|
18
|
+
s,
|
|
19
19
|
{
|
|
20
20
|
ref: n,
|
|
21
21
|
className: r(
|
|
@@ -23,18 +23,18 @@ const b = o.forwardRef(({ className: t, hasAlert: e, ...m }, n) => /* @__PURE__
|
|
|
23
23
|
t,
|
|
24
24
|
e && "mtx-relative before:mtx-content-[''] before:mtx-block before:mtx-absolute before:mtx-top-0 before:mtx-right-0 before:mtx-z-10 before:mtx-bg-danger before:mtx-w-2 before:mtx-h-2 before:mtx-rounded"
|
|
25
25
|
),
|
|
26
|
-
...
|
|
26
|
+
...a
|
|
27
27
|
}
|
|
28
28
|
));
|
|
29
|
-
|
|
29
|
+
f.displayName = s.displayName;
|
|
30
30
|
const l = o.forwardRef(
|
|
31
|
-
({ className: t, ...e },
|
|
31
|
+
({ className: t, ...e }, a) => /* @__PURE__ */ m(x, { ref: a, className: r("mtx-mt-2", t), ...e })
|
|
32
32
|
);
|
|
33
33
|
l.displayName = x.displayName;
|
|
34
34
|
export {
|
|
35
|
-
|
|
35
|
+
y as Tabs,
|
|
36
36
|
l as TabsContent,
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
b as TabsList,
|
|
38
|
+
f as TabsTrigger
|
|
39
39
|
};
|
|
40
40
|
//# sourceMappingURL=tabs.es.js.map
|
package/dist/tabs.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.es.js","sources":["../src/components/tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport {\r\n Content,\r\n List,\r\n Root,\r\n TabsContentProps,\r\n TabsListProps,\r\n TabsProps,\r\n TabsTriggerProps as RadixTabsTriggerProps,\r\n Trigger,\r\n} from \"@radix-ui/react-tabs\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\nconst Tabs = Root;\r\n\r\nconst TabsList = React.forwardRef<React.ElementRef<typeof List>, React.ComponentPropsWithoutRef<typeof List>>(({ className, ...props }, ref) => (\r\n <List\r\n ref={ref}\r\n className={cn(\r\n \"mtx-inline-flex mtx-h-8 mtx-w-full mtx-overflow-auto mtx-thin-scrollbar mtx-items-center mtx-justify-start mtx-bg-background mtx-p-0 mtx-text-muted-foreground md:mtx-[box-shadow:inset_0_-oklch(var(--gray-300))]\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n));\r\nTabsList.displayName = List.displayName;\r\n\r\ntype TabsTriggerProps = RadixTabsTriggerProps & {\r\n hasAlert?: boolean;\r\n};\r\n\r\nconst TabsTrigger = React.forwardRef<React.ElementRef<typeof Trigger>, TabsTriggerProps>(({ className, hasAlert, ...props }, ref) => (\r\n <Trigger\r\n ref={ref}\r\n className={cn(\r\n \"mtx-inline-flex mtx-items-center mtx-justify-center mtx-whitespace-nowrap mtx-h-full mtx-px-3 mtx-py-1 mtx-text-sm mtx-font-medium disabled:mtx-pointer-events-none disabled:mtx-opacity-50 data-[state=active]:mtx-text-foreground data-[state=active]:mtx-font-bold data-[state=active]:mtx-border-b-2 data-[state=active]:mtx-border-primary\",\r\n className,\r\n hasAlert &&\r\n \"mtx-relative before:mtx-content-[''] before:mtx-block before:mtx-absolute before:mtx-top-0 before:mtx-right-0 before:mtx-z-10 before:mtx-bg-danger before:mtx-w-2 before:mtx-h-2 before:mtx-rounded\",\r\n )}\r\n {...props}\r\n />\r\n));\r\nTabsTrigger.displayName = Trigger.displayName;\r\n\r\nconst TabsContent = React.forwardRef<React.ElementRef<typeof Content>, React.ComponentPropsWithoutRef<typeof Content>>(\r\n ({ className, ...props }, ref) => <Content ref={ref} className={cn(\"mtx-mt-2\", className)} {...props} />,\r\n);\r\nTabsContent.displayName = Content.displayName;\r\n\r\nexport {\r\n Tabs,\r\n TabsList,\r\n TabsTrigger,\r\n TabsContent,\r\n type TabsProps,\r\n type TabsListProps,\r\n type RadixTabsTriggerProps as TabsTriggerProps,\r\n type TabsContentProps,\r\n};\r\n"],"names":["Tabs","Root","TabsList","React","className","props","ref","jsx","List","cn","TabsTrigger","hasAlert","Trigger","TabsContent","Content"],"mappings":";;;;AAeA,MAAMA,IAAOC,GAEPC,IAAWC,EAAM,WAAuF,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MACtI,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,KAAAF;AAAA,IACA,WAAWG;AAAA,MACT;AAAA,MACAL;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN,CACD;AACDH,EAAS,cAAcM,EAAK;AAM5B,MAAME,IAAcP,EAAM,WAA+D,CAAC,EAAE,WAAAC,GAAW,UAAAO,GAAU,GAAGN,KAASC,MAC3H,gBAAAC;AAAA,EAACK;AAAA,EAAA;AAAA,IACC,KAAAN;AAAA,IACA,WAAWG;AAAA,MACT;AAAA,MACAL;AAAA,MACAO,KACE;AAAA,IAAA;AAAA,IAEH,GAAGN;AAAA,EAAA;AACN,CACD;AACDK,EAAY,cAAcE,EAAQ;AAElC,MAAMC,IAAcV,EAAM;AAAA,EACxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAAQ,gBAAAC,EAACO,GAAA,EAAQ,KAAAR,GAAU,WAAWG,EAAG,YAAYL,CAAS,GAAI,GAAGC,EAAA,CAAO;AACxG;AACAQ,EAAY,cAAcC,EAAQ;"}
|
|
1
|
+
{"version":3,"file":"tabs.es.js","sources":["../src/components/tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport {\r\n Content,\r\n List,\r\n Root,\r\n TabsContentProps,\r\n TabsListProps,\r\n TabsProps,\r\n TabsTriggerProps as RadixTabsTriggerProps,\r\n Trigger,\r\n} from \"@radix-ui/react-tabs\";\r\nimport { cn } from \"../../lib/utils\";\r\n\r\nconst Tabs = Root;\r\n\r\nconst TabsList = React.forwardRef<React.ElementRef<typeof List>, React.ComponentPropsWithoutRef<typeof List>>(({ className, ...props }, ref) => (\r\n <List\r\n ref={ref}\r\n className={cn(\r\n \"mtx-inline-flex mtx-h-8 mtx-w-full mtx-overflow-auto mtx-thin-scrollbar mtx-items-center mtx-justify-start mtx-bg-background mtx-p-0 mtx-text-muted-foreground md:mtx-[box-shadow:inset_0_-oklch(var(--gray-300))] data-[orientation=horizontal]:mtx-border-b data-[orientation=horizontal]:mtx-border-b-gray-300\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n));\r\nTabsList.displayName = List.displayName;\r\n\r\ntype TabsTriggerProps = RadixTabsTriggerProps & {\r\n hasAlert?: boolean;\r\n};\r\n\r\nconst TabsTrigger = React.forwardRef<React.ElementRef<typeof Trigger>, TabsTriggerProps>(({ className, hasAlert, ...props }, ref) => (\r\n <Trigger\r\n ref={ref}\r\n className={cn(\r\n \"mtx-inline-flex mtx-items-center mtx-justify-center mtx-whitespace-nowrap mtx-h-full mtx-px-3 mtx-py-1 mtx-text-sm mtx-font-medium disabled:mtx-pointer-events-none disabled:mtx-opacity-50 data-[state=active]:mtx-text-foreground data-[state=active]:mtx-font-bold data-[state=active]:mtx-border-b-2 data-[state=active]:mtx-border-primary\",\r\n className,\r\n hasAlert &&\r\n \"mtx-relative before:mtx-content-[''] before:mtx-block before:mtx-absolute before:mtx-top-0 before:mtx-right-0 before:mtx-z-10 before:mtx-bg-danger before:mtx-w-2 before:mtx-h-2 before:mtx-rounded\",\r\n )}\r\n {...props}\r\n />\r\n));\r\nTabsTrigger.displayName = Trigger.displayName;\r\n\r\nconst TabsContent = React.forwardRef<React.ElementRef<typeof Content>, React.ComponentPropsWithoutRef<typeof Content>>(\r\n ({ className, ...props }, ref) => <Content ref={ref} className={cn(\"mtx-mt-2\", className)} {...props} />,\r\n);\r\nTabsContent.displayName = Content.displayName;\r\n\r\nexport {\r\n Tabs,\r\n TabsList,\r\n TabsTrigger,\r\n TabsContent,\r\n type TabsProps,\r\n type TabsListProps,\r\n type RadixTabsTriggerProps as TabsTriggerProps,\r\n type TabsContentProps,\r\n};\r\n"],"names":["Tabs","Root","TabsList","React","className","props","ref","jsx","List","cn","TabsTrigger","hasAlert","Trigger","TabsContent","Content"],"mappings":";;;;AAeA,MAAMA,IAAOC,GAEPC,IAAWC,EAAM,WAAuF,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MACtI,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,KAAAF;AAAA,IACA,WAAWG;AAAA,MACT;AAAA,MACAL;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AACN,CACD;AACDH,EAAS,cAAcM,EAAK;AAM5B,MAAME,IAAcP,EAAM,WAA+D,CAAC,EAAE,WAAAC,GAAW,UAAAO,GAAU,GAAGN,KAASC,MAC3H,gBAAAC;AAAA,EAACK;AAAA,EAAA;AAAA,IACC,KAAAN;AAAA,IACA,WAAWG;AAAA,MACT;AAAA,MACAL;AAAA,MACAO,KACE;AAAA,IAAA;AAAA,IAEH,GAAGN;AAAA,EAAA;AACN,CACD;AACDK,EAAY,cAAcE,EAAQ;AAElC,MAAMC,IAAcV,EAAM;AAAA,EACxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAAQ,gBAAAC,EAACO,GAAA,EAAQ,KAAAR,GAAU,WAAWG,EAAG,YAAYL,CAAS,GAAI,GAAGC,EAAA,CAAO;AACxG;AACAQ,EAAY,cAAcC,EAAQ;"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import * as I from "react";
|
|
2
|
+
import { getColumnId as g, getCellValue as q } from "./datatablemodel.es.js";
|
|
3
|
+
import { printDataTable as x } from "./datatableprint.es.js";
|
|
4
|
+
function O({
|
|
5
|
+
runtime: a,
|
|
6
|
+
editRef: S,
|
|
7
|
+
configRef: m,
|
|
8
|
+
updateEdit: c,
|
|
9
|
+
setPatches: y,
|
|
10
|
+
contentRef: d,
|
|
11
|
+
viewportRef: i,
|
|
12
|
+
setPrinting: w
|
|
13
|
+
}) {
|
|
14
|
+
const u = I.useRef(0), b = I.useRef({ top: 0, left: 0 });
|
|
15
|
+
return I.useMemo(() => {
|
|
16
|
+
const f = (o) => a.current.table.getCoreRowModel().rowsById[String(o)], A = (o = !1) => {
|
|
17
|
+
const e = S.current;
|
|
18
|
+
if (!e) return !0;
|
|
19
|
+
const n = m.current, r = { rowId: e.rowId, original: e.original, data: e.draft, changes: e.changes };
|
|
20
|
+
if (o)
|
|
21
|
+
return c(null), n.onEditCancel?.(r), !0;
|
|
22
|
+
const l = [...Object.values(e.parseErrors), ...n.validateRow?.(e.draft, e.original) ?? []];
|
|
23
|
+
for (const t of a.current.definitionsById.values())
|
|
24
|
+
(typeof t.editable == "function" ? t.editable(e.original) : t.editable) && (!e.columnId || e.columnId === g(t)) && l.push(
|
|
25
|
+
...t.validate?.(q(e.draft, t, a.current.rowIndices.get(e.original) ?? 0), e.draft) ?? []
|
|
26
|
+
);
|
|
27
|
+
return l.length ? (c({ ...e, errors: l }), !1) : (Object.keys(e.changes).length && (n.readOnlyEdit ? n.onEditRequest?.(r) : (y((t) => ({ ...t, [e.rowId]: { source: e.source, data: e.draft } })), n.onEditCommit?.(r))), c(null), !0);
|
|
28
|
+
}, R = (o, e) => {
|
|
29
|
+
const n = String(o);
|
|
30
|
+
requestAnimationFrame(
|
|
31
|
+
() => requestAnimationFrame(() => {
|
|
32
|
+
const r = Array.from(d.current?.querySelectorAll("[data-row-id][data-column-id]") ?? []).find(
|
|
33
|
+
(t) => t.dataset.rowId === n && t.dataset.columnId === e
|
|
34
|
+
);
|
|
35
|
+
(Array.from(r?.querySelectorAll("input,button,[tabindex='0']") ?? []).find(
|
|
36
|
+
(t) => !t.matches(":disabled, input[type='hidden']") && !t.closest("[hidden],[inert]") && t.getClientRects().length > 0
|
|
37
|
+
) ?? r)?.focus();
|
|
38
|
+
})
|
|
39
|
+
);
|
|
40
|
+
}, C = (o, e = "center") => {
|
|
41
|
+
const n = String(o), r = a.current, l = r.table.getPrePaginatedRowModel().rows.findIndex((t) => t.id === n);
|
|
42
|
+
l >= 0 && r.pagination && !r.table.options.manualPagination && r.table.setPageIndex(Math.floor(l / r.table.atoms.pagination.get().pageSize)), requestAnimationFrame(() => {
|
|
43
|
+
const t = a.current, s = t.centerRows.findIndex((p) => p.id === n);
|
|
44
|
+
s >= 0 && t.useVirtualRows ? t.virtualizer.scrollToIndex(s, { align: e }) : Array.from(d.current?.querySelectorAll("[role=row][data-row-id]") ?? []).find((p) => p.dataset.rowId === n)?.scrollIntoView({ block: e, inline: "nearest" });
|
|
45
|
+
});
|
|
46
|
+
}, h = (o, e) => {
|
|
47
|
+
const n = String(o);
|
|
48
|
+
if (!A()) return !1;
|
|
49
|
+
const r = f(n);
|
|
50
|
+
if (!r) return !1;
|
|
51
|
+
const l = Array.from(a.current.definitionsById.values()).filter((s) => a.current.table.getColumn(g(s))?.getIsVisible() && (typeof s.editable == "function" ? s.editable(r.original) : s.editable) && (!!s.field || !!s.valueSetter)), t = e ? l.find((s) => g(s) === e) : l[0];
|
|
52
|
+
return t ? (c({
|
|
53
|
+
rowId: n,
|
|
54
|
+
columnId: e,
|
|
55
|
+
source: a.current.sourcesById.get(n),
|
|
56
|
+
original: r.original,
|
|
57
|
+
draft: r.original,
|
|
58
|
+
changes: {},
|
|
59
|
+
parseErrors: {},
|
|
60
|
+
errors: []
|
|
61
|
+
}), C(n), R(n, g(t)), !0) : !1;
|
|
62
|
+
}, M = async () => {
|
|
63
|
+
u.current === 0 && (b.current = { top: i.current?.scrollTop ?? 0, left: i.current?.scrollLeft ?? 0 }), u.current++, w(!0), await new Promise((e) => requestAnimationFrame(() => requestAnimationFrame(() => e())));
|
|
64
|
+
let o = !1;
|
|
65
|
+
return () => {
|
|
66
|
+
o || (o = !0, u.current--, !(u.current > 0) && (w(!1), requestAnimationFrame(() => {
|
|
67
|
+
i.current && (i.current.scrollTop = b.current.top, i.current.scrollLeft = b.current.left);
|
|
68
|
+
})));
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
return {
|
|
72
|
+
get table() {
|
|
73
|
+
return a.current.table;
|
|
74
|
+
},
|
|
75
|
+
getSelectedRows: () => a.current.table.getSelectedRowModel().rows.map((o) => o.original),
|
|
76
|
+
setSelectedRowIds: (o) => {
|
|
77
|
+
const e = o.map(f).filter((r) => r?.getCanSelect()), n = a.current.table.options.enableMultiRowSelection === !1 ? e.slice(0, 1) : e;
|
|
78
|
+
a.current.table.setRowSelection(Object.fromEntries(n.map((r) => [r.id, !0])));
|
|
79
|
+
},
|
|
80
|
+
selectAll: (o = "filtered") => {
|
|
81
|
+
const e = a.current.table, n = (o === "all" ? e.getCoreRowModel() : o === "currentPage" ? e.getRowModel() : e.getFilteredRowModel()).rows.filter((l) => l.getCanSelect()), r = Object.fromEntries(
|
|
82
|
+
(e.options.enableMultiRowSelection === !1 ? n.slice(0, 1) : n).map((l) => [l.id, !0])
|
|
83
|
+
);
|
|
84
|
+
e.setRowSelection((l) => e.options.enableMultiRowSelection === !1 ? r : { ...l, ...r });
|
|
85
|
+
},
|
|
86
|
+
deselectAll: () => a.current.table.resetRowSelection(!0),
|
|
87
|
+
pinRows: (o, e) => {
|
|
88
|
+
const n = a.current.table, r = o.map(String);
|
|
89
|
+
n.setRowPinning((l) => ({
|
|
90
|
+
top: [...(l.top ?? []).filter((t) => !r.includes(t)), ...e === "top" ? r.filter((t) => !!f(t)) : []],
|
|
91
|
+
bottom: [
|
|
92
|
+
...(l.bottom ?? []).filter((t) => !r.includes(t)),
|
|
93
|
+
...e === "bottom" ? r.filter((t) => !!f(t)) : []
|
|
94
|
+
]
|
|
95
|
+
}));
|
|
96
|
+
},
|
|
97
|
+
startEditingCell: ({ rowId: o, columnId: e }) => h(o, e),
|
|
98
|
+
startEditingRow: (o) => h(o),
|
|
99
|
+
stopEditing: A,
|
|
100
|
+
focusCell: R,
|
|
101
|
+
scrollToRow: C,
|
|
102
|
+
preparePrint: M,
|
|
103
|
+
print: async () => {
|
|
104
|
+
const o = await M();
|
|
105
|
+
try {
|
|
106
|
+
d.current && await x(d.current);
|
|
107
|
+
} finally {
|
|
108
|
+
o();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}, [m, d, S, a, y, w, c, i]);
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
O as useDataTableApi
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=usedatatableapi.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usedatatableapi.es.js","sources":["../src/components/data-table/useDataTableApi.ts"],"sourcesContent":["import * as React from \"react\";\nimport type { Virtualizer } from \"@tanstack/react-virtual\";\nimport { getCellValue, getColumnId } from \"./dataTableModel\";\nimport { printDataTable } from \"./dataTablePrint\";\nimport type { DataTableApi, DataTableColumn, DataTableContentProps, DataTableEditEvent, DataTableInstance, DataTableRow } from \"./DataTable.types\";\nimport type { DataTableEditSession } from \"./dataTableEditing\";\n\nexport type DataTableRuntime<T extends object> = {\n table: DataTableInstance<T>;\n definitionsById: Map<string, DataTableColumn<T>>;\n centerRows: DataTableRow<T>[];\n virtualizer: Virtualizer<HTMLDivElement, Element>;\n resolveId: (data: T, index: number) => string;\n rowIndices: Map<T, number>;\n sourcesById: Map<string, T>;\n useVirtualRows: boolean;\n pagination: boolean;\n serverPagination: boolean;\n};\ntype EditConfig<T extends object> = Pick<\n DataTableContentProps<T>,\n \"columnDefs\" | \"validateRow\" | \"readOnlyEdit\" | \"onEditCommit\" | \"onEditRequest\" | \"onEditCancel\"\n>;\ntype DataTableApiOptions<T extends object> = {\n runtime: React.MutableRefObject<DataTableRuntime<T>>;\n editRef: React.MutableRefObject<DataTableEditSession<T> | null>;\n configRef: React.MutableRefObject<EditConfig<T>>;\n updateEdit: (next: DataTableEditSession<T> | null) => void;\n setPatches: React.Dispatch<React.SetStateAction<Record<string, { source: T; data: T }>>>;\n contentRef: React.RefObject<HTMLDivElement>;\n viewportRef: React.RefObject<HTMLDivElement>;\n setPrinting: React.Dispatch<React.SetStateAction<boolean>>;\n};\n\n/** Stable public API; methods read current rows, callbacks and layout through refs. */\nexport function useDataTableApi<T extends object>({\n runtime,\n editRef,\n configRef,\n updateEdit,\n setPatches,\n contentRef,\n viewportRef,\n setPrinting,\n}: DataTableApiOptions<T>) {\n const printSessions = React.useRef(0);\n const printScroll = React.useRef({ top: 0, left: 0 });\n const api = React.useMemo<DataTableApi<T>>(() => {\n const getRow = (id: string | number) => runtime.current.table.getCoreRowModel().rowsById[String(id)];\n const stopEditing = (cancel = false): boolean => {\n const session = editRef.current;\n if (!session) return true;\n const config = configRef.current;\n const event: DataTableEditEvent<T> = { rowId: session.rowId, original: session.original, data: session.draft, changes: session.changes };\n if (cancel) {\n updateEdit(null);\n config.onEditCancel?.(event);\n return true;\n }\n const errors = [...Object.values(session.parseErrors), ...(config.validateRow?.(session.draft, session.original) ?? [])];\n for (const column of runtime.current.definitionsById.values()) {\n const editable = typeof column.editable === \"function\" ? column.editable(session.original) : column.editable;\n if (editable && (!session.columnId || session.columnId === getColumnId(column))) {\n errors.push(\n ...(column.validate?.(getCellValue(session.draft, column, runtime.current.rowIndices.get(session.original) ?? 0), session.draft) ?? []),\n );\n }\n }\n if (errors.length) {\n updateEdit({ ...session, errors });\n return false;\n }\n if (Object.keys(session.changes).length) {\n if (config.readOnlyEdit) config.onEditRequest?.(event);\n else {\n setPatches(previous => ({ ...previous, [session.rowId]: { source: session.source, data: session.draft } }));\n config.onEditCommit?.(event);\n }\n }\n updateEdit(null);\n return true;\n };\n const focusCell = (id: string | number, columnId: string) => {\n const rowId = String(id);\n requestAnimationFrame(() =>\n requestAnimationFrame(() => {\n const cell = Array.from(contentRef.current?.querySelectorAll<HTMLElement>(\"[data-row-id][data-column-id]\") ?? []).find(\n element => element.dataset.rowId === rowId && element.dataset.columnId === columnId,\n );\n const control = Array.from(cell?.querySelectorAll<HTMLElement>(\"input,button,[tabindex='0']\") ?? []).find(\n element =>\n !element.matches(\":disabled, input[type='hidden']\") && !element.closest(\"[hidden],[inert]\") && element.getClientRects().length > 0,\n );\n (control ?? cell)?.focus();\n }),\n );\n };\n const scrollToRow = (id: string | number, align: \"start\" | \"center\" | \"end\" = \"center\") => {\n const rowId = String(id);\n const current = runtime.current;\n const allIndex = current.table.getPrePaginatedRowModel().rows.findIndex(row => row.id === rowId);\n if (allIndex >= 0 && current.pagination && !current.table.options.manualPagination) {\n current.table.setPageIndex(Math.floor(allIndex / current.table.atoms.pagination.get().pageSize));\n }\n requestAnimationFrame(() => {\n const latest = runtime.current;\n const index = latest.centerRows.findIndex(row => row.id === rowId);\n if (index >= 0 && latest.useVirtualRows) latest.virtualizer.scrollToIndex(index, { align });\n else\n Array.from(contentRef.current?.querySelectorAll<HTMLElement>(\"[role=row][data-row-id]\") ?? [])\n .find(element => element.dataset.rowId === rowId)\n ?.scrollIntoView({ block: align, inline: \"nearest\" });\n });\n };\n const start = (id: string | number, columnId?: string) => {\n const rowId = String(id);\n if (!stopEditing()) return false;\n const row = getRow(rowId);\n if (!row) return false;\n const editable = Array.from(runtime.current.definitionsById.values()).filter(column => {\n return (\n runtime.current.table.getColumn(getColumnId(column))?.getIsVisible() &&\n (typeof column.editable === \"function\" ? column.editable(row.original) : column.editable) &&\n (!!column.field || !!column.valueSetter)\n );\n });\n const column = columnId ? editable.find(item => getColumnId(item) === columnId) : editable[0];\n if (!column) return false;\n updateEdit({\n rowId,\n columnId,\n source: runtime.current.sourcesById.get(rowId)!,\n original: row.original,\n draft: row.original,\n changes: {},\n parseErrors: {},\n errors: [],\n });\n scrollToRow(rowId);\n focusCell(rowId, getColumnId(column));\n return true;\n };\n const preparePrint = async () => {\n if (printSessions.current === 0) printScroll.current = { top: viewportRef.current?.scrollTop ?? 0, left: viewportRef.current?.scrollLeft ?? 0 };\n printSessions.current++;\n setPrinting(true);\n await new Promise<void>(resolve => requestAnimationFrame(() => requestAnimationFrame(() => resolve())));\n let restored = false;\n return () => {\n if (restored) return;\n restored = true;\n printSessions.current--;\n if (printSessions.current > 0) return;\n setPrinting(false);\n requestAnimationFrame(() => {\n if (viewportRef.current) {\n viewportRef.current.scrollTop = printScroll.current.top;\n viewportRef.current.scrollLeft = printScroll.current.left;\n }\n });\n };\n };\n return {\n get table() {\n return runtime.current.table;\n },\n getSelectedRows: () => runtime.current.table.getSelectedRowModel().rows.map(row => row.original),\n setSelectedRowIds: ids => {\n const rows = ids.map(getRow).filter(row => row?.getCanSelect());\n const selected = runtime.current.table.options.enableMultiRowSelection === false ? rows.slice(0, 1) : rows;\n runtime.current.table.setRowSelection(Object.fromEntries(selected.map(row => [row.id, true])));\n },\n selectAll: (scope = \"filtered\") => {\n const current = runtime.current.table;\n const rows = (\n scope === \"all\" ? current.getCoreRowModel() : scope === \"currentPage\" ? current.getRowModel() : current.getFilteredRowModel()\n ).rows.filter(row => row.getCanSelect());\n const selected = Object.fromEntries(\n (current.options.enableMultiRowSelection === false ? rows.slice(0, 1) : rows).map(row => [row.id, true as const]),\n );\n current.setRowSelection(previous => (current.options.enableMultiRowSelection === false ? selected : { ...previous, ...selected }));\n },\n deselectAll: () => runtime.current.table.resetRowSelection(true),\n pinRows: (ids, position) => {\n const current = runtime.current.table;\n const rowIds = ids.map(String);\n current.setRowPinning(previous => ({\n top: [...(previous.top ?? []).filter(id => !rowIds.includes(id)), ...(position === \"top\" ? rowIds.filter(id => !!getRow(id)) : [])],\n bottom: [\n ...(previous.bottom ?? []).filter(id => !rowIds.includes(id)),\n ...(position === \"bottom\" ? rowIds.filter(id => !!getRow(id)) : []),\n ],\n }));\n },\n startEditingCell: ({ rowId, columnId }) => start(rowId, columnId),\n startEditingRow: rowId => start(rowId),\n stopEditing,\n focusCell,\n scrollToRow,\n preparePrint,\n print: async () => {\n const restore = await preparePrint();\n try {\n if (contentRef.current) await printDataTable(contentRef.current);\n } finally {\n restore();\n }\n },\n };\n }, [configRef, contentRef, editRef, runtime, setPatches, setPrinting, updateEdit, viewportRef]);\n return api;\n}\n"],"names":["useDataTableApi","runtime","editRef","configRef","updateEdit","setPatches","contentRef","viewportRef","setPrinting","printSessions","React","printScroll","getRow","id","stopEditing","cancel","session","config","event","errors","column","getColumnId","getCellValue","previous","focusCell","columnId","rowId","cell","element","scrollToRow","align","current","allIndex","row","latest","index","start","editable","item","preparePrint","resolve","restored","ids","rows","selected","scope","position","rowIds","restore","printDataTable"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as g from "react";
|
|
2
|
+
import { moveDataTableColumn as i } from "./datatablemodel.es.js";
|
|
3
|
+
function m({
|
|
4
|
+
runtime: a,
|
|
5
|
+
viewportRef: d,
|
|
6
|
+
contentRef: s,
|
|
7
|
+
setColumnDrag: l
|
|
8
|
+
}) {
|
|
9
|
+
const c = g.useRef(null);
|
|
10
|
+
return {
|
|
11
|
+
onDragStart: (e) => {
|
|
12
|
+
const t = e.operation.source?.data.columnId;
|
|
13
|
+
if (typeof t != "string" || !e.nativeEvent?.type.startsWith("pointer")) return;
|
|
14
|
+
const o = a.current.table.getColumn(t)?.getIsPinned();
|
|
15
|
+
c.current = {
|
|
16
|
+
sourceId: t,
|
|
17
|
+
targetId: t,
|
|
18
|
+
scrollLeft: d.current?.scrollLeft ?? 0,
|
|
19
|
+
columns: Array.from(s.current?.querySelectorAll('[role="columnheader"][data-column-id]') ?? []).filter((n) => a.current.table.getColumn(n.dataset.columnId)?.getIsPinned() === o).map((n) => {
|
|
20
|
+
const r = n.getBoundingClientRect();
|
|
21
|
+
return { id: n.dataset.columnId, left: r.left, right: r.right };
|
|
22
|
+
})
|
|
23
|
+
}, l({ sourceId: t, targetId: t });
|
|
24
|
+
},
|
|
25
|
+
onDragMove: (e) => {
|
|
26
|
+
const t = c.current;
|
|
27
|
+
if (!t || !e.to) return;
|
|
28
|
+
const o = a.current.table.getColumn(t.sourceId)?.getIsPinned(), n = e.to.x + (o ? 0 : (d.current?.scrollLeft ?? 0) - t.scrollLeft), r = t.columns.find((u) => n >= u.left && n <= u.right);
|
|
29
|
+
!r || r.id === t.targetId || (t.targetId = r.id, l({ sourceId: t.sourceId, targetId: r.id }));
|
|
30
|
+
},
|
|
31
|
+
onDragEnd: (e) => {
|
|
32
|
+
const { source: t, target: o } = e.operation, r = c.current?.targetId ?? o?.data.columnId;
|
|
33
|
+
!e.canceled && typeof t?.data.columnId == "string" && typeof r == "string" && i(a.current.table, t.data.columnId, r), c.current = null, l(null);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export {
|
|
38
|
+
m as useDataTableColumnDrag
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=usedatatablecolumndrag.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usedatatablecolumndrag.es.js","sources":["../src/components/data-table/useDataTableColumnDrag.ts"],"sourcesContent":["import * as React from \"react\";\nimport { DragDropProvider } from \"@dnd-kit/react\";\nimport { moveDataTableColumn } from \"./dataTableModel\";\nimport type { DataTableRuntime } from \"./useDataTableApi\";\n\ntype DataTableColumnDragOptions<T extends object> = {\n runtime: React.MutableRefObject<DataTableRuntime<T>>;\n viewportRef: React.RefObject<HTMLDivElement>;\n contentRef: React.RefObject<HTMLDivElement>;\n setColumnDrag: React.Dispatch<React.SetStateAction<{ sourceId: string; targetId: string } | null>>;\n};\n\ntype DataTableColumnDragHandlers = Pick<React.ComponentProps<typeof DragDropProvider>, \"onDragStart\" | \"onDragMove\" | \"onDragEnd\">;\n\nexport function useDataTableColumnDrag<T extends object>({\n runtime,\n viewportRef,\n contentRef,\n setColumnDrag,\n}: DataTableColumnDragOptions<T>): DataTableColumnDragHandlers {\n const columnDragRef = React.useRef<{\n sourceId: string;\n targetId: string;\n scrollLeft: number;\n columns: { id: string; left: number; right: number }[];\n } | null>(null);\n const handlers: DataTableColumnDragHandlers = {\n onDragStart: event => {\n const sourceId = event.operation.source?.data.columnId;\n if (typeof sourceId !== \"string\" || !event.nativeEvent?.type.startsWith(\"pointer\")) return;\n const region = runtime.current.table.getColumn(sourceId)?.getIsPinned();\n columnDragRef.current = {\n sourceId,\n targetId: sourceId,\n scrollLeft: viewportRef.current?.scrollLeft ?? 0,\n columns: Array.from(contentRef.current?.querySelectorAll<HTMLElement>('[role=\"columnheader\"][data-column-id]') ?? [])\n .filter(element => runtime.current.table.getColumn(element.dataset.columnId!)?.getIsPinned() === region)\n .map(element => {\n const rect = element.getBoundingClientRect();\n return { id: element.dataset.columnId!, left: rect.left, right: rect.right };\n }),\n };\n setColumnDrag({ sourceId, targetId: sourceId });\n },\n onDragMove: event => {\n const drag = columnDragRef.current;\n if (!drag || !event.to) return;\n const pinned = runtime.current.table.getColumn(drag.sourceId)?.getIsPinned();\n const x = event.to.x + (pinned ? 0 : (viewportRef.current?.scrollLeft ?? 0) - drag.scrollLeft);\n // Initial slots remain stable while the rendered columns move underneath the pointer.\n const target = drag.columns.find(column => x >= column.left && x <= column.right);\n if (!target || target.id === drag.targetId) return;\n drag.targetId = target.id;\n setColumnDrag({ sourceId: drag.sourceId, targetId: target.id });\n },\n onDragEnd: event => {\n const { source, target } = event.operation;\n const drag = columnDragRef.current;\n const targetId = drag?.targetId ?? target?.data.columnId;\n if (!event.canceled && typeof source?.data.columnId === \"string\" && typeof targetId === \"string\") {\n moveDataTableColumn(runtime.current.table, source.data.columnId, targetId);\n }\n columnDragRef.current = null;\n setColumnDrag(null);\n },\n };\n return handlers;\n}\n"],"names":["useDataTableColumnDrag","runtime","viewportRef","contentRef","setColumnDrag","columnDragRef","React","event","sourceId","region","element","rect","drag","pinned","x","target","column","source","targetId","moveDataTableColumn"],"mappings":";;AAcO,SAASA,EAAyC;AAAA,EACvD,SAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AACF,GAA+D;AAC7D,QAAMC,IAAgBC,EAAM,OAKlB,IAAI;AAyCd,SAxC8C;AAAA,IAC5C,aAAa,CAAAC,MAAS;AACpB,YAAMC,IAAWD,EAAM,UAAU,QAAQ,KAAK;AAC9C,UAAI,OAAOC,KAAa,YAAY,CAACD,EAAM,aAAa,KAAK,WAAW,SAAS,EAAG;AACpF,YAAME,IAASR,EAAQ,QAAQ,MAAM,UAAUO,CAAQ,GAAG,YAAA;AAC1D,MAAAH,EAAc,UAAU;AAAA,QACtB,UAAAG;AAAA,QACA,UAAUA;AAAA,QACV,YAAYN,EAAY,SAAS,cAAc;AAAA,QAC/C,SAAS,MAAM,KAAKC,EAAW,SAAS,iBAA8B,uCAAuC,KAAK,CAAA,CAAE,EACjH,OAAO,CAAAO,MAAWT,EAAQ,QAAQ,MAAM,UAAUS,EAAQ,QAAQ,QAAS,GAAG,YAAA,MAAkBD,CAAM,EACtG,IAAI,CAAAC,MAAW;AACd,gBAAMC,IAAOD,EAAQ,sBAAA;AACrB,iBAAO,EAAE,IAAIA,EAAQ,QAAQ,UAAW,MAAMC,EAAK,MAAM,OAAOA,EAAK,MAAA;AAAA,QACvE,CAAC;AAAA,MAAA,GAELP,EAAc,EAAE,UAAAI,GAAU,UAAUA,EAAA,CAAU;AAAA,IAChD;AAAA,IACA,YAAY,CAAAD,MAAS;AACnB,YAAMK,IAAOP,EAAc;AAC3B,UAAI,CAACO,KAAQ,CAACL,EAAM,GAAI;AACxB,YAAMM,IAASZ,EAAQ,QAAQ,MAAM,UAAUW,EAAK,QAAQ,GAAG,YAAA,GACzDE,IAAIP,EAAM,GAAG,KAAKM,IAAS,KAAKX,EAAY,SAAS,cAAc,KAAKU,EAAK,aAE7EG,IAASH,EAAK,QAAQ,KAAK,CAAAI,MAAUF,KAAKE,EAAO,QAAQF,KAAKE,EAAO,KAAK;AAChF,MAAI,CAACD,KAAUA,EAAO,OAAOH,EAAK,aAClCA,EAAK,WAAWG,EAAO,IACvBX,EAAc,EAAE,UAAUQ,EAAK,UAAU,UAAUG,EAAO,IAAI;AAAA,IAChE;AAAA,IACA,WAAW,CAAAR,MAAS;AAClB,YAAM,EAAE,QAAAU,GAAQ,QAAAF,EAAA,IAAWR,EAAM,WAE3BW,IADOb,EAAc,SACJ,YAAYU,GAAQ,KAAK;AAChD,MAAI,CAACR,EAAM,YAAY,OAAOU,GAAQ,KAAK,YAAa,YAAY,OAAOC,KAAa,YACtFC,EAAoBlB,EAAQ,QAAQ,OAAOgB,EAAO,KAAK,UAAUC,CAAQ,GAE3Eb,EAAc,UAAU,MACxBD,EAAc,IAAI;AAAA,IACpB;AAAA,EAAA;AAGJ;"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import * as l from "react";
|
|
2
|
+
import { useTable as K, functionalUpdate as r } from "@tanstack/react-table";
|
|
3
|
+
import { dataTableFeatures as W } from "./datatablefeatures.es.js";
|
|
4
|
+
import { getColumnId as o, getFlexSizes as X, matchesFilter as Y, filterType as Z, getCellValue as $ } from "./datatablemodel.es.js";
|
|
5
|
+
const E = [];
|
|
6
|
+
function ne({
|
|
7
|
+
rowData: g,
|
|
8
|
+
columnDefs: z,
|
|
9
|
+
defaultColDef: V,
|
|
10
|
+
getRowId: x,
|
|
11
|
+
paginationPageSize: M,
|
|
12
|
+
tableOptions: t,
|
|
13
|
+
externalFilter: C,
|
|
14
|
+
rowSelection: S,
|
|
15
|
+
pagination: L,
|
|
16
|
+
renderSubComponent: k,
|
|
17
|
+
getRowCanExpand: q,
|
|
18
|
+
onQuickFilterTextChange: B,
|
|
19
|
+
patches: R,
|
|
20
|
+
alignment: s,
|
|
21
|
+
isPrinting: _,
|
|
22
|
+
viewportWidth: v,
|
|
23
|
+
selectionWidth: w,
|
|
24
|
+
searchText: p,
|
|
25
|
+
setSearch: H
|
|
26
|
+
}) {
|
|
27
|
+
const [N, j] = l.useState(t?.initialState?.columnSizing ?? {}), [G, D] = l.useState({}), [I, Q] = l.useState(t?.initialState?.columnFilters ?? []), m = l.useCallback(
|
|
28
|
+
(e, i) => String(x?.(e, i) ?? e?.id ?? i),
|
|
29
|
+
[x]
|
|
30
|
+
), a = l.useMemo(() => {
|
|
31
|
+
const e = z.map((n) => ({ ...V, ...n })), i = e.map(o);
|
|
32
|
+
if (new Set(i).size !== i.length) throw new Error("DataTable column ids must be unique.");
|
|
33
|
+
return e;
|
|
34
|
+
}, [z, V]), b = l.useMemo(() => new Map(a.map((e) => [o(e), e])), [a]), U = l.useMemo(() => {
|
|
35
|
+
const e = (g ?? E).map((i, n) => [m(i, n), i]);
|
|
36
|
+
if (new Set(e.map(([i]) => i)).size !== e.length) throw new Error("DataTable row ids must be unique.");
|
|
37
|
+
return new Map(e);
|
|
38
|
+
}, [g, m]), f = l.useMemo(
|
|
39
|
+
() => (g ?? E).map((e, i) => {
|
|
40
|
+
const n = R[m(e, i)];
|
|
41
|
+
return n?.source === e ? n.data : e;
|
|
42
|
+
}),
|
|
43
|
+
[g, R, m]
|
|
44
|
+
), d = l.useMemo(() => new Map(f.map((e, i) => [e, i])), [f]), h = l.useMemo(
|
|
45
|
+
() => ({
|
|
46
|
+
columnVisibility: Object.fromEntries(a.filter((e) => e.hide).map((e) => [o(e), !1])),
|
|
47
|
+
columnPinning: {
|
|
48
|
+
start: a.filter((e) => e.pinned === "left" || e.pinned === "start").map(o),
|
|
49
|
+
end: a.filter((e) => e.pinned === "right" || e.pinned === "end").map(o)
|
|
50
|
+
},
|
|
51
|
+
pagination: { pageIndex: 0, pageSize: M },
|
|
52
|
+
...t?.initialState
|
|
53
|
+
}),
|
|
54
|
+
[a, M, t?.initialState]
|
|
55
|
+
), A = l.useMemo(
|
|
56
|
+
() => [
|
|
57
|
+
...(t?.state?.columnFilters ?? I).filter((e) => e.id !== "__external"),
|
|
58
|
+
...C ? [{ id: "__external", value: C }] : []
|
|
59
|
+
],
|
|
60
|
+
[t?.state?.columnFilters, I, C]
|
|
61
|
+
), F = l.useMemo(
|
|
62
|
+
() => ({
|
|
63
|
+
...h.columnVisibility,
|
|
64
|
+
...G,
|
|
65
|
+
...s?.state.columnVisibility,
|
|
66
|
+
...t?.state?.columnVisibility,
|
|
67
|
+
__external: !1
|
|
68
|
+
}),
|
|
69
|
+
[h.columnVisibility, G, s?.state.columnVisibility, t?.state?.columnVisibility]
|
|
70
|
+
), y = t?.state?.columnSizing ?? s?.state.columnSizing ?? N, P = l.useMemo(
|
|
71
|
+
() => X(
|
|
72
|
+
a.filter((e) => F[o(e)] !== !1 && (!_ || !e.hideInPrint)),
|
|
73
|
+
Math.max(0, v - w),
|
|
74
|
+
y
|
|
75
|
+
),
|
|
76
|
+
[a, F, _, v, w, y]
|
|
77
|
+
), J = l.useMemo(
|
|
78
|
+
() => [
|
|
79
|
+
...a.map((e) => ({
|
|
80
|
+
id: o(e),
|
|
81
|
+
header: typeof e.headerName == "string" ? e.headerName : o(e),
|
|
82
|
+
accessorFn: (i, n) => $(i, e, d.get(i) ?? n),
|
|
83
|
+
size: P[o(e)] ?? e.width ?? 150,
|
|
84
|
+
minSize: e.minWidth ?? 60,
|
|
85
|
+
maxSize: e.maxWidth,
|
|
86
|
+
enableSorting: e.sortable !== !1 && (!!e.field || !!e.valueGetter),
|
|
87
|
+
enableColumnFilter: !!e.filter,
|
|
88
|
+
enableGlobalFilter: !!e.field || !!e.valueGetter,
|
|
89
|
+
enableResizing: e.resizable !== !1,
|
|
90
|
+
enableHiding: !1,
|
|
91
|
+
enablePinning: !1,
|
|
92
|
+
sortFn: e.cellDataType === "number" ? "basic" : e.cellDataType === "date" ? "datetime" : "alphanumeric",
|
|
93
|
+
filterFn: (i, n, c) => Y(i.getValue(n), c, Z(e)),
|
|
94
|
+
...e.tableOptions
|
|
95
|
+
})),
|
|
96
|
+
{
|
|
97
|
+
id: "__external",
|
|
98
|
+
enableHiding: !1,
|
|
99
|
+
enablePinning: !1,
|
|
100
|
+
accessorFn: () => !0,
|
|
101
|
+
enableGlobalFilter: !1,
|
|
102
|
+
enableSorting: !1,
|
|
103
|
+
filterFn: (e, i, n) => n(e.original)
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
[a, d, P]
|
|
107
|
+
), u = K({
|
|
108
|
+
columnResizeMode: "onChange",
|
|
109
|
+
sortDescFirst: !1,
|
|
110
|
+
keepPinnedRows: !0,
|
|
111
|
+
enableRowSelection: (e) => !!S && (S.isRowSelectable?.(e.original) ?? !0),
|
|
112
|
+
enableMultiRowSelection: S?.mode === "multiRow",
|
|
113
|
+
enableSubRowSelection: !1,
|
|
114
|
+
manualPagination: !L,
|
|
115
|
+
getColumnCanGlobalFilter: (e) => {
|
|
116
|
+
const i = b.get(e.id);
|
|
117
|
+
return !!i && (!!i.field || !!i.valueGetter);
|
|
118
|
+
},
|
|
119
|
+
globalFilterFn: (e, i, n) => {
|
|
120
|
+
const c = b.get(i), T = e.getValue(i);
|
|
121
|
+
return String(c?.getQuickFilterText?.({ data: e.original, value: T }) ?? T ?? "").toLocaleLowerCase().includes(String(n).toLocaleLowerCase());
|
|
122
|
+
},
|
|
123
|
+
...t,
|
|
124
|
+
getRowCanExpand: (e) => !!k && t?.enableExpanding !== !1 && (q?.(e) ?? t?.getRowCanExpand?.(e) ?? !0),
|
|
125
|
+
features: W,
|
|
126
|
+
columns: J,
|
|
127
|
+
data: f,
|
|
128
|
+
getRowId: (e, i) => m(e, d.get(e) ?? i),
|
|
129
|
+
initialState: h,
|
|
130
|
+
state: {
|
|
131
|
+
...s?.state,
|
|
132
|
+
...t?.state,
|
|
133
|
+
columnSizing: y,
|
|
134
|
+
columnVisibility: F,
|
|
135
|
+
columnFilters: A,
|
|
136
|
+
globalFilter: p
|
|
137
|
+
},
|
|
138
|
+
onColumnSizingChange: (e) => {
|
|
139
|
+
const i = r(e, u.atoms.columnSizing.get());
|
|
140
|
+
j(i), t?.onColumnSizingChange?.(e);
|
|
141
|
+
},
|
|
142
|
+
onColumnVisibilityChange: (e) => {
|
|
143
|
+
const i = r(e, u.atoms.columnVisibility.get());
|
|
144
|
+
D(i), t?.onColumnVisibilityChange?.(e);
|
|
145
|
+
},
|
|
146
|
+
onColumnFiltersChange: (e) => {
|
|
147
|
+
const i = (n) => r(e, n).filter((c) => c.id !== "__external");
|
|
148
|
+
t?.state?.columnFilters === void 0 && Q(i), t?.onColumnFiltersChange?.(i);
|
|
149
|
+
},
|
|
150
|
+
onGlobalFilterChange: (e) => {
|
|
151
|
+
const i = r(e, p);
|
|
152
|
+
H(i), B?.(i), t?.onGlobalFilterChange?.(e);
|
|
153
|
+
},
|
|
154
|
+
...s ? {
|
|
155
|
+
onColumnSizingChange: (e) => {
|
|
156
|
+
const i = r(e, u.atoms.columnSizing.get());
|
|
157
|
+
s.setState((n) => ({ ...n, columnSizing: i })), t?.onColumnSizingChange?.(e);
|
|
158
|
+
},
|
|
159
|
+
onColumnOrderChange: (e) => {
|
|
160
|
+
const i = r(e, u.atoms.columnOrder.get());
|
|
161
|
+
s.setState((n) => ({ ...n, columnOrder: i })), t?.onColumnOrderChange?.(e);
|
|
162
|
+
},
|
|
163
|
+
onColumnPinningChange: (e) => {
|
|
164
|
+
const i = r(e, u.atoms.columnPinning.get());
|
|
165
|
+
s.setState((n) => ({ ...n, columnPinning: i })), t?.onColumnPinningChange?.(e);
|
|
166
|
+
},
|
|
167
|
+
onColumnVisibilityChange: (e) => {
|
|
168
|
+
const i = r(e, u.atoms.columnVisibility.get());
|
|
169
|
+
s.setState((n) => ({ ...n, columnVisibility: i })), t?.onColumnVisibilityChange?.(e);
|
|
170
|
+
}
|
|
171
|
+
} : {}
|
|
172
|
+
});
|
|
173
|
+
return { table: u, definitionsById: b, sourcesById: U, data: f, rowIndices: d, resolveId: m };
|
|
174
|
+
}
|
|
175
|
+
export {
|
|
176
|
+
ne as useDataTableInstance
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=usedatatableinstance.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usedatatableinstance.es.js","sources":["../src/components/data-table/useDataTableInstance.ts"],"sourcesContent":["import * as React from \"react\";\nimport { functionalUpdate, useTable, type ColumnDef } from \"@tanstack/react-table\";\nimport { DataTableAlignmentContext } from \"./DataTableContext\";\nimport { dataTableFeatures } from \"./dataTableFeatures\";\nimport { filterType, getCellValue, getColumnId, getFlexSizes, matchesFilter } from \"./dataTableModel\";\nimport type {\n DataTableColumn,\n DataTableContentProps,\n DataTableFeatures,\n DataTableFilter,\n DataTableInstance,\n DataTableRow,\n DataTableState,\n} from \"./DataTable.types\";\n\nconst emptyRows: never[] = [];\ntype DataTableInstanceOptions<T extends object> = Pick<\n DataTableContentProps<T>,\n | \"rowData\"\n | \"columnDefs\"\n | \"getRowId\"\n | \"tableOptions\"\n | \"externalFilter\"\n | \"rowSelection\"\n | \"renderSubComponent\"\n | \"getRowCanExpand\"\n | \"onQuickFilterTextChange\"\n> & {\n defaultColDef: Partial<DataTableColumn<T>>;\n paginationPageSize: number;\n pagination: boolean;\n patches: Record<string, { source: T; data: T }>;\n alignment: React.ContextType<typeof DataTableAlignmentContext>;\n isPrinting: boolean;\n viewportWidth: number;\n selectionWidth: number;\n searchText: string;\n setSearch: (value: string) => void;\n};\n\n/** Own TanStack configuration, controlled state precedence and stable row identities. */\nexport function useDataTableInstance<T extends object>({\n rowData,\n columnDefs,\n defaultColDef,\n getRowId,\n paginationPageSize,\n tableOptions,\n externalFilter,\n rowSelection,\n pagination,\n renderSubComponent,\n getRowCanExpand,\n onQuickFilterTextChange,\n patches,\n alignment,\n isPrinting,\n viewportWidth,\n selectionWidth,\n searchText,\n setSearch,\n}: DataTableInstanceOptions<T>) {\n const [columnSizing, setColumnSizing] = React.useState<DataTableState[\"columnSizing\"]>(tableOptions?.initialState?.columnSizing ?? {});\n const [columnVisibility, setColumnVisibility] = React.useState<DataTableState[\"columnVisibility\"]>({});\n const [columnFilters, setColumnFilters] = React.useState<DataTableState[\"columnFilters\"]>(tableOptions?.initialState?.columnFilters ?? []);\n const resolveId = React.useCallback(\n (data: T, index: number) => String(getRowId?.(data, index) ?? (data as { id?: unknown } | null)?.id ?? index),\n [getRowId],\n );\n const definitions = React.useMemo(() => {\n const result = columnDefs.map(column => ({ ...defaultColDef, ...column }));\n const ids = result.map(getColumnId);\n if (new Set(ids).size !== ids.length) throw new Error(\"DataTable column ids must be unique.\");\n return result;\n }, [columnDefs, defaultColDef]);\n const definitionsById = React.useMemo(() => new Map(definitions.map(column => [getColumnId(column), column])), [definitions]);\n const sourcesById = React.useMemo(() => {\n const entries = (rowData ?? emptyRows).map((row, index) => [resolveId(row, index), row] as const);\n if (new Set(entries.map(([id]) => id)).size !== entries.length) throw new Error(\"DataTable row ids must be unique.\");\n return new Map(entries);\n }, [rowData, resolveId]);\n const data = React.useMemo(\n () =>\n (rowData ?? emptyRows).map((row, index) => {\n const patch = patches[resolveId(row, index)];\n return patch?.source === row ? patch.data : row;\n }),\n [rowData, patches, resolveId],\n );\n // Keep original indices/ids through external filtering; index ids must not shift when a chip changes.\n const rowIndices = React.useMemo(() => new Map(data.map((row, index) => [row, index])), [data]);\n const initialState = React.useMemo(\n () => ({\n columnVisibility: Object.fromEntries(definitions.filter(column => column.hide).map(column => [getColumnId(column), false])),\n columnPinning: {\n start: definitions.filter(column => column.pinned === \"left\" || column.pinned === \"start\").map(getColumnId),\n end: definitions.filter(column => column.pinned === \"right\" || column.pinned === \"end\").map(getColumnId),\n },\n pagination: { pageIndex: 0, pageSize: paginationPageSize },\n ...tableOptions?.initialState,\n }),\n [definitions, paginationPageSize, tableOptions?.initialState],\n );\n\n const effectiveFilters = React.useMemo(\n () => [\n ...(tableOptions?.state?.columnFilters ?? columnFilters).filter(filter => filter.id !== \"__external\"),\n ...(externalFilter ? [{ id: \"__external\", value: externalFilter }] : []),\n ],\n [tableOptions?.state?.columnFilters, columnFilters, externalFilter],\n );\n const effectiveVisibility = React.useMemo<DataTableState[\"columnVisibility\"]>(\n () => ({\n ...initialState.columnVisibility,\n ...columnVisibility,\n ...alignment?.state.columnVisibility,\n ...tableOptions?.state?.columnVisibility,\n __external: false,\n }),\n [initialState.columnVisibility, columnVisibility, alignment?.state.columnVisibility, tableOptions?.state?.columnVisibility],\n );\n const effectiveSizing = tableOptions?.state?.columnSizing ?? alignment?.state.columnSizing ?? columnSizing;\n const flexSizes = React.useMemo(\n () =>\n getFlexSizes(\n definitions.filter(column => effectiveVisibility[getColumnId(column)] !== false && (!isPrinting || !column.hideInPrint)),\n Math.max(0, viewportWidth - selectionWidth),\n effectiveSizing,\n ),\n [definitions, effectiveVisibility, isPrinting, viewportWidth, selectionWidth, effectiveSizing],\n );\n const columns = React.useMemo<ColumnDef<DataTableFeatures, T, any>[]>(\n () => [\n ...definitions.map(column => ({\n id: getColumnId(column),\n header: typeof column.headerName === \"string\" ? column.headerName : getColumnId(column),\n accessorFn: (row: T, index: number) => getCellValue(row, column, rowIndices.get(row) ?? index),\n size: flexSizes[getColumnId(column)] ?? column.width ?? 150,\n minSize: column.minWidth ?? 60,\n maxSize: column.maxWidth,\n enableSorting: column.sortable !== false && (!!column.field || !!column.valueGetter),\n enableColumnFilter: !!column.filter,\n enableGlobalFilter: !!column.field || !!column.valueGetter,\n enableResizing: column.resizable !== false,\n enableHiding: false,\n enablePinning: false,\n sortFn:\n column.cellDataType === \"number\" ? (\"basic\" as const) : column.cellDataType === \"date\" ? (\"datetime\" as const) : (\"alphanumeric\" as const),\n filterFn: (row: DataTableRow<T>, id: string, value: DataTableFilter) => matchesFilter(row.getValue(id), value, filterType(column)),\n ...column.tableOptions,\n })),\n {\n id: \"__external\",\n enableHiding: false,\n enablePinning: false,\n accessorFn: () => true,\n enableGlobalFilter: false,\n enableSorting: false,\n filterFn: (row, _id, predicate: (data: T) => boolean) => predicate(row.original),\n },\n ],\n [definitions, rowIndices, flexSizes],\n );\n const table: DataTableInstance<T> = useTable<DataTableFeatures, T>({\n columnResizeMode: \"onChange\",\n sortDescFirst: false,\n keepPinnedRows: true,\n enableRowSelection: row => !!rowSelection && (rowSelection.isRowSelectable?.(row.original) ?? true),\n enableMultiRowSelection: rowSelection?.mode === \"multiRow\",\n enableSubRowSelection: false,\n manualPagination: !pagination,\n getColumnCanGlobalFilter: column => {\n const definition = definitionsById.get(column.id);\n return !!definition && (!!definition.field || !!definition.valueGetter);\n },\n globalFilterFn: (row, id, value) => {\n const column = definitionsById.get(id);\n const cellValue = row.getValue(id);\n return String(column?.getQuickFilterText?.({ data: row.original, value: cellValue }) ?? cellValue ?? \"\")\n .toLocaleLowerCase()\n .includes(String(value).toLocaleLowerCase());\n },\n ...tableOptions,\n getRowCanExpand: row =>\n !!renderSubComponent && tableOptions?.enableExpanding !== false && (getRowCanExpand?.(row) ?? tableOptions?.getRowCanExpand?.(row) ?? true),\n features: dataTableFeatures,\n columns,\n data,\n getRowId: (row, index) => resolveId(row, rowIndices.get(row) ?? index),\n initialState,\n state: {\n ...alignment?.state,\n ...tableOptions?.state,\n columnSizing: effectiveSizing,\n columnVisibility: effectiveVisibility,\n columnFilters: effectiveFilters,\n globalFilter: searchText,\n },\n onColumnSizingChange: updater => {\n const next = functionalUpdate(updater, table.atoms.columnSizing.get());\n setColumnSizing(next);\n tableOptions?.onColumnSizingChange?.(updater);\n },\n onColumnVisibilityChange: updater => {\n const next = functionalUpdate(updater, table.atoms.columnVisibility.get());\n setColumnVisibility(next);\n tableOptions?.onColumnVisibilityChange?.(updater);\n },\n onColumnFiltersChange: updater => {\n const update = (previous: DataTableState[\"columnFilters\"]) => functionalUpdate(updater, previous).filter(filter => filter.id !== \"__external\");\n if (tableOptions?.state?.columnFilters === undefined) setColumnFilters(update);\n tableOptions?.onColumnFiltersChange?.(update);\n },\n onGlobalFilterChange: updater => {\n const value = functionalUpdate(updater, searchText) as string;\n setSearch(value);\n onQuickFilterTextChange?.(value);\n tableOptions?.onGlobalFilterChange?.(updater);\n },\n ...(alignment\n ? {\n onColumnSizingChange: updater => {\n const next = functionalUpdate(updater, table.atoms.columnSizing.get());\n alignment.setState(previous => ({ ...previous, columnSizing: next }));\n tableOptions?.onColumnSizingChange?.(updater);\n },\n onColumnOrderChange: updater => {\n const next = functionalUpdate(updater, table.atoms.columnOrder.get());\n alignment.setState(previous => ({ ...previous, columnOrder: next }));\n tableOptions?.onColumnOrderChange?.(updater);\n },\n onColumnPinningChange: updater => {\n const next = functionalUpdate(updater, table.atoms.columnPinning.get());\n alignment.setState(previous => ({ ...previous, columnPinning: next }));\n tableOptions?.onColumnPinningChange?.(updater);\n },\n onColumnVisibilityChange: updater => {\n const next = functionalUpdate(updater, table.atoms.columnVisibility.get());\n alignment.setState(previous => ({ ...previous, columnVisibility: next }));\n tableOptions?.onColumnVisibilityChange?.(updater);\n },\n }\n : {}),\n });\n\n return { table, definitionsById, sourcesById, data, rowIndices, resolveId };\n}\n"],"names":["emptyRows","useDataTableInstance","rowData","columnDefs","defaultColDef","getRowId","paginationPageSize","tableOptions","externalFilter","rowSelection","pagination","renderSubComponent","getRowCanExpand","onQuickFilterTextChange","patches","alignment","isPrinting","viewportWidth","selectionWidth","searchText","setSearch","columnSizing","setColumnSizing","React","columnVisibility","setColumnVisibility","columnFilters","setColumnFilters","resolveId","data","index","definitions","result","column","ids","getColumnId","definitionsById","sourcesById","entries","row","id","patch","rowIndices","initialState","effectiveFilters","filter","effectiveVisibility","effectiveSizing","flexSizes","getFlexSizes","columns","getCellValue","value","matchesFilter","filterType","_id","predicate","table","useTable","definition","cellValue","dataTableFeatures","updater","next","functionalUpdate","update","previous"],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as p from "react";
|
|
2
|
+
function T(A, u, d, C) {
|
|
3
|
+
const m = p.useRef(), g = p.useRef();
|
|
4
|
+
p.useLayoutEffect(() => {
|
|
5
|
+
const e = A.current;
|
|
6
|
+
if (!e) return;
|
|
7
|
+
const o = m.current;
|
|
8
|
+
if (o && o.rows === u && o.columns === d && o.scrollTop === e.scrollTop && o.scrollLeft === e.scrollLeft && o.animations.some((t) => t.playState === "running"))
|
|
9
|
+
return;
|
|
10
|
+
const w = /* @__PURE__ */ new Map();
|
|
11
|
+
if (o)
|
|
12
|
+
for (const t of o.positions.keys())
|
|
13
|
+
t.isConnected && w.set(t, new DOMMatrix(getComputedStyle(t).transform));
|
|
14
|
+
o?.animations.forEach((t) => t.cancel());
|
|
15
|
+
const h = Array.from(
|
|
16
|
+
e.querySelectorAll('[role="row"][data-row-id], [role="gridcell"][data-column-id], [role="columnheader"][data-column-id]')
|
|
17
|
+
).filter((t) => !t.closest("[data-exiting-row]")), a = new Map(h.map((t) => [t, t.getBoundingClientRect()])), b = [], L = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
18
|
+
if (o && !C && !L) {
|
|
19
|
+
const t = o.rows !== u, l = o.columns !== d;
|
|
20
|
+
if (t) {
|
|
21
|
+
g.current?.remove();
|
|
22
|
+
const s = e.getBoundingClientRect(), n = document.createElement("div");
|
|
23
|
+
n.setAttribute("aria-hidden", "true"), n.inert = !0, Object.assign(n.style, {
|
|
24
|
+
position: "absolute",
|
|
25
|
+
top: `${e.scrollTop}px`,
|
|
26
|
+
left: `${e.scrollLeft}px`,
|
|
27
|
+
width: `${e.clientWidth}px`,
|
|
28
|
+
height: `${e.clientHeight}px`,
|
|
29
|
+
overflow: "hidden",
|
|
30
|
+
pointerEvents: "none",
|
|
31
|
+
zIndex: "15"
|
|
32
|
+
});
|
|
33
|
+
for (const [r, i] of o.rowCopies) {
|
|
34
|
+
if (a.has(r)) continue;
|
|
35
|
+
const c = o.positions.get(r);
|
|
36
|
+
i.setAttribute("data-exiting-row", ""), i.removeAttribute("id"), i.querySelectorAll("[id]").forEach((f) => f.removeAttribute("id")), Object.assign(i.style, {
|
|
37
|
+
position: "absolute",
|
|
38
|
+
margin: "0",
|
|
39
|
+
minWidth: "0",
|
|
40
|
+
transform: "none",
|
|
41
|
+
top: `${c.top - s.top - e.clientTop}px`,
|
|
42
|
+
left: `${c.left - s.left - e.clientLeft}px`,
|
|
43
|
+
width: `${c.width}px`
|
|
44
|
+
}), n.append(i);
|
|
45
|
+
}
|
|
46
|
+
if (n.childElementCount) {
|
|
47
|
+
e.append(n), g.current = n;
|
|
48
|
+
const r = Array.from(
|
|
49
|
+
n.children,
|
|
50
|
+
(i) => i.animate([{ opacity: 1 }, { opacity: 0 }], {
|
|
51
|
+
duration: 220,
|
|
52
|
+
easing: "ease-out",
|
|
53
|
+
fill: "forwards"
|
|
54
|
+
})
|
|
55
|
+
);
|
|
56
|
+
Promise.all(r.map((i) => i.finished)).then(() => n.remove());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
for (const s of h) {
|
|
60
|
+
const n = s.getAttribute("role") === "row";
|
|
61
|
+
if (!(n ? t : l) || s.hasAttribute("data-dragging")) continue;
|
|
62
|
+
const r = o.positions.get(s), i = a.get(s);
|
|
63
|
+
if (typeof s.animate != "function") continue;
|
|
64
|
+
const c = w.get(s), f = o.scrollTop === e.scrollTop && o.scrollLeft === e.scrollLeft, y = !n && r && f ? r.left - i.left + (c?.m41 ?? 0) : 0, x = n && r && f ? r.top - i.top + (c?.m42 ?? 0) : 0, v = Math.abs(y) >= 1 || Math.abs(x) >= 1;
|
|
65
|
+
if (!v && !n) continue;
|
|
66
|
+
const M = v ? [{ transform: `translate(${y}px, ${x}px)` }, { transform: "translate(0, 0)" }] : [{ opacity: r ? 0.6 : 0 }, { opacity: 1 }];
|
|
67
|
+
b.push(
|
|
68
|
+
s.animate(M, {
|
|
69
|
+
duration: 220,
|
|
70
|
+
easing: "ease-out"
|
|
71
|
+
})
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
m.current = {
|
|
76
|
+
rows: u,
|
|
77
|
+
columns: d,
|
|
78
|
+
scrollTop: e.scrollTop,
|
|
79
|
+
scrollLeft: e.scrollLeft,
|
|
80
|
+
positions: a,
|
|
81
|
+
animations: b,
|
|
82
|
+
rowCopies: new Map(
|
|
83
|
+
h.filter((t) => {
|
|
84
|
+
const l = a.get(t), s = e.getBoundingClientRect();
|
|
85
|
+
return t.getAttribute("role") === "row" && l.bottom > s.top && l.top < s.bottom;
|
|
86
|
+
}).map((t) => [t, t.cloneNode(!0)])
|
|
87
|
+
)
|
|
88
|
+
};
|
|
89
|
+
}), p.useEffect(
|
|
90
|
+
() => () => {
|
|
91
|
+
m.current?.animations.forEach((e) => e.cancel()), g.current?.remove();
|
|
92
|
+
},
|
|
93
|
+
[]
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
export {
|
|
97
|
+
T as useDataTableMotion
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=usedatatablemotion.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usedatatablemotion.es.js","sources":["../src/components/data-table/useDataTableMotion.ts"],"sourcesContent":["import * as React from \"react\";\n\n/** Animate committed row/column order changes within the viewport. */\nexport function useDataTableMotion(viewportRef: React.RefObject<HTMLDivElement>, rowOrder: string, columnOrder: string, isPrinting: boolean) {\n // Capture layout after each commit and animate retained elements when row or column order changes.\n // The virtualizer owns the outer row transform, so motion is applied to the inner row instead.\n const motionSnapshot = React.useRef<{\n rows: string;\n columns: string;\n scrollTop: number;\n scrollLeft: number;\n positions: Map<Element, DOMRect>;\n animations: Animation[];\n rowCopies: Map<HTMLElement, HTMLElement>;\n }>();\n const exitLayer = React.useRef<HTMLDivElement>();\n React.useLayoutEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n const previous = motionSnapshot.current;\n if (\n previous &&\n previous.rows === rowOrder &&\n previous.columns === columnOrder &&\n previous.scrollTop === viewport.scrollTop &&\n previous.scrollLeft === viewport.scrollLeft &&\n previous.animations.some(animation => animation.playState === \"running\")\n )\n return;\n // Read the current visual offset before canceling an interrupted transition.\n const offsets = new Map<Element, DOMMatrix>();\n if (previous)\n for (const element of previous.positions.keys()) {\n if (element.isConnected) offsets.set(element, new DOMMatrix(getComputedStyle(element).transform));\n }\n previous?.animations.forEach(animation => animation.cancel());\n const elements = Array.from(\n viewport.querySelectorAll<HTMLElement>('[role=\"row\"][data-row-id], [role=\"gridcell\"][data-column-id], [role=\"columnheader\"][data-column-id]'),\n ).filter(element => !element.closest(\"[data-exiting-row]\"));\n const positions = new Map(elements.map(element => [element, element.getBoundingClientRect()]));\n const animations: Animation[] = [];\n const reducedMotion = window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n if (previous && !isPrinting && !reducedMotion) {\n const rowsChanged = previous.rows !== rowOrder;\n const columnsChanged = previous.columns !== columnOrder;\n if (rowsChanged) {\n exitLayer.current?.remove();\n const bounds = viewport.getBoundingClientRect();\n const layer = document.createElement(\"div\");\n layer.setAttribute(\"aria-hidden\", \"true\");\n layer.inert = true;\n Object.assign(layer.style, {\n position: \"absolute\",\n top: `${viewport.scrollTop}px`,\n left: `${viewport.scrollLeft}px`,\n width: `${viewport.clientWidth}px`,\n height: `${viewport.clientHeight}px`,\n overflow: \"hidden\",\n pointerEvents: \"none\",\n zIndex: \"15\",\n });\n for (const [element, copy] of previous.rowCopies) {\n if (positions.has(element)) continue;\n const rect = previous.positions.get(element)!;\n copy.setAttribute(\"data-exiting-row\", \"\");\n // Copies are decorative and must not introduce duplicate document ids.\n copy.removeAttribute(\"id\");\n copy.querySelectorAll(\"[id]\").forEach(child => child.removeAttribute(\"id\"));\n Object.assign(copy.style, {\n position: \"absolute\",\n margin: \"0\",\n minWidth: \"0\",\n transform: \"none\",\n top: `${rect.top - bounds.top - viewport.clientTop}px`,\n left: `${rect.left - bounds.left - viewport.clientLeft}px`,\n width: `${rect.width}px`,\n });\n layer.append(copy);\n }\n if (layer.childElementCount) {\n viewport.append(layer);\n exitLayer.current = layer;\n const fades = Array.from(layer.children, child =>\n child.animate([{ opacity: 1 }, { opacity: 0 }], {\n duration: 220,\n easing: \"ease-out\",\n fill: \"forwards\",\n }),\n );\n void Promise.all(fades.map(fade => fade.finished)).then(() => layer.remove());\n }\n }\n for (const element of elements) {\n const isRow = element.getAttribute(\"role\") === \"row\";\n if (!(isRow ? rowsChanged : columnsChanged) || element.hasAttribute(\"data-dragging\")) continue;\n const before = previous.positions.get(element);\n const after = positions.get(element)!;\n if (typeof element.animate !== \"function\") continue;\n const offset = offsets.get(element);\n const sameScroll = previous.scrollTop === viewport.scrollTop && previous.scrollLeft === viewport.scrollLeft;\n const x = !isRow && before && sameScroll ? before.left - after.left + (offset?.m41 ?? 0) : 0;\n const y = isRow && before && sameScroll ? before.top - after.top + (offset?.m42 ?? 0) : 0;\n const moved = Math.abs(x) >= 1 || Math.abs(y) >= 1;\n if (!moved && !isRow) continue;\n // Virtualization can replace every visible row; filters can retain a row at the same position.\n // Give those results an entrance transition as well as animating rows that change position.\n const frames = moved\n ? [{ transform: `translate(${x}px, ${y}px)` }, { transform: \"translate(0, 0)\" }]\n : [{ opacity: before ? 0.6 : 0 }, { opacity: 1 }];\n animations.push(\n element.animate(frames, {\n duration: 220,\n easing: \"ease-out\",\n }),\n );\n }\n }\n motionSnapshot.current = {\n rows: rowOrder,\n columns: columnOrder,\n scrollTop: viewport.scrollTop,\n scrollLeft: viewport.scrollLeft,\n positions,\n animations,\n rowCopies: new Map(\n elements\n .filter(element => {\n const rect = positions.get(element)!;\n const bounds = viewport.getBoundingClientRect();\n return element.getAttribute(\"role\") === \"row\" && rect.bottom > bounds.top && rect.top < bounds.bottom;\n })\n .map(element => [element, element.cloneNode(true) as HTMLElement]),\n ),\n };\n });\n React.useEffect(\n () => () => {\n motionSnapshot.current?.animations.forEach(animation => animation.cancel());\n exitLayer.current?.remove();\n },\n [],\n );\n}\n"],"names":["useDataTableMotion","viewportRef","rowOrder","columnOrder","isPrinting","motionSnapshot","React","exitLayer","viewport","previous","animation","offsets","element","elements","positions","animations","reducedMotion","rowsChanged","columnsChanged","bounds","layer","copy","rect","child","fades","fade","isRow","before","after","offset","sameScroll","x","y","moved","frames"],"mappings":"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"}
|