@pie-lib/config-ui 12.0.0-next.0 → 12.1.0-next.0

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 (60) hide show
  1. package/lib/__tests__/alert-dialog.test.js +262 -0
  2. package/lib/__tests__/checkbox.test.js +227 -0
  3. package/lib/__tests__/choice-utils.test.js +14 -0
  4. package/lib/__tests__/form-section.test.js +252 -0
  5. package/lib/__tests__/help.test.js +270 -0
  6. package/lib/__tests__/input.test.js +268 -0
  7. package/lib/__tests__/langs.test.js +541 -0
  8. package/lib/__tests__/number-text-field-custom.test.js +362 -0
  9. package/lib/__tests__/number-text-field.test.js +421 -0
  10. package/lib/__tests__/radio-with-label.test.js +233 -0
  11. package/lib/__tests__/settings-panel.test.js +184 -0
  12. package/lib/__tests__/settings.test.js +653 -0
  13. package/lib/__tests__/tabs.test.js +211 -0
  14. package/lib/__tests__/two-choice.test.js +124 -0
  15. package/lib/__tests__/with-stateful-model.test.js +221 -0
  16. package/lib/alert-dialog.js +1 -1
  17. package/lib/checkbox.js +1 -1
  18. package/lib/choice-configuration/__tests__/feedback-menu.test.js +287 -0
  19. package/lib/choice-configuration/__tests__/index.test.js +253 -0
  20. package/lib/choice-configuration/feedback-menu.js +1 -1
  21. package/lib/choice-configuration/index.js +3 -3
  22. package/lib/choice-configuration/index.js.map +1 -1
  23. package/lib/choice-utils.js +1 -1
  24. package/lib/feedback-config/__tests__/feedback-config.test.js +201 -0
  25. package/lib/feedback-config/__tests__/feedback-selector.test.js +177 -0
  26. package/lib/feedback-config/feedback-selector.js +3 -3
  27. package/lib/feedback-config/feedback-selector.js.map +1 -1
  28. package/lib/feedback-config/group.js +1 -1
  29. package/lib/feedback-config/index.js +1 -1
  30. package/lib/form-section.js +1 -1
  31. package/lib/help.js +1 -1
  32. package/lib/index.js +1 -1
  33. package/lib/input.js +1 -1
  34. package/lib/inputs.js +1 -1
  35. package/lib/langs.js +1 -1
  36. package/lib/layout/__tests__/config.layout.test.js +70 -0
  37. package/lib/layout/__tests__/layout-content.test.js +6 -0
  38. package/lib/layout/config-layout.js +1 -1
  39. package/lib/layout/index.js +1 -1
  40. package/lib/layout/layout-contents.js +1 -1
  41. package/lib/layout/settings-box.js +1 -1
  42. package/lib/mui-box/index.js +1 -1
  43. package/lib/number-text-field-custom.js +1 -1
  44. package/lib/number-text-field.js +1 -1
  45. package/lib/radio-with-label.js +1 -1
  46. package/lib/settings/display-size.js +1 -1
  47. package/lib/settings/index.js +1 -1
  48. package/lib/settings/panel.js +1 -1
  49. package/lib/settings/settings-radio-label.js +1 -1
  50. package/lib/settings/toggle.js +1 -1
  51. package/lib/tabs/index.js +1 -1
  52. package/lib/tags-input/__tests__/index.test.js +183 -0
  53. package/lib/tags-input/index.js +1 -1
  54. package/lib/two-choice.js +1 -1
  55. package/lib/with-stateful-model.js +1 -1
  56. package/package.json +5 -13
  57. package/src/choice-configuration/__tests__/index.test.jsx +1 -1
  58. package/src/choice-configuration/index.jsx +68 -75
  59. package/src/feedback-config/__tests__/feedback-selector.test.jsx +3 -13
  60. package/src/feedback-config/feedback-selector.jsx +3 -7
