@1money/component-ui 0.0.70 → 0.0.71

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 (201) hide show
  1. package/es/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +3 -2
  2. package/es/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +2 -2
  3. package/es/business/Select/Network/NetworkSelect.js +2 -2
  4. package/es/components/Accordion/Accordion.js +3 -2
  5. package/es/components/Calendar/Calendar.js +3 -2
  6. package/es/components/Carousel/Carousel.js +3 -2
  7. package/es/components/Checkbox/BaseCheckbox.js +3 -2
  8. package/es/components/Checkbox/Checkbox.js +2 -2
  9. package/es/components/Checkbox/CheckboxGroup.js +3 -2
  10. package/es/components/CoachMark/CoachMark.js +3 -2
  11. package/es/components/Copy/Copy.js +2 -2
  12. package/es/components/Dialog/Dialog.js +2 -2
  13. package/es/components/Drawer/Drawer.js +2 -2
  14. package/es/components/Input/Amount/Amount.js +2 -2
  15. package/es/components/Input/Input/Input.js +3 -2
  16. package/es/components/Input/Mask/Mask.js +3 -2
  17. package/es/components/Input/OTP/OTP.js +3 -2
  18. package/es/components/Input/Password/Password.js +3 -2
  19. package/es/components/Input/Search/Search.js +3 -2
  20. package/es/components/Input/TextArea/TextArea.js +3 -2
  21. package/es/components/Input/Trade/Trade.js +2 -2
  22. package/es/components/Input/useAmountInput.js +4 -2
  23. package/es/components/Input/useSyncRef.js +2 -2
  24. package/es/components/Navigation/Nav.js +2 -2
  25. package/es/components/Navigation/Navigation.js +5 -2
  26. package/es/components/Pagination/Pagination.js +2 -2
  27. package/es/components/Pagination/usePagination.js +3 -2
  28. package/es/components/Popconfirm/Popconfirm.js +2 -2
  29. package/es/components/Portal/Portal.js +2 -2
  30. package/es/components/ProForm/ProForm.js +6 -3
  31. package/es/components/ProForm/ProFormGroup.js +2 -2
  32. package/es/components/ProForm/ProFormList.js +3 -2
  33. package/es/components/ProForm/Submitter.js +2 -2
  34. package/es/components/ProForm/core/constants.d.ts +6 -0
  35. package/es/components/ProForm/core/constants.js +7 -1
  36. package/es/components/ProForm/core/hooks/useForm.js +25 -195
  37. package/es/components/ProForm/core/hooks/useFormCore.js +14 -142
  38. package/es/components/ProForm/core/pathUtils.d.ts +6 -0
  39. package/es/components/ProForm/core/pathUtils.js +59 -0
  40. package/es/components/ProForm/core/runRules.d.ts +13 -0
  41. package/es/components/ProForm/core/runRules.js +186 -0
  42. package/es/components/ProForm/core/useFormItem.js +10 -28
  43. package/es/components/ProForm/fields/createProFormField.js +43 -57
  44. package/es/components/ProForm/hooks/useFieldRequest.js +7 -5
  45. package/es/components/ProForm/layouts/QueryFilter.js +3 -2
  46. package/es/components/ProForm/layouts/useOverlayForm.js +23 -21
  47. package/es/components/ProForm/utils.d.ts +2 -2
  48. package/es/components/ProForm/utils.js +5 -51
  49. package/es/components/ProTable/ProTable.js +3 -2
  50. package/es/components/ProTable/core/useAwaitableReload.js +3 -2
  51. package/es/components/ProTable/useFetchData.js +4 -2
  52. package/es/components/Radio/Radio.js +3 -2
  53. package/es/components/Radio/RadioGroup.js +3 -2
  54. package/es/components/ResizeObserver/useResizeObserver.js +2 -2
  55. package/es/components/Segment/Segment.js +4 -2
  56. package/es/components/Select/Select.js +3 -2
  57. package/es/components/Select/SelectCustom.js +2 -2
  58. package/es/components/Select/useSelectShell.js +3 -2
  59. package/es/components/Slider/Slider.js +3 -2
  60. package/es/components/Switch/Switch.js +3 -2
  61. package/es/components/Table/Table.js +14 -28
  62. package/es/components/Table/VirtualTable.js +18 -28
  63. package/es/components/Table/core/columnUtil.d.ts +9 -0
  64. package/es/components/Table/core/columnUtil.js +34 -0
  65. package/es/components/Table/core/useTableColumns.d.ts +4 -13
  66. package/es/components/Table/core/useTableColumns.js +55 -24
  67. package/es/components/Table/core/useTableDataPipeline.d.ts +11 -16
  68. package/es/components/Table/core/useTableDataPipeline.js +66 -73
  69. package/es/components/Table/core/useTableExpand.js +3 -2
  70. package/es/components/Table/core/useTableSelection.js +7 -4
  71. package/es/components/Table/core/useTableSetup.js +4 -2
  72. package/es/components/Table/features/ExpandTrigger.d.ts +9 -3
  73. package/es/components/Table/features/ExpandTrigger.js +14 -8
  74. package/es/components/Table/features/FilterTrigger.js +21 -17
  75. package/es/components/Table/features/SelectionColumn.d.ts +11 -6
  76. package/es/components/Table/features/SelectionColumn.js +12 -5
  77. package/es/components/Table/features/SortTrigger.d.ts +4 -2
  78. package/es/components/Table/features/SortTrigger.js +8 -3
  79. package/es/components/Table/internal/kernel/Body/MeasureCell.js +2 -2
  80. package/es/components/Table/internal/kernel/Cell/index.js +2 -2
  81. package/es/components/Table/internal/kernel/Table.js +3 -3
  82. package/es/components/Table/internal/kernel/VirtualTable/index.js +2 -2
  83. package/es/components/Table/internal/kernel/hooks/useRowInfo.js +2 -2
  84. package/es/components/Table/internal/kernel/selector-context/context.js +3 -3
  85. package/es/components/Table/renderers/HeaderCell.js +3 -2
  86. package/es/components/Table/renderers/TableShell.d.ts +13 -0
  87. package/es/components/Table/renderers/TableShell.js +25 -0
  88. package/es/components/Table/style/Table.css +3 -0
  89. package/es/components/Tabs/Tabs.js +4 -2
  90. package/es/components/Tooltip/Tooltip.js +3 -2
  91. package/es/components/Tour/Tour.js +3 -2
  92. package/es/components/Trigger/Trigger.js +3 -2
  93. package/es/components/Typography/Typography.js +2 -2
  94. package/es/components/Typography/useTypographyEnhancements.js +3 -2
  95. package/es/components/Upload/Upload.js +2 -2
  96. package/es/components/Upload/UploadFileBar.js +2 -2
  97. package/es/components/VirtualList/VirtualList.js +3 -2
  98. package/es/components/VirtualList/hooks/useMobileTouchMove.js +2 -2
  99. package/es/components/VirtualList/hooks/useScrollTo.js +2 -2
  100. package/es/index.css +1 -1
  101. package/lib/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +9 -8
  102. package/lib/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +3 -3
  103. package/lib/business/Select/Network/NetworkSelect.js +3 -3
  104. package/lib/components/Accordion/Accordion.js +5 -4
  105. package/lib/components/Calendar/Calendar.js +6 -5
  106. package/lib/components/Carousel/Carousel.js +5 -4
  107. package/lib/components/Checkbox/BaseCheckbox.js +5 -4
  108. package/lib/components/Checkbox/Checkbox.js +3 -3
  109. package/lib/components/Checkbox/CheckboxGroup.js +7 -6
  110. package/lib/components/CoachMark/CoachMark.js +7 -6
  111. package/lib/components/Copy/Copy.js +3 -3
  112. package/lib/components/Dialog/Dialog.js +6 -6
  113. package/lib/components/Drawer/Drawer.js +10 -10
  114. package/lib/components/Input/Amount/Amount.js +6 -5
  115. package/lib/components/Input/Input/Input.js +7 -6
  116. package/lib/components/Input/Mask/Mask.js +9 -8
  117. package/lib/components/Input/OTP/OTP.js +9 -8
  118. package/lib/components/Input/Password/Password.js +6 -5
  119. package/lib/components/Input/Search/Search.js +8 -7
  120. package/lib/components/Input/TextArea/TextArea.js +5 -4
  121. package/lib/components/Input/Trade/Trade.js +5 -4
  122. package/lib/components/Input/useAmountInput.js +13 -11
  123. package/lib/components/Input/useSyncRef.js +4 -3
  124. package/lib/components/Navigation/Nav.js +3 -3
  125. package/lib/components/Navigation/Navigation.js +10 -7
  126. package/lib/components/Pagination/Pagination.js +4 -3
  127. package/lib/components/Pagination/usePagination.js +7 -6
  128. package/lib/components/Popconfirm/Popconfirm.js +3 -3
  129. package/lib/components/Portal/Portal.js +4 -4
  130. package/lib/components/ProForm/ProForm.js +14 -11
  131. package/lib/components/ProForm/ProFormGroup.js +3 -3
  132. package/lib/components/ProForm/ProFormList.js +10 -9
  133. package/lib/components/ProForm/Submitter.js +4 -4
  134. package/lib/components/ProForm/core/constants.d.ts +6 -0
  135. package/lib/components/ProForm/core/constants.js +8 -2
  136. package/lib/components/ProForm/core/hooks/useForm.js +36 -206
  137. package/lib/components/ProForm/core/hooks/useFormCore.js +32 -160
  138. package/lib/components/ProForm/core/pathUtils.d.ts +6 -0
  139. package/lib/components/ProForm/core/pathUtils.js +68 -0
  140. package/lib/components/ProForm/core/runRules.d.ts +13 -0
  141. package/lib/components/ProForm/core/runRules.js +194 -0
  142. package/lib/components/ProForm/core/useFormItem.js +15 -33
  143. package/lib/components/ProForm/fields/createProFormField.js +42 -56
  144. package/lib/components/ProForm/hooks/useFieldRequest.js +9 -7
  145. package/lib/components/ProForm/layouts/QueryFilter.js +8 -7
  146. package/lib/components/ProForm/layouts/useOverlayForm.js +27 -27
  147. package/lib/components/ProForm/utils.d.ts +2 -2
  148. package/lib/components/ProForm/utils.js +20 -55
  149. package/lib/components/ProTable/ProTable.js +10 -9
  150. package/lib/components/ProTable/core/useAwaitableReload.js +6 -5
  151. package/lib/components/ProTable/useFetchData.js +15 -13
  152. package/lib/components/Radio/Radio.js +6 -5
  153. package/lib/components/Radio/RadioGroup.js +5 -4
  154. package/lib/components/ResizeObserver/useResizeObserver.js +4 -3
  155. package/lib/components/Segment/Segment.js +7 -5
  156. package/lib/components/Select/Select.js +23 -22
  157. package/lib/components/Select/SelectCustom.js +8 -8
  158. package/lib/components/Select/useSelectShell.js +5 -4
  159. package/lib/components/Slider/Slider.js +6 -5
  160. package/lib/components/Switch/Switch.js +5 -4
  161. package/lib/components/Table/Table.js +13 -27
  162. package/lib/components/Table/VirtualTable.js +17 -27
  163. package/lib/components/Table/core/columnUtil.d.ts +9 -0
  164. package/lib/components/Table/core/columnUtil.js +42 -0
  165. package/lib/components/Table/core/useTableColumns.d.ts +4 -13
  166. package/lib/components/Table/core/useTableColumns.js +57 -26
  167. package/lib/components/Table/core/useTableDataPipeline.d.ts +11 -16
  168. package/lib/components/Table/core/useTableDataPipeline.js +73 -80
  169. package/lib/components/Table/core/useTableExpand.js +6 -5
  170. package/lib/components/Table/core/useTableSelection.js +13 -10
  171. package/lib/components/Table/core/useTableSetup.js +8 -5
  172. package/lib/components/Table/features/ExpandTrigger.d.ts +9 -3
  173. package/lib/components/Table/features/ExpandTrigger.js +14 -8
  174. package/lib/components/Table/features/FilterTrigger.js +21 -17
  175. package/lib/components/Table/features/SelectionColumn.d.ts +11 -6
  176. package/lib/components/Table/features/SelectionColumn.js +12 -5
  177. package/lib/components/Table/features/SortTrigger.d.ts +4 -2
  178. package/lib/components/Table/features/SortTrigger.js +8 -3
  179. package/lib/components/Table/internal/kernel/Body/MeasureCell.js +3 -3
  180. package/lib/components/Table/internal/kernel/Cell/index.js +4 -4
  181. package/lib/components/Table/internal/kernel/Table.js +7 -6
  182. package/lib/components/Table/internal/kernel/VirtualTable/index.js +4 -4
  183. package/lib/components/Table/internal/kernel/hooks/useRowInfo.js +3 -3
  184. package/lib/components/Table/internal/kernel/selector-context/context.js +6 -5
  185. package/lib/components/Table/renderers/HeaderCell.js +3 -2
  186. package/lib/components/Table/renderers/TableShell.d.ts +13 -0
  187. package/lib/components/Table/renderers/TableShell.js +31 -0
  188. package/lib/components/Table/style/Table.css +3 -0
  189. package/lib/components/Tabs/Tabs.js +7 -5
  190. package/lib/components/Tooltip/Tooltip.js +5 -4
  191. package/lib/components/Tour/Tour.js +7 -6
  192. package/lib/components/Trigger/Trigger.js +5 -4
  193. package/lib/components/Typography/Typography.js +5 -4
  194. package/lib/components/Typography/useTypographyEnhancements.js +8 -7
  195. package/lib/components/Upload/Upload.js +5 -4
  196. package/lib/components/Upload/UploadFileBar.js +4 -3
  197. package/lib/components/VirtualList/VirtualList.js +8 -7
  198. package/lib/components/VirtualList/hooks/useMobileTouchMove.js +4 -3
  199. package/lib/components/VirtualList/hooks/useScrollTo.js +3 -3
  200. package/lib/index.css +1 -1
  201. package/package.json +2 -2
