@tanstack/react-table 8.0.0-alpha.3 → 8.0.0-alpha.34

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 (107) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -78
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  3. package/build/cjs/index.js +99 -12
  4. package/build/cjs/index.js.map +1 -1
  5. package/build/esm/index.js +41 -4686
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +29 -747
  9. package/build/types/index.d.ts +13 -7
  10. package/build/umd/index.development.js +51 -4688
  11. package/build/umd/index.development.js.map +1 -1
  12. package/build/umd/index.production.js +1 -1
  13. package/build/umd/index.production.js.map +1 -1
  14. package/package.json +4 -1
  15. package/src/index.tsx +107 -7
  16. package/build/cjs/aggregationTypes.js +0 -130
  17. package/build/cjs/aggregationTypes.js.map +0 -1
  18. package/build/cjs/core.js +0 -552
  19. package/build/cjs/core.js.map +0 -1
  20. package/build/cjs/createTable.js +0 -108
  21. package/build/cjs/createTable.js.map +0 -1
  22. package/build/cjs/features/ColumnSizing.js +0 -317
  23. package/build/cjs/features/ColumnSizing.js.map +0 -1
  24. package/build/cjs/features/Expanding.js +0 -255
  25. package/build/cjs/features/Expanding.js.map +0 -1
  26. package/build/cjs/features/Filters.js +0 -445
  27. package/build/cjs/features/Filters.js.map +0 -1
  28. package/build/cjs/features/Grouping.js +0 -249
  29. package/build/cjs/features/Grouping.js.map +0 -1
  30. package/build/cjs/features/Headers.js +0 -549
  31. package/build/cjs/features/Headers.js.map +0 -1
  32. package/build/cjs/features/Ordering.js +0 -86
  33. package/build/cjs/features/Ordering.js.map +0 -1
  34. package/build/cjs/features/Pagination.js +0 -194
  35. package/build/cjs/features/Pagination.js.map +0 -1
  36. package/build/cjs/features/Pinning.js +0 -149
  37. package/build/cjs/features/Pinning.js.map +0 -1
  38. package/build/cjs/features/RowSelection.js +0 -541
  39. package/build/cjs/features/RowSelection.js.map +0 -1
  40. package/build/cjs/features/Sorting.js +0 -327
  41. package/build/cjs/features/Sorting.js.map +0 -1
  42. package/build/cjs/features/Visibility.js +0 -166
  43. package/build/cjs/features/Visibility.js.map +0 -1
  44. package/build/cjs/filterTypes.js +0 -172
  45. package/build/cjs/filterTypes.js.map +0 -1
  46. package/build/cjs/sortTypes.js +0 -122
  47. package/build/cjs/sortTypes.js.map +0 -1
  48. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  49. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  50. package/build/cjs/utils/expandRowsFn.js +0 -38
  51. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  52. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  53. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  54. package/build/cjs/utils/groupRowsFn.js +0 -155
  55. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  56. package/build/cjs/utils/sortRowsFn.js +0 -94
  57. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  58. package/build/cjs/utils.js +0 -146
  59. package/build/cjs/utils.js.map +0 -1
  60. package/build/types/aggregationTypes.d.ts +0 -22
  61. package/build/types/core.d.ts +0 -111
  62. package/build/types/createTable.d.ts +0 -53
  63. package/build/types/features/ColumnSizing.d.ts +0 -67
  64. package/build/types/features/Expanding.d.ts +0 -53
  65. package/build/types/features/Filters.d.ts +0 -98
  66. package/build/types/features/Grouping.d.ts +0 -82
  67. package/build/types/features/Headers.d.ts +0 -41
  68. package/build/types/features/Ordering.d.ts +0 -19
  69. package/build/types/features/Pagination.d.ts +0 -43
  70. package/build/types/features/Pinning.d.ts +0 -39
  71. package/build/types/features/RowSelection.d.ts +0 -66
  72. package/build/types/features/Sorting.d.ts +0 -78
  73. package/build/types/features/Visibility.d.ts +0 -47
  74. package/build/types/filterTypes.d.ts +0 -50
  75. package/build/types/sortTypes.d.ts +0 -18
  76. package/build/types/types.d.ts +0 -127
  77. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  78. package/build/types/utils/expandRowsFn.d.ts +0 -2
  79. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  80. package/build/types/utils/groupRowsFn.d.ts +0 -2
  81. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  82. package/build/types/utils/sortRowsFn.d.ts +0 -2
  83. package/build/types/utils.d.ts +0 -28
  84. package/src/aggregationTypes.ts +0 -115
  85. package/src/core.tsx +0 -1182
  86. package/src/createTable.tsx +0 -241
  87. package/src/features/ColumnSizing.ts +0 -453
  88. package/src/features/Expanding.ts +0 -404
  89. package/src/features/Filters.ts +0 -762
  90. package/src/features/Grouping.ts +0 -466
  91. package/src/features/Headers.ts +0 -912
  92. package/src/features/Ordering.ts +0 -133
  93. package/src/features/Pagination.ts +0 -314
  94. package/src/features/Pinning.ts +0 -200
  95. package/src/features/RowSelection.ts +0 -831
  96. package/src/features/Sorting.ts +0 -547
  97. package/src/features/Visibility.ts +0 -279
  98. package/src/filterTypes.ts +0 -251
  99. package/src/sortTypes.ts +0 -159
  100. package/src/types.ts +0 -331
  101. package/src/utils/columnFilterRowsFn.ts +0 -155
  102. package/src/utils/expandRowsFn.ts +0 -50
  103. package/src/utils/globalFilterRowsFn.ts +0 -122
  104. package/src/utils/groupRowsFn.ts +0 -194
  105. package/src/utils/paginateRowsFn.ts +0 -34
  106. package/src/utils/sortRowsFn.ts +0 -115
  107. package/src/utils.tsx +0 -257
