@1money/component-ui 0.0.71 → 0.0.74

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 (103) hide show
  1. package/es/components/ProForm/ProForm.d.ts +10 -2
  2. package/es/components/ProForm/ProForm.js +241 -55
  3. package/es/components/ProForm/ProFormDependency.d.ts +11 -2
  4. package/es/components/ProForm/ProFormDependency.js +29 -133
  5. package/es/components/ProForm/ProFormItem.js +146 -52
  6. package/es/components/ProForm/ProFormList.js +114 -62
  7. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  8. package/es/components/ProForm/SchemaForm.js +103 -0
  9. package/es/components/ProForm/Submitter.js +26 -5
  10. package/es/components/ProForm/context.d.ts +30 -3
  11. package/es/components/ProForm/context.js +69 -10
  12. package/es/components/ProForm/core/constants.d.ts +12 -3
  13. package/es/components/ProForm/core/constants.js +18 -7
  14. package/es/components/ProForm/core/formStore.d.ts +24 -0
  15. package/es/components/ProForm/core/formStore.js +101 -0
  16. package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
  17. package/es/components/ProForm/core/hooks/useForm.js +336 -212
  18. package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  19. package/es/components/ProForm/core/hooks/useFormCore.js +151 -93
  20. package/es/components/ProForm/core/interface.d.ts +33 -12
  21. package/es/components/ProForm/core/runRules.d.ts +20 -8
  22. package/es/components/ProForm/core/runRules.js +105 -50
  23. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  24. package/es/components/ProForm/core/useFormItem.js +141 -56
  25. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  26. package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
  27. package/es/components/ProForm/fields/createProFormField.js +61 -32
  28. package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  29. package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
  30. package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  31. package/es/components/ProForm/hooks/useUrlSync.js +170 -0
  32. package/es/components/ProForm/index.d.ts +12 -5
  33. package/es/components/ProForm/index.js +7 -2
  34. package/es/components/ProForm/interface.d.ts +185 -28
  35. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  36. package/es/components/ProForm/layouts/DialogForm.js +18 -7
  37. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  38. package/es/components/ProForm/layouts/DrawerForm.js +17 -7
  39. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  40. package/es/components/ProForm/layouts/QueryFilter.js +47 -71
  41. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  42. package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
  43. package/es/components/ProForm/style/ProForm.css +4 -4
  44. package/es/components/ProForm/utils.d.ts +12 -1
  45. package/es/components/ProForm/utils.js +101 -28
  46. package/es/components/ProTable/ProTable.js +3 -3
  47. package/es/components/Tooltip/style/Tooltip.css +1 -0
  48. package/es/index.css +1 -1
  49. package/es/index.d.ts +2 -2
  50. package/es/index.js +2 -2
  51. package/lib/components/ProForm/ProForm.d.ts +10 -2
  52. package/lib/components/ProForm/ProForm.js +239 -53
  53. package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
  54. package/lib/components/ProForm/ProFormDependency.js +30 -135
  55. package/lib/components/ProForm/ProFormItem.js +143 -48
  56. package/lib/components/ProForm/ProFormList.js +112 -60
  57. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  58. package/lib/components/ProForm/SchemaForm.js +110 -0
  59. package/lib/components/ProForm/Submitter.js +26 -5
  60. package/lib/components/ProForm/context.d.ts +30 -3
  61. package/lib/components/ProForm/context.js +69 -10
  62. package/lib/components/ProForm/core/constants.d.ts +12 -3
  63. package/lib/components/ProForm/core/constants.js +19 -8
  64. package/lib/components/ProForm/core/formStore.d.ts +24 -0
  65. package/lib/components/ProForm/core/formStore.js +110 -0
  66. package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
  67. package/lib/components/ProForm/core/hooks/useForm.js +336 -212
  68. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  69. package/lib/components/ProForm/core/hooks/useFormCore.js +150 -92
  70. package/lib/components/ProForm/core/interface.d.ts +33 -12
  71. package/lib/components/ProForm/core/runRules.d.ts +20 -8
  72. package/lib/components/ProForm/core/runRules.js +106 -50
  73. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  74. package/lib/components/ProForm/core/useFormItem.js +138 -53
  75. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  76. package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
  77. package/lib/components/ProForm/fields/createProFormField.js +61 -32
  78. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  79. package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
  80. package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  81. package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
  82. package/lib/components/ProForm/index.d.ts +12 -5
  83. package/lib/components/ProForm/index.js +16 -1
  84. package/lib/components/ProForm/interface.d.ts +185 -28
  85. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  86. package/lib/components/ProForm/layouts/DialogForm.js +18 -7
  87. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  88. package/lib/components/ProForm/layouts/DrawerForm.js +17 -7
  89. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  90. package/lib/components/ProForm/layouts/QueryFilter.js +46 -70
  91. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  92. package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
  93. package/lib/components/ProForm/style/ProForm.css +4 -4
  94. package/lib/components/ProForm/utils.d.ts +12 -1
  95. package/lib/components/ProForm/utils.js +104 -28
  96. package/lib/components/ProTable/ProTable.js +3 -3
  97. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  98. package/lib/index.css +1 -1
  99. package/lib/index.d.ts +2 -2
  100. package/lib/index.js +13 -1
  101. package/package.json +1 -1
  102. package/scripts/mcp-server/examples.generated.json +90 -0
  103. package/scripts/mcp-server/index.generated.json +1866 -212
@@ -16,6 +16,7 @@ var _classnames = _interopRequireDefault(require("../../utils/classnames"));
16
16
  var _Button = require("../Button");
17
17
  var _Typography = require("../Typography");
18
18
  var _context = require("./context");
19
+ var _formStore = require("./core/formStore");
19
20
  var _constants = require("./constants");
20
21
  var _utils = require("./utils");
21
22
  var classes = (0, _classnames["default"])("".concat(_constants.CSS_PREFIX, "-list"));
@@ -23,6 +24,70 @@ var listKeyCounter = 0;
23
24
  var generateKey = function generateKey() {
24
25
  return "list_".concat(++listKeyCounter);
25
26
  };