@@ -8,6 +8,7 @@ var _jsxRuntime = require("react/jsx-runtime");
8
8
  var _react = require("react");
9
9
  var _internal = require("./internal");
10
10
  var _useTableSetup = require("./core/useTableSetup");
11
+ var _TableShell = require("./renderers/TableShell");
11
12
  var __rest = void 0 && (void 0).__rest || function (s, e) {
12
13
  var t = {};
13
14
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
@@ -18,42 +19,31 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
18
19
  };
19
20
  var InternalRcVirtualTable = _internal.InternalRcVirtualTable;
20
21
  var VirtualTableInner = function VirtualTableInner(props, ref) {
22
+ // `scroll` / `listItemHeight` are VirtualTable-specific and stripped before
23
+ // setup so they don't leak onto the wrapper div via `wrapperHtmlProps`. The
24
+ // virtual kernel needs the narrow numeric `scroll`, so it's passed explicitly
25
+ // rather than through the shared `forwardedKernelProps`.
21
26
  var scroll = props.scroll,
22
27
  listItemHeight = props.listItemHeight,
23
28
  rest = __rest(props, ["scroll", "listItemHeight"]);
24
29
  var setup = (0, _useTableSetup.useTableSetup)(rest);
25
- var prefixCls = setup.prefixCls,
26
- wrapperClassName = setup.wrapperClassName,
27
- tableClassName = setup.tableClassName,
28
- loading = setup.loading,
29
- loadingIndicator = setup.loadingIndicator,
30
- renderedColumns = setup.renderedColumns,
31
- currentDataSource = setup.currentDataSource,
32
- mergedExpandable = setup.mergedExpandable,
33
- emptyText = setup.emptyText,
34
- wrapperHtmlProps = setup.wrapperHtmlProps,
35
- forwardedKernelProps = setup.forwardedKernelProps,
36
- paginationNode = setup.paginationNode;
37
- return (0, _jsxRuntime.jsxs)("div", Object.assign({}, wrapperHtmlProps, {
38
- className: wrapperClassName,
39
- children: [loading && (0, _jsxRuntime.jsx)("div", {
40
- className: "".concat(prefixCls, "-loading-overlay"),
41
- children: loadingIndicator
42
- }), (0, _jsxRuntime.jsx)(InternalRcVirtualTable, Object.assign({}, forwardedKernelProps, {
30
+ return (0, _jsxRuntime.jsx)(_TableShell.TableShell, {
31
+ setup: setup,
32
+ children: (0, _jsxRuntime.jsx)(InternalRcVirtualTable, Object.assign({}, setup.forwardedKernelProps, {
43
33
  ref: ref,
44
- prefixCls: prefixCls,
45
- className: tableClassName,
34
+ prefixCls: setup.prefixCls,
35
+ className: setup.tableClassName,
46
36
  scroll: scroll,
47
37
  listItemHeight: listItemHeight,
48
- columns: renderedColumns,
49
- data: currentDataSource,
50
- emptyText: emptyText,
51
- expandable: mergedExpandable
52
- })), paginationNode]
53
- }));
38
+ columns: setup.renderedColumns,
39
+ data: setup.currentDataSource,
40
+ emptyText: setup.emptyText,
41
+ expandable: setup.mergedExpandable
42
+ }))
43
+ });
54
44
  };
55
45
  var VirtualTableBase = /*#__PURE__*/(0, _react.forwardRef)(VirtualTableInner);
56
46
  VirtualTableBase.displayName = 'VirtualTable';
57
47
  var VirtualTable = exports.VirtualTable = /*#__PURE__*/(0, _react.memo)(VirtualTableBase);
58
48
  var _default = exports["default"] = VirtualTable;
