dishui 0.0.84 → 0.0.91

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 (102) hide show
  1. package/dist/components/Input/index.js +52 -62
  2. package/dist/components/Input/index.js.map +1 -1
  3. package/dist/components/LayoutSuite/index.d.ts +10 -0
  4. package/dist/components/LayoutSuite/index.js +27 -18
  5. package/dist/components/LayoutSuite/index.js.map +1 -1
  6. package/dist/components/Markdown/markdownComponents.js +1 -0
  7. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  8. package/dist/components/Markdown/useMarkdownSource.js +46 -31
  9. package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
  10. package/dist/components/Markdown/useMarkmapRenderer.js +44 -31
  11. package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
  12. package/dist/components/Markdown/useMermaidRenderer.js +49 -31
  13. package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
  14. package/dist/components/ProtectedRoute/index.d.ts +2 -1
  15. package/dist/components/ProtectedRoute/index.js +16 -6
  16. package/dist/components/ProtectedRoute/index.js.map +1 -1
  17. package/dist/components/Select/index.d.ts +6 -0
  18. package/dist/components/Select/index.js +166 -136
  19. package/dist/components/Select/index.js.map +1 -1
  20. package/dist/components/Table/index.d.ts +23 -2
  21. package/dist/components/Table/index.js +153 -101
  22. package/dist/components/Table/index.js.map +1 -1
  23. package/dist/components/Tabs/index.d.ts +12 -1
  24. package/dist/components/Tabs/index.js +42 -17
  25. package/dist/components/Tabs/index.js.map +1 -1
  26. package/dist/components/pro/ArticleContextMenu/index.js +7 -7
  27. package/dist/components/pro/CodeEditor/editors/CodeEditor.js +200 -189
  28. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  29. package/dist/components/pro/CodeEditor/types.d.ts +3 -0
  30. package/dist/components/pro/DataTable/DataTable.d.ts +1 -1
  31. package/dist/components/pro/DataTable/DataTable.js +124 -247
  32. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  33. package/dist/components/pro/DataTable/components/TableBody.d.ts +3 -1
  34. package/dist/components/pro/DataTable/components/TableBody.js +41 -41
  35. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  36. package/dist/components/pro/DataTable/components/TablePagination.d.ts +3 -9
  37. package/dist/components/pro/DataTable/components/TablePagination.js +29 -25
  38. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  39. package/dist/components/pro/DataTable/components/TableToolbar.d.ts +2 -1
  40. package/dist/components/pro/DataTable/components/TableToolbar.js +25 -19
  41. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  42. package/dist/components/pro/DataTable/index.d.ts +1 -1
  43. package/dist/components/pro/DataTable/rowDetailExtension.js +1 -1
  44. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  45. package/dist/components/pro/DataTable/tanstack-table.d.ts +2 -2
  46. package/dist/components/pro/DataTable/tanstack-table.js +29 -21
  47. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  48. package/dist/components/pro/DataTable/treeDataUtils.d.ts +2 -0
  49. package/dist/components/pro/DataTable/treeDataUtils.js +18 -19
  50. package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
  51. package/dist/components/pro/DataTable/types.d.ts +43 -0
  52. package/dist/components/pro/DataTable/useDataTableModel.d.ts +16 -0
  53. package/dist/components/pro/DataTable/useDataTableModel.js +148 -0
  54. package/dist/components/pro/DataTable/useDataTableModel.js.map +1 -0
  55. package/dist/components/pro/FileExplorer/Breadcrumb.js +12 -12
  56. package/dist/components/pro/Flow/nodes/DataNodeView.js +87 -82
  57. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  58. package/dist/components/pro/Flow/nodes/MediaContent.js +1 -1
  59. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  60. package/dist/components/pro/Flow/nodes/MediaOverlay.js +1 -1
  61. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  62. package/dist/components/pro/Flow/nodes/Model3DView.js +69 -63
  63. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  64. package/dist/components/pro/Flow/nodes/chartGeometryBudget.d.ts +14 -0
  65. package/dist/components/pro/Flow/nodes/chartGeometryBudget.js +76 -0
  66. package/dist/components/pro/Flow/nodes/chartGeometryBudget.js.map +1 -0
  67. package/dist/components/pro/Flow/nodes/demandRender.d.ts +11 -0
  68. package/dist/components/pro/Flow/nodes/demandRender.js +26 -0
  69. package/dist/components/pro/Flow/nodes/demandRender.js.map +1 -0
  70. package/dist/components/pro/RichTextEditor/SlashMenu.js +68 -58
  71. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  72. package/dist/contexts/AppContext.d.ts +1 -0
  73. package/dist/contexts/AppContext.js +144 -145
  74. package/dist/contexts/AppContext.js.map +1 -1
  75. package/dist/contexts/authentication.d.ts +7 -0
  76. package/dist/contexts/authentication.js +22 -0
  77. package/dist/contexts/authentication.js.map +1 -0
  78. package/dist/data-table.js.map +1 -1
  79. package/dist/dishui.css +1 -1
  80. package/dist/hooks/useControllableState.d.ts +6 -14
  81. package/dist/hooks/useControllableState.js +21 -15
  82. package/dist/hooks/useControllableState.js.map +1 -1
  83. package/dist/hooks/useTableColumns.d.ts +3 -3
  84. package/dist/hooks/useTableColumns.js +2 -2
  85. package/dist/hooks/useTableColumns.js.map +1 -1
  86. package/dist/hooks/useTableData.d.ts +11 -4
  87. package/dist/hooks/useTableData.js +44 -26
  88. package/dist/hooks/useTableData.js.map +1 -1
  89. package/dist/index-nostyled.d.ts +2 -2
  90. package/dist/index.d.ts +4 -4
  91. package/dist/index.js +97 -97
  92. package/dist/lite.d.ts +2 -0
  93. package/dist/lite.js +22 -21
  94. package/dist/utils/i18n.js +1 -1
  95. package/dist/utils/i18n.js.map +1 -1
  96. package/dist/utils/routerBuilder.d.ts +7 -5
  97. package/dist/utils/routerBuilder.js +11 -15
  98. package/dist/utils/routerBuilder.js.map +1 -1
  99. package/dist/utils/safeStorage.d.ts +8 -0
  100. package/dist/utils/safeStorage.js +45 -0
  101. package/dist/utils/safeStorage.js.map +1 -0
  102. package/package.json +22 -5
@@ -3,63 +3,63 @@ import { flexRender as t } from "../tanstack-table.js";
3
3
  import n from "react";
4
4
  import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
5
5
  //#region src/components/pro/DataTable/components/TableBody.tsx
