@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.
Files changed (95) hide show
  1. package/README.md +18 -10
  2. package/dist/components/data-table/DataTable.d.ts +8 -0
  3. package/dist/components/data-table/DataTable.d.ts.map +1 -0
  4. package/dist/components/data-table/DataTable.types.d.ts +176 -0
  5. package/dist/components/data-table/DataTable.types.d.ts.map +1 -0
  6. package/dist/components/data-table/DataTableActions.d.ts +42 -0
  7. package/dist/components/data-table/DataTableActions.d.ts.map +1 -0
  8. package/dist/components/data-table/DataTableAlignment.d.ts +9 -0
  9. package/dist/components/data-table/DataTableAlignment.d.ts.map +1 -0
  10. package/dist/components/data-table/DataTableColumnHeader.d.ts +11 -0
  11. package/dist/components/data-table/DataTableColumnHeader.d.ts.map +1 -0
  12. package/dist/components/data-table/DataTableColumnMenu.d.ts +9 -0
  13. package/dist/components/data-table/DataTableColumnMenu.d.ts.map +1 -0
  14. package/dist/components/data-table/DataTableContent.d.ts +7 -0
  15. package/dist/components/data-table/DataTableContent.d.ts.map +1 -0
  16. package/dist/components/data-table/DataTableContext.d.ts +37 -0
  17. package/dist/components/data-table/DataTableContext.d.ts.map +1 -0
  18. package/dist/components/data-table/DataTableHeader.d.ts +22 -0
  19. package/dist/components/data-table/DataTableHeader.d.ts.map +1 -0
  20. package/dist/components/data-table/DataTablePagination.d.ts +8 -0
  21. package/dist/components/data-table/DataTablePagination.d.ts.map +1 -0
  22. package/dist/components/data-table/DataTableRowView.d.ts +40 -0
  23. package/dist/components/data-table/DataTableRowView.d.ts.map +1 -0
  24. package/dist/components/data-table/dataTableColumnDrag.d.ts +13 -0
  25. package/dist/components/data-table/dataTableColumnDrag.d.ts.map +1 -0
  26. package/dist/components/data-table/dataTableEditing.d.ts +11 -0
  27. package/dist/components/data-table/dataTableEditing.d.ts.map +1 -0
  28. package/dist/components/data-table/dataTableFeatures.d.ts +25 -0
  29. package/dist/components/data-table/dataTableFeatures.d.ts.map +1 -0
  30. package/dist/components/data-table/dataTableModel.d.ts +23 -0
  31. package/dist/components/data-table/dataTableModel.d.ts.map +1 -0
  32. package/dist/components/data-table/dataTablePrint.d.ts +3 -0
  33. package/dist/components/data-table/dataTablePrint.d.ts.map +1 -0
  34. package/dist/components/data-table/dataTableStyles.d.ts +2 -0
  35. package/dist/components/data-table/dataTableStyles.d.ts.map +1 -0
  36. package/dist/components/data-table/useDataTableApi.d.ts +34 -0
  37. package/dist/components/data-table/useDataTableApi.d.ts.map +1 -0
  38. package/dist/components/data-table/useDataTableColumnDrag.d.ts +16 -0
  39. package/dist/components/data-table/useDataTableColumnDrag.d.ts.map +1 -0
  40. package/dist/components/data-table/useDataTableInstance.d.ts +96 -0
  41. package/dist/components/data-table/useDataTableInstance.d.ts.map +1 -0
  42. package/dist/components/data-table/useDataTableMotion.d.ts +4 -0
  43. package/dist/components/data-table/useDataTableMotion.d.ts.map +1 -0
  44. package/dist/components/resource-scheduler/ResourceScheduler.d.ts +96 -0
  45. package/dist/components/resource-scheduler/ResourceScheduler.d.ts.map +1 -0
  46. package/dist/datatable.es.js +40 -0
  47. package/dist/datatable.es.js.map +1 -0
  48. package/dist/datatableactions.es.js +193 -0
  49. package/dist/datatableactions.es.js.map +1 -0
  50. package/dist/datatablealignment.es.js +11 -0
  51. package/dist/datatablealignment.es.js.map +1 -0
  52. package/dist/datatablecolumndrag.es.js +34 -0
  53. package/dist/datatablecolumndrag.es.js.map +1 -0
  54. package/dist/datatablecolumnheader.es.js +81 -0
  55. package/dist/datatablecolumnheader.es.js.map +1 -0
  56. package/dist/datatablecolumnmenu.es.js +191 -0
  57. package/dist/datatablecolumnmenu.es.js.map +1 -0
  58. package/dist/datatablecontent.es.js +376 -0
  59. package/dist/datatablecontent.es.js.map +1 -0
  60. package/dist/datatablecontext.es.js +14 -0
  61. package/dist/datatablecontext.es.js.map +1 -0
  62. package/dist/datatablefeatures.es.js +24 -0
  63. package/dist/datatablefeatures.es.js.map +1 -0
  64. package/dist/datatableheader.es.js +126 -0
  65. package/dist/datatableheader.es.js.map +1 -0
  66. package/dist/datatablemodel.es.js +126 -0
  67. package/dist/datatablemodel.es.js.map +1 -0
  68. package/dist/datatablepagination.es.js +43 -0
  69. package/dist/datatablepagination.es.js.map +1 -0
  70. package/dist/datatableprint.es.js +65 -0
  71. package/dist/datatableprint.es.js.map +1 -0
  72. package/dist/datatablerowview.es.js +201 -0
  73. package/dist/datatablerowview.es.js.map +1 -0
  74. package/dist/datatablestyles.es.js +5 -0
  75. package/dist/datatablestyles.es.js.map +1 -0
  76. package/dist/ganttchart.es.js +2 -2
  77. package/dist/ganttchart.es.js.map +1 -1
  78. package/dist/index.d.ts +6 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.es.js +173 -154
  81. package/dist/index.es.js.map +1 -1
  82. package/dist/resourcescheduler.es.js +450 -0
  83. package/dist/resourcescheduler.es.js.map +1 -0
  84. package/dist/styles.css +1 -1
  85. package/dist/tabs.es.js +15 -15
  86. package/dist/tabs.es.js.map +1 -1
  87. package/dist/usedatatableapi.es.js +117 -0
  88. package/dist/usedatatableapi.es.js.map +1 -0
  89. package/dist/usedatatablecolumndrag.es.js +40 -0
  90. package/dist/usedatatablecolumndrag.es.js.map +1 -0
  91. package/dist/usedatatableinstance.es.js +178 -0
  92. package/dist/usedatatableinstance.es.js.map +1 -0
  93. package/dist/usedatatablemotion.es.js +99 -0
  94. package/dist/usedatatablemotion.es.js.map +1 -0
  95. package/package.json +33 -12