@@ -30,83 +30,5 @@ function _extends() {
30
30
  return _extends.apply(this, arguments);
31
31
  }
32
32
 
33
- function _objectWithoutPropertiesLoose(source, excluded) {
34
- if (source == null) return {};
35
- var target = {};
36
- var sourceKeys = Object.keys(source);
37
- var key, i;
38
-
39
- for (i = 0; i < sourceKeys.length; i++) {
40
- key = sourceKeys[i];
41
- if (excluded.indexOf(key) >= 0) continue;
42
- target[key] = source[key];
43
- }
44
-
45
- return target;
46
- }
47
-
48
- function _unsupportedIterableToArray(o, minLen) {
49
- if (!o) return;
50
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
51
- var n = Object.prototype.toString.call(o).slice(8, -1);
52
- if (n === "Object" && o.constructor) n = o.constructor.name;
53
- if (n === "Map" || n === "Set") return Array.from(o);
54
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
55
- }
56
-
57
- function _arrayLikeToArray(arr, len) {
58
- if (len == null || len > arr.length) len = arr.length;
59
-
60
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
61
-
62
- return arr2;
63
- }
64
-
65
- function _createForOfIteratorHelperLoose(o, allowArrayLike) {
66
- var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
67
- if (it) return (it = it.call(o)).next.bind(it);
68
-
69
- if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
70
- if (it) o = it;
71
- var i = 0;
72
- return function () {
73
- if (i >= o.length) return {
74
- done: true
75
- };
76
- return {
77
- done: false,
78
- value: o[i++]
79
- };
80
- };
81
- }
82
-
83
- throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
84
- }
85
-
86
- function _toPrimitive(input, hint) {
87
- if (typeof input !== "object" || input === null) return input;
88
- var prim = input[Symbol.toPrimitive];
89
-
90
- if (prim !== undefined) {
91
- var res = prim.call(input, hint || "default");
92
- if (typeof res !== "object") return res;
93
- throw new TypeError("@@toPrimitive must return a primitive value.");
94
- }
95
-
96
- return (hint === "string" ? String : Number)(input);
97
- }
98
-
99
- function _toPropertyKey(arg) {
100
- var key = _toPrimitive(arg, "string");
101
-
102
- return typeof key === "symbol" ? key : String(key);
103
- }
104
-
105
- exports.arrayLikeToArray = _arrayLikeToArray;
106
- exports.createForOfIteratorHelperLoose = _createForOfIteratorHelperLoose;
107
33
  exports["extends"] = _extends;