6
- function o({ table: o, expandedRowsState: s, onRowClick: c, onRowDoubleClick: l, onRowMouseEnter: u, onRowMouseLeave: d, onCellClick: f, onCellDoubleClick: p, onCellMouseEnter: m, onCellMouseLeave: h, enableExpanding: g, indentSize: _, handleRowExpand: v, extensions: y = [], extensionApi: b, getRowId: x, onCellContextMenu: S }) {
7
- let C = y.length > 0 && !!b;
6
+ function o({ table: o, card: s = !1, fieldLabels: c, expandedRowsState: l, onRowClick: u, onRowDoubleClick: d, onRowMouseEnter: f, onRowMouseLeave: p, onCellClick: m, onCellDoubleClick: h, onCellMouseEnter: g, onCellMouseLeave: _, enableExpanding: v, indentSize: y, handleRowExpand: b, extensions: x = [], extensionApi: S, getRowId: C, onCellContextMenu: w }) {
7
+ let T = x.length > 0 && !!S;
8
8
  return /* @__PURE__ */ i(e.Body, { children: o.getRowModel().rows.length === 0 ? /* @__PURE__ */ i(e.Row, { children: /* @__PURE__ */ i(e.Cell, {
9
9
  colSpan: o.getAllColumns().length,
10
10
  className: "text-center py-4",
11
11
  children: "没有数据"
12
- }) }) : o.getRowModel().rows.map((o, w) => {
13
- let T = o.original, E = T.__depth || 0, D = T.__hasChildren || !1, O = T.__id, k = D && s[O] || !1, A = E > 0, j = T.__parentId, M = !j || s[j] || !1, N = `
12
+ }) }) : o.getRowModel().rows.map((o, E) => {
13
+ let D = o.depth, O = o.subRows.length > 0, k = o.id, A = O && l[k] || !1, j = `
14
14
  ${o.getIsSelected() ? "bg-primary/10" : ""}
15
- ${D && k ? "tree-row-expanded" : ""}
16
- `;
17
- if (A && !M) return null;
18
- let P = x ? x(o.original, w) : String(O ?? w), F = {
15
+ ${O && A ? "tree-row-expanded" : ""}
16
+ `, M = C ? C(o.original, E) : o.id, N = {
19
17
  row: o.original,
20
- rowId: P,
21
- rowIndex: w,
18
+ rowId: M,
19
+ rowIndex: E,
22
20
  selected: o.getIsSelected()
23
- }, I = C ? y.reduce((e, t) => Object.assign(e, t.rowProps?.(F, b) ?? {}), {}) : {}, L = /* @__PURE__ */ i(e.Row, {
24
- className: N,
25
- onClick: c ? (e) => c(o.original, e) : void 0,
26
- onDoubleClick: l ? (e) => l(o.original, e) : void 0,
27
- onMouseEnter: u ? (e) => u(o.original, e) : void 0,
28
- onMouseLeave: d ? (e) => d(o.original, e) : void 0,
29
- ...I,
30
- children: o.getVisibleCells().map((n, s) => {
31
- let c = s === 0, l;
32
- if (C) {
21
+ }, P = T ? x.reduce((e, t) => Object.assign(e, t.rowProps?.(N, S) ?? {}), {}) : {}, F = /* @__PURE__ */ i(e.Row, {
22
+ selected: o.getIsSelected(),
23
+ className: j,
24
+ onClick: u ? (e) => u(o.original, e) : void 0,
25
+ onDoubleClick: d ? (e) => d(o.original, e) : void 0,
26
+ onMouseEnter: f ? (e) => f(o.original, e) : void 0,
27
+ onMouseLeave: p ? (e) => p(o.original, e) : void 0,
28
+ ...P,
29
+ children: o.getVisibleCells().map((n, l) => {
30
+ let u = l === 0, d;
31
+ if (T) {
33
32
  let e = {
34
33
  value: n.getValue(),
35
34
  row: o.original,
36
- rowId: P,
37
- rowIndex: w,
35
+ rowId: M,
36
+ rowIndex: E,
38
37
  columnId: n.column.id
39
38
  };
40
- for (let t of y) {
41
- let n = t.cell?.(e, b);
39
+ for (let t of x) {
40
+ let n = t.cell?.(e, S);
42
41
  if (n !== void 0) {
43
- l = n;
42
+ d = n;
44
43
  break;
45
44
  }
46
45
  }
47
46
  }
48
- return l === void 0 && (l = t(n.column.columnDef.cell, n.getContext())), /* @__PURE__ */ i(e.Cell, {
49
- onClick: f ? (e) => {
50
- e.stopPropagation(), f(o.original, n.column, e);
47
+ return d === void 0 && (d = t(n.column.columnDef.cell, n.getContext())), /* @__PURE__ */ i(e.Cell, {
48
+ label: s ? c && Object.prototype.hasOwnProperty.call(c, n.column.id) ? c[n.column.id] : typeof n.column.columnDef.header == "string" ? n.column.columnDef.header : n.column.id : void 0,
49
+ onClick: m ? (e) => {
50
+ e.stopPropagation(), m(o.original, n.column, e);
51
51
  } : void 0,
52
- onDoubleClick: p ? (e) => {
53
- e.stopPropagation(), p(o.original, n.column, e);
52
+ onDoubleClick: h ? (e) => {
53
+ e.stopPropagation(), h(o.original, n.column, e);
54
54
  } : void 0,
55
- onMouseEnter: m ? (e) => m(o.original, n.column, e) : void 0,
56
- onMouseLeave: h ? (e) => h(o.original, n.column, e) : void 0,
55
+ onMouseEnter: g ? (e) => g(o.original, n.column, e) : void 0,
56
+ onMouseLeave: _ ? (e) => _(o.original, n.column, e) : void 0,
57
57
  children: /* @__PURE__ */ a("div", {
58
58
  className: "flex items-center",
59
- onContextMenu: S ? (e) => S(e, o.original, n.column, w) : void 0,
60
- children: [c && g && /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i("div", { style: { width: `${E * _}px` } }), D ? /* @__PURE__ */ i("button", {
59
+ onContextMenu: w ? (e) => w(e, o.original, n.column, E) : void 0,
60
+ children: [u && v && /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i("div", { style: { width: `${D * y}px` } }), O ? /* @__PURE__ */ i("button", {
61
61
  onClick: (e) => {
62
- e.stopPropagation(), v(O, o.original);
62
+ e.stopPropagation(), b(k, o.original);
63
63
  },
64
64
  className: "mr-2 focus:outline-none",
65
65
  children: /* @__PURE__ */ i("svg", {
@@ -70,7 +70,7 @@ function o({ table: o, expandedRowsState: s, onRowClick: c, onRowDoubleClick: l,
70
70
  stroke: "currentColor",
71
71
  style: {
72
72
  transition: "transform 0.3s ease",
73
- transform: k ? "rotate(90deg)" : "rotate(0deg)"
73
+ transform: A ? "rotate(90deg)" : "rotate(0deg)"
74
74
  },
75
75
  children: /* @__PURE__ */ i("path", {
76
76
  strokeLinecap: "round",
@@ -79,16 +79,16 @@ function o({ table: o, expandedRowsState: s, onRowClick: c, onRowDoubleClick: l,
79
79
  d: "M9 5l7 7-7 7"
80
80
  })
81
81
  })
82
- }) : /* @__PURE__ */ i("div", { className: "w-6" })] }), l]
82
+ }) : /* @__PURE__ */ i("div", { className: "w-6" })] }), d]
83
83
  })
84
84
  }, n.id);
85
85
  })
86
86
  }, o.id);
87
- if (C) {
88
- let e = y.reduce((e, t) => t.wrapRow?.(e, F, b) ?? e, L);
89
- if (e !== L) return /* @__PURE__ */ i(n.Fragment, { children: e }, o.id);
87
+ if (T) {
88
+ let e = x.reduce((e, t) => t.wrapRow?.(e, N, S) ?? e, F);
89
+ if (e !== F) return /* @__PURE__ */ i(n.Fragment, { children: e }, o.id);
90
90
  }
91
- return L;
91
+ return F;
92
92
  }) });
93
93
  }
94
94
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"TableBody.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TableBody.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as TanStackTable, flexRender } from '../tanstack-table';\nimport Table from '../../../Table';\nimport { RowEventHandler, CellEventHandler } from '../types';\nimport type {\n DataTableApi,\n DataTableCellContext,\n DataTableExtension,\n DataTableRowContext,\n} from '../extension';\n\ninterface TableBodyProps<T extends object> {\n table: TanStackTable<T>;\n expandedRowsState: Record<string, boolean>;\n onRowClick?: RowEventHandler;\n onRowDoubleClick?: RowEventHandler;\n onRowMouseEnter?: RowEventHandler;\n onRowMouseLeave?: RowEventHandler;\n onCellClick?: CellEventHandler;\n onCellDoubleClick?: CellEventHandler;\n onCellMouseEnter?: CellEventHandler;\n onCellMouseLeave?: CellEventHandler;\n enableExpanding: boolean;\n indentSize: number;\n handleRowExpand: (rowId: string, row: T) => void;\n // 扩展系统\n extensions?: DataTableExtension<T>[];\n extensionApi?: DataTableApi<T>;\n getRowId?: (row: T, index: number) => string;\n onCellContextMenu?: (\n e: React.MouseEvent,\n row: T,\n column: any,\n rowIndex: number,\n ) => void;\n}\n\nexport function TableBody<T extends object>({\n table,\n expandedRowsState,\n onRowClick,\n onRowDoubleClick,\n onRowMouseEnter,\n onRowMouseLeave,\n onCellClick,\n onCellDoubleClick,\n onCellMouseEnter,\n onCellMouseLeave,\n enableExpanding,\n indentSize,\n handleRowExpand,\n extensions = [],\n extensionApi,\n getRowId,\n onCellContextMenu,\n}: TableBodyProps<T>) {\n const hasExtensions = extensions.length > 0 && !!extensionApi;\n\n return (\n <Table.Body>\n {table.getRowModel().rows.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={table.getAllColumns().length} className=\"text-center py-4\">\n 没有数据\n </Table.Cell>\n </Table.Row>\n ) : (\n table.getRowModel().rows.map((row, rowIndex) => {\n const rowData = row.original as any;\n const depth = rowData.__depth || 0;\n const hasChildren = rowData.__hasChildren || false;\n const rowId = rowData.__id;\n const isExpanded = hasChildren && expandedRowsState[rowId] || false;\n const isChildRow = depth > 0;\n const parentId = rowData.__parentId;\n const parentExpanded = parentId ? expandedRowsState[parentId] || false : true;\n\n // 根据层级和展开状态应用不同的CSS类\n const rowClassName = `\n ${row.getIsSelected() ? 'bg-primary/10' : ''}\n ${hasChildren ? (isExpanded ? 'tree-row-expanded' : '') : ''}\n `;\n\n // 如果是子行且父行未展开,则不显示\n if (isChildRow && !parentExpanded) {\n return null;\n }\n\n // 扩展的行级上下文与注入属性\n const resolvedRowId = getRowId\n ? getRowId(row.original, rowIndex)\n : String(rowId ?? rowIndex);\n const rowCtx: DataTableRowContext<T> = {\n row: row.original,\n rowId: resolvedRowId,\n rowIndex,\n selected: row.getIsSelected(),\n };\n const extraRowProps = hasExtensions\n ? extensions.reduce<React.HTMLAttributes<HTMLTableRowElement>>(\n (acc, ext) =>\n Object.assign(acc, ext.rowProps?.(rowCtx, extensionApi!) ?? {}),\n {},\n )\n : {};\n\n const rowElement = (\n <Table.Row\n key={row.id}\n className={rowClassName}\n onClick={onRowClick ? e => onRowClick(row.original, e) : undefined}\n onDoubleClick={onRowDoubleClick ? e => onRowDoubleClick(row.original, e) : undefined}\n onMouseEnter={onRowMouseEnter ? e => onRowMouseEnter(row.original, e) : undefined}\n onMouseLeave={onRowMouseLeave ? e => onRowMouseLeave(row.original, e) : undefined}\n {...(extraRowProps as any)}\n >\n {row.getVisibleCells().map((cell, cellIndex) => {\n // 为第一列添加缩进和展开/折叠控件\n const isFirstColumn = cellIndex === 0;\n\n // 扩展可覆写单元格渲染。\n let cellContent: React.ReactNode | undefined;\n if (hasExtensions) {\n const cellCtx: DataTableCellContext<T> = {\n value: cell.getValue(),\n row: row.original,\n rowId: resolvedRowId,\n rowIndex,\n columnId: cell.column.id,\n };\n for (const ext of extensions) {\n const out = ext.cell?.(cellCtx, extensionApi!);\n if (out !== undefined) {\n cellContent = out;\n break;\n }\n }\n }\n if (cellContent === undefined) {\n cellContent = flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n );\n }\n\n return (\n <Table.Cell\n key={cell.id}\n onClick={onCellClick ? e => {\n e.stopPropagation(); // 防止触发行点击事件\n onCellClick(row.original, cell.column, e);\n } : undefined}\n onDoubleClick={onCellDoubleClick ? e => {\n e.stopPropagation(); // 防止触发行双击事件\n onCellDoubleClick(row.original, cell.column, e);\n } : undefined}\n onMouseEnter={onCellMouseEnter ? e => onCellMouseEnter(row.original, cell.column, e) : undefined}\n onMouseLeave={onCellMouseLeave ? e => onCellMouseLeave(row.original, cell.column, e) : undefined}\n >\n <div\n className=\"flex items-center\"\n onContextMenu={\n onCellContextMenu\n ? e =>\n onCellContextMenu(\n e,\n row.original,\n cell.column,\n rowIndex,\n )\n : undefined\n }\n >\n {isFirstColumn && enableExpanding && (\n <>\n <div style={{ width: `${depth * indentSize}px` }} />\n {hasChildren ? (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleRowExpand(rowId, row.original);\n }}\n className=\"mr-2 focus:outline-none\"\n >\n {/* 完全重写箭头图标部分,使用内联样式控制方向 */}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n style={{\n transition: 'transform 0.3s ease',\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)'\n }}\n >\n {/* 使用右箭头,通过旋转变为下箭头 */}\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n ) : (\n <div className=\"w-6\"></div>\n )}\n </>\n )}\n {cellContent}\n </div>\n </Table.Cell>\n );\n })}\n </Table.Row>\n );\n\n // 让扩展包裹整行(如在行下方追加 detail 面板)。\n if (hasExtensions) {\n const wrapped = extensions.reduce<React.ReactNode>(\n (node, ext) => ext.wrapRow?.(node, rowCtx, extensionApi!) ?? node,\n rowElement,\n );\n if (wrapped !== rowElement) {\n return <React.Fragment key={row.id}>{wrapped}</React.Fragment>;\n }\n }\n\n return rowElement;\n })\n )}\n </Table.Body>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableBody.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TableBody.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as TanStackTable, flexRender } from '../tanstack-table';\nimport Table from '../../../Table';\nimport { RowEventHandler, CellEventHandler } from '../types';\nimport type {\n DataTableApi,\n DataTableCellContext,\n DataTableExtension,\n DataTableRowContext,\n} from '../extension';\n\ninterface TableBodyProps<T extends object> {\n table: TanStackTable<T>;\n card?: boolean;\n fieldLabels?: Record<string, React.ReactNode>;\n expandedRowsState: Record<string, boolean>;\n onRowClick?: RowEventHandler;\n onRowDoubleClick?: RowEventHandler;\n onRowMouseEnter?: RowEventHandler;\n onRowMouseLeave?: RowEventHandler;\n onCellClick?: CellEventHandler;\n onCellDoubleClick?: CellEventHandler;\n onCellMouseEnter?: CellEventHandler;\n onCellMouseLeave?: CellEventHandler;\n enableExpanding: boolean;\n indentSize: number;\n handleRowExpand: (rowId: string, row: T) => void;\n // 扩展系统\n extensions?: DataTableExtension<T>[];\n extensionApi?: DataTableApi<T>;\n getRowId?: (row: T, index: number) => string;\n onCellContextMenu?: (\n e: React.MouseEvent,\n row: T,\n column: any,\n rowIndex: number,\n ) => void;\n}\n\nexport function TableBody<T extends object>({\n table,\n card = false,\n fieldLabels,\n expandedRowsState,\n onRowClick,\n onRowDoubleClick,\n onRowMouseEnter,\n onRowMouseLeave,\n onCellClick,\n onCellDoubleClick,\n onCellMouseEnter,\n onCellMouseLeave,\n enableExpanding,\n indentSize,\n handleRowExpand,\n extensions = [],\n extensionApi,\n getRowId,\n onCellContextMenu,\n}: TableBodyProps<T>) {\n const hasExtensions = extensions.length > 0 && !!extensionApi;\n\n return (\n <Table.Body>\n {table.getRowModel().rows.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={table.getAllColumns().length} className=\"text-center py-4\">\n 没有数据\n </Table.Cell>\n </Table.Row>\n ) : (\n table.getRowModel().rows.map((row, rowIndex) => {\n const depth = row.depth;\n const hasChildren = row.subRows.length > 0;\n const rowId = row.id;\n const isExpanded = hasChildren && expandedRowsState[rowId] || false;\n\n // 根据层级和展开状态应用不同的CSS类\n const rowClassName = `\n ${row.getIsSelected() ? 'bg-primary/10' : ''}\n ${hasChildren ? (isExpanded ? 'tree-row-expanded' : '') : ''}\n `;\n\n\n // 扩展的行级上下文与注入属性\n const resolvedRowId = getRowId\n ? getRowId(row.original, rowIndex)\n : row.id;\n const rowCtx: DataTableRowContext<T> = {\n row: row.original,\n rowId: resolvedRowId,\n rowIndex,\n selected: row.getIsSelected(),\n };\n const extraRowProps = hasExtensions\n ? extensions.reduce<React.HTMLAttributes<HTMLTableRowElement>>(\n (acc, ext) =>\n Object.assign(acc, ext.rowProps?.(rowCtx, extensionApi!) ?? {}),\n {},\n )\n : {};\n\n const rowElement = (\n <Table.Row\n key={row.id}\n selected={row.getIsSelected()}\n className={rowClassName}\n onClick={onRowClick ? e => onRowClick(row.original, e) : undefined}\n onDoubleClick={onRowDoubleClick ? e => onRowDoubleClick(row.original, e) : undefined}\n onMouseEnter={onRowMouseEnter ? e => onRowMouseEnter(row.original, e) : undefined}\n onMouseLeave={onRowMouseLeave ? e => onRowMouseLeave(row.original, e) : undefined}\n {...(extraRowProps as any)}\n >\n {row.getVisibleCells().map((cell, cellIndex) => {\n // 为第一列添加缩进和展开/折叠控件\n const isFirstColumn = cellIndex === 0;\n\n // 扩展可覆写单元格渲染。\n let cellContent: React.ReactNode | undefined;\n if (hasExtensions) {\n const cellCtx: DataTableCellContext<T> = {\n value: cell.getValue(),\n row: row.original,\n rowId: resolvedRowId,\n rowIndex,\n columnId: cell.column.id,\n };\n for (const ext of extensions) {\n const out = ext.cell?.(cellCtx, extensionApi!);\n if (out !== undefined) {\n cellContent = out;\n break;\n }\n }\n }\n if (cellContent === undefined) {\n cellContent = flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n );\n }\n\n return (\n <Table.Cell\n key={cell.id}\n label={card ? (\n fieldLabels && Object.prototype.hasOwnProperty.call(fieldLabels, cell.column.id)\n ? fieldLabels[cell.column.id]\n : typeof cell.column.columnDef.header === 'string'\n ? cell.column.columnDef.header\n : cell.column.id\n ) : undefined}\n onClick={onCellClick ? e => {\n e.stopPropagation(); // 防止触发行点击事件\n onCellClick(row.original, cell.column, e);\n } : undefined}\n onDoubleClick={onCellDoubleClick ? e => {\n e.stopPropagation(); // 防止触发行双击事件\n onCellDoubleClick(row.original, cell.column, e);\n } : undefined}\n onMouseEnter={onCellMouseEnter ? e => onCellMouseEnter(row.original, cell.column, e) : undefined}\n onMouseLeave={onCellMouseLeave ? e => onCellMouseLeave(row.original, cell.column, e) : undefined}\n >\n <div\n className=\"flex items-center\"\n onContextMenu={\n onCellContextMenu\n ? e =>\n onCellContextMenu(\n e,\n row.original,\n cell.column,\n rowIndex,\n )\n : undefined\n }\n >\n {isFirstColumn && enableExpanding && (\n <>\n <div style={{ width: `${depth * indentSize}px` }} />\n {hasChildren ? (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleRowExpand(rowId, row.original);\n }}\n className=\"mr-2 focus:outline-none\"\n >\n {/* 完全重写箭头图标部分,使用内联样式控制方向 */}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n style={{\n transition: 'transform 0.3s ease',\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)'\n }}\n >\n {/* 使用右箭头,通过旋转变为下箭头 */}\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n ) : (\n <div className=\"w-6\"></div>\n )}\n </>\n )}\n {cellContent}\n </div>\n </Table.Cell>\n );\n })}\n </Table.Row>\n );\n\n // 让扩展包裹整行(如在行下方追加 detail 面板)。\n if (hasExtensions) {\n const wrapped = extensions.reduce<React.ReactNode>(\n (node, ext) => ext.wrapRow?.(node, rowCtx, extensionApi!) ?? node,\n rowElement,\n );\n if (wrapped !== rowElement) {\n return <React.Fragment key={row.id}>{wrapped}</React.Fragment>;\n }\n }\n\n return rowElement;\n })\n )}\n </Table.Body>\n );\n}\n"],"mappings":"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"}
@@ -1,15 +1,9 @@
1
1
  import React from 'react';
2
- import { Table as TanStackTable } from '../tanstack-table';
2
+ import { Table as TanStackTable, PaginationState } from '../tanstack-table';
3
3
  interface TablePaginationProps<T extends object> {
4
4
  enablePagination: boolean;
5
5
  table: TanStackTable<T>;
6
- internalPageIndex: number;
7
- internalPageSize: number;
8
- handlePageChange: (newPage: number) => void;
9
- setInternalPageSize: (newSize: number) => void;
10
- setInternalPageIndex: (page: number) => void;
11
- onPageSizeChange?: (pageSize: number) => void;
12
- onPageChange?: (page: number) => void;
6
+ onPaginationChange: (pagination: PaginationState) => void;
13
7
  }
14
- export declare function TablePagination<T extends object>({ enablePagination, table, internalPageIndex, internalPageSize, handlePageChange, setInternalPageSize, setInternalPageIndex, onPageSizeChange, onPageChange, }: TablePaginationProps<T>): React.JSX.Element | null;
8
+ export declare function TablePagination<T extends object>({ enablePagination, table, onPaginationChange, }: TablePaginationProps<T>): React.JSX.Element | null;
15
9
  export {};
@@ -1,9 +1,19 @@
1
1
  import "react";
2
2
  import { jsx as e, jsxs as t } from "react/jsx-runtime";
3
3
  //#region src/components/pro/DataTable/components/TablePagination.tsx
4
- function n({ enablePagination: n, table: r, internalPageIndex: i, internalPageSize: a, handlePageChange: o, setInternalPageSize: s, setInternalPageIndex: c, onPageSizeChange: l, onPageChange: u }) {
4
+ function n({ enablePagination: n, table: r, onPaginationChange: i }) {
5
5
  if (!n) return null;
6
- let { pageIndex: d } = r.state.pagination, f = r.getPageCount();
6
+ let { pageIndex: a, pageSize: o } = r.state.pagination, s = r.getPageCount(), c = (e) => i({
7
+ pageIndex: e,
8
+ pageSize: o
9
+ }), l = [.../* @__PURE__ */ new Set([
10
+ 5,
11
+ 10,
12
+ 15,
13
+ 20,
14
+ 25,
15
+ o
16
+ ])].sort((e, t) => e - t);
7
17
  return /* @__PURE__ */ t("div", {
8
18
  className: "mt-4 flex justify-between items-center",
9
19
  children: [
@@ -11,9 +21,9 @@ function n({ enablePagination: n, table: r, internalPageIndex: i, internalPageSi
11
21
  className: "text-sm",
12
22
  children: [
13
23
  "第 ",
14
- d + 1,
24
+ s === 0 ? 0 : a + 1,
15
25
  " 页,共 ",
16
- f,
26
+ s,
17
27
  " 页"
18
28
  ]
19
29
  }) }),
@@ -22,33 +32,33 @@ function n({ enablePagination: n, table: r, internalPageIndex: i, internalPageSi
22
32
  children: [
23
33
  /* @__PURE__ */ e("button", {
24
34
  className: "join-item btn btn-sm",
25
- onClick: () => o(0),
35
+ onClick: () => c(0),
26
36
  disabled: !r.getCanPreviousPage(),
27
37
  children: "<<"
28
38
  }),
29
39
  /* @__PURE__ */ e("button", {
30
40
  className: "join-item btn btn-sm",
31
- onClick: () => o(d - 1),
41
+ onClick: () => c(a - 1),
32
42
  disabled: !r.getCanPreviousPage(),
33
43
  children: "<"
34
44
  }),
35
- Array.from({ length: Math.min(5, f) }).map((t, n) => {
36
- let r = d - 2 + n;
37
- return r < 0 && (r = n), r >= f && (r = f - 5 + n), f <= 5 && (r = n), r < 0 || r >= f ? null : /* @__PURE__ */ e("button", {
38
- className: `join-item btn btn-sm ${r === d ? "btn-active" : ""}`,
39
- onClick: () => o(r),
45
+ Array.from({ length: Math.min(5, s) }).map((t, n) => {
46
+ let r = a - 2 + n;
47
+ return r < 0 && (r = n), r >= s && (r = s - 5 + n), s <= 5 && (r = n), r < 0 || r >= s ? null : /* @__PURE__ */ e("button", {
48
+ className: `join-item btn btn-sm ${r === a ? "btn-active" : ""}`,
49
+ onClick: () => c(r),
40
50
  children: r + 1
41
51
  }, r);
42
52
  }),
43
53
  /* @__PURE__ */ e("button", {
44
54
  className: "join-item btn btn-sm",
45
- onClick: () => o(d + 1),
55
+ onClick: () => c(a + 1),
46
56
  disabled: !r.getCanNextPage(),
47
57
  children: ">"
48
58
  }),
49
59
  /* @__PURE__ */ e("button", {
50
60
  className: "join-item btn btn-sm",
51
- onClick: () => o(f - 1),
61
+ onClick: () => c(s - 1),
52
62
  disabled: !r.getCanNextPage(),
53
63
  children: ">>"
54
64
  })
@@ -56,18 +66,12 @@ function n({ enablePagination: n, table: r, internalPageIndex: i, internalPageSi
56
66
  }),
57
67
  /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e("select", {
58
68
  className: "select select-sm select-bordered",
59
- value: a,
60
- onChange: (e) => {
61
- let t = Number(e.target.value);
62
- s(t), l && l(t), c(0), u && u(0);
63
- },
64
- children: [
65
- 5,
66
- 10,
67
- 15,
68
- 20,
69
- 25
70
- ].map((e) => /* @__PURE__ */ t("option", {
69
+ value: o,
70
+ onChange: (e) => i({
71
+ pageIndex: 0,
72
+ pageSize: Number(e.target.value)
73
+ }),
74
+ children: l.map((e) => /* @__PURE__ */ t("option", {
71
75
  value: e,
72
76
  children: [e, " 条/页"]
73
77
  }, e))
@@ -1 +1 @@
1
- {"version":3,"file":"TablePagination.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TablePagination.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as TanStackTable } from '../tanstack-table';\n\ninterface TablePaginationProps<T extends object> {\n enablePagination: boolean;\n table: TanStackTable<T>;\n internalPageIndex: number;\n internalPageSize: number;\n handlePageChange: (newPage: number) => void;\n setInternalPageSize: (newSize: number) => void;\n setInternalPageIndex: (page: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n onPageChange?: (page: number) => void;\n}\n\nexport function TablePagination<T extends object>({\n enablePagination,\n table,\n internalPageIndex,\n internalPageSize,\n handlePageChange,\n setInternalPageSize,\n setInternalPageIndex,\n onPageSizeChange,\n onPageChange,\n}: TablePaginationProps<T>) {\n if (!enablePagination) return null;\n\n const { pageIndex } = table.state.pagination;\n const pageCount = table.getPageCount();\n\n return (\n <div className=\"mt-4 flex justify-between items-center\">\n <div>\n <span className=\"text-sm\">\n 第 {pageIndex + 1} 页,共 {pageCount} 页\n </span>\n </div>\n <div className=\"join\">\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(0)}\n disabled={!table.getCanPreviousPage()}\n >\n {'<<'}\n </button>\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(pageIndex - 1)}\n disabled={!table.getCanPreviousPage()}\n >\n {'<'}\n </button>\n {Array.from({ length: Math.min(5, pageCount) }).map((_, i) => {\n // 显示当前页前后两页\n let pageNum = pageIndex - 2 + i;\n\n // 确保页码在合法范围内\n if (pageNum < 0) pageNum = i;\n if (pageNum >= pageCount) pageNum = pageCount - 5 + i;\n\n // 如果总页数小于5,直接显示全部页码\n if (pageCount <= 5) {\n pageNum = i;\n }\n\n // 如果页码超出范围,不显示\n if (pageNum < 0 || pageNum >= pageCount) return null;\n\n return (\n <button\n key={pageNum}\n className={`join-item btn btn-sm ${pageNum === pageIndex ? 'btn-active' : ''}`}\n onClick={() => handlePageChange(pageNum)}\n >\n {pageNum + 1}\n </button>\n );\n })}\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(pageIndex + 1)}\n disabled={!table.getCanNextPage()}\n >\n {'>'}\n </button>\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n >\n {'>>'}\n </button>\n </div>\n <div>\n <select\n className=\"select select-sm select-bordered\"\n value={internalPageSize}\n onChange={(e) => {\n const newSize = Number(e.target.value);\n\n // 更新内部页面大小\n setInternalPageSize(newSize);\n\n // 通知外部页面大小变更\n if (onPageSizeChange) {\n onPageSizeChange(newSize);\n }\n\n // 重置到第一页\n setInternalPageIndex(0);\n\n // 通知外部页码重置为0\n if (onPageChange) {\n onPageChange(0);\n }\n }}\n >\n {[5, 10, 15, 20, 25].map((pageSize) => (\n <option key={pageSize} value={pageSize}>\n {pageSize} 条/页\n </option>\n ))}\n </select>\n </div>\n </div>\n );\n}\n"],"mappings":";;;AAeA,SAAgB,EAAkC,EAC9C,qBACA,UACA,sBACA,qBACA,qBACA,wBACA,yBACA,qBACA,mBACwB;CACxB,IAAI,CAAC,GAAkB,OAAO;CAE9B,IAAM,EAAE,iBAAc,EAAM,MAAM,YAC5B,IAAY,EAAM,aAAa;CAErC,OACI,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACI,kBAAC,OAAD,EAAA,UACI,kBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA;KAA0B;KACnB,IAAY;KAAE;KAAM;KAAU;IAC/B;GACL,CAAA,EAAA,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACI,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,CAAC;MACjC,UAAU,CAAC,EAAM,mBAAmB;MAEnC,UAAA;KACG,CAAA;KACR,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,IAAY,CAAC;MAC7C,UAAU,CAAC,EAAM,mBAAmB;MAEnC,UAAA;KACG,CAAA;KACP,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,CAAS,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM;MAE1D,IAAI,IAAU,IAAY,IAAI;MAc9B,OAXI,IAAU,MAAG,IAAU,IACvB,KAAW,MAAW,IAAU,IAAY,IAAI,IAGhD,KAAa,MACb,IAAU,IAIV,IAAU,KAAK,KAAW,IAAkB,OAG5C,kBAAC,UAAD;OAEI,WAAW,wBAAwB,MAAY,IAAY,eAAe;OAC1E,eAAe,EAAiB,CAAO;OAEtC,UAAA,IAAU;MACP,GALC,CAKD;KAEhB,CAAC;KACD,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,IAAY,CAAC;MAC7C,UAAU,CAAC,EAAM,eAAe;MAE/B,UAAA;KACG,CAAA;KACR,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,IAAY,CAAC;MAC7C,UAAU,CAAC,EAAM,eAAe;MAE/B,UAAA;KACG,CAAA;IACP;;GACL,kBAAC,OAAD,EAAA,UACI,kBAAC,UAAD;IACI,WAAU;IACV,OAAO;IACP,WAAW,MAAM;KACb,IAAM,IAAU,OAAO,EAAE,OAAO,KAAK;KAcrC,AAXA,EAAoB,CAAO,GAGvB,KACA,EAAiB,CAAO,GAI5B,EAAqB,CAAC,GAGlB,KACA,EAAa,CAAC;IAEtB;IAEC,UAAA;KAAC;KAAG;KAAI;KAAI;KAAI;IAAE,CAAC,CAAC,KAAK,MACtB,kBAAC,UAAD;KAAuB,OAAO;KAA9B,UAAA,CACK,GAAS,MACN;IAFK,GAAA,CAEL,CACX;GACG,CAAA,EACP,CAAA;EACJ;;AAEb"}
1
+ {"version":3,"file":"TablePagination.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TablePagination.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as TanStackTable, PaginationState } from '../tanstack-table';\n\ninterface TablePaginationProps<T extends object> {\n enablePagination: boolean;\n table: TanStackTable<T>;\n onPaginationChange: (pagination: PaginationState) => void;\n}\n\nexport function TablePagination<T extends object>({\n enablePagination,\n table,\n onPaginationChange,\n}: TablePaginationProps<T>) {\n if (!enablePagination) return null;\n\n const { pageIndex, pageSize } = table.state.pagination;\n const pageCount = table.getPageCount();\n const handlePageChange = (next: number) => onPaginationChange({ pageIndex: next, pageSize });\n const pageSizes = [...new Set([5, 10, 15, 20, 25, pageSize])].sort((a, b) => a - b);\n\n return (\n <div className=\"mt-4 flex justify-between items-center\">\n <div>\n <span className=\"text-sm\">\n 第 {pageCount === 0 ? 0 : pageIndex + 1} 页,共 {pageCount} 页\n </span>\n </div>\n <div className=\"join\">\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(0)}\n disabled={!table.getCanPreviousPage()}\n >\n {'<<'}\n </button>\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(pageIndex - 1)}\n disabled={!table.getCanPreviousPage()}\n >\n {'<'}\n </button>\n {Array.from({ length: Math.min(5, pageCount) }).map((_, i) => {\n // 显示当前页前后两页\n let pageNum = pageIndex - 2 + i;\n\n // 确保页码在合法范围内\n if (pageNum < 0) pageNum = i;\n if (pageNum >= pageCount) pageNum = pageCount - 5 + i;\n\n // 如果总页数小于5,直接显示全部页码\n if (pageCount <= 5) {\n pageNum = i;\n }\n\n // 如果页码超出范围,不显示\n if (pageNum < 0 || pageNum >= pageCount) return null;\n\n return (\n <button\n key={pageNum}\n className={`join-item btn btn-sm ${pageNum === pageIndex ? 'btn-active' : ''}`}\n onClick={() => handlePageChange(pageNum)}\n >\n {pageNum + 1}\n </button>\n );\n })}\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(pageIndex + 1)}\n disabled={!table.getCanNextPage()}\n >\n {'>'}\n </button>\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n >\n {'>>'}\n </button>\n </div>\n <div>\n <select\n className=\"select select-sm select-bordered\"\n value={pageSize}\n onChange={(e) => onPaginationChange({ pageIndex: 0, pageSize: Number(e.target.value) })}\n >\n {pageSizes.map((pageSize) => (\n <option key={pageSize} value={pageSize}>\n {pageSize} 条/页\n </option>\n ))}\n </select>\n </div>\n </div>\n );\n}\n"],"mappings":";;;AASA,SAAgB,EAAkC,EAC9C,qBACA,UACA,yBACwB;CACxB,IAAI,CAAC,GAAkB,OAAO;CAE9B,IAAM,EAAE,cAAW,gBAAa,EAAM,MAAM,YACtC,IAAY,EAAM,aAAa,GAC/B,KAAoB,MAAiB,EAAmB;EAAE,WAAW;EAAM;CAAS,CAAC,GACrF,IAAY,CAAC,mBAAG,IAAI,IAAI;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;CAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC;CAElF,OACI,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACI,kBAAC,OAAD,EAAA,UACI,kBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA;KAA0B;KACnB,MAAc,IAAI,IAAI,IAAY;KAAE;KAAM;KAAU;IACrD;GACL,CAAA,EAAA,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACI,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,CAAC;MACjC,UAAU,CAAC,EAAM,mBAAmB;MAEnC,UAAA;KACG,CAAA;KACR,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,IAAY,CAAC;MAC7C,UAAU,CAAC,EAAM,mBAAmB;MAEnC,UAAA;KACG,CAAA;KACP,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,CAAS,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM;MAE1D,IAAI,IAAU,IAAY,IAAI;MAc9B,OAXI,IAAU,MAAG,IAAU,IACvB,KAAW,MAAW,IAAU,IAAY,IAAI,IAGhD,KAAa,MACb,IAAU,IAIV,IAAU,KAAK,KAAW,IAAkB,OAG5C,kBAAC,UAAD;OAEI,WAAW,wBAAwB,MAAY,IAAY,eAAe;OAC1E,eAAe,EAAiB,CAAO;OAEtC,UAAA,IAAU;MACP,GALC,CAKD;KAEhB,CAAC;KACD,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,IAAY,CAAC;MAC7C,UAAU,CAAC,EAAM,eAAe;MAE/B,UAAA;KACG,CAAA;KACR,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,IAAY,CAAC;MAC7C,UAAU,CAAC,EAAM,eAAe;MAE/B,UAAA;KACG,CAAA;IACP;;GACL,kBAAC,OAAD,EAAA,UACI,kBAAC,UAAD;IACI,WAAU;IACV,OAAO;IACP,WAAW,MAAM,EAAmB;KAAE,WAAW;KAAG,UAAU,OAAO,EAAE,OAAO,KAAK;IAAE,CAAC;IAErF,UAAA,EAAU,KAAK,MACZ,kBAAC,UAAD;KAAuB,OAAO;KAA9B,UAAA,CACK,GAAS,MACN;IAFK,GAAA,CAEL,CACX;GACG,CAAA,EACP,CAAA;EACJ;;AAEb"}
@@ -3,6 +3,7 @@ import { Table, VisibilityState, RowSelectionState } from '../tanstack-table';
3
3
  import { ToolbarOptions, CustomFilterPanelProps, DataTableProps } from '../types';
4
4
  interface TableToolbarProps<T extends object> {
5
5
  toolbar: ToolbarOptions;
6
+ viewSwitcher?: React.ReactNode;
6
7
  table: Table<T>;
7
8
  columns: DataTableProps<T>['columns'];
8
9
  columnOrderState: string[];
@@ -18,5 +19,5 @@ interface TableToolbarProps<T extends object> {
18
19
  enableColumnReordering: boolean;
19
20
  handleDrop: (e: React.DragEvent, targetColumnId: string) => void;
20
21
  }
21
- export declare function TableToolbar<T extends object>({ toolbar, table, columns, columnOrderState, visibilityState, activeFilter, setActiveFilter, customFilterPanel, draggedColumnId, handleDragStart, toggleColumnVisibility, rowSelection, data, enableColumnReordering, handleDrop, }: TableToolbarProps<T>): React.JSX.Element | null;
22
+ export declare function TableToolbar<T extends object>({ toolbar, viewSwitcher, table, columns, columnOrderState, visibilityState, activeFilter, setActiveFilter, customFilterPanel, draggedColumnId, handleDragStart, toggleColumnVisibility, rowSelection, data, enableColumnReordering, handleDrop, }: TableToolbarProps<T>): React.JSX.Element | null;
22
23
  export {};
@@ -4,38 +4,44 @@ import { BulkActions as n } from "./BulkActions.js";
4
4
  import "react";
5
5
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
6
  //#region src/components/pro/DataTable/components/TableToolbar.tsx
7
- function a({ toolbar: a, table: o, columns: s, columnOrderState: c, visibilityState: l, activeFilter: u, setActiveFilter: d, customFilterPanel: f, draggedColumnId: p, handleDragStart: m, toggleColumnVisibility: h, rowSelection: g, data: _, enableColumnReordering: v, handleDrop: y }) {
7
+ function a({ toolbar: a, viewSwitcher: o, table: s, columns: c, columnOrderState: l, visibilityState: u, activeFilter: d, setActiveFilter: f, customFilterPanel: p, draggedColumnId: m, handleDragStart: h, toggleColumnVisibility: g, rowSelection: _, data: v, enableColumnReordering: y, handleDrop: b }) {
8
8
  return a.enabled ? /* @__PURE__ */ i("div", {
9
9
  className: "flex flex-wrap justify-between gap-4 mb-4",
10
10
  children: [/* @__PURE__ */ i("div", {
11
11
  className: "flex flex-wrap gap-2 items-center",
12
12
  children: [
13
13
  a.enableColumnSelector && /* @__PURE__ */ r(e, {
14
- table: o,
15
- columns: s,
16
- columnOrderState: c,
17
- visibilityState: l,
18
- toggleColumnVisibility: h,
19
- enableColumnReordering: v,
20
- handleDragStart: m,
21
- handleDrop: y,
22
- draggedColumnId: p
14
+ table: s,
15
+ columns: c,
16
+ columnOrderState: l,
17
+ visibilityState: u,
18
+ toggleColumnVisibility: g,
19
+ enableColumnReordering: y,
20
+ handleDragStart: h,
21
+ handleDrop: b,
22
+ draggedColumnId: m
23
23
  }),
24
24
  a.enableFiltering && /* @__PURE__ */ r(t, {
25
- table: o,
26
- columns: s,
27
- activeFilter: u,
28
- setActiveFilter: d,
29
- customFilterPanel: f,
25
+ table: s,
26
+ columns: c,
27
+ activeFilter: d,
28
+ setActiveFilter: f,
29
+ customFilterPanel: p,
30
30
  filterConfig: a.filterConfig
31
31
  }),
32
32
  a.customComponents
33
33
  ]
34
- }), a.enableBulkActions && a.bulkActions && /* @__PURE__ */ r(n, {
35
- bulkActions: a.bulkActions,
36
- rowSelection: g,
37
- data: _
34
+ }), /* @__PURE__ */ i("div", {
35
+ className: "flex flex-wrap items-center gap-2",
36
+ children: [o, a.enableBulkActions && a.bulkActions && /* @__PURE__ */ r(n, {
37
+ bulkActions: a.bulkActions,
38
+ rowSelection: _,
39
+ data: v
40
+ })]
38
41
  })]
42
+ }) : o ? /* @__PURE__ */ r("div", {
43
+ className: "flex justify-end mb-4",
44
+ children: o
39
45
  }) : null;
40
46
  }
41
47
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"TableToolbar.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TableToolbar.tsx"],"sourcesContent":["import React from 'react';\nimport { Table, VisibilityState, RowSelectionState } from '../tanstack-table';\nimport { ToolbarOptions, CustomFilterPanelProps, DataTableProps } from '../types';\nimport { ColumnSelector } from './ColumnSelector';\nimport { FilterBar } from './FilterBar';\nimport { BulkActions } from './BulkActions';\n\ninterface TableToolbarProps<T extends object> {\n toolbar: ToolbarOptions;\n table: Table<T>;\n columns: DataTableProps<T>['columns'];\n columnOrderState: string[];\n visibilityState: VisibilityState;\n activeFilter: string | null;\n setActiveFilter: (filter: string | null) => void;\n customFilterPanel?: React.ComponentType<CustomFilterPanelProps>;\n draggedColumnId: string | null;\n handleDragStart: (e: React.DragEvent, columnId: string) => void;\n toggleColumnVisibility: (columnId: string) => void;\n rowSelection: RowSelectionState;\n data: T[];\n enableColumnReordering: boolean;\n handleDrop: (e: React.DragEvent, targetColumnId: string) => void;\n}\n\nexport function TableToolbar<T extends object>({\n toolbar,\n table,\n columns,\n columnOrderState,\n visibilityState,\n activeFilter,\n setActiveFilter,\n customFilterPanel,\n draggedColumnId,\n handleDragStart,\n toggleColumnVisibility,\n rowSelection,\n data,\n enableColumnReordering,\n handleDrop,\n}: TableToolbarProps<T>) {\n if (!toolbar.enabled) return null;\n\n return (\n <div className=\"flex flex-wrap justify-between gap-4 mb-4\">\n <div className=\"flex flex-wrap gap-2 items-center\">\n {toolbar.enableColumnSelector && (\n <ColumnSelector\n table={table}\n columns={columns}\n columnOrderState={columnOrderState}\n visibilityState={visibilityState}\n toggleColumnVisibility={toggleColumnVisibility}\n enableColumnReordering={enableColumnReordering}\n handleDragStart={handleDragStart}\n handleDrop={handleDrop}\n draggedColumnId={draggedColumnId}\n />\n )}\n\n {toolbar.enableFiltering && (\n <FilterBar\n table={table}\n columns={columns}\n activeFilter={activeFilter}\n setActiveFilter={setActiveFilter}\n customFilterPanel={customFilterPanel}\n filterConfig={toolbar.filterConfig}\n />\n )}\n\n {toolbar.customComponents}\n </div>\n\n {toolbar.enableBulkActions && toolbar.bulkActions && (\n <BulkActions\n bulkActions={toolbar.bulkActions}\n rowSelection={rowSelection}\n data={data}\n />\n )}\n </div>\n );\n}\n\n"],"mappings":";;;;;;AAyBA,SAAgB,EAA+B,EAC3C,YACA,UACA,YACA,qBACA,oBACA,iBACA,oBACA,sBACA,oBACA,oBACA,2BACA,iBACA,SACA,2BACA,iBACqB;CAGrB,OAFK,EAAQ,UAGT,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACK,EAAQ,wBACL,kBAAC,GAAD;KACW;KACE;KACS;KACD;KACO;KACA;KACP;KACL;KACK;IACpB,CAAA;IAGJ,EAAQ,mBACL,kBAAC,GAAD;KACW;KACE;KACK;KACG;KACE;KACnB,cAAc,EAAQ;IACzB,CAAA;IAGJ,EAAQ;GACR;EAEJ,CAAA,GAAA,EAAQ,qBAAqB,EAAQ,eAClC,kBAAC,GAAD;GACI,aAAa,EAAQ;GACP;GACR;EACT,CAAA,CAEJ;MAxCoB;AA0CjC"}
1
+ {"version":3,"file":"TableToolbar.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TableToolbar.tsx"],"sourcesContent":["import React from 'react';\nimport { Table, VisibilityState, RowSelectionState } from '../tanstack-table';\nimport { ToolbarOptions, CustomFilterPanelProps, DataTableProps } from '../types';\nimport { ColumnSelector } from './ColumnSelector';\nimport { FilterBar } from './FilterBar';\nimport { BulkActions } from './BulkActions';\n\ninterface TableToolbarProps<T extends object> {\n toolbar: ToolbarOptions;\n viewSwitcher?: React.ReactNode;\n table: Table<T>;\n columns: DataTableProps<T>['columns'];\n columnOrderState: string[];\n visibilityState: VisibilityState;\n activeFilter: string | null;\n setActiveFilter: (filter: string | null) => void;\n customFilterPanel?: React.ComponentType<CustomFilterPanelProps>;\n draggedColumnId: string | null;\n handleDragStart: (e: React.DragEvent, columnId: string) => void;\n toggleColumnVisibility: (columnId: string) => void;\n rowSelection: RowSelectionState;\n data: T[];\n enableColumnReordering: boolean;\n handleDrop: (e: React.DragEvent, targetColumnId: string) => void;\n}\n\nexport function TableToolbar<T extends object>({\n toolbar,\n viewSwitcher,\n table,\n columns,\n columnOrderState,\n visibilityState,\n activeFilter,\n setActiveFilter,\n customFilterPanel,\n draggedColumnId,\n handleDragStart,\n toggleColumnVisibility,\n rowSelection,\n data,\n enableColumnReordering,\n handleDrop,\n}: TableToolbarProps<T>) {\n if (!toolbar.enabled) {\n return viewSwitcher ? <div className=\"flex justify-end mb-4\">{viewSwitcher}</div> : null;\n }\n\n return (\n <div className=\"flex flex-wrap justify-between gap-4 mb-4\">\n <div className=\"flex flex-wrap gap-2 items-center\">\n {toolbar.enableColumnSelector && (\n <ColumnSelector\n table={table}\n columns={columns}\n columnOrderState={columnOrderState}\n visibilityState={visibilityState}\n toggleColumnVisibility={toggleColumnVisibility}\n enableColumnReordering={enableColumnReordering}\n handleDragStart={handleDragStart}\n handleDrop={handleDrop}\n draggedColumnId={draggedColumnId}\n />\n )}\n\n {toolbar.enableFiltering && (\n <FilterBar\n table={table}\n columns={columns}\n activeFilter={activeFilter}\n setActiveFilter={setActiveFilter}\n customFilterPanel={customFilterPanel}\n filterConfig={toolbar.filterConfig}\n />\n )}\n\n {toolbar.customComponents}\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n {viewSwitcher}\n {toolbar.enableBulkActions && toolbar.bulkActions && (\n <BulkActions\n bulkActions={toolbar.bulkActions}\n rowSelection={rowSelection}\n data={data}\n />\n )}\n </div>\n </div>\n );\n}\n\n"],"mappings":";;;;;;AA0BA,SAAgB,EAA+B,EAC3C,YACA,iBACA,UACA,YACA,qBACA,oBACA,iBACA,oBACA,sBACA,oBACA,oBACA,2BACA,iBACA,SACA,2BACA,iBACqB;CAKrB,OAJK,EAAQ,UAKT,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACK,EAAQ,wBACL,kBAAC,GAAD;KACW;KACE;KACS;KACD;KACO;KACA;KACP;KACL;KACK;IACpB,CAAA;IAGJ,EAAQ,mBACL,kBAAC,GAAD;KACW;KACE;KACK;KACG;KACE;KACnB,cAAc,EAAQ;IACzB,CAAA;IAGJ,EAAQ;GACR;EAEL,CAAA,GAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACK,GACA,EAAQ,qBAAqB,EAAQ,eAClC,kBAAC,GAAD;IACI,aAAa,EAAQ;IACP;IACR;GACT,CAAA,CAEJ;EACJ,CAAA,CAAA;MA5CE,IAAe,kBAAC,OAAD;EAAK,WAAU;EAAyB,UAAA;CAAkB,CAAA,IAAI;AA8C5F"}
@@ -25,7 +25,7 @@ export { PivotPanel } from './PivotPanel';
25
25
  export type { PivotPanelProps } from './PivotPanel';
26
26
  export { computePivot } from './pivotEngine';
27
27
  export type { PivotAggFn, PivotConfig, PivotResult, PivotRowNode, } from './pivotEngine';
28
- export type { DataTableProps, CellEventHandler, RowEventHandler, ColumnEventHandler, TableEventHandler } from './DataTable';
28
+ export type { DataTableProps, DataTableViewMode, DataTableCardOptions, CellEventHandler, RowEventHandler, ColumnEventHandler, TableEventHandler } from './DataTable';
29
29
  export type { FilterPanelProps, TextFilterProps, NumberFilterProps, SelectFilterProps, BooleanFilterProps, DateRangeFilterProps } from './Filters';
30
30
  export type { TreeDataRow } from './utils';
31
31
  export type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState, RowSelectionState, PaginationState } from './tanstack-table';
@@ -6,7 +6,7 @@ function a({ render: a }) {
6
6
  return e(() => ({
7
7
  name: "row-detail",
8
8
  wrapRow: (e, t) => o[t.rowId] ? /* @__PURE__ */ i(n, { children: [e, /* @__PURE__ */ r("tr", {
9
- className: "table-row",
9
+ className: "table-row blade-table-card__detail",
10
10
  children: /* @__PURE__ */ r("td", {
11
11
  className: "table-cell p-0",
12
12
  colSpan: 9999,
@@ -1 +1 @@
1
- {"version":3,"file":"rowDetailExtension.js","names":[],"sources":["../../../../src/components/pro/DataTable/rowDetailExtension.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport type { DataTableExtension, DataTableRowContext } from './extension';\n\nexport interface RowDetailOptions<T extends object> {\n /** 渲染展开后的行详情面板。 */\n render: (ctx: DataTableRowContext<T>) => React.ReactNode;\n}\n\n/**\n * 行详情(master/detail)扩展。\n *\n * 由于扩展是普通对象无法持有 React 状态,这里以 hook 工厂的形式返回一个绑定了\n * 展开状态的扩展。为每一行的第一列注入一个展开按钮(通过 `cell` 覆写),点击后\n * 在该行下方渲染一个详情面板(通过 `wrapRow`)。\n *\n * 使用方式:\n * ```tsx\n * const detail = useRowDetailExtension<Row>({\n * render: ({ row }) => <pre>{JSON.stringify(row, null, 2)}</pre>,\n * });\n * <DataTable data={data} columns={columns} extensions={[detail]} />\n * ```\n */\nexport function useRowDetailExtension<T extends object>({\n render,\n}: RowDetailOptions<T>): DataTableExtension<T> {\n const [open, setOpen] = useState<Record<string, boolean>>({});\n\n return useMemo<DataTableExtension<T>>(\n () => ({\n name: 'row-detail',\n wrapRow: (children, ctx) => {\n if (!open[ctx.rowId]) return children;\n return (\n <>\n {children}\n <tr className=\"table-row\">\n <td className=\"table-cell p-0\" colSpan={9999}>\n <div className=\"bg-base-200/60 p-4 border-l-4 border-primary\">\n {render(ctx)}\n </div>\n </td>\n </tr>\n </>\n );\n },\n rowProps: (ctx) =>\n ({\n 'data-detail-open': open[ctx.rowId] ? 'true' : undefined,\n }) as React.HTMLAttributes<HTMLTableRowElement>,\n // 通过右键菜单切换详情面板,避免占用列布局。\n contextMenu: (ctx) => [\n {\n key: 'toggle-detail',\n label: open[ctx.rowId] ? '收起详情' : '展开详情',\n onSelect: () =>\n setOpen((s) => ({ ...s, [ctx.rowId]: !s[ctx.rowId] })),\n },\n ],\n }),\n [open, render],\n );\n}\n"],"mappings":";;;AAuBA,SAAgB,EAAwC,EACpD,aAC2C;CAC3C,IAAM,CAAC,GAAM,KAAW,EAAkC,CAAC,CAAC;CAE5D,OAAO,SACI;EACH,MAAM;EACN,UAAU,GAAU,MACX,EAAK,EAAI,SAEV,kBAAA,GAAA,EAAA,UAAA,CACK,GACD,kBAAC,MAAD;GAAI,WAAU;GACV,UAAA,kBAAC,MAAD;IAAI,WAAU;IAAiB,SAAS;IACpC,UAAA,kBAAC,OAAD;KAAK,WAAU;KACV,UAAA,EAAO,CAAG;IACV,CAAA;GACL,CAAA;EACJ,CAAA,CACN,EAAA,CAAA,IAXuB;EAcjC,WAAW,OACN,EACG,oBAAoB,EAAK,EAAI,SAAS,SAAS,KAAA,EACnD;EAEJ,cAAc,MAAQ,CAClB;GACI,KAAK;GACL,OAAO,EAAK,EAAI,SAAS,SAAS;GAClC,gBACI,GAAS,OAAO;IAAE,GAAG;KAAI,EAAI,QAAQ,CAAC,EAAE,EAAI;GAAO,EAAE;EAC7D,CACJ;CACJ,IACA,CAAC,GAAM,CAAM,CACjB;AACJ"}
1
+ {"version":3,"file":"rowDetailExtension.js","names":[],"sources":["../../../../src/components/pro/DataTable/rowDetailExtension.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport type { DataTableExtension, DataTableRowContext } from './extension';\n\nexport interface RowDetailOptions<T extends object> {\n /** 渲染展开后的行详情面板。 */\n render: (ctx: DataTableRowContext<T>) => React.ReactNode;\n}\n\n/**\n * 行详情(master/detail)扩展。\n *\n * 由于扩展是普通对象无法持有 React 状态,这里以 hook 工厂的形式返回一个绑定了\n * 展开状态的扩展。为每一行的第一列注入一个展开按钮(通过 `cell` 覆写),点击后\n * 在该行下方渲染一个详情面板(通过 `wrapRow`)。\n *\n * 使用方式:\n * ```tsx\n * const detail = useRowDetailExtension<Row>({\n * render: ({ row }) => <pre>{JSON.stringify(row, null, 2)}</pre>,\n * });\n * <DataTable data={data} columns={columns} extensions={[detail]} />\n * ```\n */\nexport function useRowDetailExtension<T extends object>({\n render,\n}: RowDetailOptions<T>): DataTableExtension<T> {\n const [open, setOpen] = useState<Record<string, boolean>>({});\n\n return useMemo<DataTableExtension<T>>(\n () => ({\n name: 'row-detail',\n wrapRow: (children, ctx) => {\n if (!open[ctx.rowId]) return children;\n return (\n <>\n {children}\n <tr className=\"table-row blade-table-card__detail\">\n <td className=\"table-cell p-0\" colSpan={9999}>\n <div className=\"bg-base-200/60 p-4 border-l-4 border-primary\">\n {render(ctx)}\n </div>\n </td>\n </tr>\n </>\n );\n },\n rowProps: (ctx) =>\n ({\n 'data-detail-open': open[ctx.rowId] ? 'true' : undefined,\n }) as React.HTMLAttributes<HTMLTableRowElement>,\n // 通过右键菜单切换详情面板,避免占用列布局。\n contextMenu: (ctx) => [\n {\n key: 'toggle-detail',\n label: open[ctx.rowId] ? '收起详情' : '展开详情',\n onSelect: () =>\n setOpen((s) => ({ ...s, [ctx.rowId]: !s[ctx.rowId] })),\n },\n ],\n }),\n [open, render],\n );\n}\n"],"mappings":";;;AAuBA,SAAgB,EAAwC,EACpD,aAC2C;CAC3C,IAAM,CAAC,GAAM,KAAW,EAAkC,CAAC,CAAC;CAE5D,OAAO,SACI;EACH,MAAM;EACN,UAAU,GAAU,MACX,EAAK,EAAI,SAEV,kBAAA,GAAA,EAAA,UAAA,CACK,GACD,kBAAC,MAAD;GAAI,WAAU;GACV,UAAA,kBAAC,MAAD;IAAI,WAAU;IAAiB,SAAS;IACpC,UAAA,kBAAC,OAAD;KAAK,WAAU;KACV,UAAA,EAAO,CAAG;IACV,CAAA;GACL,CAAA;EACJ,CAAA,CACN,EAAA,CAAA,IAXuB;EAcjC,WAAW,OACN,EACG,oBAAoB,EAAK,EAAI,SAAS,SAAS,KAAA,EACnD;EAEJ,cAAc,MAAQ,CAClB;GACI,KAAK;GACL,OAAO,EAAK,EAAI,SAAS,SAAS;GAClC,gBACI,GAAS,OAAO;IAAE,GAAG;KAAI,EAAI,QAAQ,CAAC,EAAE,EAAI;GAAO,EAAE;EAC7D,CACJ;CACJ,IACA,CAAC,GAAM,CAAM,CACjB;AACJ"}
@@ -14,9 +14,9 @@
14
14
  * 组装细节。请始终从本模块导入表格相关类型与工具,而不要直接依赖
15
15
  * `@tanstack/react-table`。
16
16
  */
17
- import { useTable, flexRender, tableFeatures, type ReactTable, coreFeatures, columnFilteringFeature, columnOrderingFeature, columnVisibilityFeature, globalFilteringFeature, rowSortingFeature, rowPaginationFeature, rowSelectionFeature, rowExpandingFeature, createCoreRowModel, createFilteredRowModel, createSortedRowModel, createPaginatedRowModel, createExpandedRowModel } from '@tanstack/react-table';
17
+ import { useTable, flexRender, sortFns as builtInSortFns, tableFeatures, type ReactTable, coreFeatures, columnFilteringFeature, columnOrderingFeature, columnVisibilityFeature, globalFilteringFeature, rowSortingFeature, rowPaginationFeature, rowSelectionFeature, rowExpandingFeature, createCoreRowModel, createFilteredRowModel, createSortedRowModel, createPaginatedRowModel, createExpandedRowModel } from '@tanstack/react-table';
18
18
  import type { RowData, OnChangeFn, Updater, CellContext as CoreCellContext, HeaderContext as CoreHeaderContext, SortingState, ColumnFiltersState, RowSelectionState, PaginationState, ColumnOrderState, ExpandedState, ColumnVisibilityState, StockFeatures, Column as CoreColumn, ColumnDef as CoreColumnDef, Row as CoreRow, Cell as CoreCell, Header as CoreHeader, HeaderGroup as CoreHeaderGroup, SortFnOption, SortFn as CoreSortFn, FilterFn as CoreFilterFn, ColumnMeta as CoreColumnMeta, TableOptions } from '@tanstack/react-table';
19
- export { flexRender, useTable, tableFeatures };
19
+ export { flexRender, useTable, tableFeatures, builtInSortFns };
20
20
  export type DishUITableFeatures = StockFeatures;
21
21
  export { coreFeatures, columnFilteringFeature, columnOrderingFeature, columnVisibilityFeature, globalFilteringFeature, rowSortingFeature, rowPaginationFeature, rowSelectionFeature, rowExpandingFeature, createCoreRowModel, createFilteredRowModel, createSortedRowModel, createPaginatedRowModel, createExpandedRowModel, };
22
22
  export type Table<TData extends RowData> = ReactTable<DishUITableFeatures, TData>;
@@ -1,49 +1,57 @@
1
1
  import { useMemo as e } from "react";
2
- import { columnFilteringFeature as t, columnOrderingFeature as n, columnVisibilityFeature as r, coreFeatures as i, createCoreRowModel as a, createExpandedRowModel as o, createFilteredRowModel as s, createPaginatedRowModel as c, createSortedRowModel as l, flexRender as u, globalFilteringFeature as d, rowExpandingFeature as f, rowPaginationFeature as p, rowSelectionFeature as m, rowSortingFeature as h, tableFeatures as g, useTable as _ } from "@tanstack/react-table";
2
+ import { columnFilteringFeature as t, columnOrderingFeature as n, columnVisibilityFeature as r, coreFeatures as i, createCoreRowModel as a, createExpandedRowModel as o, createFilteredRowModel as s, createPaginatedRowModel as c, createSortedRowModel as l, filterFns as u, flexRender as d, globalFilteringFeature as f, rowExpandingFeature as p, rowPaginationFeature as m, rowSelectionFeature as h, rowSortingFeature as g, sortFns as _, tableFeatures as v, useTable as y } from "@tanstack/react-table";
3
3
  //#region src/components/pro/DataTable/tanstack-table.ts
4
- var v = g({
4
+ var b = v({
5
5
  ...i,
6
6
  columnFilteringFeature: t,
7
7
  columnOrderingFeature: n,
8
8
  columnVisibilityFeature: r,
9
- globalFilteringFeature: d,
10
- rowSortingFeature: h,
11
- rowPaginationFeature: p,
12
- rowSelectionFeature: m,
13
- rowExpandingFeature: f,
9
+ globalFilteringFeature: f,
10
+ rowSortingFeature: g,
11
+ rowPaginationFeature: m,
12
+ rowSelectionFeature: h,
13
+ rowExpandingFeature: p,
14
+ sortFns: _,
15
+ filterFns: u,
14
16
  coreRowModel: a(),
15
17
  filteredRowModel: s(),
16
18
  sortedRowModel: l(),
17
19
  paginatedRowModel: c(),
18
20
  expandedRowModel: o()
19
21
  });
20
- function y(u) {
21
- let { sortFns: y, filterFns: b, ...x } = u, S = e(() => {
22
- if (!y && !b) return v;
22
+ function x(d) {
23
+ let { sortFns: x, filterFns: S, ...C } = d, w = e(() => {
24
+ if (!x && !S) return b;
23
25
  let e = {
24
26
  ...i,
25
27
  columnFilteringFeature: t,
26
28
  columnOrderingFeature: n,
27
29
  columnVisibilityFeature: r,
28
- globalFilteringFeature: d,
29
- rowSortingFeature: h,
30
- rowPaginationFeature: p,
31
- rowSelectionFeature: m,
32
- rowExpandingFeature: f,
30
+ globalFilteringFeature: f,
31
+ rowSortingFeature: g,
32
+ rowPaginationFeature: m,
33
+ rowSelectionFeature: h,
34
+ rowExpandingFeature: p,
33
35
  coreRowModel: a(),
34
36
  filteredRowModel: s(),
35
37
  sortedRowModel: l(),
36
38
  paginatedRowModel: c(),
37
39
  expandedRowModel: o()
38
40
  };
39
- return y && (e.sortFns = y), b && (e.filterFns = b), g(e);
40
- }, [y, b]);
41
- return _({
42
- features: S,
43
- ...x
41
+ return e.sortFns = {
42
+ ..._,
43
+ ...x
44
+ }, e.filterFns = {
45
+ ...u,
46
+ ...S
47
+ }, v(e);
48
+ }, [x, S]);
49
+ return y({
50
+ features: w,
51
+ ...C
44
52
  });
45
53
  }
46
54
  //#endregion
47
- export { t as columnFilteringFeature, n as columnOrderingFeature, r as columnVisibilityFeature, i as coreFeatures, a as createCoreRowModel, o as createExpandedRowModel, s as createFilteredRowModel, c as createPaginatedRowModel, l as createSortedRowModel, u as flexRender, d as globalFilteringFeature, f as rowExpandingFeature, p as rowPaginationFeature, m as rowSelectionFeature, h as rowSortingFeature, g as tableFeatures, y as useReactTable, _ as useTable };
55
+ export { _ as builtInSortFns, t as columnFilteringFeature, n as columnOrderingFeature, r as columnVisibilityFeature, i as coreFeatures, a as createCoreRowModel, o as createExpandedRowModel, s as createFilteredRowModel, c as createPaginatedRowModel, l as createSortedRowModel, d as flexRender, f as globalFilteringFeature, p as rowExpandingFeature, m as rowPaginationFeature, h as rowSelectionFeature, g as rowSortingFeature, v as tableFeatures, x as useReactTable, y as useTable };
48
56
 
49
57
  //# sourceMappingURL=tanstack-table.js.map