59
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvVmlydHVhbFRhYmxlLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9UYWJsZS9WaXJ0dWFsVGFibGUudHN4Il0sIm5hbWVzIjpbIl9qc3hSdW50aW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm5hbCIsIl91c2VUYWJsZVNldHVwIiwiX19yZXN0IiwicyIsImUiLCJ0IiwicCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpIiwibGVuZ3RoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJJbnRlcm5hbFJjVmlydHVhbFRhYmxlIiwiSW50ZXJuYWxSY1ZpcnR1YWxUYWJsZVJhdyIsIlZpcnR1YWxUYWJsZUlubmVyIiwicHJvcHMiLCJyZWYiLCJzY3JvbGwiLCJsaXN0SXRlbUhlaWdodCIsInJlc3QiLCJzZXR1cCIsInVzZVRhYmxlU2V0dXAiLCJwcmVmaXhDbHMiLCJ3cmFwcGVyQ2xhc3NOYW1lIiwidGFibGVDbGFzc05hbWUiLCJsb2FkaW5nIiwibG9hZGluZ0luZGljYXRvciIsInJlbmRlcmVkQ29sdW1ucyIsImN1cnJlbnREYXRhU291cmNlIiwibWVyZ2VkRXhwYW5kYWJsZSIsImVtcHR5VGV4dCIsIndyYXBwZXJIdG1sUHJvcHMiLCJmb3J3YXJkZWRLZXJuZWxQcm9wcyIsInBhZ2luYXRpb25Ob2RlIiwiX2pzeHMiLCJhc3NpZ24iLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsIl9qc3giLCJjb25jYXQiLCJjb2x1bW5zIiwiZGF0YSIsImV4cGFuZGFibGUiLCJWaXJ0dWFsVGFibGVCYXNlIiwiZm9yd2FyZFJlZiIsImRpc3BsYXlOYW1lIiwiVmlydHVhbFRhYmxlIiwiZXhwb3J0cyIsIm1lbW8iLCJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBV0EsSUFBQUEsV0FBQSxHQUFBQyxPQUFBO0FDWEEsSUFB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QUFTLHFCQUFrQjtNQUFBZSxRQUFBLEVBQzNDWDtJQUFnQixDQUFBLENBRXBCLEVBQ0QsSUFBQVksZUFBQSxFQUFDMUIsc0JBQXNCLEVBQUFULE1BQUEsQ0FBQWdDLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFDakJILG9CQUFvQixFQUFBO01BQ3hCaEIsR0FBRyxFQUFFQSxHQUFxQjtNQUMxQk0sU0FBUyxFQUFFQSxTQUFTO01BQ3BCYyxTQUFTLEVBQUVaLGNBQWM7TUFDekJQLE1BQU0sRUFBRUEsTUFBTTtNQUNkQyxjQUFjLEVBQUVBLGNBQWM7TUFDOUJzQixPQUFPLEVBQUViLGVBQWU7TUFDeEJjLElBQUksRUFBRWIsaUJBQWlCO01BQ3ZCRSxTQUFTLEVBQUVBLFNBQVM7TUFDcEJZLFVBQVUsRUFBRWI7SUFBZ0IsQ0FBQSxDQUFBLENBQzVCLEVBQ0RJLGNBQWM7RUFBQSxDQUFBLENBQUEsQ0FDWDtBQUVWLENBQUM7QUFNRCxJQUFNVSxnQkFBZ0IsZ0JBQUcsSUFBQUMsaUJBQVUsRUFBQzlCLGlCQUFpQixDQUErQjtBQUVwRjZCLGdCQUFnQixDQUFDRSxXQUFXLEdBQUcsY0FBYztBQUV0QyxJQUFNQyxZQUFZLEdBQUFDLE9BQUEsQ0FBQUQsWUFBQSxnQkFBRyxJQUFBRSxXQUFJLEVBQUNMLGdCQUFnQixDQUErQjtBQUFDLElBQUFNLFFBQUEsR0FBQUYsT0FBQSxjQUVsRUQsWUFBWSIsImZpbGUiOiJjb21wb25lbnRzL1RhYmxlL1ZpcnR1YWxUYWJsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmLCBtZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSW50ZXJuYWxSY1ZpcnR1YWxUYWJsZSBhcyBJbnRlcm5hbFJjVmlydHVhbFRhYmxlUmF3IH0gZnJvbSAnLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyB1c2VUYWJsZVNldHVwIH0gZnJvbSAnLi9jb3JlL3VzZVRhYmxlU2V0dXAnO1xuY29uc3QgSW50ZXJuYWxSY1ZpcnR1YWxUYWJsZSA9IEludGVybmFsUmNWaXJ0dWFsVGFibGVSYXc7XG5jb25zdCBWaXJ0dWFsVGFibGVJbm5lciA9IChwcm9wcywgcmVmKSA9PiB7XG4gICAgY29uc3QgeyBzY3JvbGwsIGxpc3RJdGVtSGVpZ2h0IH0gPSBwcm9wcywgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wic2Nyb2xsXCIsIFwibGlzdEl0ZW1IZWlnaHRcIl0pO1xuICAgIGNvbnN0IHNldHVwID0gdXNlVGFibGVTZXR1cChyZXN0KTtcbiAgICBjb25zdCB7IHByZWZpeENscywgd3JhcHBlckNsYXNzTmFtZSwgdGFibGVDbGFzc05hbWUsIGxvYWRpbmcsIGxvYWRpbmdJbmRpY2F0b3IsIHJlbmRlcmVkQ29sdW1ucywgY3VycmVudERhdGFTb3VyY2UsIG1lcmdlZEV4cGFuZGFibGUsIGVtcHR5VGV4dCwgd3JhcHBlckh0bWxQcm9wcywgZm9yd2FyZGVkS2VybmVsUHJvcHMsIHBhZ2luYXRpb25Ob2RlLCB9ID0gc2V0dXA7XG4gICAgcmV0dXJuIChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHt9LCB3cmFwcGVySHRtbFByb3BzLCB7IGNsYXNzTmFtZTogd3JhcHBlckNsYXNzTmFtZSwgY2hpbGRyZW46IFtsb2FkaW5nICYmIChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBgJHtwcmVmaXhDbHN9LWxvYWRpbmctb3ZlcmxheWAsIGNoaWxkcmVuOiBsb2FkaW5nSW5kaWNhdG9yIH0pKSwgX2pzeChJbnRlcm5hbFJjVmlydHVhbFRhYmxlLCBPYmplY3QuYXNzaWduKHt9LCBmb3J3YXJkZWRLZXJuZWxQcm9wcywgeyByZWY6IHJlZiwgcHJlZml4Q2xzOiBwcmVmaXhDbHMsIGNsYXNzTmFtZTogdGFibGVDbGFzc05hbWUsIHNjcm9sbDogc2Nyb2xsLCBsaXN0SXRlbUhlaWdodDogbGlzdEl0ZW1IZWlnaHQsIGNvbHVtbnM6IHJlbmRlcmVkQ29sdW1ucywgZGF0YTogY3VycmVudERhdGFTb3VyY2UsIGVtcHR5VGV4dDogZW1wdHlUZXh0LCBleHBhbmRhYmxlOiBtZXJnZWRFeHBhbmRhYmxlIH0pKSwgcGFnaW5hdGlvbk5vZGVdIH0pKSk7XG59O1xuY29uc3QgVmlydHVhbFRhYmxlQmFzZSA9IGZvcndhcmRSZWYoVmlydHVhbFRhYmxlSW5uZXIpO1xuVmlydHVhbFRhYmxlQmFzZS5kaXNwbGF5TmFtZSA9ICdWaXJ0dWFsVGFibGUnO1xuZXhwb3J0IGNvbnN0IFZpcnR1YWxUYWJsZSA9IG1lbW8oVmlydHVhbFRhYmxlQmFzZSk7XG5leHBvcnQgZGVmYXVsdCBWaXJ0dWFsVGFibGU7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
49
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvVmlydHVhbFRhYmxlLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9UYWJsZS9WaXJ0dWFsVGFibGUudHN4Il0sIm5hbWVzIjpbIl9qc3hSdW50aW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm5hbCIsIl91c2VUYWJsZVNldHVwIiwiX1RhYmxlU2hlbGwiLCJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkludGVybmFsUmNWaXJ0dWFsVGFibGUiLCJJbnRlcm5hbFJjVmlydHVhbFRhYmxlUmF3IiwiVmlydHVhbFRhYmxlSW5uZXIiLCJwcm9wcyIsInJlZiIsInNjcm9sbCIsImxpc3RJdGVtSGVpZ2h0IiwicmVzdCIsInNldHVwIiwidXNlVGFibGVTZXR1cCIsIl9qc3giLCJUYWJsZVNoZWxsIiwiY2hpbGRyZW4iLCJhc3NpZ24iLCJmb3J3YXJkZWRLZXJuZWxQcm9wcyIsInByZWZpeENscyIsImNsYXNzTmFtZSIsInRhYmxlQ2xhc3NOYW1lIiwiY29sdW1ucyIsInJlbmRlcmVkQ29sdW1ucyIsImRhdGEiLCJjdXJyZW50RGF0YVNvdXJjZSIsImVtcHR5VGV4dCIsImV4cGFuZGFibGUiLCJtZXJnZWRFeHBhbmRhYmxlIiwiVmlydHVhbFRhYmxlQmFzZSIsImZvcndhcmRSZWYiLCJkaXNwbGF5TmFtZSIsIlZpcnR1YWxUYWJsZSIsImV4cG9ydHMiLCJtZW1vIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQVdBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ1hBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFNBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLGNBQUEsR0FBQUgsT0FBQTtB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QUFBLEdBQUFGLE9BQUEsY0FFbEVELFlBQVkiLCJmaWxlIjoiY29tcG9uZW50cy9UYWJsZS9WaXJ0dWFsVGFibGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiwgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEludGVybmFsUmNWaXJ0dWFsVGFibGUgYXMgSW50ZXJuYWxSY1ZpcnR1YWxUYWJsZVJhdyB9IGZyb20gJy4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgdXNlVGFibGVTZXR1cCB9IGZyb20gJy4vY29yZS91c2VUYWJsZVNldHVwJztcbmltcG9ydCB7IFRhYmxlU2hlbGwgfSBmcm9tICcuL3JlbmRlcmVycy9UYWJsZVNoZWxsJztcbmNvbnN0IEludGVybmFsUmNWaXJ0dWFsVGFibGUgPSBJbnRlcm5hbFJjVmlydHVhbFRhYmxlUmF3O1xuY29uc3QgVmlydHVhbFRhYmxlSW5uZXIgPSAocHJvcHMsIHJlZikgPT4ge1xuICAgIC8vIGBzY3JvbGxgIC8gYGxpc3RJdGVtSGVpZ2h0YCBhcmUgVmlydHVhbFRhYmxlLXNwZWNpZmljIGFuZCBzdHJpcHBlZCBiZWZvcmVcbiAgICAvLyBzZXR1cCBzbyB0aGV5IGRvbid0IGxlYWsgb250byB0aGUgd3JhcHBlciBkaXYgdmlhIGB3cmFwcGVySHRtbFByb3BzYC4gVGhlXG4gICAgLy8gdmlydHVhbCBrZXJuZWwgbmVlZHMgdGhlIG5hcnJvdyBudW1lcmljIGBzY3JvbGxgLCBzbyBpdCdzIHBhc3NlZCBleHBsaWNpdGx5XG4gICAgLy8gcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGUgc2hhcmVkIGBmb3J3YXJkZWRLZXJuZWxQcm9wc2AuXG4gICAgY29uc3QgeyBzY3JvbGwsIGxpc3RJdGVtSGVpZ2h0IH0gPSBwcm9wcywgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wic2Nyb2xsXCIsIFwibGlzdEl0ZW1IZWlnaHRcIl0pO1xuICAgIGNvbnN0IHNldHVwID0gdXNlVGFibGVTZXR1cChyZXN0KTtcbiAgICByZXR1cm4gKF9qc3goVGFibGVTaGVsbCwgeyBzZXR1cDogc2V0dXAsIGNoaWxkcmVuOiBfanN4KEludGVybmFsUmNWaXJ0dWFsVGFibGUsIE9iamVjdC5hc3NpZ24oe30sIHNldHVwLmZvcndhcmRlZEtlcm5lbFByb3BzLCB7IHJlZjogcmVmLCBwcmVmaXhDbHM6IHNldHVwLnByZWZpeENscywgY2xhc3NOYW1lOiBzZXR1cC50YWJsZUNsYXNzTmFtZSwgc2Nyb2xsOiBzY3JvbGwsIGxpc3RJdGVtSGVpZ2h0OiBsaXN0SXRlbUhlaWdodCwgY29sdW1uczogc2V0dXAucmVuZGVyZWRDb2x1bW5zLCBkYXRhOiBzZXR1cC5jdXJyZW50RGF0YVNvdXJjZSwgZW1wdHlUZXh0OiBzZXR1cC5lbXB0eVRleHQsIGV4cGFuZGFibGU6IHNldHVwLm1lcmdlZEV4cGFuZGFibGUgfSkpIH0pKTtcbn07XG5jb25zdCBWaXJ0dWFsVGFibGVCYXNlID0gZm9yd2FyZFJlZihWaXJ0dWFsVGFibGVJbm5lcik7XG5WaXJ0dWFsVGFibGVCYXNlLmRpc3BsYXlOYW1lID0gJ1ZpcnR1YWxUYWJsZSc7XG5leHBvcnQgY29uc3QgVmlydHVhbFRhYmxlID0gbWVtbyhWaXJ0dWFsVGFibGVCYXNlKTtcbmV4cG9ydCBkZWZhdWx0IFZpcnR1YWxUYWJsZTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,9 @@
1
+ import type { TableColumn, TableColumnGroup, TableColumnType, TableRecord } from '../interface';
2
+ /** Type guard: a column that nests `children` columns (a header group). */
3
+ export declare function isColumnGroup<T extends TableRecord>(col: TableColumnType<T>): col is TableColumnGroup<T>;
4
+ /**
5
+ * Recursively flatten grouped columns into their leaf columns. Header groups
6
+ * contribute no data of their own, so sort/filter/render logic only ever cares
7
+ * about the leaves.
8
+ */
9
+ export declare function flattenColumns<T extends TableRecord>(columns: TableColumnType<T>[]): TableColumn<T>[];
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.flattenColumns = flattenColumns;
8
+ exports.isColumnGroup = isColumnGroup;
9
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
11
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
12
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
13
+ /** Type guard: a column that nests `children` columns (a header group). */
14
+ function isColumnGroup(col) {
15
+ return 'children' in col && Array.isArray(col.children);
16
+ }
17
+ /**
18
+ * Recursively flatten grouped columns into their leaf columns. Header groups
19
+ * contribute no data of their own, so sort/filter/render logic only ever cares
20
+ * about the leaves.
21
+ */
22
+ function flattenColumns(columns) {
23
+ var result = [];
24
+ var _iterator = _createForOfIteratorHelper(columns),
25
+ _step;
26
+ try {
27
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
28
+ var col = _step.value;
29
+ if (isColumnGroup(col)) {
30
+ result.push.apply(result, (0, _toConsumableArray2["default"])(flattenColumns(col.children)));
31
+ } else {
32
+ result.push(col);
33
+ }
34
+ }
35
+ } catch (err) {
36
+ _iterator.e(err);
37
+ } finally {
38
+ _iterator.f();
39
+ }
40
+ return result;
41
+ }
42
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvc3JjL2NvbXBvbmVudHMvVGFibGUvY29yZS9jb2x1bW5VdGlsLnRzIiwiY29tcG9uZW50cy9UYWJsZS9jb3JlL2NvbHVtblV0aWwuanMiXSwibmFtZXMiOlsiaXNDb2x1bW5Hcm91cCIsImNvbCIsIkFycmF5IiwiaXNBcnJheSIsImNoaWxkcmVuIiwiZmxhdHRlbkNvbHVtbnMiLCJjb2x1bW5zIiwicmVzdWx0IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwicHVzaCIsImFwcGx5IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImVyciIsImUiLCJmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFPQTtBQUNNLFNBQVVBLGFBQWFBLENBQzNCQyxHQUF1QixFQUFBO0VBRXZCLE9BQU8sVUFBVSxJQUFJQSxHQUFHLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFFRixHQUEyQixDQUFDRyxRQUFRLENBQUM7QUFDbEY7QUFFQTtBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FEV00sU0FBVUMsY0FBY0EsQ0FDNUJDLE9BQTZCLEVBQUE7RUFFN0IsSUFBTUMsTUFBTSxHQUFxQixFQUFFO0VBQUMsSUFBQUMsU0FBQSxHQUFBQywwQkFBQSxDQUNsQkgsT0FBTztJQUFBSSxLQUFBO0VBQUE7SUFBekIsS0FBQUYsU0FBQSxDQUFBRyxDQUFBLE1BQUFELEtBQUEsR0FBQUYsU0FBQSxDQUFBSSxDQUFBLElBQUFDLElBQUEsR0FBMkI7TUFBQSxJQUFoQlosR0FBRyxHQUFBUyxLQUFBLENBQUFJLEtBQUE7TUFDWixJQUFJZCxhQUFhLENBQUNDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCTSxNQUFNLENBQUNRLElBQUksQ0FBQUMsS0FBQSxDQUFYVCxNQUFNLE1BQUFVLG1CQUFBLGFBQVNaLGNBQWMsQ0FBQ0osR0FBRyxDQUFDRyxRQUFRLENBQUMsRUFBQztNQUM5QyxDQUFDLE1BQU07UUFDTEcsTUFBTSxDQUFDUSxJQUFJLENBQUNkLEdBQUcsQ0FBQztNQUNsQjtJQUNGO0VBQUMsU0FBQWlCLEdBQUE7SUFBQVYsU0FBQSxDQUFBVyxDQUFBLENBQUFELEdBQUE7RUFBQTtJQUFBVixTQUFBLENBQUFZLENBQUE7RUFBQTtFQUNELE9BQU9iLE1BQU07QUFDZiIsImZpbGUiOiJjb21wb25lbnRzL1RhYmxlL2NvcmUvY29sdW1uVXRpbC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiLyoqIFR5cGUgZ3VhcmQ6IGEgY29sdW1uIHRoYXQgbmVzdHMgYGNoaWxkcmVuYCBjb2x1bW5zIChhIGhlYWRlciBncm91cCkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2x1bW5Hcm91cChjb2wpIHtcbiAgICByZXR1cm4gJ2NoaWxkcmVuJyBpbiBjb2wgJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pO1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBmbGF0dGVuIGdyb3VwZWQgY29sdW1ucyBpbnRvIHRoZWlyIGxlYWYgY29sdW1ucy4gSGVhZGVyIGdyb3Vwc1xuICogY29udHJpYnV0ZSBubyBkYXRhIG9mIHRoZWlyIG93biwgc28gc29ydC9maWx0ZXIvcmVuZGVyIGxvZ2ljIG9ubHkgZXZlciBjYXJlc1xuICogYWJvdXQgdGhlIGxlYXZlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChpc0NvbHVtbkdyb3VwKGNvbCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmZsYXR0ZW5Db2x1bW5zKGNvbC5jaGlsZHJlbikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -1,6 +1,6 @@
1
1
  import { type Key } from 'react';
2
- import type { TableCheckboxProps, TableColumnType, TableExpandableConfig, TableRecord, TableRowSelection, TableSize, TableSortOrder, TableVariant } from '../interface';
3
- import type { TableFilterState, TableSorterState } from './useTableDataPipeline';
2
+ import type { TableCheckboxProps, TableColumnType, TableExpandableConfig, TableRecord, TableRowSelection, TableSize, TableVariant } from '../interface';
3
+ import type { TableFilterState, TableSorterState, Updater } from './useTableDataPipeline';
4
4
  import type { ColumnsType as InternalColumnsType } from '../internal/kernel/interface';