108
- exports.objectWithoutPropertiesLoose = _objectWithoutPropertiesLoose;
109
- exports.toPrimitive = _toPrimitive;
110
- exports.toPropertyKey = _toPropertyKey;
111
- exports.unsupportedIterableToArray = _unsupportedIterableToArray;
112
34
  //# sourceMappingURL=_rollupPluginBabelHelpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_rollupPluginBabelHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"_rollupPluginBabelHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -12,19 +12,106 @@
12
12
 
13
13
  Object.defineProperty(exports, '__esModule', { value: true });
14
14
 
15
- var columnFilterRowsFn = require('./utils/columnFilterRowsFn.js');
16
- var globalFilterRowsFn = require('./utils/globalFilterRowsFn.js');
17
- var sortRowsFn = require('./utils/sortRowsFn.js');
18
- var groupRowsFn = require('./utils/groupRowsFn.js');
19
- var expandRowsFn = require('./utils/expandRowsFn.js');
20
- var createTable = require('./createTable.js');
15
+ var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
16
+ var React = require('react');
17
+ var tableCore = require('@tanstack/table-core');
21
18
 
19
+ function _interopNamespace(e) {
20
+ if (e && e.__esModule) return e;
21
+ var n = Object.create(null);
22
+ if (e) {
23
+ Object.keys(e).forEach(function (k) {
24
+ if (k !== 'default') {
25
+ var d = Object.getOwnPropertyDescriptor(e, k);
26
+ Object.defineProperty(n, k, d.get ? d : {
27
+ enumerable: true,
28
+ get: function () { return e[k]; }
29
+ });
30
+ }
31
+ });
32
+ }
33
+ n["default"] = e;
34
+ return Object.freeze(n);
35
+ }
22
36
 
37
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
23
38
 
