@ackplus/mui-tanstack-data-grid 1.0.0

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 (119) hide show
  1. package/README.md +22 -0
  2. package/dist/components/data-table.d.ts +4 -0
  3. package/dist/components/data-table.d.ts.map +1 -0
  4. package/dist/components/data-table.js +24 -0
  5. package/dist/components/filters/filter-value-input.d.ts +10 -0
  6. package/dist/components/filters/filter-value-input.d.ts.map +1 -0
  7. package/dist/components/filters/filter-value-input.js +39 -0
  8. package/dist/components/filters/index.d.ts +3 -0
  9. package/dist/components/filters/index.d.ts.map +1 -0
  10. package/dist/components/filters/index.js +18 -0
  11. package/dist/components/filters/operators.d.ts +93 -0
  12. package/dist/components/filters/operators.d.ts.map +1 -0
  13. package/dist/components/filters/operators.js +42 -0
  14. package/dist/components/grid/grid-view.d.ts +8 -0
  15. package/dist/components/grid/grid-view.d.ts.map +1 -0
  16. package/dist/components/grid/grid-view.js +151 -0
  17. package/dist/components/grid/styled.d.ts +17 -0
  18. package/dist/components/grid/styled.d.ts.map +1 -0
  19. package/dist/components/grid/styled.js +68 -0
  20. package/dist/components/index.d.ts +8 -0
  21. package/dist/components/index.d.ts.map +1 -0
  22. package/dist/components/index.js +23 -0
  23. package/dist/components/toolbar/bulk-actions-toolbar.d.ts +10 -0
  24. package/dist/components/toolbar/bulk-actions-toolbar.d.ts.map +1 -0
  25. package/dist/components/toolbar/bulk-actions-toolbar.js +20 -0
  26. package/dist/components/toolbar/column-filter-control.d.ts +8 -0
  27. package/dist/components/toolbar/column-filter-control.d.ts.map +1 -0
  28. package/dist/components/toolbar/column-filter-control.js +93 -0
  29. package/dist/components/toolbar/data-table-toolbar.d.ts +16 -0
  30. package/dist/components/toolbar/data-table-toolbar.d.ts.map +1 -0
  31. package/dist/components/toolbar/data-table-toolbar.js +44 -0
  32. package/dist/core/index.d.ts +2 -0
  33. package/dist/core/index.d.ts.map +1 -0
  34. package/dist/core/index.js +17 -0
  35. package/dist/core/use-data-table.d.ts +83 -0
  36. package/dist/core/use-data-table.d.ts.map +1 -0
  37. package/dist/core/use-data-table.js +1081 -0
  38. package/dist/features/column-filter.feature.d.ts +48 -0
  39. package/dist/features/column-filter.feature.d.ts.map +1 -0
  40. package/dist/features/column-filter.feature.js +270 -0
  41. package/dist/features/index.d.ts +3 -0
  42. package/dist/features/index.d.ts.map +1 -0
  43. package/dist/features/index.js +18 -0
  44. package/dist/features/selection.feature.d.ts +49 -0
  45. package/dist/features/selection.feature.d.ts.map +1 -0
  46. package/dist/features/selection.feature.js +159 -0
  47. package/dist/index.d.ts +13 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +34 -0
  50. package/dist/theme/create-data-table-theme.d.ts +16 -0
  51. package/dist/theme/create-data-table-theme.d.ts.map +1 -0
  52. package/dist/theme/create-data-table-theme.js +18 -0
  53. package/dist/theme/index.d.ts +7 -0
  54. package/dist/theme/index.d.ts.map +1 -0
  55. package/dist/theme/index.js +22 -0
  56. package/dist/theme/mui-augmentation.d.ts +40 -0
  57. package/dist/theme/mui-augmentation.d.ts.map +1 -0
  58. package/dist/theme/mui-augmentation.js +2 -0
  59. package/dist/theme/palette.d.ts +24 -0
  60. package/dist/theme/palette.d.ts.map +1 -0
  61. package/dist/theme/palette.js +23 -0
  62. package/dist/theme/tokens.d.ts +43 -0
  63. package/dist/theme/tokens.d.ts.map +1 -0
  64. package/dist/theme/tokens.js +40 -0
  65. package/dist/theme/use-data-table-tokens.d.ts +4 -0
  66. package/dist/theme/use-data-table-tokens.d.ts.map +1 -0
  67. package/dist/theme/use-data-table-tokens.js +42 -0
  68. package/dist/types/api.types.d.ts +156 -0
  69. package/dist/types/api.types.d.ts.map +1 -0
  70. package/dist/types/api.types.js +2 -0
  71. package/dist/types/column.types.d.ts +60 -0
  72. package/dist/types/column.types.d.ts.map +1 -0
  73. package/dist/types/column.types.js +7 -0
  74. package/dist/types/data-table.types.d.ts +161 -0
  75. package/dist/types/data-table.types.d.ts.map +1 -0
  76. package/dist/types/data-table.types.js +2 -0
  77. package/dist/types/export.types.d.ts +32 -0
  78. package/dist/types/export.types.d.ts.map +1 -0
  79. package/dist/types/export.types.js +2 -0
  80. package/dist/types/filter.types.d.ts +15 -0
  81. package/dist/types/filter.types.d.ts.map +1 -0
  82. package/dist/types/filter.types.js +2 -0
  83. package/dist/types/index.d.ts +10 -0
  84. package/dist/types/index.d.ts.map +1 -0
  85. package/dist/types/index.js +25 -0
  86. package/dist/types/logging.types.d.ts +23 -0
  87. package/dist/types/logging.types.d.ts.map +1 -0
  88. package/dist/types/logging.types.js +2 -0
  89. package/dist/types/selection.types.d.ts +7 -0
  90. package/dist/types/selection.types.d.ts.map +1 -0
  91. package/dist/types/selection.types.js +2 -0
  92. package/dist/types/slots.types.d.ts +41 -0
  93. package/dist/types/slots.types.d.ts.map +1 -0
  94. package/dist/types/slots.types.js +2 -0
  95. package/dist/types/state.types.d.ts +46 -0
  96. package/dist/types/state.types.d.ts.map +1 -0
  97. package/dist/types/state.types.js +2 -0
  98. package/dist/utils/column-helpers.d.ts +9 -0
  99. package/dist/utils/column-helpers.d.ts.map +1 -0
  100. package/dist/utils/column-helpers.js +46 -0
  101. package/dist/utils/debounced-fetch.utils.d.ts +22 -0
  102. package/dist/utils/debounced-fetch.utils.d.ts.map +1 -0
  103. package/dist/utils/debounced-fetch.utils.js +85 -0
  104. package/dist/utils/export-utils.d.ts +49 -0
  105. package/dist/utils/export-utils.d.ts.map +1 -0
  106. package/dist/utils/export-utils.js +372 -0
  107. package/dist/utils/index.d.ts +7 -0
  108. package/dist/utils/index.d.ts.map +1 -0
  109. package/dist/utils/index.js +22 -0
  110. package/dist/utils/logger.d.ts +24 -0
  111. package/dist/utils/logger.d.ts.map +1 -0
  112. package/dist/utils/logger.js +107 -0
  113. package/dist/utils/special-columns.d.ts +9 -0
  114. package/dist/utils/special-columns.d.ts.map +1 -0
  115. package/dist/utils/special-columns.js +80 -0
  116. package/dist/utils/table-helpers.d.ts +16 -0
  117. package/dist/utils/table-helpers.d.ts.map +1 -0
  118. package/dist/utils/table-helpers.js +50 -0
  119. package/package.json +74 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createExpandingColumn = exports.createSelectionColumn = void 0;