27
+ // Stable empty result for the no-value case — a fresh [] per selector run
28
+ // would never compare equal and loop the subscription.
29
+ var EMPTY_LIST = [];
30
+ // Row-level memo boundary: setNestedValue clones ONLY the edited row, so
31
+ // untouched rows keep their record identity and bail out here while a
32
+ // sibling row is being edited.
33
+ var ListRowActionsBase = function ListRowActionsBase(_ref) {
34
+ var index = _ref.index,
35
+ record = _ref.record,
36
+ canAdd = _ref.canAdd,
37
+ canRemove = _ref.canRemove,
38
+ copyIconProps = _ref.copyIconProps,
39
+ deleteIconProps = _ref.deleteIconProps,
40
+ action = _ref.action,
41
+ actionRender = _ref.actionRender,
42
+ itemRender = _ref.itemRender,
43
+ onCopy = _ref.onCopy,
44
+ onRemove = _ref.onRemove;
45
+ var copyBtnProps = (0, _utils.extractButtonProps)(copyIconProps);
46
+ var deleteBtnProps = (0, _utils.extractButtonProps)(deleteIconProps);
47
+ var defaultDom = {
48
+ copy: copyIconProps !== false ? (0, _jsxRuntime.jsx)(_Button.Button, Object.assign({
49
+ type: "button",
50
+ color: "secondary",
51
+ size: "small"
52
+ }, copyBtnProps.rest, {
53
+ onClick: function onClick() {
54
+ return onCopy(index);
55
+ },
56
+ disabled: !canAdd || copyBtnProps.disabled,
57
+ children: _constants.DEFAULT_TEXT.copy
58
+ }), "copy-".concat(index)) : null,
59
+ "delete": deleteIconProps !== false ? (0, _jsxRuntime.jsx)(_Button.Button, Object.assign({
60
+ type: "button",
61
+ color: "secondary",
62
+ size: "small"
63
+ }, deleteBtnProps.rest, {
64
+ onClick: function onClick() {
65
+ return onRemove(index);
66
+ },
67
+ disabled: !canRemove || deleteBtnProps.disabled,
68
+ children: _constants.DEFAULT_TEXT["delete"]
69
+ }), "delete-".concat(index)) : null
70
+ };
71
+ var renderedActions = actionRender ? actionRender({
72
+ index: index,
73
+ record: record
74
+ }, action, defaultDom) : [defaultDom.copy, defaultDom["delete"]].filter(Boolean);
75
+ var rowNode = (0, _jsxRuntime.jsx)("div", {
76
+ className: classes('row-actions'),
77
+ children: renderedActions
78
+ });
79
+ if (itemRender) {
80
+ return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
81
+ children: itemRender({
82
+ listDom: rowNode,
83
+ action: action
84
+ })
85
+ });
86
+ }
87
+ return rowNode;
88
+ };
89
+ ListRowActionsBase.displayName = 'ProFormListRowActions';
90
+ var ListRowActions = /*#__PURE__*/(0, _react.memo)(ListRowActionsBase);
26
91
  var ProFormListBase = function ProFormListBase(props) {
27
92
  var _a, _b;
28
93
  var rawName = props.name,
@@ -44,19 +109,21 @@ var ProFormListBase = function ProFormListBase(props) {
44
109
  // ── Nested list: prepend parent list name ──
45
110
  var parentCtx = (0, _context.useFormListContext)();
46
111
  var fullName = parentCtx.listName ? "".concat(parentCtx.listName, ".").concat(rawName) : rawName;
47
- var _useProFormContext = (0, _context.useProFormContext)(),
48
- values = _useProFormContext.values,
49
- setFieldValue = _useProFormContext.setFieldValue;
112
+ var _useProFormStable = (0, _context.useProFormStable)(),
113
+ setFieldValue = _useProFormStable.setFieldValue;
114
+ var store = (0, _context.useProFormStore)();
50
115
  var initialApplied = (0, _react.useRef)(false);
51
116
  var keysRef = (0, _react.useRef)([]);
52
117
  var _useSafeState = (0, _useSafeState3["default"])(null),
53
118
  _useSafeState2 = (0, _slicedToArray2["default"])(_useSafeState, 2),
54
119
  listError = _useSafeState2[0],
55
120
  setListError = _useSafeState2[1];
56
- var list = (0, _react.useMemo)(function () {
57
- var raw = fullName.includes('.') ? (0, _utils.getNestedValue)(values, fullName) : values[fullName];
58
- return Array.isArray(raw) ? raw : [];
59
- }, [values, fullName]);
121
+ // Subscribe ONLY to this list's own value: typing elsewhere in the form
122
+ // leaves the array identity untouched and this component does not render.
123
+ var list = (0, _formStore.useStoreSelector)(store, function (state) {
124
+ var raw = fullName.includes('.') ? (0, _utils.getNestedValue)(state.values, fullName) : state.values[fullName];
125
+ return Array.isArray(raw) ? raw : EMPTY_LIST;
126
+ });
60
127
  // Sync keys with list length
61
128
  while (keysRef.current.length < list.length) {
62
129
  keysRef.current.push(generateKey());
@@ -151,62 +218,47 @@ var ProFormListBase = function ProFormListBase(props) {
151
218
  getList: getList
152
219
  };
153
220
  }, [add, removeAt, move, copy, getList]);
221
+ // Per-key cache keeps each row's field object identity stable across list
222
+ // commits (e.g. typing in a sibling row), so memoized row content sees
223
+ // shallow-equal props and bails out.
224
+ var fieldObjCache = (0, _react.useRef)(new Map());
154
225
  var mappedFields = (0, _react.useMemo)(function () {
155
- return list.map(function (_item, index) {
156
- return {
157
- name: "".concat(fullName, ".").concat(index),
158
- key: keysRef.current[index] || "fallback_".concat(index)
226
+ var nextCache = new Map();
227
+ var fields = list.map(function (_item, index) {
228
+ var key = keysRef.current[index] || "fallback_".concat(index);
229
+ var fieldName = "".concat(fullName, ".").concat(index);
230
+ var cached = fieldObjCache.current.get(key);
231
+ var field = cached && cached.name === fieldName ? cached : {
232
+ name: fieldName,
233
+ key: key
159
234
  };
235
+ nextCache.set(key, field);
236
+ return field;
160
237
  });
238
+ fieldObjCache.current = nextCache;
239
+ return fields;
161
240
  }, [list, fullName]);
162
- // Render children
163
- var listDom = typeof children === 'function' ? children(mappedFields, action) : children;
164
- // Action buttons per row
165
- var actionRows = (0, _react.useMemo)(function () {
166
- return list.map(function (record, index) {
167
- var copyBtnProps = (0, _utils.extractButtonProps)(copyIconProps);
168
- var deleteBtnProps = (0, _utils.extractButtonProps)(deleteIconProps);
169
- var defaultDom = {
170
- copy: copyIconProps !== false ? (0, _jsxRuntime.jsx)(_Button.Button, Object.assign({
171
- type: "button",
172
- color: "secondary",
173
- size: "small"
174
- }, copyBtnProps.rest, {
175
- onClick: function onClick() {
176
- return copy(index);
177
- },
178
- disabled: !canAdd || copyBtnProps.disabled,
179
- children: _constants.DEFAULT_TEXT.copy
180
- }), "copy-".concat(index)) : null,
181
- "delete": deleteIconProps !== false ? (0, _jsxRuntime.jsx)(_Button.Button, Object.assign({
182
- type: "button",
183
- color: "secondary",
184
- size: "small"
185
- }, deleteBtnProps.rest, {
186
- onClick: function onClick() {
187
- return removeAt(index);
188
- },
189
- disabled: !canRemove || deleteBtnProps.disabled,
190
- children: _constants.DEFAULT_TEXT["delete"]
191
- }), "delete-".concat(index)) : null
192
- };
193
- var renderedActions = actionRender ? actionRender({
194
- index: index,
195
- record: record
196
- }, action, defaultDom) : [defaultDom.copy, defaultDom["delete"]].filter(Boolean);
197
- var rowNode = (0, _jsxRuntime.jsx)("div", {
198
- className: classes('row-actions'),
199
- children: renderedActions
200
- }, keysRef.current[index] || index);
201
- if (itemRender) {
202
- return itemRender({
203
- listDom: rowNode,
204
- action: action
205
- });
206
- }
207
- return rowNode;
208
- });
209
- }, [list, copyIconProps, deleteIconProps, canAdd, canRemove, copy, removeAt, action, actionRender, itemRender]);
241
+ // Memoized so the row factory is re-invoked only when the list itself (or
242
+ // the consumer-provided children) changes never for unrelated commits.
243
+ var listDom = (0, _react.useMemo)(function () {
244
+ return typeof children === 'function' ? children(mappedFields, action) : children;
245
+ }, [children, mappedFields, action]);
246
+ // Action buttons per row — ListRowActions is the memo boundary
247
+ var actionRows = list.map(function (record, index) {
248
+ return (0, _jsxRuntime.jsx)(ListRowActions, {
249
+ index: index,
250
+ record: record,
251
+ canAdd: canAdd,
252
+ canRemove: canRemove,
253
+ copyIconProps: copyIconProps,
254
+ deleteIconProps: deleteIconProps,
255
+ action: action,
256
+ actionRender: actionRender,
257
+ itemRender: itemRender,
258
+ onCopy: copy,
259
+ onRemove: removeAt
260
+ }, keysRef.current[index] || index);
261
+ });
210
262
  // Creator button
211
263
  var hasCreator = creatorButtonProps !== false;
212
264
  var creatorConfig = hasCreator && (0, _typeof2["default"])(creatorButtonProps) === 'object' ? creatorButtonProps : {};
@@ -257,4 +309,4 @@ var ProFormListBase = function ProFormListBase(props) {
257
309
  ProFormListBase.displayName = 'ProFormList';
258
310
  var ProFormList = exports.ProFormList = /*#__PURE__*/(0, _react.memo)(ProFormListBase);
259
311
  var _default = exports["default"] = ProFormList;
260
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtTGlzdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtTGlzdC50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX3VzZU1lbW9pemVkRm4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3VzZVNhZmVTdGF0ZTMiLCJfY2xhc3NuYW1lcyIsIl9CdXR0b24iLCJfVHlwb2dyYXBoeSIsIl9jb250ZXh0IiwiX2NvbnN0YW50cyIsIl91dGlscyIsImNsYXNzZXMiLCJjbGFzc25hbWVzIiwiY29uY2F0IiwiQ1NTX1BSRUZJWCIsImxpc3RLZXlDb3VudGVyIiwiZ2VuZXJhdGVLZXkiLCJQcm9Gb3JtTGlzdEJhc2UiLCJwcm9wcyIsIl9hIiwiX2IiLCJyYXdOYW1lIiwibmFtZSIsImxhYmVsIiwibWluIiwibWF4IiwicmVxdWlyZWQiLCJfcHJvcHMkcmVxdWlyZWRNZXNzYWciLCJyZXF1aXJlZE1lc3NhZ2UiLCJpbml0aWFsVmFsdWUiLCJjb3B5SWNvblByb3BzIiwiZGVsZXRlSWNvblByb3BzIiwiY3JlYXRvckJ1dHRvblByb3BzIiwiaXRlbVJlbmRlciIsImFjdGlvblJlbmRlciIsImNoaWxkcmVuIiwib25BZnRlckFkZCIsIm9uQWZ0ZXJSZW1vdmUiLCJwYXJlbnRDdHgiLCJ1c2VGb3JtTGlzdENvbnRleHQiLCJmdWxsTmFtZSIsImxpc3ROYW1lIiwiX3VzZVByb0Zvcm1Db250ZXh0IiwidXNlUHJvRm9ybUNvbnRleHQiLCJ2YWx1ZXMiLCJzZXRGaWVsZFZhbHVlIiwiaW5pdGlhbEFwcGxpZWQiLCJ1c2VSZWYiLCJrZXlzUmVmIiwiX3VzZVNhZmVTdGF0ZSIsInVzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwibGlzdEVycm9yIiwic2V0TGlzdEVycm9yIiwibGlzdCIsInVzZU1lbW8iLCJyYXciLCJpbmNsdWRlcyIsImdldE5lc3RlZFZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiY3VycmVudCIsImxlbmd0aCIsInB1c2giLCJzbGljZSIsInVzZUVmZmVjdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJtYXAiLCJjYW5BZGQiLCJjYW5SZW1vdmUiLCJ2YWxpZGF0ZUxpc3QiLCJ1c2VNZW1vaXplZEZuIiwiYWRkIiwiZGVmYXVsdFZhbHVlIiwiaW5kZXgiLCJ2YWx1ZSIsIm5ld0xpc3QiLCJuZXdLZXlzIiwiaW5zZXJ0SW5kZXgiLCJzcGxpY2UiLCJyZW1vdmVBdCIsImNvcHkiLCJPYmplY3QiLCJhc3NpZ24iLCJtb3ZlIiwiZnJvbSIsInRvIiwiX25ld0xpc3Qkc3BsaWNlIiwiX25ld0xpc3Qkc3BsaWNlMiIsIm1vdmVkSXRlbSIsIl9uZXdLZXlzJHNwbGljZSIsIl9uZXdLZXlzJHNwbGljZTIiLCJtb3ZlZEtleSIsImdldExpc3QiLCJhY3Rpb24iLCJyZW1vdmUiLCJtYXBwZWRGaWVsZHMiLCJfaXRlbSIsImtleSIsImxpc3REb20iLCJhY3Rpb25Sb3dzIiwicmVjb3JkIiwiY29weUJ0blByb3BzIiwiZXh0cmFjdEJ1dHRvblByb3BzIiwiZGVsZXRlQnRuUHJvcHMiLCJkZWZhdWx0RG9tIiwiX2pzeCIsIkJ1dHRvbiIsInR5cGUiLCJjb2xvciIsInNpemUiLCJyZXN0Iiwib25DbGljayIsImRpc2FibGVkIiwiREVGQVVMVF9URVhUIiwicmVuZGVyZWRBY3Rpb25zIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJvd05vZGUiLCJjbGFzc05hbWUiLCJoYXNDcmVhdG9yIiwiY3JlYXRvckNvbmZpZyIsIl90eXBlb2YyIiwiY3JlYXRvclBvc2l0aW9uIiwicG9zaXRpb24iLCJjcmVhdG9yVGV4dCIsInRleHQiLCJjcmVhdG9yQnV0dG9uIiwiZm9ybUxpc3RDb250ZXh0VmFsdWUiLCJGb3JtTGlzdENvbnRleHQiLCJQcm92aWRlciIsIl9qc3hzIiwiVHlwb2dyYXBoeUxhYmVsIiwiUFJPRk9STV9MSVNUX0xBQkVMX1NJWkUiLCJQUk9GT1JNX0xJU1RfTEFCRUxfQ09MT1IiLCJUeXBvZ3JhcGh5Qm9keSIsImFzIiwiZGlzcGxheU5hbWUiLCJQcm9Gb3JtTGlzdCIsImV4cG9ydHMiLCJtZW1vIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUNBQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxjQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxXQUFBLEdBQUFGLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxXQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxVQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxNQUFBLEdBQUFWLE9BQUE7QUFHQSxJQUFNVyxPQUFPLEdBQUcsSUFBQUMsc0JBQVUsS0FBQUMsTUFBQSxDQUFJQyxxQkFBVSxVQUFPLENBQUM7QUFFaEQsSUFBSUMsY0FBYyxHQUFHLENBQUM7QUFDdEIsSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUE7RUFBQSxlQUFBSCxNQUFBLENBQXlCLEVBQUVFLGNBQWM7QUFBQSxDQUFFO0FBRTVELElBQU1FLGVBQWUsR0FBeUIsU0FBeENBLGVBQWVBLENBQTBCQyxLQUFLLEVBQUk7RURIcEQsSUFBSUMsRUFBRSxFQUFFQyxFQUFFO0VDSVosSUFDUUMsT0FBTyxHQWVYSCxLQUFLLENBZlBJLElBQUk7SUFDSkMsS0FBSyxHQWNITCxLQUFLLENBZFBLLEtBQUs7SUFDTEMsR0FBRyxHQWFETixLQUFLLENBYlBNLEdBQUc7SUFDSEMsR0FBRyxHQVlEUCxLQUFLLENBWlBPLEdBQUc7SUFDSEMsUUFBUSxHQVdOUixLQUFLLENBWFBRLFFBQVE7SUFBQUMscUJBQUEsR0FXTlQsS0FBSyxDQVZQVSxlQUFl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TUFBUyxDQUFBLENBQWtCO0lBQUEsQ0FBQTtFQUN4RixDQUFBLENBQ21CO0FBRS9CLENBQUM7QUFFRHBDLGVBQWUsQ0FBQ3lILFdBQVcsR0FBRyxhQUFhO0FBRXBDLElBQU1DLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLGdCQUFHLElBQUFFLFdBQUksRUFBQzVILGVBQWUsQ0FBQztBQUFDLElBQUE2SCxRQUFBLEdBQUFGLE9BQUEsY0FFbENELFdBQVciLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL1Byb0Zvcm1MaXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8sIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB1c2VTYWZlU3RhdGUgZnJvbSAnQDFtb25leS9ob29rcy91c2VTYWZlU3RhdGUnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBjbGFzc25hbWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9CdXR0b24nO1xuaW1wb3J0IHsgVHlwb2dyYXBoeUxhYmVsLCBUeXBvZ3JhcGh5Qm9keSB9IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgRm9ybUxpc3RDb250ZXh0LCB1c2VGb3JtTGlzdENvbnRleHQsIHVzZVByb0Zvcm1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IENTU19QUkVGSVgsIERFRkFVTFRfVEVYVCwgUFJPRk9STV9MSVNUX0xBQkVMX1NJWkUsIFBST0ZPUk1fTElTVF9MQUJFTF9DT0xPUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGV4dHJhY3RCdXR0b25Qcm9wcywgZ2V0TmVzdGVkVmFsdWUgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKGAke0NTU19QUkVGSVh9LWxpc3RgKTtcbmxldCBsaXN0S2V5Q291bnRlciA9IDA7XG5jb25zdCBnZW5lcmF0ZUtleSA9ICgpID0+IGBsaXN0XyR7KytsaXN0S2V5Q291bnRlcn1gO1xuY29uc3QgUHJvRm9ybUxpc3RCYXNlID0gKHByb3BzKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB7IG5hbWU6IHJhd05hbWUsIGxhYmVsLCBtaW4sIG1heCwgcmVxdWlyZWQsIHJlcXVpcmVkTWVzc2FnZSA9ICdUaGlzIGxpc3QgY2Fubm90IGJlIGVtcHR5JywgaW5pdGlhbFZhbHVlLCBjb3B5SWNvblByb3BzLCBkZWxldGVJY29uUHJvcHMsIGNyZWF0b3JCdXR0b25Qcm9wcywgaXRlbVJlbmRlciwgYWN0aW9uUmVuZGVyLCBjaGlsZHJlbiwgb25BZnRlckFkZCwgb25BZnRlclJlbW92ZSwgfSA9IHByb3BzO1xuICAgIC8vIOKUgOKUgCBOZXN0ZWQgbGlzdDogcHJlcGVuZCBwYXJlbnQgbGlzdCBuYW1lIOKUgOKUgFxuICAgIGNvbnN0IHBhcmVudEN0eCA9IHVzZUZvcm1MaXN0Q29udGV4dCgpO1xuICAgIGNvbnN0IGZ1bGxOYW1lID0gcGFyZW50Q3R4Lmxpc3ROYW1lID8gYCR7cGFyZW50Q3R4Lmxpc3ROYW1lfS4ke3Jhd05hbWV9YCA6IHJhd05hbWU7XG4gICAgY29uc3QgeyB2YWx1ZXMsIHNldEZpZWxkVmFsdWUgfSA9IHVzZVByb0Zvcm1Db250ZXh0KCk7XG4gICAgY29uc3QgaW5pdGlhbEFwcGxpZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IGtleXNSZWYgPSB1c2VSZWYoW10pO1xuICAgIGNvbnN0IFtsaXN0RXJyb3IsIHNldExpc3RFcnJvcl0gPSB1c2VTYWZlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgbGlzdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCByYXcgPSBmdWxsTmFtZS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICA/IGdldE5lc3RlZFZhbHVlKHZhbHVlcywgZnVsbE5hbWUpXG4gICAgICAgICAgICA6IHZhbHVlc1tmdWxsTmFtZV07XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJhdykgPyByYXcgOiBbXTtcbiAgICB9LCBbdmFsdWVzLCBmdWxsTmFtZV0pO1xuICAgIC8vIFN5bmMga2V5cyB3aXRoIGxpc3QgbGVuZ3RoXG4gICAgd2hpbGUgKGtleXNSZWYuY3VycmVudC5sZW5ndGggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgICBrZXlzUmVmLmN1cnJlbnQucHVzaChnZW5lcmF0ZUtleSgpKTtcbiAgICB9XG4gICAgaWYgKGtleXNSZWYuY3VycmVudC5sZW5ndGggPiBsaXN0Lmxlbmd0aCkge1xuICAgICAgICBrZXlzUmVmLmN1cnJlbnQgPSBrZXlzUmVmLmN1cnJlbnQuc2xpY2UoMCwgbGlzdC5sZW5ndGgpO1xuICAgIH1cbiAgICAvLyBBcHBseSBpbml0aWFsIHZhbHVlIG9uY2VcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaW5pdGlhbEFwcGxpZWQuY3VycmVudClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoICE9PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5pdGlhbFZhbHVlKSB8fCBpbml0aWFsVmFsdWUubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpbml0aWFsQXBwbGllZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgc2V0RmllbGRWYWx1ZShmdWxsTmFtZSwgWy4uLmluaXRpYWxWYWx1ZV0pO1xuICAgICAgICBrZXlzUmVmLmN1cnJlbnQgPSBpbml0aWFsVmFsdWUubWFwKCgpID0+IGdlbmVyYXRlS2V5KCkpO1xuICAgIH0sIFtsaXN0Lmxlbmd0aCwgaW5pdGlhbFZhbHVlLCBmdWxsTmFtZSwgc2V0RmllbGRWYWx1ZV0pO1xuICAgIC8vIENsZWFyIGVycm9yIHdoZW4gbGlzdCBiZWNvbWVzIG5vbi1lbXB0eVxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChyZXF1aXJlZCAmJiBsaXN0Lmxlbmd0aCA+IDAgJiYgbGlzdEVycm9yKSB7XG4gICAgICAgICAgICBzZXRMaXN0RXJyb3IobnVsbCk7XG4gICAgICAgIH1cbiAgICB9LCBbbGlzdC5sZW5ndGgsIHJlcXVpcmVkLCBsaXN0RXJyb3IsIHNldExpc3RFcnJvcl0pO1xuICAgIGNvbnN0IGNhbkFkZCA9IG1heCA9PSBudWxsIHx8IGxpc3QubGVuZ3RoIDwgbWF4O1xuICAgIGNvbnN0IGNhblJlbW92ZSA9IG1pbiA9PSBudWxsIHx8IGxpc3QubGVuZ3RoID4gbWluO1xuICAgIGNvbnN0IHZhbGlkYXRlTGlzdCA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBpZiAoIXJlcXVpcmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2V0TGlzdEVycm9yKHJlcXVpcmVkTWVzc2FnZSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2V0TGlzdEVycm9yKG51bGwpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBhZGQgPSB1c2VNZW1vaXplZEZuKChkZWZhdWx0VmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghY2FuQWRkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IGRlZmF1bHRWYWx1ZSA6IHt9O1xuICAgICAgICBjb25zdCBuZXdMaXN0ID0gWy4uLmxpc3RdO1xuICAgICAgICBjb25zdCBuZXdLZXlzID0gWy4uLmtleXNSZWYuY3VycmVudF07XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gdHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJyA/IGluZGV4IDogbmV3TGlzdC5sZW5ndGg7XG4gICAgICAgIG5ld0xpc3Quc3BsaWNlKGluc2VydEluZGV4LCAwLCB2YWx1ZSk7XG4gICAgICAgIG5ld0tleXMuc3BsaWNlKGluc2VydEluZGV4LCAwLCBnZW5lcmF0ZUtleSgpKTtcbiAgICAgICAga2V5c1JlZi5jdXJyZW50ID0gbmV3S2V5cztcbiAgICAgICAgc2V0RmllbGRWYWx1ZShmdWxsTmFtZSwgbmV3TGlzdCk7XG4gICAgICAgIG9uQWZ0ZXJBZGQgPT09IG51bGwgfHwgb25BZnRlckFkZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BZnRlckFkZCh2YWx1ZSwgaW5zZXJ0SW5kZXgpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlbW92ZUF0ID0gdXNlTWVtb2l6ZWRGbigoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFjYW5SZW1vdmUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5ld0xpc3QgPSBbLi4ubGlzdF07XG4gICAgICAgIGNvbnN0IG5ld0tleXMgPSBbLi4ua2V5c1JlZi5jdXJyZW50XTtcbiAgICAgICAgbmV3TGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGtleXNSZWYuY3VycmVudCA9IG5ld0tleXM7XG4gICAgICAgIHNldEZpZWxkVmFsdWUoZnVsbE5hbWUsIG5ld0xpc3QpO1xuICAgICAgICBvbkFmdGVyUmVtb3ZlID09PSBudWxsIHx8IG9uQWZ0ZXJSZW1vdmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQWZ0ZXJSZW1vdmUoaW5kZXgpO1xuICAgICAgICAvLyBWYWxpZGF0ZSBhZnRlciByZW1vdmVcbiAgICAgICAgaWYgKHJlcXVpcmVkICYmIG5ld0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzZXRMaXN0RXJyb3IocmVxdWlyZWRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNvcHkgPSB1c2VNZW1vaXplZEZuKChpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIWNhbkFkZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBsaXN0W2luZGV4XSA/IE9iamVjdC5hc3NpZ24oe30sIGxpc3RbaW5kZXhdKSA6IHt9O1xuICAgICAgICBhZGQodmFsdWUsIGluZGV4ICsgMSk7XG4gICAgfSk7XG4gICAgY29uc3QgbW92ZSA9IHVzZU1lbW9pemVkRm4oKGZyb20sIHRvKSA9PiB7XG4gICAgICAgIGlmIChmcm9tID09PSB0bylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGZyb20gPCAwIHx8IGZyb20gPj0gbGlzdC5sZW5ndGggfHwgdG8gPCAwIHx8IHRvID49IGxpc3QubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXdMaXN0ID0gWy4uLmxpc3RdO1xuICAgICAgICBjb25zdCBuZXdLZXlzID0gWy4uLmtleXNSZWYuY3VycmVudF07XG4gICAgICAgIGNvbnN0IFttb3ZlZEl0ZW1dID0gbmV3TGlzdC5zcGxpY2UoZnJvbSwgMSk7XG4gICAgICAgIGNvbnN0IFttb3ZlZEtleV0gPSBuZXdLZXlzLnNwbGljZShmcm9tLCAxKTtcbiAgICAgICAgbmV3TGlzdC5zcGxpY2UodG8sIDAsIG1vdmVkSXRlbSk7XG4gICAgICAgIG5ld0tleXMuc3BsaWNlKHRvLCAwLCBtb3ZlZEtleSk7XG4gICAgICAgIGtleXNSZWYuY3VycmVudCA9IG5ld0tleXM7XG4gICAgICAgIHNldEZpZWxkVmFsdWUoZnVsbE5hbWUsIG5ld0xpc3QpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldExpc3QgPSB1c2VNZW1vaXplZEZuKCgpID0+IGxpc3QpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHVzZU1lbW8oKCkgPT4gKHsgYWRkLCByZW1vdmU6IHJlbW92ZUF0LCBtb3ZlLCBjb3B5LCBnZXRMaXN0IH0pLCBbYWRkLCByZW1vdmVBdCwgbW92ZSwgY29weSwgZ2V0TGlzdF0pO1xuICAgIGNvbnN0IG1hcHBlZEZpZWxkcyA9IHVzZU1lbW8oKCkgPT4gbGlzdC5tYXAoKF9pdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgICAgbmFtZTogYCR7ZnVsbE5hbWV9LiR7aW5kZXh9YCxcbiAgICAgICAga2V5OiBrZXlzUmVmLmN1cnJlbnRbaW5kZXhdIHx8IGBmYWxsYmFja18ke2luZGV4fWAsXG4gICAgfSkpLCBbbGlzdCwgZnVsbE5hbWVdKTtcbiAgICAvLyBSZW5kZXIgY2hpbGRyZW5cbiAgICBjb25zdCBsaXN0RG9tID0gdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gY2hpbGRyZW4obWFwcGVkRmllbGRzLCBhY3Rpb24pXG4gICAgICAgIDogY2hpbGRyZW47XG4gICAgLy8gQWN0aW9uIGJ1dHRvbnMgcGVyIHJvd1xuICAgIGNvbnN0IGFjdGlvblJvd3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGxpc3QubWFwKChyZWNvcmQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb3B5QnRuUHJvcHMgPSBleHRyYWN0QnV0dG9uUHJvcHMoY29weUljb25Qcm9wcyk7XG4gICAgICAgICAgICBjb25zdCBkZWxldGVCdG5Qcm9wcyA9IGV4dHJhY3RCdXR0b25Qcm9wcyhkZWxldGVJY29uUHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdERvbSA9IHtcbiAgICAgICAgICAgICAgICBjb3B5OiBjb3B5SWNvblByb3BzICE9PSBmYWxzZSA/IChfanN4KEJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIGNvbG9yOiBcInNlY29uZGFyeVwiLCBzaXplOiBcInNtYWxsXCIgfSwgY29weUJ0blByb3BzLnJlc3QsIHsgb25DbGljazogKCkgPT4gY29weShpbmRleCksIGRpc2FibGVkOiAhY2FuQWRkIHx8IGNvcHlCdG5Qcm9wcy5kaXNhYmxlZCwgY2hpbGRyZW46IERFRkFVTFRfVEVYVC5jb3B5IH0pLCBgY29weS0ke2luZGV4fWApKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgZGVsZXRlOiBkZWxldGVJY29uUHJvcHMgIT09IGZhbHNlID8gKF9qc3goQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgY29sb3I6IFwic2Vjb25kYXJ5XCIsIHNpemU6IFwic21hbGxcIiB9LCBkZWxldGVCdG5Qcm9wcy5yZXN0LCB7IG9uQ2xpY2s6ICgpID0+IHJlbW92ZUF0KGluZGV4KSwgZGlzYWJsZWQ6ICFjYW5SZW1vdmUgfHwgZGVsZXRlQnRuUHJvcHMuZGlzYWJsZWQsIGNoaWxkcmVuOiBERUZBVUxUX1RFWFQuZGVsZXRlIH0pLCBgZGVsZXRlLSR7aW5kZXh9YCkpIDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZW5kZXJlZEFjdGlvbnMgPSBhY3Rpb25SZW5kZXJcbiAgICAgICAgICAgICAgICA/IGFjdGlvblJlbmRlcih7IGluZGV4LCByZWNvcmQgfSwgYWN0aW9uLCBkZWZhdWx0RG9tKVxuICAgICAgICAgICAgICAgIDogW2RlZmF1bHREb20uY29weSwgZGVmYXVsdERvbS5kZWxldGVdLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd05vZGUgPSAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcygncm93LWFjdGlvbnMnKSwgY2hpbGRyZW46IHJlbmRlcmVkQWN0aW9ucyB9LCBrZXlzUmVmLmN1cnJlbnRbaW5kZXhdIHx8IGluZGV4KSk7XG4gICAgICAgICAgICBpZiAoaXRlbVJlbmRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtUmVuZGVyKHsgbGlzdERvbTogcm93Tm9kZSwgYWN0aW9uIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJvd05vZGU7XG4gICAgICAgIH0pO1xuICAgIH0sIFtsaXN0LCBjb3B5SWNvblByb3BzLCBkZWxldGVJY29uUHJvcHMsIGNhbkFkZCwgY2FuUmVtb3ZlLCBjb3B5LCByZW1vdmVBdCwgYWN0aW9uLCBhY3Rpb25SZW5kZXIsIGl0ZW1SZW5kZXJdKTtcbiAgICAvLyBDcmVhdG9yIGJ1dHRvblxuICAgIGNvbnN0IGhhc0NyZWF0b3IgPSBjcmVhdG9yQnV0dG9uUHJvcHMgIT09IGZhbHNlO1xuICAgIGNvbnN0IGNyZWF0b3JDb25maWcgPSBoYXNDcmVhdG9yICYmIHR5cGVvZiBjcmVhdG9yQnV0dG9uUHJvcHMgPT09ICdvYmplY3QnID8gY3JlYXRvckJ1dHRvblByb3BzIDoge307XG4gICAgY29uc3QgY3JlYXRvclBvc2l0aW9uID0gKF9hID0gY3JlYXRvckNvbmZpZyA9PT0gbnVsbCB8fCBjcmVhdG9yQ29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjcmVhdG9yQ29uZmlnLnBvc2l0aW9uKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnYm90dG9tJztcbiAgICBjb25zdCBjcmVhdG9yVGV4dCA9IChfYiA9IGNyZWF0b3JDb25maWcgPT09IG51bGwgfHwgY3JlYXRvckNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3JlYXRvckNvbmZpZy50ZXh0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBERUZBVUxUX1RFWFQuYWRkO1xuICAgIGNvbnN0IGNyZWF0b3JCdXR0b24gPSBoYXNDcmVhdG9yID8gKF9qc3goQnV0dG9uLCB7IHR5cGU6IFwiYnV0dG9uXCIsIGNvbG9yOiBcInNlY29uZGFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY3JlYXRvclBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIGFkZCh7fSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZGlzYWJsZWQ6ICFjYW5BZGQsIGNoaWxkcmVuOiBjcmVhdG9yVGV4dCB9KSkgOiBudWxsO1xuICAgIGNvbnN0IGZvcm1MaXN0Q29udGV4dFZhbHVlID0gdXNlTWVtbygoKSA9PiAoeyBsaXN0TmFtZTogZnVsbE5hbWUgfSksIFtmdWxsTmFtZV0pO1xuICAgIHJldHVybiAoX2pzeChGb3JtTGlzdENvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGZvcm1MaXN0Q29udGV4dFZhbHVlLCBjaGlsZHJlbjogX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoKSwgY2hpbGRyZW46IFtsYWJlbCAmJiBfanN4KFR5cG9ncmFwaHlMYWJlbCwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2xhYmVsJyksIHNpemU6IFBST0ZPUk1fTElTVF9MQUJFTF9TSVpFLCBjb2xvcjogUFJPRk9STV9MSVNUX0xBQkVMX0NPTE9SLCBjaGlsZHJlbjogbGFiZWwgfSksIGNyZWF0b3JQb3NpdGlvbiA9PT0gJ3RvcCcgJiYgY3JlYXRvckJ1dHRvbiwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnY29udGVudCcpLCBjaGlsZHJlbjogbGlzdERvbSB9KSwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnYWN0aW9ucycpLCBjaGlsZHJlbjogYWN0aW9uUm93cyB9KSwgY3JlYXRvclBvc2l0aW9uID09PSAnYm90dG9tJyAmJiBjcmVhdG9yQnV0dG9uLCBsaXN0RXJyb3IgJiYgX2pzeChUeXBvZ3JhcGh5Qm9keSwgeyBhczogXCJkaXZcIiwgc2l6ZTogXCJzbVwiLCBjb2xvcjogXCJkYW5nZXJcIiwgY2hpbGRyZW46IGxpc3RFcnJvciB9KV0gfSkgfSkpO1xufTtcblByb0Zvcm1MaXN0QmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtTGlzdCc7XG5leHBvcnQgY29uc3QgUHJvRm9ybUxpc3QgPSBtZW1vKFByb0Zvcm1MaXN0QmFzZSk7XG5leHBvcnQgZGVmYXVsdCBQcm9Gb3JtTGlzdDsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
312
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtTGlzdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtTGlzdC50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX3VzZU1lbW9pemVkRm4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3VzZVNhZmVTdGF0ZTMiLCJfY2xhc3NuYW1lcyIsIl9CdXR0b24iLCJfVHlwb2dyYXBoeSIsIl9jb250ZXh0IiwiX2Zvcm1TdG9yZSIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJjbGFzc2VzIiwiY2xhc3NuYW1lcyIsImNvbmNhdCIsIkNTU19QUkVGSVgiLCJsaXN0S2V5Q291bnRlciIsImdlbmVyYXRlS2V5IiwiRU1QVFlfTElTVCIsIkxpc3RSb3dBY3Rpb25zQmFzZSIsIl9yZWYiLCJpbmRleCIsInJlY29yZCIsImNhbkFkZCIsImNhblJlbW92ZSIsImNvcHlJY29uUHJvcHMiLCJkZWxldGVJY29uUHJvcHMiLCJhY3Rpb24iLCJhY3Rpb25SZW5kZXIiLCJpdGVtUmVuZGVyIiwib25Db3B5Iiwib25SZW1vdmUiLCJjb3B5QnRuUHJvcHMiLCJleHRyYWN0QnV0dG9uUHJvcHMiLCJkZWxldGVCdG5Qcm9wcyIsImRlZmF1bHREb20iLCJjb3B5IiwiX2pzeCIsIkJ1dHRvbiIsIk9iamVjdCIsImFzc2lnbiIsInR5cGUiLCJjb2xvciIsInNpemUiLCJyZXN0Iiwib25DbGljayIsImRpc2FibGVkIiwiY2hpbGRyZW4iLCJERUZBVUxUX1RFWFQiLCJyZW5kZXJlZEFjdGlvbnMiLCJmaWx0ZXIiLCJCb29sZWFuIiwicm93Tm9kZSIsImNsYXNzTmFtZSIsIl9GcmFnbWVudCIsImxpc3REb20iLCJkaXNwbGF5TmFtZSIsIkxpc3RSb3dBY3Rpb25zIiwibWVtbyIsIlByb0Zvcm1MaXN0QmFzZSIsInByb3BzIiwiX2EiLCJfYiIsInJhd05hbWUiLCJuYW1lIiwibGFiZWwiLCJtaW4iLCJtYXgiLCJyZXF1aXJlZCIsIl9wcm9wcyRyZXF1aXJlZE1lc3NhZyIsInJlcXVpcmVkTWVzc2FnZSIsImluaXRpYWxWYWx1ZSIsImNyZWF0b3JCdXR0b25Qcm9wcyIsIm9uQWZ0ZXJBZGQiLCJvbkFmdGVyUmVtb3ZlIiwicGFyZW50Q3R4IiwidXNlRm9ybUxpc3RDb250ZXh0IiwiZnVsbE5hbWUiLCJsaXN0TmFtZSIsIl91c2VQcm9Gb3JtU3RhYmxlIiwidXNlUHJvRm9ybVN0YWJsZSIsInNldEZpZWxkVmFsdWUiLCJzdG9yZSIsInVzZVByb0Zvcm1TdG9yZSIsImluaXRpYWxBcHBsaWVkIiwidXNlUmVmIiwia2V5c1JlZiIsIl91c2VTYWZlU3RhdGUiLCJ1c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsImxpc3RFcnJvciIsInNldExpc3RFcnJvciIsImxpc3QiLCJ1c2VTdG9yZVNlbGVjdG9yIiwic3RhdGUiLCJyYXciLCJpbmNsdWRlcyIsImdldE5lc3RlZFZhbHVlIiwidmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwiY3VycmVudCIsImxlbmd0aCIsInB1c2giLCJzbGljZSIsInVzZUVmZmVjdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJtYXAiLCJ2YWxpZGF0ZUxpc3QiLCJ1c2VNZW1vaXplZEZuIiwiYWRkIiwiZGVmYXVsdFZhbHVlIiwidmFsdWUiLCJuZXdMaXN0IiwibmV3S2V5cyIsImluc2VydEluZGV4Iiwic3BsaWNlIiwicmVtb3ZlQXQiLCJtb3ZlIiwiZnJvbSIsInRvIiwiX25ld0xpc3Qkc3BsaWNlIiwiX25ld0xpc3Qkc3BsaWNlMiIsIm1vdmVkSXRlbSIsIl9uZXdLZXlzJHNwbGljZSIsIl9uZXdLZXlzJHNwbGljZTIiLCJtb3ZlZEtleSIsImdldExpc3QiLCJ1c2VNZW1vIiwicmVtb3ZlIiwiZmllbGRPYmpDYWNoZSIsIk1hcCIsIm1hcHBlZEZpZWxkcyIsIm5leHRDYWNoZSIsImZpZWxkcyIsIl9pdGVtIiwia2V5IiwiZmllbGROYW1lIiwiY2FjaGVkIiwiZ2V0IiwiZmllbGQiLCJzZXQiLCJhY3Rpb25Sb3dzIiwiaGFzQ3JlYXRvciIsImNyZWF0b3JDb25maWciLCJfdHlwZW9mMiIsImNyZWF0b3JQb3NpdGlvbiIsInBvc2l0aW9uIiwiY3JlYXRvclRleHQiLCJ0ZXh0IiwiY3JlYXRvckJ1dHRvbiIsImZvcm1MaXN0Q29udGV4dFZhbHVlIiwiRm9ybUxpc3RDb250ZXh0IiwiUHJvdmlkZXIiLCJfanN4cyIsIlR5cG9ncmFwaHlMYWJlbCIsIlBST0ZPUk1fTElTVF9MQUJFTF9TSVpFIiwiUFJPRk9STV9MSVNUX0xBQkVMX0NPTE9SIiwiVHlwb2dyYXBoeUJvZHkiLCJhcyIsIlByb0Zvcm1MaXN0IiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBQUEsV0FBQSxHQUFBQyxPQUFBO0FDQUEsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksY0FBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssV0FBQSxHQUFBRixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsUUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsVUFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsVUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBWCxPQUFBO0FBR0EsSUFBTVksT0FBTyxHQUFHLElBQUFDLHNCQUFVLEtBQUFDLE1BQUEsQ0FBSUMscUJBQVUsVUFBTyxDQUFDO0FBRWhELElBQUlDLGNBQWMsR0FBRyxDQUFDO0FBQ3RCLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBO0VBQUEsZUFBQUgsTUFBQSxDQUF5QixFQUFFRSxjQUFjO0FBQUEsQ0FBRTtBQUU1RDtBQUNBO0FBQ0EsSUFB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QUFBd0csUUFBQSxHQUFBRCxPQUFBLGNBRWxDRCxXQUFXIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtTGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBGcmFnbWVudCBhcyBfRnJhZ21lbnQsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8sIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB1c2VTYWZlU3RhdGUgZnJvbSAnQDFtb25leS9ob29rcy91c2VTYWZlU3RhdGUnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBjbGFzc25hbWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9CdXR0b24nO1xuaW1wb3J0IHsgVHlwb2dyYXBoeUxhYmVsLCBUeXBvZ3JhcGh5Qm9keSB9IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgRm9ybUxpc3RDb250ZXh0LCB1c2VGb3JtTGlzdENvbnRleHQsIHVzZVByb0Zvcm1TdGFibGUsIHVzZVByb0Zvcm1TdG9yZSB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyB1c2VTdG9yZVNlbGVjdG9yIH0gZnJvbSAnLi9jb3JlL2Zvcm1TdG9yZSc7XG5pbXBvcnQgeyBDU1NfUFJFRklYLCBERUZBVUxUX1RFWFQsIFBST0ZPUk1fTElTVF9MQUJFTF9TSVpFLCBQUk9GT1JNX0xJU1RfTEFCRUxfQ09MT1IgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBleHRyYWN0QnV0dG9uUHJvcHMsIGdldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi91dGlscyc7XG5jb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhgJHtDU1NfUFJFRklYfS1saXN0YCk7XG5sZXQgbGlzdEtleUNvdW50ZXIgPSAwO1xuY29uc3QgZ2VuZXJhdGVLZXkgPSAoKSA9PiBgbGlzdF8keysrbGlzdEtleUNvdW50ZXJ9YDtcbi8vIFN0YWJsZSBlbXB0eSByZXN1bHQgZm9yIHRoZSBuby12YWx1ZSBjYXNlIOKAlCBhIGZyZXNoIFtdIHBlciBzZWxlY3RvciBydW5cbi8vIHdvdWxkIG5ldmVyIGNvbXBhcmUgZXF1YWwgYW5kIGxvb3AgdGhlIHN1YnNjcmlwdGlvbi5cbmNvbnN0IEVNUFRZX0xJU1QgPSBbXTtcbi8vIFJvdy1sZXZlbCBtZW1vIGJvdW5kYXJ5OiBzZXROZXN0ZWRWYWx1ZSBjbG9uZXMgT05MWSB0aGUgZWRpdGVkIHJvdywgc29cbi8vIHVudG91Y2hlZCByb3dzIGtlZXAgdGhlaXIgcmVjb3JkIGlkZW50aXR5IGFuZCBiYWlsIG91dCBoZXJlIHdoaWxlIGFcbi8vIHNpYmxpbmcgcm93IGlzIGJlaW5nIGVkaXRlZC5cbmNvbnN0IExpc3RSb3dBY3Rpb25zQmFzZSA9ICh7IGluZGV4LCByZWNvcmQsIGNhbkFkZCwgY2FuUmVtb3ZlLCBjb3B5SWNvblByb3BzLCBkZWxldGVJY29uUHJvcHMsIGFjdGlvbiwgYWN0aW9uUmVuZGVyLCBpdGVtUmVuZGVyLCBvbkNvcHksIG9uUmVtb3ZlLCB9KSA9PiB7XG4gICAgY29uc3QgY29weUJ0blByb3BzID0gZXh0cmFjdEJ1dHRvblByb3BzKGNvcHlJY29uUHJvcHMpO1xuICAgIGNvbnN0IGRlbGV0ZUJ0blByb3BzID0gZXh0cmFjdEJ1dHRvblByb3BzKGRlbGV0ZUljb25Qcm9wcyk7XG4gICAgY29uc3QgZGVmYXVsdERvbSA9IHtcbiAgICAgICAgY29weTogY29weUljb25Qcm9wcyAhPT0gZmFsc2UgPyAoX2pzeChCdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBjb2xvcjogXCJzZWNvbmRhcnlcIiwgc2l6ZTogXCJzbWFsbFwiIH0sIGNvcHlCdG5Qcm9wcy5yZXN0LCB7IG9uQ2xpY2s6ICgpID0+IG9uQ29weShpbmRleCksIGRpc2FibGVkOiAhY2FuQWRkIHx8IGNvcHlCdG5Qcm9wcy5kaXNhYmxlZCwgY2hpbGRyZW46IERFRkFVTFRfVEVYVC5jb3B5IH0pLCBgY29weS0ke2luZGV4fWApKSA6IG51bGwsXG4gICAgICAgIGRlbGV0ZTogZGVsZXRlSWNvblByb3BzICE9PSBmYWxzZSA/IChfanN4KEJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIGNvbG9yOiBcInNlY29uZGFyeVwiLCBzaXplOiBcInNtYWxsXCIgfSwgZGVsZXRlQnRuUHJvcHMucmVzdCwgeyBvbkNsaWNrOiAoKSA9PiBvblJlbW92ZShpbmRleCksIGRpc2FibGVkOiAhY2FuUmVtb3ZlIHx8IGRlbGV0ZUJ0blByb3BzLmRpc2FibGVkLCBjaGlsZHJlbjogREVGQVVMVF9URVhULmRlbGV0ZSB9KSwgYGRlbGV0ZS0ke2luZGV4fWApKSA6IG51bGwsXG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJlZEFjdGlvbnMgPSBhY3Rpb25SZW5kZXJcbiAgICAgICAgPyBhY3Rpb25SZW5kZXIoeyBpbmRleCwgcmVjb3JkIH0sIGFjdGlvbiwgZGVmYXVsdERvbSlcbiAgICAgICAgOiBbZGVmYXVsdERvbS5jb3B5LCBkZWZhdWx0RG9tLmRlbGV0ZV0uZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IHJvd05vZGUgPSAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcygncm93LWFjdGlvbnMnKSwgY2hpbGRyZW46IHJlbmRlcmVkQWN0aW9ucyB9KSk7XG4gICAgaWYgKGl0ZW1SZW5kZXIpIHtcbiAgICAgICAgcmV0dXJuIF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBpdGVtUmVuZGVyKHsgbGlzdERvbTogcm93Tm9kZSwgYWN0aW9uIH0pIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcm93Tm9kZTtcbn07XG5MaXN0Um93QWN0aW9uc0Jhc2UuZGlzcGxheU5hbWUgPSAnUHJvRm9ybUxpc3RSb3dBY3Rpb25zJztcbmNvbnN0IExpc3RSb3dBY3Rpb25zID0gbWVtbyhMaXN0Um93QWN0aW9uc0Jhc2UpO1xuY29uc3QgUHJvRm9ybUxpc3RCYXNlID0gKHByb3BzKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB7IG5hbWU6IHJhd05hbWUsIGxhYmVsLCBtaW4sIG1heCwgcmVxdWlyZWQsIHJlcXVpcmVkTWVzc2FnZSA9ICdUaGlzIGxpc3QgY2Fubm90IGJlIGVtcHR5JywgaW5pdGlhbFZhbHVlLCBjb3B5SWNvblByb3BzLCBkZWxldGVJY29uUHJvcHMsIGNyZWF0b3JCdXR0b25Qcm9wcywgaXRlbVJlbmRlciwgYWN0aW9uUmVuZGVyLCBjaGlsZHJlbiwgb25BZnRlckFkZCwgb25BZnRlclJlbW92ZSwgfSA9IHByb3BzO1xuICAgIC8vIOKUgOKUgCBOZXN0ZWQgbGlzdDogcHJlcGVuZCBwYXJlbnQgbGlzdCBuYW1lIOKUgOKUgFxuICAgIGNvbnN0IHBhcmVudEN0eCA9IHVzZUZvcm1MaXN0Q29udGV4dCgpO1xuICAgIGNvbnN0IGZ1bGxOYW1lID0gcGFyZW50Q3R4Lmxpc3ROYW1lID8gYCR7cGFyZW50Q3R4Lmxpc3ROYW1lfS4ke3Jhd05hbWV9YCA6IHJhd05hbWU7XG4gICAgY29uc3QgeyBzZXRGaWVsZFZhbHVlIH0gPSB1c2VQcm9Gb3JtU3RhYmxlKCk7XG4gICAgY29uc3Qgc3RvcmUgPSB1c2VQcm9Gb3JtU3RvcmUoKTtcbiAgICBjb25zdCBpbml0aWFsQXBwbGllZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qga2V5c1JlZiA9IHVzZVJlZihbXSk7XG4gICAgY29uc3QgW2xpc3RFcnJvciwgc2V0TGlzdEVycm9yXSA9IHVzZVNhZmVTdGF0ZShudWxsKTtcbiAgICAvLyBTdWJzY3JpYmUgT05MWSB0byB0aGlzIGxpc3QncyBvd24gdmFsdWU6IHR5cGluZyBlbHNld2hlcmUgaW4gdGhlIGZvcm1cbiAgICAvLyBsZWF2ZXMgdGhlIGFycmF5IGlkZW50aXR5IHVudG91Y2hlZCBhbmQgdGhpcyBjb21wb25lbnQgZG9lcyBub3QgcmVuZGVyLlxuICAgIGNvbnN0IGxpc3QgPSB1c2VTdG9yZVNlbGVjdG9yKHN0b3JlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgcmF3ID0gZnVsbE5hbWUuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgPyBnZXROZXN0ZWRWYWx1ZShzdGF0ZS52YWx1ZXMsIGZ1bGxOYW1lKVxuICAgICAgICAgICAgOiBzdGF0ZS52YWx1ZXNbZnVsbE5hbWVdO1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyYXcpID8gcmF3IDogRU1QVFlfTElTVDtcbiAgICB9KTtcbiAgICAvLyBTeW5jIGtleXMgd2l0aCBsaXN0IGxlbmd0aFxuICAgIHdoaWxlIChrZXlzUmVmLmN1cnJlbnQubGVuZ3RoIDwgbGlzdC5sZW5ndGgpIHtcbiAgICAgICAga2V5c1JlZi5jdXJyZW50LnB1c2goZ2VuZXJhdGVLZXkoKSk7XG4gICAgfVxuICAgIGlmIChrZXlzUmVmLmN1cnJlbnQubGVuZ3RoID4gbGlzdC5sZW5ndGgpIHtcbiAgICAgICAga2V5c1JlZi5jdXJyZW50ID0ga2V5c1JlZi5jdXJyZW50LnNsaWNlKDAsIGxpc3QubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gQXBwbHkgaW5pdGlhbCB2YWx1ZSBvbmNlXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGluaXRpYWxBcHBsaWVkLmN1cnJlbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCAhPT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGluaXRpYWxWYWx1ZSkgfHwgaW5pdGlhbFZhbHVlLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaW5pdGlhbEFwcGxpZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIHNldEZpZWxkVmFsdWUoZnVsbE5hbWUsIFsuLi5pbml0aWFsVmFsdWVdKTtcbiAgICAgICAga2V5c1JlZi5jdXJyZW50ID0gaW5pdGlhbFZhbHVlLm1hcCgoKSA9PiBnZW5lcmF0ZUtleSgpKTtcbiAgICB9LCBbbGlzdC5sZW5ndGgsIGluaXRpYWxWYWx1ZSwgZnVsbE5hbWUsIHNldEZpZWxkVmFsdWVdKTtcbiAgICAvLyBDbGVhciBlcnJvciB3aGVuIGxpc3QgYmVjb21lcyBub24tZW1wdHlcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocmVxdWlyZWQgJiYgbGlzdC5sZW5ndGggPiAwICYmIGxpc3RFcnJvcikge1xuICAgICAgICAgICAgc2V0TGlzdEVycm9yKG51bGwpO1xuICAgICAgICB9XG4gICAgfSwgW2xpc3QubGVuZ3RoLCByZXF1aXJlZCwgbGlzdEVycm9yLCBzZXRMaXN0RXJyb3JdKTtcbiAgICBjb25zdCBjYW5BZGQgPSBtYXggPT0gbnVsbCB8fCBsaXN0Lmxlbmd0aCA8IG1heDtcbiAgICBjb25zdCBjYW5SZW1vdmUgPSBtaW4gPT0gbnVsbCB8fCBsaXN0Lmxlbmd0aCA+IG1pbjtcbiAgICBjb25zdCB2YWxpZGF0ZUxpc3QgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgaWYgKCFyZXF1aXJlZClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNldExpc3RFcnJvcihyZXF1aXJlZE1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHNldExpc3RFcnJvcihudWxsKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgYWRkID0gdXNlTWVtb2l6ZWRGbigoZGVmYXVsdFZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIWNhbkFkZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0VmFsdWUgIT09IG51bGwgJiYgZGVmYXVsdFZhbHVlICE9PSB2b2lkIDAgPyBkZWZhdWx0VmFsdWUgOiB7fTtcbiAgICAgICAgY29uc3QgbmV3TGlzdCA9IFsuLi5saXN0XTtcbiAgICAgICAgY29uc3QgbmV3S2V5cyA9IFsuLi5rZXlzUmVmLmN1cnJlbnRdO1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicgPyBpbmRleCA6IG5ld0xpc3QubGVuZ3RoO1xuICAgICAgICBuZXdMaXN0LnNwbGljZShpbnNlcnRJbmRleCwgMCwgdmFsdWUpO1xuICAgICAgICBuZXdLZXlzLnNwbGljZShpbnNlcnRJbmRleCwgMCwgZ2VuZXJhdGVLZXkoKSk7XG4gICAgICAgIGtleXNSZWYuY3VycmVudCA9IG5ld0tleXM7XG4gICAgICAgIHNldEZpZWxkVmFsdWUoZnVsbE5hbWUsIG5ld0xpc3QpO1xuICAgICAgICBvbkFmdGVyQWRkID09PSBudWxsIHx8IG9uQWZ0ZXJBZGQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQWZ0ZXJBZGQodmFsdWUsIGluc2VydEluZGV4KTtcbiAgICB9KTtcbiAgICBjb25zdCByZW1vdmVBdCA9IHVzZU1lbW9pemVkRm4oKGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghY2FuUmVtb3ZlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXdMaXN0ID0gWy4uLmxpc3RdO1xuICAgICAgICBjb25zdCBuZXdLZXlzID0gWy4uLmtleXNSZWYuY3VycmVudF07XG4gICAgICAgIG5ld0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgbmV3S2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBrZXlzUmVmLmN1cnJlbnQgPSBuZXdLZXlzO1xuICAgICAgICBzZXRGaWVsZFZhbHVlKGZ1bGxOYW1lLCBuZXdMaXN0KTtcbiAgICAgICAgb25BZnRlclJlbW92ZSA9PT0gbnVsbCB8fCBvbkFmdGVyUmVtb3ZlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFmdGVyUmVtb3ZlKGluZGV4KTtcbiAgICAgICAgLy8gVmFsaWRhdGUgYWZ0ZXIgcmVtb3ZlXG4gICAgICAgIGlmIChyZXF1aXJlZCAmJiBuZXdMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2V0TGlzdEVycm9yKHJlcXVpcmVkTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb3B5ID0gdXNlTWVtb2l6ZWRGbigoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFjYW5BZGQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbGlzdFtpbmRleF0gPyBPYmplY3QuYXNzaWduKHt9LCBsaXN0W2luZGV4XSkgOiB7fTtcbiAgICAgICAgYWRkKHZhbHVlLCBpbmRleCArIDEpO1xuICAgIH0pO1xuICAgIGNvbnN0IG1vdmUgPSB1c2VNZW1vaXplZEZuKChmcm9tLCB0bykgPT4ge1xuICAgICAgICBpZiAoZnJvbSA9PT0gdG8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChmcm9tIDwgMCB8fCBmcm9tID49IGxpc3QubGVuZ3RoIHx8IHRvIDwgMCB8fCB0byA+PSBsaXN0Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV3TGlzdCA9IFsuLi5saXN0XTtcbiAgICAgICAgY29uc3QgbmV3S2V5cyA9IFsuLi5rZXlzUmVmLmN1cnJlbnRdO1xuICAgICAgICBjb25zdCBbbW92ZWRJdGVtXSA9IG5ld0xpc3Quc3BsaWNlKGZyb20sIDEpO1xuICAgICAgICBjb25zdCBbbW92ZWRLZXldID0gbmV3S2V5cy5zcGxpY2UoZnJvbSwgMSk7XG4gICAgICAgIG5ld0xpc3Quc3BsaWNlKHRvLCAwLCBtb3ZlZEl0ZW0pO1xuICAgICAgICBuZXdLZXlzLnNwbGljZSh0bywgMCwgbW92ZWRLZXkpO1xuICAgICAgICBrZXlzUmVmLmN1cnJlbnQgPSBuZXdLZXlzO1xuICAgICAgICBzZXRGaWVsZFZhbHVlKGZ1bGxOYW1lLCBuZXdMaXN0KTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRMaXN0ID0gdXNlTWVtb2l6ZWRGbigoKSA9PiBsaXN0KTtcbiAgICBjb25zdCBhY3Rpb24gPSB1c2VNZW1vKCgpID0+ICh7IGFkZCwgcmVtb3ZlOiByZW1vdmVBdCwgbW92ZSwgY29weSwgZ2V0TGlzdCB9KSwgW2FkZCwgcmVtb3ZlQXQsIG1vdmUsIGNvcHksIGdldExpc3RdKTtcbiAgICAvLyBQZXIta2V5IGNhY2hlIGtlZXBzIGVhY2ggcm93J3MgZmllbGQgb2JqZWN0IGlkZW50aXR5IHN0YWJsZSBhY3Jvc3MgbGlzdFxuICAgIC8vIGNvbW1pdHMgKGUuZy4gdHlwaW5nIGluIGEgc2libGluZyByb3cpLCBzbyBtZW1vaXplZCByb3cgY29udGVudCBzZWVzXG4gICAgLy8gc2hhbGxvdy1lcXVhbCBwcm9wcyBhbmQgYmFpbHMgb3V0LlxuICAgIGNvbnN0IGZpZWxkT2JqQ2FjaGUgPSB1c2VSZWYobmV3IE1hcCgpKTtcbiAgICBjb25zdCBtYXBwZWRGaWVsZHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dENhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBsaXN0Lm1hcCgoX2l0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzUmVmLmN1cnJlbnRbaW5kZXhdIHx8IGBmYWxsYmFja18ke2luZGV4fWA7XG4gICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBgJHtmdWxsTmFtZX0uJHtpbmRleH1gO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gZmllbGRPYmpDYWNoZS5jdXJyZW50LmdldChrZXkpO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBjYWNoZWQgJiYgY2FjaGVkLm5hbWUgPT09IGZpZWxkTmFtZSA/IGNhY2hlZCA6IHsgbmFtZTogZmllbGROYW1lLCBrZXkgfTtcbiAgICAgICAgICAgIG5leHRDYWNoZS5zZXQoa2V5LCBmaWVsZCk7XG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWVsZE9iakNhY2hlLmN1cnJlbnQgPSBuZXh0Q2FjaGU7XG4gICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfSwgW2xpc3QsIGZ1bGxOYW1lXSk7XG4gICAgLy8gTWVtb2l6ZWQgc28gdGhlIHJvdyBmYWN0b3J5IGlzIHJlLWludm9rZWQgb25seSB3aGVuIHRoZSBsaXN0IGl0c2VsZiAob3JcbiAgICAvLyB0aGUgY29uc3VtZXItcHJvdmlkZWQgY2hpbGRyZW4pIGNoYW5nZXMg4oCUIG5ldmVyIGZvciB1bnJlbGF0ZWQgY29tbWl0cy5cbiAgICBjb25zdCBsaXN0RG9tID0gdXNlTWVtbygoKSA9PiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4obWFwcGVkRmllbGRzLCBhY3Rpb24pIDogY2hpbGRyZW4pLCBbY2hpbGRyZW4sIG1hcHBlZEZpZWxkcywgYWN0aW9uXSk7XG4gICAgLy8gQWN0aW9uIGJ1dHRvbnMgcGVyIHJvdyDigJQgTGlzdFJvd0FjdGlvbnMgaXMgdGhlIG1lbW8gYm91bmRhcnlcbiAgICBjb25zdCBhY3Rpb25Sb3dzID0gbGlzdC5tYXAoKHJlY29yZCwgaW5kZXgpID0+IChfanN4KExpc3RSb3dBY3Rpb25zLCB7IGluZGV4OiBpbmRleCwgcmVjb3JkOiByZWNvcmQsIGNhbkFkZDogY2FuQWRkLCBjYW5SZW1vdmU6IGNhblJlbW92ZSwgY29weUljb25Qcm9wczogY29weUljb25Qcm9wcywgZGVsZXRlSWNvblByb3BzOiBkZWxldGVJY29uUHJvcHMsIGFjdGlvbjogYWN0aW9uLCBhY3Rpb25SZW5kZXI6IGFjdGlvblJlbmRlciwgaXRlbVJlbmRlcjogaXRlbVJlbmRlciwgb25Db3B5OiBjb3B5LCBvblJlbW92ZTogcmVtb3ZlQXQgfSwga2V5c1JlZi5jdXJyZW50W2luZGV4XSB8fCBpbmRleCkpKTtcbiAgICAvLyBDcmVhdG9yIGJ1dHRvblxuICAgIGNvbnN0IGhhc0NyZWF0b3IgPSBjcmVhdG9yQnV0dG9uUHJvcHMgIT09IGZhbHNlO1xuICAgIGNvbnN0IGNyZWF0b3JDb25maWcgPSBoYXNDcmVhdG9yICYmIHR5cGVvZiBjcmVhdG9yQnV0dG9uUHJvcHMgPT09ICdvYmplY3QnID8gY3JlYXRvckJ1dHRvblByb3BzIDoge307XG4gICAgY29uc3QgY3JlYXRvclBvc2l0aW9uID0gKF9hID0gY3JlYXRvckNvbmZpZyA9PT0gbnVsbCB8fCBjcmVhdG9yQ29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjcmVhdG9yQ29uZmlnLnBvc2l0aW9uKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnYm90dG9tJztcbiAgICBjb25zdCBjcmVhdG9yVGV4dCA9IChfYiA9IGNyZWF0b3JDb25maWcgPT09IG51bGwgfHwgY3JlYXRvckNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3JlYXRvckNvbmZpZy50ZXh0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBERUZBVUxUX1RFWFQuYWRkO1xuICAgIGNvbnN0IGNyZWF0b3JCdXR0b24gPSBoYXNDcmVhdG9yID8gKF9qc3goQnV0dG9uLCB7IHR5cGU6IFwiYnV0dG9uXCIsIGNvbG9yOiBcInNlY29uZGFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY3JlYXRvclBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIGFkZCh7fSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZGlzYWJsZWQ6ICFjYW5BZGQsIGNoaWxkcmVuOiBjcmVhdG9yVGV4dCB9KSkgOiBudWxsO1xuICAgIGNvbnN0IGZvcm1MaXN0Q29udGV4dFZhbHVlID0gdXNlTWVtbygoKSA9PiAoeyBsaXN0TmFtZTogZnVsbE5hbWUgfSksIFtmdWxsTmFtZV0pO1xuICAgIHJldHVybiAoX2pzeChGb3JtTGlzdENvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGZvcm1MaXN0Q29udGV4dFZhbHVlLCBjaGlsZHJlbjogX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoKSwgY2hpbGRyZW46IFtsYWJlbCAmJiBfanN4KFR5cG9ncmFwaHlMYWJlbCwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2xhYmVsJyksIHNpemU6IFBST0ZPUk1fTElTVF9MQUJFTF9TSVpFLCBjb2xvcjogUFJPRk9STV9MSVNUX0xBQkVMX0NPTE9SLCBjaGlsZHJlbjogbGFiZWwgfSksIGNyZWF0b3JQb3NpdGlvbiA9PT0gJ3RvcCcgJiYgY3JlYXRvckJ1dHRvbiwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnY29udGVudCcpLCBjaGlsZHJlbjogbGlzdERvbSB9KSwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnYWN0aW9ucycpLCBjaGlsZHJlbjogYWN0aW9uUm93cyB9KSwgY3JlYXRvclBvc2l0aW9uID09PSAnYm90dG9tJyAmJiBjcmVhdG9yQnV0dG9uLCBsaXN0RXJyb3IgJiYgX2pzeChUeXBvZ3JhcGh5Qm9keSwgeyBhczogXCJkaXZcIiwgc2l6ZTogXCJzbVwiLCBjb2xvcjogXCJkYW5nZXJcIiwgY2hpbGRyZW46IGxpc3RFcnJvciB9KV0gfSkgfSkpO1xufTtcblByb0Zvcm1MaXN0QmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtTGlzdCc7XG5leHBvcnQgY29uc3QgUHJvRm9ybUxpc3QgPSBtZW1vKFByb0Zvcm1MaXN0QmFzZSk7XG5leHBvcnQgZGVmYXVsdCBQcm9Gb3JtTGlzdDsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,7 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { SchemaFormProps } from './interface';
3
+ /** Generic-aware export — keeps `<SchemaForm<MyValues> …>` fully typed. */
4
+ export declare const SchemaForm: (<Values = Record<string, unknown>>(props: SchemaFormProps<Values>) => ReactElement | null) & {
5
+ displayName?: string;
6
+ };
7
+ export default SchemaForm;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = exports.SchemaForm = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ var _react = require("react");
11
+ var _ProForm = require("./ProForm");
12
+ var _fields = require("./fields");
13
+ var _pathUtils = require("./core/pathUtils");
14
+ 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; } } }; }
15
+ 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; } }
16
+ 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; }
17
+ var __rest = void 0 && (void 0).__rest || function (s, e) {
18
+ var t = {};
19
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
20
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
21
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
22
+ }
23
+ return t;
24
+ };
25
+ // valueType → ProForm field component. `digit` reuses the text field with a
26
+ // numeric input type (the library has no standalone InputNumber).
27
+ var VALUE_TYPE_FIELDS = {
28
+ text: _fields.ProFormText,
29
+ password: _fields.ProFormPassword,
30
+ textarea: _fields.ProFormTextArea,
31
+ digit: _fields.ProFormText,
32
+ select: _fields.ProFormSelect,
33
+ checkbox: _fields.ProFormCheckbox,
34
+ checkboxGroup: _fields.ProFormCheckboxGroup,
35
+ radioGroup: _fields.ProFormRadioGroup,
36
+ "switch": _fields.ProFormSwitch,
37
+ slider: _fields.ProFormSlider,
38
+ date: _fields.ProFormDatePicker,
39
+ dateTime: _fields.ProFormDatePicker,
40
+ upload: _fields.ProFormUpload
41
+ };
42
+ function renderColumn(column) {
43
+ var _a;
44
+ if (column.renderFormItem) {
45
+ return (0, _jsxRuntime.jsx)(_react.Fragment, {
46
+ children: column.renderFormItem(column)
47
+ }, column.dataIndex);
48
+ }
49
+ var title = column.title,
50
+ dataIndex = column.dataIndex,
51
+ _column$valueType = column.valueType,
52
+ valueType = _column$valueType === void 0 ? 'text' : _column$valueType,
53
+ fieldProps = column.fieldProps,
54
+ _initialValue = column.initialValue,
55
+ _renderFormItem = column.renderFormItem,
56
+ rest = __rest(column, ["title", "dataIndex", "valueType", "fieldProps", "initialValue", "renderFormItem"]);
57
+ var Field = (_a = VALUE_TYPE_FIELDS[valueType]) !== null && _a !== void 0 ? _a : VALUE_TYPE_FIELDS.text;
58
+ var mergedFieldProps = fieldProps;
59
+ if (valueType === 'digit') {
60
+ mergedFieldProps = Object.assign({
61
+ type: 'number'
62
+ }, fieldProps);
63
+ } else if (valueType === 'dateTime') {
64
+ mergedFieldProps = Object.assign({
65
+ showTime: true
66
+ }, fieldProps);
67
+ }
68
+ return (0, _jsxRuntime.jsx)(Field, Object.assign({
69
+ name: dataIndex,
70
+ label: title,
71
+ fieldProps: mergedFieldProps
72
+ }, valueType === 'dateTime' ? {
73
+ valueType: 'dateTime'
74
+ } : {}, rest), dataIndex);
75
+ }
76
+ var SchemaFormBase = function SchemaFormBase(props) {
77
+ var columns = props.columns,
78
+ initialValues = props.initialValues,
79
+ formProps = __rest(props, ["columns", "initialValues"]);
80
+ // Column-level initialValue seeds the form; form-level initialValues win.
81
+ var mergedInitialValues = (0, _react.useMemo)(function () {
82
+ var fromColumns = {};
83
+ var hasColumnValue = false;
84
+ var _iterator = _createForOfIteratorHelper(columns),
85
+ _step;
86
+ try {
87
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
88
+ var column = _step.value;
89
+ if (column.initialValue === undefined) continue;
90
+ hasColumnValue = true;
91
+ fromColumns = column.dataIndex.includes('.') ? (0, _pathUtils.setNestedValue)(fromColumns, column.dataIndex, column.initialValue) : Object.assign(Object.assign({}, fromColumns), (0, _defineProperty2["default"])({}, column.dataIndex, column.initialValue));
92
+ }
93
+ } catch (err) {
94
+ _iterator.e(err);
95
+ } finally {
96
+ _iterator.f();
97
+ }
98
+ if (!hasColumnValue) return initialValues;
99
+ return Object.assign(Object.assign({}, fromColumns), initialValues);
100
+ }, [columns, initialValues]);
101
+ return (0, _jsxRuntime.jsx)(_ProForm.ProForm, Object.assign({}, formProps, {
102
+ initialValues: mergedInitialValues,
103
+ children: columns.map(renderColumn)
104
+ }));
105
+ };
106
+ SchemaFormBase.displayName = 'SchemaForm';
107
+ /** Generic-aware export — keeps `<SchemaForm<MyValues> …>` fully typed. */
108
+ var SchemaForm = exports.SchemaForm = /*#__PURE__*/(0, _react.memo)(SchemaFormBase);
109
+ var _default = exports["default"] = SchemaForm;
110
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9TY2hlbWFGb3JtLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL1NjaGVtYUZvcm0udHN4Il0sIm5hbWVzIjpbIl9qc3hSdW50aW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9Qcm9Gb3JtIiwiX2ZpZWxkcyIsIl9wYXRoVXRpbHMiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9fcmVzdCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJWQUxVRV9UWVBFX0ZJRUxEUyIsInRleHQiLCJQcm9Gb3JtVGV4dCIsInBhc3N3b3JkIiwiUHJvRm9ybVBhc3N3b3JkIiwidGV4dGFyZWEiLCJQcm9Gb3JtVGV4dEFyZWEiLCJkaWdpdCIsInNlbGVjdCIsIlByb0Zvcm1TZWxlY3QiLCJjaGVja2JveCIsIlByb0Zvcm1DaGVja2JveCIsImNoZWNrYm94R3JvdXAiLCJQcm9Gb3JtQ2hlY2tib3hHcm91cCIsInJhZGlvR3JvdXAiLCJQcm9Gb3JtUmFkaW9Hcm91cCIsIlByb0Zvcm1Td2l0Y2giLCJzbGlkZXIiLCJQcm9Gb3JtU2xpZGVyIiwiZGF0ZSIsIlByb0Zvcm1EYXRlUGlja2VyIiwiZGF0ZVRpbWUiLCJ1cGxvYWQiLCJQcm9Gb3JtVXBsb2FkIiwicmVuZGVyQ29sdW1uIiwiY29sdW1uIiwiX2EiLCJyZW5kZXJGb3JtSXRlbSIsIl9qc3giLCJGcmFnbWVudCIsImNoaWxkcmVuIiwiZGF0YUluZGV4IiwidGl0bGUiLCJfY29sdW1uJHZhbHVlVHlwZSIsInZhbHVlVHlwZSIsImZpZWxkUHJvcHMiLCJfaW5pdGlhbFZhbHVlIiwiaW5pdGlhbFZhbHVlIiwiX3JlbmRlckZvcm1JdGVtIiwicmVzdCIsIkZpZWxkIiwibWVyZ2VkRmllbGRQcm9wcyIsImFzc2lnbiIsInR5cGUiLCJzaG93VGltZSIsImxhYmVsIiwiU2NoZW1hRm9ybUJhc2UiLCJwcm9wcyIsImNvbHVtbnMiLCJpbml0aWFsVmFsdWVzIiwiZm9ybVByb3BzIiwibWVyZ2VkSW5pdGlhbFZhbHVlcyIsInVzZU1lbW8iLCJmcm9tQ29sdW1ucyIsImhhc0NvbHVtblZhbHVlIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJ1bmRlZmluZWQiLCJpbmNsdWRlcyIsInNldE5lc3RlZFZhbHVlIiwiX2RlZmluZVByb3BlcnR5MiIsImVyciIsIlByb0Zvcm0iLCJtYXAiLCJkaXNwbGF5TmFtZSIsIlNjaGVtYUZvcm0iLCJleHBvcnRzIiwibWVtbyIsIl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVdBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ1hBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQWFBLElBQUFJLFVBQUEsR0FBQUosT0FBQTtBQUFrRCxTQUFBSywyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFB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Q1ksWUFBWSxDQUFBLENBQUU7TUFDakU7SUFBQyxTQUFBd0IsR0FBQTtNQUFBTixTQUFBLENBQUE1RixDQUFBLENBQUFrRyxHQUFBO0lBQUE7TUFBQU4sU0FBQSxDQUFBOUUsQ0FBQTtJQUFBO0lBQ0QsSUFBSSxDQUFDNkUsY0FBYyxFQUFFLE9BQU9MLGFBQWE7SUFDekMsT0FBQXhELE1BQUEsQ0FBQWlELE1BQUEsQ0FBQWpELE1BQUEsQ0FBQWlELE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBWVcsV0FBVyxDQUFBLEVBQUtKLGFBQWEsQ0FBQTtFQUMzQyxDQUFDLEVBQUUsQ0FBQ0QsT0FBTyxFQUFFQyxhQUFhLENBQUMsQ0FBQztFQUU1QixPQUNFLElBQUFyQixlQUFBLEVBQUNrQyxnQkFBTyxFQUFBckUsTUFBQSxDQUFBaUQsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFLUSxTQUFTLEVBQUE7SUFBRUQsYUFBYSxFQUFFRSxtQkFBbUI7SUFBQXJCLFFBQUEsRUFDdkRrQixPQUFPLENBQUNlLEdBQUcsQ0FBQ3ZDLFlBQVk7RUFBQyxDQUFBLENBQUEsQ0FDbEI7QUFFZCxDQUFDO0FBRURzQixjQUFjLENBQUNrQixXQUFXLEdBQUcsWUFBWTtBQUV6QztBQUNPLElBQU1DLFVBQVUsR0FBQUMsT0FBQSxDQUFBRCxVQUFBLGdCQUFHLElBQUFFLFdBQUksRUFBQ3JCLGNBQWMsQ0FFTztBQUFDLElBQUFzQixRQUFBLEdBQUFGLE9BQUEsY0FFdENELFVBQVUiLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL1NjaGVtYUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgRnJhZ21lbnQsIG1lbW8sIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcm9Gb3JtIH0gZnJvbSAnLi9Qcm9Gb3JtJztcbmltcG9ydCB7IFByb0Zvcm1UZXh0LCBQcm9Gb3JtUGFzc3dvcmQsIFByb0Zvcm1UZXh0QXJlYSwgUHJvRm9ybVNlbGVjdCwgUHJvRm9ybUNoZWNrYm94LCBQcm9Gb3JtQ2hlY2tib3hHcm91cCwgUHJvRm9ybVJhZGlvR3JvdXAsIFByb0Zvcm1Td2l0Y2gsIFByb0Zvcm1TbGlkZXIsIFByb0Zvcm1EYXRlUGlja2VyLCBQcm9Gb3JtVXBsb2FkLCB9IGZyb20gJy4vZmllbGRzJztcbmltcG9ydCB7IHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi9jb3JlL3BhdGhVdGlscyc7XG4vLyB2YWx1ZVR5cGUg4oaSIFByb0Zvcm0gZmllbGQgY29tcG9uZW50LiBgZGlnaXRgIHJldXNlcyB0aGUgdGV4dCBmaWVsZCB3aXRoIGFcbi8vIG51bWVyaWMgaW5wdXQgdHlwZSAodGhlIGxpYnJhcnkgaGFzIG5vIHN0YW5kYWxvbmUgSW5wdXROdW1iZXIpLlxuY29uc3QgVkFMVUVfVFlQRV9GSUVMRFMgPSB7XG4gICAgdGV4dDogUHJvRm9ybVRleHQsXG4gICAgcGFzc3dvcmQ6IFByb0Zvcm1QYXNzd29yZCxcbiAgICB0ZXh0YXJlYTogUHJvRm9ybVRleHRBcmVhLFxuICAgIGRpZ2l0OiBQcm9Gb3JtVGV4dCxcbiAgICBzZWxlY3Q6IFByb0Zvcm1TZWxlY3QsXG4gICAgY2hlY2tib3g6IFByb0Zvcm1DaGVja2JveCxcbiAgICBjaGVja2JveEdyb3VwOiBQcm9Gb3JtQ2hlY2tib3hHcm91cCxcbiAgICByYWRpb0dyb3VwOiBQcm9Gb3JtUmFkaW9Hcm91cCxcbiAgICBzd2l0Y2g6IFByb0Zvcm1Td2l0Y2gsXG4gICAgc2xpZGVyOiBQcm9Gb3JtU2xpZGVyLFxuICAgIGRhdGU6IFByb0Zvcm1EYXRlUGlja2VyLFxuICAgIGRhdGVUaW1lOiBQcm9Gb3JtRGF0ZVBpY2tlcixcbiAgICB1cGxvYWQ6IFByb0Zvcm1VcGxvYWQsXG59O1xuZnVuY3Rpb24gcmVuZGVyQ29sdW1uKGNvbHVtbikge1xuICAgIHZhciBfYTtcbiAgICBpZiAoY29sdW1uLnJlbmRlckZvcm1JdGVtKSB7XG4gICAgICAgIHJldHVybiBfanN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBjb2x1bW4ucmVuZGVyRm9ybUl0ZW0oY29sdW1uKSB9LCBjb2x1bW4uZGF0YUluZGV4KTtcbiAgICB9XG4gICAgY29uc3QgeyB0aXRsZSwgZGF0YUluZGV4LCB2YWx1ZVR5cGUgPSAndGV4dCcsIGZpZWxkUHJvcHMsIGluaXRpYWxWYWx1ZTogX2luaXRpYWxWYWx1ZSwgcmVuZGVyRm9ybUl0ZW06IF9yZW5kZXJGb3JtSXRlbSB9ID0gY29sdW1uLCByZXN0ID0gX19yZXN0KGNvbHVtbiwgW1widGl0bGVcIiwgXCJkYXRhSW5kZXhcIiwgXCJ2YWx1ZVR5cGVcIiwgXCJmaWVsZFByb3BzXCIsIFwiaW5pdGlhbFZhbHVlXCIsIFwicmVuZGVyRm9ybUl0ZW1cIl0pO1xuICAgIGNvbnN0IEZpZWxkID0gKF9hID0gVkFMVUVfVFlQRV9GSUVMRFNbdmFsdWVUeXBlXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogVkFMVUVfVFlQRV9GSUVMRFMudGV4dDtcbiAgICBsZXQgbWVyZ2VkRmllbGRQcm9wcyA9IGZpZWxkUHJvcHM7XG4gICAgaWYgKHZhbHVlVHlwZSA9PT0gJ2RpZ2l0Jykge1xuICAgICAgICBtZXJnZWRGaWVsZFByb3BzID0gT2JqZWN0LmFzc2lnbih7IHR5cGU6ICdudW1iZXInIH0sIGZpZWxkUHJvcHMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdkYXRlVGltZScpIHtcbiAgICAgICAgbWVyZ2VkRmllbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oeyBzaG93VGltZTogdHJ1ZSB9LCBmaWVsZFByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIChfanN4KEZpZWxkLCBPYmplY3QuYXNzaWduKHsgbmFtZTogZGF0YUluZGV4LCBsYWJlbDogdGl0bGUsIGZpZWxkUHJvcHM6IG1lcmdlZEZpZWxkUHJvcHMgfSwgKHZhbHVlVHlwZSA9PT0gJ2RhdGVUaW1lJyA/IHsgdmFsdWVUeXBlOiAnZGF0ZVRpbWUnIH0gOiB7fSksIHJlc3QpLCBkYXRhSW5kZXgpKTtcbn1cbmNvbnN0IFNjaGVtYUZvcm1CYXNlID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBjb2x1bW5zLCBpbml0aWFsVmFsdWVzIH0gPSBwcm9wcywgZm9ybVByb3BzID0gX19yZXN0KHByb3BzLCBbXCJjb2x1bW5zXCIsIFwiaW5pdGlhbFZhbHVlc1wiXSk7XG4gICAgLy8gQ29sdW1uLWxldmVsIGluaXRpYWxWYWx1ZSBzZWVkcyB0aGUgZm9ybTsgZm9ybS1sZXZlbCBpbml0aWFsVmFsdWVzIHdpbi5cbiAgICBjb25zdCBtZXJnZWRJbml0aWFsVmFsdWVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCBmcm9tQ29sdW1ucyA9IHt9O1xuICAgICAgICBsZXQgaGFzQ29sdW1uVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5pbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGhhc0NvbHVtblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZyb21Db2x1bW5zID0gY29sdW1uLmRhdGFJbmRleC5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICAgICAgPyBzZXROZXN0ZWRWYWx1ZShmcm9tQ29sdW1ucywgY29sdW1uLmRhdGFJbmRleCwgY29sdW1uLmluaXRpYWxWYWx1ZSlcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZnJvbUNvbHVtbnMpLCB7IFtjb2x1bW4uZGF0YUluZGV4XTogY29sdW1uLmluaXRpYWxWYWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0NvbHVtblZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxWYWx1ZXM7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZyb21Db2x1bW5zKSwgaW5pdGlhbFZhbHVlcyk7XG4gICAgfSwgW2NvbHVtbnMsIGluaXRpYWxWYWx1ZXNdKTtcbiAgICByZXR1cm4gKF9qc3goUHJvRm9ybSwgT2JqZWN0LmFzc2lnbih7fSwgZm9ybVByb3BzLCB7IGluaXRpYWxWYWx1ZXM6IG1lcmdlZEluaXRpYWxWYWx1ZXMsIGNoaWxkcmVuOiBjb2x1bW5zLm1hcChyZW5kZXJDb2x1bW4pIH0pKSk7XG59O1xuU2NoZW1hRm9ybUJhc2UuZGlzcGxheU5hbWUgPSAnU2NoZW1hRm9ybSc7XG4vKiogR2VuZXJpYy1hd2FyZSBleHBvcnQg4oCUIGtlZXBzIGA8U2NoZW1hRm9ybTxNeVZhbHVlcz4g4oCmPmAgZnVsbHkgdHlwZWQuICovXG5leHBvcnQgY29uc3QgU2NoZW1hRm9ybSA9IG1lbW8oU2NoZW1hRm9ybUJhc2UpO1xuZXhwb3J0IGRlZmF1bHQgU2NoZW1hRm9ybTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -69,28 +69,49 @@ var SubmitterBase = function SubmitterBase(props) {
69
69
  }, _callee);
