@pie-lib/config-ui 13.0.13 → 13.1.0-beta
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.
- package/CHANGELOG.md +0 -42
- package/lib/__tests__/alert-dialog.test.js +262 -0
- package/lib/__tests__/alert-dialog.test.js.map +1 -0
- package/lib/__tests__/checkbox.test.js +227 -0
- package/lib/__tests__/checkbox.test.js.map +1 -0
- package/lib/__tests__/choice-utils.test.js +14 -0
- package/lib/__tests__/choice-utils.test.js.map +1 -0
- package/lib/__tests__/form-section.test.js +252 -0
- package/lib/__tests__/form-section.test.js.map +1 -0
- package/lib/__tests__/help.test.js +270 -0
- package/lib/__tests__/help.test.js.map +1 -0
- package/lib/__tests__/input.test.js +268 -0
- package/lib/__tests__/input.test.js.map +1 -0
- package/lib/__tests__/langs.test.js +541 -0
- package/lib/__tests__/langs.test.js.map +1 -0
- package/lib/__tests__/number-text-field-custom.test.js +362 -0
- package/lib/__tests__/number-text-field-custom.test.js.map +1 -0
- package/lib/__tests__/number-text-field.test.js +421 -0
- package/lib/__tests__/number-text-field.test.js.map +1 -0
- package/lib/__tests__/radio-with-label.test.js +233 -0
- package/lib/__tests__/radio-with-label.test.js.map +1 -0
- package/lib/__tests__/settings-panel.test.js +184 -0
- package/lib/__tests__/settings-panel.test.js.map +1 -0
- package/lib/__tests__/settings.test.js +653 -0
- package/lib/__tests__/settings.test.js.map +1 -0
- package/lib/__tests__/tabs.test.js +211 -0
- package/lib/__tests__/tabs.test.js.map +1 -0
- package/lib/__tests__/two-choice.test.js +124 -0
- package/lib/__tests__/two-choice.test.js.map +1 -0
- package/lib/__tests__/with-stateful-model.test.js +221 -0
- package/lib/__tests__/with-stateful-model.test.js.map +1 -0
- package/lib/choice-configuration/__tests__/feedback-menu.test.js +287 -0
- package/lib/choice-configuration/__tests__/feedback-menu.test.js.map +1 -0
- package/lib/choice-configuration/__tests__/index.test.js +253 -0
- package/lib/choice-configuration/__tests__/index.test.js.map +1 -0
- package/lib/feedback-config/__tests__/feedback-config.test.js +201 -0
- package/lib/feedback-config/__tests__/feedback-config.test.js.map +1 -0
- package/lib/feedback-config/__tests__/feedback-selector.test.js +177 -0
- package/lib/feedback-config/__tests__/feedback-selector.test.js.map +1 -0
- package/lib/layout/__tests__/config.layout.test.js +70 -0
- package/lib/layout/__tests__/config.layout.test.js.map +1 -0
- package/lib/layout/__tests__/layout-content.test.js +6 -0
- package/lib/layout/__tests__/layout-content.test.js.map +1 -0
- package/lib/tags-input/__tests__/index.test.js +183 -0
- package/lib/tags-input/__tests__/index.test.js.map +1 -0
- package/package.json +5 -5
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _react2 = require("@testing-library/react");
|
|
9
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
10
|
+
var _index = require("../index");
|
|
11
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
13
|
+
jest.mock('@pie-lib/editable-html-tip-tap', function () {
|
|
14
|
+
return {
|
|
15
|
+
__esModule: true,
|
|
16
|
+
"default": function _default(_ref) {
|
|
17
|
+
var markup = _ref.markup,
|
|
18
|
+
_onChange = _ref.onChange,
|
|
19
|
+
disabled = _ref.disabled;
|
|
20
|
+
return /*#__PURE__*/_react["default"].createElement("textarea", {
|
|
21
|
+
"data-testid": "editable-html",
|
|
22
|
+
defaultValue: markup || '',
|
|
23
|
+
onChange: function onChange(e) {
|
|
24
|
+
return _onChange(e.target.value);
|
|
25
|
+
},
|
|
26
|
+
disabled: disabled
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
var defaultFeedback = {
|
|
32
|
+
correct: 'Correct',
|
|
33
|
+
incorrect: 'Incorrect'
|
|
34
|
+
};
|
|
35
|
+
var data = {
|
|
36
|
+
correct: true,
|
|
37
|
+
value: 'foo',
|
|
38
|
+
label: 'Foo',
|
|
39
|
+
feedback: {
|
|
40
|
+
type: 'custom'
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
var classes = {
|
|
44
|
+
choiceConfiguration: 'choiceConfiguration'
|
|
45
|
+
};
|
|
46
|
+
describe('ChoiceConfiguration', function () {
|
|
47
|
+
var onChange = jest.fn();
|
|
48
|
+
beforeEach(function () {
|
|
49
|
+
onChange.mockClear();
|
|
50
|
+
});
|
|
51
|
+
describe('rendering', function () {
|
|
52
|
+
it('renders correctly with default props', function () {
|
|
53
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
54
|
+
classes: classes,
|
|
55
|
+
defaultFeedback: defaultFeedback,
|
|
56
|
+
data: data,
|
|
57
|
+
onChange: onChange
|
|
58
|
+
})),
|
|
59
|
+
container = _render.container;
|
|
60
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
61
|
+
});
|
|
62
|
+
it('renders with checked state', function () {
|
|
63
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
64
|
+
classes: classes,
|
|
65
|
+
defaultFeedback: defaultFeedback,
|
|
66
|
+
data: data,
|
|
67
|
+
onChange: onChange,
|
|
68
|
+
mode: "checkbox"
|
|
69
|
+
}));
|
|
70
|
+
var checkbox = _react2.screen.getByRole('checkbox');
|
|
71
|
+
expect(checkbox).toBeChecked();
|
|
72
|
+
});
|
|
73
|
+
it('renders without feedback when allowFeedBack is false', function () {
|
|
74
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
75
|
+
allowFeedBack: false,
|
|
76
|
+
classes: classes,
|
|
77
|
+
defaultFeedback: defaultFeedback,
|
|
78
|
+
data: data,
|
|
79
|
+
onChange: onChange
|
|
80
|
+
}));
|
|
81
|
+
expect(_react2.screen.queryByRole('button', {
|
|
82
|
+
name: /feedback/i
|
|
83
|
+
})).not.toBeInTheDocument();
|
|
84
|
+
});
|
|
85
|
+
it('renders without delete button when allowDelete is false', function () {
|
|
86
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
87
|
+
allowDelete: false,
|
|
88
|
+
classes: classes,
|
|
89
|
+
defaultFeedback: defaultFeedback,
|
|
90
|
+
data: data,
|
|
91
|
+
onChange: onChange
|
|
92
|
+
}));
|
|
93
|
+
expect(_react2.screen.queryByRole('button', {
|
|
94
|
+
name: /delete/i
|
|
95
|
+
})).not.toBeInTheDocument();
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('user interactions', function () {
|
|
99
|
+
it('calls onChange when label is edited', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
100
|
+
var user, editableHtmlElements, editableHtml;
|
|
101
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
102
|
+
while (1) switch (_context.prev = _context.next) {
|
|
103
|
+
case 0:
|
|
104
|
+
user = _userEvent["default"].setup();
|
|
105
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
106
|
+
classes: classes,
|
|
107
|
+
defaultFeedback: defaultFeedback,
|
|
108
|
+
data: data,
|
|
109
|
+
onChange: onChange
|
|
110
|
+
}));
|
|
111
|
+
editableHtmlElements = _react2.screen.getAllByTestId('editable-html');
|
|
112
|
+
editableHtml = editableHtmlElements[0];
|
|
113
|
+
_context.next = 1;
|
|
114
|
+
return user.clear(editableHtml);
|
|
115
|
+
case 1:
|
|
116
|
+
_context.next = 2;
|
|
117
|
+
return user.type(editableHtml, 'new label');
|
|
118
|
+
case 2:
|
|
119
|
+
expect(onChange).toHaveBeenCalled();
|
|
120
|
+
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
121
|
+
label: expect.stringContaining('new label')
|
|
122
|
+
}));
|
|
123
|
+
case 3:
|
|
124
|
+
case "end":
|
|
125
|
+
return _context.stop();
|
|
126
|
+
}
|
|
127
|
+
}, _callee);
|
|
128
|
+
})));
|
|
129
|
+
it('calls onChange when checkbox is toggled', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
130
|
+
var user, checkbox;
|
|
131
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
132
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
133
|
+
case 0:
|
|
134
|
+
user = _userEvent["default"].setup();
|
|
135
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
136
|
+
classes: classes,
|
|
137
|
+
defaultFeedback: defaultFeedback,
|
|
138
|
+
data: _objectSpread(_objectSpread({}, data), {}, {
|
|
139
|
+
correct: false
|
|
140
|
+
}),
|
|
141
|
+
onChange: onChange,
|
|
142
|
+
mode: "checkbox"
|
|
143
|
+
}));
|
|
144
|
+
checkbox = _react2.screen.getByRole('checkbox');
|
|
145
|
+
_context2.next = 1;
|
|
146
|
+
return user.click(checkbox);
|
|
147
|
+
case 1:
|
|
148
|
+
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
149
|
+
correct: true
|
|
150
|
+
}));
|
|
151
|
+
case 2:
|
|
152
|
+
case "end":
|
|
153
|
+
return _context2.stop();
|
|
154
|
+
}
|
|
155
|
+
}, _callee2);
|
|
156
|
+
})));
|
|
157
|
+
});
|
|
158
|
+
describe('prop variations', function () {
|
|
159
|
+
it('renders with radio mode instead of checkbox', function () {
|
|
160
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
161
|
+
classes: classes,
|
|
162
|
+
defaultFeedback: defaultFeedback,
|
|
163
|
+
data: data,
|
|
164
|
+
onChange: onChange,
|
|
165
|
+
mode: "radio"
|
|
166
|
+
}));
|
|
167
|
+
var radio = _react2.screen.getByRole('radio');
|
|
168
|
+
expect(radio).toBeInTheDocument();
|
|
169
|
+
});
|
|
170
|
+
it('renders with disabled state', function () {
|
|
171
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
172
|
+
classes: classes,
|
|
173
|
+
defaultFeedback: defaultFeedback,
|
|
174
|
+
data: data,
|
|
175
|
+
onChange: onChange,
|
|
176
|
+
disabled: true,
|
|
177
|
+
mode: "checkbox"
|
|
178
|
+
}));
|
|
179
|
+
var checkbox = _react2.screen.getByRole('checkbox');
|
|
180
|
+
expect(checkbox).toBeInTheDocument();
|
|
181
|
+
});
|
|
182
|
+
it('renders with custom feedback type', function () {
|
|
183
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
184
|
+
classes: classes,
|
|
185
|
+
defaultFeedback: defaultFeedback,
|
|
186
|
+
data: _objectSpread(_objectSpread({}, data), {}, {
|
|
187
|
+
feedback: {
|
|
188
|
+
type: 'custom'
|
|
189
|
+
}
|
|
190
|
+
}),
|
|
191
|
+
onChange: onChange,
|
|
192
|
+
mode: "checkbox"
|
|
193
|
+
}));
|
|
194
|
+
var editableElements = _react2.screen.getAllByTestId('editable-html');
|
|
195
|
+
expect(editableElements.length).toBeGreaterThan(0);
|
|
196
|
+
});
|
|
197
|
+
it('renders with incorrect answer', function () {
|
|
198
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
199
|
+
classes: classes,
|
|
200
|
+
defaultFeedback: defaultFeedback,
|
|
201
|
+
data: _objectSpread(_objectSpread({}, data), {}, {
|
|
202
|
+
correct: false
|
|
203
|
+
}),
|
|
204
|
+
onChange: onChange,
|
|
205
|
+
mode: "checkbox"
|
|
206
|
+
}));
|
|
207
|
+
var checkbox = _react2.screen.getByRole('checkbox');
|
|
208
|
+
expect(checkbox).not.toBeChecked();
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
describe('edge cases', function () {
|
|
212
|
+
it('handles data with empty label', function () {
|
|
213
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
214
|
+
classes: classes,
|
|
215
|
+
defaultFeedback: defaultFeedback,
|
|
216
|
+
data: _objectSpread(_objectSpread({}, data), {}, {
|
|
217
|
+
label: ''
|
|
218
|
+
}),
|
|
219
|
+
onChange: onChange
|
|
220
|
+
}));
|
|
221
|
+
var editableElements = _react2.screen.getAllByTestId('editable-html');
|
|
222
|
+
expect(editableElements.length).toBeGreaterThan(0);
|
|
223
|
+
});
|
|
224
|
+
it('handles multiple feedback types', function () {
|
|
225
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
226
|
+
classes: classes,
|
|
227
|
+
defaultFeedback: defaultFeedback,
|
|
228
|
+
data: _objectSpread(_objectSpread({}, data), {}, {
|
|
229
|
+
feedback: {
|
|
230
|
+
type: 'default'
|
|
231
|
+
}
|
|
232
|
+
}),
|
|
233
|
+
onChange: onChange
|
|
234
|
+
})),
|
|
235
|
+
rerender = _render2.rerender;
|
|
236
|
+
var editableElements = _react2.screen.getAllByTestId('editable-html');
|
|
237
|
+
expect(editableElements.length).toBeGreaterThan(0);
|
|
238
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
|
|
239
|
+
classes: classes,
|
|
240
|
+
defaultFeedback: defaultFeedback,
|
|
241
|
+
data: _objectSpread(_objectSpread({}, data), {}, {
|
|
242
|
+
feedback: {
|
|
243
|
+
type: 'custom'
|
|
244
|
+
}
|
|
245
|
+
}),
|
|
246
|
+
onChange: onChange
|
|
247
|
+
}));
|
|
248
|
+
editableElements = _react2.screen.getAllByTestId('editable-html');
|
|
249
|
+
expect(editableElements.length).toBeGreaterThan(0);
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","names":["_react","_interopRequireDefault","require","_react2","_userEvent","_index","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","__esModule","default","_ref","markup","onChange","disabled","createElement","defaultValue","target","value","defaultFeedback","correct","incorrect","data","label","feedback","type","classes","choiceConfiguration","describe","fn","beforeEach","mockClear","it","_render","render","ChoiceConfiguration","container","expect","firstChild","toBeInTheDocument","mode","checkbox","screen","getByRole","toBeChecked","allowFeedBack","queryByRole","name","not","allowDelete","_asyncToGenerator2","_regenerator","mark","_callee","user","editableHtmlElements","editableHtml","wrap","_context","prev","next","userEvent","setup","getAllByTestId","clear","toHaveBeenCalled","toHaveBeenCalledWith","objectContaining","stringContaining","stop","_callee2","_context2","click","radio","editableElements","toBeGreaterThan","_render2","rerender"],"sources":["../../../src/choice-configuration/__tests__/index.test.jsx"],"sourcesContent":["import React from 'react';\nimport { render, screen } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\nimport { ChoiceConfiguration } from '../index';\n\njest.mock('@pie-lib/editable-html-tip-tap', () => ({\n __esModule: true,\n default: ({ markup, onChange, disabled }) => (\n <textarea\n data-testid=\"editable-html\"\n defaultValue={markup || ''}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n />\n ),\n}));\n\nconst defaultFeedback = {\n correct: 'Correct',\n incorrect: 'Incorrect',\n};\n\nconst data = {\n correct: true,\n value: 'foo',\n label: 'Foo',\n feedback: {\n type: 'custom',\n },\n};\n\nconst classes = {\n choiceConfiguration: 'choiceConfiguration',\n};\n\ndescribe('ChoiceConfiguration', () => {\n const onChange = jest.fn();\n\n beforeEach(() => {\n onChange.mockClear();\n });\n\n describe('rendering', () => {\n it('renders correctly with default props', () => {\n const { container } = render(\n <ChoiceConfiguration classes={classes} defaultFeedback={defaultFeedback} data={data} onChange={onChange} />,\n );\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders with checked state', () => {\n render(\n <ChoiceConfiguration\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={data}\n onChange={onChange}\n mode=\"checkbox\"\n />,\n );\n const checkbox = screen.getByRole('checkbox');\n expect(checkbox).toBeChecked();\n });\n\n it('renders without feedback when allowFeedBack is false', () => {\n render(\n <ChoiceConfiguration\n allowFeedBack={false}\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={data}\n onChange={onChange}\n />,\n );\n expect(screen.queryByRole('button', { name: /feedback/i })).not.toBeInTheDocument();\n });\n\n it('renders without delete button when allowDelete is false', () => {\n render(\n <ChoiceConfiguration\n allowDelete={false}\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={data}\n onChange={onChange}\n />,\n );\n expect(screen.queryByRole('button', { name: /delete/i })).not.toBeInTheDocument();\n });\n });\n\n describe('user interactions', () => {\n it('calls onChange when label is edited', async () => {\n const user = userEvent.setup();\n render(\n <ChoiceConfiguration classes={classes} defaultFeedback={defaultFeedback} data={data} onChange={onChange} />,\n );\n\n const editableHtmlElements = screen.getAllByTestId('editable-html');\n const editableHtml = editableHtmlElements[0];\n await user.clear(editableHtml);\n await user.type(editableHtml, 'new label');\n\n expect(onChange).toHaveBeenCalled();\n expect(onChange).toHaveBeenCalledWith(\n expect.objectContaining({\n label: expect.stringContaining('new label'),\n }),\n );\n });\n\n it('calls onChange when checkbox is toggled', async () => {\n const user = userEvent.setup();\n render(\n <ChoiceConfiguration\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={{ ...data, correct: false }}\n onChange={onChange}\n mode=\"checkbox\"\n />,\n );\n\n const checkbox = screen.getByRole('checkbox');\n await user.click(checkbox);\n\n expect(onChange).toHaveBeenCalledWith(\n expect.objectContaining({\n correct: true,\n }),\n );\n });\n });\n\n describe('prop variations', () => {\n it('renders with radio mode instead of checkbox', () => {\n render(\n <ChoiceConfiguration\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={data}\n onChange={onChange}\n mode=\"radio\"\n />,\n );\n const radio = screen.getByRole('radio');\n expect(radio).toBeInTheDocument();\n });\n\n it('renders with disabled state', () => {\n render(\n <ChoiceConfiguration\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={data}\n onChange={onChange}\n disabled={true}\n mode=\"checkbox\"\n />,\n );\n const checkbox = screen.getByRole('checkbox');\n expect(checkbox).toBeInTheDocument();\n });\n\n it('renders with custom feedback type', () => {\n render(\n <ChoiceConfiguration\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={{ ...data, feedback: { type: 'custom' } }}\n onChange={onChange}\n mode=\"checkbox\"\n />,\n );\n const editableElements = screen.getAllByTestId('editable-html');\n expect(editableElements.length).toBeGreaterThan(0);\n });\n\n it('renders with incorrect answer', () => {\n render(\n <ChoiceConfiguration\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={{ ...data, correct: false }}\n onChange={onChange}\n mode=\"checkbox\"\n />,\n );\n const checkbox = screen.getByRole('checkbox');\n expect(checkbox).not.toBeChecked();\n });\n });\n\n describe('edge cases', () => {\n it('handles data with empty label', () => {\n render(\n <ChoiceConfiguration\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={{ ...data, label: '' }}\n onChange={onChange}\n />,\n );\n const editableElements = screen.getAllByTestId('editable-html');\n expect(editableElements.length).toBeGreaterThan(0);\n });\n\n it('handles multiple feedback types', () => {\n const { rerender } = render(\n <ChoiceConfiguration\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={{ ...data, feedback: { type: 'default' } }}\n onChange={onChange}\n />,\n );\n\n let editableElements = screen.getAllByTestId('editable-html');\n expect(editableElements.length).toBeGreaterThan(0);\n\n rerender(\n <ChoiceConfiguration\n classes={classes}\n defaultFeedback={defaultFeedback}\n data={{ ...data, feedback: { type: 'custom' } }}\n onChange={onChange}\n />,\n );\n\n editableElements = screen.getAllByTestId('editable-html');\n expect(editableElements.length).toBeGreaterThan(0);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,201 @@
|
|
|
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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _react2 = require("@testing-library/react");
|
|
9
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
10
|
+
var _index = require("../index");
|
|
11
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
13
|
+
// Mock FeedbackSelector to simplify testing
|
|
14
|
+
jest.mock('../feedback-selector', function () {
|
|
15
|
+
return function FeedbackSelector(_ref) {
|
|
16
|
+
var label = _ref.label,
|
|
17
|
+
feedback = _ref.feedback,
|
|
18
|
+
_onChange = _ref.onChange;
|
|
19
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
20
|
+
"data-testid": "feedback-selector"
|
|
21
|
+
}, /*#__PURE__*/_react["default"].createElement("label", null, label), /*#__PURE__*/_react["default"].createElement("select", {
|
|
22
|
+
"aria-label": label,
|
|
23
|
+
value: feedback.type,
|
|
24
|
+
onChange: function onChange(e) {
|
|
25
|
+
return _onChange(_objectSpread(_objectSpread({}, feedback), {}, {
|
|
26
|
+
type: e.target.value
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
}, /*#__PURE__*/_react["default"].createElement("option", {
|
|
30
|
+
value: "default"
|
|
31
|
+
}, "Default"), /*#__PURE__*/_react["default"].createElement("option", {
|
|
32
|
+
value: "custom"
|
|
33
|
+
}, "Custom"), /*#__PURE__*/_react["default"].createElement("option", {
|
|
34
|
+
value: "none"
|
|
35
|
+
}, "None")));
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
describe('FeedbackConfig', function () {
|
|
39
|
+
var onChange = jest.fn();
|
|
40
|
+
beforeEach(function () {
|
|
41
|
+
onChange.mockClear();
|
|
42
|
+
});
|
|
43
|
+
describe('rendering', function () {
|
|
44
|
+
it('renders with default feedback types', function () {
|
|
45
|
+
var feedback = (0, _index.buildDefaults)();
|
|
46
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
|
|
47
|
+
feedback: feedback,
|
|
48
|
+
onChange: onChange
|
|
49
|
+
}));
|
|
50
|
+
expect(_react2.screen.getByText('Feedback')).toBeInTheDocument();
|
|
51
|
+
expect(_react2.screen.getByText('If correct, show')).toBeInTheDocument();
|
|
52
|
+
expect(_react2.screen.getByText('If partially correct, show')).toBeInTheDocument();
|
|
53
|
+
expect(_react2.screen.getByText('If incorrect, show')).toBeInTheDocument();
|
|
54
|
+
});
|
|
55
|
+
it('renders all three feedback selectors by default', function () {
|
|
56
|
+
var feedback = (0, _index.buildDefaults)();
|
|
57
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
|
|
58
|
+
feedback: feedback,
|
|
59
|
+
onChange: onChange
|
|
60
|
+
}));
|
|
61
|
+
var selectors = _react2.screen.getAllByTestId('feedback-selector');
|
|
62
|
+
expect(selectors).toHaveLength(3);
|
|
63
|
+
});
|
|
64
|
+
it('does not render partial feedback selector when allowPartial is false', function () {
|
|
65
|
+
var feedback = (0, _index.buildDefaults)();
|
|
66
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
|
|
67
|
+
allowPartial: false,
|
|
68
|
+
feedback: feedback,
|
|
69
|
+
onChange: onChange
|
|
70
|
+
}));
|
|
71
|
+
expect(_react2.screen.getByText('If correct, show')).toBeInTheDocument();
|
|
72
|
+
expect(_react2.screen.queryByText('If partially correct, show')).not.toBeInTheDocument();
|
|
73
|
+
expect(_react2.screen.getByText('If incorrect, show')).toBeInTheDocument();
|
|
74
|
+
var selectors = _react2.screen.getAllByTestId('feedback-selector');
|
|
75
|
+
expect(selectors).toHaveLength(2);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('user interactions', function () {
|
|
79
|
+
it('calls onChange when correct feedback type changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
80
|
+
var user, feedback, correctSelect;
|
|
81
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
82
|
+
while (1) switch (_context.prev = _context.next) {
|
|
83
|
+
case 0:
|
|
84
|
+
user = _userEvent["default"].setup();
|
|
85
|
+
feedback = (0, _index.buildDefaults)();
|
|
86
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
|
|
87
|
+
feedback: feedback,
|
|
88
|
+
onChange: onChange
|
|
89
|
+
}));
|
|
90
|
+
correctSelect = _react2.screen.getByLabelText('If correct, show');
|
|
91
|
+
_context.next = 1;
|
|
92
|
+
return user.selectOptions(correctSelect, 'custom');
|
|
93
|
+
case 1:
|
|
94
|
+
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
95
|
+
correct: expect.objectContaining({
|
|
96
|
+
type: 'custom'
|
|
97
|
+
})
|
|
98
|
+
}));
|
|
99
|
+
case 2:
|
|
100
|
+
case "end":
|
|
101
|
+
return _context.stop();
|
|
102
|
+
}
|
|
103
|
+
}, _callee);
|
|
104
|
+
})));
|
|
105
|
+
it('calls onChange when incorrect feedback type changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
106
|
+
var user, feedback, incorrectSelect;
|
|
107
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
108
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
109
|
+
case 0:
|
|
110
|
+
user = _userEvent["default"].setup();
|
|
111
|
+
feedback = (0, _index.buildDefaults)();
|
|
112
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
|
|
113
|
+
feedback: feedback,
|
|
114
|
+
onChange: onChange
|
|
115
|
+
}));
|
|
116
|
+
incorrectSelect = _react2.screen.getByLabelText('If incorrect, show');
|
|
117
|
+
_context2.next = 1;
|
|
118
|
+
return user.selectOptions(incorrectSelect, 'none');
|
|
119
|
+
case 1:
|
|
120
|
+
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
121
|
+
incorrect: expect.objectContaining({
|
|
122
|
+
type: 'none'
|
|
123
|
+
})
|
|
124
|
+
}));
|
|
125
|
+
case 2:
|
|
126
|
+
case "end":
|
|
127
|
+
return _context2.stop();
|
|
128
|
+
}
|
|
129
|
+
}, _callee2);
|
|
130
|
+
})));
|
|
131
|
+
it('calls onChange when partial feedback type changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
132
|
+
var user, feedback, partialSelect;
|
|
133
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
134
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
135
|
+
case 0:
|
|
136
|
+
user = _userEvent["default"].setup();
|
|
137
|
+
feedback = (0, _index.buildDefaults)();
|
|
138
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
|
|
139
|
+
feedback: feedback,
|
|
140
|
+
onChange: onChange
|
|
141
|
+
}));
|
|
142
|
+
partialSelect = _react2.screen.getByLabelText('If partially correct, show');
|
|
143
|
+
_context3.next = 1;
|
|
144
|
+
return user.selectOptions(partialSelect, 'custom');
|
|
145
|
+
case 1:
|
|
146
|
+
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
147
|
+
partial: expect.objectContaining({
|
|
148
|
+
type: 'custom'
|
|
149
|
+
})
|
|
150
|
+
}));
|
|
151
|
+
case 2:
|
|
152
|
+
case "end":
|
|
153
|
+
return _context3.stop();
|
|
154
|
+
}
|
|
155
|
+
}, _callee3);
|
|
156
|
+
})));
|
|
157
|
+
});
|
|
158
|
+
describe('buildDefaults helper', function () {
|
|
159
|
+
it('returns default feedback configuration', function () {
|
|
160
|
+
var defaults = (0, _index.buildDefaults)();
|
|
161
|
+
expect(defaults).toEqual({
|
|
162
|
+
correct: {
|
|
163
|
+
type: 'default',
|
|
164
|
+
"default": 'Correct'
|
|
165
|
+
},
|
|
166
|
+
incorrect: {
|
|
167
|
+
type: 'default',
|
|
168
|
+
"default": 'Incorrect'
|
|
169
|
+
},
|
|
170
|
+
partial: {
|
|
171
|
+
type: 'default',
|
|
172
|
+
"default": 'Nearly'
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
it('merges custom values with defaults', function () {
|
|
177
|
+
var defaults = (0, _index.buildDefaults)({
|
|
178
|
+
correct: {
|
|
179
|
+
type: 'custom',
|
|
180
|
+
custom: 'Great job!'
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
expect(defaults).toEqual({
|
|
184
|
+
correct: {
|
|
185
|
+
type: 'custom',
|
|
186
|
+
"default": 'Correct',
|
|
187
|
+
custom: 'Great job!'
|
|
188
|
+
},
|
|
189
|
+
incorrect: {
|
|
190
|
+
type: 'default',
|
|
191
|
+
"default": 'Incorrect'
|
|
192
|
+
},
|
|
193
|
+
partial: {
|
|
194
|
+
type: 'default',
|
|
195
|
+
"default": 'Nearly'
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
//# sourceMappingURL=feedback-config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-config.test.js","names":["_react","_interopRequireDefault","require","_react2","_userEvent","_index","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","FeedbackSelector","_ref","label","feedback","onChange","createElement","value","type","target","describe","fn","beforeEach","mockClear","it","buildDefaults","render","FeedbackConfig","expect","screen","getByText","toBeInTheDocument","selectors","getAllByTestId","toHaveLength","allowPartial","queryByText","not","_asyncToGenerator2","_regenerator","mark","_callee","user","correctSelect","wrap","_context","prev","next","userEvent","setup","getByLabelText","selectOptions","toHaveBeenCalledWith","objectContaining","correct","stop","_callee2","incorrectSelect","_context2","incorrect","_callee3","partialSelect","_context3","partial","defaults","toEqual","custom"],"sources":["../../../src/feedback-config/__tests__/feedback-config.test.jsx"],"sourcesContent":["import React from 'react';\nimport { render, screen } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\nimport { buildDefaults, FeedbackConfig } from '../index';\n\n// Mock FeedbackSelector to simplify testing\njest.mock('../feedback-selector', () => {\n return function FeedbackSelector({ label, feedback, onChange }) {\n return (\n <div data-testid=\"feedback-selector\">\n <label>{label}</label>\n <select\n aria-label={label}\n value={feedback.type}\n onChange={(e) => onChange({ ...feedback, type: e.target.value })}\n >\n <option value=\"default\">Default</option>\n <option value=\"custom\">Custom</option>\n <option value=\"none\">None</option>\n </select>\n </div>\n );\n };\n});\n\ndescribe('FeedbackConfig', () => {\n const onChange = jest.fn();\n\n beforeEach(() => {\n onChange.mockClear();\n });\n\n describe('rendering', () => {\n it('renders with default feedback types', () => {\n const feedback = buildDefaults();\n\n render(<FeedbackConfig feedback={feedback} onChange={onChange} />);\n\n expect(screen.getByText('Feedback')).toBeInTheDocument();\n expect(screen.getByText('If correct, show')).toBeInTheDocument();\n expect(screen.getByText('If partially correct, show')).toBeInTheDocument();\n expect(screen.getByText('If incorrect, show')).toBeInTheDocument();\n });\n\n it('renders all three feedback selectors by default', () => {\n const feedback = buildDefaults();\n\n render(<FeedbackConfig feedback={feedback} onChange={onChange} />);\n\n const selectors = screen.getAllByTestId('feedback-selector');\n expect(selectors).toHaveLength(3);\n });\n\n it('does not render partial feedback selector when allowPartial is false', () => {\n const feedback = buildDefaults();\n\n render(<FeedbackConfig allowPartial={false} feedback={feedback} onChange={onChange} />);\n\n expect(screen.getByText('If correct, show')).toBeInTheDocument();\n expect(screen.queryByText('If partially correct, show')).not.toBeInTheDocument();\n expect(screen.getByText('If incorrect, show')).toBeInTheDocument();\n\n const selectors = screen.getAllByTestId('feedback-selector');\n expect(selectors).toHaveLength(2);\n });\n });\n\n describe('user interactions', () => {\n it('calls onChange when correct feedback type changes', async () => {\n const user = userEvent.setup();\n const feedback = buildDefaults();\n\n render(<FeedbackConfig feedback={feedback} onChange={onChange} />);\n\n const correctSelect = screen.getByLabelText('If correct, show');\n await user.selectOptions(correctSelect, 'custom');\n\n expect(onChange).toHaveBeenCalledWith(\n expect.objectContaining({\n correct: expect.objectContaining({ type: 'custom' }),\n }),\n );\n });\n\n it('calls onChange when incorrect feedback type changes', async () => {\n const user = userEvent.setup();\n const feedback = buildDefaults();\n\n render(<FeedbackConfig feedback={feedback} onChange={onChange} />);\n\n const incorrectSelect = screen.getByLabelText('If incorrect, show');\n await user.selectOptions(incorrectSelect, 'none');\n\n expect(onChange).toHaveBeenCalledWith(\n expect.objectContaining({\n incorrect: expect.objectContaining({ type: 'none' }),\n }),\n );\n });\n\n it('calls onChange when partial feedback type changes', async () => {\n const user = userEvent.setup();\n const feedback = buildDefaults();\n\n render(<FeedbackConfig feedback={feedback} onChange={onChange} />);\n\n const partialSelect = screen.getByLabelText('If partially correct, show');\n await user.selectOptions(partialSelect, 'custom');\n\n expect(onChange).toHaveBeenCalledWith(\n expect.objectContaining({\n partial: expect.objectContaining({ type: 'custom' }),\n }),\n );\n });\n });\n\n describe('buildDefaults helper', () => {\n it('returns default feedback configuration', () => {\n const defaults = buildDefaults();\n\n expect(defaults).toEqual({\n correct: { type: 'default', default: 'Correct' },\n incorrect: { type: 'default', default: 'Incorrect' },\n partial: { type: 'default', default: 'Nearly' },\n });\n });\n\n it('merges custom values with defaults', () => {\n const defaults = buildDefaults({\n correct: { type: 'custom', custom: 'Great job!' },\n });\n\n expect(defaults).toEqual({\n correct: { type: 'custom', default: 'Correct', custom: 'Great job!' },\n incorrect: { type: 'default', default: 'Incorrect' },\n partial: { type: 'default', default: 'Nearly' },\n });\n });\n });\n});\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAAyD,SAAAI,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAEzD;AACAoB,IAAI,CAACC,IAAI,CAAC,sBAAsB,EAAE,YAAM;EACtC,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAAgC;IAAA,IAA7BC,KAAK,GAAAD,IAAA,CAALC,KAAK;MAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;MAAEC,SAAQ,GAAAH,IAAA,CAARG,QAAQ;IAC1D,oBACEjC,MAAA,YAAAkC,aAAA;MAAK,eAAY;IAAmB,gBAClClC,MAAA,YAAAkC,aAAA,gBAAQH,KAAa,CAAC,eACtB/B,MAAA,YAAAkC,aAAA;MACE,cAAYH,KAAM;MAClBI,KAAK,EAAEH,QAAQ,CAACI,IAAK;MACrBH,QAAQ,EAAE,SAAVA,QAAQA,CAAG1B,CAAC;QAAA,OAAK0B,SAAQ,CAAAd,aAAA,CAAAA,aAAA,KAAMa,QAAQ;UAAEI,IAAI,EAAE7B,CAAC,CAAC8B,MAAM,CAACF;QAAK,EAAE,CAAC;MAAA;IAAC,gBAEjEnC,MAAA,YAAAkC,aAAA;MAAQC,KAAK,EAAC;IAAS,GAAC,SAAe,CAAC,eACxCnC,MAAA,YAAAkC,aAAA;MAAQC,KAAK,EAAC;IAAQ,GAAC,QAAc,CAAC,eACtCnC,MAAA,YAAAkC,aAAA;MAAQC,KAAK,EAAC;IAAM,GAAC,MAAY,CAC3B,CACL,CAAC;EAEV,CAAC;AACH,CAAC,CAAC;AAEFG,QAAQ,CAAC,gBAAgB,EAAE,YAAM;EAC/B,IAAML,QAAQ,GAAGN,IAAI,CAACY,EAAE,CAAC,CAAC;EAE1BC,UAAU,CAAC,YAAM;IACfP,QAAQ,CAACQ,SAAS,CAAC,CAAC;EACtB,CAAC,CAAC;EAEFH,QAAQ,CAAC,WAAW,EAAE,YAAM;IAC1BI,EAAE,CAAC,qCAAqC,EAAE,YAAM;MAC9C,IAAMV,QAAQ,GAAG,IAAAW,oBAAa,EAAC,CAAC;MAEhC,IAAAC,cAAM,eAAC5C,MAAA,YAAAkC,aAAA,CAAC7B,MAAA,CAAAwC,cAAc;QAACb,QAAQ,EAAEA,QAAS;QAACC,QAAQ,EAAEA;MAAS,CAAE,CAAC,CAAC;MAElEa,MAAM,CAACC,cAAM,CAACC,SAAS,CAAC,UAAU,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;MACxDH,MAAM,CAACC,cAAM,CAACC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;MAChEH,MAAM,CAACC,cAAM,CAACC,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;MAC1EH,MAAM,CAACC,cAAM,CAACC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACpE,CAAC,CAAC;IAEFP,EAAE,CAAC,iDAAiD,EAAE,YAAM;MAC1D,IAAMV,QAAQ,GAAG,IAAAW,oBAAa,EAAC,CAAC;MAEhC,IAAAC,cAAM,eAAC5C,MAAA,YAAAkC,aAAA,CAAC7B,MAAA,CAAAwC,cAAc;QAACb,QAAQ,EAAEA,QAAS;QAACC,QAAQ,EAAEA;MAAS,CAAE,CAAC,CAAC;MAElE,IAAMiB,SAAS,GAAGH,cAAM,CAACI,cAAc,CAAC,mBAAmB,CAAC;MAC5DL,MAAM,CAACI,SAAS,CAAC,CAACE,YAAY,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC;IAEFV,EAAE,CAAC,sEAAsE,EAAE,YAAM;MAC/E,IAAMV,QAAQ,GAAG,IAAAW,oBAAa,EAAC,CAAC;MAEhC,IAAAC,cAAM,eAAC5C,MAAA,YAAAkC,aAAA,CAAC7B,MAAA,CAAAwC,cAAc;QAACQ,YAAY,EAAE,KAAM;QAACrB,QAAQ,EAAEA,QAAS;QAACC,QAAQ,EAAEA;MAAS,CAAE,CAAC,CAAC;MAEvFa,MAAM,CAACC,cAAM,CAACC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;MAChEH,MAAM,CAACC,cAAM,CAACO,WAAW,CAAC,4BAA4B,CAAC,CAAC,CAACC,GAAG,CAACN,iBAAiB,CAAC,CAAC;MAChFH,MAAM,CAACC,cAAM,CAACC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;MAElE,IAAMC,SAAS,GAAGH,cAAM,CAACI,cAAc,CAAC,mBAAmB,CAAC;MAC5DL,MAAM,CAACI,SAAS,CAAC,CAACE,YAAY,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFd,QAAQ,CAAC,mBAAmB,EAAE,YAAM;IAClCI,EAAE,CAAC,mDAAmD,mBAAAc,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAC,QAAA;MAAA,IAAAC,IAAA,EAAA5B,QAAA,EAAA6B,aAAA;MAAA,OAAAJ,YAAA,YAAAK,IAAA,WAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAChDL,IAAI,GAAGM,qBAAS,CAACC,KAAK,CAAC,CAAC;YACxBnC,QAAQ,GAAG,IAAAW,oBAAa,EAAC,CAAC;YAEhC,IAAAC,cAAM,eAAC5C,MAAA,YAAAkC,aAAA,CAAC7B,MAAA,CAAAwC,cAAc;cAACb,QAAQ,EAAEA,QAAS;cAACC,QAAQ,EAAEA;YAAS,CAAE,CAAC,CAAC;YAE5D4B,aAAa,GAAGd,cAAM,CAACqB,cAAc,CAAC,kBAAkB,CAAC;YAAAL,QAAA,CAAAE,IAAA;YAAA,OACzDL,IAAI,CAACS,aAAa,CAACR,aAAa,EAAE,QAAQ,CAAC;UAAA;YAEjDf,MAAM,CAACb,QAAQ,CAAC,CAACqC,oBAAoB,CACnCxB,MAAM,CAACyB,gBAAgB,CAAC;cACtBC,OAAO,EAAE1B,MAAM,CAACyB,gBAAgB,CAAC;gBAAEnC,IAAI,EAAE;cAAS,CAAC;YACrD,CAAC,CACH,CAAC;UAAC;UAAA;YAAA,OAAA2B,QAAA,CAAAU,IAAA;QAAA;MAAA,GAAAd,OAAA;IAAA,CACH,GAAC;IAEFjB,EAAE,CAAC,qDAAqD,mBAAAc,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAgB,SAAA;MAAA,IAAAd,IAAA,EAAA5B,QAAA,EAAA2C,eAAA;MAAA,OAAAlB,YAAA,YAAAK,IAAA,WAAAc,SAAA;QAAA,kBAAAA,SAAA,CAAAZ,IAAA,GAAAY,SAAA,CAAAX,IAAA;UAAA;YAClDL,IAAI,GAAGM,qBAAS,CAACC,KAAK,CAAC,CAAC;YACxBnC,QAAQ,GAAG,IAAAW,oBAAa,EAAC,CAAC;YAEhC,IAAAC,cAAM,eAAC5C,MAAA,YAAAkC,aAAA,CAAC7B,MAAA,CAAAwC,cAAc;cAACb,QAAQ,EAAEA,QAAS;cAACC,QAAQ,EAAEA;YAAS,CAAE,CAAC,CAAC;YAE5D0C,eAAe,GAAG5B,cAAM,CAACqB,cAAc,CAAC,oBAAoB,CAAC;YAAAQ,SAAA,CAAAX,IAAA;YAAA,OAC7DL,IAAI,CAACS,aAAa,CAACM,eAAe,EAAE,MAAM,CAAC;UAAA;YAEjD7B,MAAM,CAACb,QAAQ,CAAC,CAACqC,oBAAoB,CACnCxB,MAAM,CAACyB,gBAAgB,CAAC;cACtBM,SAAS,EAAE/B,MAAM,CAACyB,gBAAgB,CAAC;gBAAEnC,IAAI,EAAE;cAAO,CAAC;YACrD,CAAC,CACH,CAAC;UAAC;UAAA;YAAA,OAAAwC,SAAA,CAAAH,IAAA;QAAA;MAAA,GAAAC,QAAA;IAAA,CACH,GAAC;IAEFhC,EAAE,CAAC,mDAAmD,mBAAAc,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAoB,SAAA;MAAA,IAAAlB,IAAA,EAAA5B,QAAA,EAAA+C,aAAA;MAAA,OAAAtB,YAAA,YAAAK,IAAA,WAAAkB,SAAA;QAAA,kBAAAA,SAAA,CAAAhB,IAAA,GAAAgB,SAAA,CAAAf,IAAA;UAAA;YAChDL,IAAI,GAAGM,qBAAS,CAACC,KAAK,CAAC,CAAC;YACxBnC,QAAQ,GAAG,IAAAW,oBAAa,EAAC,CAAC;YAEhC,IAAAC,cAAM,eAAC5C,MAAA,YAAAkC,aAAA,CAAC7B,MAAA,CAAAwC,cAAc;cAACb,QAAQ,EAAEA,QAAS;cAACC,QAAQ,EAAEA;YAAS,CAAE,CAAC,CAAC;YAE5D8C,aAAa,GAAGhC,cAAM,CAACqB,cAAc,CAAC,4BAA4B,CAAC;YAAAY,SAAA,CAAAf,IAAA;YAAA,OACnEL,IAAI,CAACS,aAAa,CAACU,aAAa,EAAE,QAAQ,CAAC;UAAA;YAEjDjC,MAAM,CAACb,QAAQ,CAAC,CAACqC,oBAAoB,CACnCxB,MAAM,CAACyB,gBAAgB,CAAC;cACtBU,OAAO,EAAEnC,MAAM,CAACyB,gBAAgB,CAAC;gBAAEnC,IAAI,EAAE;cAAS,CAAC;YACrD,CAAC,CACH,CAAC;UAAC;UAAA;YAAA,OAAA4C,SAAA,CAAAP,IAAA;QAAA;MAAA,GAAAK,QAAA;IAAA,CACH,GAAC;EACJ,CAAC,CAAC;EAEFxC,QAAQ,CAAC,sBAAsB,EAAE,YAAM;IACrCI,EAAE,CAAC,wCAAwC,EAAE,YAAM;MACjD,IAAMwC,QAAQ,GAAG,IAAAvC,oBAAa,EAAC,CAAC;MAEhCG,MAAM,CAACoC,QAAQ,CAAC,CAACC,OAAO,CAAC;QACvBX,OAAO,EAAE;UAAEpC,IAAI,EAAE,SAAS;UAAE,WAAS;QAAU,CAAC;QAChDyC,SAAS,EAAE;UAAEzC,IAAI,EAAE,SAAS;UAAE,WAAS;QAAY,CAAC;QACpD6C,OAAO,EAAE;UAAE7C,IAAI,EAAE,SAAS;UAAE,WAAS;QAAS;MAChD,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFM,EAAE,CAAC,oCAAoC,EAAE,YAAM;MAC7C,IAAMwC,QAAQ,GAAG,IAAAvC,oBAAa,EAAC;QAC7B6B,OAAO,EAAE;UAAEpC,IAAI,EAAE,QAAQ;UAAEgD,MAAM,EAAE;QAAa;MAClD,CAAC,CAAC;MAEFtC,MAAM,CAACoC,QAAQ,CAAC,CAACC,OAAO,CAAC;QACvBX,OAAO,EAAE;UAAEpC,IAAI,EAAE,QAAQ;UAAE,WAAS,SAAS;UAAEgD,MAAM,EAAE;QAAa,CAAC;QACrEP,SAAS,EAAE;UAAEzC,IAAI,EAAE,SAAS;UAAE,WAAS;QAAY,CAAC;QACpD6C,OAAO,EAAE;UAAE7C,IAAI,EAAE,SAAS;UAAE,WAAS;QAAS;MAChD,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|