4
+ const icons_material_1 = require("@mui/icons-material");
5
+ const material_1 = require("@mui/material");
6
+ const react_1 = require("react");
7
+ const column_types_1 = require("../types/column.types");
8
+ /** Auto-generated checkbox selection column, driven by the SelectionFeature. */
9
+ const createSelectionColumn = (config) => ({
10
+ id: column_types_1.DEFAULT_SELECTION_COLUMN_ID,
11
+ maxSize: 60,
12
+ minSize: 60,
13
+ align: 'center',
14
+ filterable: false,
15
+ enableResizing: false,
16
+ enableSorting: false,
17
+ enableHiding: false,
18
+ enablePinning: false,
19
+ hideInExport: true,
20
+ header: ({ table }) => {
21
+ var _a, _b;
22
+ if (!config.multiSelect)
23
+ return null;
24
+ const allSelected = ((_a = table.getIsAllRowsSelected) === null || _a === void 0 ? void 0 : _a.call(table)) || false;
25
+ const someSelected = ((_b = table.getIsSomeRowsSelected) === null || _b === void 0 ? void 0 : _b.call(table)) || false;
26
+ return (0, react_1.createElement)(material_1.Checkbox, {
27
+ checked: allSelected,
28
+ indeterminate: someSelected && !allSelected,
29
+ onChange: () => { var _a; return (_a = table.toggleAllRowsSelected) === null || _a === void 0 ? void 0 : _a.call(table); },
30
+ size: 'small',
31
+ sx: { p: 0 },
32
+ 'aria-checked': allSelected ? 'true' : someSelected ? 'mixed' : 'false',
33
+ });
34
+ },
35
+ cell: ({ row, table }) => {
36
+ var _a, _b, _c;
37
+ const rowId = row.id;
38
+ const checked = ((_a = table.getIsRowSelected) === null || _a === void 0 ? void 0 : _a.call(table, rowId)) || false;
39
+ const canSelect = (_c = (_b = table.canSelectRow) === null || _b === void 0 ? void 0 : _b.call(table, rowId)) !== null && _c !== void 0 ? _c : true;
40
+ return (0, react_1.createElement)(material_1.Checkbox, {
41
+ checked,
42
+ disabled: !canSelect,
43
+ onChange: () => {
44
+ var _a;
45
+ if (canSelect)
46
+ (_a = table.toggleRowSelected) === null || _a === void 0 ? void 0 : _a.call(table, rowId);
47
+ },
48
+ size: 'small',
49
+ sx: { p: 0, opacity: canSelect ? 1 : 0.5 },
50
+ 'aria-checked': checked ? 'true' : 'false',
51
+ });
52
+ },
53
+ ...config,
54
+ });
55
+ exports.createSelectionColumn = createSelectionColumn;
56
+ /** Auto-generated expand/collapse column for row detail panels. */
57
+ const createExpandingColumn = (config) => ({
58
+ id: column_types_1.DEFAULT_EXPAND_COLUMN_ID,
59
+ maxSize: 60,
60
+ minSize: 60,
61
+ align: 'center',
62
+ filterable: false,
63
+ enableResizing: false,
64
+ enableSorting: false,
65
+ enableHiding: false,
66
+ enablePinning: false,
67
+ hideInExport: true,
68
+ header: '',
69
+ cell: ({ row }) => (0, react_1.createElement)(material_1.IconButton, {
70
+ onClick: row.getToggleExpandedHandler(),
71
+ size: 'small',
72
+ sx: { p: 0 },
73
+ 'aria-label': row.getIsExpanded() ? 'Collapse row' : 'Expand row',
74
+ 'aria-expanded': row.getIsExpanded(),
75
+ }, row.getIsExpanded()
76
+ ? (0, react_1.createElement)(icons_material_1.KeyboardArrowUpOutlined)
77
+ : (0, react_1.createElement)(icons_material_1.KeyboardArrowDownOutlined)),
78
+ ...config,
79
+ });
80
+ exports.createExpandingColumn = createExpandingColumn;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Pure table utilities.
3
+ *
4
+ * Ported from v1. The MUI-`<table>`-specific helpers (`shouldUseFixedLayout`,
5
+ * `calculatePinnedColumnsWidth`, `calculateTableMetrics`) are intentionally
6
+ * dropped — the div/CSS-Grid render layer computes layout/pinning differently.
7
+ */
8
+ /** Estimate how many skeleton rows fill the viewport during load. */
9
+ export declare function calculateSkeletonRows(containerHeight: number, rowHeight: number, maxRows?: number): number;
10
+ /** Stable row id: `row[idKey]` when present, else `row-<index>`. */
11
+ export declare function generateRowId<T>(row: T, index: number, idKey?: keyof T): string;
12
+ /** Default value formatting by column type. */
13
+ export declare function formatCellValue(value: any, type: string): string;
14
+ /** Debounce a function by `wait` ms. */
15
+ export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
16
+ //# sourceMappingURL=table-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/table-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,SAAK,GAAG,MAAM,CAGtG;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAO/E;AAED,+CAA+C;AAC/C,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAYhE;AAED,wCAAwC;AACxC,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACtD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACb,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAMlC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Pure table utilities.
4
+ *
5
+ * Ported from v1. The MUI-`<table>`-specific helpers (`shouldUseFixedLayout`,
6
+ * `calculatePinnedColumnsWidth`, `calculateTableMetrics`) are intentionally
7
+ * dropped — the div/CSS-Grid render layer computes layout/pinning differently.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.calculateSkeletonRows = calculateSkeletonRows;
11
+ exports.generateRowId = generateRowId;
12
+ exports.formatCellValue = formatCellValue;
13
+ exports.debounce = debounce;
14
+ /** Estimate how many skeleton rows fill the viewport during load. */
15
+ function calculateSkeletonRows(containerHeight, rowHeight, maxRows = 10) {
16
+ const estimatedRows = Math.ceil(containerHeight / rowHeight);
17
+ return Math.min(estimatedRows, maxRows);
18
+ }
19
+ /** Stable row id: `row[idKey]` when present, else `row-<index>`. */
20
+ function generateRowId(row, index, idKey) {
21
+ // Honour id === 0, but fall back to a positional id for null/undefined/empty
22
+ // (an empty-string id would collide across rows).
23
+ if (idKey && row[idKey] != null && row[idKey] !== '') {
24
+ return String(row[idKey]);
25
+ }
26
+ return `row-${index}`;
27
+ }
28
+ /** Default value formatting by column type. */
29
+ function formatCellValue(value, type) {
30
+ if (value === null || value === undefined)
31
+ return '-';
32
+ switch (type) {
33
+ case 'date':
34
+ return value instanceof Date ? value.toLocaleDateString() : String(value);
35
+ case 'number':
36
+ return typeof value === 'number' ? value.toLocaleString() : String(value);
37
+ case 'boolean':
38
+ return value ? 'Yes' : 'No';
39
+ default:
40
+ return String(value);
41
+ }
42
+ }
43
+ /** Debounce a function by `wait` ms. */
44
+ function debounce(func, wait) {
45
+ let timeout;
46
+ return (...args) => {
47
+ clearTimeout(timeout);
48
+ timeout = setTimeout(() => func(...args), wait);
49
+ };
50
+ }
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@ackplus/mui-tanstack-data-grid",
3
+ "type": "commonjs",
4
+ "version": "1.0.0",
5
+ "description": "A lightweight, fully-featured React data grid built on TanStack Table and MUI — div/CSS-Grid rendering (no HTML table), themeable like a MUI component. Successor to @ackplus/react-tanstack-data-table.",
6
+ "keywords": [
7
+ "react",
8
+ "data-grid",
9
+ "data-table",
10
+ "tanstack",
11
+ "mui",
12
+ "material-ui",
13
+ "typescript",
14
+ "headless"
15
+ ],
16
+ "author": {
17
+ "name": "ACK Plus"
18
+ },
19
+ "license": "MIT",
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/ack-solutions/react-tanstack-data-table.git",
26
+ "directory": "packages/mui-tanstack-data-grid"
27
+ },
28
+ "homepage": "https://github.com/ack-solutions/react-tanstack-data-table#readme",
29
+ "bugs": {
30
+ "url": "https://github.com/ack-solutions/react-tanstack-data-table/issues"
31
+ },
32
+ "main": "./dist/index.js",
33
+ "types": "./dist/index.d.ts",
34
+ "exports": {
35
+ ".": {
36
+ "types": "./dist/index.d.ts",
37
+ "import": "./dist/index.js",
38
+ "require": "./dist/index.js",
39
+ "default": "./dist/index.js"
40
+ },
41
+ "./package.json": "./package.json"
42
+ },
43
+ "files": [
44
+ "dist"
45
+ ],
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.build.json",
48
+ "lint": "tsc -p tsconfig.build.json --noEmit",
49
+ "test": "pnpm run build && node --test tests/*.test.cjs"
50
+ },
51
+ "dependencies": {
52
+ "@tanstack/react-table": "^8.21.3",
53
+ "@tanstack/react-virtual": "^3.13.18",
54
+ "dayjs": "^1.11.13",
55
+ "xlsx": "^0.18.5"
56
+ },
57
+ "peerDependencies": {
58
+ "@emotion/react": ">=11.0.0",
59
+ "@emotion/styled": ">=11.0.0",
60
+ "@mui/icons-material": ">=5.0.0 || ^6.0.0 || ^7.0.0",
61
+ "@mui/material": ">=5.0.0 || ^6.0.0 || ^7.0.0",
62
+ "react": ">=18.0.0 || ^19.0.0",
63
+ "react-dom": ">=18.0.0 || ^19.0.0"
64
+ },
65
+ "devDependencies": {
66
+ "@emotion/react": "^11.14.0",
67
+ "@emotion/styled": "^11.14.0",
68
+ "@mui/icons-material": "^7.1.1",
69
+ "@mui/material": "^7.1.1",
70
+ "react": "19.2.3",
71
+ "react-dom": "19.2.3",
72
+ "typescript": "~5.8.3"
73
+ }
74
+ }