24
- exports.columnFilterRowsFn = columnFilterRowsFn.columnFilterRowsFn;
25
- exports.globalFilterRowsFn = globalFilterRowsFn.globalFilterRowsFn;
26
- exports.sortRowsFn = sortRowsFn.sortRowsFn;
27
- exports.groupRowsFn = groupRowsFn.groupRowsFn;
28
- exports.expandRowsFn = expandRowsFn.expandRowsFn;
29
- exports.createTable = createTable.createTable;
39
+ var render = function render(Comp, props) {
40
+ return !Comp ? null : isReactComponent(Comp) ? /*#__PURE__*/React__namespace.createElement(Comp, props) : Comp;
41
+ };
42
+
43
+ function isReactComponent(component) {
44
+ return isClassComponent(component) || typeof component === 'function' || isExoticComponent(component);
45
+ }
46
+
47
+ function isClassComponent(component) {
48
+ return typeof component === 'function' && function () {
49
+ var proto = Object.getPrototypeOf(component);
50
+ return proto.prototype && proto.prototype.isReactComponent;
51
+ }();
52
+ }
53
+
54
+ function isExoticComponent(component) {
55
+ return typeof component === 'object' && typeof component.$$typeof === 'symbol' && ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description);
56
+ }
57
+
58
+ var _init = tableCore.init({
59
+ render: render
60
+ }),
61
+ createTable = _init.createTable,
62
+ createTableFactory = _init.createTableFactory;
63
+ function useTableInstance(table, options) {
64
+ var _table$__options;
65
+
66
+ // Compose in the generic options to the user options
67
+ var resolvedOptions = _rollupPluginBabelHelpers["extends"]({}, (_table$__options = table.__options) != null ? _table$__options : {}, {
68
+ state: {},
69
+ // Dummy state
70
+ onStateChange: function onStateChange() {},
71
+ // noop
72
+ render: render
73
+ }, options); // Create a new table instance and store it in state
74
+
75
+
76
+ var _React$useState = React__namespace.useState(function () {
77
+ return tableCore.createTableInstance(resolvedOptions);
78
+ }),
79
+ instance = _React$useState[0]; // By default, manage table state here using the instance's initial state
80
+
81
+
82
+ var _React$useState2 = React__namespace.useState(function () {
83
+ return instance.initialState;
84
+ }),
85
+ state = _React$useState2[0],
86
+ setState = _React$useState2[1]; // Compose the default state above with any user state. This will allow the user
87
+ // to only control a subset of the state if desired.
88
+
89
+
90
+ instance.setOptions(function (prev) {
91
+ return _rollupPluginBabelHelpers["extends"]({}, prev, options, {
92
+ state: _rollupPluginBabelHelpers["extends"]({}, state, options.state),
93
+ // Similarly, we'll maintain both our internal state and any user-provided
94
+ // state.
95
+ onStateChange: function onStateChange(updater) {
96
+ setState(updater);
97
+ options.onStateChange == null ? void 0 : options.onStateChange(updater);
98
+ }
99
+ });
100
+ });
101
+ React__namespace.useLayoutEffect(function () {
102
+ instance.willUpdate();
103
+ });
104
+ return instance;
105
+ }
106
+
107
+ exports.createTable = createTable;
108
+ exports.createTableFactory = createTableFactory;
109
+ exports.render = render;
110
+ exports.useTableInstance = useTableInstance;
111
+ Object.keys(tableCore).forEach(function (k) {
112
+ if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
113
+ enumerable: true,
114
+ get: function () { return tableCore[k]; }
115
+ });
116
+ });
30
117
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.tsx"],"sourcesContent":["import * as React from 'react'\nexport * from '@tanstack/table-core'\n\nimport {\n createTableInstance,\n PartialKeys,\n Options,\n TableInstance,\n CreateTableFactoryOptions,\n Table,\n init,\n AnyGenerics,\n} from '@tanstack/table-core'\n\nexport type Renderable<TProps> =\n | React.ReactNode\n | React.FunctionComponent<TProps>\n | React.Component<TProps>\n\nexport const render = <TProps extends {}>(\n Comp: Renderable<TProps>,\n props: TProps\n): React.ReactNode =>\n !Comp ? null : isReactComponent(Comp) ? <Comp {...props} /> : Comp\n\nexport type Render = typeof render\n\nfunction isReactComponent(component: unknown): component is React.FC {\n return (\n isClassComponent(component) ||\n typeof component === 'function' ||\n isExoticComponent(component)\n )\n}\n\nfunction isClassComponent(component: any) {\n return (\n typeof component === 'function' &&\n (() => {\n const proto = Object.getPrototypeOf(component)\n return proto.prototype && proto.prototype.isReactComponent\n })()\n )\n}\n\nfunction isExoticComponent(component: any) {\n return (\n typeof component === 'object' &&\n typeof component.$$typeof === 'symbol' &&\n ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description)\n )\n}\n\nconst { createTable, createTableFactory } = init({ render })\n\nexport { createTable, createTableFactory }\n\nexport function useTableInstance<TGenerics extends AnyGenerics>(\n table: Table<TGenerics>,\n options: PartialKeys<\n Omit<\n Options<TGenerics>,\n keyof CreateTableFactoryOptions<any, any, any, any>\n >,\n 'state' | 'onStateChange'\n >\n): TableInstance<TGenerics> {\n // Compose in the generic options to the user options\n const resolvedOptions: Options<TGenerics> = {\n ...(table.__options ?? {}),\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n render,\n ...options,\n }\n\n // Create a new table instance and store it in state\n const [instance] = React.useState(() =>\n createTableInstance<TGenerics>(resolvedOptions)\n )\n\n // By default, manage table state here using the instance's initial state\n const [state, setState] = React.useState(() => instance.initialState)\n\n // Compose the default state above with any user state. This will allow the user\n // to only control a subset of the state if desired.\n instance.setOptions(prev => ({\n ...prev,\n ...options,\n state: {\n ...state,\n ...options.state,\n },\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n setState(updater)\n options.onStateChange?.(updater)\n },\n }))\n\n React.useLayoutEffect(() => {\n instance.willUpdate()\n })\n\n return instance\n}\n"],"names":["render","Comp","props","isReactComponent","React","component","isClassComponent","isExoticComponent","proto","Object","getPrototypeOf","prototype","$$typeof","includes","description","init","createTable","createTableFactory","useTableInstance","table","options","resolvedOptions","__options","state","onStateChange","useState","createTableInstance","instance","initialState","setState","setOptions","prev","updater","useLayoutEffect","willUpdate"],"mappings":"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"}