@pie-lib/config-ui 12.2.0-next.2 → 12.2.0-next.21

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 (58) hide show
  1. package/CHANGELOG.md +80 -28
  2. package/LICENSE.md +5 -0
  3. package/lib/alert-dialog.js +1 -1
  4. package/lib/checkbox.js +1 -1
  5. package/lib/choice-configuration/feedback-menu.js +1 -1
  6. package/lib/choice-configuration/index.js +1 -1
  7. package/lib/choice-utils.js +1 -1
  8. package/lib/feedback-config/feedback-selector.js +1 -1
  9. package/lib/feedback-config/group.js +1 -1
  10. package/lib/feedback-config/index.js +1 -1
  11. package/lib/form-section.js +1 -1
  12. package/lib/help.js +1 -1
  13. package/lib/index.js +1 -1
  14. package/lib/input.js +1 -1
  15. package/lib/inputs.js +1 -1
  16. package/lib/langs.js +1 -1
  17. package/lib/layout/config-layout.js +1 -1
  18. package/lib/layout/index.js +1 -1
  19. package/lib/layout/layout-contents.js +1 -1
  20. package/lib/layout/settings-box.js +1 -1
  21. package/lib/mui-box/index.js +1 -1
  22. package/lib/number-text-field-custom.js +1 -1
  23. package/lib/number-text-field.js +2 -2
  24. package/lib/number-text-field.js.map +1 -1
  25. package/lib/radio-with-label.js +1 -1
  26. package/lib/settings/display-size.js +1 -1
  27. package/lib/settings/index.js +1 -1
  28. package/lib/settings/panel.js +1 -1
  29. package/lib/settings/settings-radio-label.js +1 -1
  30. package/lib/settings/toggle.js +1 -1
  31. package/lib/tabs/index.js +1 -1
  32. package/lib/tags-input/index.js +1 -1
  33. package/lib/two-choice.js +1 -1
  34. package/lib/with-stateful-model.js +1 -1
  35. package/package.json +5 -5
  36. package/src/number-text-field.jsx +1 -1
  37. package/lib/__tests__/alert-dialog.test.js +0 -262
  38. package/lib/__tests__/checkbox.test.js +0 -227
  39. package/lib/__tests__/choice-utils.test.js +0 -14
  40. package/lib/__tests__/form-section.test.js +0 -252
  41. package/lib/__tests__/help.test.js +0 -270
  42. package/lib/__tests__/input.test.js +0 -268
  43. package/lib/__tests__/langs.test.js +0 -541
  44. package/lib/__tests__/number-text-field-custom.test.js +0 -362
  45. package/lib/__tests__/number-text-field.test.js +0 -421
  46. package/lib/__tests__/radio-with-label.test.js +0 -233
  47. package/lib/__tests__/settings-panel.test.js +0 -184
  48. package/lib/__tests__/settings.test.js +0 -653
  49. package/lib/__tests__/tabs.test.js +0 -211
  50. package/lib/__tests__/two-choice.test.js +0 -124
  51. package/lib/__tests__/with-stateful-model.test.js +0 -221
  52. package/lib/choice-configuration/__tests__/feedback-menu.test.js +0 -287
  53. package/lib/choice-configuration/__tests__/index.test.js +0 -253
  54. package/lib/feedback-config/__tests__/feedback-config.test.js +0 -201
  55. package/lib/feedback-config/__tests__/feedback-selector.test.js +0 -177
  56. package/lib/layout/__tests__/config.layout.test.js +0 -70
  57. package/lib/layout/__tests__/layout-content.test.js +0 -6
  58. package/lib/tags-input/__tests__/index.test.js +0 -183