package/dist/tabs.es.js CHANGED
@@ -1,21 +1,21 @@
1
- import { jsx as a } from "react/jsx-runtime";
1
+ import { jsx as m } from "react/jsx-runtime";
2
2
  import * as o from "react";
3
- import { Root as f, Content as x, List as s, Trigger as i } from "@radix-ui/react-tabs";
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 u = f, d = o.forwardRef(({ className: t, ...e }, m) => /* @__PURE__ */ a(
6
- s,
5
+ const y = d, b = o.forwardRef(({ className: t, ...e }, a) => /* @__PURE__ */ m(
6
+ i,
7
7
  {
8
- ref: m,
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
- d.displayName = s.displayName;
17
- const b = o.forwardRef(({ className: t, hasAlert: e, ...m }, n) => /* @__PURE__ */ a(
18
- i,
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
- ...m
26
+ ...a
27
27
  }
28
28
  ));
29
- b.displayName = i.displayName;
29
+ f.displayName = s.displayName;
30
30
  const l = o.forwardRef(
31
- ({ className: t, ...e }, m) => /* @__PURE__ */ a(x, { ref: m, className: r("mtx-mt-2", 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
- u as Tabs,
35
+ y as Tabs,
36
36
  l as TabsContent,
37
- d as TabsList,
38
- b as TabsTrigger
37
+ b as TabsList,
38
+ f as TabsTrigger
39
39
  };
40
40
  //# sourceMappingURL=tabs.es.js.map
@@ -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":";AAGO,SAASA,EAAmBC,GAA8CC,GAAkBC,GAAqBC,GAAqB;AAG3I,QAAMC,IAAiBC,EAAM,OAAA,GASvBC,IAAYD,EAAM,OAAA;AACxB,EAAAA,EAAM,gBAAgB,MAAM;AAC1B,UAAME,IAAWP,EAAY;AAC7B,QAAI,CAACO,EAAU;AACf,UAAMC,IAAWJ,EAAe;AAChC,QACEI,KACAA,EAAS,SAASP,KAClBO,EAAS,YAAYN,KACrBM,EAAS,cAAcD,EAAS,aAChCC,EAAS,eAAeD,EAAS,cACjCC,EAAS,WAAW,KAAK,CAAAC,MAAaA,EAAU,cAAc,SAAS;AAEvE;AAEF,UAAMC,wBAAc,IAAA;AACpB,QAAIF;AACF,iBAAWG,KAAWH,EAAS,UAAU,KAAA;AACvC,QAAIG,EAAQ,eAAaD,EAAQ,IAAIC,GAAS,IAAI,UAAU,iBAAiBA,CAAO,EAAE,SAAS,CAAC;AAEpG,IAAAH,GAAU,WAAW,QAAQ,CAAAC,MAAaA,EAAU,QAAQ;AAC5D,UAAMG,IAAW,MAAM;AAAA,MACrBL,EAAS,iBAA8B,qGAAqG;AAAA,IAAA,EAC5I,OAAO,CAAAI,MAAW,CAACA,EAAQ,QAAQ,oBAAoB,CAAC,GACpDE,IAAY,IAAI,IAAID,EAAS,IAAI,CAAAD,MAAW,CAACA,GAASA,EAAQ,sBAAA,CAAuB,CAAC,CAAC,GACvFG,IAA0B,CAAA,GAC1BC,IAAgB,OAAO,aAAa,kCAAkC,EAAE;AAC9E,QAAIP,KAAY,CAACL,KAAc,CAACY,GAAe;AAC7C,YAAMC,IAAcR,EAAS,SAASP,GAChCgB,IAAiBT,EAAS,YAAYN;AAC5C,UAAIc,GAAa;AACf,QAAAV,EAAU,SAAS,OAAA;AACnB,cAAMY,IAASX,EAAS,sBAAA,GAClBY,IAAQ,SAAS,cAAc,KAAK;AAC1C,QAAAA,EAAM,aAAa,eAAe,MAAM,GACxCA,EAAM,QAAQ,IACd,OAAO,OAAOA,EAAM,OAAO;AAAA,UACzB,UAAU;AAAA,UACV,KAAK,GAAGZ,EAAS,SAAS;AAAA,UAC1B,MAAM,GAAGA,EAAS,UAAU;AAAA,UAC5B,OAAO,GAAGA,EAAS,WAAW;AAAA,UAC9B,QAAQ,GAAGA,EAAS,YAAY;AAAA,UAChC,UAAU;AAAA,UACV,eAAe;AAAA,UACf,QAAQ;AAAA,QAAA,CACT;AACD,mBAAW,CAACI,GAASS,CAAI,KAAKZ,EAAS,WAAW;AAChD,cAAIK,EAAU,IAAIF,CAAO,EAAG;AAC5B,gBAAMU,IAAOb,EAAS,UAAU,IAAIG,CAAO;AAC3C,UAAAS,EAAK,aAAa,oBAAoB,EAAE,GAExCA,EAAK,gBAAgB,IAAI,GACzBA,EAAK,iBAAiB,MAAM,EAAE,QAAQ,OAASE,EAAM,gBAAgB,IAAI,CAAC,GAC1E,OAAO,OAAOF,EAAK,OAAO;AAAA,YACxB,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,UAAU;AAAA,YACV,WAAW;AAAA,YACX,KAAK,GAAGC,EAAK,MAAMH,EAAO,MAAMX,EAAS,SAAS;AAAA,YAClD,MAAM,GAAGc,EAAK,OAAOH,EAAO,OAAOX,EAAS,UAAU;AAAA,YACtD,OAAO,GAAGc,EAAK,KAAK;AAAA,UAAA,CACrB,GACDF,EAAM,OAAOC,CAAI;AAAA,QACnB;AACA,YAAID,EAAM,mBAAmB;AAC3B,UAAAZ,EAAS,OAAOY,CAAK,GACrBb,EAAU,UAAUa;AACpB,gBAAMI,IAAQ,MAAM;AAAA,YAAKJ,EAAM;AAAA,YAAU,CAAAG,MACvCA,EAAM,QAAQ,CAAC,EAAE,SAAS,EAAA,GAAK,EAAE,SAAS,EAAA,CAAG,GAAG;AAAA,cAC9C,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA,CACP;AAAA,UAAA;AAEH,UAAK,QAAQ,IAAIC,EAAM,IAAI,CAAAC,MAAQA,EAAK,QAAQ,CAAC,EAAE,KAAK,MAAML,EAAM,QAAQ;AAAA,QAC9E;AAAA,MACF;AACA,iBAAWR,KAAWC,GAAU;AAC9B,cAAMa,IAAQd,EAAQ,aAAa,MAAM,MAAM;AAC/C,YAAI,EAAEc,IAAQT,IAAcC,MAAmBN,EAAQ,aAAa,eAAe,EAAG;AACtF,cAAMe,IAASlB,EAAS,UAAU,IAAIG,CAAO,GACvCgB,IAAQd,EAAU,IAAIF,CAAO;AACnC,YAAI,OAAOA,EAAQ,WAAY,WAAY;AAC3C,cAAMiB,IAASlB,EAAQ,IAAIC,CAAO,GAC5BkB,IAAarB,EAAS,cAAcD,EAAS,aAAaC,EAAS,eAAeD,EAAS,YAC3FuB,IAAI,CAACL,KAASC,KAAUG,IAAaH,EAAO,OAAOC,EAAM,QAAQC,GAAQ,OAAO,KAAK,GACrFG,IAAIN,KAASC,KAAUG,IAAaH,EAAO,MAAMC,EAAM,OAAOC,GAAQ,OAAO,KAAK,GAClFI,IAAQ,KAAK,IAAIF,CAAC,KAAK,KAAK,KAAK,IAAIC,CAAC,KAAK;AACjD,YAAI,CAACC,KAAS,CAACP,EAAO;AAGtB,cAAMQ,IAASD,IACX,CAAC,EAAE,WAAW,aAAaF,CAAC,OAAOC,CAAC,MAAA,GAAS,EAAE,WAAW,mBAAmB,IAC7E,CAAC,EAAE,SAASL,IAAS,MAAM,EAAA,GAAK,EAAE,SAAS,EAAA,CAAG;AAClD,QAAAZ,EAAW;AAAA,UACTH,EAAQ,QAAQsB,GAAQ;AAAA,YACtB,UAAU;AAAA,YACV,QAAQ;AAAA,UAAA,CACT;AAAA,QAAA;AAAA,MAEL;AAAA,IACF;AACA,IAAA7B,EAAe,UAAU;AAAA,MACvB,MAAMH;AAAA,MACN,SAASC;AAAA,MACT,WAAWK,EAAS;AAAA,MACpB,YAAYA,EAAS;AAAA,MACrB,WAAAM;AAAA,MACA,YAAAC;AAAA,MACA,WAAW,IAAI;AAAA,QACbF,EACG,OAAO,CAAAD,MAAW;AACjB,gBAAMU,IAAOR,EAAU,IAAIF,CAAO,GAC5BO,IAASX,EAAS,sBAAA;AACxB,iBAAOI,EAAQ,aAAa,MAAM,MAAM,SAASU,EAAK,SAASH,EAAO,OAAOG,EAAK,MAAMH,EAAO;AAAA,QACjG,CAAC,EACA,IAAI,CAAAP,MAAW,CAACA,GAASA,EAAQ,UAAU,EAAI,CAAgB,CAAC;AAAA,MAAA;AAAA,IACrE;AAAA,EAEJ,CAAC,GACDN,EAAM;AAAA,IACJ,MAAM,MAAM;AACV,MAAAD,EAAe,SAAS,WAAW,QAAQ,CAAAK,MAAaA,EAAU,QAAQ,GAC1EH,EAAU,SAAS,OAAA;AAAA,IACrB;AAAA,IACA,CAAA;AAAA,EAAC;AAEL;"}