70
70
  }));
71
71
  });
72
+ // Reset the values FIRST, then fire the callback chain,
73
+ // so onReset observes the already-reset state. resetFields() itself is a
74
+ // pure state API and fires no callbacks.
72
75
  var handleReset = (0, _useMemoizedFn["default"])(function () {
73
- onReset === null || onReset === void 0 ? void 0 : onReset();
74
76
  form.resetFields();
77
+ onReset === null || onReset === void 0 ? void 0 : onReset();
78
+ });
79
+ // Button onClick chains the consumer's resetButtonProps.onClick (mirroring
80
+ // handleSubmitClick). Overlay close does NOT depend on this — it rides the
81
+ // form-level onReset channel in DialogForm/DrawerForm.
82
+ var handleResetClick = (0, _useMemoizedFn["default"])(function (e) {
83
+ var _a;
84
+ handleReset();
85
+ (_a = resetButtonProps === null || resetButtonProps === void 0 ? void 0 : resetButtonProps.onClick) === null || _a === void 0 ? void 0 : _a.call(resetButtonProps, e);
86
+ });
87
+ // The default submit button keeps type="submit" so the actual submission
88
+ // flows through the <form> onSubmit handler exactly once — this click
89
+ // handler only fires the user's onSubmit callback (plus any onClick they
90
+ // passed via submitButtonProps).
91
+ var handleSubmitClick = (0, _useMemoizedFn["default"])(function (e) {
92
+ var _a;
93
+ onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit();
94
+ (_a = submitButtonProps === null || submitButtonProps === void 0 ? void 0 : submitButtonProps.onClick) === null || _a === void 0 ? void 0 : _a.call(submitButtonProps, e);
75
95
  });
