@pie-element/categorize 13.2.2-beta.5 → 13.2.2-beta.6

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 (66) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/configure/CHANGELOG.md +4 -0
  3. package/configure/package.json +3 -3
  4. package/controller/CHANGELOG.md +4 -0
  5. package/controller/package.json +1 -1
  6. package/package.json +3 -3
  7. package/configure/lib/defaults.js +0 -220
  8. package/configure/lib/defaults.js.map +0 -1
  9. package/configure/lib/design/builder.js +0 -55
  10. package/configure/lib/design/builder.js.map +0 -1
  11. package/configure/lib/design/buttons.js +0 -59
  12. package/configure/lib/design/buttons.js.map +0 -1
  13. package/configure/lib/design/categories/RowLabel.js +0 -66
  14. package/configure/lib/design/categories/RowLabel.js.map +0 -1
  15. package/configure/lib/design/categories/alternateResponses.js +0 -116
  16. package/configure/lib/design/categories/alternateResponses.js.map +0 -1
  17. package/configure/lib/design/categories/category.js +0 -153
  18. package/configure/lib/design/categories/category.js.map +0 -1
  19. package/configure/lib/design/categories/choice-preview.js +0 -79
  20. package/configure/lib/design/categories/choice-preview.js.map +0 -1
  21. package/configure/lib/design/categories/droppable-placeholder.js +0 -93
  22. package/configure/lib/design/categories/droppable-placeholder.js.map +0 -1
  23. package/configure/lib/design/categories/index.js +0 -256
  24. package/configure/lib/design/categories/index.js.map +0 -1
  25. package/configure/lib/design/choices/choice.js +0 -187
  26. package/configure/lib/design/choices/choice.js.map +0 -1
  27. package/configure/lib/design/choices/config.js +0 -58
  28. package/configure/lib/design/choices/config.js.map +0 -1
  29. package/configure/lib/design/choices/index.js +0 -197
  30. package/configure/lib/design/choices/index.js.map +0 -1
  31. package/configure/lib/design/header.js +0 -71
  32. package/configure/lib/design/header.js.map +0 -1
  33. package/configure/lib/design/index.js +0 -741
  34. package/configure/lib/design/index.js.map +0 -1
  35. package/configure/lib/design/input-header.js +0 -105
  36. package/configure/lib/design/input-header.js.map +0 -1
  37. package/configure/lib/design/utils.js +0 -12
  38. package/configure/lib/design/utils.js.map +0 -1
  39. package/configure/lib/index.js +0 -148
  40. package/configure/lib/index.js.map +0 -1
  41. package/configure/lib/main.js +0 -44
  42. package/configure/lib/main.js.map +0 -1
  43. package/configure/lib/utils.js +0 -43
  44. package/configure/lib/utils.js.map +0 -1
  45. package/controller/lib/defaults.js +0 -31
  46. package/controller/lib/defaults.js.map +0 -1
  47. package/controller/lib/index.js +0 -506
  48. package/controller/lib/index.js.map +0 -1
  49. package/controller/lib/utils.js +0 -69
  50. package/controller/lib/utils.js.map +0 -1
  51. package/lib/categorize/categories.js +0 -135
  52. package/lib/categorize/categories.js.map +0 -1
  53. package/lib/categorize/category.js +0 -67
  54. package/lib/categorize/category.js.map +0 -1
  55. package/lib/categorize/choice.js +0 -140
  56. package/lib/categorize/choice.js.map +0 -1
  57. package/lib/categorize/choices.js +0 -99
  58. package/lib/categorize/choices.js.map +0 -1
  59. package/lib/categorize/droppable-placeholder.js +0 -84
  60. package/lib/categorize/droppable-placeholder.js.map +0 -1
  61. package/lib/categorize/grid-content.js +0 -55
  62. package/lib/categorize/grid-content.js.map +0 -1
  63. package/lib/categorize/index.js +0 -450
  64. package/lib/categorize/index.js.map +0 -1
  65. package/lib/index.js +0 -316
  66. package/lib/index.js.map +0 -1