5
5
  interface UseTableColumnsConfig<T extends TableRecord = TableRecord> {
6
6
  columns: TableColumnType<T>[];
@@ -17,18 +17,9 @@ interface UseTableColumnsConfig<T extends TableRecord = TableRecord> {
17
17
  triggerSelection: (key: Key) => void;
18
18
  triggerSelectAll: () => void;
19
19
  sorter: TableSorterState;
20
- setSorter: (updater: {
21
- columnKey?: Key;
22
- order?: TableSortOrder;
23
- } | ((current: {
24
- columnKey?: Key;
25
- order?: TableSortOrder;
26
- }) => {
27
- columnKey?: Key;
28
- order?: TableSortOrder;
29
- })) => void;
20
+ setSorter: (updater: Updater<TableSorterState>) => void;
30
21
  filters: TableFilterState;
31
- setFilters: (updater: TableFilterState | ((current: TableFilterState) => TableFilterState)) => void;
22
+ setFilters: (updater: Updater<TableFilterState>) => void;
32
23
  getRowKey: (record: T, index: number) => Key;
33
24
  }
34
25
  /**
@@ -14,9 +14,7 @@ var _ExpandTrigger = require("../features/ExpandTrigger");
14
14
  var _HeaderCell = require("../renderers/HeaderCell");
15
15
  var _BodyCell = require("../renderers/BodyCell");
16
16
  var _constants = require("../constants");
17
- function isColumnGroup(col) {
18
- return 'children' in col && Array.isArray(col.children);
19
- }
17
+ var _columnUtil = require("./columnUtil");
20
18
  function makeExpandTransform(config) {
21
19
  var expandable = config.expandable,
22
20
  mergedExpandedRowKeys = config.mergedExpandedRowKeys,
@@ -24,6 +22,8 @@ function makeExpandTransform(config) {
24
22
  getRowKey = config.getRowKey;
25
23
  var customExpandIcon = expandable === null || expandable === void 0 ? void 0 : expandable.expandIcon;
26
24
  var rowExpandable = expandable === null || expandable === void 0 ? void 0 : expandable.rowExpandable;
25
+ // O(1) per-row expansion lookup — `.includes` here ran once per rendered row.
26
+ var expandedKeySet = new Set(mergedExpandedRowKeys);
27
27
  return function (columns) {
28
28
  var _a;
29
29
  return [{
@@ -40,7 +40,7 @@ function makeExpandTransform(config) {
40
40
  var canExpand = rowExpandable ? rowExpandable(record) : true;
41
41
  if (!canExpand) return null;
42
42
  var recordKey = getRowKey(record, index);
43
- var expanded = mergedExpandedRowKeys.includes(recordKey);
43
+ var expanded = expandedKeySet.has(recordKey);
44
44
  if (customExpandIcon) {
45
45
  return customExpandIcon({
46
46
  prefixCls: _constants.TABLE_DEFAULT_PREFIX,
@@ -55,9 +55,9 @@ function makeExpandTransform(config) {
55
55
  }
56
56
  return (0, _jsxRuntime.jsx)(_ExpandTrigger.ExpandTrigger, {
57
57
  expanded: expanded,
58
- onToggle: function onToggle() {
59
- return triggerExpand(recordKey, record);
60
- }
58
+ recordKey: recordKey,
59
+ record: record,
60
+ onToggle: triggerExpand
61
61
  });
62
62
  }
63
63
  }].concat((0, _toConsumableArray2["default"])(columns));
@@ -75,6 +75,8 @@ function makeSelectionTransform(config) {
75
75
  getRowKey = config.getRowKey;
76
76
  if (!rowSelection) return null;
77
77
  var selectionType = (_a = rowSelection.type) !== null && _a !== void 0 ? _a : 'checkbox';
78
+ // O(1) per-row selection lookup — `.includes` here ran once per rendered row.
79
+ var selectedKeySet = new Set(mergedSelectedRowKeys);
78
80
  return function (columns) {
79
81
  var _a;
80
82
  return [Object.assign(Object.assign({
@@ -96,11 +98,10 @@ function makeSelectionTransform(config) {
96
98
  var rowProps = checkboxPropsMap.get(recordKey);
97
99
  return (0, _jsxRuntime.jsx)(_SelectionColumn.SelectionControl, {
98
100
  type: selectionType,
99
- checked: mergedSelectedRowKeys.includes(recordKey),
101
+ checked: selectedKeySet.has(recordKey),
100
102
  rowProps: rowProps,
101
- onChange: function onChange() {
102
- return triggerSelection(recordKey);
103
- }
103
+ recordKey: recordKey,
104
+ onChange: triggerSelection
104
105
  });
105
106
  }
106
107
  })].concat((0, _toConsumableArray2["default"])(columns));
@@ -125,7 +126,7 @@ function makeHeaderTransform(config) {
125
126
  return function (columns) {
126
127
  return columns.map(function (column) {
127
128
  var _a, _b;
128
- if (isColumnGroup(column)) return column;
129
+ if ((0, _columnUtil.isColumnGroup)(column)) return column;
129
130
  var isSortable = Boolean(column.sorter);
130
131
  var activeOrder = sorter.columnKey === column.key ? (_a = sorter.order) !== null && _a !== void 0 ? _a : null : null;
131
132
  var columnKey = column.key != null ? String(column.key) : undefined;
@@ -195,8 +196,14 @@ function makeSpacerTransform() {
195
196
  function makeRenderTransform() {
196
197
  return function (columns) {
197
198
  return columns.map(function (column) {
198
- if (isColumnGroup(column)) return column;
199
+ if ((0, _columnUtil.isColumnGroup)(column)) return column;
199
200
  return Object.assign(Object.assign({}, column), {
201
+ // BodyCell is intentionally CALLED as a function, not rendered as
202
+ // `<BodyCell />`. The kernel's `render` contract allows returning either
203
+ // a ReactNode or a `{ children, props }` cell-spanning descriptor, and
204
+ // BodyCell forwards that descriptor through for colSpan / rowSpan support.
205
+ // Wrapping it in JSX would collapse the descriptor into an element and
206
+ // break cell merging — do not "fix" this into an element.
200
207
  render: function render(value, record, index) {
201
208
  return (0, _BodyCell.BodyCell)({
202
209
  column: column,
@@ -241,24 +248,48 @@ function useTableColumns(config) {
241
248
  setFilters = config.setFilters,
242
249
  size = config.size,
243
250
  getRowKey = config.getRowKey;
244
- return (0, _react.useMemo)(function () {
245
- var transforms = [];
251
+ // The user's data columns only depend on the header / render inputs
252
+ // (sort, filter, size) — NOT on selection or expansion state. Memoising them
253
+ // on their own means toggling a checkbox or chevron no longer rebuilds and
254
+ // re-wraps the render closure of *every* data column; only the small
255
+ // selection/expand prefix below is rebuilt. `makeHeaderTransform` and
256
+ // `makeRenderTransform` are per-column independent maps, so applying them to
257
+ // the user columns and the prefix separately and concatenating is equivalent
258
+ // to the original single reduce-chain.
259
+ //
260
+ // Dep-list note: the transform factories capture the whole `config`, but
261
+ // every callback in it (`setSorter`, `triggerExpand`, `getRowKey`, …) is a
262
+ // stable `useMemoizedFn`, so listing the genuine value inputs is sufficient
263
+ // and intentional. Keep the lists in sync when adding inputs.
264
+ var baseUserColumns = (0, _react.useMemo)(function () {
265
+ var cols = makeHeaderTransform(config)(columns);
266
+ cols = makeRenderTransform()(cols);
267
+ return cols;
268
+ }, [columns, sorter, filters, size, setSorter, setFilters]);
269
+ // The selection / expand prefix carries live selected/expanded state in its
270
+ // render output, which is the signal that re-renders the affected rows — so it
271
+ // must rebuild on every toggle. It is at most two columns, so this is cheap.
272
+ var prefixColumns = (0, _react.useMemo)(function () {
273
+ var cols = [];
246
274
  if (expandable && expandable.showExpandColumn !== false) {
247
- transforms.push(makeExpandTransform(config));
275
+ cols = makeExpandTransform(config)(cols);
248
276
  }
249
277
  var selectionTransform = rowSelection ? makeSelectionTransform(config) : null;
250
278
  if (selectionTransform) {
251
- transforms.push(selectionTransform);
279
+ cols = selectionTransform(cols);
252
280
  }
253
- transforms.push(makeHeaderTransform(config));
254
- transforms.push(makeRenderTransform());
281
+ // Run the prefix through the same header/render maps the user columns get so
282
+ // the final array is byte-for-byte the original single-pipeline output.
283
+ cols = makeHeaderTransform(config)(cols);
284
+ cols = makeRenderTransform()(cols);
285
+ return cols;
286
+ }, [expandable, rowSelection, mergedExpandedRowKeys, mergedSelectedRowKeys, checkboxPropsMap, isAllSelected, isIndeterminate, triggerExpand, triggerSelection, triggerSelectAll, sorter, setSorter, filters, setFilters, size, getRowKey]);
287
+ return (0, _react.useMemo)(function () {
288
+ var cols = [].concat((0, _toConsumableArray2["default"])(prefixColumns), (0, _toConsumableArray2["default"])(baseUserColumns));
255
289
  if (variant === 'stroke') {
256
- transforms.push(makeSpacerTransform());
290
+ cols = makeSpacerTransform()(cols);
257
291
  }
258
- var transformed = transforms.reduce(function (cols, fn) {
259
- return fn(cols);
260
- }, columns);
261
- return transformed;
262
- }, [columns, variant, expandable, rowSelection, mergedExpandedRowKeys, mergedSelectedRowKeys, checkboxPropsMap, isAllSelected, isIndeterminate, triggerExpand, triggerSelection, triggerSelectAll, sorter, setSorter, filters, setFilters, size, getRowKey]);
292
+ return cols;
293
+ }, [prefixColumns, baseUserColumns, variant]);
263
294
  }
264
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZUNvbHVtbnMuanMiLCJjb21wb25lbnRzL1RhYmxlL3NyYy9jb21wb25lbnRzL1RhYmxlL2NvcmUvdXNlVGFibGVDb2x1bW5zLnRzeCJdLCJuYW1lcyI6WyJfanN4UnVudGltZSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfU2VsZWN0aW9uQ29sdW1uIiwiX0V4cGFuZFRyaWdnZXIiLCJfSGVhZGVyQ2VsbCIsIl9Cb2R5Q2VsbCIsIl9jb25zdGFudHMiLCJpc0NvbHVtbkdyb3VwIiwiY29sIiwiQXJyYXkiLCJpc0FycmF5IiwiY2hpbGRyZW4iLCJtYWtlRXhwYW5kVHJhbnNmb3JtIiwiY29uZmlnIiwiZXhwYW5kYWJsZSIsIm1lcmdlZEV4cGFuZGVkUm93S2V5cyIsInRyaWdnZXJFeHBhbmQiLCJnZXRSb3dLZXkiLCJjdXN0b21FeHBhbmRJY29uIiwiZXhwYW5kSWNvbiIsInJvd0V4cGFuZGFibGUiLCJjb2x1bW5zIiwiX2EiLCJrZXkiLCJjbGFzc05hbWUiLCJFWFBBTkRfQ09MVU1OX0NMUyIsIndpZHRoIiwiY29sdW1uV2lkdGgiLCJ0aXRsZSIsImNvbHVtblRpdGxlIiwiZml4ZWQiLCJ1bmRlZmluZWQiLCJyZW5kZXIiLCJfIiwicmVjb3JkIiwiaW5kZXgiLCJjYW5FeHBhbmQiLCJyZWNvcmRLZXkiLCJleHBhbmRlZCIsImluY2x1ZGVzIiwicHJlZml4Q2xzIiwiVEFCTEVfREVGQVVMVF9QUkVGSVgiLCJvbkV4cGFuZCIsInJlYyIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJfanN4IiwiRXhwYW5kVHJpZ2dlciIsIm9uVG9nZ2xlIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm1ha2VTZWxlY3Rpb25UcmFuc2Zvcm0iLCJyb3dTZWxlY3Rpb24iLCJtZXJnZWRTZWxlY3RlZFJvd0tleXMiLCJjaGVja2JveFByb3BzTWFwIiwiaXNBbGxTZWxlY3RlZCIsImlzSW5kZXRlcm1pbmF0ZSIsInRyaWdnZXJTZWxlY3Rpb24iLCJ0cmlnZ2VyU2VsZWN0QWxsIiwic2VsZWN0aW9uVHlwZSIsInR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJTRUxFQ1RJT05fQ09MVU1OX0NMUyIsInJlbmRlckhlYWRlciIsIlNlbGVjdGlvbkhlYWRlckNvbnRyb2wiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsIm9uQ2hhbmdlIiwicm93UHJvcHMiLCJnZXQiLCJTZWxlY3Rpb25Db250cm9sIiwiYXJpYVNvcnRGb3IiLCJvcmRlciIsIkVNUFRZX0ZJTFRFUl9WQUxVRSIsIm1ha2VIZWFkZXJUcmFuc2Zvcm0iLCJzaXplIiwic29ydGVyIiwic2V0U29ydGVyIiwiZmlsdGVycyIsInNldEZpbHRlcnMiLCJtYXAiLCJjb2x1bW4iLCJfYiIsImlzU29ydGFibGUiLCJCb29sZWFuIiwiYWN0aXZlT3JkZXIiLCJjb2x1bW5LZXkiLCJTdHJpbmciLCJmaWx0ZXJTZWxlY3RlZCIsInVzZXJPbkhlYWRlckNlbGwiLCJvbkhlYWRlckNlbGwiLCJ1c2VyQXR0cnMiLCJvbkZpbHRlckNoYW5nZSIsIm5leHQiLCJjdXJyZW50IiwiX2RlZmluZVByb3BlcnR5MiIsImxlbmd0aCIsIkhlYWRlckNlbGwiLCJzb3J0T3JkZXIiLCJvblNvcnRDbGljayIsImN1cnJlbnRTb3J0ZXIiLCJTUEFDRVJfQ09MVU1OX0NMUyIsIm1ha2VTcGFjZXJUcmFuc2Zvcm0iLCJtYWtlUmVuZGVyVHJhbnNmb3JtIiwidmFsdWUiLCJCb2R5Q2VsbCIsInVzZVRhYmxlQ29sdW1ucyIsInZhcmlhbnQiLCJ1c2VNZW1vIiwidHJhbnNmb3JtcyIsInNob3dFeHBhbmRDb2x1bW4iLCJwdXNoIiwic2VsZWN0aW9uVHJhbnNmb3JtIiwidHJhbnNmb3JtZWQiLCJyZWR1Y2UiLCJjb2xzIiwiZm4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ0FBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGdCQUFBLEdBQUFGLE9B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VGFibGUvY29yZS91c2VUYWJsZUNvbHVtbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNlbGVjdGlvbkNvbnRyb2wsIFNlbGVjdGlvbkhlYWRlckNvbnRyb2wgfSBmcm9tICcuLi9mZWF0dXJlcy9TZWxlY3Rpb25Db2x1bW4nO1xuaW1wb3J0IHsgRXhwYW5kVHJpZ2dlciB9IGZyb20gJy4uL2ZlYXR1cmVzL0V4cGFuZFRyaWdnZXInO1xuaW1wb3J0IHsgSGVhZGVyQ2VsbCB9IGZyb20gJy4uL3JlbmRlcmVycy9IZWFkZXJDZWxsJztcbmltcG9ydCB7IEJvZHlDZWxsIH0gZnJvbSAnLi4vcmVuZGVyZXJzL0JvZHlDZWxsJztcbmltcG9ydCB7IFRBQkxFX0RFRkFVTFRfUFJFRklYIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmZ1bmN0aW9uIGlzQ29sdW1uR3JvdXAoY29sKSB7XG4gICAgcmV0dXJuICdjaGlsZHJlbicgaW4gY29sICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIG1ha2VFeHBhbmRUcmFuc2Zvcm0oY29uZmlnKSB7XG4gICAgY29uc3QgeyBleHBhbmRhYmxlLCBtZXJnZWRFeHBhbmRlZFJvd0tleXMsIHRyaWdnZXJFeHBhbmQsIGdldFJvd0tleSB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGN1c3RvbUV4cGFuZEljb24gPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZXhwYW5kSWNvbjtcbiAgICBjb25zdCByb3dFeHBhbmRhYmxlID0gZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLnJvd0V4cGFuZGFibGU7XG4gICAgcmV0dXJuIChjb2x1bW5zKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBrZXk6ICdfX2V4cGFuZF9fJyxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IEVYUEFORF9DT0xVTU5fQ0xTLFxuICAgICAgICAgICAgICAgIC8vIEhvbm9yIGBleHBhbmRhYmxlLmNvbHVtbldpZHRoYCAvIGBjb2x1bW5UaXRsZWAgLyBgZml4ZWRgO1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYSBmaXhlZCAxNnB4IGNvbHVtbiAoY2hldnJvbi1vbmx5LCBwYWRkaW5nOiAwKS5cbiAgICAgICAgICAgICAgICB3aWR0aDogKF9hID0gZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmNvbHVtbldpZHRoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxNixcbiAgICAgICAgICAgICAgICB0aXRsZTogZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmNvbHVtblRpdGxlLFxuICAgICAgICAgICAgICAgIGZpeGVkOiAoZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmZpeGVkKSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA/ICdsZWZ0J1xuICAgICAgICAgICAgICAgICAgICA6IChleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZml4ZWQpID09PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmZpeGVkLFxuICAgICAgICAgICAgICAgIHJlbmRlcjogKF8sIHJlY29yZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSG9ub3IgYHJvd0V4cGFuZGFibGVgOiB3aGVuIHRoZSBwcmVkaWNhdGUgZGVuaWVzIGEgcmVjb3JkLCByZW5kZXIgbm9cbiAgICAgICAgICAgICAgICAgICAgLy8gY2hldnJvbiBhdCBhbGwgKHRoZSByb3cgaXMgbm9uLWV4cGFuZGFibGUpLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5FeHBhbmQgPSByb3dFeHBhbmRhYmxlID8gcm93RXhwYW5kYWJsZShyZWNvcmQpIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5FeHBhbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkS2V5ID0gZ2V0Um93S2V5KHJlY29yZCwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IG1lcmdlZEV4cGFuZGVkUm93S2V5cy5pbmNsdWRlcyhyZWNvcmRLZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VzdG9tRXhwYW5kSWNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbUV4cGFuZEljb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeENsczogVEFCTEVfREVGQVVMVF9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25FeHBhbmQ6IChyZWMsIGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV4cGFuZChnZXRSb3dLZXkocmVjLCBpbmRleCksIHJlYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChFeHBhbmRUcmlnZ2VyLCB7IGV4cGFuZGVkOiBleHBhbmRlZCwgb25Ub2dnbGU6ICgpID0+IHRyaWdnZXJFeHBhbmQocmVjb3JkS2V5LCByZWNvcmQpIH0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgIF07XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1ha2VTZWxlY3Rpb25UcmFuc2Zvcm0oY29uZmlnKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgcm93U2VsZWN0aW9uLCBtZXJnZWRTZWxlY3RlZFJvd0tleXMsIGNoZWNrYm94UHJvcHNNYXAsIGlzQWxsU2VsZWN0ZWQsIGlzSW5kZXRlcm1pbmF0ZSwgdHJpZ2dlclNlbGVjdGlvbiwgdHJpZ2dlclNlbGVjdEFsbCwgZ2V0Um93S2V5LCB9ID0gY29uZmlnO1xuICAgIGlmICghcm93U2VsZWN0aW9uKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzZWxlY3Rpb25UeXBlID0gKF9hID0gcm93U2VsZWN0aW9uLnR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdjaGVja2JveCc7XG4gICAgcmV0dXJuIChjb2x1bW5zKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGtleTogJ19fc2VsZWN0aW9uX18nLCBjbGFzc05hbWU6IFNFTEVDVElPTl9DT0xVTU5fQ0xTLCB3aWR0aDogKF9hID0gcm93U2VsZWN0aW9uLmNvbHVtbldpZHRoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxNiwgZml4ZWQ6IHJvd1NlbGVjdGlvbi5maXhlZCA/ICdsZWZ0JyA6IHVuZGVmaW5lZCB9LCAoc2VsZWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94J1xuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJIZWFkZXI6ICgpID0+IChfanN4KFNlbGVjdGlvbkhlYWRlckNvbnRyb2wsIHsgY2hlY2tlZDogaXNBbGxTZWxlY3RlZCwgaW5kZXRlcm1pbmF0ZTogaXNJbmRldGVybWluYXRlLCBvbkNoYW5nZTogdHJpZ2dlclNlbGVjdEFsbCB9KSksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pKSwgeyByZW5kZXI6IChfLCByZWNvcmQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZEtleSA9IGdldFJvd0tleShyZWNvcmQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93UHJvcHMgPSBjaGVja2JveFByb3BzTWFwLmdldChyZWNvcmRLZXkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF9qc3goU2VsZWN0aW9uQ29udHJvbCwgeyB0eXBlOiBzZWxlY3Rpb25UeXBlLCBjaGVja2VkOiBtZXJnZWRTZWxlY3RlZFJvd0tleXMuaW5jbHVkZXMocmVjb3JkS2V5KSwgcm93UHJvcHM6IHJvd1Byb3BzLCBvbkNoYW5nZTogKCkgPT4gdHJpZ2dlclNlbGVjdGlvbihyZWNvcmRLZXkpIH0pKTtcbiAgICAgICAgICAgICAgICB9IH0pLFxuICAgICAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgXTtcbiAgICB9O1xufVxuZnVuY3Rpb24gYXJpYVNvcnRGb3Iob3JkZXIpIHtcbiAgICBpZiAob3JkZXIgPT09ICdhc2NlbmQnKVxuICAgICAgICByZXR1cm4gJ2FzY2VuZGluZyc7XG4gICAgaWYgKG9yZGVyID09PSAnZGVzY2VuZCcpXG4gICAgICAgIHJldHVybiAnZGVzY2VuZGluZyc7XG4gICAgcmV0dXJuICdub25lJztcbn1cbi8vIFN0YWJsZSBlbXB0eS1maWx0ZXIgcmVmZXJlbmNlLiBXaXRob3V0IHRoaXMsIGBmaWx0ZXJzW2tleV0gPz8gW11gIGNyZWF0ZXMgYVxuLy8gZnJlc2ggYFtdYCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIHRocmFzaGVzIGBGaWx0ZXJUcmlnZ2VyYCdzXG4vLyBgdXNlRWZmZWN0KFtzZWxlY3RlZEtleXNdKWAgYW5kIGNhdXNlcyBhbiBpbmZpbml0ZSBzZXRTdGF0ZSBsb29wIGFmdGVyXG4vLyBjb25maXJtIC8gcmVzZXQuXG5jb25zdCBFTVBUWV9GSUxURVJfVkFMVUUgPSBbXTtcbmZ1bmN0aW9uIG1ha2VIZWFkZXJUcmFuc2Zvcm0oY29uZmlnKSB7XG4gICAgY29uc3QgeyBzaXplLCBzb3J0ZXIsIHNldFNvcnRlciwgZmlsdGVycywgc2V0RmlsdGVycyB9ID0gY29uZmlnO1xuICAgIHJldHVybiAoY29sdW1ucykgPT4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoaXNDb2x1bW5Hcm91cChjb2x1bW4pKVxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgY29uc3QgaXNTb3J0YWJsZSA9IEJvb2xlYW4oY29sdW1uLnNvcnRlcik7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU9yZGVyID0gc29ydGVyLmNvbHVtbktleSA9PT0gY29sdW1uLmtleSA/IChfYSA9IHNvcnRlci5vcmRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbCA6IG51bGw7XG4gICAgICAgIGNvbnN0IGNvbHVtbktleSA9IGNvbHVtbi5rZXkgIT0gbnVsbCA/IFN0cmluZyhjb2x1bW4ua2V5KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmlsdGVyU2VsZWN0ZWQgPSBjb2x1bW5LZXkgIT0gbnVsbCA/ICgoX2IgPSBmaWx0ZXJzW2NvbHVtbktleV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX0ZJTFRFUl9WQUxVRSkgOiBFTVBUWV9GSUxURVJfVkFMVUU7XG4gICAgICAgIC8vIENvbXBvc2Ugb25IZWFkZXJDZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdXNlci1wcm92aWRlZCBhdHRyaWJ1dGVzLlxuICAgICAgICBjb25zdCB1c2VyT25IZWFkZXJDZWxsID0gY29sdW1uLm9uSGVhZGVyQ2VsbDtcbiAgICAgICAgY29uc3Qgb25IZWFkZXJDZWxsID0gKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJBdHRycyA9IChfYSA9IHVzZXJPbkhlYWRlckNlbGwgPT09IG51bGwgfHwgdXNlck9uSGVhZGVyQ2VsbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdXNlck9uSGVhZGVyQ2VsbChjb2wsIGluZGV4KSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1c2VyQXR0cnMpLCAoaXNTb3J0YWJsZSA/IHsgJ2FyaWEtc29ydCc6IGFyaWFTb3J0Rm9yKGFjdGl2ZU9yZGVyKSB9IDogbnVsbCkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvbkZpbHRlckNoYW5nZSA9IChuZXh0KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uS2V5ID09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2V0RmlsdGVycygoY3VycmVudCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudCksIHsgW2NvbHVtbktleV06IG5leHQubGVuZ3RoID8gbmV4dCA6IG51bGwgfSkpKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29sdW1uKSwgeyBvbkhlYWRlckNlbGwsIHRpdGxlOiBjb2x1bW4ucmVuZGVySGVhZGVyXG4gICAgICAgICAgICAgICAgPyBjb2x1bW4ucmVuZGVySGVhZGVyKHsgY29sdW1uIH0pXG4gICAgICAgICAgICAgICAgOiAoX2pzeChIZWFkZXJDZWxsLCB7IGNvbHVtbjogY29sdW1uLCBzaXplOiBzaXplLCBzb3J0T3JkZXI6IGFjdGl2ZU9yZGVyLCBvblNvcnRDbGljazogKCkgPT4gc2V0U29ydGVyKChjdXJyZW50U29ydGVyKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGN1cnJlbnRTb3J0ZXIuY29sdW1uS2V5ICE9PSBjb2x1bW4ua2V5IHx8IGN1cnJlbnRTb3J0ZXIub3JkZXIgPT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdhc2NlbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U29ydGVyLm9yZGVyID09PSAnYXNjZW5kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkZXNjZW5kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0pKSwgZmlsdGVyU2VsZWN0ZWQ6IGZpbHRlclNlbGVjdGVkLCBvbkZpbHRlckNoYW5nZTogb25GaWx0ZXJDaGFuZ2UgfSkpIH0pO1xuICAgIH0pO1xufVxuY29uc3QgU1BBQ0VSX0NPTFVNTl9DTFMgPSAnb20tY29tcG9uZW50LXVpLXRhYmxlLWNlbGwtLXNwYWNlcic7XG5jb25zdCBFWFBBTkRfQ09MVU1OX0NMUyA9ICdvbS1jb21wb25lbnQtdWktdGFibGUtY2VsbC0tZXhwYW5kJztcbmNvbnN0IFNFTEVDVElPTl9DT0xVTU5fQ0xTID0gJ29tLWNvbXBvbmVudC11aS10YWJsZS1jZWxsLS1zZWxlY3Rpb24nO1xuZnVuY3Rpb24gbWFrZVNwYWNlclRyYW5zZm9ybSgpIHtcbiAgICByZXR1cm4gKGNvbHVtbnMpID0+IFtcbiAgICAgICAgeyBrZXk6ICdfX3NwYWNlcl9zdGFydF9fJywgd2lkdGg6IDE2LCB0aXRsZTogJycsIGNsYXNzTmFtZTogU1BBQ0VSX0NPTFVNTl9DTFMsIHJlbmRlcjogKCkgPT4gbnVsbCB9LFxuICAgICAgICAuLi5jb2x1bW5zLFxuICAgICAgICB7IGtleTogJ19fc3BhY2VyX2VuZF9fJywgd2lkdGg6IDE2LCB0aXRsZTogJycsIGNsYXNzTmFtZTogU1BBQ0VSX0NPTFVNTl9DTFMsIHJlbmRlcjogKCkgPT4gbnVsbCB9LFxuICAgIF07XG59XG5mdW5jdGlvbiBtYWtlUmVuZGVyVHJhbnNmb3JtKCkge1xuICAgIHJldHVybiAoY29sdW1ucykgPT4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoaXNDb2x1bW5Hcm91cChjb2x1bW4pKVxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29sdW1uKSwgeyByZW5kZXI6ICh2YWx1ZSwgcmVjb3JkLCBpbmRleCkgPT4gQm9keUNlbGwoe1xuICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICB9KSB9KTtcbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBjb2x1bW5zIHJlYWR5IHRvIGJlIHBhc3NlZCB0byB0aGUgdGFibGUga2VybmVsLlxuICpcbiAqIFRoZSByZXR1cm5lZCBzaGFwZSBJUyBzdHJ1Y3R1cmFsbHkgdGhlIGtlcm5lbCdzIGBDb2x1bW5zVHlwZTxUPmA6XG4gKiAgIC0gRXZlcnkgbGVhZiBjb2x1bW4ncyBgcmVuZGVyYCBpcyByZXBsYWNlZCBieSBgbWFrZVJlbmRlclRyYW5zZm9ybWAsIHdoaWNoXG4gKiAgICAgYWx3YXlzIHJldHVybnMgYSBgUmVhY3ROb2RlYCAoQm9keUNlbGwgaGFuZGxlcyBgVGFibGVDZWxsQ29udGVudFZhbHVlYCAvXG4gKiAgICAgYFRhYmxlUmVuZGVyZWRDZWxsYCBleHRyYXMgYW5kIGVtaXRzIFJlYWN0Tm9kZS9SZW5kZXJlZENlbGwpLlxuICogICAtIEV2ZXJ5IGxlYWYgY29sdW1uJ3MgYHRpdGxlYCBpcyBlaXRoZXIgYSBSZWFjdE5vZGUgb3IgcmVwbGFjZWQgYnlcbiAqICAgICBgPEhlYWRlckNlbGwgLz5gLlxuICogQmVjYXVzZSBUUyBjYW4ndCB0cmFjayB0aGF0IHRob3NlIHJlcGxhY2VtZW50cyBoYXZlIGhhcHBlbmVkIGFjcm9zcyB0aGVcbiAqIGB0cmFuc2Zvcm1zLnJlZHVjZWAgY2hhaW4sIGEgc2luZ2xlIGludGVybmFsIGNhc3QgaXMgcmVxdWlyZWQg4oCUIGNhbGwgc2l0ZXMgbm9cbiAqIGxvbmdlciBuZWVkIHRoZWlyIG93biBgYXMgdW5rbm93biBhcyBJbnRlcm5hbENvbHVtbnNUeXBlPFQ+YCBjYXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVGFibGVDb2x1bW5zKGNvbmZpZykge1xuICAgIGNvbnN0IHsgY29sdW1ucywgdmFyaWFudCwgZXhwYW5kYWJsZSwgcm93U2VsZWN0aW9uLCBtZXJnZWRFeHBhbmRlZFJvd0tleXMsIG1lcmdlZFNlbGVjdGVkUm93S2V5cywgY2hlY2tib3hQcm9wc01hcCwgaXNBbGxTZWxlY3RlZCwgaXNJbmRldGVybWluYXRlLCB0cmlnZ2VyRXhwYW5kLCB0cmlnZ2VyU2VsZWN0aW9uLCB0cmlnZ2VyU2VsZWN0QWxsLCBzb3J0ZXIsIHNldFNvcnRlciwgZmlsdGVycywgc2V0RmlsdGVycywgc2l6ZSwgZ2V0Um93S2V5LCB9ID0gY29uZmlnO1xuICAgIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtcyA9IFtdO1xuICAgICAgICBpZiAoZXhwYW5kYWJsZSAmJiBleHBhbmRhYmxlLnNob3dFeHBhbmRDb2x1bW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1zLnB1c2gobWFrZUV4cGFuZFRyYW5zZm9ybShjb25maWcpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3Rpb25UcmFuc2Zvcm0gPSByb3dTZWxlY3Rpb24gPyBtYWtlU2VsZWN0aW9uVHJhbnNmb3JtKGNvbmZpZykgOiBudWxsO1xuICAgICAgICBpZiAoc2VsZWN0aW9uVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1zLnB1c2goc2VsZWN0aW9uVHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2Zvcm1zLnB1c2gobWFrZUhlYWRlclRyYW5zZm9ybShjb25maWcpKTtcbiAgICAgICAgdHJhbnNmb3Jtcy5wdXNoKG1ha2VSZW5kZXJUcmFuc2Zvcm0oKSk7XG4gICAgICAgIGlmICh2YXJpYW50ID09PSAnc3Ryb2tlJykge1xuICAgICAgICAgICAgdHJhbnNmb3Jtcy5wdXNoKG1ha2VTcGFjZXJUcmFuc2Zvcm0oKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1zLnJlZHVjZSgoY29scywgZm4pID0+IGZuKGNvbHMpLCBjb2x1bW5zKTtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICAgIH0sIFtcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgdmFyaWFudCxcbiAgICAgICAgZXhwYW5kYWJsZSxcbiAgICAgICAgcm93U2VsZWN0aW9uLFxuICAgICAgICBtZXJnZWRFeHBhbmRlZFJvd0tleXMsXG4gICAgICAgIG1lcmdlZFNlbGVjdGVkUm93S2V5cyxcbiAgICAgICAgY2hlY2tib3hQcm9wc01hcCxcbiAgICAgICAgaXNBbGxTZWxlY3RlZCxcbiAgICAgICAgaXNJbmRldGVybWluYXRlLFxuICAgICAgICB0cmlnZ2VyRXhwYW5kLFxuICAgICAgICB0cmlnZ2VyU2VsZWN0aW9uLFxuICAgICAgICB0cmlnZ2VyU2VsZWN0QWxsLFxuICAgICAgICBzb3J0ZXIsXG4gICAgICAgIHNldFNvcnRlcixcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgc2V0RmlsdGVycyxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgZ2V0Um93S2V5LFxuICAgIF0pO1xufSIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
295
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZUNvbHVtbnMuanMiLCJjb21wb25lbnRzL1RhYmxlL3NyYy9jb21wb25lbnRzL1RhYmxlL2NvcmUvdXNlVGFibGVDb2x1bW5zLnRzeCJdLCJuYW1lcyI6WyJfanN4UnVudGltZSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfU2VsZWN0aW9uQ29sdW1uIiwiX0V4cGFuZFRyaWdnZXIiLCJfSGVhZGVyQ2VsbCIsIl9Cb2R5Q2VsbCIsIl9jb25zdGFudHMiLCJfY29sdW1uVXRpbCIsIm1ha2VFeHBhbmRUcmFuc2Zvcm0iLCJjb25maWciLCJleHBhbmRhYmxlIiwibWVyZ2VkRXhwYW5kZWRSb3dLZXlzIiwidHJpZ2dlckV4cGFuZCIsImdldFJvd0tleSIsImN1c3RvbUV4cGFuZEljb24iLCJleHBhbmRJY29uIiwicm93RXhwYW5kYWJsZSIsImV4cGFuZGVkS2V5U2V0IiwiU2V0IiwiY29sdW1ucyIsIl9hIiwia2V5IiwiY2xhc3NOYW1lIiwiRVhQQU5EX0NPTFVNTl9DTFMiLCJ3aWR0aCIsImNvbHVtbldpZHRoIiwidGl0bGUiLCJjb2x1bW5UaXRsZSIsImZpeGVkIiwidW5kZWZpbmVkIiwicmVuZGVyIiwiXyIsInJlY29yZCIsImluZGV4IiwiY2FuRXhwYW5kIiwicmVjb3JkS2V5IiwiZXhwYW5kZWQiLCJoYXMiLCJwcmVmaXhDbHMiLCJUQUJMRV9ERUZBVUxUX1BSRUZJWCIsIm9uRXhwYW5kIiwicmVjIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsIl9qc3giLCJFeHBhbmRUcmlnZ2VyIiwib25Ub2dnbGUiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwibWFrZVNlbGVjdGlvblRyYW5zZm9ybSIsInJvd1NlbGVjdGlvbiIsIm1lcmdlZFNlbGVjdGVkUm93S2V5cyIsImNoZWNrYm94UHJvcHNNYXAiLCJpc0FsbFNlbGVjdGVkIiwiaXNJbmRldGVybWluYXRlIiwidHJpZ2dlclNlbGVjdGlvbiIsInRyaWdnZXJTZWxlY3RBbGwiLCJzZWxlY3Rpb25UeXBlIiwidHlwZSIsInNlbGVjdGVkS2V5U2V0IiwiT2JqZWN0IiwiYXNzaWduIiwiU0VMRUNUSU9OX0NPTFVNTl9DTFMiLCJyZW5kZXJIZWFkZXIiLCJTZWxlY3Rpb25IZWFkZXJDb250cm9sIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJvbkNoYW5nZSIsInJvd1Byb3BzIiwiZ2V0IiwiU2VsZWN0aW9uQ29udHJvbCIsImFyaWFTb3J0Rm9yIiwib3JkZXIiLCJFTVBUWV9GSUxURVJfVkFMVUUiLCJtYWtlSGVhZGVyVHJhbnNmb3JtIiwic2l6ZSIsInNvcnRlciIsInNldFNvcnRlciIsImZpbHRlcnMiLCJzZXRGaWx0ZXJzIiwibWFwIiwiY29sdW1uIiwiX2IiLCJpc0NvbHVtbkdyb3VwIiwiaXNTb3J0YWJsZSIsIkJvb2xlYW4iLCJhY3RpdmVPcmRlciIsImNvbHVtbktleSIsIlN0cmluZyIsImZpbHRlclNlbGVjdGVkIiwidXNlck9uSGVhZGVyQ2VsbCIsIm9uSGVhZGVyQ2VsbCIsImNvbCIsInVzZXJBdHRycyIsIm9uRmlsdGVyQ2hhbmdlIiwibmV4dCIsImN1cnJlbnQiLCJfZGVmaW5lUHJvcGVydHkyIiwibGVuZ3RoIiwiSGVhZGVyQ2VsbCIsInNvcnRPcmRlciIsIm9uU29ydENsaWNrIiwiY3VycmVudFNvcnRlciIsIlNQQUNFUl9DT0xVTU5fQ0xTIiwibWFrZVNwYWNlclRyYW5zZm9ybSIsIm1ha2VSZW5kZXJUcmFuc2Zvcm0iLCJ2YWx1ZSIsIkJvZHlDZWxsIiwidXNlVGFibGVDb2x1bW5zIiwidmFyaWFudCIsImJhc2VVc2VyQ29sdW1ucyIsInVzZU1lbW8iLCJjb2xzIiwicHJlZml4Q29sdW1ucyIsInNob3dFeHBhbmRDb2x1bW4iLCJzZWxlY3Rpb25UcmFuc2Zvcm0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ0FBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGdCQUFBLEdB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RUFDYkMsZUFBZSxFQUNmMUMsYUFBYSxFQUNiMkMsZ0JBQWdCLEVBQ2hCQyxnQkFBZ0IsRUFDaEJvQixNQUFNLEVBQ05DLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyxVQUFVLEVBQ1ZKLElBQUksRUFDSjlELFNBQVMsQ0FDVixDQUFDO0VBRUYsT0FBTyxJQUFBa0csY0FBTyxFQUFDLFlBQUs7SUFDbEIsSUFBSUMsSUFBSSxNQUFBakUsTUFBQSxLQUFBQyxtQkFBQSxhQUFPaUUsYUFBYSxPQUFBakUsbUJBQUEsYUFBSzhELGVBQWUsRUFBQztJQUNqRCxJQUFJRCxPQUFPLEtBQUssUUFBUSxFQUFFO01BQ3hCRyxJQUFJLEdBQUdSLG1CQUFtQixDQUFBLENBQUssQ0FBQ1EsSUFBSSxDQUFDO0lBQ3ZDO0lBQ0EsT0FBT0EsSUFBeUM7RUFDbEQsQ0FBQyxFQUFFLENBQUNDLGFBQWEsRUFBRUgsZUFBZSxFQUFFRCxPQUFPLENBQUMsQ0FBQztBQUMvQyIsImZpbGUiOiJjb21wb25lbnRzL1RhYmxlL2NvcmUvdXNlVGFibGVDb2x1bW5zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Db250cm9sLCBTZWxlY3Rpb25IZWFkZXJDb250cm9sIH0gZnJvbSAnLi4vZmVhdHVyZXMvU2VsZWN0aW9uQ29sdW1uJztcbmltcG9ydCB7IEV4cGFuZFRyaWdnZXIgfSBmcm9tICcuLi9mZWF0dXJlcy9FeHBhbmRUcmlnZ2VyJztcbmltcG9ydCB7IEhlYWRlckNlbGwgfSBmcm9tICcuLi9yZW5kZXJlcnMvSGVhZGVyQ2VsbCc7XG5pbXBvcnQgeyBCb2R5Q2VsbCB9IGZyb20gJy4uL3JlbmRlcmVycy9Cb2R5Q2VsbCc7XG5pbXBvcnQgeyBUQUJMRV9ERUZBVUxUX1BSRUZJWCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0NvbHVtbkdyb3VwIH0gZnJvbSAnLi9jb2x1bW5VdGlsJztcbmZ1bmN0aW9uIG1ha2VFeHBhbmRUcmFuc2Zvcm0oY29uZmlnKSB7XG4gICAgY29uc3QgeyBleHBhbmRhYmxlLCBtZXJnZWRFeHBhbmRlZFJvd0tleXMsIHRyaWdnZXJFeHBhbmQsIGdldFJvd0tleSB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGN1c3RvbUV4cGFuZEljb24gPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZXhwYW5kSWNvbjtcbiAgICBjb25zdCByb3dFeHBhbmRhYmxlID0gZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLnJvd0V4cGFuZGFibGU7XG4gICAgLy8gTygxKSBwZXItcm93IGV4cGFuc2lvbiBsb29rdXAg4oCUIGAuaW5jbHVkZXNgIGhlcmUgcmFuIG9uY2UgcGVyIHJlbmRlcmVkIHJvdy5cbiAgICBjb25zdCBleHBhbmRlZEtleVNldCA9IG5ldyBTZXQobWVyZ2VkRXhwYW5kZWRSb3dLZXlzKTtcbiAgICByZXR1cm4gKGNvbHVtbnMpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogJ19fZXhwYW5kX18nLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogRVhQQU5EX0NPTFVNTl9DTFMsXG4gICAgICAgICAgICAgICAgLy8gSG9ub3IgYGV4cGFuZGFibGUuY29sdW1uV2lkdGhgIC8gYGNvbHVtblRpdGxlYCAvIGBmaXhlZGA7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBhIGZpeGVkIDE2cHggY29sdW1uIChjaGV2cm9uLW9ubHksIHBhZGRpbmc6IDApLlxuICAgICAgICAgICAgICAgIHdpZHRoOiAoX2EgPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuY29sdW1uV2lkdGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDE2LFxuICAgICAgICAgICAgICAgIHRpdGxlOiBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuY29sdW1uVGl0bGUsXG4gICAgICAgICAgICAgICAgZml4ZWQ6IChleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZml4ZWQpID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgID8gJ2xlZnQnXG4gICAgICAgICAgICAgICAgICAgIDogKGV4cGFuZGFibGUgPT09IG51bGwgfHwgZXhwYW5kYWJsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhwYW5kYWJsZS5maXhlZCkgPT09IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZml4ZWQsXG4gICAgICAgICAgICAgICAgcmVuZGVyOiAoXywgcmVjb3JkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBIb25vciBgcm93RXhwYW5kYWJsZWA6IHdoZW4gdGhlIHByZWRpY2F0ZSBkZW5pZXMgYSByZWNvcmQsIHJlbmRlciBub1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGV2cm9uIGF0IGFsbCAodGhlIHJvdyBpcyBub24tZXhwYW5kYWJsZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbkV4cGFuZCA9IHJvd0V4cGFuZGFibGUgPyByb3dFeHBhbmRhYmxlKHJlY29yZCkgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkV4cGFuZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmRLZXkgPSBnZXRSb3dLZXkocmVjb3JkLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kZWRLZXlTZXQuaGFzKHJlY29yZEtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXN0b21FeHBhbmRJY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VzdG9tRXhwYW5kSWNvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4Q2xzOiBUQUJMRV9ERUZBVUxUX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkV4cGFuZDogKHJlYywgZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXhwYW5kKGdldFJvd0tleShyZWMsIGluZGV4KSwgcmVjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfanN4KEV4cGFuZFRyaWdnZXIsIHsgZXhwYW5kZWQ6IGV4cGFuZGVkLCByZWNvcmRLZXk6IHJlY29yZEtleSwgcmVjb3JkOiByZWNvcmQsIG9uVG9nZ2xlOiB0cmlnZ2VyRXhwYW5kIH0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgIF07XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1ha2VTZWxlY3Rpb25UcmFuc2Zvcm0oY29uZmlnKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgcm93U2VsZWN0aW9uLCBtZXJnZWRTZWxlY3RlZFJvd0tleXMsIGNoZWNrYm94UHJvcHNNYXAsIGlzQWxsU2VsZWN0ZWQsIGlzSW5kZXRlcm1pbmF0ZSwgdHJpZ2dlclNlbGVjdGlvbiwgdHJpZ2dlclNlbGVjdEFsbCwgZ2V0Um93S2V5LCB9ID0gY29uZmlnO1xuICAgIGlmICghcm93U2VsZWN0aW9uKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzZWxlY3Rpb25UeXBlID0gKF9hID0gcm93U2VsZWN0aW9uLnR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdjaGVja2JveCc7XG4gICAgLy8gTygxKSBwZXItcm93IHNlbGVjdGlvbiBsb29rdXAg4oCUIGAuaW5jbHVkZXNgIGhlcmUgcmFuIG9uY2UgcGVyIHJlbmRlcmVkIHJvdy5cbiAgICBjb25zdCBzZWxlY3RlZEtleVNldCA9IG5ldyBTZXQobWVyZ2VkU2VsZWN0ZWRSb3dLZXlzKTtcbiAgICByZXR1cm4gKGNvbHVtbnMpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsga2V5OiAnX19zZWxlY3Rpb25fXycsIGNsYXNzTmFtZTogU0VMRUNUSU9OX0NPTFVNTl9DTFMsIHdpZHRoOiAoX2EgPSByb3dTZWxlY3Rpb24uY29sdW1uV2lkdGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDE2LCBmaXhlZDogcm93U2VsZWN0aW9uLmZpeGVkID8gJ2xlZnQnIDogdW5kZWZpbmVkIH0sIChzZWxlY3Rpb25UeXBlID09PSAnY2hlY2tib3gnXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckhlYWRlcjogKCkgPT4gKF9qc3goU2VsZWN0aW9uSGVhZGVyQ29udHJvbCwgeyBjaGVja2VkOiBpc0FsbFNlbGVjdGVkLCBpbmRldGVybWluYXRlOiBpc0luZGV0ZXJtaW5hdGUsIG9uQ2hhbmdlOiB0cmlnZ2VyU2VsZWN0QWxsIH0pKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSkpLCB7IHJlbmRlcjogKF8sIHJlY29yZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkS2V5ID0gZ2V0Um93S2V5KHJlY29yZCwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dQcm9wcyA9IGNoZWNrYm94UHJvcHNNYXAuZ2V0KHJlY29yZEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChTZWxlY3Rpb25Db250cm9sLCB7IHR5cGU6IHNlbGVjdGlvblR5cGUsIGNoZWNrZWQ6IHNlbGVjdGVkS2V5U2V0LmhhcyhyZWNvcmRLZXkpLCByb3dQcm9wczogcm93UHJvcHMsIHJlY29yZEtleTogcmVjb3JkS2V5LCBvbkNoYW5nZTogdHJpZ2dlclNlbGVjdGlvbiB9KSk7XG4gICAgICAgICAgICAgICAgfSB9KSxcbiAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgIF07XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGFyaWFTb3J0Rm9yKG9yZGVyKSB7XG4gICAgaWYgKG9yZGVyID09PSAnYXNjZW5kJylcbiAgICAgICAgcmV0dXJuICdhc2NlbmRpbmcnO1xuICAgIGlmIChvcmRlciA9PT0gJ2Rlc2NlbmQnKVxuICAgICAgICByZXR1cm4gJ2Rlc2NlbmRpbmcnO1xuICAgIHJldHVybiAnbm9uZSc7XG59XG4vLyBTdGFibGUgZW1wdHktZmlsdGVyIHJlZmVyZW5jZS4gV2l0aG91dCB0aGlzLCBgZmlsdGVyc1trZXldID8/IFtdYCBjcmVhdGVzIGFcbi8vIGZyZXNoIGBbXWAgb24gZXZlcnkgcmVuZGVyLCB3aGljaCB0aHJhc2hlcyBgRmlsdGVyVHJpZ2dlcmAnc1xuLy8gYHVzZUVmZmVjdChbc2VsZWN0ZWRLZXlzXSlgIGFuZCBjYXVzZXMgYW4gaW5maW5pdGUgc2V0U3RhdGUgbG9vcCBhZnRlclxuLy8gY29uZmlybSAvIHJlc2V0LlxuY29uc3QgRU1QVFlfRklMVEVSX1ZBTFVFID0gW107XG5mdW5jdGlvbiBtYWtlSGVhZGVyVHJhbnNmb3JtKGNvbmZpZykge1xuICAgIGNvbnN0IHsgc2l6ZSwgc29ydGVyLCBzZXRTb3J0ZXIsIGZpbHRlcnMsIHNldEZpbHRlcnMgfSA9IGNvbmZpZztcbiAgICByZXR1cm4gKGNvbHVtbnMpID0+IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKGlzQ29sdW1uR3JvdXAoY29sdW1uKSlcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIGNvbnN0IGlzU29ydGFibGUgPSBCb29sZWFuKGNvbHVtbi5zb3J0ZXIpO1xuICAgICAgICBjb25zdCBhY3RpdmVPcmRlciA9IHNvcnRlci5jb2x1bW5LZXkgPT09IGNvbHVtbi5rZXkgPyAoX2EgPSBzb3J0ZXIub3JkZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGwgOiBudWxsO1xuICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW4ua2V5ICE9IG51bGwgPyBTdHJpbmcoY29sdW1uLmtleSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGZpbHRlclNlbGVjdGVkID0gY29sdW1uS2V5ICE9IG51bGwgPyAoKF9iID0gZmlsdGVyc1tjb2x1bW5LZXldKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9GSUxURVJfVkFMVUUpIDogRU1QVFlfRklMVEVSX1ZBTFVFO1xuICAgICAgICAvLyBDb21wb3NlIG9uSGVhZGVyQ2VsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHVzZXItcHJvdmlkZWQgYXR0cmlidXRlcy5cbiAgICAgICAgY29uc3QgdXNlck9uSGVhZGVyQ2VsbCA9IGNvbHVtbi5vbkhlYWRlckNlbGw7XG4gICAgICAgIGNvbnN0IG9uSGVhZGVyQ2VsbCA9IChjb2wsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB1c2VyQXR0cnMgPSAoX2EgPSB1c2VyT25IZWFkZXJDZWxsID09PSBudWxsIHx8IHVzZXJPbkhlYWRlckNlbGwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHVzZXJPbkhlYWRlckNlbGwoY29sLCBpbmRleCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdXNlckF0dHJzKSwgKGlzU29ydGFibGUgPyB7ICdhcmlhLXNvcnQnOiBhcmlhU29ydEZvcihhY3RpdmVPcmRlcikgfSA6IG51bGwpKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25GaWx0ZXJDaGFuZ2UgPSAobmV4dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbktleSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNldEZpbHRlcnMoKGN1cnJlbnQpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpLCB7IFtjb2x1bW5LZXldOiBuZXh0Lmxlbmd0aCA/IG5leHQgOiBudWxsIH0pKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbHVtbiksIHsgb25IZWFkZXJDZWxsLCB0aXRsZTogY29sdW1uLnJlbmRlckhlYWRlclxuICAgICAgICAgICAgICAgID8gY29sdW1uLnJlbmRlckhlYWRlcih7IGNvbHVtbiB9KVxuICAgICAgICAgICAgICAgIDogKF9qc3goSGVhZGVyQ2VsbCwgeyBjb2x1bW46IGNvbHVtbiwgc2l6ZTogc2l6ZSwgc29ydE9yZGVyOiBhY3RpdmVPcmRlciwgb25Tb3J0Q2xpY2s6ICgpID0+IHNldFNvcnRlcigoY3VycmVudFNvcnRlcikgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBjdXJyZW50U29ydGVyLmNvbHVtbktleSAhPT0gY29sdW1uLmtleSB8fCBjdXJyZW50U29ydGVyLm9yZGVyID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYXNjZW5kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNvcnRlci5vcmRlciA9PT0gJ2FzY2VuZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGVzY2VuZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB9KSksIGZpbHRlclNlbGVjdGVkOiBmaWx0ZXJTZWxlY3RlZCwgb25GaWx0ZXJDaGFuZ2U6IG9uRmlsdGVyQ2hhbmdlIH0pKSB9KTtcbiAgICB9KTtcbn1cbmNvbnN0IFNQQUNFUl9DT0xVTU5fQ0xTID0gJ29tLWNvbXBvbmVudC11aS10YWJsZS1jZWxsLS1zcGFjZXInO1xuY29uc3QgRVhQQU5EX0NPTFVNTl9DTFMgPSAnb20tY29tcG9uZW50LXVpLXRhYmxlLWNlbGwtLWV4cGFuZCc7XG5jb25zdCBTRUxFQ1RJT05fQ09MVU1OX0NMUyA9ICdvbS1jb21wb25lbnQtdWktdGFibGUtY2VsbC0tc2VsZWN0aW9uJztcbmZ1bmN0aW9uIG1ha2VTcGFjZXJUcmFuc2Zvcm0oKSB7XG4gICAgcmV0dXJuIChjb2x1bW5zKSA9PiBbXG4gICAgICAgIHsga2V5OiAnX19zcGFjZXJfc3RhcnRfXycsIHdpZHRoOiAxNiwgdGl0bGU6ICcnLCBjbGFzc05hbWU6IFNQQUNFUl9DT0xVTU5fQ0xTLCByZW5kZXI6ICgpID0+IG51bGwgfSxcbiAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgeyBrZXk6ICdfX3NwYWNlcl9lbmRfXycsIHdpZHRoOiAxNiwgdGl0bGU6ICcnLCBjbGFzc05hbWU6IFNQQUNFUl9DT0xVTU5fQ0xTLCByZW5kZXI6ICgpID0+IG51bGwgfSxcbiAgICBdO1xufVxuZnVuY3Rpb24gbWFrZVJlbmRlclRyYW5zZm9ybSgpIHtcbiAgICByZXR1cm4gKGNvbHVtbnMpID0+IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGlzQ29sdW1uR3JvdXAoY29sdW1uKSlcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbHVtbiksIHsgXG4gICAgICAgICAgICAvLyBCb2R5Q2VsbCBpcyBpbnRlbnRpb25hbGx5IENBTExFRCBhcyBhIGZ1bmN0aW9uLCBub3QgcmVuZGVyZWQgYXNcbiAgICAgICAgICAgIC8vIGA8Qm9keUNlbGwgLz5gLiBUaGUga2VybmVsJ3MgYHJlbmRlcmAgY29udHJhY3QgYWxsb3dzIHJldHVybmluZyBlaXRoZXJcbiAgICAgICAgICAgIC8vIGEgUmVhY3ROb2RlIG9yIGEgYHsgY2hpbGRyZW4sIHByb3BzIH1gIGNlbGwtc3Bhbm5pbmcgZGVzY3JpcHRvciwgYW5kXG4gICAgICAgICAgICAvLyBCb2R5Q2VsbCBmb3J3YXJkcyB0aGF0IGRlc2NyaXB0b3IgdGhyb3VnaCBmb3IgY29sU3BhbiAvIHJvd1NwYW4gc3VwcG9ydC5cbiAgICAgICAgICAgIC8vIFdyYXBwaW5nIGl0IGluIEpTWCB3b3VsZCBjb2xsYXBzZSB0aGUgZGVzY3JpcHRvciBpbnRvIGFuIGVsZW1lbnQgYW5kXG4gICAgICAgICAgICAvLyBicmVhayBjZWxsIG1lcmdpbmcg4oCUIGRvIG5vdCBcImZpeFwiIHRoaXMgaW50byBhbiBlbGVtZW50LlxuICAgICAgICAgICAgcmVuZGVyOiAodmFsdWUsIHJlY29yZCwgaW5kZXgpID0+IEJvZHlDZWxsKHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgfSkgfSk7XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgY29sdW1ucyByZWFkeSB0byBiZSBwYXNzZWQgdG8gdGhlIHRhYmxlIGtlcm5lbC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgc2hhcGUgSVMgc3RydWN0dXJhbGx5IHRoZSBrZXJuZWwncyBgQ29sdW1uc1R5cGU8VD5gOlxuICogICAtIEV2ZXJ5IGxlYWYgY29sdW1uJ3MgYHJlbmRlcmAgaXMgcmVwbGFjZWQgYnkgYG1ha2VSZW5kZXJUcmFuc2Zvcm1gLCB3aGljaFxuICogICAgIGFsd2F5cyByZXR1cm5zIGEgYFJlYWN0Tm9kZWAgKEJvZHlDZWxsIGhhbmRsZXMgYFRhYmxlQ2VsbENvbnRlbnRWYWx1ZWAgL1xuICogICAgIGBUYWJsZVJlbmRlcmVkQ2VsbGAgZXh0cmFzIGFuZCBlbWl0cyBSZWFjdE5vZGUvUmVuZGVyZWRDZWxsKS5cbiAqICAgLSBFdmVyeSBsZWFmIGNvbHVtbidzIGB0aXRsZWAgaXMgZWl0aGVyIGEgUmVhY3ROb2RlIG9yIHJlcGxhY2VkIGJ5XG4gKiAgICAgYDxIZWFkZXJDZWxsIC8+YC5cbiAqIEJlY2F1c2UgVFMgY2FuJ3QgdHJhY2sgdGhhdCB0aG9zZSByZXBsYWNlbWVudHMgaGF2ZSBoYXBwZW5lZCBhY3Jvc3MgdGhlXG4gKiBgdHJhbnNmb3Jtcy5yZWR1Y2VgIGNoYWluLCBhIHNpbmdsZSBpbnRlcm5hbCBjYXN0IGlzIHJlcXVpcmVkIOKAlCBjYWxsIHNpdGVzIG5vXG4gKiBsb25nZXIgbmVlZCB0aGVpciBvd24gYGFzIHVua25vd24gYXMgSW50ZXJuYWxDb2x1bW5zVHlwZTxUPmAgY2FzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRhYmxlQ29sdW1ucyhjb25maWcpIHtcbiAgICBjb25zdCB7IGNvbHVtbnMsIHZhcmlhbnQsIGV4cGFuZGFibGUsIHJvd1NlbGVjdGlvbiwgbWVyZ2VkRXhwYW5kZWRSb3dLZXlzLCBtZXJnZWRTZWxlY3RlZFJvd0tleXMsIGNoZWNrYm94UHJvcHNNYXAsIGlzQWxsU2VsZWN0ZWQsIGlzSW5kZXRlcm1pbmF0ZSwgdHJpZ2dlckV4cGFuZCwgdHJpZ2dlclNlbGVjdGlvbiwgdHJpZ2dlclNlbGVjdEFsbCwgc29ydGVyLCBzZXRTb3J0ZXIsIGZpbHRlcnMsIHNldEZpbHRlcnMsIHNpemUsIGdldFJvd0tleSwgfSA9IGNvbmZpZztcbiAgICAvLyBUaGUgdXNlcidzIGRhdGEgY29sdW1ucyBvbmx5IGRlcGVuZCBvbiB0aGUgaGVhZGVyIC8gcmVuZGVyIGlucHV0c1xuICAgIC8vIChzb3J0LCBmaWx0ZXIsIHNpemUpIOKAlCBOT1Qgb24gc2VsZWN0aW9uIG9yIGV4cGFuc2lvbiBzdGF0ZS4gTWVtb2lzaW5nIHRoZW1cbiAgICAvLyBvbiB0aGVpciBvd24gbWVhbnMgdG9nZ2xpbmcgYSBjaGVja2JveCBvciBjaGV2cm9uIG5vIGxvbmdlciByZWJ1aWxkcyBhbmRcbiAgICAvLyByZS13cmFwcyB0aGUgcmVuZGVyIGNsb3N1cmUgb2YgKmV2ZXJ5KiBkYXRhIGNvbHVtbjsgb25seSB0aGUgc21hbGxcbiAgICAvLyBzZWxlY3Rpb24vZXhwYW5kIHByZWZpeCBiZWxvdyBpcyByZWJ1aWx0LiBgbWFrZUhlYWRlclRyYW5zZm9ybWAgYW5kXG4gICAgLy8gYG1ha2VSZW5kZXJUcmFuc2Zvcm1gIGFyZSBwZXItY29sdW1uIGluZGVwZW5kZW50IG1hcHMsIHNvIGFwcGx5aW5nIHRoZW0gdG9cbiAgICAvLyB0aGUgdXNlciBjb2x1bW5zIGFuZCB0aGUgcHJlZml4IHNlcGFyYXRlbHkgYW5kIGNvbmNhdGVuYXRpbmcgaXMgZXF1aXZhbGVudFxuICAgIC8vIHRvIHRoZSBvcmlnaW5hbCBzaW5nbGUgcmVkdWNlLWNoYWluLlxuICAgIC8vXG4gICAgLy8gRGVwLWxpc3Qgbm90ZTogdGhlIHRyYW5zZm9ybSBmYWN0b3JpZXMgY2FwdHVyZSB0aGUgd2hvbGUgYGNvbmZpZ2AsIGJ1dFxuICAgIC8vIGV2ZXJ5IGNhbGxiYWNrIGluIGl0IChgc2V0U29ydGVyYCwgYHRyaWdnZXJFeHBhbmRgLCBgZ2V0Um93S2V5YCwg4oCmKSBpcyBhXG4gICAgLy8gc3RhYmxlIGB1c2VNZW1vaXplZEZuYCwgc28gbGlzdGluZyB0aGUgZ2VudWluZSB2YWx1ZSBpbnB1dHMgaXMgc3VmZmljaWVudFxuICAgIC8vIGFuZCBpbnRlbnRpb25hbC4gS2VlcCB0aGUgbGlzdHMgaW4gc3luYyB3aGVuIGFkZGluZyBpbnB1dHMuXG4gICAgY29uc3QgYmFzZVVzZXJDb2x1bW5zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCBjb2xzID0gbWFrZUhlYWRlclRyYW5zZm9ybShjb25maWcpKGNvbHVtbnMpO1xuICAgICAgICBjb2xzID0gbWFrZVJlbmRlclRyYW5zZm9ybSgpKGNvbHMpO1xuICAgICAgICByZXR1cm4gY29scztcbiAgICB9LCBbY29sdW1ucywgc29ydGVyLCBmaWx0ZXJzLCBzaXplLCBzZXRTb3J0ZXIsIHNldEZpbHRlcnNdKTtcbiAgICAvLyBUaGUgc2VsZWN0aW9uIC8gZXhwYW5kIHByZWZpeCBjYXJyaWVzIGxpdmUgc2VsZWN0ZWQvZXhwYW5kZWQgc3RhdGUgaW4gaXRzXG4gICAgLy8gcmVuZGVyIG91dHB1dCwgd2hpY2ggaXMgdGhlIHNpZ25hbCB0aGF0IHJlLXJlbmRlcnMgdGhlIGFmZmVjdGVkIHJvd3Mg4oCUIHNvIGl0XG4gICAgLy8gbXVzdCByZWJ1aWxkIG9uIGV2ZXJ5IHRvZ2dsZS4gSXQgaXMgYXQgbW9zdCB0d28gY29sdW1ucywgc28gdGhpcyBpcyBjaGVhcC5cbiAgICBjb25zdCBwcmVmaXhDb2x1bW5zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCBjb2xzID0gW107XG4gICAgICAgIGlmIChleHBhbmRhYmxlICYmIGV4cGFuZGFibGUuc2hvd0V4cGFuZENvbHVtbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbHMgPSBtYWtlRXhwYW5kVHJhbnNmb3JtKGNvbmZpZykoY29scyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uVHJhbnNmb3JtID0gcm93U2VsZWN0aW9uID8gbWFrZVNlbGVjdGlvblRyYW5zZm9ybShjb25maWcpIDogbnVsbDtcbiAgICAgICAgaWYgKHNlbGVjdGlvblRyYW5zZm9ybSkge1xuICAgICAgICAgICAgY29scyA9IHNlbGVjdGlvblRyYW5zZm9ybShjb2xzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSdW4gdGhlIHByZWZpeCB0aHJvdWdoIHRoZSBzYW1lIGhlYWRlci9yZW5kZXIgbWFwcyB0aGUgdXNlciBjb2x1bW5zIGdldCBzb1xuICAgICAgICAvLyB0aGUgZmluYWwgYXJyYXkgaXMgYnl0ZS1mb3ItYnl0ZSB0aGUgb3JpZ2luYWwgc2luZ2xlLXBpcGVsaW5lIG91dHB1dC5cbiAgICAgICAgY29scyA9IG1ha2VIZWFkZXJUcmFuc2Zvcm0oY29uZmlnKShjb2xzKTtcbiAgICAgICAgY29scyA9IG1ha2VSZW5kZXJUcmFuc2Zvcm0oKShjb2xzKTtcbiAgICAgICAgcmV0dXJuIGNvbHM7XG4gICAgfSwgW1xuICAgICAgICBleHBhbmRhYmxlLFxuICAgICAgICByb3dTZWxlY3Rpb24sXG4gICAgICAgIG1lcmdlZEV4cGFuZGVkUm93S2V5cyxcbiAgICAgICAgbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLFxuICAgICAgICBjaGVja2JveFByb3BzTWFwLFxuICAgICAgICBpc0FsbFNlbGVjdGVkLFxuICAgICAgICBpc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgIHRyaWdnZXJFeHBhbmQsXG4gICAgICAgIHRyaWdnZXJTZWxlY3Rpb24sXG4gICAgICAgIHRyaWdnZXJTZWxlY3RBbGwsXG4gICAgICAgIHNvcnRlcixcbiAgICAgICAgc2V0U29ydGVyLFxuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBzZXRGaWx0ZXJzLFxuICAgICAgICBzaXplLFxuICAgICAgICBnZXRSb3dLZXksXG4gICAgXSk7XG4gICAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBsZXQgY29scyA9IFsuLi5wcmVmaXhDb2x1bW5zLCAuLi5iYXNlVXNlckNvbHVtbnNdO1xuICAgICAgICBpZiAodmFyaWFudCA9PT0gJ3N0cm9rZScpIHtcbiAgICAgICAgICAgIGNvbHMgPSBtYWtlU3BhY2VyVHJhbnNmb3JtKCkoY29scyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHM7XG4gICAgfSwgW3ByZWZpeENvbHVtbnMsIGJhc2VVc2VyQ29sdW1ucywgdmFyaWFudF0pO1xufSIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -21,6 +21,13 @@ export interface ApplyTablePipelineInput<T extends TableRecord> extends Omit<Tab
21
21
  /** Filter state keyed by column key. Defaults to an empty filter map. */
22
22
  filters?: TableFilterState;
23
23
  }
