@pie-lib/config-ui 12.1.1-next.2 → 12.1.1-next.3

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 (121) hide show
  1. package/LICENSE.md +5 -0
  2. package/NEXT.CHANGELOG.json +1 -0
  3. package/lib/alert-dialog.js +1 -2
  4. package/lib/alert-dialog.js.map +1 -1
  5. package/lib/checkbox.js +1 -11
  6. package/lib/checkbox.js.map +1 -1
  7. package/lib/choice-configuration/feedback-menu.js +1 -6
  8. package/lib/choice-configuration/feedback-menu.js.map +1 -1
  9. package/lib/choice-configuration/index.js +1 -13
  10. package/lib/choice-configuration/index.js.map +1 -1
  11. package/lib/choice-utils.js +3 -14
  12. package/lib/choice-utils.js.map +1 -1
  13. package/lib/feedback-config/feedback-selector.js +1 -15
  14. package/lib/feedback-config/feedback-selector.js.map +1 -1
  15. package/lib/feedback-config/group.js +1 -6
  16. package/lib/feedback-config/group.js.map +1 -1
  17. package/lib/feedback-config/index.js +3 -20
  18. package/lib/feedback-config/index.js.map +1 -1
  19. package/lib/form-section.js +1 -2
  20. package/lib/form-section.js.map +1 -1
  21. package/lib/help.js +1 -3
  22. package/lib/help.js.map +1 -1
  23. package/lib/index.js +1 -8
  24. package/lib/index.js.map +1 -1
  25. package/lib/input.js +1 -9
  26. package/lib/input.js.map +1 -1
  27. package/lib/inputs.js +1 -11
  28. package/lib/inputs.js.map +1 -1
  29. package/lib/langs.js +1 -6
  30. package/lib/langs.js.map +1 -1
  31. package/lib/layout/config-layout.js +1 -10
  32. package/lib/layout/config-layout.js.map +1 -1
  33. package/lib/layout/index.js +1 -2
  34. package/lib/layout/index.js.map +1 -1
  35. package/lib/layout/layout-contents.js +1 -12
  36. package/lib/layout/layout-contents.js.map +1 -1
  37. package/lib/layout/settings-box.js +1 -3
  38. package/lib/layout/settings-box.js.map +1 -1
  39. package/lib/mui-box/index.js +1 -2
  40. package/lib/mui-box/index.js.map +1 -1
  41. package/lib/number-text-field-custom.js +9 -26
  42. package/lib/number-text-field-custom.js.map +1 -1
  43. package/lib/number-text-field.js +8 -16
  44. package/lib/number-text-field.js.map +1 -1
  45. package/lib/radio-with-label.js +1 -2
  46. package/lib/radio-with-label.js.map +1 -1
  47. package/lib/settings/display-size.js +1 -11
  48. package/lib/settings/display-size.js.map +1 -1
  49. package/lib/settings/index.js +1 -13
  50. package/lib/settings/index.js.map +1 -1
  51. package/lib/settings/panel.js +6 -22
  52. package/lib/settings/panel.js.map +1 -1
  53. package/lib/settings/settings-radio-label.js +1 -2
  54. package/lib/settings/settings-radio-label.js.map +1 -1
  55. package/lib/settings/toggle.js +1 -2
  56. package/lib/settings/toggle.js.map +1 -1
  57. package/lib/tabs/index.js +1 -5
  58. package/lib/tabs/index.js.map +1 -1
  59. package/lib/tags-input/index.js +3 -11
  60. package/lib/tags-input/index.js.map +1 -1
  61. package/lib/two-choice.js +1 -14
  62. package/lib/two-choice.js.map +1 -1
  63. package/lib/with-stateful-model.js +1 -3
  64. package/lib/with-stateful-model.js.map +1 -1
  65. package/package.json +6 -6
  66. package/src/__tests__/alert-dialog.test.jsx +13 -113
  67. package/src/__tests__/checkbox.test.jsx +17 -114
  68. package/src/__tests__/form-section.test.jsx +2 -8
  69. package/src/__tests__/help.test.jsx +18 -18
  70. package/src/__tests__/input.test.jsx +22 -58
  71. package/src/__tests__/langs.test.jsx +15 -96
  72. package/src/__tests__/number-text-field-custom.test.jsx +34 -217
  73. package/src/__tests__/number-text-field.test.jsx +21 -99
  74. package/src/__tests__/radio-with-label.test.jsx +19 -123
  75. package/src/__tests__/settings-panel.test.js +1 -1
  76. package/src/__tests__/settings.test.jsx +17 -80
  77. package/src/__tests__/tabs.test.jsx +2 -7
  78. package/src/__tests__/with-stateful-model.test.jsx +3 -9
  79. package/src/alert-dialog.jsx +19 -2
  80. package/src/checkbox.jsx +1 -9
  81. package/src/choice-configuration/__tests__/feedback-menu.test.jsx +6 -18
  82. package/src/choice-configuration/feedback-menu.jsx +7 -1
  83. package/src/choice-utils.js +1 -1
  84. package/src/feedback-config/__tests__/feedback-config.test.jsx +2 -2
  85. package/src/feedback-config/index.jsx +2 -1
  86. package/src/index.js +2 -2
  87. package/src/inputs.jsx +3 -16
  88. package/src/langs.jsx +9 -4
  89. package/src/layout/config-layout.jsx +2 -3
  90. package/src/number-text-field-custom.jsx +5 -3
  91. package/src/number-text-field.jsx +3 -2
  92. package/src/radio-with-label.jsx +1 -5
  93. package/src/settings/display-size.jsx +1 -1
  94. package/src/settings/index.js +1 -1
  95. package/src/settings/panel.jsx +4 -5
  96. package/src/settings/settings-radio-label.jsx +1 -5
  97. package/src/settings/toggle.jsx +1 -5
  98. package/src/tags-input/__tests__/index.test.jsx +1 -1
  99. package/src/tags-input/index.jsx +1 -1
  100. package/lib/__tests__/alert-dialog.test.js +0 -267
  101. package/lib/__tests__/checkbox.test.js +0 -227
  102. package/lib/__tests__/choice-utils.test.js +0 -16
  103. package/lib/__tests__/form-section.test.js +0 -252
  104. package/lib/__tests__/help.test.js +0 -278
  105. package/lib/__tests__/input.test.js +0 -268
  106. package/lib/__tests__/langs.test.js +0 -551
  107. package/lib/__tests__/number-text-field-custom.test.js +0 -364
  108. package/lib/__tests__/number-text-field.test.js +0 -421
  109. package/lib/__tests__/radio-with-label.test.js +0 -233
  110. package/lib/__tests__/settings-panel.test.js +0 -194
  111. package/lib/__tests__/settings.test.js +0 -653
  112. package/lib/__tests__/tabs.test.js +0 -211
  113. package/lib/__tests__/two-choice.test.js +0 -124
  114. package/lib/__tests__/with-stateful-model.test.js +0 -232
  115. package/lib/choice-configuration/__tests__/feedback-menu.test.js +0 -287
  116. package/lib/choice-configuration/__tests__/index.test.js +0 -263
  117. package/lib/feedback-config/__tests__/feedback-config.test.js +0 -211
  118. package/lib/feedback-config/__tests__/feedback-selector.test.js +0 -177
  119. package/lib/layout/__tests__/config.layout.test.js +0 -70
  120. package/lib/layout/__tests__/layout-content.test.js +0 -6
  121. package/lib/tags-input/__tests__/index.test.js +0 -183