@@ -1,227 +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 _checkbox = _interopRequireDefault(require("../checkbox"));
10
- describe('Checkbox Component', function () {
11
- var onChange = jest.fn();
12
- beforeEach(function () {
13
- onChange.mockClear();
14
- });
15
- describe('Rendering', function () {
16
- it('should render checkbox with label', function () {
17
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
18
- checked: false,
19
- onChange: onChange,
20
- label: "Accept terms"
21
- }));
22
- expect(_react2.screen.getByText('Accept terms')).toBeInTheDocument();
23
- expect(_react2.screen.getByRole('checkbox')).toBeInTheDocument();
24
- });
25
- it('should render checkbox in checked state', function () {
26
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
27
- checked: true,
28
- onChange: onChange,
29
- label: "Accept terms"
30
- }));
31
- expect(_react2.screen.getByRole('checkbox')).toBeChecked();
32
- });
33
- it('should render checkbox in unchecked state', function () {
34
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
35
- checked: false,
36
- onChange: onChange,
37
- label: "Accept terms"
38
- }));
39
- expect(_react2.screen.getByRole('checkbox')).not.toBeChecked();
40
- });
41
- it('should render mini checkbox with reduced styling', function () {
42
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
43
- checked: false,
44
- onChange: onChange,
45
- label: "Mini",
46
- mini: true
47
- }));
48
- expect(_react2.screen.getByRole('checkbox')).toBeInTheDocument();
49
- expect(_react2.screen.getByText('Mini')).toBeInTheDocument();
50
- });
51
- });
52
- describe('User interaction', function () {
53
- it('should call onChange when checkbox is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
54
- var user, checkbox;
55
- return _regenerator["default"].wrap(function (_context) {
56
- while (1) switch (_context.prev = _context.next) {
57
- case 0:
58
- user = _userEvent["default"].setup();
59
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
60
- checked: false,
61
- onChange: onChange,
62
- label: "Accept"
63
- }));
64
- checkbox = _react2.screen.getByRole('checkbox');
65
- _context.next = 1;
66
- return user.click(checkbox);
67
- case 1:
68
- expect(onChange).toHaveBeenCalled();
69
- case 2:
70
- case "end":
71
- return _context.stop();
72
- }
73
- }, _callee);
74
- })));
75
- it('should call onChange when label is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
76
- var user, label;
77
- return _regenerator["default"].wrap(function (_context2) {
78
- while (1) switch (_context2.prev = _context2.next) {
79
- case 0:
80
- user = _userEvent["default"].setup();
81
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
82
- checked: false,
83
- onChange: onChange,
84
- label: "Click label"
85
- }));
86
- label = _react2.screen.getByText('Click label');
87
- _context2.next = 1;
88
- return user.click(label);
89
- case 1:
90
- expect(onChange).toHaveBeenCalled();
91
- case 2:
92
- case "end":
93
- return _context2.stop();
94
- }
95
- }, _callee2);
96
- })));
97
- });
98
- describe('Props', function () {
99
- it('should handle value prop', function () {
100
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
101
- checked: true,
102
- onChange: onChange,
103
- label: "With value",
104
- value: "option1"
105
- }));
106
- expect(_react2.screen.getByRole('checkbox')).toBeInTheDocument();
107
- });
108
- it('should display error styling when error is true', function () {
109
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
110
- checked: false,
111
- onChange: onChange,
112
- label: "Error state",
113
- error: true
114
- }));
115
- expect(_react2.screen.getByRole('checkbox')).toBeInTheDocument();
116
- expect(_react2.screen.getByText('Error state')).toBeInTheDocument();
117
- });
118
- });
119
- describe('Default props', function () {
120
- it('should have mini default to false', function () {
121
- var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
122
- checked: true,
123
- onChange: onChange,
124
- label: "Test"
125
- })),
126
- container = _render.container;
127
- expect(_react2.screen.getByRole('checkbox')).toBeInTheDocument();
128
- });
129
- it('should have error default to false', function () {
130
- var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
131
- checked: true,
132
- onChange: onChange,
133
- label: "Test"
134
- })),
135
- container = _render2.container;
136
- expect(_react2.screen.getByRole('checkbox')).toBeInTheDocument();
137
- });
138
- it('should have value default to empty string', function () {
139
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
140
- checked: true,
141
- onChange: onChange,
142
- label: "Test"
143
- }));
144
- expect(_react2.screen.getByRole('checkbox')).toBeInTheDocument();
145
- });
146
- });
147
- describe('Accessibility', function () {
148
- it('should have proper label association', function () {
149
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
150
- checked: false,
151
- onChange: onChange,
152
- label: "Accessible label"
153
- }));
154
- expect(_react2.screen.getByLabelText('Accessible label')).toBeInTheDocument();
155
- });
156
- it('should be keyboard accessible', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
157
- var user, checkbox;
158
- return _regenerator["default"].wrap(function (_context3) {
159
- while (1) switch (_context3.prev = _context3.next) {
160
- case 0:
161
- user = _userEvent["default"].setup();
162
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
163
- checked: false,
164
- onChange: onChange,
165
- label: "Keyboard test"
166
- }));
167
- checkbox = _react2.screen.getByRole('checkbox');
168
- checkbox.focus();
169
- expect(checkbox).toHaveFocus();
170
- _context3.next = 1;
171
- return user.keyboard(' ');
172
- case 1:
173
- expect(onChange).toHaveBeenCalled();
174
- case 2:
175
- case "end":
176
- return _context3.stop();
177
- }
178
- }, _callee3);
179
- })));
180
- });
181
- describe('Multiple checkboxes', function () {
182
- it('should render multiple independent checkboxes', function () {
183
- var onChange1 = jest.fn();
184
- var onChange2 = jest.fn();
185
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
186
- checked: true,
187
- onChange: onChange1,
188
- label: "Option 1"
189
- }), /*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
190
- checked: false,
191
- onChange: onChange2,
192
- label: "Option 2"
193
- })));
194
- expect(_react2.screen.getByLabelText('Option 1')).toBeChecked();
195
- expect(_react2.screen.getByLabelText('Option 2')).not.toBeChecked();
196
- });
197
- it('should handle independent onChange callbacks', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
198
- var user, onChange1, onChange2;
199
- return _regenerator["default"].wrap(function (_context4) {
200
- while (1) switch (_context4.prev = _context4.next) {
201
- case 0:
202
- user = _userEvent["default"].setup();
203
- onChange1 = jest.fn();
204
- onChange2 = jest.fn();
205
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
206
- checked: true,
207
- onChange: onChange1,
208
- label: "Option 1"
209
- }), /*#__PURE__*/_react["default"].createElement(_checkbox["default"], {
210
- checked: false,
211
- onChange: onChange2,
212
- label: "Option 2"
213
- })));
214
- _context4.next = 1;
215
- return user.click(_react2.screen.getByLabelText('Option 2'));
216
- case 1:
217
- expect(onChange2).toHaveBeenCalled();
218
- expect(onChange1).not.toHaveBeenCalled();
219
- case 2:
220
- case "end":
221
- return _context4.stop();
222
- }
223
- }, _callee4);
224
- })));
225
- });
226
- });
227
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2NoZWNrYm94IiwiZGVzY3JpYmUiLCJvbkNoYW5nZSIsImplc3QiLCJmbiIsImJlZm9yZUVhY2giLCJtb2NrQ2xlYXIiLCJpdCIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJjaGVja2VkIiwibGFiZWwiLCJleHBlY3QiLCJzY3JlZW4iLCJnZXRCeVRleHQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsImdldEJ5Um9sZSIsInRvQmVDaGVja2VkIiwibm90IiwibWluaSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwidXNlciIsImNoZWNrYm94Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1c2VyRXZlbnQiLCJzZXR1cCIsImNsaWNrIiwidG9IYXZlQmVlbkNhbGxlZCIsInN0b3AiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsInZhbHVlIiwiZXJyb3IiLCJfcmVuZGVyIiwiY29udGFpbmVyIiwiX3JlbmRlcjIiLCJnZXRCeUxhYmVsVGV4dCIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiZm9jdXMiLCJ0b0hhdmVGb2N1cyIsImtleWJvYXJkIiwib25DaGFuZ2UxIiwib25DaGFuZ2UyIiwiRnJhZ21lbnQiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vY2hlY2tib3gudGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgdXNlckV2ZW50IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCc7XG5pbXBvcnQgQ2hlY2tib3ggZnJvbSAnLi4vY2hlY2tib3gnO1xuXG5kZXNjcmliZSgnQ2hlY2tib3ggQ29tcG9uZW50JywgKCkgPT4ge1xuICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNoYW5nZS5tb2NrQ2xlYXIoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JlbmRlcmluZycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlbmRlciBjaGVja2JveCB3aXRoIGxhYmVsJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxDaGVja2JveCBjaGVja2VkPXtmYWxzZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBsYWJlbD1cIkFjY2VwdCB0ZXJtc1wiIC8+KTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0FjY2VwdCB0ZXJtcycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ2NoZWNrYm94JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBjaGVja2JveCBpbiBjaGVja2VkIHN0YXRlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxDaGVja2JveCBjaGVja2VkPXt0cnVlfSBvbkNoYW5nZT17b25DaGFuZ2V9IGxhYmVsPVwiQWNjZXB0IHRlcm1zXCIgLz4pO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgnY2hlY2tib3gnKSkudG9CZUNoZWNrZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIGNoZWNrYm94IGluIHVuY2hlY2tlZCBzdGF0ZScsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Q2hlY2tib3ggY2hlY2tlZD17ZmFsc2V9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gbGFiZWw9XCJBY2NlcHQgdGVybXNcIiAvPik7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdjaGVja2JveCcpKS5ub3QudG9CZUNoZWNrZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIG1pbmkgY2hlY2tib3ggd2l0aCByZWR1Y2VkIHN0eWxpbmcnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPENoZWNrYm94IGNoZWNrZWQ9e2ZhbHNlfSBvbkNoYW5nZT17b25DaGFuZ2V9IGxhYmVsPVwiTWluaVwiIG1pbmk9e3RydWV9IC8+KTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ2NoZWNrYm94JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnTWluaScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVXNlciBpbnRlcmFjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNhbGwgb25DaGFuZ2Ugd2hlbiBjaGVja2JveCBpcyBjbGlja2VkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgcmVuZGVyKDxDaGVja2JveCBjaGVja2VkPXtmYWxzZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBsYWJlbD1cIkFjY2VwdFwiIC8+KTtcblxuICAgICAgY29uc3QgY2hlY2tib3ggPSBzY3JlZW4uZ2V0QnlSb2xlKCdjaGVja2JveCcpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhjaGVja2JveCk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjYWxsIG9uQ2hhbmdlIHdoZW4gbGFiZWwgaXMgY2xpY2tlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcig8Q2hlY2tib3ggY2hlY2tlZD17ZmFsc2V9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gbGFiZWw9XCJDbGljayBsYWJlbFwiIC8+KTtcblxuICAgICAgY29uc3QgbGFiZWwgPSBzY3JlZW4uZ2V0QnlUZXh0KCdDbGljayBsYWJlbCcpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhsYWJlbCk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJvcHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdmFsdWUgcHJvcCcsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Q2hlY2tib3ggY2hlY2tlZD17dHJ1ZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBsYWJlbD1cIldpdGggdmFsdWVcIiB2YWx1ZT1cIm9wdGlvbjFcIiAvPik7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdjaGVja2JveCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkaXNwbGF5IGVycm9yIHN0eWxpbmcgd2hlbiBlcnJvciBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxDaGVja2JveCBjaGVja2VkPXtmYWxzZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBsYWJlbD1cIkVycm9yIHN0YXRlXCIgZXJyb3I9e3RydWV9IC8+KTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ2NoZWNrYm94JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnRXJyb3Igc3RhdGUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0RlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIG1pbmkgZGVmYXVsdCB0byBmYWxzZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPENoZWNrYm94IGNoZWNrZWQ9e3RydWV9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gbGFiZWw9XCJUZXN0XCIgLz4pO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgnY2hlY2tib3gnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBlcnJvciBkZWZhdWx0IHRvIGZhbHNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Q2hlY2tib3ggY2hlY2tlZD17dHJ1ZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBsYWJlbD1cIlRlc3RcIiAvPik7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdjaGVja2JveCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHZhbHVlIGRlZmF1bHQgdG8gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxDaGVja2JveCBjaGVja2VkPXt0cnVlfSBvbkNoYW5nZT17b25DaGFuZ2V9IGxhYmVsPVwiVGVzdFwiIC8+KTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ2NoZWNrYm94JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBY2Nlc3NpYmlsaXR5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgaGF2ZSBwcm9wZXIgbGFiZWwgYXNzb2NpYXRpb24nLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPENoZWNrYm94IGNoZWNrZWQ9e2ZhbHNlfSBvbkNoYW5nZT17b25DaGFuZ2V9IGxhYmVsPVwiQWNjZXNzaWJsZSBsYWJlbFwiIC8+KTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnQWNjZXNzaWJsZSBsYWJlbCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBrZXlib2FyZCBhY2Nlc3NpYmxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgcmVuZGVyKDxDaGVja2JveCBjaGVja2VkPXtmYWxzZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBsYWJlbD1cIktleWJvYXJkIHRlc3RcIiAvPik7XG5cbiAgICAgIGNvbnN0IGNoZWNrYm94ID0gc2NyZWVuLmdldEJ5Um9sZSgnY2hlY2tib3gnKTtcbiAgICAgIGNoZWNrYm94LmZvY3VzKCk7XG4gICAgICBleHBlY3QoY2hlY2tib3gpLnRvSGF2ZUZvY3VzKCk7XG5cbiAgICAgIGF3YWl0IHVzZXIua2V5Ym9hcmQoJyAnKTtcbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTXVsdGlwbGUgY2hlY2tib3hlcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlbmRlciBtdWx0aXBsZSBpbmRlcGVuZGVudCBjaGVja2JveGVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb25DaGFuZ2UxID0gamVzdC5mbigpO1xuICAgICAgY29uc3Qgb25DaGFuZ2UyID0gamVzdC5mbigpO1xuXG4gICAgICByZW5kZXIoXG4gICAgICAgIDw+XG4gICAgICAgICAgPENoZWNrYm94IGNoZWNrZWQ9e3RydWV9IG9uQ2hhbmdlPXtvbkNoYW5nZTF9IGxhYmVsPVwiT3B0aW9uIDFcIiAvPlxuICAgICAgICAgIDxDaGVja2JveCBjaGVja2VkPXtmYWxzZX0gb25DaGFuZ2U9e29uQ2hhbmdlMn0gbGFiZWw9XCJPcHRpb24gMlwiIC8+XG4gICAgICAgIDwvPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ09wdGlvbiAxJykpLnRvQmVDaGVja2VkKCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdPcHRpb24gMicpKS5ub3QudG9CZUNoZWNrZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGluZGVwZW5kZW50IG9uQ2hhbmdlIGNhbGxiYWNrcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIGNvbnN0IG9uQ2hhbmdlMSA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IG9uQ2hhbmdlMiA9IGplc3QuZm4oKTtcblxuICAgICAgcmVuZGVyKFxuICAgICAgICA8PlxuICAgICAgICAgIDxDaGVja2JveCBjaGVja2VkPXt0cnVlfSBvbkNoYW5nZT17b25DaGFuZ2UxfSBsYWJlbD1cIk9wdGlvbiAxXCIgLz5cbiAgICAgICAgICA8Q2hlY2tib3ggY2hlY2tlZD17ZmFsc2V9IG9uQ2hhbmdlPXtvbkNoYW5nZTJ9IGxhYmVsPVwiT3B0aW9uIDJcIiAvPlxuICAgICAgICA8Lz4sXG4gICAgICApO1xuXG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnT3B0aW9uIDInKSk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZTIpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGV4cGVjdChvbkNoYW5nZTEpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsU0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUFJLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxZQUFNO0VBQ25DLElBQU1DLFFBQVEsR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztFQUUxQkMsVUFBVSxDQUFDLFlBQU07SUFDZkgsUUFBUSxDQUFDSSxTQUFTLENBQUMsQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFRkwsUUFBUSxDQUFDLFdBQVcsRUFBRSxZQUFNO0lBQzFCTSxFQUFFLENBQUMsbUNBQW1DLEVBQUUsWUFB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
@@ -1,14 +0,0 @@
1
- "use strict";
2
-
3
- var _choiceUtils = require("../choice-utils");
4
- describe('firstAvailableIndex', function () {
5
- var assert = function assert(values, index, expected) {
6
- it("[".concat(values.join(','), "], ").concat(index, " ==> ").concat(expected), function () {
7
- expect((0, _choiceUtils.firstAvailableIndex)(['0'], 0)).toEqual('1');
8
- });
9
- };
10
- assert(['0'], 0, '1');
11
- assert(['0', '1', '2'], 0, '3');
12
- assert(['0', '1', '2'], 100, '100');
13
- });
14
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hvaWNlVXRpbHMiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJhc3NlcnQiLCJ2YWx1ZXMiLCJpbmRleCIsImV4cGVjdGVkIiwiaXQiLCJjb25jYXQiLCJqb2luIiwiZXhwZWN0IiwiZmlyc3RBdmFpbGFibGVJbmRleCIsInRvRXF1YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2Nob2ljZS11dGlscy50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpcnN0QXZhaWxhYmxlSW5kZXggfSBmcm9tICcuLi9jaG9pY2UtdXRpbHMnO1xuXG5kZXNjcmliZSgnZmlyc3RBdmFpbGFibGVJbmRleCcsICgpID0+IHtcbiAgY29uc3QgYXNzZXJ0ID0gKHZhbHVlcywgaW5kZXgsIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQoYFske3ZhbHVlcy5qb2luKCcsJyl9XSwgJHtpbmRleH0gPT0+ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZpcnN0QXZhaWxhYmxlSW5kZXgoWycwJ10sIDApKS50b0VxdWFsKCcxJyk7XG4gICAgfSk7XG4gIH07XG4gIGFzc2VydChbJzAnXSwgMCwgJzEnKTtcbiAgYXNzZXJ0KFsnMCcsICcxJywgJzInXSwgMCwgJzMnKTtcbiAgYXNzZXJ0KFsnMCcsICcxJywgJzInXSwgMTAwLCAnMTAwJyk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFFQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLFlBQU07RUFDcEMsSUFBTUMsTUFBTSxHQUFHLFNBQVRBLE1BQU1BLENBQUlDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUs7SUFDMUNDLEVBQUUsS0FBQUMsTUFBQSxDQUFLSixNQUFNLENBQUNLLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBQUQsTUFBQSxDQUFNSCxLQUFLLFdBQUFHLE1BQUEsQ0FBUUYsUUFBUSxHQUFJLFlBQU07TUFDMURJLE1BQU0sQ0FBQyxJQUFBQyxnQ0FBbUIsRUFBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDcEQsQ0FBQyxDQUFDO0VBQ0osQ0FBQztFQUNEVCxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ3JCQSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDL0JBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQztBQUNyQyxDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,252 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _react = _interopRequireDefault(require("react"));
5
- var _react2 = require("@testing-library/react");
6
- var _formSection = _interopRequireDefault(require("../form-section"));
7
- describe('FormSection Component', function () {
8
- describe('Rendering', function () {
9
- it('should render with label and children', function () {
10
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
11
- label: "Settings"
12
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Child content")));
13
- expect(_react2.screen.getByText('Settings')).toBeInTheDocument();
14
- expect(_react2.screen.getByText('Child content')).toBeInTheDocument();
15
- });
16
- it('should render label as subtitle1 typography', function () {
17
- var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
18
- label: "Configuration"
19
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
20
- container = _render.container;
21
- var typography = container.querySelector('[class*="MuiTypography"]');
22
- expect(typography).toBeInTheDocument();
23
- });
24
- it('should render with custom className', function () {
25
- var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
26
- label: "Custom",
27
- className: "custom-class"
28
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
29
- container = _render2.container;
30
- expect(container.querySelector('.custom-class')).toBeInTheDocument();
31
- });
32
- it('should render multiple children', function () {
33
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
34
- label: "Multiple Children"
35
- }, /*#__PURE__*/_react["default"].createElement("div", null, "First child"), /*#__PURE__*/_react["default"].createElement("div", null, "Second child"), /*#__PURE__*/_react["default"].createElement("div", null, "Third child")));
36
- expect(_react2.screen.getByText('First child')).toBeInTheDocument();
37
- expect(_react2.screen.getByText('Second child')).toBeInTheDocument();
38
- expect(_react2.screen.getByText('Third child')).toBeInTheDocument();
39
- });
40
- it('should render with single child', function () {
41
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
42
- label: "Single Child"
43
- }, /*#__PURE__*/_react["default"].createElement("input", {
44
- type: "text",
45
- placeholder: "Input"
46
- })));
47
- expect(_react2.screen.getByPlaceholderText('Input')).toBeInTheDocument();
48
- });
49
- it('should render with complex child components', function () {
50
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
51
- label: "Complex"
52
- }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", null, "Name:"), /*#__PURE__*/_react["default"].createElement("input", {
53
- type: "text",
54
- placeholder: "Enter name"
55
- })), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", null, "Email:"), /*#__PURE__*/_react["default"].createElement("input", {
56
- type: "email",
57
- placeholder: "Enter email"
58
- }))));
59
- expect(_react2.screen.getByPlaceholderText('Enter name')).toBeInTheDocument();
60
- expect(_react2.screen.getByPlaceholderText('Enter email')).toBeInTheDocument();
61
- });
62
- });
63
- describe('Labels', function () {
64
- it('should display different labels', function () {
65
- var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
66
- label: "First Label"
67
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
68
- rerender = _render3.rerender;
69
- expect(_react2.screen.getByText('First Label')).toBeInTheDocument();
70
- rerender(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
71
- label: "Second Label"
72
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content")));
73
- expect(_react2.screen.getByText('Second Label')).toBeInTheDocument();
74
- expect(_react2.screen.queryByText('First Label')).not.toBeInTheDocument();
75
- });
76
- it('should handle empty label', function () {
77
- var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
78
- label: ""
79
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
80
- container = _render4.container;
81
- expect(container.querySelector('[class*="MuiTypography"]')).toBeInTheDocument();
82
- expect(_react2.screen.getByText('Content')).toBeInTheDocument();
83
- });
84
- it('should handle long labels', function () {
85
- var longLabel = 'This is a very long label that should wrap properly within the form section';
86
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
87
- label: longLabel
88
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content")));
89
- expect(_react2.screen.getByText(longLabel)).toBeInTheDocument();
90
- });
91
- it('should handle special characters in labels', function () {
92
- var specialLabel = 'Settings & Configuration < Advanced > Test @ #1';
93
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
94
- label: specialLabel
95
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content")));
96
- expect(_react2.screen.getByText(specialLabel)).toBeInTheDocument();
97
- });
98
- });
99
- describe('Styling and Layout', function () {
100
- it('should apply default spacing', function () {
101
- var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
102
- label: "Spaced"
103
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
104
- container = _render5.container;
105
- var formSection = container.querySelector('[class*="MuiBox"], div');
106
- expect(formSection).toBeInTheDocument();
107
- });
108
- it('should apply labelExtraStyle to the label', function () {
109
- var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
110
- label: "Styled Label",
111
- labelExtraStyle: {
112
- color: 'red',
113
- fontWeight: 'bold'
114
- }
115
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
116
- container = _render6.container;
117
- var typography = container.querySelector('[class*="MuiTypography"]');
118
- expect(typography).toHaveStyle('color: red');
119
- expect(typography).toHaveStyle('fontWeight: bold');
120
- });
121
- it('should apply multiple labelExtraStyle properties', function () {
122
- var extraStyle = {
123
- fontSize: '18px',
124
- margin: '10px',
125
- padding: '5px'
126
- };
127
- var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
128
- label: "Multi-styled",
129
- labelExtraStyle: extraStyle
130
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
131
- container = _render7.container;
132
- var typography = container.querySelector('[class*="MuiTypography"]');
133
- expect(typography).toHaveStyle('fontSize: 18px');
134
- expect(typography).toHaveStyle('margin: 10px');
135
- expect(typography).toHaveStyle('padding: 5px');
136
- });
137
- it('should handle no labelExtraStyle', function () {
138
- var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
139
- label: "No Extra Style"
140
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
141
- container = _render8.container;
142
- expect(container.querySelector('[class*="MuiTypography"]')).toBeInTheDocument();
143
- });
144
- });
145
- describe('CSS classes', function () {
146
- it('should support multiple custom classes', function () {
147
- var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
148
- label: "Test",
149
- className: "class1 class2 class3"
150
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
151
- container = _render9.container;
152
- var element = container.querySelector('.class1.class2.class3');
153
- expect(element).toBeInTheDocument();
154
- });
155
- it('should work without custom className', function () {
156
- var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
157
- label: "Test"
158
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
159
- container = _render0.container;
160
- expect(container.firstChild).toBeInTheDocument();
161
- });
162
- });
163
- describe('Content variations', function () {
164
- it('should render form inputs as children', function () {
165
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
166
- label: "Form Inputs"
167
- }, /*#__PURE__*/_react["default"].createElement("input", {
168
- type: "text",
169
- placeholder: "Text input"
170
- }), /*#__PURE__*/_react["default"].createElement("input", {
171
- type: "number",
172
- placeholder: "Number input"
173
- }), /*#__PURE__*/_react["default"].createElement("textarea", {
174
- placeholder: "Text area"
175
- })));
176
- expect(_react2.screen.getByPlaceholderText('Text input')).toBeInTheDocument();
177
- expect(_react2.screen.getByPlaceholderText('Number input')).toBeInTheDocument();
178
- expect(_react2.screen.getByPlaceholderText('Text area')).toBeInTheDocument();
179
- });
180
- it('should render lists as children', function () {
181
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
182
- label: "Options"
183
- }, /*#__PURE__*/_react["default"].createElement("ul", null, /*#__PURE__*/_react["default"].createElement("li", null, "Option 1"), /*#__PURE__*/_react["default"].createElement("li", null, "Option 2"), /*#__PURE__*/_react["default"].createElement("li", null, "Option 3"))));
184
- expect(_react2.screen.getByText('Option 1')).toBeInTheDocument();
185
- expect(_react2.screen.getByText('Option 2')).toBeInTheDocument();
186
- expect(_react2.screen.getByText('Option 3')).toBeInTheDocument();
187
- });
188
- it('should render buttons as children', function () {
189
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
190
- label: "Actions"
191
- }, /*#__PURE__*/_react["default"].createElement("button", null, "Save"), /*#__PURE__*/_react["default"].createElement("button", null, "Cancel")));
192
- expect(_react2.screen.getByRole('button', {
193
- name: 'Save'
194
- })).toBeInTheDocument();
195
- expect(_react2.screen.getByRole('button', {
196
- name: 'Cancel'
197
- })).toBeInTheDocument();
198
- });
199
- it('should render nested form sections', function () {
200
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
201
- label: "Outer"
202
- }, /*#__PURE__*/_react["default"].createElement(_formSection["default"], {
203
- label: "Inner"
204
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Nested content"))));
205
- expect(_react2.screen.getByText('Outer')).toBeInTheDocument();
206
- expect(_react2.screen.getByText('Inner')).toBeInTheDocument();
207
- expect(_react2.screen.getByText('Nested content')).toBeInTheDocument();
208
- });
209
- });
210
- describe('Edge cases', function () {
211
- it('should render with conditional children', function () {
212
- var showContent = true;
213
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
214
- label: "Conditional"
215
- }, showContent && /*#__PURE__*/_react["default"].createElement("div", null, "Visible"), !showContent && /*#__PURE__*/_react["default"].createElement("div", null, "Hidden")));
216
- expect(_react2.screen.getByText('Visible')).toBeInTheDocument();
217
- expect(_react2.screen.queryByText('Hidden')).not.toBeInTheDocument();
218
- });
219
- it('should update when children change', function () {
220
- var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
221
- label: "Dynamic"
222
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Initial content"))),
223
- rerender = _render1.rerender;
224
- expect(_react2.screen.getByText('Initial content')).toBeInTheDocument();
225
- rerender(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
226
- label: "Dynamic"
227
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Updated content")));
228
- expect(_react2.screen.queryByText('Initial content')).not.toBeInTheDocument();
229
- expect(_react2.screen.getByText('Updated content')).toBeInTheDocument();
230
- });
231
- });
232
- describe('Accessibility', function () {
233
- it('should have proper heading hierarchy', function () {
234
- var _render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
235
- label: "Accessible Section"
236
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
237
- container = _render10.container;
238
- var typography = container.querySelector('[class*="MuiTypography"]');
239
- expect(typography).toBeInTheDocument();
240
- });
241
- it('should be properly semantically structured', function () {
242
- var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
243
- label: "Semantic"
244
- }, /*#__PURE__*/_react["default"].createElement("input", {
245
- type: "text"
246
- }))),
247
- container = _render11.container;
248
- expect(container.querySelector('div')).toBeInTheDocument();
249
- });
250
- });
251
- });
252
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfZm9ybVNlY3Rpb24iLCJkZXNjcmliZSIsIml0IiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImxhYmVsIiwiZXhwZWN0Iiwic2NyZWVuIiwiZ2V0QnlUZXh0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJfcmVuZGVyIiwiY29udGFpbmVyIiwidHlwb2dyYXBoeSIsInF1ZXJ5U2VsZWN0b3IiLCJfcmVuZGVyMiIsImNsYXNzTmFtZSIsInR5cGUiLCJwbGFjZWhvbGRlciIsImdldEJ5UGxhY2Vob2xkZXJUZXh0IiwiX3JlbmRlcjMiLCJyZXJlbmRlciIsInF1ZXJ5QnlUZXh0Iiwibm90IiwiX3JlbmRlcjQiLCJsb25nTGFiZWwiLCJzcGVjaWFsTGFiZWwiLCJfcmVuZGVyNSIsImZvcm1TZWN0aW9uIiwiX3JlbmRlcjYiLCJsYWJlbEV4dHJhU3R5bGUiLCJjb2xvciIsImZvbnRXZWlnaHQiLCJ0b0hhdmVTdHlsZSIsImV4dHJhU3R5bGUiLCJmb250U2l6ZSIsIm1hcmdpbiIsInBhZGRpbmciLCJfcmVuZGVyNyIsIl9yZW5kZXI4IiwiX3JlbmRlcjkiLCJlbGVtZW50IiwiX3JlbmRlcjAiLCJmaXJzdENoaWxkIiwiZ2V0QnlSb2xlIiwibmFtZSIsInNob3dDb250ZW50IiwiX3JlbmRlcjEiLCJfcmVuZGVyMTAiLCJfcmVuZGVyMTEiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2Zvcm0tc2VjdGlvbi50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCBGb3JtU2VjdGlvbiBmcm9tICcuLi9mb3JtLXNlY3Rpb24nO1xuXG5kZXNjcmliZSgnRm9ybVNlY3Rpb24gQ29tcG9uZW50JywgKCkgPT4ge1xuICBkZXNjcmliZSgnUmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVuZGVyIHdpdGggbGFiZWwgYW5kIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJTZXR0aW5nc1wiPlxuICAgICAgICAgIDxkaXY+Q2hpbGQgY29udGVudDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdTZXR0aW5ncycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0NoaWxkIGNvbnRlbnQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIGxhYmVsIGFzIHN1YnRpdGxlMSB0eXBvZ3JhcGh5JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiQ29uZmlndXJhdGlvblwiPlxuICAgICAgICAgIDxkaXY+Q29udGVudDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignW2NsYXNzKj1cIk11aVR5cG9ncmFwaHlcIl0nKTtcbiAgICAgIGV4cGVjdCh0eXBvZ3JhcGh5KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW5kZXIgd2l0aCBjdXN0b20gY2xhc3NOYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiQ3VzdG9tXCIgY2xhc3NOYW1lPVwiY3VzdG9tLWNsYXNzXCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY3VzdG9tLWNsYXNzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBtdWx0aXBsZSBjaGlsZHJlbicsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiTXVsdGlwbGUgQ2hpbGRyZW5cIj5cbiAgICAgICAgICA8ZGl2PkZpcnN0IGNoaWxkPC9kaXY+XG4gICAgICAgICAgPGRpdj5TZWNvbmQgY2hpbGQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlRoaXJkIGNoaWxkPC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0ZpcnN0IGNoaWxkJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnU2Vjb25kIGNoaWxkJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnVGhpcmQgY2hpbGQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIHdpdGggc2luZ2xlIGNoaWxkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJTaW5nbGUgQ2hpbGRcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIklucHV0XCIgLz5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5UGxhY2Vob2xkZXJUZXh0KCdJbnB1dCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW5kZXIgd2l0aCBjb21wbGV4IGNoaWxkIGNvbXBvbmVudHMnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD1cIkNvbXBsZXhcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsPk5hbWU6PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbmFtZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxsYWJlbD5FbWFpbDo8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgZW1haWxcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlQbGFjZWhvbGRlclRleHQoJ0VudGVyIG5hbWUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlQbGFjZWhvbGRlclRleHQoJ0VudGVyIGVtYWlsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdMYWJlbHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBkaXNwbGF5IGRpZmZlcmVudCBsYWJlbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD1cIkZpcnN0IExhYmVsXCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0ZpcnN0IExhYmVsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIHJlcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJTZWNvbmQgTGFiZWxcIj5cbiAgICAgICAgICA8ZGl2PkNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnU2Vjb25kIExhYmVsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlUZXh0KCdGaXJzdCBMYWJlbCcpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVtcHR5IGxhYmVsJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiXCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbY2xhc3MqPVwiTXVpVHlwb2dyYXBoeVwiXScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0NvbnRlbnQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGxvbmcgbGFiZWxzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbG9uZ0xhYmVsID0gJ1RoaXMgaXMgYSB2ZXJ5IGxvbmcgbGFiZWwgdGhhdCBzaG91bGQgd3JhcCBwcm9wZXJseSB3aXRoaW4gdGhlIGZvcm0gc2VjdGlvbic7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD17bG9uZ0xhYmVsfT5cbiAgICAgICAgICA8ZGl2PkNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dChsb25nTGFiZWwpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGxhYmVscycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNwZWNpYWxMYWJlbCA9ICdTZXR0aW5ncyAmIENvbmZpZ3VyYXRpb24gPCBBZHZhbmNlZCA+IFRlc3QgQCAjMSc7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD17c3BlY2lhbExhYmVsfT5cbiAgICAgICAgICA8ZGl2PkNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dChzcGVjaWFsTGFiZWwpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU3R5bGluZyBhbmQgTGF5b3V0JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYXBwbHkgZGVmYXVsdCBzcGFjaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiU3BhY2VkXCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZm9ybVNlY3Rpb24gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignW2NsYXNzKj1cIk11aUJveFwiXSwgZGl2Jyk7XG4gICAgICBleHBlY3QoZm9ybVNlY3Rpb24pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IGxhYmVsRXh0cmFTdHlsZSB0byB0aGUgbGFiZWwnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJTdHlsZWQgTGFiZWxcIiBsYWJlbEV4dHJhU3R5bGU9e3sgY29sb3I6ICdyZWQnLCBmb250V2VpZ2h0OiAnYm9sZCcgfX0+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHlwb2dyYXBoeSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbY2xhc3MqPVwiTXVpVHlwb2dyYXBoeVwiXScpO1xuICAgICAgZXhwZWN0KHR5cG9ncmFwaHkpLnRvSGF2ZVN0eWxlKCdjb2xvcjogcmVkJyk7XG4gICAgICBleHBlY3QodHlwb2dyYXBoeSkudG9IYXZlU3R5bGUoJ2ZvbnRXZWlnaHQ6IGJvbGQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbXVsdGlwbGUgbGFiZWxFeHRyYVN0eWxlIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBleHRyYVN0eWxlID0ge1xuICAgICAgICBmb250U2l6ZTogJzE4cHgnLFxuICAgICAgICBtYXJnaW46ICcxMHB4JyxcbiAgICAgICAgcGFkZGluZzogJzVweCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJNdWx0aS1zdHlsZWRcIiBsYWJlbEV4dHJhU3R5bGU9e2V4dHJhU3R5bGV9PlxuICAgICAgICAgIDxkaXY+Q29udGVudDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignW2NsYXNzKj1cIk11aVR5cG9ncmFwaHlcIl0nKTtcbiAgICAgIGV4cGVjdCh0eXBvZ3JhcGh5KS50b0hhdmVTdHlsZSgnZm9udFNpemU6IDE4cHgnKTtcbiAgICAgIGV4cGVjdCh0eXBvZ3JhcGh5KS50b0hhdmVTdHlsZSgnbWFyZ2luOiAxMHB4Jyk7XG4gICAgICBleHBlY3QodHlwb2dyYXBoeSkudG9IYXZlU3R5bGUoJ3BhZGRpbmc6IDVweCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgbm8gbGFiZWxFeHRyYVN0eWxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiTm8gRXh0cmEgU3R5bGVcIj5cbiAgICAgICAgICA8ZGl2PkNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tjbGFzcyo9XCJNdWlUeXBvZ3JhcGh5XCJdJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDU1MgY2xhc3NlcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHN1cHBvcnQgbXVsdGlwbGUgY3VzdG9tIGNsYXNzZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJUZXN0XCIgY2xhc3NOYW1lPVwiY2xhc3MxIGNsYXNzMiBjbGFzczNcIj5cbiAgICAgICAgICA8ZGl2PkNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBlbGVtZW50ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5jbGFzczEuY2xhc3MyLmNsYXNzMycpO1xuICAgICAgZXhwZWN0KGVsZW1lbnQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aG91dCBjdXN0b20gY2xhc3NOYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiVGVzdFwiPlxuICAgICAgICAgIDxkaXY+Q29udGVudDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NvbnRlbnQgdmFyaWF0aW9ucycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlbmRlciBmb3JtIGlucHV0cyBhcyBjaGlsZHJlbicsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiRm9ybSBJbnB1dHNcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlRleHQgaW5wdXRcIiAvPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJOdW1iZXIgaW5wdXRcIiAvPlxuICAgICAgICAgIDx0ZXh0YXJlYSBwbGFjZWhvbGRlcj1cIlRleHQgYXJlYVwiPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dCgnVGV4dCBpbnB1dCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dCgnTnVtYmVyIGlucHV0JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5UGxhY2Vob2xkZXJUZXh0KCdUZXh0IGFyZWEnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIGxpc3RzIGFzIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJPcHRpb25zXCI+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgPGxpPk9wdGlvbiAxPC9saT5cbiAgICAgICAgICAgIDxsaT5PcHRpb24gMjwvbGk+XG4gICAgICAgICAgICA8bGk+T3B0aW9uIDM8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ09wdGlvbiAxJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnT3B0aW9uIDInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdPcHRpb24gMycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW5kZXIgYnV0dG9ucyBhcyBjaGlsZHJlbicsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiQWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24+U2F2ZTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJ1NhdmUnIH0pKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJ0NhbmNlbCcgfSkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBuZXN0ZWQgZm9ybSBzZWN0aW9ucycsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiT3V0ZXJcIj5cbiAgICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJJbm5lclwiPlxuICAgICAgICAgICAgPGRpdj5OZXN0ZWQgY29udGVudDwvZGl2PlxuICAgICAgICAgIDwvRm9ybVNlY3Rpb24+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ091dGVyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSW5uZXInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdOZXN0ZWQgY29udGVudCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRWRnZSBjYXNlcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlbmRlciB3aXRoIGNvbmRpdGlvbmFsIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2hvd0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD1cIkNvbmRpdGlvbmFsXCI+XG4gICAgICAgICAge3Nob3dDb250ZW50ICYmIDxkaXY+VmlzaWJsZTwvZGl2Pn1cbiAgICAgICAgICB7IXNob3dDb250ZW50ICYmIDxkaXY+SGlkZGVuPC9kaXY+fVxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdWaXNpYmxlJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlUZXh0KCdIaWRkZW4nKSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVwZGF0ZSB3aGVuIGNoaWxkcmVuIGNoYW5nZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVyZW5kZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiRHluYW1pY1wiPlxuICAgICAgICAgIDxkaXY+SW5pdGlhbCBjb250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0luaXRpYWwgY29udGVudCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuXG4gICAgICByZXJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiRHluYW1pY1wiPlxuICAgICAgICAgIDxkaXY+VXBkYXRlZCBjb250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5VGV4dCgnSW5pdGlhbCBjb250ZW50JykpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1VwZGF0ZWQgY29udGVudCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWNjZXNzaWJpbGl0eScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGhhdmUgcHJvcGVyIGhlYWRpbmcgaGllcmFyY2h5JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiQWNjZXNzaWJsZSBTZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHlwb2dyYXBoeSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbY2xhc3MqPVwiTXVpVHlwb2dyYXBoeVwiXScpO1xuICAgICAgZXhwZWN0KHR5cG9ncmFwaHkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIHByb3Blcmx5IHNlbWFudGljYWxseSBzdHJ1Y3R1cmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiU2VtYW50aWNcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAvPlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignZGl2JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBRyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsWUFBTTtFQUN0Q0EsUUFBUSxDQUFDLFdBQVcsRUFBRSxZQUFNO0lBQzFCQyxFQUFFLENBQUMsdUNBQXVDLEVBQUUsWUFBTTtNQUNoRCxJQUFBQyxjQUFNLGVBQ0pQLE1BQUEsWUFBQVEsYUFBQSxDQUFDSixZQUFBLFdBQVc7UUFBQ0ssS0FBSyxFQUFDO01BQVUsZ0JBQzNCVCxNQUFBLFlBQUFRLGFBQUEsY0FBSyxlQUFrQixDQUNaLENBQ2YsQ0FBQztNQUVERSxNQUFNLENBQUNDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7TUFDeERILE1BQU0sQ0FBQ0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUMvRCxDQUFDLENBQUM7SUFFRlAsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLFlBQU07TUFDdEQsSUFBQVEsT0FBQSxHQUFzQixJQUFBUCxjQUFNLGVBQzFCUCxNQUFBLFlBQUFRLGFBQUEsQ0FBQ0osWUFBQSxXQUFXO1VBQUNL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