@cuemath/leap 3.2.14-as1 → 3.2.15-beta-0.1
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/dist/assets/illustrations/illustrations.js +1 -0
- package/dist/assets/illustrations/illustrations.js.map +1 -1
- package/dist/assets/lottie/lottie.js +5 -0
- package/dist/assets/lottie/lottie.js.map +1 -1
- package/dist/features/analytics-events/platform-events-student.js +2 -1
- package/dist/features/analytics-events/platform-events-student.js.map +1 -1
- package/dist/features/analytics-events/platform-events-teacher.js +6 -4
- package/dist/features/analytics-events/platform-events-teacher.js.map +1 -1
- package/dist/features/analytics-events/whitelist-events.js +10 -8
- package/dist/features/analytics-events/whitelist-events.js.map +1 -1
- package/dist/features/chapters-v2/utils/node-card-utils.js +2 -2
- package/dist/features/chapters-v2/utils/node-card-utils.js.map +1 -1
- package/dist/features/communication/pub-sub/constants.js +7 -4
- package/dist/features/communication/pub-sub/constants.js.map +1 -1
- package/dist/features/homework/homework-card-view.js +85 -97
- package/dist/features/homework/homework-card-view.js.map +1 -1
- package/dist/features/homework/homework-card.js +44 -42
- package/dist/features/homework/homework-card.js.map +1 -1
- package/dist/features/homework/hw-card-list/hw-card-list-view.js +31 -29
- package/dist/features/homework/hw-card-list/hw-card-list-view.js.map +1 -1
- package/dist/features/homework/hw-card-list/hw-card-list.js +57 -50
- package/dist/features/homework/hw-card-list/hw-card-list.js.map +1 -1
- package/dist/features/homework/utils.js +33 -27
- package/dist/features/homework/utils.js.map +1 -1
- package/dist/features/journey/hooks/use-home-page-journey/tooltip-item.js +17 -11
- package/dist/features/journey/hooks/use-home-page-journey/tooltip-item.js.map +1 -1
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-assigned.js +72 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-assigned.js.map +1 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-attempt-journey.js +59 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-attempt-journey.js.map +1 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-dashboard-journey.js +63 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-dashboard-journey.js.map +1 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-intro-journey.js +67 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-intro-journey.js.map +1 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-progress-journey.js +70 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-progress-journey.js.map +1 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-review-journey.js +59 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-review-journey.js.map +1 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-unassign-journey.js +59 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-puzzle-unassign-journey.js.map +1 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-teacher-puzzle-assigned-journey.js +70 -0
- package/dist/features/journey/hooks/use-puzzles-journey/use-teacher-puzzle-assigned-journey.js.map +1 -0
- package/dist/features/journey/journey-id/journey-id-student.js +1 -1
- package/dist/features/journey/journey-id/journey-id-student.js.map +1 -1
- package/dist/features/journey/journey-id/journey-id-teacher.js +2 -2
- package/dist/features/journey/journey-id/journey-id-teacher.js.map +1 -1
- package/dist/features/puzzles/api/puzzle-dashboard.js +10 -0
- package/dist/features/puzzles/api/puzzle-dashboard.js.map +1 -0
- package/dist/features/puzzles/comps/puzzle-card-styled.js +24 -69
- package/dist/features/puzzles/comps/puzzle-card-styled.js.map +1 -1
- package/dist/features/puzzles/comps/puzzle-card.js +64 -30
- package/dist/features/puzzles/comps/puzzle-card.js.map +1 -1
- package/dist/features/puzzles/constants/puzzle-container.js +8 -0
- package/dist/features/puzzles/constants/puzzle-container.js.map +1 -0
- package/dist/features/puzzles/puzzle-analytics-events.js +11 -0
- package/dist/features/puzzles/puzzle-analytics-events.js.map +1 -0
- package/dist/features/puzzles/puzzle-container/puzzle-container-styled.js +55 -25
- package/dist/features/puzzles/puzzle-container/puzzle-container-styled.js.map +1 -1
- package/dist/features/puzzles/puzzle-container/puzzle-container-view.js +55 -0
- package/dist/features/puzzles/puzzle-container/puzzle-container-view.js.map +1 -0
- package/dist/features/puzzles/puzzle-container/puzzle-container.js +100 -107
- package/dist/features/puzzles/puzzle-container/puzzle-container.js.map +1 -1
- package/dist/features/puzzles/puzzle-dashboard/puzzle-dashboard-styled.js +37 -0
- package/dist/features/puzzles/puzzle-dashboard/puzzle-dashboard-styled.js.map +1 -0
- package/dist/features/puzzles/puzzle-dashboard/puzzle-dashboard.js +110 -0
- package/dist/features/puzzles/puzzle-dashboard/puzzle-dashboard.js.map +1 -0
- package/dist/features/puzzles/puzzle-feedback-celebration/puzzle-feedback-celebration.js +1 -1
- package/dist/features/puzzles/puzzle-feedback-celebration/puzzle-feedback-celebration.js.map +1 -1
- package/dist/features/puzzles/utils/puzzle-pattern.js +28 -13
- package/dist/features/puzzles/utils/puzzle-pattern.js.map +1 -1
- package/dist/features/worksheet/worksheet/hooks/use-worksheet-journey.js +28 -0
- package/dist/features/worksheet/worksheet/hooks/use-worksheet-journey.js.map +1 -0
- package/dist/features/worksheet/worksheet/mocks/behaviors/puzzle-card.js +4 -2
- package/dist/features/worksheet/worksheet/mocks/behaviors/puzzle-card.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-helpers.js +52 -51
- package/dist/features/worksheet/worksheet/worksheet-helpers.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-question/learnosity-question.js +16 -12
- package/dist/features/worksheet/worksheet/worksheet-question/learnosity-question.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question-styled.js +101 -47
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question-styled.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question.js +149 -146
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller.js +242 -207
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-styled.js +37 -37
- package/dist/features/worksheet/worksheet/worksheet-styled.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-types.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet.js +307 -313
- package/dist/features/worksheet/worksheet/worksheet.js.map +1 -1
- package/dist/features/worksheet/worksheet-preview/hooks/use-worksheet-layout.js +1 -1
- package/dist/features/worksheet/worksheet-preview/hooks/use-worksheet-layout.js.map +1 -1
- package/dist/features/worksheet/worksheet-preview/worksheet-preview.js +44 -35
- package/dist/features/worksheet/worksheet-preview/worksheet-preview.js.map +1 -1
- package/dist/index.d.ts +87 -4
- package/dist/index.js +250 -240
- package/dist/index.js.map +1 -1
- package/dist/static/puzzle-blue-lottie.7017e2e8.json +1 -0
- package/dist/static/puzzle-blue-lottie.bf64ebc5.json +12760 -0
- package/dist/static/puzzle-dashboard-banner.b7956519.svg +1 -0
- package/dist/static/puzzle-green-lottie.1da90698.json +1 -0
- package/dist/static/puzzle-orange-lottie.cfcf3724.json +1 -0
- package/dist/static/puzzle-purple-lottie.e70de110.json +9860 -0
- package/dist/static/puzzle-yellow-lottie.275b5cf4.json +1 -0
- package/package.json +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"puzzle-card.js","sources":["../../../../../../src/features/worksheet/worksheet/mocks/behaviors/puzzle-card.ts"],"sourcesContent":["import type { IWorksheetBehavior } from '../../worksheet-types';\n\nconst PUZZLE_CARD_RESUME_BEHAVIOR: IWorksheetBehavior = {\n hints: false,\n navigationMode: 'CURRENT',\n initialQuestion: 'CURRENT',\n maximumAttempts: -2, // No response can be given for puzzle cards.\n minimumAccuracy: 0,\n teacherValidationEnabled: false,\n canTeacherValidate: false,\n validation: false,\n review: false,\n canAttempt: true,\n canExceedAttempts: false,\n checkButtonLabel: '',\n retryButtonLabel: '',\n canMarkForReview: false,\n canShowDesmosCalc: false,\n};\n\nconst PUZZLE_CARD_REVIEW_BEHAVIOR: IWorksheetBehavior = {\n hints: false,\n navigationMode: 'CURRENT',\n initialQuestion: 'CURRENT',\n maximumAttempts: -2,\n minimumAccuracy: 0,\n teacherValidationEnabled: false,\n canTeacherValidate: true,\n validation: true,\n review: true,\n canAttempt: false,\n canExceedAttempts: false,\n checkButtonLabel: '',\n retryButtonLabel: '',\n canMarkForReview: false,\n canShowDesmosCalc: false,\n};\n\nexport { PUZZLE_CARD_RESUME_BEHAVIOR, PUZZLE_CARD_REVIEW_BEHAVIOR };\n"],"names":["PUZZLE_CARD_RESUME_BEHAVIOR","PUZZLE_CARD_REVIEW_BEHAVIOR"],"mappings":"AAEA,MAAMA,IAAkD;AAAA,EACtD,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA;AAAA,EACjB,iBAAiB;AAAA,EACjB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,mBAAmB;
|
1
|
+
{"version":3,"file":"puzzle-card.js","sources":["../../../../../../src/features/worksheet/worksheet/mocks/behaviors/puzzle-card.ts"],"sourcesContent":["import type { IWorksheetBehavior } from '../../worksheet-types';\n\nconst PUZZLE_CARD_RESUME_BEHAVIOR: IWorksheetBehavior = {\n hints: false,\n navigationMode: 'CURRENT',\n initialQuestion: 'CURRENT',\n maximumAttempts: -2, // No response can be given for puzzle cards.\n minimumAccuracy: 0,\n teacherValidationEnabled: false,\n canTeacherValidate: false,\n validation: false,\n review: false,\n canAttempt: true,\n canExceedAttempts: false,\n checkButtonLabel: '',\n retryButtonLabel: '',\n canMarkForReview: false,\n canShowDesmosCalc: false,\n solutionHidden: true,\n};\n\nconst PUZZLE_CARD_REVIEW_BEHAVIOR: IWorksheetBehavior = {\n hints: false,\n navigationMode: 'CURRENT',\n initialQuestion: 'CURRENT',\n maximumAttempts: -2,\n minimumAccuracy: 0,\n teacherValidationEnabled: false,\n canTeacherValidate: true,\n validation: true,\n review: true,\n canAttempt: false,\n canExceedAttempts: false,\n checkButtonLabel: '',\n retryButtonLabel: '',\n canMarkForReview: false,\n canShowDesmosCalc: false,\n solutionHidden: true,\n};\n\nexport { PUZZLE_CARD_RESUME_BEHAVIOR, PUZZLE_CARD_REVIEW_BEHAVIOR };\n"],"names":["PUZZLE_CARD_RESUME_BEHAVIOR","PUZZLE_CARD_REVIEW_BEHAVIOR"],"mappings":"AAEA,MAAMA,IAAkD;AAAA,EACtD,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA;AAAA,EACjB,iBAAiB;AAAA,EACjB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,gBAAgB;AAClB,GAEMC,IAAkD;AAAA,EACtD,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,gBAAgB;AAClB;"}
|
@@ -2,9 +2,9 @@ import S from "../../../assets/line-icons/icons/bulb2.js";
|
|
2
2
|
import y from "../../../assets/line-icons/icons/edit-star.js";
|
3
3
|
import A from "../../../assets/line-icons/icons/edit2.js";
|
4
4
|
import L from "../../../assets/line-icons/icons/question-letter.js";
|
5
|
-
import
|
5
|
+
import k from "../../../assets/line-icons/icons/star2.js";
|
6
6
|
import b from "../constants/events.js";
|
7
|
-
import { OPTIONAL_ITEM_TYPES as
|
7
|
+
import { OPTIONAL_ITEM_TYPES as O, ACTION_BAR_HEIGHT as R, QUESTION_WIDTH as w, SPLIT_QUESTION_WIDTH as N, CLOZE_FORMULA_RESPONSE_LIMIT as x } from "./constants.js";
|
8
8
|
import { QUESTION_TAGS as E } from "./worksheet-types.js";
|
9
9
|
const Q = (e) => {
|
10
10
|
switch (e) {
|
@@ -36,18 +36,18 @@ const Q = (e) => {
|
|
36
36
|
const r = e.toLowerCase();
|
37
37
|
return r === "intro" || r === "concept-intro";
|
38
38
|
}, C = (e) => e.reduce((r, t) => {
|
39
|
-
const [n,
|
39
|
+
const [n, i] = t.split(":"), a = n == null ? void 0 : n.trim(), c = i == null ? void 0 : i.trim();
|
40
40
|
return !a || !c ? r : {
|
41
41
|
...r,
|
42
42
|
[a.toLowerCase()]: c
|
43
43
|
};
|
44
44
|
}, {}), Y = (e, { sectioned: r = !1, adaptive: t = !1 }) => {
|
45
45
|
if (r)
|
46
|
-
return e.reduce((
|
46
|
+
return e.reduce((i, a, c) => {
|
47
47
|
var v;
|
48
48
|
let d = !1;
|
49
|
-
const { content: u, questions:
|
50
|
-
const T =
|
49
|
+
const { content: u, questions: s, itemType: o } = a, l = Q(o), _ = i[i.length - 1], g = l === (_ == null ? void 0 : _.section_name) && (_ != null && _.item_display_number) ? _.item_display_number + 1 : 1, m = u.match(/question-[^"]*/g), p = m == null ? void 0 : m.map((f, h) => {
|
50
|
+
const T = s.find(
|
51
51
|
({ response_id: I }) => I === f.replace("question-", "")
|
52
52
|
);
|
53
53
|
if (!T)
|
@@ -61,18 +61,18 @@ const Q = (e) => {
|
|
61
61
|
item_display_number: g,
|
62
62
|
section_name: l,
|
63
63
|
item_type: r ? o : void 0,
|
64
|
-
is_optional: o ?
|
64
|
+
is_optional: o ? O.includes(o) : !1,
|
65
65
|
item_tags: a.tags ?? [],
|
66
66
|
item_tags_map: C(a.tags ?? []),
|
67
67
|
question_number: h - (d ? 1 : 0),
|
68
|
-
total_questions:
|
68
|
+
total_questions: m.length
|
69
69
|
};
|
70
70
|
});
|
71
71
|
if (d = !1, p != null && p[0] && c > 0 && e.length > 0) {
|
72
72
|
const f = (v = e[c - 1]) == null ? void 0 : v.itemType, h = o != null && o.startsWith("advanced-") ? "advanced" : o, T = f != null && f.startsWith("advanced-") ? "advanced" : f;
|
73
73
|
if ((h === "practice-basic" || h === "practice-regular" || h === "exit-ticket" || h === "advanced") && h !== T)
|
74
74
|
return [
|
75
|
-
...
|
75
|
+
...i,
|
76
76
|
{
|
77
77
|
...p[0],
|
78
78
|
metadata: {
|
@@ -88,13 +88,13 @@ const Q = (e) => {
|
|
88
88
|
...p ?? []
|
89
89
|
];
|
90
90
|
}
|
91
|
-
return [...
|
91
|
+
return [...i, ...p ?? []];
|
92
92
|
}, []);
|
93
|
-
const n = e.reduce((
|
94
|
-
const { content: d, questions: u } = a,
|
95
|
-
(l,
|
93
|
+
const n = e.reduce((i, a, c) => {
|
94
|
+
const { content: d, questions: u } = a, s = d.match(/question-[^"]*/g), o = s == null ? void 0 : s.map(
|
95
|
+
(l, _) => {
|
96
96
|
const g = u.find(
|
97
|
-
({ response_id:
|
97
|
+
({ response_id: m }) => m === l.replace("question-", "")
|
98
98
|
);
|
99
99
|
if (!g)
|
100
100
|
throw new Error(`Question not found for the response id: ${l}`);
|
@@ -106,21 +106,21 @@ const Q = (e) => {
|
|
106
106
|
item_display_number: c + 1,
|
107
107
|
item_tags: a.tags ?? [],
|
108
108
|
item_tags_map: C(a.tags ?? []),
|
109
|
-
question_number:
|
110
|
-
total_questions:
|
109
|
+
question_number: _,
|
110
|
+
total_questions: s.length
|
111
111
|
};
|
112
112
|
}
|
113
113
|
);
|
114
|
-
return [...
|
114
|
+
return [...i, ...o ?? []];
|
115
115
|
}, []);
|
116
116
|
if (t) {
|
117
|
-
const
|
117
|
+
const i = [], a = {};
|
118
118
|
return n.sort((c, d) => {
|
119
|
-
var
|
120
|
-
const u = c.item_tags_map[E.TRIAL_TOPIC],
|
121
|
-
if (u && a[u] === void 0 && (a[u] =
|
119
|
+
var _, g;
|
120
|
+
const u = c.item_tags_map[E.TRIAL_TOPIC], s = d.item_tags_map[E.TRIAL_TOPIC];
|
121
|
+
if (u && a[u] === void 0 && (a[u] = i.length, i.push(u)), s && a[s] === void 0 && (a[s] = i.length, i.push(s)), !u || !s)
|
122
122
|
return 0;
|
123
|
-
const o = `${a[u]}-${((
|
123
|
+
const o = `${a[u]}-${((_ = c.item_tags_map[E.QUESTION_CODE]) == null ? void 0 : _.length) ?? 0}`, l = `${a[s]}-${((g = d.item_tags_map[E.QUESTION_CODE]) == null ? void 0 : g.length) ?? 0}`;
|
124
124
|
return o > l ? 1 : -1;
|
125
125
|
}).map((c) => {
|
126
126
|
const d = a[c.item_tags_map[E.TRIAL_TOPIC] ?? ""] ?? 0, u = c.item_tags_map[E.QUESTION_CODE] ?? "";
|
@@ -131,21 +131,21 @@ const Q = (e) => {
|
|
131
131
|
});
|
132
132
|
}
|
133
133
|
return n;
|
134
|
-
},
|
134
|
+
}, z = ({
|
135
135
|
questions: e,
|
136
136
|
initialQuestion: r,
|
137
137
|
initialResponseId: t,
|
138
138
|
initialItemIndex: n,
|
139
|
-
lastUnlockedQuestionIndex:
|
139
|
+
lastUnlockedQuestionIndex: i
|
140
140
|
}) => {
|
141
141
|
var d, u;
|
142
|
-
const a = e.slice(0,
|
143
|
-
if (t && a.find((
|
142
|
+
const a = e.slice(0, i + 1), c = e[i];
|
143
|
+
if (t && a.find((s) => s.response_id === t))
|
144
144
|
return t;
|
145
145
|
if (typeof n == "number" && n <= c.item_number) {
|
146
|
-
const
|
147
|
-
if (
|
148
|
-
return
|
146
|
+
const s = e.find((o) => o.item_number === n);
|
147
|
+
if (s != null && s.response_id)
|
148
|
+
return s.response_id;
|
149
149
|
}
|
150
150
|
if (r === "FIRST" && ((d = e[0]) != null && d.response_id))
|
151
151
|
return e[0].response_id;
|
@@ -154,40 +154,40 @@ const Q = (e) => {
|
|
154
154
|
if ((u = e[0]) != null && u.response_id)
|
155
155
|
return e[0].response_id;
|
156
156
|
throw new Error("Initial question not found");
|
157
|
-
},
|
157
|
+
}, J = ({
|
158
158
|
questions: e,
|
159
159
|
responses: r,
|
160
160
|
behavior: t,
|
161
161
|
userType: n
|
162
162
|
}) => {
|
163
|
-
const { maximumAttempts:
|
163
|
+
const { maximumAttempts: i, teacherValidationEnabled: a, validation: c, navigationMode: d } = t, u = [...e].reverse().findIndex((s) => {
|
164
164
|
var p;
|
165
|
-
const o = r[
|
165
|
+
const o = r[s.response_id], { attemptsHistory: l, validatedByTeacher: _, assignStatus: g } = o ?? {};
|
166
166
|
if (a)
|
167
|
-
return !!(
|
168
|
-
const
|
169
|
-
return
|
167
|
+
return !!(_ || g === "skipped");
|
168
|
+
const m = (p = l == null ? void 0 : l.slice(-1)[0]) == null ? void 0 : p.score;
|
169
|
+
return m ? (m.score ?? 0) === m.max_score ? !0 : ((l == null ? void 0 : l.length) ?? 0) >= i : !!(!c && d === "LINEAR" && (o != null && o.response || o != null && o.skipped));
|
170
170
|
});
|
171
171
|
if (u === -1)
|
172
172
|
return 0;
|
173
173
|
if (u === 0) {
|
174
174
|
if (a) {
|
175
|
-
const
|
175
|
+
const s = [...e].reverse().findIndex((o) => {
|
176
176
|
var l;
|
177
177
|
return ((l = r[o.response_id]) == null ? void 0 : l.assignStatus) !== "skipped";
|
178
178
|
});
|
179
|
-
return e.length -
|
179
|
+
return e.length - s - 1;
|
180
180
|
}
|
181
181
|
return e.length - 1;
|
182
182
|
}
|
183
183
|
if (a && n === "STUDENT") {
|
184
|
-
const
|
185
|
-
return o.is_optional && !l ?
|
184
|
+
const s = e.length - u, o = e[s], { assignStatus: l } = r[o.response_id] ?? {};
|
185
|
+
return o.is_optional && !l ? s - 1 : s;
|
186
186
|
}
|
187
187
|
return e.length - u;
|
188
188
|
};
|
189
189
|
function B(e, r) {
|
190
|
-
var n,
|
190
|
+
var n, i;
|
191
191
|
const t = Array.isArray(e) ? e.find((a) => a.response_id === r) : e;
|
192
192
|
if (!t)
|
193
193
|
throw new Error(`Question with id ${r} not found`);
|
@@ -198,7 +198,7 @@ function B(e, r) {
|
|
198
198
|
questionPosition: t.question_number,
|
199
199
|
isOkayTypeQuestion: W(t),
|
200
200
|
score: {
|
201
|
-
max_score: ((
|
201
|
+
max_score: ((i = (n = t == null ? void 0 : t.validation) == null ? void 0 : n.valid_response) == null ? void 0 : i.score) ?? 0 * t.metadata.valid_response_count
|
202
202
|
},
|
203
203
|
tags: {
|
204
204
|
...t.item_tags_map,
|
@@ -206,7 +206,7 @@ function B(e, r) {
|
|
206
206
|
}
|
207
207
|
};
|
208
208
|
}
|
209
|
-
const
|
209
|
+
const V = (e) => e.reduce(
|
210
210
|
(r, t) => ({
|
211
211
|
...r,
|
212
212
|
[t.response_id]: B(e, t.response_id)
|
@@ -219,7 +219,7 @@ const z = (e) => e.reduce(
|
|
219
219
|
(a) => a.questions.some((c) => c.stimulus_review)
|
220
220
|
) ? w : N,
|
221
221
|
maxQuestionWidth: w,
|
222
|
-
actionbarHeight: t === "bottom" ?
|
222
|
+
actionbarHeight: t === "bottom" ? R : 0
|
223
223
|
};
|
224
224
|
}, Z = ({
|
225
225
|
questions: e,
|
@@ -354,11 +354,11 @@ const z = (e) => e.reduce(
|
|
354
354
|
case "exit-ticket":
|
355
355
|
return L;
|
356
356
|
case "advanced":
|
357
|
-
return
|
357
|
+
return k;
|
358
358
|
default:
|
359
359
|
return S;
|
360
360
|
}
|
361
|
-
},
|
361
|
+
}, se = (e) => e === "SAT_ENGLISH_ASSESSMENT" || e === "SAT_MATH_ASSESSMENT", ie = (e) => Array.isArray(e.value) ? e.value.some(
|
362
362
|
(t) => typeof t == "string" && t.length > x
|
363
363
|
) : !1, ce = (e, r) => {
|
364
364
|
const t = e === "TEACHER";
|
@@ -385,16 +385,17 @@ const z = (e) => e.reduce(
|
|
385
385
|
bgColor: "BLACK",
|
386
386
|
borderColor: "BLACK_4",
|
387
387
|
textColor: "WHITE"
|
388
|
-
};
|
388
|
+
}, le = (e) => e ? `${e}_1` : "BLUE_1";
|
389
389
|
export {
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
390
|
+
ie as checkIsClozeFormulaResponseInvalid,
|
391
|
+
z as getInitialQuestionId,
|
392
|
+
V as getInitialResponses,
|
393
|
+
J as getLastUnlockedQuestionIndex,
|
394
394
|
ne as getNavigationSectionBackgroundColor,
|
395
395
|
ae as getNavigationSectionIcon,
|
396
396
|
oe as getNavigationSectionName,
|
397
397
|
ee as getPaperColorByQuestion,
|
398
|
+
le as getPuzzleWorksheetBackgroundColor,
|
398
399
|
te as getQuestionBackgroundImage,
|
399
400
|
re as getQuestionBorderColor,
|
400
401
|
B as getQuestionMetadata,
|
@@ -405,7 +406,7 @@ export {
|
|
405
406
|
ce as getWorksheetNudgeBannerInfo,
|
406
407
|
M as isConceptIntroWidget,
|
407
408
|
W as isOkayTypeQuestion,
|
408
|
-
|
409
|
+
se as isSATAssessmentNode,
|
409
410
|
j as scrollToQuestion,
|
410
411
|
q as setMathJaxConfigInWindow
|
411
412
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"worksheet-helpers.js","sources":["../../../../src/features/worksheet/worksheet/worksheet-helpers.ts"],"sourcesContent":["import type { NODE_TYPES } from '../../../types/models/worksheet';\nimport type { TColorNames, TUserTypes } from '../../ui/types';\nimport type { TWorksheetQuestionPaperColor } from './worksheet-question/worksheet-question-types';\nimport type { ILearnosityQuestionResponse, IWorksheetHeaderLayoutProps } from './worksheet-types';\n\nimport Bulb2Icon from '../../../assets/line-icons/icons/bulb2';\nimport EditStarIcon from '../../../assets/line-icons/icons/edit-star';\nimport Edit2Icon from '../../../assets/line-icons/icons/edit2';\nimport QuestionLetterIcon from '../../../assets/line-icons/icons/question-letter';\nimport Star2Icon from '../../../assets/line-icons/icons/star2';\nimport EVENTS from '../constants/events';\nimport {\n ACTION_BAR_HEIGHT,\n CLOZE_FORMULA_RESPONSE_LIMIT,\n OPTIONAL_ITEM_TYPES,\n QUESTION_WIDTH,\n SPLIT_QUESTION_WIDTH,\n} from './constants';\nimport {\n QUESTION_TAGS,\n type ILearnosityItem,\n type ILearnosityQuestion,\n type ISheetNudgeBannerInfo,\n type IWorksheetBehavior,\n type IWorksheetProps,\n type IWorksheetQuestion,\n type IWorksheetResponse,\n type TInstructorStimulus,\n type TItemType,\n type TSectionName,\n} from './worksheet-types';\n\ninterface IGetSectionNameFromItemType {\n (itemType?: TItemType): TSectionName | undefined;\n}\n\nconst getSectionNameFromItemType: IGetSectionNameFromItemType = itemType => {\n switch (itemType) {\n case 'overview':\n return 'overview';\n case 'learning-we-do':\n case 'learning-your-turn':\n case 'learning-explore':\n return 'learning';\n case 'practice-basic':\n case 'practice-basic-optional':\n return 'practice-basic';\n case 'practice-regular':\n case 'practice-regular-optional':\n return 'practice-regular';\n case 'exit-ticket':\n return 'exit-ticket';\n case 'advanced-explore':\n case 'advanced-we-do':\n case 'advanced-your-turn':\n case 'advanced-practice':\n return 'advanced';\n default:\n return undefined;\n }\n};\n\nconst isConceptIntroWidget = (instructorStimulus?: TInstructorStimulus) => {\n if (!instructorStimulus) {\n return false;\n }\n\n const lowerCaseInstructorStimulus = instructorStimulus.toLowerCase();\n\n return lowerCaseInstructorStimulus === 'intro' || lowerCaseInstructorStimulus === 'concept-intro';\n};\n\nconst getTagsMap = (tags: string[]): Record<string, string> => {\n return tags.reduce((acc, tag) => {\n const [key, value] = tag.split(':');\n const trimmedKey = key?.trim();\n const trimmedValue = value?.trim();\n\n if (!trimmedKey || !trimmedValue) {\n return acc;\n }\n\n return {\n ...acc,\n [trimmedKey.toLowerCase()]: trimmedValue,\n };\n }, {});\n};\n\ninterface IGetQuestionsFromItems {\n (\n items: ILearnosityItem[],\n options: {\n sectioned?: boolean;\n adaptive?: boolean;\n },\n ): IWorksheetQuestion[];\n}\nconst getQuestionsFromItems: IGetQuestionsFromItems = (\n items,\n { sectioned = false, adaptive = false },\n) => {\n if (sectioned) {\n return items.reduce((acc, item, itemIndex) => {\n let hasIntroWidget = false;\n const { content, questions, itemType } = item;\n const sectionName = getSectionNameFromItemType(itemType);\n const prevItem = acc[acc.length - 1];\n const itemDisplayNumber =\n sectionName === prevItem?.section_name && prevItem?.item_display_number\n ? prevItem.item_display_number + 1\n : 1;\n const orderedQuestionIds = content.match(/question-[^\"]*/g);\n const orderedQuestions = orderedQuestionIds?.map((responseId, widgetIndex) => {\n const question = questions.find(\n ({ response_id: respId }) => respId === responseId.replace('question-', ''),\n );\n\n if (!question) {\n throw new Error(`Question not found for the response id: ${responseId}`);\n }\n\n hasIntroWidget = hasIntroWidget || isConceptIntroWidget(question.instructor_stimulus);\n\n return {\n ...question,\n // Some questions are set to limited number of attempts which can show feedback which is causing the question to be stuck in the errored state\n feedback_attempts: undefined,\n item_reference: item.reference,\n item_number: itemIndex,\n item_display_number: itemDisplayNumber,\n section_name: sectionName,\n item_type: sectioned ? itemType : undefined,\n is_optional: itemType ? OPTIONAL_ITEM_TYPES.includes(itemType) : false,\n item_tags: item.tags ?? [],\n item_tags_map: getTagsMap(item.tags ?? []),\n question_number: widgetIndex - (hasIntroWidget ? 1 : 0),\n total_questions: orderedQuestionIds.length,\n } as IWorksheetQuestion;\n });\n\n hasIntroWidget = false;\n\n if (orderedQuestions?.[0] && itemIndex > 0 && items.length > 0) {\n const prevItemType = items[itemIndex - 1]?.itemType;\n const itemTypeDerived = itemType?.startsWith('advanced-') ? 'advanced' : itemType;\n const prevItemTypeDerived = prevItemType?.startsWith('advanced-')\n ? 'advanced'\n : prevItemType;\n\n if (\n (itemTypeDerived === 'practice-basic' ||\n itemTypeDerived === 'practice-regular' ||\n itemTypeDerived === 'exit-ticket' ||\n itemTypeDerived === 'advanced') &&\n itemTypeDerived !== prevItemTypeDerived\n ) {\n return [\n ...acc,\n {\n ...orderedQuestions[0],\n metadata: {\n ...orderedQuestions[0].metadata,\n teacher_tips: undefined,\n hints: undefined,\n solution: undefined,\n },\n instructor_stimulus: 'SystemIntro',\n response_id: `${itemType}-system-intro`,\n is_optional: itemType?.startsWith('advanced-'),\n },\n ...(orderedQuestions ?? []),\n ];\n }\n }\n\n return [...acc, ...(orderedQuestions ?? [])];\n }, [] as IWorksheetQuestion[]);\n }\n\n const finalQuestions = items.reduce((acc, item, itemIndex) => {\n const { content, questions } = item;\n const orderedQuestionIds = content.match(/question-[^\"]*/g);\n const orderedQuestions = orderedQuestionIds?.map<IWorksheetQuestion>(\n (responseId, widgetIndex) => {\n const question = questions.find(\n ({ response_id: respId }) => respId === responseId.replace('question-', ''),\n );\n\n if (!question) {\n throw new Error(`Question not found for the response id: ${responseId}`);\n }\n\n return {\n ...question,\n feedback_attempts: undefined,\n item_reference: item.reference,\n item_number: itemIndex,\n item_display_number: itemIndex + 1,\n item_tags: item.tags ?? [],\n item_tags_map: getTagsMap(item.tags ?? []),\n question_number: widgetIndex,\n total_questions: orderedQuestionIds.length,\n };\n },\n );\n\n return [...acc, ...(orderedQuestions ?? [])];\n }, [] as IWorksheetQuestion[]);\n\n if (adaptive) {\n const topics: string[] = [];\n const topicsOrder: Record<string, number> = {};\n\n return finalQuestions\n .sort((a, b) => {\n const aTopic = a.item_tags_map[QUESTION_TAGS.TRIAL_TOPIC];\n const bTopic = b.item_tags_map[QUESTION_TAGS.TRIAL_TOPIC];\n\n if (aTopic && topicsOrder[aTopic] === undefined) {\n topicsOrder[aTopic] = topics.length;\n topics.push(aTopic);\n }\n\n if (bTopic && topicsOrder[bTopic] === undefined) {\n topicsOrder[bTopic] = topics.length;\n topics.push(bTopic);\n }\n\n if (!aTopic || !bTopic) {\n return 0;\n }\n\n const aSortKey = `${topicsOrder[aTopic]}-${\n a.item_tags_map[QUESTION_TAGS.QUESTION_CODE]?.length ?? 0\n }`;\n const bSortKey = `${topicsOrder[bTopic]}-${\n b.item_tags_map[QUESTION_TAGS.QUESTION_CODE]?.length ?? 0\n }`;\n\n return aSortKey > bSortKey ? 1 : -1;\n })\n .map(question => {\n const topicOrder =\n topicsOrder[question.item_tags_map[QUESTION_TAGS.TRIAL_TOPIC] ?? ''] ?? 0;\n const questionCode = question.item_tags_map[QUESTION_TAGS.QUESTION_CODE] ?? '';\n\n return {\n ...question,\n item_display_number: topicOrder * 3 + questionCode.length,\n };\n });\n }\n\n return finalQuestions;\n};\n\ninterface IGetInitialQuestionId {\n (params: {\n questions: IWorksheetQuestion[];\n initialQuestion: IWorksheetBehavior['initialQuestion'];\n lastUnlockedQuestionIndex: number;\n initialResponseId?: string;\n initialItemIndex?: number;\n }): string;\n}\n\nconst getInitialQuestionId: IGetInitialQuestionId = ({\n questions,\n initialQuestion,\n initialResponseId,\n initialItemIndex,\n lastUnlockedQuestionIndex,\n}) => {\n const unlockedQuestions = questions.slice(0, lastUnlockedQuestionIndex + 1);\n const lastUnlockedQuestion = questions[lastUnlockedQuestionIndex]!;\n\n if (initialResponseId && unlockedQuestions.find(q => q.response_id === initialResponseId)) {\n return initialResponseId;\n }\n\n if (\n typeof initialItemIndex === 'number' &&\n initialItemIndex <= lastUnlockedQuestion.item_number\n ) {\n const question = questions.find(q => q.item_number === initialItemIndex);\n\n if (question?.response_id) {\n return question.response_id;\n }\n }\n\n if (initialQuestion === 'FIRST' && questions[0]?.response_id) {\n return questions[0].response_id;\n }\n\n if (initialQuestion === 'CURRENT') {\n return lastUnlockedQuestion.response_id;\n }\n\n if (questions[0]?.response_id) {\n return questions[0].response_id;\n }\n\n throw new Error('Initial question not found');\n};\n\ninterface IGetLastUnlockedQuestionIndex {\n (options: {\n questions: IWorksheetQuestion[];\n responses: Record<string, IWorksheetResponse>;\n behavior: IWorksheetBehavior;\n userType: TUserTypes;\n }): number;\n}\n\nconst getLastUnlockedQuestionIndex: IGetLastUnlockedQuestionIndex = ({\n questions,\n responses,\n behavior,\n userType,\n}) => {\n const { maximumAttempts, teacherValidationEnabled, validation, navigationMode } = behavior;\n const questionIndex = [...questions].reverse().findIndex(q => {\n const qResp = responses[q.response_id];\n\n const { attemptsHistory, validatedByTeacher, assignStatus } = qResp ?? {};\n\n if (teacherValidationEnabled) {\n if (validatedByTeacher) {\n return true;\n }\n\n if (assignStatus === 'skipped') {\n return true;\n }\n\n return false;\n }\n\n const lastAttemptScore = attemptsHistory?.slice(-1)[0]?.score;\n\n if (lastAttemptScore) {\n if ((lastAttemptScore.score ?? 0) === lastAttemptScore.max_score) {\n return true;\n }\n\n const maximumAttemptsReached = (attemptsHistory?.length ?? 0) >= maximumAttempts;\n\n return maximumAttemptsReached;\n }\n\n if (!validation && navigationMode === 'LINEAR' && (qResp?.response || qResp?.skipped)) {\n return true;\n }\n\n return false;\n });\n\n if (questionIndex === -1) {\n return 0;\n }\n\n if (questionIndex === 0) {\n if (teacherValidationEnabled) {\n const unskippedQuestionIndex = [...questions].reverse().findIndex(q => {\n return responses[q.response_id]?.assignStatus !== 'skipped';\n });\n\n return questions.length - unskippedQuestionIndex - 1;\n }\n\n return questions.length - 1;\n }\n\n if (teacherValidationEnabled && userType === 'STUDENT') {\n const lastUnlockedQuestionIndex = questions.length - questionIndex;\n const lastUnlockedQuestion = questions[lastUnlockedQuestionIndex]!;\n const { assignStatus } = responses[lastUnlockedQuestion.response_id] ?? {};\n\n if (lastUnlockedQuestion.is_optional && !assignStatus) {\n return lastUnlockedQuestionIndex - 1;\n }\n\n return lastUnlockedQuestionIndex;\n }\n\n return questions.length - questionIndex;\n};\n\ntype TQuestionMetadata = Pick<\n IWorksheetResponse,\n 'widgetReference' | 'itemReference' | 'itemPosition' | 'questionPosition' | 'isOkayTypeQuestion'\n>;\n\nfunction getQuestionMetadata(\n questions: IWorksheetQuestion[],\n questionId: string,\n): TQuestionMetadata;\nfunction getQuestionMetadata(question: IWorksheetQuestion): TQuestionMetadata;\nfunction getQuestionMetadata(\n questions: IWorksheetQuestion | IWorksheetQuestion[],\n questionId?: string,\n) {\n const question = Array.isArray(questions)\n ? questions.find(q => q.response_id === questionId)\n : questions;\n\n if (!question) {\n throw new Error(`Question with id ${questionId} not found`);\n }\n\n return {\n widgetReference: question.metadata.widget_reference,\n itemReference: question.item_reference,\n itemPosition: question.item_number,\n questionPosition: question.question_number,\n isOkayTypeQuestion: isOkayTypeQuestion(question),\n score: {\n max_score:\n question?.validation?.valid_response?.score ?? 0 * question.metadata.valid_response_count,\n },\n tags: {\n ...question.item_tags_map,\n instructor_stimulus: question.instructor_stimulus,\n },\n };\n}\n\ninterface IGetInitialResponses {\n (questions: IWorksheetQuestion[]): Record<string, IWorksheetResponse>;\n}\n\nconst getInitialResponses: IGetInitialResponses = questions => {\n return questions.reduce(\n (acc, question) => ({\n ...acc,\n [question.response_id]: getQuestionMetadata(questions, question.response_id),\n }),\n {},\n );\n};\n\ninterface IGetWorksheetDimensions {\n (\n items: ILearnosityItem[],\n layout: IWorksheetProps['layout'],\n ): {\n questionsContainerWidth: number;\n maxQuestionWidth: number;\n actionbarHeight: number;\n };\n}\n\nconst getWorksheetDimensions: IGetWorksheetDimensions = (items, layout) => {\n const { actionBar } = layout;\n const isSingleColumn = !items.some(item =>\n item.questions.some(question => question.stimulus_review),\n );\n const actionbarHeight = actionBar === 'bottom' ? ACTION_BAR_HEIGHT : 0;\n\n return {\n questionsContainerWidth: isSingleColumn ? QUESTION_WIDTH : SPLIT_QUESTION_WIDTH,\n maxQuestionWidth: QUESTION_WIDTH,\n actionbarHeight,\n };\n};\n\ninterface IGetRenderableQuestions {\n (options: {\n questions: IWorksheetQuestion[];\n lastUnlockedQuestionIndex: number;\n userType: TUserTypes;\n }): IWorksheetQuestion[];\n}\nconst getRenderableQuestions: IGetRenderableQuestions = ({\n questions,\n lastUnlockedQuestionIndex,\n userType,\n}) => {\n if (userType === 'STUDENT') return questions.slice(0, lastUnlockedQuestionIndex + 1);\n\n return questions;\n};\n\ninterface IScrollToQuestion {\n (questionId: string, params?: { animation?: boolean }): void;\n}\n\nconst scrollToQuestion: IScrollToQuestion = (questionId, { animation = false } = {}) => {\n const $questionEl = document.querySelectorAll(`.widget-${questionId}`)[0];\n\n if ($questionEl) {\n $questionEl.scrollIntoView({\n block: 'start',\n behavior: animation ? 'smooth' : 'instant',\n });\n }\n};\n\ninterface IIsOkayTypeQuestion {\n (question: IWorksheetQuestion | ILearnosityQuestion): boolean;\n}\n\nconst isOkayTypeQuestion: IIsOkayTypeQuestion = question => {\n const { type, options, instructor_stimulus } = question;\n const itemType = 'item_type' in question ? question.item_type : undefined;\n\n if (\n itemType === 'overview' ||\n instructor_stimulus === 'Intro' ||\n instructor_stimulus === 'SystemIntro' ||\n instructor_stimulus === 'Concept-Intro'\n ) {\n return true;\n }\n\n return type === 'mcq' && options?.length === 1 ? true : false;\n};\n\nconst setMathJaxConfigInWindow = (\n logger: (eventName: string, data?: Record<string, unknown>) => void,\n) => {\n window.MathJax = {\n options: {\n enableMenu: false,\n ignoreHtmlClass: 'lrn_noMath',\n compileError: function (doc, math, err) {\n logger(EVENTS.MATHJAX_COMPILE_ERROR);\n doc.compileError(math, err);\n },\n typesetError: function (doc, math, err) {\n logger(EVENTS.MATHJAX_TYPESET_ERROR);\n doc.typesetError(math, err);\n // throw new Error('typesetError');\n },\n },\n tex: {\n inlineMath: [\n ['\\\\(', '\\\\)'],\n ['$$', '$$'],\n ],\n displayMath: [['\\\\[', '\\\\]']],\n macros: {\n abs: ['{|#1|}', 1],\n degree: ['°'],\n longdiv: ['{\\\\enclose{longdiv}{#1}}', 1],\n atomic: ['{_{#1}^{#2}}', 2],\n polyatomic: ['{_{#2}{}^{#1}}', 2],\n circledot: ['{\\\\odot}'],\n parallelogram: ['\\\\unicode{x25B1}'],\n ngtr: ['\\\\unicode{x226F}'],\n nless: ['\\\\unicode{x226E}'],\n MathQuillVarField: ['#1', 1],\n overarc: ['{\\\\overparen{#1}}', 1],\n },\n formatError: (jax, err) => {\n logger(EVENTS.MATHJAX_FORMAT_ERROR, {\n id: err.id,\n message: err.message,\n });\n jax.formatError(err);\n },\n },\n chtml: {\n minScale: 1,\n matchFontHeight: false,\n },\n };\n};\n\ninterface IGetPaperColorByQuestion {\n (question: IWorksheetQuestion): TWorksheetQuestionPaperColor;\n}\n\nconst getPaperColorByQuestion: IGetPaperColorByQuestion = question => {\n const { item_type, instructor_stimulus } = question;\n const lowerCaseInstructorStimulus = instructor_stimulus?.toLowerCase();\n\n switch (item_type) {\n case 'overview':\n return 'white';\n case 'learning-we-do':\n case 'learning-your-turn':\n case 'learning-explore':\n if (\n lowerCaseInstructorStimulus === 'instruction' ||\n lowerCaseInstructorStimulus === 'intro' ||\n lowerCaseInstructorStimulus === 'concept-intro'\n ) {\n return 'blue';\n }\n\n if (lowerCaseInstructorStimulus === 'task') {\n return 'green';\n }\n\n return 'yellow';\n case 'practice-basic':\n case 'practice-regular':\n return 'yellow';\n case 'exit-ticket':\n return 'purple';\n case 'advanced-practice':\n return 'orange';\n default:\n if (lowerCaseInstructorStimulus === 'learn') return 'blue';\n\n if (lowerCaseInstructorStimulus === 'try' || lowerCaseInstructorStimulus === 'apply')\n return 'green';\n\n return 'yellow';\n }\n};\n\nconst getQuestionBackgroundImage = (paperColor: TWorksheetQuestionPaperColor) => {\n return `https://cuemath-intel.s3.ap-southeast-1.amazonaws.com/media/math-canvas/paper-${paperColor}.png`;\n};\n\nconst getQuestionBorderColor = (\n paperColor: TWorksheetQuestionPaperColor,\n isActive?: boolean,\n): TColorNames => {\n if (!isActive) {\n return 'GREY_3';\n }\n\n switch (paperColor) {\n case 'orange':\n case 'white':\n return 'ORANGE_2';\n case 'blue':\n return 'BLUE_2';\n case 'green':\n return 'GREEN_2';\n case 'yellow':\n return 'YELLOW_2';\n case 'purple':\n return 'PURPLE_2';\n default:\n return 'GREY_3';\n }\n};\n\nconst getNavigationSectionBackgroundColor = (sectionName?: TSectionName): TColorNames => {\n switch (sectionName) {\n case 'learning':\n return 'BLUE_1';\n case 'practice-basic':\n case 'practice-regular':\n return 'YELLOW_1';\n case 'exit-ticket':\n return 'PURPLE_1';\n case 'advanced':\n return 'ORANGE_1';\n default:\n return 'YELLOW_1';\n }\n};\n\nconst getNavigationSectionName = (sectionName?: TSectionName): string => {\n switch (sectionName) {\n case 'learning':\n return 'Learning';\n case 'practice-basic':\n return 'Basic practice';\n case 'practice-regular':\n return 'Regular practice';\n case 'exit-ticket':\n return 'Mini quiz';\n case 'advanced':\n return 'Advanced work';\n default:\n return '';\n }\n};\n\nconst getNavigationSectionIcon = (sectionName?: TSectionName) => {\n switch (sectionName) {\n case 'learning':\n return Bulb2Icon;\n case 'practice-basic':\n return Edit2Icon;\n case 'practice-regular':\n return EditStarIcon;\n case 'exit-ticket':\n return QuestionLetterIcon;\n case 'advanced':\n return Star2Icon;\n default:\n return Bulb2Icon;\n }\n};\n\nconst isSATAssessmentNode = (nodeType: NODE_TYPES) =>\n nodeType === 'SAT_ENGLISH_ASSESSMENT' || nodeType === 'SAT_MATH_ASSESSMENT';\n\nconst checkIsClozeFormulaResponseInvalid = (response: ILearnosityQuestionResponse) => {\n if (Array.isArray(response.value)) {\n const isInvalid = response.value.some(\n item => typeof item === 'string' && item.length > CLOZE_FORMULA_RESPONSE_LIMIT,\n );\n\n return isInvalid;\n }\n\n return false;\n};\n\nconst getWorksheetNudgeBannerInfo = (\n userType: TUserTypes,\n markedAsCompleted: boolean,\n): ISheetNudgeBannerInfo => {\n const isTeacher = userType === 'TEACHER';\n\n if (markedAsCompleted) {\n return {\n bannerBackgroundColor: 'GREEN_4',\n label: isTeacher\n ? 'This sheet was marked as completed.'\n : 'Marked as completed by the teacher',\n };\n }\n\n return {\n bannerBackgroundColor: 'ORANGE_2',\n label: 'Complete this with your tutor in class',\n };\n};\n\nconst getWorksheetHeaderLayout: IWorksheetHeaderLayoutProps = ({\n isPuzzleWorksheet,\n isTestWorksheet,\n imageHue = 'BLUE',\n}) => {\n if (isPuzzleWorksheet) {\n return {\n bgColor: `${imageHue}_3`,\n borderColor: `${imageHue}_4`,\n textColor: 'BLACK_T_87',\n };\n }\n\n if (isTestWorksheet) {\n return {\n bgColor: 'WHITE_3',\n borderColor: 'WHITE_4',\n textColor: 'BLACK_T_87',\n };\n }\n\n return {\n bgColor: 'BLACK',\n borderColor: 'BLACK_4',\n textColor: 'WHITE',\n };\n};\n\nexport {\n getInitialQuestionId,\n getInitialResponses,\n getLastUnlockedQuestionIndex,\n getNavigationSectionBackgroundColor,\n getNavigationSectionIcon,\n getNavigationSectionName,\n getPaperColorByQuestion,\n getQuestionBackgroundImage,\n getQuestionBorderColor,\n getQuestionMetadata,\n getQuestionsFromItems,\n getRenderableQuestions,\n getWorksheetDimensions,\n isConceptIntroWidget,\n isSATAssessmentNode,\n isOkayTypeQuestion,\n scrollToQuestion,\n setMathJaxConfigInWindow,\n getWorksheetNudgeBannerInfo,\n checkIsClozeFormulaResponseInvalid,\n getWorksheetHeaderLayout,\n};\n"],"names":["getSectionNameFromItemType","itemType","isConceptIntroWidget","instructorStimulus","lowerCaseInstructorStimulus","getTagsMap","tags","acc","tag","key","value","trimmedKey","trimmedValue","getQuestionsFromItems","items","sectioned","adaptive","item","itemIndex","hasIntroWidget","content","questions","sectionName","prevItem","itemDisplayNumber","orderedQuestionIds","orderedQuestions","responseId","widgetIndex","question","respId","OPTIONAL_ITEM_TYPES","prevItemType","_a","itemTypeDerived","prevItemTypeDerived","finalQuestions","topics","topicsOrder","a","b","aTopic","QUESTION_TAGS","bTopic","aSortKey","bSortKey","_b","topicOrder","questionCode","getInitialQuestionId","initialQuestion","initialResponseId","initialItemIndex","lastUnlockedQuestionIndex","unlockedQuestions","lastUnlockedQuestion","q","getLastUnlockedQuestionIndex","responses","behavior","userType","maximumAttempts","teacherValidationEnabled","validation","navigationMode","questionIndex","qResp","attemptsHistory","validatedByTeacher","assignStatus","lastAttemptScore","unskippedQuestionIndex","getQuestionMetadata","questionId","isOkayTypeQuestion","getInitialResponses","getWorksheetDimensions","layout","actionBar","QUESTION_WIDTH","SPLIT_QUESTION_WIDTH","ACTION_BAR_HEIGHT","getRenderableQuestions","scrollToQuestion","animation","$questionEl","type","options","instructor_stimulus","setMathJaxConfigInWindow","logger","doc","math","err","EVENTS","jax","getPaperColorByQuestion","item_type","getQuestionBackgroundImage","paperColor","getQuestionBorderColor","isActive","getNavigationSectionBackgroundColor","getNavigationSectionName","getNavigationSectionIcon","Bulb2Icon","Edit2Icon","EditStarIcon","QuestionLetterIcon","Star2Icon","isSATAssessmentNode","nodeType","checkIsClozeFormulaResponseInvalid","response","CLOZE_FORMULA_RESPONSE_LIMIT","getWorksheetNudgeBannerInfo","markedAsCompleted","isTeacher","getWorksheetHeaderLayout","isPuzzleWorksheet","isTestWorksheet","imageHue"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"worksheet-helpers.js","sources":["../../../../src/features/worksheet/worksheet/worksheet-helpers.ts"],"sourcesContent":["import type { NODE_TYPES } from '../../../types/models/worksheet';\nimport type { TColorNames, THueNames, TUserTypes } from '../../ui/types';\nimport type { TWorksheetQuestionPaperColor } from './worksheet-question/worksheet-question-types';\nimport type { ILearnosityQuestionResponse, IWorksheetHeaderLayoutProps } from './worksheet-types';\n\nimport Bulb2Icon from '../../../assets/line-icons/icons/bulb2';\nimport EditStarIcon from '../../../assets/line-icons/icons/edit-star';\nimport Edit2Icon from '../../../assets/line-icons/icons/edit2';\nimport QuestionLetterIcon from '../../../assets/line-icons/icons/question-letter';\nimport Star2Icon from '../../../assets/line-icons/icons/star2';\nimport EVENTS from '../constants/events';\nimport {\n ACTION_BAR_HEIGHT,\n CLOZE_FORMULA_RESPONSE_LIMIT,\n OPTIONAL_ITEM_TYPES,\n QUESTION_WIDTH,\n SPLIT_QUESTION_WIDTH,\n} from './constants';\nimport {\n QUESTION_TAGS,\n type ILearnosityItem,\n type ILearnosityQuestion,\n type ISheetNudgeBannerInfo,\n type IWorksheetBehavior,\n type IWorksheetProps,\n type IWorksheetQuestion,\n type IWorksheetResponse,\n type TInstructorStimulus,\n type TItemType,\n type TSectionName,\n} from './worksheet-types';\n\ninterface IGetSectionNameFromItemType {\n (itemType?: TItemType): TSectionName | undefined;\n}\n\nconst getSectionNameFromItemType: IGetSectionNameFromItemType = itemType => {\n switch (itemType) {\n case 'overview':\n return 'overview';\n case 'learning-we-do':\n case 'learning-your-turn':\n case 'learning-explore':\n return 'learning';\n case 'practice-basic':\n case 'practice-basic-optional':\n return 'practice-basic';\n case 'practice-regular':\n case 'practice-regular-optional':\n return 'practice-regular';\n case 'exit-ticket':\n return 'exit-ticket';\n case 'advanced-explore':\n case 'advanced-we-do':\n case 'advanced-your-turn':\n case 'advanced-practice':\n return 'advanced';\n default:\n return undefined;\n }\n};\n\nconst isConceptIntroWidget = (instructorStimulus?: TInstructorStimulus) => {\n if (!instructorStimulus) {\n return false;\n }\n\n const lowerCaseInstructorStimulus = instructorStimulus.toLowerCase();\n\n return lowerCaseInstructorStimulus === 'intro' || lowerCaseInstructorStimulus === 'concept-intro';\n};\n\nconst getTagsMap = (tags: string[]): Record<string, string> => {\n return tags.reduce((acc, tag) => {\n const [key, value] = tag.split(':');\n const trimmedKey = key?.trim();\n const trimmedValue = value?.trim();\n\n if (!trimmedKey || !trimmedValue) {\n return acc;\n }\n\n return {\n ...acc,\n [trimmedKey.toLowerCase()]: trimmedValue,\n };\n }, {});\n};\n\ninterface IGetQuestionsFromItems {\n (\n items: ILearnosityItem[],\n options: {\n sectioned?: boolean;\n adaptive?: boolean;\n },\n ): IWorksheetQuestion[];\n}\nconst getQuestionsFromItems: IGetQuestionsFromItems = (\n items,\n { sectioned = false, adaptive = false },\n) => {\n if (sectioned) {\n return items.reduce((acc, item, itemIndex) => {\n let hasIntroWidget = false;\n const { content, questions, itemType } = item;\n const sectionName = getSectionNameFromItemType(itemType);\n const prevItem = acc[acc.length - 1];\n const itemDisplayNumber =\n sectionName === prevItem?.section_name && prevItem?.item_display_number\n ? prevItem.item_display_number + 1\n : 1;\n const orderedQuestionIds = content.match(/question-[^\"]*/g);\n const orderedQuestions = orderedQuestionIds?.map((responseId, widgetIndex) => {\n const question = questions.find(\n ({ response_id: respId }) => respId === responseId.replace('question-', ''),\n );\n\n if (!question) {\n throw new Error(`Question not found for the response id: ${responseId}`);\n }\n\n hasIntroWidget = hasIntroWidget || isConceptIntroWidget(question.instructor_stimulus);\n\n return {\n ...question,\n // Some questions are set to limited number of attempts which can show feedback which is causing the question to be stuck in the errored state\n feedback_attempts: undefined,\n item_reference: item.reference,\n item_number: itemIndex,\n item_display_number: itemDisplayNumber,\n section_name: sectionName,\n item_type: sectioned ? itemType : undefined,\n is_optional: itemType ? OPTIONAL_ITEM_TYPES.includes(itemType) : false,\n item_tags: item.tags ?? [],\n item_tags_map: getTagsMap(item.tags ?? []),\n question_number: widgetIndex - (hasIntroWidget ? 1 : 0),\n total_questions: orderedQuestionIds.length,\n } as IWorksheetQuestion;\n });\n\n hasIntroWidget = false;\n\n if (orderedQuestions?.[0] && itemIndex > 0 && items.length > 0) {\n const prevItemType = items[itemIndex - 1]?.itemType;\n const itemTypeDerived = itemType?.startsWith('advanced-') ? 'advanced' : itemType;\n const prevItemTypeDerived = prevItemType?.startsWith('advanced-')\n ? 'advanced'\n : prevItemType;\n\n if (\n (itemTypeDerived === 'practice-basic' ||\n itemTypeDerived === 'practice-regular' ||\n itemTypeDerived === 'exit-ticket' ||\n itemTypeDerived === 'advanced') &&\n itemTypeDerived !== prevItemTypeDerived\n ) {\n return [\n ...acc,\n {\n ...orderedQuestions[0],\n metadata: {\n ...orderedQuestions[0].metadata,\n teacher_tips: undefined,\n hints: undefined,\n solution: undefined,\n },\n instructor_stimulus: 'SystemIntro',\n response_id: `${itemType}-system-intro`,\n is_optional: itemType?.startsWith('advanced-'),\n },\n ...(orderedQuestions ?? []),\n ];\n }\n }\n\n return [...acc, ...(orderedQuestions ?? [])];\n }, [] as IWorksheetQuestion[]);\n }\n\n const finalQuestions = items.reduce((acc, item, itemIndex) => {\n const { content, questions } = item;\n const orderedQuestionIds = content.match(/question-[^\"]*/g);\n const orderedQuestions = orderedQuestionIds?.map<IWorksheetQuestion>(\n (responseId, widgetIndex) => {\n const question = questions.find(\n ({ response_id: respId }) => respId === responseId.replace('question-', ''),\n );\n\n if (!question) {\n throw new Error(`Question not found for the response id: ${responseId}`);\n }\n\n return {\n ...question,\n feedback_attempts: undefined,\n item_reference: item.reference,\n item_number: itemIndex,\n item_display_number: itemIndex + 1,\n item_tags: item.tags ?? [],\n item_tags_map: getTagsMap(item.tags ?? []),\n question_number: widgetIndex,\n total_questions: orderedQuestionIds.length,\n };\n },\n );\n\n return [...acc, ...(orderedQuestions ?? [])];\n }, [] as IWorksheetQuestion[]);\n\n if (adaptive) {\n const topics: string[] = [];\n const topicsOrder: Record<string, number> = {};\n\n return finalQuestions\n .sort((a, b) => {\n const aTopic = a.item_tags_map[QUESTION_TAGS.TRIAL_TOPIC];\n const bTopic = b.item_tags_map[QUESTION_TAGS.TRIAL_TOPIC];\n\n if (aTopic && topicsOrder[aTopic] === undefined) {\n topicsOrder[aTopic] = topics.length;\n topics.push(aTopic);\n }\n\n if (bTopic && topicsOrder[bTopic] === undefined) {\n topicsOrder[bTopic] = topics.length;\n topics.push(bTopic);\n }\n\n if (!aTopic || !bTopic) {\n return 0;\n }\n\n const aSortKey = `${topicsOrder[aTopic]}-${\n a.item_tags_map[QUESTION_TAGS.QUESTION_CODE]?.length ?? 0\n }`;\n const bSortKey = `${topicsOrder[bTopic]}-${\n b.item_tags_map[QUESTION_TAGS.QUESTION_CODE]?.length ?? 0\n }`;\n\n return aSortKey > bSortKey ? 1 : -1;\n })\n .map(question => {\n const topicOrder =\n topicsOrder[question.item_tags_map[QUESTION_TAGS.TRIAL_TOPIC] ?? ''] ?? 0;\n const questionCode = question.item_tags_map[QUESTION_TAGS.QUESTION_CODE] ?? '';\n\n return {\n ...question,\n item_display_number: topicOrder * 3 + questionCode.length,\n };\n });\n }\n\n return finalQuestions;\n};\n\ninterface IGetInitialQuestionId {\n (params: {\n questions: IWorksheetQuestion[];\n initialQuestion: IWorksheetBehavior['initialQuestion'];\n lastUnlockedQuestionIndex: number;\n initialResponseId?: string;\n initialItemIndex?: number;\n }): string;\n}\n\nconst getInitialQuestionId: IGetInitialQuestionId = ({\n questions,\n initialQuestion,\n initialResponseId,\n initialItemIndex,\n lastUnlockedQuestionIndex,\n}) => {\n const unlockedQuestions = questions.slice(0, lastUnlockedQuestionIndex + 1);\n const lastUnlockedQuestion = questions[lastUnlockedQuestionIndex]!;\n\n if (initialResponseId && unlockedQuestions.find(q => q.response_id === initialResponseId)) {\n return initialResponseId;\n }\n\n if (\n typeof initialItemIndex === 'number' &&\n initialItemIndex <= lastUnlockedQuestion.item_number\n ) {\n const question = questions.find(q => q.item_number === initialItemIndex);\n\n if (question?.response_id) {\n return question.response_id;\n }\n }\n\n if (initialQuestion === 'FIRST' && questions[0]?.response_id) {\n return questions[0].response_id;\n }\n\n if (initialQuestion === 'CURRENT') {\n return lastUnlockedQuestion.response_id;\n }\n\n if (questions[0]?.response_id) {\n return questions[0].response_id;\n }\n\n throw new Error('Initial question not found');\n};\n\ninterface IGetLastUnlockedQuestionIndex {\n (options: {\n questions: IWorksheetQuestion[];\n responses: Record<string, IWorksheetResponse>;\n behavior: IWorksheetBehavior;\n userType: TUserTypes;\n }): number;\n}\n\nconst getLastUnlockedQuestionIndex: IGetLastUnlockedQuestionIndex = ({\n questions,\n responses,\n behavior,\n userType,\n}) => {\n const { maximumAttempts, teacherValidationEnabled, validation, navigationMode } = behavior;\n const questionIndex = [...questions].reverse().findIndex(q => {\n const qResp = responses[q.response_id];\n\n const { attemptsHistory, validatedByTeacher, assignStatus } = qResp ?? {};\n\n if (teacherValidationEnabled) {\n if (validatedByTeacher) {\n return true;\n }\n\n if (assignStatus === 'skipped') {\n return true;\n }\n\n return false;\n }\n\n const lastAttemptScore = attemptsHistory?.slice(-1)[0]?.score;\n\n if (lastAttemptScore) {\n if ((lastAttemptScore.score ?? 0) === lastAttemptScore.max_score) {\n return true;\n }\n\n const maximumAttemptsReached = (attemptsHistory?.length ?? 0) >= maximumAttempts;\n\n return maximumAttemptsReached;\n }\n\n if (!validation && navigationMode === 'LINEAR' && (qResp?.response || qResp?.skipped)) {\n return true;\n }\n\n return false;\n });\n\n if (questionIndex === -1) {\n return 0;\n }\n\n if (questionIndex === 0) {\n if (teacherValidationEnabled) {\n const unskippedQuestionIndex = [...questions].reverse().findIndex(q => {\n return responses[q.response_id]?.assignStatus !== 'skipped';\n });\n\n return questions.length - unskippedQuestionIndex - 1;\n }\n\n return questions.length - 1;\n }\n\n if (teacherValidationEnabled && userType === 'STUDENT') {\n const lastUnlockedQuestionIndex = questions.length - questionIndex;\n const lastUnlockedQuestion = questions[lastUnlockedQuestionIndex]!;\n const { assignStatus } = responses[lastUnlockedQuestion.response_id] ?? {};\n\n if (lastUnlockedQuestion.is_optional && !assignStatus) {\n return lastUnlockedQuestionIndex - 1;\n }\n\n return lastUnlockedQuestionIndex;\n }\n\n return questions.length - questionIndex;\n};\n\ntype TQuestionMetadata = Pick<\n IWorksheetResponse,\n 'widgetReference' | 'itemReference' | 'itemPosition' | 'questionPosition' | 'isOkayTypeQuestion'\n>;\n\nfunction getQuestionMetadata(\n questions: IWorksheetQuestion[],\n questionId: string,\n): TQuestionMetadata;\nfunction getQuestionMetadata(question: IWorksheetQuestion): TQuestionMetadata;\nfunction getQuestionMetadata(\n questions: IWorksheetQuestion | IWorksheetQuestion[],\n questionId?: string,\n) {\n const question = Array.isArray(questions)\n ? questions.find(q => q.response_id === questionId)\n : questions;\n\n if (!question) {\n throw new Error(`Question with id ${questionId} not found`);\n }\n\n return {\n widgetReference: question.metadata.widget_reference,\n itemReference: question.item_reference,\n itemPosition: question.item_number,\n questionPosition: question.question_number,\n isOkayTypeQuestion: isOkayTypeQuestion(question),\n score: {\n max_score:\n question?.validation?.valid_response?.score ?? 0 * question.metadata.valid_response_count,\n },\n tags: {\n ...question.item_tags_map,\n instructor_stimulus: question.instructor_stimulus,\n },\n };\n}\n\ninterface IGetInitialResponses {\n (questions: IWorksheetQuestion[]): Record<string, IWorksheetResponse>;\n}\n\nconst getInitialResponses: IGetInitialResponses = questions => {\n return questions.reduce(\n (acc, question) => ({\n ...acc,\n [question.response_id]: getQuestionMetadata(questions, question.response_id),\n }),\n {},\n );\n};\n\ninterface IGetWorksheetDimensions {\n (\n items: ILearnosityItem[],\n layout: IWorksheetProps['layout'],\n ): {\n questionsContainerWidth: number;\n maxQuestionWidth: number;\n actionbarHeight: number;\n };\n}\n\nconst getWorksheetDimensions: IGetWorksheetDimensions = (items, layout) => {\n const { actionBar } = layout;\n const isSingleColumn = !items.some(item =>\n item.questions.some(question => question.stimulus_review),\n );\n const actionbarHeight = actionBar === 'bottom' ? ACTION_BAR_HEIGHT : 0;\n\n return {\n questionsContainerWidth: isSingleColumn ? QUESTION_WIDTH : SPLIT_QUESTION_WIDTH,\n maxQuestionWidth: QUESTION_WIDTH,\n actionbarHeight,\n };\n};\n\ninterface IGetRenderableQuestions {\n (options: {\n questions: IWorksheetQuestion[];\n lastUnlockedQuestionIndex: number;\n userType: TUserTypes;\n }): IWorksheetQuestion[];\n}\nconst getRenderableQuestions: IGetRenderableQuestions = ({\n questions,\n lastUnlockedQuestionIndex,\n userType,\n}) => {\n if (userType === 'STUDENT') return questions.slice(0, lastUnlockedQuestionIndex + 1);\n\n return questions;\n};\n\ninterface IScrollToQuestion {\n (questionId: string, params?: { animation?: boolean }): void;\n}\n\nconst scrollToQuestion: IScrollToQuestion = (questionId, { animation = false } = {}) => {\n const $questionEl = document.querySelectorAll(`.widget-${questionId}`)[0];\n\n if ($questionEl) {\n $questionEl.scrollIntoView({\n block: 'start',\n behavior: animation ? 'smooth' : 'instant',\n });\n }\n};\n\ninterface IIsOkayTypeQuestion {\n (question: IWorksheetQuestion | ILearnosityQuestion): boolean;\n}\n\nconst isOkayTypeQuestion: IIsOkayTypeQuestion = question => {\n const { type, options, instructor_stimulus } = question;\n const itemType = 'item_type' in question ? question.item_type : undefined;\n\n if (\n itemType === 'overview' ||\n instructor_stimulus === 'Intro' ||\n instructor_stimulus === 'SystemIntro' ||\n instructor_stimulus === 'Concept-Intro'\n ) {\n return true;\n }\n\n return type === 'mcq' && options?.length === 1 ? true : false;\n};\n\nconst setMathJaxConfigInWindow = (\n logger: (eventName: string, data?: Record<string, unknown>) => void,\n) => {\n window.MathJax = {\n options: {\n enableMenu: false,\n ignoreHtmlClass: 'lrn_noMath',\n compileError: function (doc, math, err) {\n logger(EVENTS.MATHJAX_COMPILE_ERROR);\n doc.compileError(math, err);\n },\n typesetError: function (doc, math, err) {\n logger(EVENTS.MATHJAX_TYPESET_ERROR);\n doc.typesetError(math, err);\n // throw new Error('typesetError');\n },\n },\n tex: {\n inlineMath: [\n ['\\\\(', '\\\\)'],\n ['$$', '$$'],\n ],\n displayMath: [['\\\\[', '\\\\]']],\n macros: {\n abs: ['{|#1|}', 1],\n degree: ['°'],\n longdiv: ['{\\\\enclose{longdiv}{#1}}', 1],\n atomic: ['{_{#1}^{#2}}', 2],\n polyatomic: ['{_{#2}{}^{#1}}', 2],\n circledot: ['{\\\\odot}'],\n parallelogram: ['\\\\unicode{x25B1}'],\n ngtr: ['\\\\unicode{x226F}'],\n nless: ['\\\\unicode{x226E}'],\n MathQuillVarField: ['#1', 1],\n overarc: ['{\\\\overparen{#1}}', 1],\n },\n formatError: (jax, err) => {\n logger(EVENTS.MATHJAX_FORMAT_ERROR, {\n id: err.id,\n message: err.message,\n });\n jax.formatError(err);\n },\n },\n chtml: {\n minScale: 1,\n matchFontHeight: false,\n },\n };\n};\n\ninterface IGetPaperColorByQuestion {\n (question: IWorksheetQuestion): TWorksheetQuestionPaperColor;\n}\n\nconst getPaperColorByQuestion: IGetPaperColorByQuestion = question => {\n const { item_type, instructor_stimulus } = question;\n const lowerCaseInstructorStimulus = instructor_stimulus?.toLowerCase();\n\n switch (item_type) {\n case 'overview':\n return 'white';\n case 'learning-we-do':\n case 'learning-your-turn':\n case 'learning-explore':\n if (\n lowerCaseInstructorStimulus === 'instruction' ||\n lowerCaseInstructorStimulus === 'intro' ||\n lowerCaseInstructorStimulus === 'concept-intro'\n ) {\n return 'blue';\n }\n\n if (lowerCaseInstructorStimulus === 'task') {\n return 'green';\n }\n\n return 'yellow';\n case 'practice-basic':\n case 'practice-regular':\n return 'yellow';\n case 'exit-ticket':\n return 'purple';\n case 'advanced-practice':\n return 'orange';\n default:\n if (lowerCaseInstructorStimulus === 'learn') return 'blue';\n\n if (lowerCaseInstructorStimulus === 'try' || lowerCaseInstructorStimulus === 'apply')\n return 'green';\n\n return 'yellow';\n }\n};\n\nconst getQuestionBackgroundImage = (paperColor: TWorksheetQuestionPaperColor) => {\n return `https://cuemath-intel.s3.ap-southeast-1.amazonaws.com/media/math-canvas/paper-${paperColor}.png`;\n};\n\nconst getQuestionBorderColor = (\n paperColor: TWorksheetQuestionPaperColor,\n isActive?: boolean,\n): TColorNames => {\n if (!isActive) {\n return 'GREY_3';\n }\n\n switch (paperColor) {\n case 'orange':\n case 'white':\n return 'ORANGE_2';\n case 'blue':\n return 'BLUE_2';\n case 'green':\n return 'GREEN_2';\n case 'yellow':\n return 'YELLOW_2';\n case 'purple':\n return 'PURPLE_2';\n default:\n return 'GREY_3';\n }\n};\n\nconst getNavigationSectionBackgroundColor = (sectionName?: TSectionName): TColorNames => {\n switch (sectionName) {\n case 'learning':\n return 'BLUE_1';\n case 'practice-basic':\n case 'practice-regular':\n return 'YELLOW_1';\n case 'exit-ticket':\n return 'PURPLE_1';\n case 'advanced':\n return 'ORANGE_1';\n default:\n return 'YELLOW_1';\n }\n};\n\nconst getNavigationSectionName = (sectionName?: TSectionName): string => {\n switch (sectionName) {\n case 'learning':\n return 'Learning';\n case 'practice-basic':\n return 'Basic practice';\n case 'practice-regular':\n return 'Regular practice';\n case 'exit-ticket':\n return 'Mini quiz';\n case 'advanced':\n return 'Advanced work';\n default:\n return '';\n }\n};\n\nconst getNavigationSectionIcon = (sectionName?: TSectionName) => {\n switch (sectionName) {\n case 'learning':\n return Bulb2Icon;\n case 'practice-basic':\n return Edit2Icon;\n case 'practice-regular':\n return EditStarIcon;\n case 'exit-ticket':\n return QuestionLetterIcon;\n case 'advanced':\n return Star2Icon;\n default:\n return Bulb2Icon;\n }\n};\n\nconst isSATAssessmentNode = (nodeType: NODE_TYPES) =>\n nodeType === 'SAT_ENGLISH_ASSESSMENT' || nodeType === 'SAT_MATH_ASSESSMENT';\n\nconst checkIsClozeFormulaResponseInvalid = (response: ILearnosityQuestionResponse) => {\n if (Array.isArray(response.value)) {\n const isInvalid = response.value.some(\n item => typeof item === 'string' && item.length > CLOZE_FORMULA_RESPONSE_LIMIT,\n );\n\n return isInvalid;\n }\n\n return false;\n};\n\nconst getWorksheetNudgeBannerInfo = (\n userType: TUserTypes,\n markedAsCompleted: boolean,\n): ISheetNudgeBannerInfo => {\n const isTeacher = userType === 'TEACHER';\n\n if (markedAsCompleted) {\n return {\n bannerBackgroundColor: 'GREEN_4',\n label: isTeacher\n ? 'This sheet was marked as completed.'\n : 'Marked as completed by the teacher',\n };\n }\n\n return {\n bannerBackgroundColor: 'ORANGE_2',\n label: 'Complete this with your tutor in class',\n };\n};\n\nconst getWorksheetHeaderLayout: IWorksheetHeaderLayoutProps = ({\n isPuzzleWorksheet,\n isTestWorksheet,\n imageHue = 'BLUE',\n}) => {\n if (isPuzzleWorksheet) {\n return {\n bgColor: `${imageHue}_3`,\n borderColor: `${imageHue}_4`,\n textColor: 'BLACK_T_87',\n };\n }\n\n if (isTestWorksheet) {\n return {\n bgColor: 'WHITE_3',\n borderColor: 'WHITE_4',\n textColor: 'BLACK_T_87',\n };\n }\n\n return {\n bgColor: 'BLACK',\n borderColor: 'BLACK_4',\n textColor: 'WHITE',\n };\n};\n\ninterface IGetPuzzleWorksheetBackgroundColor {\n (imageHue?: THueNames): TColorNames;\n}\n\nconst getPuzzleWorksheetBackgroundColor: IGetPuzzleWorksheetBackgroundColor = imageHue => {\n if (!imageHue) return 'BLUE_1';\n\n return `${imageHue}_1`;\n};\n\nexport {\n getInitialQuestionId,\n getInitialResponses,\n getLastUnlockedQuestionIndex,\n getNavigationSectionBackgroundColor,\n getNavigationSectionIcon,\n getNavigationSectionName,\n getPaperColorByQuestion,\n getQuestionBackgroundImage,\n getQuestionBorderColor,\n getQuestionMetadata,\n getQuestionsFromItems,\n getRenderableQuestions,\n getWorksheetDimensions,\n isConceptIntroWidget,\n isSATAssessmentNode,\n isOkayTypeQuestion,\n scrollToQuestion,\n setMathJaxConfigInWindow,\n getWorksheetNudgeBannerInfo,\n checkIsClozeFormulaResponseInvalid,\n getWorksheetHeaderLayout,\n getPuzzleWorksheetBackgroundColor,\n};\n"],"names":["getSectionNameFromItemType","itemType","isConceptIntroWidget","instructorStimulus","lowerCaseInstructorStimulus","getTagsMap","tags","acc","tag","key","value","trimmedKey","trimmedValue","getQuestionsFromItems","items","sectioned","adaptive","item","itemIndex","hasIntroWidget","content","questions","sectionName","prevItem","itemDisplayNumber","orderedQuestionIds","orderedQuestions","responseId","widgetIndex","question","respId","OPTIONAL_ITEM_TYPES","prevItemType","_a","itemTypeDerived","prevItemTypeDerived","finalQuestions","topics","topicsOrder","a","b","aTopic","QUESTION_TAGS","bTopic","aSortKey","bSortKey","_b","topicOrder","questionCode","getInitialQuestionId","initialQuestion","initialResponseId","initialItemIndex","lastUnlockedQuestionIndex","unlockedQuestions","lastUnlockedQuestion","q","getLastUnlockedQuestionIndex","responses","behavior","userType","maximumAttempts","teacherValidationEnabled","validation","navigationMode","questionIndex","qResp","attemptsHistory","validatedByTeacher","assignStatus","lastAttemptScore","unskippedQuestionIndex","getQuestionMetadata","questionId","isOkayTypeQuestion","getInitialResponses","getWorksheetDimensions","layout","actionBar","QUESTION_WIDTH","SPLIT_QUESTION_WIDTH","ACTION_BAR_HEIGHT","getRenderableQuestions","scrollToQuestion","animation","$questionEl","type","options","instructor_stimulus","setMathJaxConfigInWindow","logger","doc","math","err","EVENTS","jax","getPaperColorByQuestion","item_type","getQuestionBackgroundImage","paperColor","getQuestionBorderColor","isActive","getNavigationSectionBackgroundColor","getNavigationSectionName","getNavigationSectionIcon","Bulb2Icon","Edit2Icon","EditStarIcon","QuestionLetterIcon","Star2Icon","isSATAssessmentNode","nodeType","checkIsClozeFormulaResponseInvalid","response","CLOZE_FORMULA_RESPONSE_LIMIT","getWorksheetNudgeBannerInfo","markedAsCompleted","isTeacher","getWorksheetHeaderLayout","isPuzzleWorksheet","isTestWorksheet","imageHue","getPuzzleWorksheetBackgroundColor"],"mappings":"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"}
|
@@ -1,21 +1,23 @@
|
|
1
1
|
import { jsx as L } from "react/jsx-runtime";
|
2
|
-
import { memo as
|
3
|
-
import
|
4
|
-
import { LearnosityQuestionContainer as
|
5
|
-
const
|
2
|
+
import { memo as O, useRef as y, useCallback as R, useEffect as m } from "react";
|
3
|
+
import $ from "../hooks/use-learnosity-append.js";
|
4
|
+
import { LearnosityQuestionContainer as Q } from "./worksheet-question-styled.js";
|
5
|
+
const b = ["numberline", "imageclozeassociationV2"], z = O(
|
6
6
|
({
|
7
|
-
signedRequest:
|
7
|
+
signedRequest: g,
|
8
8
|
appended: o,
|
9
9
|
canRender: I,
|
10
10
|
canForceAppend: a,
|
11
11
|
question: t,
|
12
12
|
response: s,
|
13
13
|
learnosity: _,
|
14
|
-
isConceptIntro:
|
14
|
+
isConceptIntro: v,
|
15
15
|
simState: c,
|
16
|
-
onMediaStateChange: w
|
16
|
+
onMediaStateChange: w,
|
17
|
+
imageHue: A,
|
18
|
+
isPuzzle: M
|
17
19
|
}) => {
|
18
|
-
const l = y(null), n = y(s), { forceAppend: p } = g
|
20
|
+
const l = y(null), n = y(s), { forceAppend: p } = $(g), d = R(
|
19
21
|
(e) => {
|
20
22
|
const { source: r, data: i } = e, { type: u } = i ?? {};
|
21
23
|
u === "SIM_IS_READY" ? r.postMessage(
|
@@ -40,7 +42,7 @@ const Q = ["numberline", "imageclozeassociationV2"], $ = M(
|
|
40
42
|
}), (T = l.current) == null || T.append(r), p({
|
41
43
|
question: t,
|
42
44
|
response: e,
|
43
|
-
removeOldElements:
|
45
|
+
removeOldElements: b.includes(t.type) ? "before" : "after",
|
44
46
|
callback: (f) => {
|
45
47
|
f || (n.current && n.current !== e ? E(n.current) : n.current = void 0);
|
46
48
|
}
|
@@ -87,17 +89,19 @@ const Q = ["numberline", "imageclozeassociationV2"], $ = M(
|
|
87
89
|
}, [o, a, c]), m(() => {
|
88
90
|
o && s && a && s !== n.current && (n.current ? n.current = s : (n.current = s, E(s)));
|
89
91
|
}, [o, a, s, E]), /* @__PURE__ */ L(
|
90
|
-
|
92
|
+
Q,
|
91
93
|
{
|
92
94
|
ref: l,
|
93
|
-
$isConceptIntro:
|
95
|
+
$isConceptIntro: v,
|
94
96
|
$isTeacher: a,
|
97
|
+
$imageHue: A,
|
98
|
+
$isPuzzle: M,
|
95
99
|
children: /* @__PURE__ */ L("div", { className: `learnosity-response question-${t.response_id}` })
|
96
100
|
}
|
97
101
|
);
|
98
102
|
}
|
99
103
|
);
|
100
104
|
export {
|
101
|
-
|
105
|
+
z as default
|
102
106
|
};
|
103
107
|
//# sourceMappingURL=learnosity-question.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"learnosity-question.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-question/learnosity-question.tsx"],"sourcesContent":["import type { ILearnosityQuestionResponse } from '../worksheet-types';\nimport type { ILearnosityQuestionProps } from './worksheet-question-types';\nimport type { FC } from 'react';\n\nimport { memo, useCallback, useEffect, useRef } from 'react';\n\nimport useLearnosityAppend from '../hooks/use-learnosity-append';\nimport * as Styled from './worksheet-question-styled';\n\nconst REMOVE_BEFORE_QUESTIONS = ['numberline', 'imageclozeassociationV2'];\n\nconst LearnosityQuestion: FC<ILearnosityQuestionProps> = memo(\n ({\n signedRequest,\n appended,\n canRender,\n canForceAppend,\n question,\n response,\n learnosity,\n isConceptIntro,\n simState,\n onMediaStateChange,\n }) => {\n const containerElementRef = useRef<HTMLDivElement>(null);\n const latestQuestionResponseRef = useRef<ILearnosityQuestionResponse | undefined>(response);\n const { forceAppend } = useLearnosityAppend(signedRequest);\n\n const handleSimIframeMessage = useCallback(\n (event: MessageEvent) => {\n const { source, data } = event;\n const { type } = data ?? ({} as { type: string });\n\n if (type === 'SIM_IS_READY') {\n (source as Window).postMessage(\n {\n type: 'SIMULATION_CONFIG',\n payload: {\n userRole: canForceAppend ? 'teacher' : 'student',\n simulationState: simState,\n },\n },\n '*',\n );\n } else if (type === 'SIM_STATE_UPDATE') {\n onMediaStateChange(question, 'SIMULATION', event.data.payload);\n }\n },\n [canForceAppend, simState, onMediaStateChange, question],\n );\n\n const updateResponse = useCallback(\n (newResponse: ILearnosityQuestionResponse) => {\n window.requestAnimationFrame(() => {\n const questionElement = document.createElement('div');\n\n questionElement.classList.add('learnosity-response');\n questionElement.classList.add(`question-${question.response_id}`);\n // Drawing questions looks for already appended path elements with id, if present it will not append the path, to overcome this issue we are adding temp to the id\n containerElementRef.current?.children[0]\n ?.querySelectorAll('.lrn_drawing svg path')\n .forEach(path => {\n path.id = `${path.id} + temp`;\n });\n\n containerElementRef.current?.append(questionElement);\n forceAppend({\n question,\n response: newResponse,\n removeOldElements: REMOVE_BEFORE_QUESTIONS.includes(question.type) ? 'before' : 'after',\n callback: error => {\n if (error) return;\n\n if (\n latestQuestionResponseRef.current &&\n latestQuestionResponseRef.current !== newResponse\n )\n updateResponse(latestQuestionResponseRef.current);\n else latestQuestionResponseRef.current = undefined;\n },\n });\n });\n },\n [forceAppend, question],\n );\n\n const appendQuestionCalledRef = useRef(false);\n\n useEffect(() => {\n let requestId: number;\n\n if (canRender) {\n if (!appendQuestionCalledRef.current) {\n requestId = window.requestAnimationFrame(() => {\n const appenndableResponse = latestQuestionResponseRef.current ?? response;\n\n appendQuestionCalledRef.current = true;\n learnosity.appendQuestion({\n questions: [question],\n ...(appenndableResponse\n ? {\n responses: {\n [question.response_id]: {\n // Learnosity is mutating the response object, so we need to clone it\n ...appenndableResponse,\n },\n },\n }\n : {}),\n });\n });\n }\n }\n\n return () => {\n if (requestId) window.cancelAnimationFrame(requestId);\n };\n }, [canRender, learnosity, question, response]);\n\n useEffect(() => {\n if (appended) {\n latestQuestionResponseRef.current = undefined;\n\n if (containerElementRef.current?.querySelector('iframe')) {\n window.addEventListener('message', handleSimIframeMessage);\n }\n }\n\n return () => {\n window.removeEventListener('message', handleSimIframeMessage);\n };\n }, [appended, handleSimIframeMessage]);\n\n useEffect(() => {\n if (simState && appended) {\n const simIframe = containerElementRef.current?.querySelector('iframe');\n\n if (simIframe) {\n simIframe.contentWindow?.postMessage(\n {\n type: 'SIM_STATE_UPDATE',\n payload: simState,\n },\n '*',\n );\n }\n }\n }, [appended, canForceAppend, simState]);\n\n useEffect(() => {\n if (appended && response && canForceAppend) {\n if (response !== latestQuestionResponseRef.current) {\n if (!latestQuestionResponseRef.current) {\n latestQuestionResponseRef.current = response;\n updateResponse(response);\n } else {\n latestQuestionResponseRef.current = response;\n }\n }\n }\n }, [appended, canForceAppend, response, updateResponse]);\n\n return (\n <Styled.LearnosityQuestionContainer\n ref={containerElementRef}\n $isConceptIntro={isConceptIntro}\n $isTeacher={canForceAppend}\n >\n <div className={`learnosity-response question-${question.response_id}`} />\n </Styled.LearnosityQuestionContainer>\n );\n },\n);\n\nexport default LearnosityQuestion;\n"],"names":["REMOVE_BEFORE_QUESTIONS","LearnosityQuestion","memo","signedRequest","appended","canRender","canForceAppend","question","response","learnosity","isConceptIntro","simState","onMediaStateChange","containerElementRef","useRef","latestQuestionResponseRef","forceAppend","useLearnosityAppend","handleSimIframeMessage","useCallback","event","source","data","type","updateResponse","newResponse","questionElement","_b","_a","path","_c","error","appendQuestionCalledRef","useEffect","requestId","appenndableResponse","simIframe","jsx","Styled.LearnosityQuestionContainer"],"mappings":";;;;AASA,MAAMA,IAA0B,CAAC,cAAc,yBAAyB,GAElEC,IAAmDC;AAAA,EACvD,CAAC;AAAA,IACC,eAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,MACI;AACE,UAAAC,IAAsBC,EAAuB,IAAI,GACjDC,IAA4BD,
|
1
|
+
{"version":3,"file":"learnosity-question.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-question/learnosity-question.tsx"],"sourcesContent":["import type { ILearnosityQuestionResponse } from '../worksheet-types';\nimport type { ILearnosityQuestionProps } from './worksheet-question-types';\nimport type { FC } from 'react';\n\nimport { memo, useCallback, useEffect, useRef } from 'react';\n\nimport useLearnosityAppend from '../hooks/use-learnosity-append';\nimport * as Styled from './worksheet-question-styled';\n\nconst REMOVE_BEFORE_QUESTIONS = ['numberline', 'imageclozeassociationV2'];\n\nconst LearnosityQuestion: FC<ILearnosityQuestionProps> = memo(\n ({\n signedRequest,\n appended,\n canRender,\n canForceAppend,\n question,\n response,\n learnosity,\n isConceptIntro,\n simState,\n onMediaStateChange,\n imageHue,\n isPuzzle,\n }) => {\n const containerElementRef = useRef<HTMLDivElement>(null);\n const latestQuestionResponseRef = useRef<ILearnosityQuestionResponse | undefined>(response);\n const { forceAppend } = useLearnosityAppend(signedRequest);\n\n const handleSimIframeMessage = useCallback(\n (event: MessageEvent) => {\n const { source, data } = event;\n const { type } = data ?? ({} as { type: string });\n\n if (type === 'SIM_IS_READY') {\n (source as Window).postMessage(\n {\n type: 'SIMULATION_CONFIG',\n payload: {\n userRole: canForceAppend ? 'teacher' : 'student',\n simulationState: simState,\n },\n },\n '*',\n );\n } else if (type === 'SIM_STATE_UPDATE') {\n onMediaStateChange(question, 'SIMULATION', event.data.payload);\n }\n },\n [canForceAppend, simState, onMediaStateChange, question],\n );\n\n const updateResponse = useCallback(\n (newResponse: ILearnosityQuestionResponse) => {\n window.requestAnimationFrame(() => {\n const questionElement = document.createElement('div');\n\n questionElement.classList.add('learnosity-response');\n questionElement.classList.add(`question-${question.response_id}`);\n // Drawing questions looks for already appended path elements with id, if present it will not append the path, to overcome this issue we are adding temp to the id\n containerElementRef.current?.children[0]\n ?.querySelectorAll('.lrn_drawing svg path')\n .forEach(path => {\n path.id = `${path.id} + temp`;\n });\n\n containerElementRef.current?.append(questionElement);\n forceAppend({\n question,\n response: newResponse,\n removeOldElements: REMOVE_BEFORE_QUESTIONS.includes(question.type) ? 'before' : 'after',\n callback: error => {\n if (error) return;\n\n if (\n latestQuestionResponseRef.current &&\n latestQuestionResponseRef.current !== newResponse\n )\n updateResponse(latestQuestionResponseRef.current);\n else latestQuestionResponseRef.current = undefined;\n },\n });\n });\n },\n [forceAppend, question],\n );\n\n const appendQuestionCalledRef = useRef(false);\n\n useEffect(() => {\n let requestId: number;\n\n if (canRender) {\n if (!appendQuestionCalledRef.current) {\n requestId = window.requestAnimationFrame(() => {\n const appenndableResponse = latestQuestionResponseRef.current ?? response;\n\n appendQuestionCalledRef.current = true;\n learnosity.appendQuestion({\n questions: [question],\n ...(appenndableResponse\n ? {\n responses: {\n [question.response_id]: {\n // Learnosity is mutating the response object, so we need to clone it\n ...appenndableResponse,\n },\n },\n }\n : {}),\n });\n });\n }\n }\n\n return () => {\n if (requestId) window.cancelAnimationFrame(requestId);\n };\n }, [canRender, learnosity, question, response]);\n\n useEffect(() => {\n if (appended) {\n latestQuestionResponseRef.current = undefined;\n\n if (containerElementRef.current?.querySelector('iframe')) {\n window.addEventListener('message', handleSimIframeMessage);\n }\n }\n\n return () => {\n window.removeEventListener('message', handleSimIframeMessage);\n };\n }, [appended, handleSimIframeMessage]);\n\n useEffect(() => {\n if (simState && appended) {\n const simIframe = containerElementRef.current?.querySelector('iframe');\n\n if (simIframe) {\n simIframe.contentWindow?.postMessage(\n {\n type: 'SIM_STATE_UPDATE',\n payload: simState,\n },\n '*',\n );\n }\n }\n }, [appended, canForceAppend, simState]);\n\n useEffect(() => {\n if (appended && response && canForceAppend) {\n if (response !== latestQuestionResponseRef.current) {\n if (!latestQuestionResponseRef.current) {\n latestQuestionResponseRef.current = response;\n updateResponse(response);\n } else {\n latestQuestionResponseRef.current = response;\n }\n }\n }\n }, [appended, canForceAppend, response, updateResponse]);\n\n return (\n <Styled.LearnosityQuestionContainer\n ref={containerElementRef}\n $isConceptIntro={isConceptIntro}\n $isTeacher={canForceAppend}\n $imageHue={imageHue}\n $isPuzzle={isPuzzle}\n >\n <div className={`learnosity-response question-${question.response_id}`} />\n </Styled.LearnosityQuestionContainer>\n );\n },\n);\n\nexport default LearnosityQuestion;\n"],"names":["REMOVE_BEFORE_QUESTIONS","LearnosityQuestion","memo","signedRequest","appended","canRender","canForceAppend","question","response","learnosity","isConceptIntro","simState","onMediaStateChange","imageHue","isPuzzle","containerElementRef","useRef","latestQuestionResponseRef","forceAppend","useLearnosityAppend","handleSimIframeMessage","useCallback","event","source","data","type","updateResponse","newResponse","questionElement","_b","_a","path","_c","error","appendQuestionCalledRef","useEffect","requestId","appenndableResponse","simIframe","jsx","Styled.LearnosityQuestionContainer"],"mappings":";;;;AASA,MAAMA,IAA0B,CAAC,cAAc,yBAAyB,GAElEC,IAAmDC;AAAA,EACvD,CAAC;AAAA,IACC,eAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,MACI;AACE,UAAAC,IAAsBC,EAAuB,IAAI,GACjDC,IAA4BD,EAAgDR,CAAQ,GACpF,EAAE,aAAAU,EAAA,IAAgBC,EAAoBhB,CAAa,GAEnDiB,IAAyBC;AAAA,MAC7B,CAACC,MAAwB;AACjB,cAAA,EAAE,QAAAC,GAAQ,MAAAC,EAAS,IAAAF,GACnB,EAAE,MAAAG,EAAA,IAASD,KAAS;AAE1B,QAAIC,MAAS,iBACVF,EAAkB;AAAA,UACjB;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP,UAAUjB,IAAiB,YAAY;AAAA,cACvC,iBAAiBK;AAAA,YACnB;AAAA,UACF;AAAA,UACA;AAAA,QAAA,IAEOc,MAAS,sBAClBb,EAAmBL,GAAU,cAAce,EAAM,KAAK,OAAO;AAAA,MAEjE;AAAA,MACA,CAAChB,GAAgBK,GAAUC,GAAoBL,CAAQ;AAAA,IAAA,GAGnDmB,IAAiBL;AAAA,MACrB,CAACM,MAA6C;AAC5C,eAAO,sBAAsB,MAAM;;AAC3B,gBAAAC,IAAkB,SAAS,cAAc,KAAK;AAEpC,UAAAA,EAAA,UAAU,IAAI,qBAAqB,GACnDA,EAAgB,UAAU,IAAI,YAAYrB,EAAS,WAAW,EAAE,IAE5CsB,KAAAC,IAAAf,EAAA,YAAA,gBAAAe,EAAS,SAAS,OAAlB,QAAAD,EAChB,iBAAiB,yBAClB,QAAQ,CAAQE,MAAA;AACV,YAAAA,EAAA,KAAK,GAAGA,EAAK,EAAE;AAAA,UAAA,KAGJC,IAAAjB,EAAA,YAAA,QAAAiB,EAAS,OAAOJ,IACxBV,EAAA;AAAA,YACV,UAAAX;AAAA,YACA,UAAUoB;AAAA,YACV,mBAAmB3B,EAAwB,SAASO,EAAS,IAAI,IAAI,WAAW;AAAA,YAChF,UAAU,CAAS0B,MAAA;AACjB,cAAIA,MAGFhB,EAA0B,WAC1BA,EAA0B,YAAYU,IAEtCD,EAAeT,EAA0B,OAAO,MACnB,UAAU;AAAA,YAC3C;AAAA,UAAA,CACD;AAAA,QAAA,CACF;AAAA,MACH;AAAA,MACA,CAACC,GAAaX,CAAQ;AAAA,IAAA,GAGlB2B,IAA0BlB,EAAO,EAAK;AAE5C,WAAAmB,EAAU,MAAM;AACV,UAAAC;AAEJ,aAAI/B,MACG6B,EAAwB,YACfE,IAAA,OAAO,sBAAsB,MAAM;AACvC,cAAAC,IAAsBpB,EAA0B,WAAWT;AAEjE,QAAA0B,EAAwB,UAAU,IAClCzB,EAAW,eAAe;AAAA,UACxB,WAAW,CAACF,CAAQ;AAAA,UACpB,GAAI8B,IACA;AAAA,YACE,WAAW;AAAA,cACT,CAAC9B,EAAS,WAAW,GAAG;AAAA;AAAA,gBAEtB,GAAG8B;AAAA,cACL;AAAA,YACF;AAAA,UAAA,IAEF,CAAC;AAAA,QAAA,CACN;AAAA,MAAA,CACF,KAIE,MAAM;AACP,QAAAD,KAAkB,OAAA,qBAAqBA,CAAS;AAAA,MAAA;AAAA,OAErD,CAAC/B,GAAWI,GAAYF,GAAUC,CAAQ,CAAC,GAE9C2B,EAAU,MAAM;;AACd,aAAI/B,MACFa,EAA0B,UAAU,SAEhCa,IAAAf,EAAoB,YAApB,QAAAe,EAA6B,cAAc,aACtC,OAAA,iBAAiB,WAAWV,CAAsB,IAItD,MAAM;AACJ,eAAA,oBAAoB,WAAWA,CAAsB;AAAA,MAAA;AAAA,IAC9D,GACC,CAAChB,GAAUgB,CAAsB,CAAC,GAErCe,EAAU,MAAM;;AACd,UAAIxB,KAAYP,GAAU;AACxB,cAAMkC,KAAYR,IAAAf,EAAoB,YAApB,gBAAAe,EAA6B,cAAc;AAE7D,QAAIQ,OACFT,IAAAS,EAAU,kBAAV,QAAAT,EAAyB;AAAA,UACvB;AAAA,YACE,MAAM;AAAA,YACN,SAASlB;AAAA,UACX;AAAA,UACA;AAAA;AAAA,MAGN;AAAA,IACC,GAAA,CAACP,GAAUE,GAAgBK,CAAQ,CAAC,GAEvCwB,EAAU,MAAM;AACV,MAAA/B,KAAYI,KAAYF,KACtBE,MAAaS,EAA0B,YACpCA,EAA0B,UAI7BA,EAA0B,UAAUT,KAHpCS,EAA0B,UAAUT,GACpCkB,EAAelB,CAAQ;AAAA,OAM5B,CAACJ,GAAUE,GAAgBE,GAAUkB,CAAc,CAAC,GAGrD,gBAAAa;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,KAAKzB;AAAA,QACL,iBAAiBL;AAAA,QACjB,YAAYJ;AAAA,QACZ,WAAWO;AAAA,QACX,WAAWC;AAAA,QAEX,4BAAC,OAAI,EAAA,WAAW,gCAAgCP,EAAS,WAAW,IAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAG9E;AACF;"}
|