@@ -1,268 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
- var _react = _interopRequireDefault(require("react"));
7
- var _react2 = require("@testing-library/react");
8
- var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
9
- var _input = _interopRequireDefault(require("../input"));
10
- describe('Input Component', function () {
11
- var onChange = jest.fn();
12
- beforeEach(function () {
13
- onChange.mockClear();
14
- });
15
- describe('Rendering', function () {
16
- it('should render input without label', function () {
17
- var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
18
- type: "text",
19
- value: "test",
20
- onChange: onChange
21
- })),
22
- container = _render.container;
23
- var input = container.querySelector('input');
24
- expect(input).toBeInTheDocument();
25
- expect(input.value).toBe('test');
26
- });
27
- it('should render input with label', function () {
28
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
29
- type: "text",
30
- label: "Email",
31
- value: "test@example.com",
32
- onChange: onChange
33
- }));
34
- expect(_react2.screen.getByText('Email')).toBeInTheDocument();
35
- var input = _react2.screen.getByDisplayValue('test@example.com');
36
- expect(input).toBeInTheDocument();
37
- });
38
- it('should render input with different types', function () {
39
- var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
40
- type: "number",
41
- value: 123,
42
- onChange: onChange
43
- })),
44
- numberContainer = _render2.container;
45
- expect(numberContainer.querySelector('input[type="number"]')).toBeInTheDocument();
46
- var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
47
- type: "email",
48
- value: "test@example.com",
49
- onChange: onChange
50
- })),
51
- emailContainer = _render3.container;
52
- expect(emailContainer.querySelector('input[type="email"]')).toBeInTheDocument();
53
- var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
54
- type: "password",
55
- value: "secret",
56
- onChange: onChange
57
- })),
58
- passwordContainer = _render4.container;
59
- expect(passwordContainer.querySelector('input[type="password"]')).toBeInTheDocument();
60
- });
61
- });
62
- describe('Value handling', function () {
63
- it('should handle string values', function () {
64
- var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
65
- type: "text",
66
- value: "hello",
67
- onChange: onChange
68
- })),
69
- container = _render5.container;
70
- expect(container.querySelector('input').value).toBe('hello');
71
- });
72
- it('should handle number values', function () {
73
- var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
74
- type: "number",
75
- value: 42,
76
- onChange: onChange
77
- })),
78
- container = _render6.container;
79
- expect(container.querySelector('input').value).toBe('42');
80
- });
81
- it('should handle empty values', function () {
82
- var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
83
- type: "text",
84
- value: "",
85
- onChange: onChange
86
- })),
87
- container = _render7.container;
88
- expect(container.querySelector('input').value).toBe('');
89
- });
90
- it('should update when prop changes', function () {
91
- var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
92
- type: "text",
93
- value: "initial",
94
- onChange: onChange
95
- })),
96
- container = _render8.container,
97
- rerender = _render8.rerender;
98
- expect(container.querySelector('input').value).toBe('initial');
99
- rerender(/*#__PURE__*/_react["default"].createElement(_input["default"], {
100
- type: "text",
101
- value: "updated",
102
- onChange: onChange
103
- }));
104
- expect(container.querySelector('input').value).toBe('updated');
105
- });
106
- });
107
- describe('onChange behavior', function () {
108
- it('should call onChange on input change', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
109
- var user, _render9, container, input;
110
- return _regenerator["default"].wrap(function (_context) {
111
- while (1) switch (_context.prev = _context.next) {
112
- case 0:
113
- user = _userEvent["default"].setup();
114
- _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
115
- type: "text",
116
- value: "",
117
- onChange: onChange
118
- })), container = _render9.container;
119
- input = container.querySelector('input');
120
- _context.next = 1;
121
- return user.type(input, 'hello');
122
- case 1:
123
- expect(onChange).toHaveBeenCalled();
124
- case 2:
125
- case "end":
126
- return _context.stop();
127
- }
128
- }, _callee);
129
- })));
130
- it('should handle custom error function', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
131
- var user, customError, _render0, container, input;
132
- return _regenerator["default"].wrap(function (_context2) {
133
- while (1) switch (_context2.prev = _context2.next) {
134
- case 0:
135
- user = _userEvent["default"].setup();
136
- customError = jest.fn(function (value) {
137
- return value.length < 3;
138
- });
139
- _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
140
- type: "text",
141
- value: "",
142
- onChange: onChange,
143
- error: customError
144
- })), container = _render0.container;
145
- input = container.querySelector('input');
146
- _context2.next = 1;
147
- return user.type(input, 'ab');
148
- case 1:
149
- expect(customError).toHaveBeenCalled();
150
- case 2:
151
- case "end":
152
- return _context2.stop();
153
- }
154
- }, _callee2);
155
- })));
156
- });
157
- describe('Error state', function () {
158
- it('should display error state when validation fails', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
159
- var user, customError, _render1, container, input;
160
- return _regenerator["default"].wrap(function (_context3) {
161
- while (1) switch (_context3.prev = _context3.next) {
162
- case 0:
163
- user = _userEvent["default"].setup();
164
- customError = jest.fn(function () {
165
- return true;
166
- });
167
- _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
168
- type: "text",
169
- value: "",
170
- onChange: onChange,
171
- error: customError
172
- })), container = _render1.container;
173
- input = container.querySelector('input');
174
- _context3.next = 1;
175
- return user.type(input, 'test');
176
- case 1:
177
- expect(customError).toHaveBeenCalled();
178
- case 2:
179
- case "end":
180
- return _context3.stop();
181
- }
182
- }, _callee3);
183
- })));
184
- it('should clear error state when validation passes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
185
- var user, customError, _render10, container, input;
186
- return _regenerator["default"].wrap(function (_context4) {
187
- while (1) switch (_context4.prev = _context4.next) {
188
- case 0:
189
- user = _userEvent["default"].setup();
190
- customError = jest.fn(function (value) {
191
- return !value;
192
- });
193
- _render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
194
- type: "text",
195
- value: "",
196
- onChange: onChange,
197
- error: customError
198
- })), container = _render10.container;
199
- input = container.querySelector('input');
200
- _context4.next = 1;
201
- return user.type(input, 'test');
202
- case 1:
203
- // After typing valid content, error should be false
204
- expect(customError).toHaveBeenCalled();
205
- case 2:
206
- case "end":
207
- return _context4.stop();
208
- }
209
- }, _callee4);
210
- })));
211
- });
212
- describe('Props spreading', function () {
213
- it('should handle disabled state', function () {
214
- var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
215
- type: "text",
216
- value: "",
217
- onChange: onChange,
218
- disabled: true
219
- })),
220
- container = _render11.container;
221
- var input = container.querySelector('input');
222
- expect(input).toBeDisabled();
223
- });
224
- it('should handle readonly state', function () {
225
- var _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
226
- type: "text",
227
- value: "readonly",
228
- onChange: onChange,
229
- readOnly: true
230
- })),
231
- container = _render12.container;
232
- var input = container.querySelector('input');
233
- expect(input).toHaveAttribute('readonly');
234
- });
235
- });
236
- describe('Default props', function () {
237
- it('should use default type of text', function () {
238
- var _render13 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
239
- value: "",
240
- onChange: onChange
241
- })),
242
- container = _render13.container;
243
- var input = container.querySelector('input');
244
- expect(input.type).toBe('text');
245
- });
246
- it('should use default error function that validates number type', function () {
247
- var _render14 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
248
- type: "number",
249
- value: "",
250
- onChange: onChange
251
- })),
252
- container = _render14.container;
253
- var input = container.querySelector('input');
254
- expect(input).toBeInTheDocument();
255
- });
256
- it('should have noModelUpdateOnError default to false', function () {
257
- var _render15 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
258
- type: "text",
259
- value: "",
260
- onChange: onChange
261
- })),
262
- container = _render15.container;
263
- var input = container.querySelector('input');
264
- expect(input).toBeInTheDocument();
265
- });
266
- });
267
- });
268
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2lucHV0IiwiZGVzY3JpYmUiLCJvbkNoYW5nZSIsImplc3QiLCJmbiIsImJlZm9yZUVhY2giLCJtb2NrQ2xlYXIiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwidHlwZSIsInZhbHVlIiwiY29udGFpbmVyIiwiaW5wdXQiLCJxdWVyeVNlbGVjdG9yIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJ0b0JlIiwibGFiZWwiLCJzY3JlZW4iLCJnZXRCeVRleHQiLCJnZXRCeURpc3BsYXlWYWx1ZSIsIl9yZW5kZXIyIiwibnVtYmVyQ29udGFpbmVyIiwiX3JlbmRlcjMiLCJlbWFpbENvbnRhaW5lciIsIl9yZW5kZXI0IiwicGFzc3dvcmRDb250YWluZXIiLCJfcmVuZGVyNSIsIl9yZW5kZXI2IiwiX3JlbmRlcjciLCJfcmVuZGVyOCIsInJlcmVuZGVyIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ1c2VyIiwiX3JlbmRlcjkiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInVzZXJFdmVudCIsInNldHVwIiwidG9IYXZlQmVlbkNhbGxlZCIsInN0b3AiLCJfY2FsbGVlMiIsImN1c3RvbUVycm9yIiwiX3JlbmRlcjAiLCJfY29udGV4dDIiLCJsZW5ndGgiLCJlcnJvciIsIl9jYWxsZWUzIiwiX3JlbmRlcjEiLCJfY29udGV4dDMiLCJfY2FsbGVlNCIsIl9yZW5kZXIxMCIsIl9jb250ZXh0NCIsIl9yZW5kZXIxMSIsImRpc2FibGVkIiwidG9CZURpc2FibGVkIiwiX3JlbmRlcjEyIiwicmVhZE9ubHkiLCJ0b0hhdmVBdHRyaWJ1dGUiLCJfcmVuZGVyMTMiLCJfcmVuZGVyMTQiLCJfcmVuZGVyMTUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2lucHV0LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiwgd2FpdEZvciB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHVzZXJFdmVudCBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQnO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0JztcblxuZGVzY3JpYmUoJ0lucHV0IENvbXBvbmVudCcsICgpID0+IHtcbiAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaGFuZ2UubW9ja0NsZWFyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZW5kZXIgaW5wdXQgd2l0aG91dCBsYWJlbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwidGVzdFwiIG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgZXhwZWN0KGlucHV0KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KGlucHV0LnZhbHVlKS50b0JlKCd0ZXN0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBpbnB1dCB3aXRoIGxhYmVsJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8SW5wdXQgdHlwZT1cInRleHRcIiBsYWJlbD1cIkVtYWlsXCIgdmFsdWU9XCJ0ZXN0QGV4YW1wbGUuY29tXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdFbWFpbCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlEaXNwbGF5VmFsdWUoJ3Rlc3RAZXhhbXBsZS5jb20nKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIGlucHV0IHdpdGggZGlmZmVyZW50IHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXI6IG51bWJlckNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8SW5wdXQgdHlwZT1cIm51bWJlclwiIHZhbHVlPXsxMjN9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4sXG4gICAgICApO1xuICAgICAgZXhwZWN0KG51bWJlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwibnVtYmVyXCJdJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBlbWFpbENvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8SW5wdXQgdHlwZT1cImVtYWlsXCIgdmFsdWU9XCJ0ZXN0QGV4YW1wbGUuY29tXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPixcbiAgICAgICk7XG4gICAgICBleHBlY3QoZW1haWxDb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImVtYWlsXCJdJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBwYXNzd29yZENvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8SW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgdmFsdWU9XCJzZWNyZXRcIiBvbkNoYW5nZT17b25DaGFuZ2V9IC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChwYXNzd29yZENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZhbHVlIGhhbmRsaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgaGFuZGxlIHN0cmluZyB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8SW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cImhlbGxvXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPixcbiAgICAgICk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpLnRvQmUoJ2hlbGxvJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBudW1iZXIgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPElucHV0IHR5cGU9XCJudW1iZXJcIiB2YWx1ZT17NDJ9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4sXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLnZhbHVlKS50b0JlKCc0MicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPElucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIiBvbkNoYW5nZT17b25DaGFuZ2V9IC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSkudG9CZSgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVwZGF0ZSB3aGVuIHByb3AgY2hhbmdlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyLCByZXJlbmRlciB9ID0gcmVuZGVyKFxuICAgICAgICA8SW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cImluaXRpYWxcIiBvbkNoYW5nZT17b25DaGFuZ2V9IC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSkudG9CZSgnaW5pdGlhbCcpO1xuXG4gICAgICByZXJlbmRlcig8SW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cInVwZGF0ZWRcIiBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSkudG9CZSgndXBkYXRlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnb25DaGFuZ2UgYmVoYXZpb3InLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjYWxsIG9uQ2hhbmdlIG9uIGlucHV0IGNoYW5nZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBhd2FpdCB1c2VyLnR5cGUoaW5wdXQsICdoZWxsbycpO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGN1c3RvbSBlcnJvciBmdW5jdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIGNvbnN0IGN1c3RvbUVycm9yID0gamVzdC5mbigodmFsdWUpID0+IHZhbHVlLmxlbmd0aCA8IDMpO1xuICAgICAgXG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8SW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cIlwiIG9uQ2hhbmdlPXtvbkNoYW5nZX0gZXJyb3I9e2N1c3RvbUVycm9yfSAvPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBhd2FpdCB1c2VyLnR5cGUoaW5wdXQsICdhYicpO1xuXG4gICAgICBleHBlY3QoY3VzdG9tRXJyb3IpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Vycm9yIHN0YXRlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZGlzcGxheSBlcnJvciBzdGF0ZSB3aGVuIHZhbGlkYXRpb24gZmFpbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICBjb25zdCBjdXN0b21FcnJvciA9IGplc3QuZm4oKCkgPT4gdHJ1ZSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSBlcnJvcj17Y3VzdG9tRXJyb3J9IC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGF3YWl0IHVzZXIudHlwZShpbnB1dCwgJ3Rlc3QnKTtcblxuICAgICAgZXhwZWN0KGN1c3RvbUVycm9yKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNsZWFyIGVycm9yIHN0YXRlIHdoZW4gdmFsaWRhdGlvbiBwYXNzZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICBjb25zdCBjdXN0b21FcnJvciA9IGplc3QuZm4oKHZhbHVlKSA9PiAhdmFsdWUpO1xuICAgICAgXG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8SW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cIlwiIG9uQ2hhbmdlPXtvbkNoYW5nZX0gZXJyb3I9e2N1c3RvbUVycm9yfSAvPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBhd2FpdCB1c2VyLnR5cGUoaW5wdXQsICd0ZXN0Jyk7XG5cbiAgICAgIC8vIEFmdGVyIHR5cGluZyB2YWxpZCBjb250ZW50LCBlcnJvciBzaG91bGQgYmUgZmFsc2VcbiAgICAgIGV4cGVjdChjdXN0b21FcnJvcikudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJvcHMgc3ByZWFkaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRpc2FibGVkIHN0YXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPElucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIiBvbkNoYW5nZT17b25DaGFuZ2V9IGRpc2FibGVkIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9CZURpc2FibGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSByZWFkb25seSBzdGF0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwicmVhZG9ubHlcIiBvbkNoYW5nZT17b25DaGFuZ2V9IHJlYWRPbmx5IC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9IYXZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGVmYXVsdCBwcm9wcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHVzZSBkZWZhdWx0IHR5cGUgb2YgdGV4dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxJbnB1dCB2YWx1ZT1cIlwiIG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgZXhwZWN0KGlucHV0LnR5cGUpLnRvQmUoJ3RleHQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIGRlZmF1bHQgZXJyb3IgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgbnVtYmVyIHR5cGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8SW5wdXQgdHlwZT1cIm51bWJlclwiIHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgbm9Nb2RlbFVwZGF0ZU9uRXJyb3IgZGVmYXVsdCB0byBmYWxzZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUFJLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxZQUFNO0VBQ2hDLElBQU1DLFFBQVEsR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztFQUUxQkMsVUFBVSxDQUFDLFlBQU07SUFDZkgsUUFBUSxDQUFDSSxTQUFTLENBQUMsQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFRkwsUUFBUSxDQUFDLFdBQVcsRUFBRSxZQUFNO0lBQzFCTSxFQUFFLENBQUMsbUNBQW1DLEVBQUUsWUFBTTtNQUM1QyxJQUFBQyxPQUFBLEdBQXNCLElBQUFDLGNBQU0sZUFDMUJkLE1BQUEsWUFBQWUsYUFBQSxDQUFDVixNQUFBLFdBQUs7VUFBQ1csSUFBSSxFQUFDLE1BQU07VUFBQ0MsS0FBSyxFQUFDLE1BQU07VUFBQ1YsUUFBUSxFQUFFQTtRQUFTLENBQUUsQ0FDdkQsQ0FBQztRQUZPVyxTQUFTLEdBQUFMLE9BQUEsQ0FBVEssU0FBUztNQUlqQixJQUFNQyxLQUFLLEdBQUdELFNBQVMsQ0FBQ0UsYUFBYSxDQUFDLE9BQU8sQ0FBQztNQUM5Q0MsTUFBTSxDQUFDRixLQUFLLENBQUMsQ0FBQ0csaUJBQWlCLENBQUMsQ0FBQztNQUNqQ0QsTUFBTSxDQUFDRixLQUFLLENBQUNGLEtBQUssQ0FBQyxDQUFDTSxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUMsQ0FBQztJQUVGWCxFQUFFLENBQUMsZ0NBQWdD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