@1money/component-ui 0.0.45 → 0.0.47

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 (57) hide show
  1. package/es/components/Table/Table.d.ts +2 -2
  2. package/es/components/Table/Table.js +25 -148
  3. package/es/components/Table/VirtualTable.d.ts +2 -2
  4. package/es/components/Table/VirtualTable.js +30 -143
  5. package/es/components/Table/core/useTableColumns.d.ts +21 -7
  6. package/es/components/Table/core/useTableColumns.js +65 -13
  7. package/es/components/Table/core/useTableDataPipeline.d.ts +13 -6
  8. package/es/components/Table/core/useTableDataPipeline.js +193 -27
  9. package/es/components/Table/core/useTableExpand.d.ts +2 -2
  10. package/es/components/Table/core/useTableSelection.d.ts +3 -5
  11. package/es/components/Table/core/useTableSelection.js +1 -1
  12. package/es/components/Table/core/useTableSetup.d.ts +42 -0
  13. package/es/components/Table/core/useTableSetup.js +175 -0
  14. package/es/components/Table/features/ExpandTrigger.js +2 -1
  15. package/es/components/Table/features/FilterTrigger.d.ts +9 -0
  16. package/es/components/Table/features/FilterTrigger.js +157 -0
  17. package/es/components/Table/features/SelectionColumn.d.ts +3 -2
  18. package/es/components/Table/features/SelectionColumn.js +19 -6
  19. package/es/components/Table/interface.d.ts +102 -21
  20. package/es/components/Table/renderers/BodyCell.d.ts +4 -4
  21. package/es/components/Table/renderers/BodyCell.js +1 -1
  22. package/es/components/Table/renderers/HeaderCell.d.ts +8 -4
  23. package/es/components/Table/renderers/HeaderCell.js +13 -3
  24. package/es/components/Table/style/Table.css +1 -1
  25. package/es/components/Tooltip/Tooltip.js +24 -19
  26. package/es/components/Tooltip/interface.d.ts +2 -0
  27. package/es/index.css +1 -1
  28. package/lib/components/Table/Table.d.ts +2 -2
  29. package/lib/components/Table/Table.js +24 -150
  30. package/lib/components/Table/VirtualTable.d.ts +2 -2
  31. package/lib/components/Table/VirtualTable.js +28 -144
  32. package/lib/components/Table/core/useTableColumns.d.ts +21 -7
  33. package/lib/components/Table/core/useTableColumns.js +65 -13
  34. package/lib/components/Table/core/useTableDataPipeline.d.ts +13 -6
  35. package/lib/components/Table/core/useTableDataPipeline.js +192 -26
  36. package/lib/components/Table/core/useTableExpand.d.ts +2 -2
  37. package/lib/components/Table/core/useTableSelection.d.ts +3 -5
  38. package/lib/components/Table/core/useTableSelection.js +1 -1
  39. package/lib/components/Table/core/useTableSetup.d.ts +42 -0
  40. package/lib/components/Table/core/useTableSetup.js +184 -0
  41. package/lib/components/Table/features/ExpandTrigger.js +2 -1
  42. package/lib/components/Table/features/FilterTrigger.d.ts +9 -0
  43. package/lib/components/Table/features/FilterTrigger.js +164 -0
  44. package/lib/components/Table/features/SelectionColumn.d.ts +3 -2
  45. package/lib/components/Table/features/SelectionColumn.js +19 -6
  46. package/lib/components/Table/interface.d.ts +102 -21
  47. package/lib/components/Table/renderers/BodyCell.d.ts +4 -4
  48. package/lib/components/Table/renderers/BodyCell.js +1 -1
  49. package/lib/components/Table/renderers/HeaderCell.d.ts +8 -4
  50. package/lib/components/Table/renderers/HeaderCell.js +13 -3
  51. package/lib/components/Table/style/Table.css +1 -1
  52. package/lib/components/Tooltip/Tooltip.js +24 -19
  53. package/lib/components/Tooltip/interface.d.ts +2 -0
  54. package/lib/index.css +1 -1
  55. package/package.json +1 -1
  56. package/scripts/mcp-server/examples.generated.json +126 -0
  57. package/scripts/mcp-server/index.generated.json +348 -14
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
1
2
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
3
  import { jsx as _jsx } from "react/jsx-runtime";
3
4
  import { useMemo } from 'react';
@@ -73,11 +74,11 @@ function makeSelectionTransform(config) {
73
74
  } : {}), {
74
75
  render: function render(_, record, index) {
75
76
  var recordKey = getRowKey(record, index);
76
- var checkboxProps = checkboxPropsMap.get(recordKey);
77
+ var rowProps = checkboxPropsMap.get(recordKey);
77
78
  return _jsx(SelectionControl, {
78
79
  type: selectionType,
79
80
  checked: mergedSelectedRowKeys.includes(recordKey),
80
- disabled: checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.disabled,
81
+ rowProps: rowProps,
81
82
  onChange: function onChange() {
82
83
  return triggerSelection(recordKey);
83
84
  }
@@ -86,21 +87,53 @@ function makeSelectionTransform(config) {
86
87
  })].concat(_toConsumableArray(columns));
87
88
  };
88
89
  }
89
- function makeSortTransform(config) {
90
+ function ariaSortFor(order) {
91
+ if (order === 'ascend') return 'ascending';
92
+ if (order === 'descend') return 'descending';
93
+ return 'none';
94
+ }
95
+ // Stable empty-filter reference. Without this, `filters[key] ?? []` creates a
96
+ // fresh `[]` on every render, which thrashes `FilterTrigger`'s
97
+ // `useEffect([selectedKeys])` and causes an infinite setState loop after
98
+ // confirm / reset.
99
+ var EMPTY_FILTER_VALUE = [];
100
+ function makeHeaderTransform(config) {
90
101
  var size = config.size,
91
102
  sorter = config.sorter,
92
- setSorter = config.setSorter;
103
+ setSorter = config.setSorter,
104
+ filters = config.filters,
105
+ setFilters = config.setFilters;
93
106
  return function (columns) {
94
107
  return columns.map(function (column) {
95
- var _a;
108
+ var _a, _b;
96
109
  if (isColumnGroup(column)) return column;
110
+ var isSortable = Boolean(column.sorter);
111
+ var activeOrder = sorter.columnKey === column.key ? (_a = sorter.order) !== null && _a !== void 0 ? _a : null : null;
112
+ var columnKey = column.key != null ? String(column.key) : undefined;
113
+ var filterSelected = columnKey != null ? (_b = filters[columnKey]) !== null && _b !== void 0 ? _b : EMPTY_FILTER_VALUE : EMPTY_FILTER_VALUE;
114
+ // Compose onHeaderCell so we don't clobber user-provided attributes.
115
+ var userOnHeaderCell = column.onHeaderCell;
116
+ var onHeaderCell = function onHeaderCell(col, index) {
117
+ var _a;
118
+ var userAttrs = (_a = userOnHeaderCell === null || userOnHeaderCell === void 0 ? void 0 : userOnHeaderCell(col, index)) !== null && _a !== void 0 ? _a : {};
119
+ return Object.assign(Object.assign({}, userAttrs), isSortable ? {
120
+ 'aria-sort': ariaSortFor(activeOrder)
121
+ } : null);
122
+ };
123
+ var onFilterChange = function onFilterChange(next) {
124
+ if (columnKey == null) return;
125
+ setFilters(function (current) {
126
+ return Object.assign(Object.assign({}, current), _defineProperty({}, columnKey, next.length ? next : null));
127
+ });
128
+ };
97
129
  return Object.assign(Object.assign({}, column), {
130
+ onHeaderCell: onHeaderCell,
98
131
  title: column.renderHeader ? column.renderHeader({
99
132
  column: column
100
133
  }) : _jsx(HeaderCell, {
101
134
  column: column,
102
135
  size: size,
103
- sortOrder: sorter.columnKey === column.key ? (_a = sorter.order) !== null && _a !== void 0 ? _a : null : null,
136
+ sortOrder: activeOrder,
104
137
  onSortClick: function onSortClick() {
105
138
  return setSorter(function (currentSorter) {
106
139
  return {
@@ -108,7 +141,9 @@ function makeSortTransform(config) {
108
141
  order: currentSorter.columnKey !== column.key || currentSorter.order === null ? 'ascend' : currentSorter.order === 'ascend' ? 'descend' : null
109
142
  };
110
143
  });
111
- }
144
+ },
145
+ filterSelected: filterSelected,
146
+ onFilterChange: onFilterChange
112
147
  })
113
148
  });
114
149
  });
@@ -153,6 +188,19 @@ function makeRenderTransform() {
153
188
  });
154
189
  };
155
190
  }