@@ -1,55 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = exports.GridContent = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _react = _interopRequireDefault(require("react"));
10
- var _propTypes = _interopRequireDefault(require("prop-types"));
11
- var _styles = require("@mui/material/styles");
12
- class GridContent extends _react.default.Component {
13
- render() {
14
- const {
15
- className,
16
- children,
17
- columns,
18
- extraStyle,
19
- rows
20
- } = this.props;
21
- const style = {
22
- gridTemplateColumns: `repeat(${columns}, 1fr)`,
23
- gridTemplateRows: rows === 2 ? 'auto 1fr' : `repeat(${rows}, auto)`,
24
- ...extraStyle
25
- };
26
- return /*#__PURE__*/_react.default.createElement(StyledDiv, {
27
- style: style,
28
- className: className
29
- }, children);
30
- }
31
- }
32
- exports.GridContent = GridContent;
33
- (0, _defineProperty2.default)(GridContent, "propTypes", {
34
- className: _propTypes.default.string,
35
- children: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node), _propTypes.default.node]).isRequired,
36
- columns: _propTypes.default.number,
37
- rows: _propTypes.default.number,
38
- extraStyle: _propTypes.default.object
39
- });
40
- (0, _defineProperty2.default)(GridContent, "defaultProps", {
41
- columns: 2,
42
- rows: 2
43
- });
44
- const StyledDiv = (0, _styles.styled)('div')(({
45
- theme
46
- }) => ({
47
- display: 'grid',
48
- columnGap: theme.spacing(1),
49
- gridColumnGap: theme.spacing(1),
50
- rowGap: theme.spacing(1),
51
- gridRowGap: theme.spacing(1),
52
- gridAutoRows: '1fr'
53
- }));
54
- var _default = exports.default = GridContent;
55
- //# sourceMappingURL=grid-content.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grid-content.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","GridContent","React","Component","render","className","children","columns","extraStyle","rows","props","style","gridTemplateColumns","gridTemplateRows","default","createElement","StyledDiv","exports","_defineProperty2","PropTypes","string","oneOfType","arrayOf","node","isRequired","number","object","styled","theme","display","columnGap","spacing","gridColumnGap","rowGap","gridRowGap","gridAutoRows","_default"],"sources":["../../src/categorize/grid-content.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\n\nexport class GridContent extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n columns: PropTypes.number,\n rows: PropTypes.number,\n extraStyle: PropTypes.object,\n };\n static defaultProps = {\n columns: 2,\n rows: 2,\n };\n\n render() {\n const { className, children, columns, extraStyle, rows } = this.props;\n const style = {\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gridTemplateRows: rows === 2 ? 'auto 1fr' : `repeat(${rows}, auto)`,\n ...extraStyle,\n };\n\n return (\n <StyledDiv style={style} className={className}>\n {children}\n </StyledDiv>\n );\n }\n}\n\nconst StyledDiv = styled('div')(({ theme }) => ({\n display: 'grid',\n columnGap: theme.spacing(1),\n gridColumnGap: theme.spacing(1),\n rowGap: theme.spacing(1),\n gridRowGap: theme.spacing(1),\n gridAutoRows: '1fr',\n}));\n\nexport default GridContent;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAEO,MAAMG,WAAW,SAASC,cAAK,CAACC,SAAS,CAAC;EAa/CC,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,SAAS;MAAEC,QAAQ;MAAEC,OAAO;MAAEC,UAAU;MAAEC;IAAK,CAAC,GAAG,IAAI,CAACC,KAAK;IACrE,MAAMC,KAAK,GAAG;MACZC,mBAAmB,EAAE,UAAUL,OAAO,QAAQ;MAC9CM,gBAAgB,EAAEJ,IAAI,KAAK,CAAC,GAAG,UAAU,GAAG,UAAUA,IAAI,SAAS;MACnE,GAAGD;IACL,CAAC;IAED,oBACEZ,MAAA,CAAAkB,OAAA,CAAAC,aAAA,CAACC,SAAS;MAACL,KAAK,EAAEA,KAAM;MAACN,SAAS,EAAEA;IAAU,GAC3CC,QACQ,CAAC;EAEhB;AACF;AAACW,OAAA,CAAAhB,WAAA,GAAAA,WAAA;AAAA,IAAAiB,gBAAA,CAAAJ,OAAA,EA3BYb,WAAW,eACH;EACjBI,SAAS,EAAEc,kBAAS,CAACC,MAAM;EAC3Bd,QAAQ,EAAEa,kBAAS,CAACE,SAAS,CAAC,CAACF,kBAAS,CAACG,OAAO,CAACH,kBAAS,CAACI,IAAI,CAAC,EAAEJ,kBAAS,CAACI,IAAI,CAAC,CAAC,CAACC,UAAU;EAC7FjB,OAAO,EAAEY,kBAAS,CAACM,MAAM;EACzBhB,IAAI,EAAEU,kBAAS,CAACM,MAAM;EACtBjB,UAAU,EAAEW,kBAAS,CAACO;AACxB,CAAC;AAAA,IAAAR,gBAAA,CAAAJ,OAAA,EAPUb,WAAW,kBAQA;EACpBM,OAAO,EAAE,CAAC;EACVE,IAAI,EAAE;AACR,CAAC;AAkBH,MAAMO,SAAS,GAAG,IAAAW,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EAC9CC,OAAO,EAAE,MAAM;EACfC,SAAS,EAAEF,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC;EAC3BC,aAAa,EAAEJ,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC;EAC/BE,MAAM,EAAEL,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC;EACxBG,UAAU,EAAEN,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC;EAC5BI,YAAY,EAAE;AAChB,CAAC,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAnB,OAAA,CAAAH,OAAA,GAEWb,WAAW","ignoreList":[]}
@@ -1,450 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = exports.Categorize = void 0;
8
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _react = _interopRequireDefault(require("react"));
11
- var _propTypes = _interopRequireDefault(require("prop-types"));
12
- var _debug = _interopRequireDefault(require("debug"));
13
- var _styles = require("@mui/material/styles");
14
- var _core = require("@dnd-kit/core");
15
- var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
16
- var _categorize = require("@pie-lib/categorize");
17
- var _drag = require("@pie-lib/drag");
18
- var _renderUi = require("@pie-lib/render-ui");
19
- var _mathRendering = require("@pie-lib/math-rendering");
20
- var _translator = _interopRequireDefault(require("@pie-lib/translator"));
21
- var _configUi = require("@pie-lib/config-ui");
22
- var _choices = _interopRequireDefault(require("./choices"));
23
- var _choice = _interopRequireDefault(require("./choice"));
24
- var _categories = _interopRequireDefault(require("./categories"));
25
- const {
26
- translator
27
- } = _translator.default;
28
- const log = (0, _debug.default)('@pie-ui:categorize');
29
- class DragPreviewWrapper extends _react.default.Component {
30
- constructor(...args) {
31
- super(...args);
32
- (0, _defineProperty2.default)(this, "containerRef", /*#__PURE__*/_react.default.createRef());
33
- }
34
- componentDidMount() {
35
- if (this.containerRef.current) {
36
- (0, _mathRendering.renderMath)(this.containerRef.current);
37
- }
38
- }
39
- render() {
40
- return /*#__PURE__*/_react.default.createElement("div", {
41
- ref: this.containerRef
42
- }, this.props.children);
43
- }
44
- }
45
- (0, _defineProperty2.default)(DragPreviewWrapper, "propTypes", {
46
- children: _propTypes.default.node
47
- });
48
- class Categorize extends _react.default.Component {
49
- constructor(props) {
50
- super(props);
51
- (0, _defineProperty2.default)(this, "removeChoice", c => {
52
- log('[removeChoice]: ', c);
53
- const {
54
- onAnswersChange,
55
- session
56
- } = this.props;
57
- const answers = (0, _categorize.removeChoiceFromCategory)(c.id, c.categoryId, c.choiceIndex, session.answers);
58
- onAnswersChange(answers);
59
- });
60
- (0, _defineProperty2.default)(this, "dropChoice", (categoryId, draggedChoice) => {
61
- const {
62
- session,
63
- onAnswersChange,
64
- model
65
- } = this.props;
66
- const {
67
- maxChoicesPerCategory = 0
68
- } = model || {};
69
- const {
70
- answers = []
71
- } = session || {};
72
- let newAnswers;
73
- if (draggedChoice) {
74
- log('[dropChoice] category: ', draggedChoice.categoryId, 'choice: ', draggedChoice);
75
- } else {
76
- log('[dropChoice] category: ', undefined, 'choice: ', undefined);
77
- }
78
- const answer = answers.find(answer => answer.category === categoryId);
79
-
80
- // treat special case to replace the existing choice with the new one when maxChoicesPerCategory = 1
81
- if (draggedChoice && maxChoicesPerCategory === 1 && answer && answer.choices && answer.choices.length === 1) {
82
- // First, move the dragged choice to the target category (this will also remove it from source if allowMultiplePlacements is disabled)
83
- newAnswers = (0, _categorize.moveChoiceToCategory)(draggedChoice.id, draggedChoice.categoryId, categoryId, draggedChoice.choiceIndex, answers);
84
- // Then, remove the existing choice from the target category (use newAnswers, not answers)
85
- newAnswers = (0, _categorize.removeChoiceFromCategory)(answer.choices[0], categoryId, 0, newAnswers);
86
- }
87
-
88
- // treat special case when there are as many choices as maxChoicesPerCategory is
89
- else if (draggedChoice && maxChoicesPerCategory > 1 && answer && answer.choices && answer.choices.length === maxChoicesPerCategory) {
90
- newAnswers = draggedChoice.categoryId ? (0, _categorize.moveChoiceToCategory)(draggedChoice.id, draggedChoice.categoryId, draggedChoice.categoryId, draggedChoice.choiceIndex, answers) : (0, _categorize.removeChoiceFromCategory)(draggedChoice.id, draggedChoice.categoryId, draggedChoice.choiceIndex, answers);
91
- this.setState({
92
- showMaxChoiceAlert: true
93
- });
94
- }
95
-
96
- // treat special case when there are more choices that maxChoicesPerCategory is (testing purpose in pits)
97
- else if (maxChoicesPerCategory !== 0 && answer && answer.choices && answer.choices.length > maxChoicesPerCategory) {
98
- newAnswers = answers;
99
- this.setState({
100
- showMaxChoiceAlert: true
101
- });
102
- } else {
103
- newAnswers = draggedChoice ? (0, _categorize.moveChoiceToCategory)(draggedChoice.id, draggedChoice.categoryId, categoryId, draggedChoice.choiceIndex, answers) : this.removeChoice(categoryId);
104
- }
105
- if (draggedChoice) {
106
- onAnswersChange(newAnswers);
107
- }
108
- });
109
- (0, _defineProperty2.default)(this, "toggleShowCorrect", () => this.setState({
110
- showCorrect: !this.state.showCorrect
111
- }, () => {
112
- this.props.onShowCorrectToggle();
113
- }));
114
- (0, _defineProperty2.default)(this, "getPositionDirection", choicePosition => {
115
- let flexDirection;
116
- switch (choicePosition) {
117
- case 'left':
118
- flexDirection = 'row-reverse';
119
- break;
120
- case 'right':
121
- flexDirection = 'row';
122
- break;
123
- case 'below':
124
- flexDirection = 'column';
125
- break;
126
- default:
127
- // above
128
- flexDirection = 'column-reverse';
129
- break;
130
- }
131
- return flexDirection;
132
- });
133
- (0, _defineProperty2.default)(this, "existAlternateResponse", correctResponse => correctResponse?.some(correctRes => correctRes.alternateResponses?.length > 0));
134
- this.state = {
135
- showCorrect: false,
136
- showMaxChoiceAlert: false
137
- };
138
- }
139
- UNSAFE_componentWillReceiveProps(nextProps) {
140
- const {
141
- model
142
- } = this.props;
143
- const {
144
- model: nextModel
145
- } = nextProps;
146
-
147
- // check if the note is the default one for prev language and change to the default one for new language
148
- // this check is necessary in order to diferanciate between default and authour defined note
149
- // and only change between languages for default ones
150
- if (model.note && model.language && model.language !== nextModel.language && model.note === translator.t('common:commonCorrectAnswerWithAlternates', {
151
- lng: model.language
152
- })) {
153
- model.note = translator.t('common:commonCorrectAnswerWithAlternates', {
154
- lng: nextModel.language
155
- });
156
- }
157
- this.setState({
158
- showCorrect: false
159
- });
160
- }
161
- render() {
162
- const {
163
- model,
164
- session
165
- } = this.props;
166
- const {
167
- showCorrect,
168
- showMaxChoiceAlert
169
- } = this.state;
170
- const {
171
- choicesPosition,
172
- extraCSSRules,
173
- note,
174
- showNote,
175
- env,
176
- language,
177
- maxChoicesPerCategory,
178
- autoplayAudioEnabled,
179
- customAudioButton
180
- } = model;
181
- const {
182
- mode,
183
- role
184
- } = env || {};
185
- const choicePosition = choicesPosition || 'above';
186
- const style = {
187
- flexDirection: this.getPositionDirection(choicePosition),
188
- gap: '8px'
189
- };
190
- const {
191
- categories,
192
- choices,
193
- correct
194
- } = (0, _categorize.buildState)(model.categories, model.choices, showCorrect ? model.correctResponse : session.answers, model.correctResponse);
195
- log('[render] disabled: ', model.disabled);
196
- const {
197
- rowLabels,
198
- categoriesPerRow,
199
- correctResponse,
200
- fontSizeFactor
201
- } = model;
202
- const nbOfRows = categories && Math.ceil(categories.length / categoriesPerRow) || 0;
203
- const existAlternate = this.existAlternateResponse(correctResponse) || false;
204
- const displayNote = (showCorrect || mode === 'view' && role === 'instructor') && showNote && note && existAlternate;
205
- const alertMessage = translator.t('translation:categorize:limitMaxChoicesPerCategory', {
206
- lng: model.language,
207
- maxChoicesPerCategory
208
- });
209
- const alertTitle = translator.t('common:warning', {
210
- lng: model.language
211
- });
212
- const onCloseText = translator.t('common:cancel', {
213
- lng: model.language
214
- });
215
- const showRationale = model.rationale && ((0, _renderUi.hasText)(model.rationale) || (0, _renderUi.hasMedia)(model.rationale));
216
- const showTeacherInstructions = model.teacherInstructions && ((0, _renderUi.hasText)(model.teacherInstructions) || (0, _renderUi.hasMedia)(model.teacherInstructions));
217
- return /*#__PURE__*/_react.default.createElement(StyledUiLayout, {
218
- extraCSSRules: extraCSSRules,
219
- id: 'main-container',
220
- fontSizeFactor: fontSizeFactor
221
- }, showTeacherInstructions && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(StyledCollapsible, {
222
- labels: {
223
- hidden: 'Show Teacher Instructions',
224
- visible: 'Hide Teacher Instructions'
225
- }
226
- }, /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
227
- prompt: model.teacherInstructions
228
- }))), model.prompt && /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
229
- prompt: model.prompt,
230
- autoplayAudioEnabled: autoplayAudioEnabled,
231
- customAudioButton: customAudioButton
232
- }), /*#__PURE__*/_react.default.createElement(_correctAnswerToggle.default, {
233
- show: showCorrect || correct === false,
234
- toggled: showCorrect,
235
- onToggle: this.toggleShowCorrect,
236
- language: language
237
- }), /*#__PURE__*/_react.default.createElement(StyledCategorize, {
238
- style: style
239
- }, /*#__PURE__*/_react.default.createElement("div", {
240
- style: {
241
- display: 'flex',
242
- flex: 1
243
- }
244
- }, /*#__PURE__*/_react.default.createElement(_categories.default, {
245
- model: model,
246
- disabled: model.disabled,
247
- categories: categories,
248
- onDropChoice: this.dropChoice,
249
- onRemoveChoice: this.removeChoice,
250
- rowLabels: (rowLabels || []).slice(0, nbOfRows)
251
- })), /*#__PURE__*/_react.default.createElement(_choices.default, {
252
- disabled: model.disabled,
253
- model: model,
254
- choices: choices,
255
- choicePosition: choicePosition,
256
- onDropChoice: this.dropChoice,
257
- onRemoveChoice: this.removeChoice,
258
- correct: correct
259
- })), displayNote && /*#__PURE__*/_react.default.createElement(StyledNote, {
260
- dangerouslySetInnerHTML: {
261
- __html: note
262
- }
263
- }), showRationale && /*#__PURE__*/_react.default.createElement(StyledCollapsible, {
264
- labels: {
265
- hidden: 'Show Rationale',
266
- visible: 'Hide Rationale'
267
- }
268
- }, /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
269
- prompt: model.rationale
270
- })), model.correctness && model.feedback && !showCorrect && /*#__PURE__*/_react.default.createElement(_renderUi.Feedback, {
271
- correctness: model.correctness,
272
- feedback: model.feedback
273
- }), /*#__PURE__*/_react.default.createElement(_configUi.AlertDialog, {
274
- title: alertTitle,
275
- text: alertMessage,
276
- open: showMaxChoiceAlert,
277
- onCloseText: onCloseText,
278
- onClose: () => this.setState({
279
- showMaxChoiceAlert: false
280
- })
281
- }));
282
- }
283
- }
284
- exports.Categorize = Categorize;
285
- (0, _defineProperty2.default)(Categorize, "propTypes", {
286
- model: _propTypes.default.object,
287
- session: _propTypes.default.shape({
288
- answers: _propTypes.default.arrayOf(_propTypes.default.shape({
289
- choice: _propTypes.default.string,
290
- category: _propTypes.default.string
291
- }))
292
- }),
293
- onAnswersChange: _propTypes.default.func.isRequired,
294
- onShowCorrectToggle: _propTypes.default.func.isRequired,
295
- pauseMathObserver: _propTypes.default.func,
296
- resumeMathObserver: _propTypes.default.func
297
- });
298
- (0, _defineProperty2.default)(Categorize, "defaultProps", {
299
- disabled: false
300
- });
301
- class CategorizeProvider extends _react.default.Component {
302
- constructor(props) {
303
- super(props);
304
- (0, _defineProperty2.default)(this, "onDragStart", event => {
305
- const {
306
- active
307
- } = event;
308
- const {
309
- pauseMathObserver
310
- } = this.props;
311
- if (pauseMathObserver) {
312
- pauseMathObserver();
313
- }
314
- if (active?.data?.current) {
315
- this.setState({
316
- activeDragItem: active.data.current,
317
- isValidDrop: false
318
- });
319
- }
320
- });
321
- (0, _defineProperty2.default)(this, "onDragEnd", event => {
322
- const {
323
- active,
324
- over
325
- } = event;
326
- const {
327
- resumeMathObserver
328
- } = this.props;
329
-
330
- // Check if drop is valid
331
- const draggedItem = active?.data?.current;
332
- const overData = over?.data?.current;
333
- const isValidDrop = over && active && draggedItem && draggedItem.type === 'choice' && overData && overData.itemType === 'categorize';
334
- this.setState({
335
- activeDragItem: null,
336
- isValidDrop: isValidDrop
337
- });
338
- if (resumeMathObserver) {
339
- resumeMathObserver();
340
- }
341
- if (!active || !draggedItem || draggedItem.type !== 'choice') {
342
- return;
343
- }
344
- const choiceData = {
345
- id: draggedItem.id,
346
- categoryId: draggedItem.categoryId,
347
- choiceIndex: draggedItem.choiceIndex,
348
- value: draggedItem.value,
349
- itemType: draggedItem.itemType
350
- };
351
-
352
- // Dropped outside a valid/known target: remove from source category,
353
- // which returns the choice to the choices pool.
354
- if (!over) {
355
- if (this.categorizeRef && this.categorizeRef.removeChoice && draggedItem.categoryId) {
356
- this.categorizeRef.removeChoice(choiceData);
357
- }
358
- return;
359
- }
360
- if (over.id === 'choices-board') {
361
- if (this.categorizeRef && this.categorizeRef.removeChoice && draggedItem.categoryId) {
362
- this.categorizeRef.removeChoice(choiceData);
363
- }
364
- return;
365
- }
366
- if (this.categorizeRef && this.categorizeRef.dropChoice) {
367
- this.categorizeRef.dropChoice(over.id, choiceData);
368
- }
369
- });
370
- (0, _defineProperty2.default)(this, "renderDragOverlay", () => {
371
- const {
372
- activeDragItem
373
- } = this.state;
374
- const {
375
- model
376
- } = this.props;
377
- if (!activeDragItem) return null;
378
- if (activeDragItem.type === 'choice') {
379
- const choice = model.choices?.find(c => c.id === activeDragItem.id);
380
- if (choice) {
381
- return /*#__PURE__*/_react.default.createElement(_choice.default, (0, _extends2.default)({
382
- key: choice.id,
383
- id: choice.id
384
- }, choice));
385
- }
386
- }
387
- return null;
388
- });
389
- this.uid = _drag.uid.generateId();
390
- this.state = {
391
- activeDragItem: null,
392
- isValidDrop: false
393
- };
394
- }
395
- render() {
396
- const {
397
- isValidDrop
398
- } = this.state;
399
- // Disable drop animation for valid drops to prevent visual snap-back
400
- // Keep default animation for invalid drops to show visual feedback
401
- const dropAnimation = isValidDrop ? null : undefined;
402
- return /*#__PURE__*/_react.default.createElement(_drag.DragProvider, {
403
- onDragStart: this.onDragStart,
404
- onDragEnd: this.onDragEnd
405
- }, /*#__PURE__*/_react.default.createElement(_drag.uid.Provider, {
406
- value: this.uid
407
- }, /*#__PURE__*/_react.default.createElement(Categorize, (0, _extends2.default)({
408
- ref: ref => this.categorizeRef = ref
409
- }, this.props)), /*#__PURE__*/_react.default.createElement(_core.DragOverlay, {
410
- dropAnimation: dropAnimation
411
- }, /*#__PURE__*/_react.default.createElement(DragPreviewWrapper, null, this.renderDragOverlay()))));
412
- }
413
- }
414
- (0, _defineProperty2.default)(CategorizeProvider, "propTypes", {
415
- model: _propTypes.default.object,
416
- session: _propTypes.default.shape({
417
- answers: _propTypes.default.arrayOf(_propTypes.default.shape({
418
- choice: _propTypes.default.string,
419
- category: _propTypes.default.string
420
- }))
421
- }),
422
- onAnswersChange: _propTypes.default.func.isRequired,
423
- onShowCorrectToggle: _propTypes.default.func.isRequired,
424
- pauseMathObserver: _propTypes.default.func,
425
- resumeMathObserver: _propTypes.default.func
426
- });
427
- const StyledUiLayout = (0, _styles.styled)(_renderUi.UiLayout)({
428
- color: _renderUi.color.text(),
429
- backgroundColor: _renderUi.color.background(),
430
- position: 'relative'
431
- });
432
- const StyledNote = (0, _styles.styled)('div')(({
433
- theme
434
- }) => ({
435
- marginBottom: theme.spacing(2)
436
- }));
437
- const StyledCategorize = (0, _styles.styled)('div')(({
438
- theme
439
- }) => ({
440
- marginBottom: theme.spacing(1),
441
- display: 'flex',
442
- flexDirection: 'column'
443
- }));
444
- const StyledCollapsible = (0, _styles.styled)(_renderUi.Collapsible)(({
445
- theme
446
- }) => ({
447
- paddingBottom: theme.spacing(2)
448
- }));
449
- var _default = exports.default = CategorizeProvider;
450
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_debug","_styles","_core","_correctAnswerToggle","_categorize","_drag","_renderUi","_mathRendering","_translator","_configUi","_choices","_choice","_categories","translator","Translator","log","debug","DragPreviewWrapper","React","Component","constructor","args","_defineProperty2","default","createRef","componentDidMount","containerRef","current","renderMath","render","createElement","ref","props","children","PropTypes","node","Categorize","c","onAnswersChange","session","answers","removeChoiceFromCategory","id","categoryId","choiceIndex","draggedChoice","model","maxChoicesPerCategory","newAnswers","undefined","answer","find","category","choices","length","moveChoiceToCategory","setState","showMaxChoiceAlert","removeChoice","showCorrect","state","onShowCorrectToggle","choicePosition","flexDirection","correctResponse","some","correctRes","alternateResponses","UNSAFE_componentWillReceiveProps","nextProps","nextModel","note","language","t","lng","choicesPosition","extraCSSRules","showNote","env","autoplayAudioEnabled","customAudioButton","mode","role","style","getPositionDirection","gap","categories","correct","buildState","disabled","rowLabels","categoriesPerRow","fontSizeFactor","nbOfRows","Math","ceil","existAlternate","existAlternateResponse","displayNote","alertMessage","alertTitle","onCloseText","showRationale","rationale","hasText","hasMedia","showTeacherInstructions","teacherInstructions","StyledUiLayout","Fragment","StyledCollapsible","labels","hidden","visible","PreviewPrompt","prompt","show","toggled","onToggle","toggleShowCorrect","StyledCategorize","display","flex","onDropChoice","dropChoice","onRemoveChoice","slice","StyledNote","dangerouslySetInnerHTML","__html","correctness","feedback","Feedback","AlertDialog","title","text","open","onClose","exports","object","shape","arrayOf","choice","string","func","isRequired","pauseMathObserver","resumeMathObserver","CategorizeProvider","event","active","data","activeDragItem","isValidDrop","over","draggedItem","overData","type","itemType","choiceData","value","categorizeRef","_extends2","key","uid","generateId","dropAnimation","DragProvider","onDragStart","onDragEnd","Provider","DragOverlay","renderDragOverlay","styled","UiLayout","color","backgroundColor","background","position","theme","marginBottom","spacing","Collapsible","paddingBottom","_default"],"sources":["../../src/categorize/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { styled } from '@mui/material/styles';\nimport { DragOverlay } from '@dnd-kit/core';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { buildState, removeChoiceFromCategory, moveChoiceToCategory } from '@pie-lib/categorize';\nimport { DragProvider, uid } from '@pie-lib/drag';\nimport { color, Feedback, Collapsible, hasText, hasMedia, PreviewPrompt, UiLayout } from '@pie-lib/render-ui';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport Translator from '@pie-lib/translator';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport Choices from './choices';\nimport Choice from './choice';\nimport Categories from './categories';\n\nconst { translator } = Translator;\nconst log = debug('@pie-ui:categorize');\n\nclass DragPreviewWrapper extends React.Component {\n static propTypes = {\n children: PropTypes.node,\n };\n\n containerRef = React.createRef();\n\n componentDidMount() {\n if (this.containerRef.current) {\n renderMath(this.containerRef.current);\n }\n }\n\n render() {\n return <div ref={this.containerRef}>{this.props.children}</div>;\n }\n}\n\nexport class Categorize extends React.Component {\n static propTypes = {\n model: PropTypes.object,\n session: PropTypes.shape({\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n choice: PropTypes.string,\n category: PropTypes.string,\n }),\n ),\n }),\n onAnswersChange: PropTypes.func.isRequired,\n onShowCorrectToggle: PropTypes.func.isRequired,\n pauseMathObserver: PropTypes.func,\n resumeMathObserver: PropTypes.func,\n };\n\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrect: false,\n showMaxChoiceAlert: false,\n };\n }\n\n removeChoice = (c) => {\n log('[removeChoice]: ', c);\n const { onAnswersChange, session } = this.props;\n const answers = removeChoiceFromCategory(c.id, c.categoryId, c.choiceIndex, session.answers);\n onAnswersChange(answers);\n };\n\n dropChoice = (categoryId, draggedChoice) => {\n const { session, onAnswersChange, model } = this.props;\n const { maxChoicesPerCategory = 0 } = model || {};\n const { answers = [] } = session || {};\n let newAnswers;\n if (draggedChoice) {\n log('[dropChoice] category: ', draggedChoice.categoryId, 'choice: ', draggedChoice);\n } else {\n log('[dropChoice] category: ', undefined, 'choice: ', undefined);\n }\n\n const answer = answers.find((answer) => answer.category === categoryId);\n\n // treat special case to replace the existing choice with the new one when maxChoicesPerCategory = 1\n if (draggedChoice && maxChoicesPerCategory === 1 && answer && answer.choices && answer.choices.length === 1) {\n // First, move the dragged choice to the target category (this will also remove it from source if allowMultiplePlacements is disabled)\n newAnswers = moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n );\n // Then, remove the existing choice from the target category (use newAnswers, not answers)\n newAnswers = removeChoiceFromCategory(answer.choices[0], categoryId, 0, newAnswers);\n }\n\n // treat special case when there are as many choices as maxChoicesPerCategory is\n else if (\n draggedChoice &&\n maxChoicesPerCategory > 1 &&\n answer &&\n answer.choices &&\n answer.choices.length === maxChoicesPerCategory\n ) {\n newAnswers = draggedChoice.categoryId\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n draggedChoice.categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : removeChoiceFromCategory(draggedChoice.id, draggedChoice.categoryId, draggedChoice.choiceIndex, answers);\n this.setState({ showMaxChoiceAlert: true });\n }\n\n // treat special case when there are more choices that maxChoicesPerCategory is (testing purpose in pits)\n else if (maxChoicesPerCategory !== 0 && answer && answer.choices && answer.choices.length > maxChoicesPerCategory) {\n newAnswers = answers;\n this.setState({ showMaxChoiceAlert: true });\n } else {\n newAnswers = draggedChoice\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : this.removeChoice(categoryId);\n }\n\n if (draggedChoice) {\n onAnswersChange(newAnswers);\n }\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { model } = this.props;\n const { model: nextModel } = nextProps;\n\n // check if the note is the default one for prev language and change to the default one for new language\n // this check is necessary in order to diferanciate between default and authour defined note\n // and only change between languages for default ones\n if (\n model.note &&\n model.language &&\n model.language !== nextModel.language &&\n model.note === translator.t('common:commonCorrectAnswerWithAlternates', { lng: model.language })\n ) {\n model.note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: nextModel.language });\n }\n\n this.setState({ showCorrect: false });\n }\n\n toggleShowCorrect = () =>\n this.setState({ showCorrect: !this.state.showCorrect }, () => {\n this.props.onShowCorrectToggle();\n });\n\n getPositionDirection = (choicePosition) => {\n let flexDirection;\n\n switch (choicePosition) {\n case 'left':\n flexDirection = 'row-reverse';\n break;\n case 'right':\n flexDirection = 'row';\n break;\n case 'below':\n flexDirection = 'column';\n break;\n default:\n // above\n flexDirection = 'column-reverse';\n break;\n }\n\n return flexDirection;\n };\n\n existAlternateResponse = (correctResponse) =>\n correctResponse?.some((correctRes) => correctRes.alternateResponses?.length > 0);\n\n render() {\n const { model, session } = this.props;\n const { showCorrect, showMaxChoiceAlert } = this.state;\n const {\n choicesPosition,\n extraCSSRules,\n note,\n showNote,\n env,\n language,\n maxChoicesPerCategory,\n autoplayAudioEnabled,\n customAudioButton,\n } = model;\n const { mode, role } = env || {};\n const choicePosition = choicesPosition || 'above';\n\n const style = {\n flexDirection: this.getPositionDirection(choicePosition),\n gap: '8px',\n };\n\n const { categories, choices, correct } = buildState(\n model.categories,\n model.choices,\n showCorrect ? model.correctResponse : session.answers,\n model.correctResponse,\n );\n\n log('[render] disabled: ', model.disabled);\n\n const { rowLabels, categoriesPerRow, correctResponse, fontSizeFactor } = model;\n const nbOfRows = (categories && Math.ceil(categories.length / categoriesPerRow)) || 0;\n const existAlternate = this.existAlternateResponse(correctResponse) || false;\n const displayNote =\n (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note && existAlternate;\n const alertMessage = translator.t('translation:categorize:limitMaxChoicesPerCategory', {\n lng: model.language,\n maxChoicesPerCategory,\n });\n\n const alertTitle = translator.t('common:warning', {\n lng: model.language,\n });\n\n const onCloseText = translator.t('common:cancel', {\n lng: model.language,\n });\n\n const showRationale = model.rationale && (hasText(model.rationale) || hasMedia(model.rationale));\n const showTeacherInstructions =\n model.teacherInstructions && (hasText(model.teacherInstructions) || hasMedia(model.teacherInstructions));\n\n return (\n <StyledUiLayout extraCSSRules={extraCSSRules} id={'main-container'} fontSizeFactor={fontSizeFactor}>\n {showTeacherInstructions && (\n <React.Fragment>\n <StyledCollapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n <PreviewPrompt prompt={model.teacherInstructions} />\n </StyledCollapsible>\n </React.Fragment>\n )}\n\n {model.prompt && (\n <PreviewPrompt\n prompt={model.prompt}\n autoplayAudioEnabled={autoplayAudioEnabled}\n customAudioButton={customAudioButton}\n />\n )}\n\n <CorrectAnswerToggle\n show={showCorrect || correct === false}\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n language={language}\n />\n\n <StyledCategorize style={style}>\n <div style={{ display: 'flex', flex: 1 }}>\n <Categories\n model={model}\n disabled={model.disabled}\n categories={categories}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n rowLabels={(rowLabels || []).slice(0, nbOfRows)}\n />\n </div>\n <Choices\n disabled={model.disabled}\n model={model}\n choices={choices}\n choicePosition={choicePosition}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n correct={correct}\n />\n </StyledCategorize>\n {displayNote && (\n <StyledNote\n dangerouslySetInnerHTML={{\n __html: note,\n }}\n />\n )}\n\n {showRationale && (\n <StyledCollapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}>\n <PreviewPrompt prompt={model.rationale} />\n </StyledCollapsible>\n )}\n\n {model.correctness && model.feedback && !showCorrect && (\n <Feedback correctness={model.correctness} feedback={model.feedback} />\n )}\n <AlertDialog\n title={alertTitle}\n text={alertMessage}\n open={showMaxChoiceAlert}\n onCloseText={onCloseText}\n onClose={() => this.setState({ showMaxChoiceAlert: false })}\n ></AlertDialog>\n </StyledUiLayout>\n );\n }\n}\n\nclass CategorizeProvider extends React.Component {\n static propTypes = {\n model: PropTypes.object,\n session: PropTypes.shape({\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n choice: PropTypes.string,\n category: PropTypes.string,\n }),\n ),\n }),\n onAnswersChange: PropTypes.func.isRequired,\n onShowCorrectToggle: PropTypes.func.isRequired,\n pauseMathObserver: PropTypes.func,\n resumeMathObserver: PropTypes.func,\n };\n\n constructor(props) {\n super(props);\n this.uid = uid.generateId();\n this.state = {\n activeDragItem: null,\n isValidDrop: false,\n };\n }\n\n onDragStart = (event) => {\n const { active } = event;\n const { pauseMathObserver } = this.props;\n\n if (pauseMathObserver) {\n pauseMathObserver();\n }\n\n if (active?.data?.current) {\n this.setState({\n activeDragItem: active.data.current,\n isValidDrop: false,\n });\n }\n };\n\n onDragEnd = (event) => {\n const { active, over } = event;\n const { resumeMathObserver } = this.props;\n\n // Check if drop is valid\n const draggedItem = active?.data?.current;\n const overData = over?.data?.current;\n const isValidDrop =\n over && active && draggedItem && draggedItem.type === 'choice' && overData && overData.itemType === 'categorize';\n\n this.setState({\n activeDragItem: null,\n isValidDrop: isValidDrop,\n });\n\n if (resumeMathObserver) {\n resumeMathObserver();\n }\n\n if (!active || !draggedItem || draggedItem.type !== 'choice') {\n return;\n }\n\n const choiceData = {\n id: draggedItem.id,\n categoryId: draggedItem.categoryId,\n choiceIndex: draggedItem.choiceIndex,\n value: draggedItem.value,\n itemType: draggedItem.itemType,\n };\n\n // Dropped outside a valid/known target: remove from source category,\n // which returns the choice to the choices pool.\n if (!over) {\n if (this.categorizeRef && this.categorizeRef.removeChoice && draggedItem.categoryId) {\n this.categorizeRef.removeChoice(choiceData);\n }\n return;\n }\n\n if (over.id === 'choices-board') {\n if (this.categorizeRef && this.categorizeRef.removeChoice && draggedItem.categoryId) {\n this.categorizeRef.removeChoice(choiceData);\n }\n return;\n }\n\n if (this.categorizeRef && this.categorizeRef.dropChoice) {\n this.categorizeRef.dropChoice(over.id, choiceData);\n }\n };\n\n renderDragOverlay = () => {\n const { activeDragItem } = this.state;\n const { model } = this.props;\n\n if (!activeDragItem) return null;\n\n if (activeDragItem.type === 'choice') {\n const choice = model.choices?.find((c) => c.id === activeDragItem.id);\n if (choice) {\n return <Choice key={choice.id} id={choice.id} {...choice} />;\n }\n }\n\n return null;\n };\n\n render() {\n const { isValidDrop } = this.state;\n // Disable drop animation for valid drops to prevent visual snap-back\n // Keep default animation for invalid drops to show visual feedback\n const dropAnimation = isValidDrop ? null : undefined;\n\n return (\n <DragProvider onDragStart={this.onDragStart} onDragEnd={this.onDragEnd}>\n <uid.Provider value={this.uid}>\n <Categorize ref={(ref) => (this.categorizeRef = ref)} {...this.props} />\n <DragOverlay dropAnimation={dropAnimation}>\n <DragPreviewWrapper>{this.renderDragOverlay()}</DragPreviewWrapper>\n </DragOverlay>\n </uid.Provider>\n </DragProvider>\n );\n }\n}\n\nconst StyledUiLayout = styled(UiLayout)({\n color: color.text(),\n backgroundColor: color.background(),\n position: 'relative',\n});\n\nconst StyledNote = styled('div')(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nconst StyledCategorize = styled('div')(({ theme }) => ({\n marginBottom: theme.spacing(1),\n display: 'flex',\n flexDirection: 'column',\n}));\n\nconst StyledCollapsible = styled(Collapsible)(({ theme }) => ({\n paddingBottom: theme.spacing(2),\n}));\n\nexport default CategorizeProvider;\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,KAAA,GAAAP,OAAA;AACA,IAAAQ,SAAA,GAAAR,OAAA;AACA,IAAAS,cAAA,GAAAT,OAAA;AACA,IAAAU,WAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,SAAA,GAAAX,OAAA;AACA,IAAAY,QAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,OAAA,GAAAd,sBAAA,CAAAC,OAAA;AACA,IAAAc,WAAA,GAAAf,sBAAA,CAAAC,OAAA;AAEA,MAAM;EAAEe;AAAW,CAAC,GAAGC,mBAAU;AACjC,MAAMC,GAAG,GAAG,IAAAC,cAAK,EAAC,oBAAoB,CAAC;AAEvC,MAAMC,kBAAkB,SAASC,cAAK,CAACC,SAAS,CAAC;EAAAC,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAA,IAAAC,gBAAA,CAAAC,OAAA,qCAKhCL,cAAK,CAACM,SAAS,CAAC,CAAC;EAAA;EAEhCC,iBAAiBA,CAAA,EAAG;IAClB,IAAI,IAAI,CAACC,YAAY,CAACC,OAAO,EAAE;MAC7B,IAAAC,yBAAU,EAAC,IAAI,CAACF,YAAY,CAACC,OAAO,CAAC;IACvC;EACF;EAEAE,MAAMA,CAAA,EAAG;IACP,oBAAOjC,MAAA,CAAA2B,OAAA,CAAAO,aAAA;MAAKC,GAAG,EAAE,IAAI,CAACL;IAAa,GAAE,IAAI,CAACM,KAAK,CAACC,QAAc,CAAC;EACjE;AACF;AAAC,IAAAX,gBAAA,CAAAC,OAAA,EAhBKN,kBAAkB,eACH;EACjBgB,QAAQ,EAAEC,kBAAS,CAACC;AACtB,CAAC;AAeI,MAAMC,UAAU,SAASlB,cAAK,CAACC,SAAS,CAAC;EAqB9CC,WAAWA,CAACY,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IAAC,IAAAV,gBAAA,CAAAC,OAAA,wBAQCc,CAAC,IAAK;MACpBtB,GAAG,CAAC,kBAAkB,EAAEsB,CAAC,CAAC;MAC1B,MAAM;QAAEC,eAAe;QAAEC;MAAQ,CAAC,GAAG,IAAI,CAACP,KAAK;MAC/C,MAAMQ,OAAO,GAAG,IAAAC,oCAAwB,EAACJ,CAAC,CAACK,EAAE,EAAEL,CAAC,CAACM,UAAU,EAAEN,CAAC,CAACO,WAAW,EAAEL,OAAO,CAACC,OAAO,CAAC;MAC5FF,eAAe,CAACE,OAAO,CAAC;IAC1B,CAAC;IAAA,IAAAlB,gBAAA,CAAAC,OAAA,sBAEY,CAACoB,UAAU,EAAEE,aAAa,KAAK;MAC1C,MAAM;QAAEN,OAAO;QAAED,eAAe;QAAEQ;MAAM,CAAC,GAAG,IAAI,CAACd,KAAK;MACtD,MAAM;QAAEe,qBAAqB,GAAG;MAAE,CAAC,GAAGD,KAAK,IAAI,CAAC,CAAC;MACjD,MAAM;QAAEN,OAAO,GAAG;MAAG,CAAC,GAAGD,OAAO,IAAI,CAAC,CAAC;MACtC,IAAIS,UAAU;MACd,IAAIH,aAAa,EAAE;QACjB9B,GAAG,CAAC,yBAAyB,EAAE8B,aAAa,CAACF,UAAU,EAAE,UAAU,EAAEE,aAAa,CAAC;MACrF,CAAC,MAAM;QACL9B,GAAG,CAAC,yBAAyB,EAAEkC,SAAS,EAAE,UAAU,EAAEA,SAAS,CAAC;MAClE;MAEA,MAAMC,MAAM,GAAGV,OAAO,CAACW,IAAI,CAAED,MAAM,IAAKA,MAAM,CAACE,QAAQ,KAAKT,UAAU,CAAC;;MAEvE;MACA,IAAIE,aAAa,IAAIE,qBAAqB,KAAK,CAAC,IAAIG,MAAM,IAAIA,MAAM,CAACG,OAAO,IAAIH,MAAM,CAACG,OAAO,CAACC,MAAM,KAAK,CAAC,EAAE;QAC3G;QACAN,UAAU,GAAG,IAAAO,gCAAoB,EAC/BV,aAAa,CAACH,EAAE,EAChBG,aAAa,CAACF,UAAU,EACxBA,UAAU,EACVE,aAAa,CAACD,WAAW,EACzBJ,OACF,CAAC;QACD;QACAQ,UAAU,GAAG,IAAAP,oCAAwB,EAACS,MAAM,CAACG,OAAO,CAAC,CAAC,CAAC,EAAEV,UAAU,EAAE,CAAC,EAAEK,UAAU,CAAC;MACrF;;MAEA;MAAA,KACK,IACHH,aAAa,IACbE,qBAAqB,GAAG,CAAC,IACzBG,MAAM,IACNA,MAAM,CAACG,OAAO,IACdH,MAAM,CAACG,OAAO,CAACC,MAAM,KAAKP,qBAAqB,EAC/C;QACAC,UAAU,GAAGH,aAAa,CAACF,UAAU,GACjC,IAAAY,gCAAoB,EAClBV,aAAa,CAACH,EAAE,EAChBG,aAAa,CAACF,UAAU,EACxBE,aAAa,CAACF,UAAU,EACxBE,aAAa,CAACD,WAAW,EACzBJ,OACF,CAAC,GACD,IAAAC,oCAAwB,EAACI,aAAa,CAACH,EAAE,EAAEG,aAAa,CAACF,UAAU,EAAEE,aAAa,CAACD,WAAW,EAAEJ,OAAO,CAAC;QAC5G,IAAI,CAACgB,QAAQ,CAAC;UAAEC,kBAAkB,EAAE;QAAK,CAAC,CAAC;MAC7C;;MAEA;MAAA,KACK,IAAIV,qBAAqB,KAAK,CAAC,IAAIG,MAAM,IAAIA,MAAM,CAACG,OAAO,IAAIH,MAAM,CAACG,OAAO,CAACC,MAAM,GAAGP,qBAAqB,EAAE;QACjHC,UAAU,GAAGR,OAAO;QACpB,IAAI,CAACgB,QAAQ,CAAC;UAAEC,kBAAkB,EAAE;QAAK,CAAC,CAAC;MAC7C,CAAC,MAAM;QACLT,UAAU,GAAGH,aAAa,GACtB,IAAAU,gCAAoB,EAClBV,aAAa,CAACH,EAAE,EAChBG,aAAa,CAACF,UAAU,EACxBA,UAAU,EACVE,aAAa,CAACD,WAAW,EACzBJ,OACF,CAAC,GACD,IAAI,CAACkB,YAAY,CAACf,UAAU,CAAC;MACnC;MAEA,IAAIE,aAAa,EAAE;QACjBP,eAAe,CAACU,UAAU,CAAC;MAC7B;IACF,CAAC;IAAA,IAAA1B,gBAAA,CAAAC,OAAA,6BAqBmB,MAClB,IAAI,CAACiC,QAAQ,CAAC;MAAEG,WAAW,EAAE,CAAC,IAAI,CAACC,KAAK,CAACD;IAAY,CAAC,EAAE,MAAM;MAC5D,IAAI,CAAC3B,KAAK,CAAC6B,mBAAmB,CAAC,CAAC;IAClC,CAAC,CAAC;IAAA,IAAAvC,gBAAA,CAAAC,OAAA,gCAEoBuC,cAAc,IAAK;MACzC,IAAIC,aAAa;MAEjB,QAAQD,cAAc;QACpB,KAAK,MAAM;UACTC,aAAa,GAAG,aAAa;UAC7B;QACF,KAAK,OAAO;UACVA,aAAa,GAAG,KAAK;UACrB;QACF,KAAK,OAAO;UACVA,aAAa,GAAG,QAAQ;UACxB;QACF;UACE;UACAA,aAAa,GAAG,gBAAgB;UAChC;MACJ;MAEA,OAAOA,aAAa;IACtB,CAAC;IAAA,IAAAzC,gBAAA,CAAAC,OAAA,kCAEyByC,eAAe,IACvCA,eAAe,EAAEC,IAAI,CAAEC,UAAU,IAAKA,UAAU,CAACC,kBAAkB,EAAEb,MAAM,GAAG,CAAC,CAAC;IAhIhF,IAAI,CAACM,KAAK,GAAG;MACXD,WAAW,EAAE,KAAK;MAClBF,kBAAkB,EAAE;IACtB,CAAC;EACH;EA6EAW,gCAAgCA,CAACC,SAAS,EAAE;IAC1C,MAAM;MAAEvB;IAAM,CAAC,GAAG,IAAI,CAACd,KAAK;IAC5B,MAAM;MAAEc,KAAK,EAAEwB;IAAU,CAAC,GAAGD,SAAS;;IAEtC;IACA;IACA;IACA,IACEvB,KAAK,CAACyB,IAAI,IACVzB,KAAK,CAAC0B,QAAQ,IACd1B,KAAK,CAAC0B,QAAQ,KAAKF,SAAS,CAACE,QAAQ,IACrC1B,KAAK,CAACyB,IAAI,KAAK1D,UAAU,CAAC4D,CAAC,CAAC,0CAA0C,EAAE;MAAEC,GAAG,EAAE5B,KAAK,CAAC0B;IAAS,CAAC,CAAC,EAChG;MACA1B,KAAK,CAACyB,IAAI,GAAG1D,UAAU,CAAC4D,CAAC,CAAC,0CAA0C,EAAE;QAAEC,GAAG,EAAEJ,SAAS,CAACE;MAAS,CAAC,CAAC;IACpG;IAEA,IAAI,CAAChB,QAAQ,CAAC;MAAEG,WAAW,EAAE;IAAM,CAAC,CAAC;EACvC;EAgCA9B,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEiB,KAAK;MAAEP;IAAQ,CAAC,GAAG,IAAI,CAACP,KAAK;IACrC,MAAM;MAAE2B,WAAW;MAAEF;IAAmB,CAAC,GAAG,IAAI,CAACG,KAAK;IACtD,MAAM;MACJe,eAAe;MACfC,aAAa;MACbL,IAAI;MACJM,QAAQ;MACRC,GAAG;MACHN,QAAQ;MACRzB,qBAAqB;MACrBgC,oBAAoB;MACpBC;IACF,CAAC,GAAGlC,KAAK;IACT,MAAM;MAAEmC,IAAI;MAAEC;IAAK,CAAC,GAAGJ,GAAG,IAAI,CAAC,CAAC;IAChC,MAAMhB,cAAc,GAAGa,eAAe,IAAI,OAAO;IAEjD,MAAMQ,KAAK,GAAG;MACZpB,aAAa,EAAE,IAAI,CAACqB,oBAAoB,CAACtB,cAAc,CAAC;MACxDuB,GAAG,EAAE;IACP,CAAC;IAED,MAAM;MAAEC,UAAU;MAAEjC,OAAO;MAAEkC;IAAQ,CAAC,GAAG,IAAAC,sBAAU,EACjD1C,KAAK,CAACwC,UAAU,EAChBxC,KAAK,CAACO,OAAO,EACbM,WAAW,GAAGb,KAAK,CAACkB,eAAe,GAAGzB,OAAO,CAACC,OAAO,EACrDM,KAAK,CAACkB,eACR,CAAC;IAEDjD,GAAG,CAAC,qBAAqB,EAAE+B,KAAK,CAAC2C,QAAQ,CAAC;IAE1C,MAAM;MAAEC,SAAS;MAAEC,gBAAgB;MAAE3B,eAAe;MAAE4B;IAAe,CAAC,GAAG9C,KAAK;IAC9E,MAAM+C,QAAQ,GAAIP,UAAU,IAAIQ,IAAI,CAACC,IAAI,CAACT,UAAU,CAAChC,MAAM,GAAGqC,gBAAgB,CAAC,IAAK,CAAC;IACrF,MAAMK,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACjC,eAAe,CAAC,IAAI,KAAK;IAC5E,MAAMkC,WAAW,GACf,CAACvC,WAAW,IAAKsB,IAAI,KAAK,MAAM,IAAIC,IAAI,KAAK,YAAa,KAAKL,QAAQ,IAAIN,IAAI,IAAIyB,cAAc;IACnG,MAAMG,YAAY,GAAGtF,UAAU,CAAC4D,CAAC,CAAC,mDAAmD,EAAE;MACrFC,GAAG,EAAE5B,KAAK,CAAC0B,QAAQ;MACnBzB;IACF,CAAC,CAAC;IAEF,MAAMqD,UAAU,GAAGvF,UAAU,CAAC4D,CAAC,CAAC,gBAAgB,EAAE;MAChDC,GAAG,EAAE5B,KAAK,CAAC0B;IACb,CAAC,CAAC;IAEF,MAAM6B,WAAW,GAAGxF,UAAU,CAAC4D,CAAC,CAAC,eAAe,EAAE;MAChDC,GAAG,EAAE5B,KAAK,CAAC0B;IACb,CAAC,CAAC;IAEF,MAAM8B,aAAa,GAAGxD,KAAK,CAACyD,SAAS,KAAK,IAAAC,iBAAO,EAAC1D,KAAK,CAACyD,SAAS,CAAC,IAAI,IAAAE,kBAAQ,EAAC3D,KAAK,CAACyD,SAAS,CAAC,CAAC;IAChG,MAAMG,uBAAuB,GAC3B5D,KAAK,CAAC6D,mBAAmB,KAAK,IAAAH,iBAAO,EAAC1D,KAAK,CAAC6D,mBAAmB,CAAC,IAAI,IAAAF,kBAAQ,EAAC3D,KAAK,CAAC6D,mBAAmB,CAAC,CAAC;IAE1G,oBACE/G,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAAC8E,cAAc;MAAChC,aAAa,EAAEA,aAAc;MAAClC,EAAE,EAAE,gBAAiB;MAACkD,cAAc,EAAEA;IAAe,GAChGc,uBAAuB,iBACtB9G,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAAClC,MAAA,CAAA2B,OAAK,CAACsF,QAAQ,qBACbjH,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACgF,iBAAiB;MAChBC,MAAM,EAAE;QACNC,MAAM,EAAE,2BAA2B;QACnCC,OAAO,EAAE;MACX;IAAE,gBAEFrH,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACxB,SAAA,CAAA4G,aAAa;MAACC,MAAM,EAAErE,KAAK,CAAC6D;IAAoB,CAAE,CAClC,CACL,CACjB,EAEA7D,KAAK,CAACqE,MAAM,iBACXvH,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACxB,SAAA,CAAA4G,aAAa;MACZC,MAAM,EAAErE,KAAK,CAACqE,MAAO;MACrBpC,oBAAoB,EAAEA,oBAAqB;MAC3CC,iBAAiB,EAAEA;IAAkB,CACtC,CACF,eAEDpF,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAAC3B,oBAAA,CAAAoB,OAAmB;MAClB6F,IAAI,EAAEzD,WAAW,IAAI4B,OAAO,KAAK,KAAM;MACvC8B,OAAO,EAAE1D,WAAY;MACrB2D,QAAQ,EAAE,IAAI,CAACC,iBAAkB;MACjC/C,QAAQ,EAAEA;IAAS,CACpB,CAAC,eAEF5E,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAAC0F,gBAAgB;MAACrC,KAAK,EAAEA;IAAM,gBAC7BvF,MAAA,CAAA2B,OAAA,CAAAO,aAAA;MAAKqD,KAAK,EAAE;QAAEsC,OAAO,EAAE,MAAM;QAAEC,IAAI,EAAE;MAAE;IAAE,gBACvC9H,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAAClB,WAAA,CAAAW,OAAU;MACTuB,KAAK,EAAEA,KAAM;MACb2C,QAAQ,EAAE3C,KAAK,CAAC2C,QAAS;MACzBH,UAAU,EAAEA,UAAW;MACvBqC,YAAY,EAAE,IAAI,CAACC,UAAW;MAC9BC,cAAc,EAAE,IAAI,CAACnE,YAAa;MAClCgC,SAAS,EAAE,CAACA,SAAS,IAAI,EAAE,EAAEoC,KAAK,CAAC,CAAC,EAAEjC,QAAQ;IAAE,CACjD,CACE,CAAC,eACNjG,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACpB,QAAA,CAAAa,OAAO;MACNkE,QAAQ,EAAE3C,KAAK,CAAC2C,QAAS;MACzB3C,KAAK,EAAEA,KAAM;MACbO,OAAO,EAAEA,OAAQ;MACjBS,cAAc,EAAEA,cAAe;MAC/B6D,YAAY,EAAE,IAAI,CAACC,UAAW;MAC9BC,cAAc,EAAE,IAAI,CAACnE,YAAa;MAClC6B,OAAO,EAAEA;IAAQ,CAClB,CACe,CAAC,EAClBW,WAAW,iBACVtG,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACiG,UAAU;MACTC,uBAAuB,EAAE;QACvBC,MAAM,EAAE1D;MACV;IAAE,CACH,CACF,EAEA+B,aAAa,iBACZ1G,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACgF,iBAAiB;MAACC,MAAM,EAAE;QAAEC,MAAM,EAAE,gBAAgB;QAAEC,OAAO,EAAE;MAAiB;IAAE,gBACjFrH,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACxB,SAAA,CAAA4G,aAAa;MAACC,MAAM,EAAErE,KAAK,CAACyD;IAAU,CAAE,CACxB,CACpB,EAEAzD,KAAK,CAACoF,WAAW,IAAIpF,KAAK,CAACqF,QAAQ,IAAI,CAACxE,WAAW,iBAClD/D,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACxB,SAAA,CAAA8H,QAAQ;MAACF,WAAW,EAAEpF,KAAK,CAACoF,WAAY;MAACC,QAAQ,EAAErF,KAAK,CAACqF;IAAS,CAAE,CACtE,eACDvI,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACrB,SAAA,CAAA4H,WAAW;MACVC,KAAK,EAAElC,UAAW;MAClBmC,IAAI,EAAEpC,YAAa;MACnBqC,IAAI,EAAE/E,kBAAmB;MACzB4C,WAAW,EAAEA,WAAY;MACzBoC,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACjF,QAAQ,CAAC;QAAEC,kBAAkB,EAAE;MAAM,CAAC;IAAE,CAChD,CACA,CAAC;EAErB;AACF;AAACiF,OAAA,CAAAtG,UAAA,GAAAA,UAAA;AAAA,IAAAd,gBAAA,CAAAC,OAAA,EA7RYa,UAAU,eACF;EACjBU,KAAK,EAAEZ,kBAAS,CAACyG,MAAM;EACvBpG,OAAO,EAAEL,kBAAS,CAAC0G,KAAK,CAAC;IACvBpG,OAAO,EAAEN,kBAAS,CAAC2G,OAAO,CACxB3G,kBAAS,CAAC0G,KAAK,CAAC;MACdE,MAAM,EAAE5G,kBAAS,CAAC6G,MAAM;MACxB3F,QAAQ,EAAElB,kBAAS,CAAC6G;IACtB,CAAC,CACH;EACF,CAAC,CAAC;EACFzG,eAAe,EAAEJ,kBAAS,CAAC8G,IAAI,CAACC,UAAU;EAC1CpF,mBAAmB,EAAE3B,kBAAS,CAAC8G,IAAI,CAACC,UAAU;EAC9CC,iBAAiB,EAAEhH,kBAAS,CAAC8G,IAAI;EACjCG,kBAAkB,EAAEjH,kBAAS,CAAC8G;AAChC,CAAC;AAAA,IAAA1H,gBAAA,CAAAC,OAAA,EAfUa,UAAU,kBAiBC;EACpBqD,QAAQ,EAAE;AACZ,CAAC;AA4QH,MAAM2D,kBAAkB,SAASlI,cAAK,CAACC,SAAS,CAAC;EAiB/CC,WAAWA,CAACY,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IAAC,IAAAV,gBAAA,CAAAC,OAAA,uBAQA8H,KAAK,IAAK;MACvB,MAAM;QAAEC;MAAO,CAAC,GAAGD,KAAK;MACxB,MAAM;QAAEH;MAAkB,CAAC,GAAG,IAAI,CAAClH,KAAK;MAExC,IAAIkH,iBAAiB,EAAE;QACrBA,iBAAiB,CAAC,CAAC;MACrB;MAEA,IAAII,MAAM,EAAEC,IAAI,EAAE5H,OAAO,EAAE;QACzB,IAAI,CAAC6B,QAAQ,CAAC;UACZgG,cAAc,EAAEF,MAAM,CAACC,IAAI,CAAC5H,OAAO;UACnC8H,WAAW,EAAE;QACf,CAAC,CAAC;MACJ;IACF,CAAC;IAAA,IAAAnI,gBAAA,CAAAC,OAAA,qBAEY8H,KAAK,IAAK;MACrB,MAAM;QAAEC,MAAM;QAAEI;MAAK,CAAC,GAAGL,KAAK;MAC9B,MAAM;QAAEF;MAAmB,CAAC,GAAG,IAAI,CAACnH,KAAK;;MAEzC;MACA,MAAM2H,WAAW,GAAGL,MAAM,EAAEC,IAAI,EAAE5H,OAAO;MACzC,MAAMiI,QAAQ,GAAGF,IAAI,EAAEH,IAAI,EAAE5H,OAAO;MACpC,MAAM8H,WAAW,GACfC,IAAI,IAAIJ,MAAM,IAAIK,WAAW,IAAIA,WAAW,CAACE,IAAI,KAAK,QAAQ,IAAID,QAAQ,IAAIA,QAAQ,CAACE,QAAQ,KAAK,YAAY;MAElH,IAAI,CAACtG,QAAQ,CAAC;QACZgG,cAAc,EAAE,IAAI;QACpBC,WAAW,EAAEA;MACf,CAAC,CAAC;MAEF,IAAIN,kBAAkB,EAAE;QACtBA,kBAAkB,CAAC,CAAC;MACtB;MAEA,IAAI,CAACG,MAAM,IAAI,CAACK,WAAW,IAAIA,WAAW,CAACE,IAAI,KAAK,QAAQ,EAAE;QAC5D;MACF;MAEA,MAAME,UAAU,GAAG;QACjBrH,EAAE,EAAEiH,WAAW,CAACjH,EAAE;QAClBC,UAAU,EAAEgH,WAAW,CAAChH,UAAU;QAClCC,WAAW,EAAE+G,WAAW,CAAC/G,WAAW;QACpCoH,KAAK,EAAEL,WAAW,CAACK,KAAK;QACxBF,QAAQ,EAAEH,WAAW,CAACG;MACxB,CAAC;;MAED;MACA;MACA,IAAI,CAACJ,IAAI,EAAE;QACT,IAAI,IAAI,CAACO,aAAa,IAAI,IAAI,CAACA,aAAa,CAACvG,YAAY,IAAIiG,WAAW,CAAChH,UAAU,EAAE;UACnF,IAAI,CAACsH,aAAa,CAACvG,YAAY,CAACqG,UAAU,CAAC;QAC7C;QACA;MACF;MAEA,IAAIL,IAAI,CAAChH,EAAE,KAAK,eAAe,EAAE;QAC/B,IAAI,IAAI,CAACuH,aAAa,IAAI,IAAI,CAACA,aAAa,CAACvG,YAAY,IAAIiG,WAAW,CAAChH,UAAU,EAAE;UACnF,IAAI,CAACsH,aAAa,CAACvG,YAAY,CAACqG,UAAU,CAAC;QAC7C;QACA;MACF;MAEA,IAAI,IAAI,CAACE,aAAa,IAAI,IAAI,CAACA,aAAa,CAACrC,UAAU,EAAE;QACvD,IAAI,CAACqC,aAAa,CAACrC,UAAU,CAAC8B,IAAI,CAAChH,EAAE,EAAEqH,UAAU,CAAC;MACpD;IACF,CAAC;IAAA,IAAAzI,gBAAA,CAAAC,OAAA,6BAEmB,MAAM;MACxB,MAAM;QAAEiI;MAAe,CAAC,GAAG,IAAI,CAAC5F,KAAK;MACrC,MAAM;QAAEd;MAAM,CAAC,GAAG,IAAI,CAACd,KAAK;MAE5B,IAAI,CAACwH,cAAc,EAAE,OAAO,IAAI;MAEhC,IAAIA,cAAc,CAACK,IAAI,KAAK,QAAQ,EAAE;QACpC,MAAMf,MAAM,GAAGhG,KAAK,CAACO,OAAO,EAAEF,IAAI,CAAEd,CAAC,IAAKA,CAAC,CAACK,EAAE,KAAK8G,cAAc,CAAC9G,EAAE,CAAC;QACrE,IAAIoG,MAAM,EAAE;UACV,oBAAOlJ,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACnB,OAAA,CAAAY,OAAM,MAAA2I,SAAA,CAAA3I,OAAA;YAAC4I,GAAG,EAAErB,MAAM,CAACpG,EAAG;YAACA,EAAE,EAAEoG,MAAM,CAACpG;UAAG,GAAKoG,MAAM,CAAG,CAAC;QAC9D;MACF;MAEA,OAAO,IAAI;IACb,CAAC;IAzFC,IAAI,CAACsB,GAAG,GAAGA,SAAG,CAACC,UAAU,CAAC,CAAC;IAC3B,IAAI,CAACzG,KAAK,GAAG;MACX4F,cAAc,EAAE,IAAI;MACpBC,WAAW,EAAE;IACf,CAAC;EACH;EAsFA5H,MAAMA,CAAA,EAAG;IACP,MAAM;MAAE4H;IAAY,CAAC,GAAG,IAAI,CAAC7F,KAAK;IAClC;IACA;IACA,MAAM0G,aAAa,GAAGb,WAAW,GAAG,IAAI,GAAGxG,SAAS;IAEpD,oBACErD,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACzB,KAAA,CAAAkK,YAAY;MAACC,WAAW,EAAE,IAAI,CAACA,WAAY;MAACC,SAAS,EAAE,IAAI,CAACA;IAAU,gBACrE7K,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACzB,KAAA,CAAA+J,GAAG,CAACM,QAAQ;MAACV,KAAK,EAAE,IAAI,CAACI;IAAI,gBAC5BxK,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACM,UAAU,MAAA8H,SAAA,CAAA3I,OAAA;MAACQ,GAAG,EAAGA,GAAG,IAAM,IAAI,CAACkI,aAAa,GAAGlI;IAAK,GAAK,IAAI,CAACC,KAAK,CAAG,CAAC,eACxEpC,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAAC5B,KAAA,CAAAyK,WAAW;MAACL,aAAa,EAAEA;IAAc,gBACxC1K,MAAA,CAAA2B,OAAA,CAAAO,aAAA,CAACb,kBAAkB,QAAE,IAAI,CAAC2J,iBAAiB,CAAC,CAAsB,CACvD,CACD,CACF,CAAC;EAEnB;AACF;AAAC,IAAAtJ,gBAAA,CAAAC,OAAA,EA/HK6H,kBAAkB,eACH;EACjBtG,KAAK,EAAEZ,kBAAS,CAACyG,MAAM;EACvBpG,OAAO,EAAEL,kBAAS,CAAC0G,KAAK,CAAC;IACvBpG,OAAO,EAAEN,kBAAS,CAAC2G,OAAO,CACxB3G,kBAAS,CAAC0G,KAAK,CAAC;MACdE,MAAM,EAAE5G,kBAAS,CAAC6G,MAAM;MACxB3F,QAAQ,EAAElB,kBAAS,CAAC6G;IACtB,CAAC,CACH;EACF,CAAC,CAAC;EACFzG,eAAe,EAAEJ,kBAAS,CAAC8G,IAAI,CAACC,UAAU;EAC1CpF,mBAAmB,EAAE3B,kBAAS,CAAC8G,IAAI,CAACC,UAAU;EAC9CC,iBAAiB,EAAEhH,kBAAS,CAAC8G,IAAI;EACjCG,kBAAkB,EAAEjH,kBAAS,CAAC8G;AAChC,CAAC;AAkHH,MAAMpC,cAAc,GAAG,IAAAiE,cAAM,EAACC,kBAAQ,CAAC,CAAC;EACtCC,KAAK,EAAEA,eAAK,CAACxC,IAAI,CAAC,CAAC;EACnByC,eAAe,EAAED,eAAK,CAACE,UAAU,CAAC,CAAC;EACnCC,QAAQ,EAAE;AACZ,CAAC,CAAC;AAEF,MAAMnD,UAAU,GAAG,IAAA8C,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEM;AAAM,CAAC,MAAM;EAC/CC,YAAY,EAAED,KAAK,CAACE,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,MAAM7D,gBAAgB,GAAG,IAAAqD,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEM;AAAM,CAAC,MAAM;EACrDC,YAAY,EAAED,KAAK,CAACE,OAAO,CAAC,CAAC,CAAC;EAC9B5D,OAAO,EAAE,MAAM;EACf1D,aAAa,EAAE;AACjB,CAAC,CAAC,CAAC;AAEH,MAAM+C,iBAAiB,GAAG,IAAA+D,cAAM,EAACS,qBAAW,CAAC,CAAC,CAAC;EAAEH;AAAM,CAAC,MAAM;EAC5DI,aAAa,EAAEJ,KAAK,CAACE,OAAO,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAAC,IAAAG,QAAA,GAAA9C,OAAA,CAAAnH,OAAA,GAEW6H,kBAAkB","ignoreList":[]}