76
96
  var resetButton = (0, _react.useMemo)(function () {
77
97
  return (0, _jsxRuntime.jsx)(_Button.Button, Object.assign({
78
98
  type: "button",
79
99
  color: "secondary"
80
100
  }, resetButtonProps, {
81
- onClick: handleReset,
101
+ onClick: handleResetClick,
82
102
  children: resetText
83
103
  }), "reset");
84
- }, [resetText, resetButtonProps, handleReset]);
104
+ }, [resetText, resetButtonProps, handleResetClick]);
85
105
  var submitButton = (0, _react.useMemo)(function () {
86
106
  return (0, _jsxRuntime.jsx)(_Button.Button, Object.assign({
87
107
  type: "submit",
88
108
  color: "primary",
89
109
  loading: loading
90
110
  }, submitButtonProps, {
111
+ onClick: handleSubmitClick,
91
112
  children: submitText
92
113
  }), "submit");
93
- }, [submitText, submitButtonProps, loading]);
114
+ }, [submitText, submitButtonProps, loading, handleSubmitClick]);
94
115
  var dom = [resetButton, submitButton];
95
116
  if (render) {
96
117
  return (0, _jsxRuntime.jsx)("div", {
@@ -110,4 +131,4 @@ var SubmitterBase = function SubmitterBase(props) {
110
131
  SubmitterBase.displayName = 'Submitter';
111
132
  var Submitter = exports.Submitter = /*#__PURE__*/(0, _react.memo)(SubmitterBase);
112
133
  var _default = exports["default"] = Submitter;
113
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9TdWJtaXR0ZXIuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vU3VibWl0dGVyLnRzeCJdLCJuYW1lcyI6WyJfanN4UnVudGltZSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfdXNlTWVtb2l6ZWRGbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lcyIsIl9jb250ZXh0MiIsIl9CdXR0b24iLCJfY29uc3RhbnRzIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJ2YWx1ZSIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiY2xhc3NlcyIsImNsYXNzbmFtZXMiLCJjb25jYXQiLCJDU1NfUFJFRklYIiwiU3VibWl0dGVyQmFzZSIsInByb3BzIiwiX3Byb3BzJHN1Ym1pdFRleHQiLCJzdWJtaXRUZXh0IiwiREVGQVVMVF9URVhUIiwic3VibWl0IiwiX3Byb3BzJHJlc2V0VGV4dCIsInJlc2V0VGV4dCIsInJlc2V0IiwicmVuZGVyIiwib25TdWJtaXQiLCJvblJlc2V0Iiwic3VibWl0QnV0dG9uUHJvcHMiLCJyZXNldEJ1dHRvblByb3BzIiwiX3Byb3BzJGxvYWRpbmciLCJsb2FkaW5nIiwiZm9ybSIsInVzZUZvcm1JbnN0YW5jZSIsImhhbmRsZVN1Ym1pdCIsInVzZU1lbW9pemVkRm4iLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJzdWJtaXRGb3JtIiwic3RvcCIsImhhbmRsZVJlc2V0IiwicmVzZXRGaWVsZHMiLCJyZXNldEJ1dHRvbiIsInVzZU1lbW8iLCJfanN4IiwiQnV0dG9uIiwiT2JqZWN0IiwiYXNzaWduIiwidHlwZSIsImNvbG9yIiwib25DbGljayIsImNoaWxkcmVuIiwic3VibWl0QnV0dG9uIiwiZG9tIiwiY2xhc3NOYW1lIiwiX2pzeHMiLCJkaXNwbGF5TmFtZSIsIlN1Ym1pdHRlciIsImV4cG9ydHMiLCJtZW1vIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBU0EsSUFBQUEsV0FBQSxHQUFBQyxPQUFBO0FDVEEsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssU0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FETkEsSUFBSVEsU0FBUyxHQUFJLFVBQVEsU0FBS0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FBR0csS0FBSyxHQUFHLElBQUlILENBQUMsQ0FBQyxVQUFVSSxPQUFPLEVBQUU7TUFBRUEsT0FBTyxDQUFDRCxLQUFLLENBQUM7SUFBRSxDQUFDLENBQUM7RUFBRTtFQUMzRyxPQUFPLEtBQUtILENBQUMsS0FBS0EsQ0FBQyxHQUFHSyxPQUFPLENBQUMsRUFBRSxVQUFVRCxPQUFPLEVBQUVFLE1BQU0sRUFBRTtJQUN2RCxTQUFTQyxTQUFTQSxDQUFDSixLQUFLLEVBQUU7TUFBRSxJQUFJO1FBQUVLLElBQUksQ0FBQ1AsU0FBUyxDQUFDUSxJQUFJLENBQUNOLEtBQUssQ0FBQyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQU9PLENBQUMsRUFBRTtRQUFFSixNQUFNLENBQUNJLENBQUMsQ0FBQztNQUFFO0lBQUU7SUFDMUYsU0FBU0MsUUFBUUEsQ0FBQ1IsS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFSyxJQUFJLENBQUNQLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQ0UsS0FBSyxDQUFDLENBQUM7TUFBRSxDQUFDLENBQUMsT0FBT08sQ0FBQyxFQUFFO1FBQUVKLE1BQU0sQ0FBQ0ksQ0FBQyxDQUFDO01BQUU7SUFBRTtJQUM3RixTQUFTRixJQUFJQSxDQUFDSSxNQUFNLEVBQUU7TUFBRUEsTUFBTSxDQUFDQyxJQUFJLEdBQUdULE9BQU8sQ0FBQ1EsTUFBTSxDQUFDVCxLQUFLLENBQUMsR0FBR0QsS0FBSyxDQUFDVSxNQUFNLENBQUNULEtBQUssQ0FBQyxDQUFDVyxJQUFJLENBQUNQLFNBQVMsRUFBRUksUUFBUSxDQUFDO0lBQUU7SUFDN0dILElBQUksQ0FBQyxDQUFDUCxTQUFTLEdBQUdBLFNBQVMsQ0FBQ2MsS0FBSyxDQUFDakIsT0FBTyxFQUFFQyxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUVVLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekUsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQ0tELElBQU1PLE9BQU8sR0FBRyxJQUFBQyxzQkFBVSxLQUFBQyxNQUFBLENBQUlDLHFCQUFVLGVBQVksQ0FBQztBQUVyRCxJQUFNQyxhQUFhLEdBQStCLFNBQTVDQSxhQUFhQSxDQUFnQ0MsS0FBSyxFQUFJO0VBQzFELElBQUFDLGlCQUFBLEdBU0lELEtBQUssQ0FSUEUsVUFBVTtJQUFWQSxVQUFVLEdBQUFELGlCQUFBLGNBQUdFLHVCQUFZLENBQUNDLE1BQU0sR0FBQUgsaUJBQUE7SUFBQUksZ0JBQUEsR0FROUJMLEtBQUssQ0FQUE0sU0FBUztJQUFUQSxTQUFTLEdBQUFELGdCQUFBLGNBQUdGLHVCQUFZLENBQUNJLEtBQUssR0FBQUYsZ0JBQUE7SUFDOUJHLE1BQU0sR0FNSlIsS0FBSyxDQU5QUSxNQUFNO0lBQ05DLFFBQVEsR0FLTlQsS0FBSyxDQUxQUyxRQUFRO0lBQ1JDLE9BQU8sR0FJTFYsS0FBSyxDQUpQVSxPQUFPO0lBQ1BDLGlCQUFpQixHQUdmWCxLQUFLLENBSFBXLGlCQUFpQjtJQUNqQkMsZ0JBQWdCLEdBRWRaLEtBQUssQ0FGUFksZ0JBQWdCO0lBQUFDLGNBQUEsR0FFZGIsS0FBSyxDQURQYyxPQUFPO0lBQVBBLE9BQU8sR0FBQUQsY0FBQSxjQUFHLEtBQUssR0FBQUEsY0FBQTtFQUdqQixJQUFNRSxJQUFJLEdBQUcsSUFBQUMseUJBQWUsRUFBQSxDQUFFO0VBRTlCLElBQU1DLFlBQVksR0FBRyxJQUFBQyx5QkFBYSxFQUFDO0lBQUEsT0FBVzFDLFNBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsZUFBQTJDLFlBQUEsWUFBQUMsSUFBQSxDQUFBLFNBQUFDLFFBQUE7TUFBQSxPQUFBRixZQUFBLFlBQUFHLElBQUEsV0FBQUMsUUFBQTtRQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBbkMsSUFBQTtVQUFBO1lBQzVDcUIsUUFBUSxLQUFBLElBQUEsSUFBUkEsUUFBUSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFSQSxRQUFRLENBQUEsQ0FBSTtZQUFDYyxRQUFBLENBQUFuQyxJQUFBO1lBQ2IsT0FBTTJCLElBQUksQ0FBQ1UsVUFBVSxDQUFBLENBQUU7VUFBQTtVQUFBO1lBQUEsT0FBQUYsUUFBQSxDQUFBRyxJQUFBO1FBQUE7TUFBQSxHQUFBTCxPQUFBO0lBQUEsQ0FDeEIsRUFBQTtFQUFBLEVBQUM7RUFFRixJQUFNTSxXQUFXLEdBQUcsSUFBQVQseUJBQWEsRUFBQyxZQUFLO0lBQ3JDUixPQUFPLEtBQUEsSUFBQSxJQUFQQSxPQUFPLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQVBBLE9BQU8sQ0FBQSxDQUFJO0lBQ1hLLElBQUksQ0FBQ2EsV0FBVyxDQUFBLENBQUU7RUFDcEIsQ0FBQyxDQUFDO0VBRUYsSUFBTUMsV0FBVyxHQUFHLElBQUFDLGNBQU8sRUFDekI7SUFBQSxPQUNFLElBQUFDLGVBQUEsRUFBQ0MsY0FBTSxFQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQTtNQUVMQyxJQUFJLEVBQUMsUUFBUTtNQUNiQyxLQUFLLEVBQUM7SUFBVyxDQUFBLEVBQ2J4QixnQkFBZ0IsRUFBQTtNQUNwQnlCLE9BQU8sRUFBRVYsV0FBVztNQUFBVyxRQUFBLEVBRW5CaEM7SUFBUyxDQUFBLENBQUEsRUFOTixPQUFPLENBT0o7RUFBQSxDQUNWLEVBQ0QsQ0FBQ0EsU0FBUyxFQUFFTSxnQkFBZ0IsRUFBRWUsV0FBVyxDQUFDLENBQzNDO0VBRUQsSUFBTVksWUFBWSxHQUFHLElBQUFULGNBQU8sRUFDMUI7SUFBQSxPQUNFLElBQUFDLGVBQUEsRUFBQ0MsY0FBTSxFQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQTtNQUVMQyxJQUFJLEVBQUMsUUFBUTtNQUNiQyxLQUFLLEVBQUMsU0FBUztNQUNmdEIsT0FBTyxFQUFFQTtJQUFPLENBQUEsRUFDWkgsaUJBQWlCLEVBQUE7TUFBQTJCLFFBQUEsRUFFcEJwQztJQUFVLENBQUEsQ0FBQSxFQU5QLFFBQVEsQ0FPTDtFQUFBLENBQ1YsRUFDRCxDQUFDQSxVQUFVLEVBQUVTLGlCQUFpQixFQUFFRyxPQUFPLENBQUMsQ0FDekM7RUFFRCxJQUFNMEIsR0FBRyxHQUFtQixDQUFDWCxXQUFXLEVBQUVVLFlBQVksQ0FBbUI7RUFFekUsSUFBSS9CLE1BQU0sRUFBRTtJQUNWLE9BQ0UsSUFBQXVCLGVBQUEsRUFBQSxLQUFBLEVBQUE7TUFBS1UsU0FBUyxFQUFFOUMsT0FBTyxDQUFBLENBQUU7TUFBQTJDLFFBQUEsRUFDdEI5QixNQUFNLENBQUM7UUFBRU8sSUFBSSxFQUFKQSxJQUFJO1FBQUVYLE1BQU0sRUFBRWEsWUFBWTtRQUFFVixLQUFLLEVBQUVvQjtNQUFXLENBQUUsRUFBRWEsR0FBRztJQUFDLENBQUEsQ0FDNUQ7RUFFVjtFQUVBLE9BQ0UsSUFBQUUsZ0JBQUEsRUFBQSxLQUFBLEVBQUE7SUFBS0QsU0FBUyxFQUFFOUMsT0FBTyxDQUFBLENBQUU7SUFBQTJDLFFBQUEsRUFBQSxDQUN0QlQsV0FBVyxFQUNYVSxZQUFZO0VBQUEsQ0FBQSxDQUNUO0FBRVYsQ0FBQztBQUVEeEMsYUFBYSxDQUFDNEMsV0FBVyxHQUFHLFdBQVc7QUFFaEMsSUFBTUMsU0FBUyxHQUFBQyxPQUFBLENBQUFELFNBQUEsZ0JBQUcsSUFBQUUsV0FBSSxFQUFDL0MsYUFBYSxDQUFDO0FBQUMsSUFBQWdELFFBQUEsR0FBQUYsT0FBQSxjQUU5QkQsU0FBUyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vU3VibWl0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzbmFtZXMgfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUZvcm1JbnN0YW5jZSB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9CdXR0b24nO1xuaW1wb3J0IHsgQ1NTX1BSRUZJWCwgREVGQVVMVF9URVhUIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMoYCR7Q1NTX1BSRUZJWH0tc3VibWl0dGVyYCk7XG5jb25zdCBTdWJtaXR0ZXJCYXNlID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzdWJtaXRUZXh0ID0gREVGQVVMVF9URVhULnN1Ym1pdCwgcmVzZXRUZXh0ID0gREVGQVVMVF9URVhULnJlc2V0LCByZW5kZXIsIG9uU3VibWl0LCBvblJlc2V0LCBzdWJtaXRCdXR0b25Qcm9wcywgcmVzZXRCdXR0b25Qcm9wcywgbG9hZGluZyA9IGZhbHNlLCB9ID0gcHJvcHM7XG4gICAgY29uc3QgZm9ybSA9IHVzZUZvcm1JbnN0YW5jZSgpO1xuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZU1lbW9pemVkRm4oKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIG9uU3VibWl0ID09PSBudWxsIHx8IG9uU3VibWl0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblN1Ym1pdCgpO1xuICAgICAgICB5aWVsZCBmb3JtLnN1Ym1pdEZvcm0oKTtcbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgICAgIGZvcm0ucmVzZXRGaWVsZHMoKTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNldEJ1dHRvbiA9IHVzZU1lbW8oKCkgPT4gKF9qc3goQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgY29sb3I6IFwic2Vjb25kYXJ5XCIgfSwgcmVzZXRCdXR0b25Qcm9wcywgeyBvbkNsaWNrOiBoYW5kbGVSZXNldCwgY2hpbGRyZW46IHJlc2V0VGV4dCB9KSwgXCJyZXNldFwiKSksIFtyZXNldFRleHQsIHJlc2V0QnV0dG9uUHJvcHMsIGhhbmRsZVJlc2V0XSk7XG4gICAgY29uc3Qgc3VibWl0QnV0dG9uID0gdXNlTWVtbygoKSA9PiAoX2pzeChCdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcInN1Ym1pdFwiLCBjb2xvcjogXCJwcmltYXJ5XCIsIGxvYWRpbmc6IGxvYWRpbmcgfSwgc3VibWl0QnV0dG9uUHJvcHMsIHsgY2hpbGRyZW46IHN1Ym1pdFRleHQgfSksIFwic3VibWl0XCIpKSwgW3N1Ym1pdFRleHQsIHN1Ym1pdEJ1dHRvblByb3BzLCBsb2FkaW5nXSk7XG4gICAgY29uc3QgZG9tID0gW3Jlc2V0QnV0dG9uLCBzdWJtaXRCdXR0b25dO1xuICAgIGlmIChyZW5kZXIpIHtcbiAgICAgICAgcmV0dXJuIChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCksIGNoaWxkcmVuOiByZW5kZXIoeyBmb3JtLCBzdWJtaXQ6IGhhbmRsZVN1Ym1pdCwgcmVzZXQ6IGhhbmRsZVJlc2V0IH0sIGRvbSkgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gKF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCksIGNoaWxkcmVuOiBbcmVzZXRCdXR0b24sIHN1Ym1pdEJ1dHRvbl0gfSkpO1xufTtcblN1Ym1pdHRlckJhc2UuZGlzcGxheU5hbWUgPSAnU3VibWl0dGVyJztcbmV4cG9ydCBjb25zdCBTdWJtaXR0ZXIgPSBtZW1vKFN1Ym1pdHRlckJhc2UpO1xuZXhwb3J0IGRlZmF1bHQgU3VibWl0dGVyOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
134
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9TdWJtaXR0ZXIuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vU3VibWl0dGVyLnRzeCJdLCJuYW1lcyI6WyJfanN4UnVudGltZSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfdXNlTWVtb2l6ZWRGbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lcyIsIl9jb250ZXh0MiIsIl9CdXR0b24iLCJfY29uc3RhbnRzIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJ2YWx1ZSIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiY2xhc3NlcyIsImNsYXNzbmFtZXMiLCJjb25jYXQiLCJDU1NfUFJFRklYIiwiU3VibWl0dGVyQmFzZSIsInByb3BzIiwiX3Byb3BzJHN1Ym1pdFRleHQiLCJzdWJtaXRUZXh0IiwiREVGQVVMVF9URVhUIiwic3VibWl0IiwiX3Byb3BzJHJlc2V0VGV4dCIsInJlc2V0VGV4dCIsInJlc2V0IiwicmVuZGVyIiwib25TdWJtaXQiLCJvblJlc2V0Iiwic3VibWl0QnV0dG9uUHJvcHMiLCJyZXNldEJ1dHRvblByb3BzIiwiX3Byb3BzJGxvYWRpbmciLCJsb2FkaW5nIiwiZm9ybSIsInVzZUZvcm1JbnN0YW5jZSIsImhhbmRsZVN1Ym1pdCIsInVzZU1lbW9pemVkRm4iLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJzdWJtaXRGb3JtIiwic3RvcCIsImhhbmRsZVJlc2V0IiwicmVzZXRGaWVsZHMiLCJoYW5kbGVSZXNldENsaWNrIiwiX2EiLCJvbkNsaWNrIiwiY2FsbCIsImhhbmRsZVN1Ym1pdENsaWNrIiwicmVzZXRCdXR0b24iLCJ1c2VNZW1vIiwiX2pzeCIsIkJ1dHRvbiIsIk9iamVjdCIsImFzc2lnbiIsInR5cGUiLCJjb2xvciIsImNoaWxkcmVuIiwic3VibWl0QnV0dG9uIiwiZG9tIiwiY2xhc3NOYW1lIiwiX2pzeHMiLCJkaXNwbGF5TmFtZSIsIlN1Ym1pdHRlciIsImV4cG9ydHMiLCJtZW1vIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBU0EsSUFBQUEsV0FBQSxHQUFBQyxPQUFBO0FDVEEsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssU0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FETkEsSUFBSVEsU0FBUyxHQUFJLFVBQVEsU0FBS0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FBR0csS0FBSyxHQUFHLElBQUlILENBQUMsQ0FBQyxVQUFVSSxPQUFPLEVBQUU7TUFBRUEsT0FBTyxDQUFDRCxLQUFLLENBQUM7SUFBRSxDQUFDLENBQUM7RUFBRTtFQUMzRyxPQUFPLEtBQUtILENBQUMsS0FBS0EsQ0FBQyxHQUFHSyxPQUFPLENBQUMsRUFBRSxVQUFVRCxPQUFPLEVBQUVFLE1BQU0sRUFBRTtJQUN2RCxTQUFTQyxTQUFTQSxDQUFDSixLQUFLLEVBQUU7TUFBRSxJQUFJO1FBQUVLLElBQUksQ0FBQ1AsU0FBUyxDQUFDUSxJQUFJLENBQUNOLEtBQUssQ0FBQyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQU9PLENBQUMsRUFBRTtRQUFFSixNQUFNLENBQUNJLENBQUMsQ0FBQztNQUFFO0lBQUU7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R0FBQUMsT0FBQSxDQUFBRCxTQUFBLGdCQUFHLElBQUFFLFdBQUksRUFBQ25ELGFBQWEsQ0FBQztBQUFDLElBQUFvRCxRQUFBLEdBQUFGLE9BQUEsY0FFOUJELFNBQVMiLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL1N1Ym1pdHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8sIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBjbGFzc25hbWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VGb3JtSW5zdGFuY2UgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vQnV0dG9uJztcbmltcG9ydCB7IENTU19QUkVGSVgsIERFRkFVTFRfVEVYVCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKGAke0NTU19QUkVGSVh9LXN1Ym1pdHRlcmApO1xuY29uc3QgU3VibWl0dGVyQmFzZSA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc3VibWl0VGV4dCA9IERFRkFVTFRfVEVYVC5zdWJtaXQsIHJlc2V0VGV4dCA9IERFRkFVTFRfVEVYVC5yZXNldCwgcmVuZGVyLCBvblN1Ym1pdCwgb25SZXNldCwgc3VibWl0QnV0dG9uUHJvcHMsIHJlc2V0QnV0dG9uUHJvcHMsIGxvYWRpbmcgPSBmYWxzZSwgfSA9IHByb3BzO1xuICAgIGNvbnN0IGZvcm0gPSB1c2VGb3JtSW5zdGFuY2UoKTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VNZW1vaXplZEZuKCgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBvblN1Ym1pdCA9PT0gbnVsbCB8fCBvblN1Ym1pdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25TdWJtaXQoKTtcbiAgICAgICAgeWllbGQgZm9ybS5zdWJtaXRGb3JtKCk7XG4gICAgfSkpO1xuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZXMgRklSU1QsIHRoZW4gZmlyZSB0aGUgY2FsbGJhY2sgY2hhaW4sXG4gICAgLy8gc28gb25SZXNldCBvYnNlcnZlcyB0aGUgYWxyZWFkeS1yZXNldCBzdGF0ZS4gcmVzZXRGaWVsZHMoKSBpdHNlbGYgaXMgYVxuICAgIC8vIHB1cmUgc3RhdGUgQVBJIGFuZCBmaXJlcyBubyBjYWxsYmFja3MuXG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgZm9ybS5yZXNldEZpZWxkcygpO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoKTtcbiAgICB9KTtcbiAgICAvLyBCdXR0b24gb25DbGljayBjaGFpbnMgdGhlIGNvbnN1bWVyJ3MgcmVzZXRCdXR0b25Qcm9wcy5vbkNsaWNrIChtaXJyb3JpbmdcbiAgICAvLyBoYW5kbGVTdWJtaXRDbGljaykuIE92ZXJsYXkgY2xvc2UgZG9lcyBOT1QgZGVwZW5kIG9uIHRoaXMg4oCUIGl0IHJpZGVzIHRoZVxuICAgIC8vIGZvcm0tbGV2ZWwgb25SZXNldCBjaGFubmVsIGluIERpYWxvZ0Zvcm0vRHJhd2VyRm9ybS5cbiAgICBjb25zdCBoYW5kbGVSZXNldENsaWNrID0gdXNlTWVtb2l6ZWRGbigoZSkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGhhbmRsZVJlc2V0KCk7XG4gICAgICAgIChfYSA9IHJlc2V0QnV0dG9uUHJvcHMgPT09IG51bGwgfHwgcmVzZXRCdXR0b25Qcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzZXRCdXR0b25Qcm9wcy5vbkNsaWNrKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChyZXNldEJ1dHRvblByb3BzLCBlKTtcbiAgICB9KTtcbiAgICAvLyBUaGUgZGVmYXVsdCBzdWJtaXQgYnV0dG9uIGtlZXBzIHR5cGU9XCJzdWJtaXRcIiBzbyB0aGUgYWN0dWFsIHN1Ym1pc3Npb25cbiAgICAvLyBmbG93cyB0aHJvdWdoIHRoZSA8Zm9ybT4gb25TdWJtaXQgaGFuZGxlciBleGFjdGx5IG9uY2Ug4oCUIHRoaXMgY2xpY2tcbiAgICAvLyBoYW5kbGVyIG9ubHkgZmlyZXMgdGhlIHVzZXIncyBvblN1Ym1pdCBjYWxsYmFjayAocGx1cyBhbnkgb25DbGljayB0aGV5XG4gICAgLy8gcGFzc2VkIHZpYSBzdWJtaXRCdXR0b25Qcm9wcykuXG4gICAgY29uc3QgaGFuZGxlU3VibWl0Q2xpY2sgPSB1c2VNZW1vaXplZEZuKChlKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgb25TdWJtaXQgPT09IG51bGwgfHwgb25TdWJtaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uU3VibWl0KCk7XG4gICAgICAgIChfYSA9IHN1Ym1pdEJ1dHRvblByb3BzID09PSBudWxsIHx8IHN1Ym1pdEJ1dHRvblByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdWJtaXRCdXR0b25Qcm9wcy5vbkNsaWNrKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChzdWJtaXRCdXR0b25Qcm9wcywgZSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRCdXR0b24gPSB1c2VNZW1vKCgpID0+IChfanN4KEJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIGNvbG9yOiBcInNlY29uZGFyeVwiIH0sIHJlc2V0QnV0dG9uUHJvcHMsIHsgb25DbGljazogaGFuZGxlUmVzZXRDbGljaywgY2hpbGRyZW46IHJlc2V0VGV4dCB9KSwgXCJyZXNldFwiKSksIFtyZXNldFRleHQsIHJlc2V0QnV0dG9uUHJvcHMsIGhhbmRsZVJlc2V0Q2xpY2tdKTtcbiAgICBjb25zdCBzdWJtaXRCdXR0b24gPSB1c2VNZW1vKCgpID0+IChfanN4KEJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwic3VibWl0XCIsIGNvbG9yOiBcInByaW1hcnlcIiwgbG9hZGluZzogbG9hZGluZyB9LCBzdWJtaXRCdXR0b25Qcm9wcywgeyBvbkNsaWNrOiBoYW5kbGVTdWJtaXRDbGljaywgY2hpbGRyZW46IHN1Ym1pdFRleHQgfSksIFwic3VibWl0XCIpKSwgW3N1Ym1pdFRleHQsIHN1Ym1pdEJ1dHRvblByb3BzLCBsb2FkaW5nLCBoYW5kbGVTdWJtaXRDbGlja10pO1xuICAgIGNvbnN0IGRvbSA9IFtyZXNldEJ1dHRvbiwgc3VibWl0QnV0dG9uXTtcbiAgICBpZiAocmVuZGVyKSB7XG4gICAgICAgIHJldHVybiAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygpLCBjaGlsZHJlbjogcmVuZGVyKHsgZm9ybSwgc3VibWl0OiBoYW5kbGVTdWJtaXQsIHJlc2V0OiBoYW5kbGVSZXNldCB9LCBkb20pIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIChfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygpLCBjaGlsZHJlbjogW3Jlc2V0QnV0dG9uLCBzdWJtaXRCdXR0b25dIH0pKTtcbn07XG5TdWJtaXR0ZXJCYXNlLmRpc3BsYXlOYW1lID0gJ1N1Ym1pdHRlcic7XG5leHBvcnQgY29uc3QgU3VibWl0dGVyID0gbWVtbyhTdWJtaXR0ZXJCYXNlKTtcbmV4cG9ydCBkZWZhdWx0IFN1Ym1pdHRlcjsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=