191
+ /**
192
+ * Returns columns ready to be passed to the rc-table kernel.
193
+ *
194
+ * The returned shape IS structurally the kernel's `ColumnsType<T>`:
195
+ * - Every leaf column's `render` is replaced by `makeRenderTransform`, which
196
+ * always returns a `ReactNode` (BodyCell handles `TableCellContentValue` /
197
+ * `TableRenderedCell` extras and emits ReactNode/RenderedCell).
198
+ * - Every leaf column's `title` is either a ReactNode or replaced by
199
+ * `<HeaderCell />`.
200
+ * Because TS can't track that those replacements have happened across the
201
+ * `transforms.reduce` chain, a single internal cast is required — call sites no
202
+ * longer need their own `as unknown as InternalColumnsType<T>` cast.
203
+ */
156
204
  export function useTableColumns(config) {
157
205
  var columns = config.columns,
158
206
  variant = config.variant,
@@ -168,6 +216,8 @@ export function useTableColumns(config) {
168
216
  triggerSelectAll = config.triggerSelectAll,
169
217
  sorter = config.sorter,
170
218
  setSorter = config.setSorter,
219
+ filters = config.filters,
220
+ setFilters = config.setFilters,
171
221
  size = config.size,
172
222
  getRowKey = config.getRowKey;
173
223
  return useMemo(function () {
@@ -175,17 +225,19 @@ export function useTableColumns(config) {
175
225
  if (expandable && expandable.showExpandColumn !== false) {
176
226
  transforms.push(makeExpandTransform(config));
177
227
  }
178
- if (rowSelection) {
179
- transforms.push(makeSelectionTransform(config));
228
+ var selectionTransform = rowSelection ? makeSelectionTransform(config) : null;
229
+ if (selectionTransform) {
230
+ transforms.push(selectionTransform);
180
231
  }
181
- transforms.push(makeSortTransform(config));
232
+ transforms.push(makeHeaderTransform(config));
182
233
  transforms.push(makeRenderTransform());
183
234
  if (variant === 'stroke') {
184
235
  transforms.push(makeSpacerTransform());
185
236
  }
186
- return transforms.reduce(function (cols, fn) {
237
+ var transformed = transforms.reduce(function (cols, fn) {
187
238
  return fn(cols);
188
239
  }, columns);
189
- }, [columns, variant, expandable, rowSelection, mergedExpandedRowKeys, mergedSelectedRowKeys, checkboxPropsMap, isAllSelected, isIndeterminate, triggerExpand, triggerSelection, triggerSelectAll, sorter, setSorter, size, getRowKey]);
240
+ return transformed;
241
+ }, [columns, variant, expandable, rowSelection, mergedExpandedRowKeys, mergedSelectedRowKeys, checkboxPropsMap, isAllSelected, isIndeterminate, triggerExpand, triggerSelection, triggerSelectAll, sorter, setSorter, filters, setFilters, size, getRowKey]);
190
242
  }
191
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZUNvbHVtbnMuanMiLCJjb21wb25lbnRzL1RhYmxlL3NyYy9jb21wb25lbnRzL1RhYmxlL2NvcmUvdXNlVGFibGVDb2x1bW5zLnRzeCJdLCJuYW1lcyI6WyJqc3giLCJfanN4IiwidXNlTWVtbyIsIlNlbGVjdGlvbkNvbnRyb2wiLCJTZWxlY3Rpb25IZWFkZXJDb250cm9sIiwiRXhwYW5kVHJpZ2dlciIsIkhlYWRlckNlbGwiLCJCb2R5Q2VsbCIsIlRBQkxFX0RFRkFVTFRfUFJFRklYIiwiaXNDb2x1bW5Hcm91cCIsImNvbCIsIkFycmF5IiwiaXNBcnJheSIsImNoaWxkcmVuIiwibWFrZUV4cGFuZFRyYW5zZm9ybSIsImNvbmZpZyIsImV4cGFuZGFibGUiLCJtZXJnZWRFeHBhbmRlZFJvd0tleXMiLCJ0cmlnZ2VyRXhwYW5kIiwiZ2V0Um93S2V5IiwiY3VzdG9tRXhwYW5kSWNvbiIsImV4cGFuZEljb24iLCJjb2x1bW5zIiwia2V5Iiwid2lkdGgiLCJyZW5kZXIiLCJfIiwicmVjb3JkIiwiaW5kZXgiLCJyZWNvcmRLZXkiLCJleHBhbmRlZCIsImluY2x1ZGVzIiwicHJlZml4Q2xzIiwib25FeHBhbmQiLCJyZWMiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwib25Ub2dnbGUiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJtYWtlU2VsZWN0aW9uVHJhbnNmb3JtIiwiX2EiLCJyb3dTZWxlY3Rpb24iLCJtZXJnZWRTZWxlY3RlZFJvd0tleXMiLCJjaGVja2JveFByb3BzTWFwIiwiaXNBbGxTZWxlY3RlZCIsImlzSW5kZXRlcm1pbmF0ZSIsInRyaWdnZXJTZWxlY3Rpb24iLCJ0cmlnZ2VyU2VsZWN0QWxsIiwic2VsZWN0aW9uVHlwZSIsInR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJjb2x1bW5XaWR0aCIsImZpeGVkIiwidW5kZWZpbmVkIiwicmVuZGVySGVhZGVyIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJvbkNoYW5nZSIsImNoZWNrYm94UHJvcHMiLCJnZXQiLCJkaXNhYmxlZCIsIm1ha2VTb3J0VHJhbnNmb3JtIiwic2l6ZSIsInNvcnRlciIsInNldFNvcnRlciIsIm1hcCIsImNvbHVtbiIsInRpdGxlIiwic29ydE9yZGVyIiwiY29sdW1uS2V5Iiwib3JkZXIiLCJvblNvcnRDbGljayIsImN1cnJlbnRTb3J0ZXIiLCJTUEFDRVJfQ09MVU1OX0NMUyIsIm1ha2VTcGFjZXJUcmFuc2Zvcm0iLCJjbGFzc05hbWUiLCJtYWtlUmVuZGVyVHJhbnNmb3JtIiwidmFsdWUiLCJ1c2VUYWJsZUNvbHVtbnMiLCJ2YXJpYW50IiwidHJhbnNmb3JtcyIsInNob3dFeHBhbmRDb2x1bW4iLCJwdXNoIiwicmVkdWNlIiwiY29scyIsImZuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsR0FBRyxJQUFJQyxJQUFJLFFBQVEsbUJBQW1CO0FDQS9DLFNBQVNDLE9BQU8sUUFBa0IsT0FBTztBQUN6QyxTQUFTQyxnQkFBZ0IsRUFBRUMsc0JBQXNCLFFBQVEsNkJBQTZCO0FBQ3RGLFNBQVNDLGFBQWEsUUFBUSwyQkFBMkI7QUFDekQsU0FBU0MsVUFBVSxRQUFRLHlCQUF5QjtBQUNwRCxTQUFTQyxRQUFRLFFBQVEsdUJBQXVCO0FBQ2hELFNBQVNDLG9CQUFvQixRQUFRLGNBQWM7QUFlbkQsU0FBU0MsYUFBYUEsQ0FBSUMsR0FBdUIsRUFBQTtFQUMvQyxPQUFPLFVBQVUsSUFBSUEsR0FBRyxJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBRUYsR0FBMkIsQ0FBQ0csUUFBUSxDQUFDO0FBQ2xGO0FBeUJBLFNBQVNDLG1CQUFtQkEsQ0FBSUMsTUFBZ0MsRUFBQTtFQUM5RCxJQUFRQyxVQUFVLEdBQXNERCxNQUFNLENBQXRFQyxVQUFVO0lBQUVDLHFCQUFxQixHQUErQkYsTUFBTSxDQUExREUscUJBQXFCO0lBQUVDLGFBQWEsR0FBZ0JILE1BQU0sQ0FBbkNHLGFBQWE7SUFBRUMsU0FBUyxHQUFLSixNQUFNLENBQXBCSSxTQUFT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QUNFLElBQUksQ0FBQ3JCLGlCQUFpQixDQUFDaEQsTUFBTSxDQUFDLENBQUM7SUFDMUNtRSxVQUFVLENBQUNFLElBQUksQ0FBQ04sbUJBQW1CLENBQUEsQ0FBSyxDQUFDO0lBQ3pDLElBQUlHLE9BQU8sS0FBSyxRQUFRLEVBQUU7TUFDeEJDLFVBQVUsQ0FBQ0UsSUFBSSxDQUFDUixtQkFBbUIsQ0FBQSxDQUFLLENBQUM7SUFDM0M7SUFFQSxPQUFPTSxVQUFVLENBQUNHLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUVDLEVBQUU7TUFBQSxPQUFLQSxFQUFFLENBQUNELElBQUksQ0FBQztJQUFBLEdBQUVoRSxPQUFPLENBQUM7RUFDM0QsQ0FBQyxFQUFFLENBQ0RBLE9BQU8sRUFDUDJELE9BQU8sRUFDUGpFLFVBQVUsRUFDVjBCLFlBQVksRUFDWnpCLHFCQUFxQixFQUNyQjBCLHFCQUFxQixFQUNyQkMsZ0JBQWdCLEVBQ2hCQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZjVCLGFBQWEsRUFDYjZCLGdCQUFnQixFQUNoQkMsZ0JBQWdCLEVBQ2hCaUIsTUFBTSxFQUNOQyxTQUFTLEVBQ1RGLElBQUksRUFDSjdDLFNBQVMsQ0FDVixDQUFDO0FBQ0oiLCJmaWxlIjoiY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlQ29sdW1ucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ29udHJvbCwgU2VsZWN0aW9uSGVhZGVyQ29udHJvbCB9IGZyb20gJy4uL2ZlYXR1cmVzL1NlbGVjdGlvbkNvbHVtbic7XG5pbXBvcnQgeyBFeHBhbmRUcmlnZ2VyIH0gZnJvbSAnLi4vZmVhdHVyZXMvRXhwYW5kVHJpZ2dlcic7XG5pbXBvcnQgeyBIZWFkZXJDZWxsIH0gZnJvbSAnLi4vcmVuZGVyZXJzL0hlYWRlckNlbGwnO1xuaW1wb3J0IHsgQm9keUNlbGwgfSBmcm9tICcuLi9yZW5kZXJlcnMvQm9keUNlbGwnO1xuaW1wb3J0IHsgVEFCTEVfREVGQVVMVF9QUkVGSVggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuZnVuY3Rpb24gaXNDb2x1bW5Hcm91cChjb2wpIHtcbiAgICByZXR1cm4gJ2NoaWxkcmVuJyBpbiBjb2wgJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pO1xufVxuZnVuY3Rpb24gbWFrZUV4cGFuZFRyYW5zZm9ybShjb25maWcpIHtcbiAgICBjb25zdCB7IGV4cGFuZGFibGUsIG1lcmdlZEV4cGFuZGVkUm93S2V5cywgdHJpZ2dlckV4cGFuZCwgZ2V0Um93S2V5IH0gPSBjb25maWc7XG4gICAgY29uc3QgY3VzdG9tRXhwYW5kSWNvbiA9IGV4cGFuZGFibGUgPT09IG51bGwgfHwgZXhwYW5kYWJsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhwYW5kYWJsZS5leHBhbmRJY29uO1xuICAgIHJldHVybiAoY29sdW1ucykgPT4gW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdfX2V4cGFuZF9fJyxcbiAgICAgICAgICAgIHdpZHRoOiA0OCxcbiAgICAgICAgICAgIHJlbmRlcjogKF8sIHJlY29yZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvcmRLZXkgPSBnZXRSb3dLZXkocmVjb3JkLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBtZXJnZWRFeHBhbmRlZFJvd0tleXMuaW5jbHVkZXMocmVjb3JkS2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoY3VzdG9tRXhwYW5kSWNvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VzdG9tRXhwYW5kSWNvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhDbHM6IFRBQkxFX0RFRkFVTFRfUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25FeHBhbmQ6IChyZWMsIGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJFeHBhbmQoZ2V0Um93S2V5KHJlYywgaW5kZXgpLCByZWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChFeHBhbmRUcmlnZ2VyLCB7IGV4cGFuZGVkOiBleHBhbmRlZCwgb25Ub2dnbGU6ICgpID0+IHRyaWdnZXJFeHBhbmQocmVjb3JkS2V5LCByZWNvcmQpIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmNvbHVtbnMsXG4gICAgXTtcbn1cbmZ1bmN0aW9uIG1ha2VTZWxlY3Rpb25UcmFuc2Zvcm0oY29uZmlnKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgcm93U2VsZWN0aW9uLCBtZXJnZWRTZWxlY3RlZFJvd0tleXMsIGNoZWNrYm94UHJvcHNNYXAsIGlzQWxsU2VsZWN0ZWQsIGlzSW5kZXRlcm1pbmF0ZSwgdHJpZ2dlclNlbGVjdGlvbiwgdHJpZ2dlclNlbGVjdEFsbCwgZ2V0Um93S2V5LCB9ID0gY29uZmlnO1xuICAgIGlmICghcm93U2VsZWN0aW9uKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzZWxlY3Rpb25UeXBlID0gKF9hID0gcm93U2VsZWN0aW9uLnR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdjaGVja2JveCc7XG4gICAgcmV0dXJuIChjb2x1bW5zKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGtleTogJ19fc2VsZWN0aW9uX18nLCB3aWR0aDogKF9hID0gcm93U2VsZWN0aW9uLmNvbHVtbldpZHRoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiA0OCwgZml4ZWQ6IHJvd1NlbGVjdGlvbi5maXhlZCA/ICdsZWZ0JyA6IHVuZGVmaW5lZCB9LCAoc2VsZWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94J1xuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJIZWFkZXI6ICgpID0+IChfanN4KFNlbGVjdGlvbkhlYWRlckNvbnRyb2wsIHsgY2hlY2tlZDogaXNBbGxTZWxlY3RlZCwgaW5kZXRlcm1pbmF0ZTogaXNJbmRldGVybWluYXRlLCBvbkNoYW5nZTogdHJpZ2dlclNlbGVjdEFsbCB9KSksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pKSwgeyByZW5kZXI6IChfLCByZWNvcmQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZEtleSA9IGdldFJvd0tleShyZWNvcmQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tib3hQcm9wcyA9IGNoZWNrYm94UHJvcHNNYXAuZ2V0KHJlY29yZEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChTZWxlY3Rpb25Db250cm9sLCB7IHR5cGU6IHNlbGVjdGlvblR5cGUsIGNoZWNrZWQ6IG1lcmdlZFNlbGVjdGVkUm93S2V5cy5pbmNsdWRlcyhyZWNvcmRLZXkpLCBkaXNhYmxlZDogY2hlY2tib3hQcm9wcyA9PT0gbnVsbCB8fCBjaGVja2JveFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGVja2JveFByb3BzLmRpc2FibGVkLCBvbkNoYW5nZTogKCkgPT4gdHJpZ2dlclNlbGVjdGlvbihyZWNvcmRLZXkpIH0pKTtcbiAgICAgICAgICAgICAgICB9IH0pLFxuICAgICAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgXTtcbiAgICB9O1xufVxuZnVuY3Rpb24gbWFrZVNvcnRUcmFuc2Zvcm0oY29uZmlnKSB7XG4gICAgY29uc3QgeyBzaXplLCBzb3J0ZXIsIHNldFNvcnRlciB9ID0gY29uZmlnO1xuICAgIHJldHVybiAoY29sdW1ucykgPT4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChpc0NvbHVtbkdyb3VwKGNvbHVtbikpXG4gICAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb2x1bW4pLCB7IHRpdGxlOiBjb2x1bW4ucmVuZGVySGVhZGVyXG4gICAgICAgICAgICAgICAgPyBjb2x1bW4ucmVuZGVySGVhZGVyKHsgY29sdW1uIH0pXG4gICAgICAgICAgICAgICAgOiAoX2pzeChIZWFkZXJDZWxsLCB7IGNvbHVtbjogY29sdW1uLCBzaXplOiBzaXplLCBzb3J0T3JkZXI6IHNvcnRlci5jb2x1bW5LZXkgPT09IGNvbHVtbi5rZXkgPyAoX2EgPSBzb3J0ZXIub3JkZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGwgOiBudWxsLCBvblNvcnRDbGljazogKCkgPT4gc2V0U29ydGVyKChjdXJyZW50U29ydGVyKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGN1cnJlbnRTb3J0ZXIuY29sdW1uS2V5ICE9PSBjb2x1bW4ua2V5IHx8IGN1cnJlbnRTb3J0ZXIub3JkZXIgPT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdhc2NlbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U29ydGVyLm9yZGVyID09PSAnYXNjZW5kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkZXNjZW5kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0pKSB9KSkgfSk7XG4gICAgfSk7XG59XG5jb25zdCBTUEFDRVJfQ09MVU1OX0NMUyA9ICdvbS1jb21wb25lbnQtdWktdGFibGUtY2VsbC0tc3BhY2VyJztcbmZ1bmN0aW9uIG1ha2VTcGFjZXJUcmFuc2Zvcm0oKSB7XG4gICAgcmV0dXJuIChjb2x1bW5zKSA9PiBbXG4gICAgICAgIHsga2V5OiAnX19zcGFjZXJfc3RhcnRfXycsIHdpZHRoOiAxNiwgdGl0bGU6ICcnLCBjbGFzc05hbWU6IFNQQUNFUl9DT0xVTU5fQ0xTLCByZW5kZXI6ICgpID0+IG51bGwgfSxcbiAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgeyBrZXk6ICdfX3NwYWNlcl9lbmRfXycsIHdpZHRoOiAxNiwgdGl0bGU6ICcnLCBjbGFzc05hbWU6IFNQQUNFUl9DT0xVTU5fQ0xTLCByZW5kZXI6ICgpID0+IG51bGwgfSxcbiAgICBdO1xufVxuZnVuY3Rpb24gbWFrZVJlbmRlclRyYW5zZm9ybSgpIHtcbiAgICByZXR1cm4gKGNvbHVtbnMpID0+IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGlzQ29sdW1uR3JvdXAoY29sdW1uKSlcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbHVtbiksIHsgcmVuZGVyOiAodmFsdWUsIHJlY29yZCwgaW5kZXgpID0+IEJvZHlDZWxsKHtcbiAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICByZWNvcmQ6IHJlY29yZCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIH0pIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRhYmxlQ29sdW1ucyhjb25maWcpIHtcbiAgICBjb25zdCB7IGNvbHVtbnMsIHZhcmlhbnQsIGV4cGFuZGFibGUsIHJvd1NlbGVjdGlvbiwgbWVyZ2VkRXhwYW5kZWRSb3dLZXlzLCBtZXJnZWRTZWxlY3RlZFJvd0tleXMsIGNoZWNrYm94UHJvcHNNYXAsIGlzQWxsU2VsZWN0ZWQsIGlzSW5kZXRlcm1pbmF0ZSwgdHJpZ2dlckV4cGFuZCwgdHJpZ2dlclNlbGVjdGlvbiwgdHJpZ2dlclNlbGVjdEFsbCwgc29ydGVyLCBzZXRTb3J0ZXIsIHNpemUsIGdldFJvd0tleSwgfSA9IGNvbmZpZztcbiAgICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybXMgPSBbXTtcbiAgICAgICAgaWYgKGV4cGFuZGFibGUgJiYgZXhwYW5kYWJsZS5zaG93RXhwYW5kQ29sdW1uICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdHJhbnNmb3Jtcy5wdXNoKG1ha2VFeHBhbmRUcmFuc2Zvcm0oY29uZmlnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgdHJhbnNmb3Jtcy5wdXNoKG1ha2VTZWxlY3Rpb25UcmFuc2Zvcm0oY29uZmlnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNmb3Jtcy5wdXNoKG1ha2VTb3J0VHJhbnNmb3JtKGNvbmZpZykpO1xuICAgICAgICB0cmFuc2Zvcm1zLnB1c2gobWFrZVJlbmRlclRyYW5zZm9ybSgpKTtcbiAgICAgICAgaWYgKHZhcmlhbnQgPT09ICdzdHJva2UnKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1zLnB1c2gobWFrZVNwYWNlclRyYW5zZm9ybSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhbnNmb3Jtcy5yZWR1Y2UoKGNvbHMsIGZuKSA9PiBmbihjb2xzKSwgY29sdW1ucyk7XG4gICAgfSwgW1xuICAgICAgICBjb2x1bW5zLFxuICAgICAgICB2YXJpYW50LFxuICAgICAgICBleHBhbmRhYmxlLFxuICAgICAgICByb3dTZWxlY3Rpb24sXG4gICAgICAgIG1lcmdlZEV4cGFuZGVkUm93S2V5cyxcbiAgICAgICAgbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLFxuICAgICAgICBjaGVja2JveFByb3BzTWFwLFxuICAgICAgICBpc0FsbFNlbGVjdGVkLFxuICAgICAgICBpc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgIHRyaWdnZXJFeHBhbmQsXG4gICAgICAgIHRyaWdnZXJTZWxlY3Rpb24sXG4gICAgICAgIHRyaWdnZXJTZWxlY3RBbGwsXG4gICAgICAgIHNvcnRlcixcbiAgICAgICAgc2V0U29ydGVyLFxuICAgICAgICBzaXplLFxuICAgICAgICBnZXRSb3dLZXksXG4gICAgXSk7XG59IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
243
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZUNvbHVtbnMuanMiLCJjb21wb25lbnRzL1RhYmxlL3NyYy9jb21wb25lbnRzL1RhYmxlL2NvcmUvdXNlVGFibGVDb2x1bW5zLnRzeCJdLCJuYW1lcyI6WyJqc3giLCJfanN4IiwidXNlTWVtbyIsIlNlbGVjdGlvbkNvbnRyb2wiLCJTZWxlY3Rpb25IZWFkZXJDb250cm9sIiwiRXhwYW5kVHJpZ2dlciIsIkhlYWRlckNlbGwiLCJCb2R5Q2VsbCIsIlRBQkxFX0RFRkFVTFRfUFJFRklYIiwiaXNDb2x1bW5Hcm91cCIsImNvbCIsIkFycmF5IiwiaXNBcnJheSIsImNoaWxkcmVuIiwibWFrZUV4cGFuZFRyYW5zZm9ybSIsImNvbmZpZyIsImV4cGFuZGFibGUiLCJtZXJnZWRFeHBhbmRlZFJvd0tleXMiLCJ0cmlnZ2VyRXhwYW5kIiwiZ2V0Um93S2V5IiwiY3VzdG9tRXhwYW5kSWNvbiIsImV4cGFuZEljb24iLCJjb2x1bW5zIiwia2V5Iiwid2lkdGgiLCJyZW5kZXIiLCJfIiwicmVjb3JkIiwiaW5kZXgiLCJyZWNvcmRLZXkiLCJleHBhbmRlZCIsImluY2x1ZGVzIiwicHJlZml4Q2xzIiwib25FeHBhbmQiLCJyZWMiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwib25Ub2dnbGUiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJtYWtlU2VsZWN0aW9uVHJhbnNmb3JtIiwiX2EiLCJyb3dTZWxlY3Rpb24iLCJtZXJnZWRTZWxlY3RlZFJvd0tleXMiLCJjaGVja2JveFByb3BzTWFwIiwiaXNBbGxTZWxlY3RlZCIsImlzSW5kZXRlcm1pbmF0ZSIsInRyaWdnZXJTZWxlY3Rpb24iLCJ0cmlnZ2VyU2VsZWN0QWxsIiwic2VsZWN0aW9uVHlwZSIsInR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJjb2x1bW5XaWR0aCIsImZpeGVkIiwidW5kZWZpbmVkIiwicmVuZGVySGVhZGVyIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJvbkNoYW5nZSIsInJvd1Byb3BzIiwiZ2V0IiwiYXJpYVNvcnRGb3IiLCJvcmRlciIsIkVNUFRZX0ZJTFRFUl9WQUxVRSIsIm1ha2VIZWFkZXJUcmFuc2Zvcm0iLCJzaXplIiwic29ydGVyIiwic2V0U29ydGVyIiwiZmlsdGVycyIsInNldEZpbHRlcnMiLCJtYXAiLCJjb2x1bW4iLCJfYiIsImlzU29ydGFibGUiLCJCb29sZWFuIiwiYWN0aXZlT3JkZXIiLCJjb2x1bW5LZXkiLCJTdHJpbmciLCJmaWx0ZXJTZWxlY3RlZCIsInVzZXJPbkhlYWRlckNlbGwiLCJvbkhlYWRlckNlbGwiLCJ1c2VyQXR0cnMiLCJvbkZpbHRlckNoYW5nZSIsIm5leHQiLCJjdXJyZW50IiwiX2RlZmluZVByb3BlcnR5IiwibGVuZ3RoIiwidGl0bGUiLCJzb3J0T3JkZXIiLCJvblNvcnRDbGljayIsImN1cnJlbnRTb3J0ZXIiLCJTUEFDRVJfQ09MVU1OX0NMUyIsIm1ha2VTcGFjZXJUcmFuc2Zvcm0iLCJjbGFzc05hbWUiLCJtYWtlUmVuZGVyVHJhbnNmb3JtIiwidmFsdWUiLCJ1c2VUYWJsZUNvbHVtbnMiLCJ2YXJpYW50IiwidHJhbnNmb3JtcyIsInNob3dFeHBhbmRDb2x1bW4iLCJwdXNoIiwic2VsZWN0aW9uVHJhbnNmb3JtIiwidHJhbnNmb3JtZWQiLCJyZWR1Y2UiLCJjb2xzIiwiZm4iXSwibWFwcGluZ3MiOiI7O0FBQUEsU0FBU0EsR0FBRyxJQUFJQyxJQUFJLFFBQVEsbUJBQW1CO0FDQS9DLFNBQVNDLE9BQU8sUUFBa0IsT0FBTztBQUN6QyxTQUFTQyxnQkFBZ0IsRUFBRUMsc0JBQXNCLFFBQVEsNkJBQTZCO0FBQ3RGLFNBQVNDLGFBQWEsUUFBUSwyQkFBMkI7QUFDekQsU0FBU0MsVUFBVSxRQUFRLHlCQUF5QjtBQUNwRCxTQUFTQyxRQUFRLFFBQVEsdUJBQXVCO0FBQ2hELFNBQVNDLG9CQUFvQixRQUFRLGNBQWM7QUFxQm5ELFNBQVNDLGFBQWFBLENBQ3BCQyxHQUF1QixFQUFBO0VBRXZCLE9BQU8s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a0IsRUFBRTtNQUN0QkgsVUFBVSxDQUFDRSxJQUFJLENBQUNDLGtCQUFrQixDQUFDO0lBQ3JDO0lBQ0FILFVBQVUsQ0FBQ0UsSUFBSSxDQUFDcEMsbUJBQW1CLENBQUNsRCxNQUFNLENBQUMsQ0FBQztJQUM1Q29GLFVBQVUsQ0FBQ0UsSUFBSSxDQUFDTixtQkFBbUIsQ0FBQSxDQUFLLENBQUM7SUFDekMsSUFBSUcsT0FBTyxLQUFLLFFBQVEsRUFBRTtNQUN4QkMsVUFBVSxDQUFDRSxJQUFJLENBQUNSLG1CQUFtQixDQUFBLENBQUssQ0FBQztJQUMzQztJQUVBLElBQU1VLFdBQVcsR0FBR0osVUFBVSxDQUFDSyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFQyxFQUFFO01BQUEsT0FBS0EsRUFBRSxDQUFDRCxJQUFJLENBQUM7SUFBQSxHQUFFbkYsT0FBTyxDQUFDO0lBQ3RFLE9BQU9pRixXQUFnRDtFQUN6RCxDQUFDLEVBQUUsQ0FDRGpGLE9BQU8sRUFDUDRFLE9BQU8sRUFDUGxGLFVBQVUsRUFDVjBCLFlBQVksRUFDWnpCLHFCQUFxQixFQUNyQjBCLHFCQUFxQixFQUNyQkMsZ0JBQWdCLEVBQ2hCQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZjVCLGFBQWEsRUFDYjZCLGdCQUFnQixFQUNoQkMsZ0JBQWdCLEVBQ2hCbUIsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLE9BQU8sRUFDUEMsVUFBVSxFQUNWSixJQUFJLEVBQ0ovQyxTQUFTLENBQ1YsQ0FBQztBQUNKIiwiZmlsZSI6ImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZUNvbHVtbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNlbGVjdGlvbkNvbnRyb2wsIFNlbGVjdGlvbkhlYWRlckNvbnRyb2wgfSBmcm9tICcuLi9mZWF0dXJlcy9TZWxlY3Rpb25Db2x1bW4nO1xuaW1wb3J0IHsgRXhwYW5kVHJpZ2dlciB9IGZyb20gJy4uL2ZlYXR1cmVzL0V4cGFuZFRyaWdnZXInO1xuaW1wb3J0IHsgSGVhZGVyQ2VsbCB9IGZyb20gJy4uL3JlbmRlcmVycy9IZWFkZXJDZWxsJztcbmltcG9ydCB7IEJvZHlDZWxsIH0gZnJvbSAnLi4vcmVuZGVyZXJzL0JvZHlDZWxsJztcbmltcG9ydCB7IFRBQkxFX0RFRkFVTFRfUFJFRklYIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmZ1bmN0aW9uIGlzQ29sdW1uR3JvdXAoY29sKSB7XG4gICAgcmV0dXJuICdjaGlsZHJlbicgaW4gY29sICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIG1ha2VFeHBhbmRUcmFuc2Zvcm0oY29uZmlnKSB7XG4gICAgY29uc3QgeyBleHBhbmRhYmxlLCBtZXJnZWRFeHBhbmRlZFJvd0tleXMsIHRyaWdnZXJFeHBhbmQsIGdldFJvd0tleSB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGN1c3RvbUV4cGFuZEljb24gPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZXhwYW5kSWNvbjtcbiAgICByZXR1cm4gKGNvbHVtbnMpID0+IFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiAnX19leHBhbmRfXycsXG4gICAgICAgICAgICB3aWR0aDogNDgsXG4gICAgICAgICAgICByZW5kZXI6IChfLCByZWNvcmQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkS2V5ID0gZ2V0Um93S2V5KHJlY29yZCwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gbWVyZ2VkRXhwYW5kZWRSb3dLZXlzLmluY2x1ZGVzKHJlY29yZEtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGN1c3RvbUV4cGFuZEljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbUV4cGFuZEljb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4Q2xzOiBUQUJMRV9ERUZBVUxUX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXhwYW5kOiAocmVjLCBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXhwYW5kKGdldFJvd0tleShyZWMsIGluZGV4KSwgcmVjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKF9qc3goRXhwYW5kVHJpZ2dlciwgeyBleHBhbmRlZDogZXhwYW5kZWQsIG9uVG9nZ2xlOiAoKSA9PiB0cmlnZ2VyRXhwYW5kKHJlY29yZEtleSwgcmVjb3JkKSB9KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAuLi5jb2x1bW5zLFxuICAgIF07XG59XG5mdW5jdGlvbiBtYWtlU2VsZWN0aW9uVHJhbnNmb3JtKGNvbmZpZykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IHJvd1NlbGVjdGlvbiwgbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLCBjaGVja2JveFByb3BzTWFwLCBpc0FsbFNlbGVjdGVkLCBpc0luZGV0ZXJtaW5hdGUsIHRyaWdnZXJTZWxlY3Rpb24sIHRyaWdnZXJTZWxlY3RBbGwsIGdldFJvd0tleSwgfSA9IGNvbmZpZztcbiAgICBpZiAoIXJvd1NlbGVjdGlvbilcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc2VsZWN0aW9uVHlwZSA9IChfYSA9IHJvd1NlbGVjdGlvbi50eXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnY2hlY2tib3gnO1xuICAgIHJldHVybiAoY29sdW1ucykgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBrZXk6ICdfX3NlbGVjdGlvbl9fJywgd2lkdGg6IChfYSA9IHJvd1NlbGVjdGlvbi5jb2x1bW5XaWR0aCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogNDgsIGZpeGVkOiByb3dTZWxlY3Rpb24uZml4ZWQgPyAnbGVmdCcgOiB1bmRlZmluZWQgfSwgKHNlbGVjdGlvblR5cGUgPT09ICdjaGVja2JveCdcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySGVhZGVyOiAoKSA9PiAoX2pzeChTZWxlY3Rpb25IZWFkZXJDb250cm9sLCB7IGNoZWNrZWQ6IGlzQWxsU2VsZWN0ZWQsIGluZGV0ZXJtaW5hdGU6IGlzSW5kZXRlcm1pbmF0ZSwgb25DaGFuZ2U6IHRyaWdnZXJTZWxlY3RBbGwgfSkpLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9KSksIHsgcmVuZGVyOiAoXywgcmVjb3JkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmRLZXkgPSBnZXRSb3dLZXkocmVjb3JkLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd1Byb3BzID0gY2hlY2tib3hQcm9wc01hcC5nZXQocmVjb3JkS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfanN4KFNlbGVjdGlvbkNvbnRyb2wsIHsgdHlwZTogc2VsZWN0aW9uVHlwZSwgY2hlY2tlZDogbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLmluY2x1ZGVzKHJlY29yZEtleSksIHJvd1Byb3BzOiByb3dQcm9wcywgb25DaGFuZ2U6ICgpID0+IHRyaWdnZXJTZWxlY3Rpb24ocmVjb3JkS2V5KSB9KSk7XG4gICAgICAgICAgICAgICAgfSB9KSxcbiAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgIF07XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGFyaWFTb3J0Rm9yKG9yZGVyKSB7XG4gICAgaWYgKG9yZGVyID09PSAnYXNjZW5kJylcbiAgICAgICAgcmV0dXJuICdhc2NlbmRpbmcnO1xuICAgIGlmIChvcmRlciA9PT0gJ2Rlc2NlbmQnKVxuICAgICAgICByZXR1cm4gJ2Rlc2NlbmRpbmcnO1xuICAgIHJldHVybiAnbm9uZSc7XG59XG4vLyBTdGFibGUgZW1wdHktZmlsdGVyIHJlZmVyZW5jZS4gV2l0aG91dCB0aGlzLCBgZmlsdGVyc1trZXldID8/IFtdYCBjcmVhdGVzIGFcbi8vIGZyZXNoIGBbXWAgb24gZXZlcnkgcmVuZGVyLCB3aGljaCB0aHJhc2hlcyBgRmlsdGVyVHJpZ2dlcmAnc1xuLy8gYHVzZUVmZmVjdChbc2VsZWN0ZWRLZXlzXSlgIGFuZCBjYXVzZXMgYW4gaW5maW5pdGUgc2V0U3RhdGUgbG9vcCBhZnRlclxuLy8gY29uZmlybSAvIHJlc2V0LlxuY29uc3QgRU1QVFlfRklMVEVSX1ZBTFVFID0gW107XG5mdW5jdGlvbiBtYWtlSGVhZGVyVHJhbnNmb3JtKGNvbmZpZykge1xuICAgIGNvbnN0IHsgc2l6ZSwgc29ydGVyLCBzZXRTb3J0ZXIsIGZpbHRlcnMsIHNldEZpbHRlcnMgfSA9IGNvbmZpZztcbiAgICByZXR1cm4gKGNvbHVtbnMpID0+IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKGlzQ29sdW1uR3JvdXAoY29sdW1uKSlcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIGNvbnN0IGlzU29ydGFibGUgPSBCb29sZWFuKGNvbHVtbi5zb3J0ZXIpO1xuICAgICAgICBjb25zdCBhY3RpdmVPcmRlciA9IHNvcnRlci5jb2x1bW5LZXkgPT09IGNvbHVtbi5rZXkgPyAoX2EgPSBzb3J0ZXIub3JkZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGwgOiBudWxsO1xuICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW4ua2V5ICE9IG51bGwgPyBTdHJpbmcoY29sdW1uLmtleSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGZpbHRlclNlbGVjdGVkID0gY29sdW1uS2V5ICE9IG51bGwgPyAoKF9iID0gZmlsdGVyc1tjb2x1bW5LZXldKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9GSUxURVJfVkFMVUUpIDogRU1QVFlfRklMVEVSX1ZBTFVFO1xuICAgICAgICAvLyBDb21wb3NlIG9uSGVhZGVyQ2VsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHVzZXItcHJvdmlkZWQgYXR0cmlidXRlcy5cbiAgICAgICAgY29uc3QgdXNlck9uSGVhZGVyQ2VsbCA9IGNvbHVtbi5vbkhlYWRlckNlbGw7XG4gICAgICAgIGNvbnN0IG9uSGVhZGVyQ2VsbCA9IChjb2wsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB1c2VyQXR0cnMgPSAoX2EgPSB1c2VyT25IZWFkZXJDZWxsID09PSBudWxsIHx8IHVzZXJPbkhlYWRlckNlbGwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHVzZXJPbkhlYWRlckNlbGwoY29sLCBpbmRleCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdXNlckF0dHJzKSwgKGlzU29ydGFibGUgPyB7ICdhcmlhLXNvcnQnOiBhcmlhU29ydEZvcihhY3RpdmVPcmRlcikgfSA6IG51bGwpKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25GaWx0ZXJDaGFuZ2UgPSAobmV4dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbktleSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNldEZpbHRlcnMoKGN1cnJlbnQpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpLCB7IFtjb2x1bW5LZXldOiBuZXh0Lmxlbmd0aCA/IG5leHQgOiBudWxsIH0pKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbHVtbiksIHsgb25IZWFkZXJDZWxsLCB0aXRsZTogY29sdW1uLnJlbmRlckhlYWRlclxuICAgICAgICAgICAgICAgID8gY29sdW1uLnJlbmRlckhlYWRlcih7IGNvbHVtbiB9KVxuICAgICAgICAgICAgICAgIDogKF9qc3goSGVhZGVyQ2VsbCwgeyBjb2x1bW46IGNvbHVtbiwgc2l6ZTogc2l6ZSwgc29ydE9yZGVyOiBhY3RpdmVPcmRlciwgb25Tb3J0Q2xpY2s6ICgpID0+IHNldFNvcnRlcigoY3VycmVudFNvcnRlcikgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBjdXJyZW50U29ydGVyLmNvbHVtbktleSAhPT0gY29sdW1uLmtleSB8fCBjdXJyZW50U29ydGVyLm9yZGVyID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYXNjZW5kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNvcnRlci5vcmRlciA9PT0gJ2FzY2VuZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGVzY2VuZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB9KSksIGZpbHRlclNlbGVjdGVkOiBmaWx0ZXJTZWxlY3RlZCwgb25GaWx0ZXJDaGFuZ2U6IG9uRmlsdGVyQ2hhbmdlIH0pKSB9KTtcbiAgICB9KTtcbn1cbmNvbnN0IFNQQUNFUl9DT0xVTU5fQ0xTID0gJ29tLWNvbXBvbmVudC11aS10YWJsZS1jZWxsLS1zcGFjZXInO1xuZnVuY3Rpb24gbWFrZVNwYWNlclRyYW5zZm9ybSgpIHtcbiAgICByZXR1cm4gKGNvbHVtbnMpID0+IFtcbiAgICAgICAgeyBrZXk6ICdfX3NwYWNlcl9zdGFydF9fJywgd2lkdGg6IDE2LCB0aXRsZTogJycsIGNsYXNzTmFtZTogU1BBQ0VSX0NPTFVNTl9DTFMsIHJlbmRlcjogKCkgPT4gbnVsbCB9LFxuICAgICAgICAuLi5jb2x1bW5zLFxuICAgICAgICB7IGtleTogJ19fc3BhY2VyX2VuZF9fJywgd2lkdGg6IDE2LCB0aXRsZTogJycsIGNsYXNzTmFtZTogU1BBQ0VSX0NPTFVNTl9DTFMsIHJlbmRlcjogKCkgPT4gbnVsbCB9LFxuICAgIF07XG59XG5mdW5jdGlvbiBtYWtlUmVuZGVyVHJhbnNmb3JtKCkge1xuICAgIHJldHVybiAoY29sdW1ucykgPT4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoaXNDb2x1bW5Hcm91cChjb2x1bW4pKVxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29sdW1uKSwgeyByZW5kZXI6ICh2YWx1ZSwgcmVjb3JkLCBpbmRleCkgPT4gQm9keUNlbGwoe1xuICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICB9KSB9KTtcbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBjb2x1bW5zIHJlYWR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcmMtdGFibGUga2VybmVsLlxuICpcbiAqIFRoZSByZXR1cm5lZCBzaGFwZSBJUyBzdHJ1Y3R1cmFsbHkgdGhlIGtlcm5lbCdzIGBDb2x1bW5zVHlwZTxUPmA6XG4gKiAgIC0gRXZlcnkgbGVhZiBjb2x1bW4ncyBgcmVuZGVyYCBpcyByZXBsYWNlZCBieSBgbWFrZVJlbmRlclRyYW5zZm9ybWAsIHdoaWNoXG4gKiAgICAgYWx3YXlzIHJldHVybnMgYSBgUmVhY3ROb2RlYCAoQm9keUNlbGwgaGFuZGxlcyBgVGFibGVDZWxsQ29udGVudFZhbHVlYCAvXG4gKiAgICAgYFRhYmxlUmVuZGVyZWRDZWxsYCBleHRyYXMgYW5kIGVtaXRzIFJlYWN0Tm9kZS9SZW5kZXJlZENlbGwpLlxuICogICAtIEV2ZXJ5IGxlYWYgY29sdW1uJ3MgYHRpdGxlYCBpcyBlaXRoZXIgYSBSZWFjdE5vZGUgb3IgcmVwbGFjZWQgYnlcbiAqICAgICBgPEhlYWRlckNlbGwgLz5gLlxuICogQmVjYXVzZSBUUyBjYW4ndCB0cmFjayB0aGF0IHRob3NlIHJlcGxhY2VtZW50cyBoYXZlIGhhcHBlbmVkIGFjcm9zcyB0aGVcbiAqIGB0cmFuc2Zvcm1zLnJlZHVjZWAgY2hhaW4sIGEgc2luZ2xlIGludGVybmFsIGNhc3QgaXMgcmVxdWlyZWQg4oCUIGNhbGwgc2l0ZXMgbm9cbiAqIGxvbmdlciBuZWVkIHRoZWlyIG93biBgYXMgdW5rbm93biBhcyBJbnRlcm5hbENvbHVtbnNUeXBlPFQ+YCBjYXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVGFibGVDb2x1bW5zKGNvbmZpZykge1xuICAgIGNvbnN0IHsgY29sdW1ucywgdmFyaWFudCwgZXhwYW5kYWJsZSwgcm93U2VsZWN0aW9uLCBtZXJnZWRFeHBhbmRlZFJvd0tleXMsIG1lcmdlZFNlbGVjdGVkUm93S2V5cywgY2hlY2tib3hQcm9wc01hcCwgaXNBbGxTZWxlY3RlZCwgaXNJbmRldGVybWluYXRlLCB0cmlnZ2VyRXhwYW5kLCB0cmlnZ2VyU2VsZWN0aW9uLCB0cmlnZ2VyU2VsZWN0QWxsLCBzb3J0ZXIsIHNldFNvcnRlciwgZmlsdGVycywgc2V0RmlsdGVycywgc2l6ZSwgZ2V0Um93S2V5LCB9ID0gY29uZmlnO1xuICAgIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtcyA9IFtdO1xuICAgICAgICBpZiAoZXhwYW5kYWJsZSAmJiBleHBhbmRhYmxlLnNob3dFeHBhbmRDb2x1bW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1zLnB1c2gobWFrZUV4cGFuZFRyYW5zZm9ybShjb25maWcpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3Rpb25UcmFuc2Zvcm0gPSByb3dTZWxlY3Rpb24gPyBtYWtlU2VsZWN0aW9uVHJhbnNmb3JtKGNvbmZpZykgOiBudWxsO1xuICAgICAgICBpZiAoc2VsZWN0aW9uVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1zLnB1c2goc2VsZWN0aW9uVHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2Zvcm1zLnB1c2gobWFrZUhlYWRlclRyYW5zZm9ybShjb25maWcpKTtcbiAgICAgICAgdHJhbnNmb3Jtcy5wdXNoKG1ha2VSZW5kZXJUcmFuc2Zvcm0oKSk7XG4gICAgICAgIGlmICh2YXJpYW50ID09PSAnc3Ryb2tlJykge1xuICAgICAgICAgICAgdHJhbnNmb3Jtcy5wdXNoKG1ha2VTcGFjZXJUcmFuc2Zvcm0oKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1zLnJlZHVjZSgoY29scywgZm4pID0+IGZuKGNvbHMpLCBjb2x1bW5zKTtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICAgIH0sIFtcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgdmFyaWFudCxcbiAgICAgICAgZXhwYW5kYWJsZSxcbiAgICAgICAgcm93U2VsZWN0aW9uLFxuICAgICAgICBtZXJnZWRFeHBhbmRlZFJvd0tleXMsXG4gICAgICAgIG1lcmdlZFNlbGVjdGVkUm93S2V5cyxcbiAgICAgICAgY2hlY2tib3hQcm9wc01hcCxcbiAgICAgICAgaXNBbGxTZWxlY3RlZCxcbiAgICAgICAgaXNJbmRldGVybWluYXRlLFxuICAgICAgICB0cmlnZ2VyRXhwYW5kLFxuICAgICAgICB0cmlnZ2VyU2VsZWN0aW9uLFxuICAgICAgICB0cmlnZ2VyU2VsZWN0QWxsLFxuICAgICAgICBzb3J0ZXIsXG4gICAgICAgIHNldFNvcnRlcixcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgc2V0RmlsdGVycyxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgZ2V0Um93S2V5LFxuICAgIF0pO1xufSIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -1,5 +1,5 @@
1
1
  import type { Key } from 'react';
2
- import type { TableChangeMeta, TableColumnType, TablePaginationConfig, TableSortOrder } from '../interface';
2
+ import type { TableChangeMeta, TableColumnType, TableFilterValue, TablePaginationConfig, TableRecord, TableSortOrder } from '../interface';
3
3
  export interface TableSorterFieldState {
4
4
  columnKey: Key;
5
5
  order: Exclude<TableSortOrder, null>;
@@ -8,30 +8,37 @@ export interface TableSorterState {
8
8
  columnKey?: Key;
9
9
  order?: TableSortOrder;
10
10
  }
11
+ /** Map of column key → currently selected filter values (or null if cleared). */
12
+ export type TableFilterState = Record<string, TableFilterValue | null>;
11
13
  export interface TablePipelineState {
12
14
  sorter: TableSorterState;
15
+ filters: TableFilterState;
13
16
  pagination: false | Required<Pick<TablePaginationConfig, 'current' | 'pageSize'>>;
14
17
  }
15
- export interface ApplyTablePipelineInput<T> extends TablePipelineState {
18
+ export interface ApplyTablePipelineInput<T extends TableRecord> extends Omit<TablePipelineState, 'filters'> {
16
19
  columns: TableColumnType<T>[];
17
20
  dataSource: T[];
21
+ /** Filter state keyed by column key. Defaults to an empty filter map. */
22
+ filters?: TableFilterState;
18
23
  }
19
- export interface UseTableDataPipelineInput<T> {
24
+ export interface UseTableDataPipelineInput<T extends TableRecord> {
20
25
  columns: TableColumnType<T>[];
21
26
  dataSource: T[];
22
27
  pagination?: false | TablePaginationConfig;
23
28
  onChange?: (meta: TableChangeMeta<T>) => void;
24
29
  }
25
- export interface UseTableDataPipelineResult<T> {
30
+ export interface UseTableDataPipelineResult<T extends TableRecord> {
26
31
  currentDataSource: T[];
27
32
  total: number;
28
33
  sorter: TableSorterState;
29
34
  sorterStates: TableSorterFieldState[];
35
+ filters: TableFilterState;
30
36
  pagination: false | {
31
37
  current: number;
32
38
  pageSize: number;
33
39
  };
34
40
  setSorter: (updater: TableSorterState | ((current: TableSorterState) => TableSorterState)) => void;
41
+ setFilters: (updater: TableFilterState | ((current: TableFilterState) => TableFilterState)) => void;
35
42
  setPagination: (updater: {
36
43
  current: number;
37
44
  pageSize: number;
@@ -43,8 +50,8 @@ export interface UseTableDataPipelineResult<T> {
43
50
  pageSize: number;
44
51
  })) => void;
45
52
  }
46
- export declare const applyTablePipeline: <T>({ columns, dataSource, sorter, pagination, }: ApplyTablePipelineInput<T>) => {
53
+ export declare const applyTablePipeline: <T extends TableRecord>({ columns, dataSource, sorter, filters, pagination, }: ApplyTablePipelineInput<T>) => {
47
54
  currentDataSource: T[];
48
55
  total: number;
49
56
  };
50
- export declare const useTableDataPipeline: <T>({ columns, dataSource, pagination, onChange, }: UseTableDataPipelineInput<T>) => UseTableDataPipelineResult<T>;
57
+ export declare const useTableDataPipeline: <T extends TableRecord>({ columns, dataSource, pagination, onChange, }: UseTableDataPipelineInput<T>) => UseTableDataPipelineResult<T>;