@@ -0,0 +1,211 @@
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 _tabs = require("../tabs");
10
+ describe('Tabs Component', function () {
11
+ it('renders tabs with correct titles', function () {
12
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
13
+ title: "Tab 1"
14
+ }, "Content 1"), /*#__PURE__*/_react["default"].createElement("div", {
15
+ title: "Tab 2"
16
+ }, "Content 2"), /*#__PURE__*/_react["default"].createElement("div", {
17
+ title: "Tab 3"
18
+ }, "Content 3")));
19
+ expect(_react2.screen.getByText('Tab 1')).toBeInTheDocument();
20
+ expect(_react2.screen.getByText('Tab 2')).toBeInTheDocument();
21
+ expect(_react2.screen.getByText('Tab 3')).toBeInTheDocument();
22
+ });
23
+ it('renders first tab content by default', function () {
24
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
25
+ title: "Tab 1"
26
+ }, "Content 1"), /*#__PURE__*/_react["default"].createElement("div", {
27
+ title: "Tab 2"
28
+ }, "Content 2"), /*#__PURE__*/_react["default"].createElement("div", {
29
+ title: "Tab 3"
30
+ }, "Content 3")));
31
+ expect(_react2.screen.getByText('Content 1')).toBeInTheDocument();
32
+ expect(_react2.screen.queryByText('Content 2')).not.toBeInTheDocument();
33
+ expect(_react2.screen.queryByText('Content 3')).not.toBeInTheDocument();
34
+ });
35
+ it('switches to selected tab when clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
36
+ var user, tab2;
37
+ return _regenerator["default"].wrap(function (_context) {
38
+ while (1) switch (_context.prev = _context.next) {
39
+ case 0:
40
+ user = _userEvent["default"].setup();
41
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
42
+ title: "Tab 1"
43
+ }, "Content 1"), /*#__PURE__*/_react["default"].createElement("div", {
44
+ title: "Tab 2"
45
+ }, "Content 2"), /*#__PURE__*/_react["default"].createElement("div", {
46
+ title: "Tab 3"
47
+ }, "Content 3")));
48
+ tab2 = _react2.screen.getByRole('tab', {
49
+ name: 'Tab 2'
50
+ });
51
+ _context.next = 1;
52
+ return user.click(tab2);
53
+ case 1:
54
+ expect(_react2.screen.queryByText('Content 1')).not.toBeInTheDocument();
55
+ expect(_react2.screen.getByText('Content 2')).toBeInTheDocument();
56
+ expect(_react2.screen.queryByText('Content 3')).not.toBeInTheDocument();
57
+ case 2:
58
+ case "end":
59
+ return _context.stop();
60
+ }
61
+ }, _callee);
62
+ })));
63
+ it('displays correct content when multiple tabs are clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
64
+ var user;
65
+ return _regenerator["default"].wrap(function (_context2) {
66
+ while (1) switch (_context2.prev = _context2.next) {
67
+ case 0:
68
+ user = _userEvent["default"].setup();
69
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
70
+ title: "Tab 1"
71
+ }, "Content 1"), /*#__PURE__*/_react["default"].createElement("div", {
72
+ title: "Tab 2"
73
+ }, "Content 2"), /*#__PURE__*/_react["default"].createElement("div", {
74
+ title: "Tab 3"
75
+ }, "Content 3")));
76
+ _context2.next = 1;
77
+ return user.click(_react2.screen.getByRole('tab', {
78
+ name: 'Tab 2'
79
+ }));
80
+ case 1:
81
+ expect(_react2.screen.getByText('Content 2')).toBeInTheDocument();
82
+ _context2.next = 2;
83
+ return user.click(_react2.screen.getByRole('tab', {
84
+ name: 'Tab 3'
85
+ }));
86
+ case 2:
87
+ expect(_react2.screen.getByText('Content 3')).toBeInTheDocument();
88
+ _context2.next = 3;
89
+ return user.click(_react2.screen.getByRole('tab', {
90
+ name: 'Tab 1'
91
+ }));
92
+ case 3:
93
+ expect(_react2.screen.getByText('Content 1')).toBeInTheDocument();
94
+ case 4:
95
+ case "end":
96
+ return _context2.stop();
97
+ }
98
+ }, _callee2);
99
+ })));
100
+ it('applies custom className to root element', function () {
101
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, {
102
+ className: "custom-tabs-class"
103
+ }, /*#__PURE__*/_react["default"].createElement("div", {
104
+ title: "Tab 1"
105
+ }, "Content 1"))),
106
+ container = _render.container;
107
+ var rootDiv = container.querySelector('.custom-tabs-class');
108
+ expect(rootDiv).toBeInTheDocument();
109
+ });
110
+ it('handles tabs without title prop gracefully', function () {
111
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
112
+ title: "Tab 1"
113
+ }, "Content 1"), /*#__PURE__*/_react["default"].createElement("div", null, "No Title Child"), /*#__PURE__*/_react["default"].createElement("div", {
114
+ title: "Tab 2"
115
+ }, "Content 2")));
116
+ var tabs = _react2.screen.getAllByRole('tab');
117
+ // Should only have 2 tabs since one doesn't have a title
118
+ expect(tabs).toHaveLength(2);
119
+ expect(_react2.screen.getByText('Tab 1')).toBeInTheDocument();
120
+ expect(_react2.screen.getByText('Tab 2')).toBeInTheDocument();
121
+ });
122
+ it('handles null children gracefully', function () {
123
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
124
+ title: "Tab 1"
125
+ }, "Content 1"), null, /*#__PURE__*/_react["default"].createElement("div", {
126
+ title: "Tab 2"
127
+ }, "Content 2")));
128
+ var tabs = _react2.screen.getAllByRole('tab');
129
+ expect(tabs).toHaveLength(2);
130
+ });
131
+ it('handles complex content in tabs', function () {
132
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
133
+ title: "Tab 1"
134
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("h2", null, "Tab 1 Header"), /*#__PURE__*/_react["default"].createElement("p", null, "Tab 1 description"), /*#__PURE__*/_react["default"].createElement("button", null, "Button in Tab 1"))), /*#__PURE__*/_react["default"].createElement("div", {
135
+ title: "Tab 2"
136
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("h2", null, "Tab 2 Header"), /*#__PURE__*/_react["default"].createElement("input", {
137
+ type: "text",
138
+ placeholder: "Input in Tab 2"
139
+ })))));
140
+ expect(_react2.screen.getByText('Tab 1 Header')).toBeInTheDocument();
141
+ expect(_react2.screen.getByRole('button', {
142
+ name: 'Button in Tab 1'
143
+ })).toBeInTheDocument();
144
+ var tab2 = _react2.screen.getByRole('tab', {
145
+ name: 'Tab 2'
146
+ });
147
+ expect(tab2).toBeInTheDocument();
148
+ });
149
+ it('renders all tabs in MuiTabs component', function () {
150
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
151
+ title: "Tab A"
152
+ }, "Content A"), /*#__PURE__*/_react["default"].createElement("div", {
153
+ title: "Tab B"
154
+ }, "Content B"), /*#__PURE__*/_react["default"].createElement("div", {
155
+ title: "Tab C"
156
+ }, "Content C"))),
157
+ container = _render2.container;
158
+ var tabsComponent = container.querySelector('[role="tablist"]');
159
+ expect(tabsComponent).toBeInTheDocument();
160
+ });
161
+ it('applies correct value prop to MuiTabs', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
162
+ var user, tab1, tab2;
163
+ return _regenerator["default"].wrap(function (_context3) {
164
+ while (1) switch (_context3.prev = _context3.next) {
165
+ case 0:
166
+ user = _userEvent["default"].setup();
167
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
168
+ title: "Tab 1"
169
+ }, "Content 1"), /*#__PURE__*/_react["default"].createElement("div", {
170
+ title: "Tab 2"
171
+ }, "Content 2")));
172
+
173
+ // Initially first tab should be selected (value 0)
174
+ tab1 = _react2.screen.getByRole('tab', {
175
+ name: 'Tab 1'
176
+ });
177
+ expect(tab1).toHaveAttribute('aria-selected', 'true');
178
+
179
+ // Click second tab
180
+ _context3.next = 1;
181
+ return user.click(_react2.screen.getByRole('tab', {
182
+ name: 'Tab 2'
183
+ }));
184
+ case 1:
185
+ tab2 = _react2.screen.getByRole('tab', {
186
+ name: 'Tab 2'
187
+ });
188
+ expect(tab2).toHaveAttribute('aria-selected', 'true');
189
+ expect(tab1).toHaveAttribute('aria-selected', 'false');
190
+ case 2:
191
+ case "end":
192
+ return _context3.stop();
193
+ }
194
+ }, _callee3);
195
+ })));
196
+ it('renders with empty children array', function () {
197
+ var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, [])),
198
+ container = _render3.container;
199
+ expect(container).toBeInTheDocument();
200
+ });
201
+ it('handles long tab titles', function () {
202
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_tabs.Tabs, null, /*#__PURE__*/_react["default"].createElement("div", {
203
+ title: "This is a very long tab title that should still render correctly"
204
+ }, "Content 1"), /*#__PURE__*/_react["default"].createElement("div", {
205
+ title: "Short"
206
+ }, "Content 2")));
207
+ expect(_react2.screen.getByText('This is a very long tab title that should still render correctly')).toBeInTheDocument();
208
+ expect(_react2.screen.getByText('Short')).toBeInTheDocument();
209
+ });
210
+ });
211
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX3RhYnMiLCJkZXNjcmliZSIsIml0IiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIlRhYnMiLCJ0aXRsZSIsImV4cGVjdCIsInNjcmVlbiIsImdldEJ5VGV4dCIsInRvQmVJblRoZURvY3VtZW50IiwicXVlcnlCeVRleHQiLCJub3QiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInVzZXIiLCJ0YWIyIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1c2VyRXZlbnQiLCJzZXR1cCIsImdldEJ5Um9sZSIsIm5hbWUiLCJjbGljayIsInN0b3AiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsIl9yZW5kZXIiLCJjbGFzc05hbWUiLCJjb250YWluZXIiLCJyb290RGl2IiwicXVlcnlTZWxlY3RvciIsInRhYnMiLCJnZXRBbGxCeVJvbGUiLCJ0b0hhdmVMZW5ndGgiLCJ0eXBlIiwicGxhY2Vob2xkZXIiLCJfcmVuZGVyMiIsInRhYnNDb21wb25lbnQiLCJfY2FsbGVlMyIsInRhYjEiLCJfY29udGV4dDMiLCJ0b0hhdmVBdHRyaWJ1dGUiLCJfcmVuZGVyMyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdGFicy50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB1c2VyRXZlbnQgZnJvbSAnQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50JztcbmltcG9ydCB7IFRhYnMgfSBmcm9tICcuLi90YWJzJztcblxuZGVzY3JpYmUoJ1RhYnMgQ29tcG9uZW50JywgKCkgPT4ge1xuICBpdCgncmVuZGVycyB0YWJzIHdpdGggY29ycmVjdCB0aXRsZXMnLCAoKSA9PiB7XG4gICAgcmVuZGVyKFxuICAgICAgPFRhYnM+XG4gICAgICAgIDxkaXYgdGl0bGU9XCJUYWIgMVwiPkNvbnRlbnQgMTwvZGl2PlxuICAgICAgICA8ZGl2IHRpdGxlPVwiVGFiIDJcIj5Db250ZW50IDI8L2Rpdj5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiAzXCI+Q29udGVudCAzPC9kaXY+XG4gICAgICA8L1RhYnM+LFxuICAgICk7XG5cbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnVGFiIDEnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnVGFiIDInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnVGFiIDMnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgZmlyc3QgdGFiIGNvbnRlbnQgYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgICByZW5kZXIoXG4gICAgICA8VGFicz5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiAxXCI+Q29udGVudCAxPC9kaXY+XG4gICAgICAgIDxkaXYgdGl0bGU9XCJUYWIgMlwiPkNvbnRlbnQgMjwvZGl2PlxuICAgICAgICA8ZGl2IHRpdGxlPVwiVGFiIDNcIj5Db250ZW50IDM8L2Rpdj5cbiAgICAgIDwvVGFicz4sXG4gICAgKTtcblxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdDb250ZW50IDEnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlUZXh0KCdDb250ZW50IDInKSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5VGV4dCgnQ29udGVudCAzJykpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnc3dpdGNoZXMgdG8gc2VsZWN0ZWQgdGFiIHdoZW4gY2xpY2tlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgcmVuZGVyKFxuICAgICAgPFRhYnM+XG4gICAgICAgIDxkaXYgdGl0bGU9XCJUYWIgMVwiPkNvbnRlbnQgMTwvZGl2PlxuICAgICAgICA8ZGl2IHRpdGxlPVwiVGFiIDJcIj5Db250ZW50IDI8L2Rpdj5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiAzXCI+Q29udGVudCAzPC9kaXY+XG4gICAgICA8L1RhYnM+LFxuICAgICk7XG5cbiAgICBjb25zdCB0YWIyID0gc2NyZWVuLmdldEJ5Um9sZSgndGFiJywgeyBuYW1lOiAnVGFiIDInIH0pO1xuICAgIGF3YWl0IHVzZXIuY2xpY2sodGFiMik7XG5cbiAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlUZXh0KCdDb250ZW50IDEnKSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0NvbnRlbnQgMicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVRleHQoJ0NvbnRlbnQgMycpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc3BsYXlzIGNvcnJlY3QgY29udGVudCB3aGVuIG11bHRpcGxlIHRhYnMgYXJlIGNsaWNrZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgIHJlbmRlcihcbiAgICAgIDxUYWJzPlxuICAgICAgICA8ZGl2IHRpdGxlPVwiVGFiIDFcIj5Db250ZW50IDE8L2Rpdj5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiAyXCI+Q29udGVudCAyPC9kaXY+XG4gICAgICAgIDxkaXYgdGl0bGU9XCJUYWIgM1wiPkNvbnRlbnQgMzwvZGl2PlxuICAgICAgPC9UYWJzPixcbiAgICApO1xuXG4gICAgYXdhaXQgdXNlci5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCd0YWInLCB7IG5hbWU6ICdUYWIgMicgfSkpO1xuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdDb250ZW50IDInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcblxuICAgIGF3YWl0IHVzZXIuY2xpY2soc2NyZWVuLmdldEJ5Um9sZSgndGFiJywgeyBuYW1lOiAnVGFiIDMnIH0pKTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnQ29udGVudCAzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICBhd2FpdCB1c2VyLmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoJ3RhYicsIHsgbmFtZTogJ1RhYiAxJyB9KSk7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0NvbnRlbnQgMScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnYXBwbGllcyBjdXN0b20gY2xhc3NOYW1lIHRvIHJvb3QgZWxlbWVudCcsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgPFRhYnMgY2xhc3NOYW1lPVwiY3VzdG9tLXRhYnMtY2xhc3NcIj5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiAxXCI+Q29udGVudCAxPC9kaXY+XG4gICAgICA8L1RhYnM+LFxuICAgICk7XG5cbiAgICBjb25zdCByb290RGl2ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5jdXN0b20tdGFicy1jbGFzcycpO1xuICAgIGV4cGVjdChyb290RGl2KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuXG4gIGl0KCdoYW5kbGVzIHRhYnMgd2l0aG91dCB0aXRsZSBwcm9wIGdyYWNlZnVsbHknLCAoKSA9PiB7XG4gICAgcmVuZGVyKFxuICAgICAgPFRhYnM+XG4gICAgICAgIDxkaXYgdGl0bGU9XCJUYWIgMVwiPkNvbnRlbnQgMTwvZGl2PlxuICAgICAgICA8ZGl2Pk5vIFRpdGxlIENoaWxkPC9kaXY+XG4gICAgICAgIDxkaXYgdGl0bGU9XCJUYWIgMlwiPkNvbnRlbnQgMjwvZGl2PlxuICAgICAgPC9UYWJzPixcbiAgICApO1xuXG4gICAgY29uc3QgdGFicyA9IHNjcmVlbi5nZXRBbGxCeVJvbGUoJ3RhYicpO1xuICAgIC8vIFNob3VsZCBvbmx5IGhhdmUgMiB0YWJzIHNpbmNlIG9uZSBkb2Vzbid0IGhhdmUgYSB0aXRsZVxuICAgIGV4cGVjdCh0YWJzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1RhYiAxJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1RhYiAyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdoYW5kbGVzIG51bGwgY2hpbGRyZW4gZ3JhY2VmdWxseScsICgpID0+IHtcbiAgICByZW5kZXIoXG4gICAgICA8VGFicz5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiAxXCI+Q29udGVudCAxPC9kaXY+XG4gICAgICAgIHtudWxsfVxuICAgICAgICA8ZGl2IHRpdGxlPVwiVGFiIDJcIj5Db250ZW50IDI8L2Rpdj5cbiAgICAgIDwvVGFicz4sXG4gICAgKTtcblxuICAgIGNvbnN0IHRhYnMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCd0YWInKTtcbiAgICBleHBlY3QodGFicykudG9IYXZlTGVuZ3RoKDIpO1xuICB9KTtcblxuICBpdCgnaGFuZGxlcyBjb21wbGV4IGNvbnRlbnQgaW4gdGFicycsICgpID0+IHtcbiAgICByZW5kZXIoXG4gICAgICA8VGFicz5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiAxXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxoMj5UYWIgMSBIZWFkZXI8L2gyPlxuICAgICAgICAgICAgPHA+VGFiIDEgZGVzY3JpcHRpb248L3A+XG4gICAgICAgICAgICA8YnV0dG9uPkJ1dHRvbiBpbiBUYWIgMTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiAyXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxoMj5UYWIgMiBIZWFkZXI8L2gyPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJJbnB1dCBpbiBUYWIgMlwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9UYWJzPixcbiAgICApO1xuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1RhYiAxIEhlYWRlcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6ICdCdXR0b24gaW4gVGFiIDEnIH0pKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuXG4gICAgY29uc3QgdGFiMiA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RhYicsIHsgbmFtZTogJ1RhYiAyJyB9KTtcbiAgICBleHBlY3QodGFiMikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgYWxsIHRhYnMgaW4gTXVpVGFicyBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgIDxUYWJzPlxuICAgICAgICA8ZGl2IHRpdGxlPVwiVGFiIEFcIj5Db250ZW50IEE8L2Rpdj5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiBCXCI+Q29udGVudCBCPC9kaXY+XG4gICAgICAgIDxkaXYgdGl0bGU9XCJUYWIgQ1wiPkNvbnRlbnQgQzwvZGl2PlxuICAgICAgPC9UYWJzPixcbiAgICApO1xuXG4gICAgY29uc3QgdGFic0NvbXBvbmVudCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbcm9sZT1cInRhYmxpc3RcIl0nKTtcbiAgICBleHBlY3QodGFic0NvbXBvbmVudCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2FwcGxpZXMgY29ycmVjdCB2YWx1ZSBwcm9wIHRvIE11aVRhYnMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgIHJlbmRlcihcbiAgICAgIDxUYWJzPlxuICAgICAgICA8ZGl2IHRpdGxlPVwiVGFiIDFcIj5Db250ZW50IDE8L2Rpdj5cbiAgICAgICAgPGRpdiB0aXRsZT1cIlRhYiAyXCI+Q29udGVudCAyPC9kaXY+XG4gICAgICA8L1RhYnM+LFxuICAgICk7XG5cbiAgICAvLyBJbml0aWFsbHkgZmlyc3QgdGFiIHNob3VsZCBiZSBzZWxlY3RlZCAodmFsdWUgMClcbiAgICBjb25zdCB0YWIxID0gc2NyZWVuLmdldEJ5Um9sZSgndGFiJywgeyBuYW1lOiAnVGFiIDEnIH0pO1xuICAgIGV4cGVjdCh0YWIxKS50b0hhdmVBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuXG4gICAgLy8gQ2xpY2sgc2Vjb25kIHRhYlxuICAgIGF3YWl0IHVzZXIuY2xpY2soc2NyZWVuLmdldEJ5Um9sZSgndGFiJywgeyBuYW1lOiAnVGFiIDInIH0pKTtcbiAgICBjb25zdCB0YWIyID0gc2NyZWVuLmdldEJ5Um9sZSgndGFiJywgeyBuYW1lOiAnVGFiIDInIH0pO1xuICAgIGV4cGVjdCh0YWIyKS50b0hhdmVBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgIGV4cGVjdCh0YWIxKS50b0hhdmVBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgd2l0aCBlbXB0eSBjaGlsZHJlbiBhcnJheScsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxUYWJzPntbXX08L1RhYnM+KTtcbiAgICBleHBlY3QoY29udGFpbmVyKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnaGFuZGxlcyBsb25nIHRhYiB0aXRsZXMnLCAoKSA9PiB7XG4gICAgcmVuZGVyKFxuICAgICAgPFRhYnM+XG4gICAgICAgIDxkaXYgdGl0bGU9XCJUaGlzIGlzIGEgdmVyeSBsb25nIHRhYiB0aXRsZSB0aGF0IHNob3VsZCBzdGlsbCByZW5kZXIgY29ycmVjdGx5XCI+XG4gICAgICAgICAgQ29udGVudCAxXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHRpdGxlPVwiU2hvcnRcIj5Db250ZW50IDI8L2Rpdj5cbiAgICAgIDwvVGFicz4sXG4gICAgKTtcblxuICAgIGV4cGVjdChcbiAgICAgIHNjcmVlbi5nZXRCeVRleHQoJ1RoaXMgaXMgYSB2ZXJ5IGxvbmcgdGFiIHRpdGxlIHRoYXQgc2hvdWxkIHN0aWxsIHJlbmRlciBjb3JyZWN0bHknKSxcbiAgICApLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1Nob3J0JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSCxPQUFBO0FBRUFJLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFNO0VBQy9CQyxFQUFFLENBQUMsa0NBQWtDLEVBQUUsWUFBTTtJQUMzQyxJQUFBQyxjQUFNLGVBQ0pSLE1BQUEsWUFBQVMsYUFBQSxDQUFDSixLQUFBLENBQUFLLElBQUkscUJBQ0hWLE1BQUEsWUFBQVMsYUFBQTtNQUFLRSxLQUFLLEVBQUM7SUFBTyxHQUFDLFdBQWMsQ0FBQyxlQUNsQ1gsTUFBQSxZQUFBUyxhQUFBO01BQUtFLEtBQUssRUFBQztJQUFPLEdBQUMsV0FBYyxDQUFDLGVBQ2xDWCxNQUFBLFlBQUFTLGFBQUE7TUFBS0UsS0FBSyxFQUFDO0lBQU8sR0FBQyxXQUFjLENBQzdCLENBQ1IsQ0FBQztJQUVEQyxNQUFNLENB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
@@ -0,0 +1,124 @@
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 _twoChoice = require("../two-choice");
10
+ describe('NChoice', function () {
11
+ var onChange = jest.fn();
12
+ beforeEach(function () {
13
+ onChange.mockClear();
14
+ });
15
+ it('renders radio buttons with vertical direction', function () {
16
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_twoChoice.NChoice, {
17
+ direction: "vertical",
18
+ header: "n-choice-vertical",
19
+ value: 'left',
20
+ onChange: onChange,
21
+ opts: [{
22
+ label: 'left',
23
+ value: 'left'
24
+ }, {
25
+ label: 'center',
26
+ value: 'center'
27
+ }, {
28
+ label: 'right',
29
+ value: 'right'
30
+ }]
31
+ }));
32
+ expect(_react2.screen.getByText('n-choice-vertical')).toBeInTheDocument();
33
+ expect(_react2.screen.getByLabelText('left')).toBeInTheDocument();
34
+ expect(_react2.screen.getByLabelText('center')).toBeInTheDocument();
35
+ expect(_react2.screen.getByLabelText('right')).toBeInTheDocument();
36
+ });
37
+ it('shows selected value as checked', function () {
38
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_twoChoice.NChoice, {
39
+ direction: "vertical",
40
+ header: "Options",
41
+ value: 'center',
42
+ onChange: onChange,
43
+ opts: [{
44
+ label: 'left',
45
+ value: 'left'
46
+ }, {
47
+ label: 'center',
48
+ value: 'center'
49
+ }, {
50
+ label: 'right',
51
+ value: 'right'
52
+ }]
53
+ }));
54
+ var centerRadio = _react2.screen.getByLabelText('center');
55
+ expect(centerRadio).toBeChecked();
56
+ expect(_react2.screen.getByLabelText('left')).not.toBeChecked();
57
+ expect(_react2.screen.getByLabelText('right')).not.toBeChecked();
58
+ });
59
+ it('calls onChange when user selects a different option', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
60
+ var user;
61
+ return _regenerator["default"].wrap(function (_context) {
62
+ while (1) switch (_context.prev = _context.next) {
63
+ case 0:
64
+ user = _userEvent["default"].setup();
65
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_twoChoice.NChoice, {
66
+ direction: "vertical",
67
+ header: "Options",
68
+ value: 'left',
69
+ onChange: onChange,
70
+ opts: [{
71
+ label: 'left',
72
+ value: 'left'
73
+ }, {
74
+ label: 'center',
75
+ value: 'center'
76
+ }, {
77
+ label: 'right',
78
+ value: 'right'
79
+ }]
80
+ }));
81
+ _context.next = 1;
82
+ return user.click(_react2.screen.getByLabelText('center'));
83
+ case 1:
84
+ expect(onChange).toHaveBeenCalledWith('center');
85
+ case 2:
86
+ case "end":
87
+ return _context.stop();
88
+ }
89
+ }, _callee);
90
+ })));
91
+ it('renders with horizontal direction', function () {
92
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_twoChoice.NChoice, {
93
+ direction: "horizontal",
94
+ header: "Options",
95
+ value: 'left',
96
+ onChange: onChange,
97
+ opts: [{
98
+ label: 'left',
99
+ value: 'left'
100
+ }, {
101
+ label: 'right',
102
+ value: 'right'
103
+ }]
104
+ })),
105
+ container = _render.container;
106
+
107
+ // Check that all options are rendered
108
+ expect(_react2.screen.getByLabelText('left')).toBeInTheDocument();
109
+ expect(_react2.screen.getByLabelText('right')).toBeInTheDocument();
110
+ });
111
+ it('handles string options by converting them', function () {
112
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_twoChoice.NChoice, {
113
+ direction: "vertical",
114
+ header: "Options",
115
+ value: 'option1',
116
+ onChange: onChange,
117
+ opts: ['option1', 'option2', 'option3']
118
+ }));
119
+ expect(_react2.screen.getByLabelText('option1')).toBeInTheDocument();
120
+ expect(_react2.screen.getByLabelText('option2')).toBeInTheDocument();
121
+ expect(_react2.screen.getByLabelText('option3')).toBeInTheDocument();
122
+ });
123
+ });
124
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX3R3b0Nob2ljZSIsImRlc2NyaWJlIiwib25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJiZWZvcmVFYWNoIiwibW9ja0NsZWFyIiwiaXQiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiTkNob2ljZSIsImRpcmVjdGlvbiIsImhlYWRlciIsInZhbHVlIiwib3B0cyIsImxhYmVsIiwiZXhwZWN0Iiwic2NyZWVuIiwiZ2V0QnlUZXh0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJnZXRCeUxhYmVsVGV4dCIsImNlbnRlclJhZGlvIiwidG9CZUNoZWNrZWQiLCJub3QiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInVzZXIiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInVzZXJFdmVudCIsInNldHVwIiwiY2xpY2siLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInN0b3AiLCJfcmVuZGVyIiwiY29udGFpbmVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy90d28tY2hvaWNlLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgdXNlckV2ZW50IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCc7XG5pbXBvcnQgeyBOQ2hvaWNlIH0gZnJvbSAnLi4vdHdvLWNob2ljZSc7XG5cbmRlc2NyaWJlKCdOQ2hvaWNlJywgKCkgPT4ge1xuICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNoYW5nZS5tb2NrQ2xlYXIoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgcmFkaW8gYnV0dG9ucyB3aXRoIHZlcnRpY2FsIGRpcmVjdGlvbicsICgpID0+IHtcbiAgICByZW5kZXIoXG4gICAgICA8TkNob2ljZVxuICAgICAgICBkaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiXG4gICAgICAgIGhlYWRlcj1cIm4tY2hvaWNlLXZlcnRpY2FsXCJcbiAgICAgICAgdmFsdWU9eydsZWZ0J31cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvcHRzPXtbXG4gICAgICAgICAgeyBsYWJlbDogJ2xlZnQnLCB2YWx1ZTogJ2xlZnQnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ2NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdyaWdodCcsIHZhbHVlOiAncmlnaHQnIH0sXG4gICAgICAgIF19XG4gICAgICAvPixcbiAgICApO1xuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ24tY2hvaWNlLXZlcnRpY2FsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnbGVmdCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ2NlbnRlcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ3JpZ2h0JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG93cyBzZWxlY3RlZCB2YWx1ZSBhcyBjaGVja2VkJywgKCkgPT4ge1xuICAgIHJlbmRlcihcbiAgICAgIDxOQ2hvaWNlXG4gICAgICAgIGRpcmVjdGlvbj1cInZlcnRpY2FsXCJcbiAgICAgICAgaGVhZGVyPVwiT3B0aW9uc1wiXG4gICAgICAgIHZhbHVlPXsnY2VudGVyJ31cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvcHRzPXtbXG4gICAgICAgICAgeyBsYWJlbDogJ2xlZnQnLCB2YWx1ZTogJ2xlZnQnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ2NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdyaWdodCcsIHZhbHVlOiAncmlnaHQnIH0sXG4gICAgICAgIF19XG4gICAgICAvPixcbiAgICApO1xuXG4gICAgY29uc3QgY2VudGVyUmFkaW8gPSBzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ2NlbnRlcicpO1xuICAgIGV4cGVjdChjZW50ZXJSYWRpbykudG9CZUNoZWNrZWQoKTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdsZWZ0JykpLm5vdC50b0JlQ2hlY2tlZCgpO1xuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ3JpZ2h0JykpLm5vdC50b0JlQ2hlY2tlZCgpO1xuICB9KTtcblxuICBpdCgnY2FsbHMgb25DaGFuZ2Ugd2hlbiB1c2VyIHNlbGVjdHMgYSBkaWZmZXJlbnQgb3B0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICByZW5kZXIoXG4gICAgICA8TkNob2ljZVxuICAgICAgICBkaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiXG4gICAgICAgIGhlYWRlcj1cIk9wdGlvbnNcIlxuICAgICAgICB2YWx1ZT17J2xlZnQnfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9wdHM9e1tcbiAgICAgICAgICB7IGxhYmVsOiAnbGVmdCcsIHZhbHVlOiAnbGVmdCcgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnY2VudGVyJywgdmFsdWU6ICdjZW50ZXInIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ3JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfSxcbiAgICAgICAgXX1cbiAgICAgIC8+LFxuICAgICk7XG5cbiAgICBhd2FpdCB1c2VyLmNsaWNrKHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnY2VudGVyJykpO1xuXG4gICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnY2VudGVyJyk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIHdpdGggaG9yaXpvbnRhbCBkaXJlY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgIDxOQ2hvaWNlXG4gICAgICAgIGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICBoZWFkZXI9XCJPcHRpb25zXCJcbiAgICAgICAgdmFsdWU9eydsZWZ0J31cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvcHRzPXtbXG4gICAgICAgICAgeyBsYWJlbDogJ2xlZnQnLCB2YWx1ZTogJ2xlZnQnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ3JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfSxcbiAgICAgICAgXX1cbiAgICAgIC8+LFxuICAgICk7XG5cbiAgICAvLyBDaGVjayB0aGF0IGFsbCBvcHRpb25zIGFyZSByZW5kZXJlZFxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ2xlZnQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdyaWdodCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnaGFuZGxlcyBzdHJpbmcgb3B0aW9ucyBieSBjb252ZXJ0aW5nIHRoZW0nLCAoKSA9PiB7XG4gICAgcmVuZGVyKFxuICAgICAgPE5DaG9pY2VcbiAgICAgICAgZGlyZWN0aW9uPVwidmVydGljYWxcIlxuICAgICAgICBoZWFkZXI9XCJPcHRpb25zXCJcbiAgICAgICAgdmFsdWU9eydvcHRpb24xJ31cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvcHRzPXtbJ29wdGlvbjEnLCAnb3B0aW9uMicsICdvcHRpb24zJ119XG4gICAgICAvPixcbiAgICApO1xuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnb3B0aW9uMScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ29wdGlvbjInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdvcHRpb24zJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBRUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsWUFBTTtFQUN4QixJQUFNQyxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7RUFFMUJDLFVBQVUsQ0FBQyxZQUFNO0lBQ2ZILFFBQVEsQ0FBQ0ksU0FBUyxDQUFDLENBQUM7RUFDdEIsQ0FBQyxDQUFDO0VBRUZDLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxZQUFNO0lBQ3hELElBQUFDLGNBQU0sZUFDSmIsTUFBQSxZQUFBYyxhQUFBLENBQUNULFVBQUEsQ0FBQVUsT0FBTztNQUNOQyxTQUFTLEVBQUMsVUFBVTtNQUNwQkMsTUFBTSxFQUFDLG1CQUFtQjtNQUMxQkMsS0FBSyxFQUFFLE1BQU87TUFDZFgsUUFBUSxFQUFFQSxRQUFTO01BQ25CWSxJQUFJLEVBQUUsQ0FDSjtRQUFFQyxLQUFLLEVBQUUsTUFBTTtRQUFFRixLQUFLLEVBQUU7TUFBTyxDQUFDLEVBQ2hDO1FBQUVFLEtBQUssRUFBRSxRQUFRO1FBQUVGLEtBQUssRUFBRTtNQUFTLENBQUMsRUFDcEM7UUFBRUUsS0FBSyxFQUFFLE9BQU87UUFBRUYsS0FBSyxFQUFFO01BQVEsQ0FBQztJQUNsQyxDQUNILENBQ0gsQ0FBQztJQUVERyxNQUFNLENBQUNDLGNBQU0sQ0FBQ0MsU0FB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