24
+ /** A React-style state setter input: the next value, or a function of the current. */
25
+ export type Updater<S> = S | ((current: S) => S);
26
+ /** Resolved pagination position (page index + size). */
27
+ export interface TablePaginationValue {
28
+ current: number;
29
+ pageSize: number;
30
+ }
24
31
  export interface UseTableDataPipelineInput<T extends TableRecord> {
25
32
  columns: TableColumnType<T>[];
26
33
  dataSource: T[];
@@ -33,22 +40,10 @@ export interface UseTableDataPipelineResult<T extends TableRecord> {
33
40
  sorter: TableSorterState;
34
41
  sorterStates: TableSorterFieldState[];
35
42
  filters: TableFilterState;
36
- pagination: false | {
37
- current: number;
38
- pageSize: number;
39
- };
40
- setSorter: (updater: TableSorterState | ((current: TableSorterState) => TableSorterState)) => void;
41
- setFilters: (updater: TableFilterState | ((current: TableFilterState) => TableFilterState)) => void;
42
- setPagination: (updater: {
43
- current: number;
44
- pageSize: number;
45
- } | ((current: {
46
- current: number;
47
- pageSize: number;
48
- }) => {
49
- current: number;
50
- pageSize: number;
51
- })) => void;
43
+ pagination: false | TablePaginationValue;
44
+ setSorter: (updater: Updater<TableSorterState>) => void;
45
+ setFilters: (updater: Updater<TableFilterState>) => void;
46
+ setPagination: (updater: Updater<TablePaginationValue>) => void;
52
47
  }
53
48
  export declare const applyTablePipeline: <T extends TableRecord>({ columns, dataSource, sorter, filters, pagination, }: ApplyTablePipelineInput<T>) => {
54
49
  currentDataSource: T[];