@cuemath/leap 3.1.44-as3 → 3.1.44-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.
Files changed (31) hide show
  1. package/dist/features/cue-canvas/cue-canvas-core.js +27 -31
  2. package/dist/features/cue-canvas/cue-canvas-core.js.map +1 -1
  3. package/dist/features/cue-canvas/cue-canvas-helpers.js +51 -61
  4. package/dist/features/cue-canvas/cue-canvas-helpers.js.map +1 -1
  5. package/dist/features/hooks/use-audio-player.js +19 -50
  6. package/dist/features/hooks/use-audio-player.js.map +1 -1
  7. package/dist/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.js +45 -43
  8. package/dist/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.js.map +1 -1
  9. package/dist/features/worksheet/worksheet/worksheet-helpers.js +98 -84
  10. package/dist/features/worksheet/worksheet/worksheet-helpers.js.map +1 -1
  11. package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question.js +66 -66
  12. package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question.js.map +1 -1
  13. package/dist/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.js +78 -75
  14. package/dist/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.js.map +1 -1
  15. package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller.js +268 -202
  16. package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller.js.map +1 -1
  17. package/dist/features/worksheet/worksheet/worksheet-types.js.map +1 -1
  18. package/dist/features/worksheet/worksheet/worksheet.js +374 -352
  19. package/dist/features/worksheet/worksheet/worksheet.js.map +1 -1
  20. package/dist/features/worksheet/worksheet-preview/dynamic-worksheet-preview/dynamic-worksheet-preview.js +20 -18
  21. package/dist/features/worksheet/worksheet-preview/dynamic-worksheet-preview/dynamic-worksheet-preview.js.map +1 -1
  22. package/dist/features/worksheet/worksheet-preview/hooks/use-worksheet-layout.js +33 -26
  23. package/dist/features/worksheet/worksheet-preview/hooks/use-worksheet-layout.js.map +1 -1
  24. package/dist/features/worksheet/worksheet-preview/worksheet-preview-styled.js +22 -15
  25. package/dist/features/worksheet/worksheet-preview/worksheet-preview-styled.js.map +1 -1
  26. package/dist/features/worksheet/worksheet-preview/worksheet-preview-view.js +85 -66
  27. package/dist/features/worksheet/worksheet-preview/worksheet-preview-view.js.map +1 -1
  28. package/dist/features/worksheet/worksheet-preview/worksheet-preview.js +51 -32
  29. package/dist/features/worksheet/worksheet-preview/worksheet-preview.js.map +1 -1
  30. package/dist/index.d.ts +15 -0
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use-audio-player.js","sources":["../../../src/features/hooks/use-audio-player.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useUIContext } from '../ui/context/context';\n\ndeclare global {\n interface Window {\n webkitAudioContext?: AudioContext;\n }\n}\n\nconst useAudioPlayer = (audioUrls: { url: string; name: string }[]) => {\n const [audioBuffers, setAudioBuffers] = useState<Record<string, AudioBuffer | null>>({});\n const { onEvent: trackEvent } = useUIContext();\n\n const context = useMemo(() => {\n try {\n const Ctx = window.AudioContext || window.webkitAudioContext;\n\n if (Ctx) {\n try {\n return new Ctx();\n } catch (initError) {\n trackEvent('audio_context_init_failed', { error: initError });\n }\n }\n } catch (e) {\n trackEvent('audio_context_detection_failed', { error: e });\n }\n\n return null;\n }, [trackEvent]);\n\n const getAudioBuffer = useCallback(\n async (url: string, name: string) => {\n if (!context) {\n trackEvent('audio_context_not_found', { name });\n\n return;\n }\n\n try {\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n const audioBuffer = await context.decodeAudioData(arrayBuffer);\n\n setAudioBuffers(prev => ({ ...prev, [name]: audioBuffer }));\n } catch (e) {\n trackEvent('audio_fetch_failed', { error: e });\n }\n },\n [context, trackEvent],\n );\n\n useEffect(() => {\n audioUrls.forEach(({ url, name }) => {\n getAudioBuffer(url, name);\n });\n\n return () => {\n if (!context) return;\n\n try {\n if (context.state !== 'closed') context.close();\n } catch (e) {\n trackEvent('audio_context_closing_failed', { error: e });\n }\n };\n }, [audioUrls, context, getAudioBuffer, trackEvent]);\n const playSound = useCallback(\n (name: string) => {\n if (!context) {\n trackEvent('audio_context_not_found', { name });\n\n return;\n }\n\n const buffer = audioBuffers[name];\n\n if (!buffer) {\n trackEvent('audio_buffer_not_found', { name });\n\n return;\n }\n\n try {\n const source = context.createBufferSource();\n\n source.buffer = buffer;\n\n try {\n source.connect(context.destination);\n source.start();\n } catch (playError) {\n trackEvent('audio_playback_failed', { name, playError });\n }\n } catch (sourceError) {\n trackEvent('audio_source_creation_failed', { name, sourceError });\n }\n },\n [audioBuffers, context, trackEvent],\n );\n\n return playSound;\n};\n\nexport default useAudioPlayer;\n"],"names":["useAudioPlayer","audioUrls","audioBuffers","setAudioBuffers","useState","trackEvent","useUIContext","context","useMemo","Ctx","initError","e","getAudioBuffer","useCallback","url","name","arrayBuffer","audioBuffer","prev","useEffect","buffer","source","playError","sourceError"],"mappings":";;AAUM,MAAAA,IAAiB,CAACC,MAA+C;AACrE,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAA6C,CAAE,CAAA,GACjF,EAAE,SAASC,EAAW,IAAIC,EAAa,GAEvCC,IAAUC,EAAQ,MAAM;AACxB,QAAA;AACI,YAAAC,IAAM,OAAO,gBAAgB,OAAO;AAE1C,UAAIA;AACE,YAAA;AACF,iBAAO,IAAIA,EAAI;AAAA,iBACRC,GAAW;AAClB,UAAAL,EAAW,6BAA6B,EAAE,OAAOK,EAAW,CAAA;AAAA,QAC9D;AAAA,aAEKC,GAAG;AACV,MAAAN,EAAW,kCAAkC,EAAE,OAAOM,EAAG,CAAA;AAAA,IAC3D;AAEO,WAAA;AAAA,EAAA,GACN,CAACN,CAAU,CAAC,GAETO,IAAiBC;AAAA,IACrB,OAAOC,GAAaC,MAAiB;AACnC,UAAI,CAACR,GAAS;AACD,QAAAF,EAAA,2BAA2B,EAAE,MAAAU,EAAA,CAAM;AAE9C;AAAA,MACF;AAEI,UAAA;AAEI,cAAAC,IAAc,OADH,MAAM,MAAMF,CAAG,GACG,eAC7BG,IAAc,MAAMV,EAAQ,gBAAgBS,CAAW;AAE7C,QAAAb,EAAA,CAAAe,OAAS,EAAE,GAAGA,GAAM,CAACH,CAAI,GAAGE,EAAc,EAAA;AAAA,eACnDN,GAAG;AACV,QAAAN,EAAW,sBAAsB,EAAE,OAAOM,EAAG,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,CAACJ,GAASF,CAAU;AAAA,EAAA;AAGtB,SAAAc,EAAU,OACRlB,EAAU,QAAQ,CAAC,EAAE,KAAAa,GAAK,MAAAC,QAAW;AACnC,IAAAH,EAAeE,GAAKC,CAAI;AAAA,EAAA,CACzB,GAEM,MAAM;AACX,QAAKR;AAED,UAAA;AACF,QAAIA,EAAQ,UAAU,YAAUA,EAAQ,MAAM;AAAA,eACvCI,GAAG;AACV,QAAAN,EAAW,gCAAgC,EAAE,OAAOM,EAAG,CAAA;AAAA,MACzD;AAAA,EAAA,IAED,CAACV,GAAWM,GAASK,GAAgBP,CAAU,CAAC,GACjCQ;AAAA,IAChB,CAACE,MAAiB;AAChB,UAAI,CAACR,GAAS;AACD,QAAAF,EAAA,2BAA2B,EAAE,MAAAU,EAAA,CAAM;AAE9C;AAAA,MACF;AAEM,YAAAK,IAASlB,EAAaa,CAAI;AAEhC,UAAI,CAACK,GAAQ;AACA,QAAAf,EAAA,0BAA0B,EAAE,MAAAU,EAAA,CAAM;AAE7C;AAAA,MACF;AAEI,UAAA;AACI,cAAAM,IAASd,EAAQ;AAEvB,QAAAc,EAAO,SAASD;AAEZ,YAAA;AACK,UAAAC,EAAA,QAAQd,EAAQ,WAAW,GAClCc,EAAO,MAAM;AAAA,iBACNC,GAAW;AAClB,UAAAjB,EAAW,yBAAyB,EAAE,MAAAU,GAAM,WAAAO,EAAW,CAAA;AAAA,QACzD;AAAA,eACOC,GAAa;AACpB,QAAAlB,EAAW,gCAAgC,EAAE,MAAAU,GAAM,aAAAQ,EAAa,CAAA;AAAA,MAClE;AAAA,IACF;AAAA,IACA,CAACrB,GAAcK,GAASF,CAAU;AAAA,EAAA;AAItC;"}
1
+ {"version":3,"file":"use-audio-player.js","sources":["../../../src/features/hooks/use-audio-player.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useUIContext } from '../ui/context/context';\n\ndeclare global {\n interface Window {\n webkitAudioContext?: AudioContext;\n }\n}\n\nconst useAudioPlayer = (audioUrls: { url: string; name: string }[]) => {\n const [audioBuffers, setAudioBuffers] = useState<Record<string, AudioBuffer | null>>({});\n\n const context = useMemo(() => {\n const audioContext = new (AudioContext || window.webkitAudioContext)();\n\n return audioContext;\n }, []);\n\n const { onEvent: trackEvent } = useUIContext();\n\n const getAudioBuffer = useCallback(\n async (url: string, name: string) => {\n try {\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n const audioBuffer = await context.decodeAudioData(arrayBuffer);\n\n setAudioBuffers(prev => ({ ...prev, [name]: audioBuffer }));\n } catch (e) {\n trackEvent('audio_fetch_failed', { error: e });\n }\n },\n [context, trackEvent],\n );\n\n useEffect(() => {\n audioUrls.forEach(({ url, name }) => {\n getAudioBuffer(url, name);\n });\n\n return () => {\n try {\n context.close();\n } catch (e) {\n trackEvent('audio_context_closing_failed', { error: e });\n }\n };\n }, [audioUrls, context, getAudioBuffer, trackEvent]);\n\n const playSound = useCallback(\n (name: string) => {\n const buffer = audioBuffers[name];\n\n if (!buffer) {\n trackEvent('audio_buffer_not_found', { name });\n\n return;\n }\n\n const source = context.createBufferSource();\n\n source.buffer = buffer;\n source.connect(context.destination);\n source.start();\n },\n [audioBuffers, context, trackEvent],\n );\n\n return playSound;\n};\n\nexport default useAudioPlayer;\n"],"names":["useAudioPlayer","audioUrls","audioBuffers","setAudioBuffers","useState","context","useMemo","trackEvent","useUIContext","getAudioBuffer","useCallback","url","name","arrayBuffer","audioBuffer","prev","e","useEffect","buffer","source"],"mappings":";;AAUM,MAAAA,IAAiB,CAACC,MAA+C;AACrE,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAA6C,CAAE,CAAA,GAEjFC,IAAUC,EAAQ,MACD,KAAK,gBAAgB,OAAO,oBAAoB,GAGpE,CAAE,CAAA,GAEC,EAAE,SAASC,EAAW,IAAIC,EAAa,GAEvCC,IAAiBC;AAAA,IACrB,OAAOC,GAAaC,MAAiB;AAC/B,UAAA;AAEI,cAAAC,IAAc,OADH,MAAM,MAAMF,CAAG,GACG,eAC7BG,IAAc,MAAMT,EAAQ,gBAAgBQ,CAAW;AAE7C,QAAAV,EAAA,CAAAY,OAAS,EAAE,GAAGA,GAAM,CAACH,CAAI,GAAGE,EAAc,EAAA;AAAA,eACnDE,GAAG;AACV,QAAAT,EAAW,sBAAsB,EAAE,OAAOS,EAAG,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,CAACX,GAASE,CAAU;AAAA,EAAA;AAGtB,SAAAU,EAAU,OACRhB,EAAU,QAAQ,CAAC,EAAE,KAAAU,GAAK,MAAAC,QAAW;AACnC,IAAAH,EAAeE,GAAKC,CAAI;AAAA,EAAA,CACzB,GAEM,MAAM;AACP,QAAA;AACF,MAAAP,EAAQ,MAAM;AAAA,aACPW,GAAG;AACV,MAAAT,EAAW,gCAAgC,EAAE,OAAOS,EAAG,CAAA;AAAA,IACzD;AAAA,EAAA,IAED,CAACf,GAAWI,GAASI,GAAgBF,CAAU,CAAC,GAEjCG;AAAA,IAChB,CAACE,MAAiB;AACV,YAAAM,IAAShB,EAAaU,CAAI;AAEhC,UAAI,CAACM,GAAQ;AACA,QAAAX,EAAA,0BAA0B,EAAE,MAAAK,EAAA,CAAM;AAE7C;AAAA,MACF;AAEM,YAAAO,IAASd,EAAQ;AAEvB,MAAAc,EAAO,SAASD,GACTC,EAAA,QAAQd,EAAQ,WAAW,GAClCc,EAAO,MAAM;AAAA,IACf;AAAA,IACA,CAACjB,GAAcG,GAASE,CAAU;AAAA,EAAA;AAItC;"}
@@ -1,18 +1,18 @@
1
1
  import { jsx as e, jsxs as b, Fragment as B } from "react/jsx-runtime";
2
- import { memo as L, useState as M, useCallback as i } from "react";
3
- import Y from "../../../../assets/line-icons/icons/calculator.js";
4
- import Z from "../../../../assets/line-icons/icons/down.js";
5
- import ee from "../../../../assets/line-icons/icons/up.js";
6
- import oe from "../../../cue-canvas/toolbar/toolbar.js";
7
- import ne from "../../../ui/buttons/button/button.js";
8
- import te from "../../../ui/layout/flex-view.js";
9
- import { scrollToQuestion as se } from "../worksheet-helpers.js";
10
- import ie from "../worksheet-questions-controller/scribble-switch.js";
11
- import re from "../worksheet-questions-controller/worksheet-questions-controller.js";
12
- import ae from "../worksheet-questions-summary/worksheet-questions-summary.js";
13
- import { IconContainer as le, SummaryWrapper as me } from "../worksheet-styled.js";
14
- import ce from "../worksheet-summary-controller/worksheet-summary-controller.js";
15
- const ve = L(($) => {
2
+ import { memo as M, useState as Y, useCallback as i } from "react";
3
+ import Z from "../../../../assets/line-icons/icons/calculator.js";
4
+ import ee from "../../../../assets/line-icons/icons/down.js";
5
+ import oe from "../../../../assets/line-icons/icons/up.js";
6
+ import ne from "../../../cue-canvas/toolbar/toolbar.js";
7
+ import te from "../../../ui/buttons/button/button.js";
8
+ import se from "../../../ui/layout/flex-view.js";
9
+ import { scrollToQuestion as ie } from "../worksheet-helpers.js";
10
+ import re from "../worksheet-questions-controller/scribble-switch.js";
11
+ import ae from "../worksheet-questions-controller/worksheet-questions-controller.js";
12
+ import le from "../worksheet-questions-summary/worksheet-questions-summary.js";
13
+ import { IconContainer as me, SummaryWrapper as ce } from "../worksheet-styled.js";
14
+ import ue from "../worksheet-summary-controller/worksheet-summary-controller.js";
15
+ const xe = M(($) => {
16
16
  const {
17
17
  userType: m,
18
18
  layout: f,
@@ -37,88 +37,89 @@ const ve = L(($) => {
37
37
  onItemNumberClick: C,
38
38
  onTeacherValidation: N,
39
39
  onGoToReview: I,
40
- onResponseChange: D,
41
- onHelp: E,
40
+ onResponseChange: U,
41
+ onHelp: D,
42
42
  onSubmit: a,
43
- onCalculatorOpen: U,
43
+ onCalculatorOpen: E,
44
44
  canSubmitWorksheet: g,
45
45
  loggerRef: y,
46
46
  onSkip: _,
47
- canToggleScribbling: z
48
- } = $, { navigationBar: H, questionsScrollable: w } = f, p = o[s], { response_id: l } = p ?? {}, [Q, d] = M(!1), P = l ? W.includes(l) : !1, X = i(
47
+ onUnassign: z,
48
+ canToggleScribbling: H
49
+ } = $, { navigationBar: P, questionsScrollable: w } = f, p = o[s], { response_id: l } = p ?? {}, [Q, d] = Y(!1), X = l ? W.includes(l) : !1, J = i(
49
50
  (n) => {
50
51
  d(!1), C(n);
51
52
  },
52
53
  [C]
53
- ), J = i(() => {
54
+ ), K = i(() => {
54
55
  d(!1), I();
55
56
  }, [I]), v = i(() => {
56
57
  d((n) => !n);
57
- }, []), K = i(() => {
58
+ }, []), L = i(() => {
58
59
  var T;
59
60
  u(!1);
60
61
  const n = (T = o[o.length - 1]) == null ? void 0 : T.response_id;
61
- n && (w ? requestAnimationFrame(() => se(n)) : c(n));
62
+ n && (w ? requestAnimationFrame(() => ie(n)) : c(n));
62
63
  }, [o, w, c, u]), x = i(() => {
63
64
  a == null || a(t);
64
65
  }, [a, t]);
65
66
  return k ? /* @__PURE__ */ e(
66
- ce,
67
+ ue,
67
68
  {
68
- onBack: K,
69
+ onBack: L,
69
70
  behavior: r,
70
71
  onSubmit: x,
71
72
  canSubmitWorksheet: !!g
72
73
  }
73
74
  ) : /* @__PURE__ */ b(B, { children: [
74
- /* @__PURE__ */ b(te, { $flexDirection: "row", $flexGap: 12, children: [
75
+ /* @__PURE__ */ b(se, { $flexDirection: "row", $flexGap: 12, children: [
75
76
  /* @__PURE__ */ e(
76
- ie,
77
+ re,
77
78
  {
78
79
  isScribblingEnabled: S,
79
80
  setIsScribblingEnabled: O,
80
81
  isCanvasEnabled: R,
81
82
  loggerRef: y,
82
- canToggleScribbling: z
83
+ canToggleScribbling: H
83
84
  }
84
85
  ),
85
86
  r.canShowDesmosCalc && /* @__PURE__ */ e(
86
- le,
87
+ me,
87
88
  {
88
89
  $active: G,
89
90
  $alignItems: "center",
90
91
  $justifyContent: "space-between",
91
- onClick: U,
92
- children: /* @__PURE__ */ e(Y, {})
92
+ onClick: E,
93
+ children: /* @__PURE__ */ e(Z, {})
93
94
  }
94
95
  )
95
96
  ] }),
96
- S && /* @__PURE__ */ e(oe, { userType: m, renderAs: "canvas" }),
97
- H === "bottom" && /* @__PURE__ */ b(B, { children: [
98
- Q && /* @__PURE__ */ e(me, { $alignItems: "center", children: /* @__PURE__ */ e(
99
- ae,
97
+ S && /* @__PURE__ */ e(ne, { userType: m, renderAs: "canvas" }),
98
+ P === "bottom" && /* @__PURE__ */ b(B, { children: [
99
+ Q && /* @__PURE__ */ e(ce, { $alignItems: "center", children: /* @__PURE__ */ e(
100
+ le,
100
101
  {
101
102
  activeQuestionIndex: s,
102
103
  lastUnlockedQuestionIndex: h,
103
- onItemNumberClick: X,
104
+ onItemNumberClick: J,
104
105
  questions: o,
105
106
  responses: t,
106
107
  worksheetName: A,
107
108
  behavior: r,
108
109
  userType: m,
109
110
  onClose: v,
110
- onGoToReview: J,
111
+ onGoToReview: K,
111
112
  summaryVisible: k
112
113
  }
113
114
  ) }),
114
115
  /* @__PURE__ */ e(
115
- ne,
116
+ te,
116
117
  {
117
118
  renderAs: "secondary",
118
119
  widthX: 13.25,
119
120
  label: `Question ${s + 1} of ${o.length}`,
120
121
  size: "small",
121
- Icon: Q ? Z : ee,
122
+ Icon: Q ? ee : oe,
122
123
  iconPosition: "right",
123
124
  justifyContent: "space-between",
124
125
  onClick: v
@@ -126,7 +127,7 @@ const ve = L(($) => {
126
127
  )
127
128
  ] }),
128
129
  p && l && /* @__PURE__ */ e(
129
- re,
130
+ ae,
130
131
  {
131
132
  learnosity: q,
132
133
  question: p,
@@ -134,16 +135,17 @@ const ve = L(($) => {
134
135
  responses: t,
135
136
  canSubmitWorksheet: g,
136
137
  questionIndex: s,
137
- isQuestionAppended: P,
138
+ isQuestionAppended: X,
138
139
  isQuestionUnlocked: s <= h,
139
140
  response: t[l],
140
141
  behavior: r,
141
142
  userType: m,
142
143
  layout: f,
143
- onResponseChange: D,
144
+ onResponseChange: U,
144
145
  onTeacherValidation: N,
145
- onHelp: E,
146
+ onHelp: D,
146
147
  onSubmit: x,
148
+ onUnassign: z,
147
149
  setActiveQuestionId: c,
148
150
  setBlocker: F,
149
151
  setSummaryVisible: u,
@@ -156,6 +158,6 @@ const ve = L(($) => {
156
158
  ] });
157
159
  });
158
160
  export {
159
- ve as default
161
+ xe as default
160
162
  };
161
163
  //# sourceMappingURL=worksheet-action-bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worksheet-action-bar.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.tsx"],"sourcesContent":["import type { IWorksheetActionBarProps } from './worksheet-action-bar-types';\nimport type { FC } from 'react';\n\nimport { memo, useCallback, useState } from 'react';\n\nimport CalculatorIcon from '../../../../assets/line-icons/icons/calculator';\nimport DownIcon from '../../../../assets/line-icons/icons/down';\nimport UpIcon from '../../../../assets/line-icons/icons/up';\nimport Toolbar from '../../../cue-canvas/toolbar/toolbar';\nimport Button from '../../../ui/buttons/button/button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport { scrollToQuestion } from '../worksheet-helpers';\nimport ScribbleSwitch from '../worksheet-questions-controller/scribble-switch';\nimport WorksheetQuestionsController from '../worksheet-questions-controller/worksheet-questions-controller';\nimport WorksheetQuestionsSummary from '../worksheet-questions-summary/worksheet-questions-summary';\nimport * as Styled from '../worksheet-styled';\nimport WorksheetSummaryController from '../worksheet-summary-controller/worksheet-summary-controller';\n\nconst WorksheetActionBar: FC<IWorksheetActionBarProps> = memo(props => {\n const {\n userType,\n layout,\n behavior,\n worksheetName,\n questions,\n responses,\n activeQuestionIndex,\n lastUnlockedQuestionIndex,\n appendedQuestionIds,\n learnosity,\n isCanvasEnabled,\n isScribblingEnabled,\n isSummaryVisible,\n setIsScribblingEnabled,\n setActiveQuestionId,\n setResponses,\n getTimeSpentOnQuestion,\n setBlocker,\n setSummaryVisible,\n showCalculator,\n onItemNumberClick,\n onTeacherValidation,\n onGoToReview,\n onResponseChange,\n onHelp,\n onSubmit,\n onCalculatorOpen,\n canSubmitWorksheet,\n loggerRef,\n onSkip,\n canToggleScribbling,\n } = props;\n const { navigationBar, questionsScrollable } = layout;\n const activeQuestion = questions[activeQuestionIndex];\n const { response_id: activeQuestionId } = activeQuestion ?? {};\n const [isSummaryOpened, setIsSummaryOpened] = useState(false);\n const isAppended = activeQuestionId ? appendedQuestionIds.includes(activeQuestionId) : false;\n\n const handleItemNumberClick = useCallback(\n (questionId: string) => {\n setIsSummaryOpened(false);\n onItemNumberClick(questionId);\n },\n [onItemNumberClick],\n );\n\n const handleOnGoToReview = useCallback(() => {\n setIsSummaryOpened(false);\n onGoToReview();\n }, [onGoToReview]);\n\n const handleSummaryButtonClick = useCallback(() => {\n setIsSummaryOpened(prev => !prev);\n }, []);\n\n const handleBackFromSummary = useCallback(() => {\n setSummaryVisible(false);\n\n const questionId = questions[questions.length - 1]?.response_id;\n\n if (questionId) {\n if (questionsScrollable) {\n requestAnimationFrame(() => scrollToQuestion(questionId));\n } else {\n setActiveQuestionId(questionId);\n }\n }\n }, [questions, questionsScrollable, setActiveQuestionId, setSummaryVisible]);\n\n const handleSheetSubmitButtonClick = useCallback(() => {\n onSubmit?.(responses);\n }, [onSubmit, responses]);\n\n if (isSummaryVisible) {\n return (\n <WorksheetSummaryController\n onBack={handleBackFromSummary}\n behavior={behavior}\n onSubmit={handleSheetSubmitButtonClick}\n canSubmitWorksheet={!!canSubmitWorksheet}\n />\n );\n }\n\n return (\n <>\n <FlexView $flexDirection=\"row\" $flexGap={12}>\n <ScribbleSwitch\n isScribblingEnabled={isScribblingEnabled}\n setIsScribblingEnabled={setIsScribblingEnabled}\n isCanvasEnabled={isCanvasEnabled}\n loggerRef={loggerRef}\n canToggleScribbling={canToggleScribbling}\n />\n {behavior.canShowDesmosCalc && (\n <Styled.IconContainer\n $active={showCalculator}\n $alignItems=\"center\"\n $justifyContent=\"space-between\"\n onClick={onCalculatorOpen}\n >\n <CalculatorIcon />\n </Styled.IconContainer>\n )}\n </FlexView>\n {isScribblingEnabled && <Toolbar userType={userType} renderAs=\"canvas\" />}\n {navigationBar === 'bottom' && (\n <>\n {isSummaryOpened && (\n <Styled.SummaryWrapper $alignItems=\"center\">\n <WorksheetQuestionsSummary\n activeQuestionIndex={activeQuestionIndex}\n lastUnlockedQuestionIndex={lastUnlockedQuestionIndex}\n onItemNumberClick={handleItemNumberClick}\n questions={questions}\n responses={responses}\n worksheetName={worksheetName}\n behavior={behavior}\n userType={userType}\n onClose={handleSummaryButtonClick}\n onGoToReview={handleOnGoToReview}\n summaryVisible={isSummaryVisible}\n />\n </Styled.SummaryWrapper>\n )}\n <Button\n renderAs=\"secondary\"\n widthX={13.25}\n label={`Question ${activeQuestionIndex + 1} of ${questions.length}`}\n size=\"small\"\n Icon={isSummaryOpened ? DownIcon : UpIcon}\n iconPosition=\"right\"\n justifyContent=\"space-between\"\n onClick={handleSummaryButtonClick}\n />\n </>\n )}\n {activeQuestion && activeQuestionId && (\n <WorksheetQuestionsController\n learnosity={learnosity}\n question={activeQuestion}\n questions={questions}\n responses={responses}\n canSubmitWorksheet={canSubmitWorksheet}\n questionIndex={activeQuestionIndex}\n isQuestionAppended={isAppended}\n isQuestionUnlocked={activeQuestionIndex <= lastUnlockedQuestionIndex}\n response={responses[activeQuestionId]}\n behavior={behavior}\n userType={userType}\n layout={layout}\n onResponseChange={onResponseChange}\n onTeacherValidation={onTeacherValidation}\n onHelp={onHelp}\n onSubmit={handleSheetSubmitButtonClick}\n setActiveQuestionId={setActiveQuestionId}\n setBlocker={setBlocker}\n setSummaryVisible={setSummaryVisible}\n setResponses={setResponses}\n getTimeSpentOnQuestion={getTimeSpentOnQuestion}\n loggerRef={loggerRef}\n onSkip={onSkip}\n />\n )}\n </>\n );\n});\n\nexport default WorksheetActionBar;\n"],"names":["WorksheetActionBar","memo","props","userType","layout","behavior","worksheetName","questions","responses","activeQuestionIndex","lastUnlockedQuestionIndex","appendedQuestionIds","learnosity","isCanvasEnabled","isScribblingEnabled","isSummaryVisible","setIsScribblingEnabled","setActiveQuestionId","setResponses","getTimeSpentOnQuestion","setBlocker","setSummaryVisible","showCalculator","onItemNumberClick","onTeacherValidation","onGoToReview","onResponseChange","onHelp","onSubmit","onCalculatorOpen","canSubmitWorksheet","loggerRef","onSkip","canToggleScribbling","navigationBar","questionsScrollable","activeQuestion","activeQuestionId","isSummaryOpened","setIsSummaryOpened","useState","isAppended","handleItemNumberClick","useCallback","questionId","handleOnGoToReview","handleSummaryButtonClick","prev","handleBackFromSummary","_a","scrollToQuestion","handleSheetSubmitButtonClick","jsx","WorksheetSummaryController","jsxs","Fragment","FlexView","ScribbleSwitch","Styled.IconContainer","CalculatorIcon","Toolbar","Styled.SummaryWrapper","WorksheetQuestionsSummary","Button","DownIcon","UpIcon","WorksheetQuestionsController"],"mappings":"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"}
1
+ {"version":3,"file":"worksheet-action-bar.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.tsx"],"sourcesContent":["import type { IWorksheetActionBarProps } from './worksheet-action-bar-types';\nimport type { FC } from 'react';\n\nimport { memo, useCallback, useState } from 'react';\n\nimport CalculatorIcon from '../../../../assets/line-icons/icons/calculator';\nimport DownIcon from '../../../../assets/line-icons/icons/down';\nimport UpIcon from '../../../../assets/line-icons/icons/up';\nimport Toolbar from '../../../cue-canvas/toolbar/toolbar';\nimport Button from '../../../ui/buttons/button/button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport { scrollToQuestion } from '../worksheet-helpers';\nimport ScribbleSwitch from '../worksheet-questions-controller/scribble-switch';\nimport WorksheetQuestionsController from '../worksheet-questions-controller/worksheet-questions-controller';\nimport WorksheetQuestionsSummary from '../worksheet-questions-summary/worksheet-questions-summary';\nimport * as Styled from '../worksheet-styled';\nimport WorksheetSummaryController from '../worksheet-summary-controller/worksheet-summary-controller';\n\nconst WorksheetActionBar: FC<IWorksheetActionBarProps> = memo(props => {\n const {\n userType,\n layout,\n behavior,\n worksheetName,\n questions,\n responses,\n activeQuestionIndex,\n lastUnlockedQuestionIndex,\n appendedQuestionIds,\n learnosity,\n isCanvasEnabled,\n isScribblingEnabled,\n isSummaryVisible,\n setIsScribblingEnabled,\n setActiveQuestionId,\n setResponses,\n getTimeSpentOnQuestion,\n setBlocker,\n setSummaryVisible,\n showCalculator,\n onItemNumberClick,\n onTeacherValidation,\n onGoToReview,\n onResponseChange,\n onHelp,\n onSubmit,\n onCalculatorOpen,\n canSubmitWorksheet,\n loggerRef,\n onSkip,\n onUnassign,\n canToggleScribbling,\n } = props;\n const { navigationBar, questionsScrollable } = layout;\n const activeQuestion = questions[activeQuestionIndex];\n const { response_id: activeQuestionId } = activeQuestion ?? {};\n const [isSummaryOpened, setIsSummaryOpened] = useState(false);\n const isAppended = activeQuestionId ? appendedQuestionIds.includes(activeQuestionId) : false;\n\n const handleItemNumberClick = useCallback(\n (questionId: string) => {\n setIsSummaryOpened(false);\n onItemNumberClick(questionId);\n },\n [onItemNumberClick],\n );\n\n const handleOnGoToReview = useCallback(() => {\n setIsSummaryOpened(false);\n onGoToReview();\n }, [onGoToReview]);\n\n const handleSummaryButtonClick = useCallback(() => {\n setIsSummaryOpened(prev => !prev);\n }, []);\n\n const handleBackFromSummary = useCallback(() => {\n setSummaryVisible(false);\n\n const questionId = questions[questions.length - 1]?.response_id;\n\n if (questionId) {\n if (questionsScrollable) {\n requestAnimationFrame(() => scrollToQuestion(questionId));\n } else {\n setActiveQuestionId(questionId);\n }\n }\n }, [questions, questionsScrollable, setActiveQuestionId, setSummaryVisible]);\n\n const handleSheetSubmitButtonClick = useCallback(() => {\n onSubmit?.(responses);\n }, [onSubmit, responses]);\n\n if (isSummaryVisible) {\n return (\n <WorksheetSummaryController\n onBack={handleBackFromSummary}\n behavior={behavior}\n onSubmit={handleSheetSubmitButtonClick}\n canSubmitWorksheet={!!canSubmitWorksheet}\n />\n );\n }\n\n return (\n <>\n <FlexView $flexDirection=\"row\" $flexGap={12}>\n <ScribbleSwitch\n isScribblingEnabled={isScribblingEnabled}\n setIsScribblingEnabled={setIsScribblingEnabled}\n isCanvasEnabled={isCanvasEnabled}\n loggerRef={loggerRef}\n canToggleScribbling={canToggleScribbling}\n />\n {behavior.canShowDesmosCalc && (\n <Styled.IconContainer\n $active={showCalculator}\n $alignItems=\"center\"\n $justifyContent=\"space-between\"\n onClick={onCalculatorOpen}\n >\n <CalculatorIcon />\n </Styled.IconContainer>\n )}\n </FlexView>\n {isScribblingEnabled && <Toolbar userType={userType} renderAs=\"canvas\" />}\n {navigationBar === 'bottom' && (\n <>\n {isSummaryOpened && (\n <Styled.SummaryWrapper $alignItems=\"center\">\n <WorksheetQuestionsSummary\n activeQuestionIndex={activeQuestionIndex}\n lastUnlockedQuestionIndex={lastUnlockedQuestionIndex}\n onItemNumberClick={handleItemNumberClick}\n questions={questions}\n responses={responses}\n worksheetName={worksheetName}\n behavior={behavior}\n userType={userType}\n onClose={handleSummaryButtonClick}\n onGoToReview={handleOnGoToReview}\n summaryVisible={isSummaryVisible}\n />\n </Styled.SummaryWrapper>\n )}\n <Button\n renderAs=\"secondary\"\n widthX={13.25}\n label={`Question ${activeQuestionIndex + 1} of ${questions.length}`}\n size=\"small\"\n Icon={isSummaryOpened ? DownIcon : UpIcon}\n iconPosition=\"right\"\n justifyContent=\"space-between\"\n onClick={handleSummaryButtonClick}\n />\n </>\n )}\n {activeQuestion && activeQuestionId && (\n <WorksheetQuestionsController\n learnosity={learnosity}\n question={activeQuestion}\n questions={questions}\n responses={responses}\n canSubmitWorksheet={canSubmitWorksheet}\n questionIndex={activeQuestionIndex}\n isQuestionAppended={isAppended}\n isQuestionUnlocked={activeQuestionIndex <= lastUnlockedQuestionIndex}\n response={responses[activeQuestionId]}\n behavior={behavior}\n userType={userType}\n layout={layout}\n onResponseChange={onResponseChange}\n onTeacherValidation={onTeacherValidation}\n onHelp={onHelp}\n onSubmit={handleSheetSubmitButtonClick}\n onUnassign={onUnassign}\n setActiveQuestionId={setActiveQuestionId}\n setBlocker={setBlocker}\n setSummaryVisible={setSummaryVisible}\n setResponses={setResponses}\n getTimeSpentOnQuestion={getTimeSpentOnQuestion}\n loggerRef={loggerRef}\n onSkip={onSkip}\n />\n )}\n </>\n );\n});\n\nexport default WorksheetActionBar;\n"],"names":["WorksheetActionBar","memo","props","userType","layout","behavior","worksheetName","questions","responses","activeQuestionIndex","lastUnlockedQuestionIndex","appendedQuestionIds","learnosity","isCanvasEnabled","isScribblingEnabled","isSummaryVisible","setIsScribblingEnabled","setActiveQuestionId","setResponses","getTimeSpentOnQuestion","setBlocker","setSummaryVisible","showCalculator","onItemNumberClick","onTeacherValidation","onGoToReview","onResponseChange","onHelp","onSubmit","onCalculatorOpen","canSubmitWorksheet","loggerRef","onSkip","onUnassign","canToggleScribbling","navigationBar","questionsScrollable","activeQuestion","activeQuestionId","isSummaryOpened","setIsSummaryOpened","useState","isAppended","handleItemNumberClick","useCallback","questionId","handleOnGoToReview","handleSummaryButtonClick","prev","handleBackFromSummary","_a","scrollToQuestion","handleSheetSubmitButtonClick","jsx","WorksheetSummaryController","jsxs","Fragment","FlexView","ScribbleSwitch","Styled.IconContainer","CalculatorIcon","Toolbar","Styled.SummaryWrapper","WorksheetQuestionsSummary","Button","DownIcon","UpIcon","WorksheetQuestionsController"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import b from "../../../assets/line-icons/icons/bulb2.js";
2
- import O from "../../../assets/line-icons/icons/edit-star.js";
3
- import R from "../../../assets/line-icons/icons/edit2.js";
4
- import C from "../../../assets/line-icons/icons/question-letter.js";
5
- import k from "../../../assets/line-icons/icons/star2.js";
6
- import w from "../constants/events.js";
7
- import { OPTIONAL_ITEM_TYPES as A, ACTION_BAR_HEIGHT as N, QUESTION_WIDTH as y, SPLIT_QUESTION_WIDTH as L, CLOZE_FORMULA_RESPONSE_LIMIT as Q } from "./constants.js";
1
+ import w from "../../../assets/line-icons/icons/bulb2.js";
2
+ import S from "../../../assets/line-icons/icons/edit-star.js";
3
+ import O from "../../../assets/line-icons/icons/edit2.js";
4
+ import R from "../../../assets/line-icons/icons/question-letter.js";
5
+ import A from "../../../assets/line-icons/icons/star2.js";
6
+ import T from "../constants/events.js";
7
+ import { OPTIONAL_ITEM_TYPES as k, ACTION_BAR_HEIGHT as L, QUESTION_WIDTH as y, SPLIT_QUESTION_WIDTH as N, CLOZE_FORMULA_RESPONSE_LIMIT as Q } from "./constants.js";
8
8
  import { QUESTION_TAGS as E } from "./worksheet-types.js";
9
9
  const x = (e) => {
10
10
  switch (e) {
@@ -36,19 +36,19 @@ const x = (e) => {
36
36
  const r = e.toLowerCase();
37
37
  return r === "intro" || r === "concept-intro";
38
38
  }, I = (e) => e.reduce((r, t) => {
39
- const [n, s] = t.split(":"), o = n == null ? void 0 : n.trim(), c = s == null ? void 0 : s.trim();
40
- return !o || !c ? r : {
39
+ const [n, s] = t.split(":"), a = n == null ? void 0 : n.trim(), c = s == null ? void 0 : s.trim();
40
+ return !a || !c ? r : {
41
41
  ...r,
42
- [o.toLowerCase()]: c
42
+ [a.toLowerCase()]: c
43
43
  };
44
44
  }, {}), J = (e, { sectioned: r = !1, adaptive: t = !1 }) => {
45
45
  if (r)
46
- return e.reduce((s, o, c) => {
47
- var T;
46
+ return e.reduce((s, a, c) => {
47
+ var b;
48
48
  let d = !1;
49
- const { content: u, questions: i, itemType: a } = o, l = x(a), m = s[s.length - 1], g = l === (m == null ? void 0 : m.section_name) && (m != null && m.item_display_number) ? m.item_display_number + 1 : 1, p = u.match(/question-[^"]*/g), _ = p == null ? void 0 : p.map((f, h) => {
49
+ const { content: u, questions: i, itemType: o } = a, l = x(o), m = s[s.length - 1], g = l === (m == null ? void 0 : m.section_name) && (m != null && m.item_display_number) ? m.item_display_number + 1 : 1, _ = u.match(/question-[^"]*/g), p = _ == null ? void 0 : _.map((f, h) => {
50
50
  const v = i.find(
51
- ({ response_id: S }) => S === f.replace("question-", "")
51
+ ({ response_id: C }) => C === f.replace("question-", "")
52
52
  );
53
53
  if (!v)
54
54
  throw new Error(`Question not found for the response id: ${f}`);
@@ -56,74 +56,74 @@ const x = (e) => {
56
56
  ...v,
57
57
  // 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
58
58
  feedback_attempts: void 0,
59
- item_reference: o.reference,
59
+ item_reference: a.reference,
60
60
  item_number: c,
61
61
  item_display_number: g,
62
62
  section_name: l,
63
- item_type: r ? a : void 0,
64
- is_optional: a ? A.includes(a) : !1,
65
- item_tags: o.tags ?? [],
66
- item_tags_map: I(o.tags ?? []),
63
+ item_type: r ? o : void 0,
64
+ is_optional: o ? k.includes(o) : !1,
65
+ item_tags: a.tags ?? [],
66
+ item_tags_map: I(a.tags ?? []),
67
67
  question_number: h - (d ? 1 : 0),
68
- total_questions: p.length
68
+ total_questions: _.length
69
69
  };
70
70
  });
71
- if (d = !1, _ != null && _[0] && c > 0 && e.length > 0) {
72
- const f = (T = e[c - 1]) == null ? void 0 : T.itemType, h = a != null && a.startsWith("advanced-") ? "advanced" : a, v = f != null && f.startsWith("advanced-") ? "advanced" : f;
71
+ if (d = !1, p != null && p[0] && c > 0 && e.length > 0) {
72
+ const f = (b = e[c - 1]) == null ? void 0 : b.itemType, h = o != null && o.startsWith("advanced-") ? "advanced" : o, v = f != null && f.startsWith("advanced-") ? "advanced" : f;
73
73
  if ((h === "practice-basic" || h === "practice-regular" || h === "exit-ticket" || h === "advanced") && h !== v)
74
74
  return [
75
75
  ...s,
76
76
  {
77
- ..._[0],
77
+ ...p[0],
78
78
  metadata: {
79
- ..._[0].metadata,
79
+ ...p[0].metadata,
80
80
  teacher_tips: void 0,
81
81
  hints: void 0,
82
82
  solution: void 0
83
83
  },
84
84
  instructor_stimulus: "SystemIntro",
85
- response_id: `${a}-system-intro`,
86
- is_optional: a == null ? void 0 : a.startsWith("advanced-")
85
+ response_id: `${o}-system-intro`,
86
+ is_optional: o == null ? void 0 : o.startsWith("advanced-")
87
87
  },
88
- ..._ ?? []
88
+ ...p ?? []
89
89
  ];
90
90
  }
91
- return [...s, ..._ ?? []];
91
+ return [...s, ...p ?? []];
92
92
  }, []);
93
- const n = e.reduce((s, o, c) => {
94
- const { content: d, questions: u } = o, i = d.match(/question-[^"]*/g), a = i == null ? void 0 : i.map(
93
+ const n = e.reduce((s, a, c) => {
94
+ const { content: d, questions: u } = a, i = d.match(/question-[^"]*/g), o = i == null ? void 0 : i.map(
95
95
  (l, m) => {
96
96
  const g = u.find(
97
- ({ response_id: p }) => p === l.replace("question-", "")
97
+ ({ response_id: _ }) => _ === l.replace("question-", "")
98
98
  );
99
99
  if (!g)
100
100
  throw new Error(`Question not found for the response id: ${l}`);
101
101
  return {
102
102
  ...g,
103
103
  feedback_attempts: void 0,
104
- item_reference: o.reference,
104
+ item_reference: a.reference,
105
105
  item_number: c,
106
106
  item_display_number: c + 1,
107
- item_tags: o.tags ?? [],
108
- item_tags_map: I(o.tags ?? []),
107
+ item_tags: a.tags ?? [],
108
+ item_tags_map: I(a.tags ?? []),
109
109
  question_number: m,
110
110
  total_questions: i.length
111
111
  };
112
112
  }
113
113
  );
114
- return [...s, ...a ?? []];
114
+ return [...s, ...o ?? []];
115
115
  }, []);
116
116
  if (t) {
117
- const s = [], o = {};
117
+ const s = [], a = {};
118
118
  return n.sort((c, d) => {
119
119
  var m, g;
120
120
  const u = c.item_tags_map[E.TRIAL_TOPIC], i = d.item_tags_map[E.TRIAL_TOPIC];
121
- if (u && o[u] === void 0 && (o[u] = s.length, s.push(u)), i && o[i] === void 0 && (o[i] = s.length, s.push(i)), !u || !i)
121
+ if (u && a[u] === void 0 && (a[u] = s.length, s.push(u)), i && a[i] === void 0 && (a[i] = s.length, s.push(i)), !u || !i)
122
122
  return 0;
123
- const a = `${o[u]}-${((m = c.item_tags_map[E.QUESTION_CODE]) == null ? void 0 : m.length) ?? 0}`, l = `${o[i]}-${((g = d.item_tags_map[E.QUESTION_CODE]) == null ? void 0 : g.length) ?? 0}`;
124
- return a > l ? 1 : -1;
123
+ const o = `${a[u]}-${((m = c.item_tags_map[E.QUESTION_CODE]) == null ? void 0 : m.length) ?? 0}`, l = `${a[i]}-${((g = d.item_tags_map[E.QUESTION_CODE]) == null ? void 0 : g.length) ?? 0}`;
124
+ return o > l ? 1 : -1;
125
125
  }).map((c) => {
126
- const d = o[c.item_tags_map[E.TRIAL_TOPIC] ?? ""] ?? 0, u = c.item_tags_map[E.QUESTION_CODE] ?? "";
126
+ const d = a[c.item_tags_map[E.TRIAL_TOPIC] ?? ""] ?? 0, u = c.item_tags_map[E.QUESTION_CODE] ?? "";
127
127
  return {
128
128
  ...c,
129
129
  item_display_number: d * 3 + u.length
@@ -131,7 +131,7 @@ const x = (e) => {
131
131
  });
132
132
  }
133
133
  return n;
134
- }, V = ({
134
+ }, K = ({
135
135
  questions: e,
136
136
  initialQuestion: r,
137
137
  initialResponseId: t,
@@ -139,11 +139,11 @@ const x = (e) => {
139
139
  lastUnlockedQuestionIndex: s
140
140
  }) => {
141
141
  var d, u;
142
- const o = e.slice(0, s + 1), c = e[s];
143
- if (t && o.find((i) => i.response_id === t))
142
+ const a = e.slice(0, s + 1), c = e[s];
143
+ if (t && a.find((i) => i.response_id === t))
144
144
  return t;
145
145
  if (typeof n == "number" && n <= c.item_number) {
146
- const i = e.find((a) => a.item_number === n);
146
+ const i = e.find((o) => o.item_number === n);
147
147
  if (i != null && i.response_id)
148
148
  return i.response_id;
149
149
  }
@@ -154,41 +154,41 @@ const x = (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
- }, z = ({
157
+ }, V = ({
158
158
  questions: e,
159
159
  responses: r,
160
160
  behavior: t,
161
161
  userType: n
162
162
  }) => {
163
- const { maximumAttempts: s, teacherValidationEnabled: o, validation: c, navigationMode: d } = t, u = [...e].reverse().findIndex((i) => {
164
- var _;
165
- const a = r[i.response_id], { attemptsHistory: l, validatedByTeacher: m, assignStatus: g } = a ?? {};
166
- if (o)
163
+ const { maximumAttempts: s, teacherValidationEnabled: a, validation: c, navigationMode: d } = t, u = [...e].reverse().findIndex((i) => {
164
+ var p;
165
+ const o = r[i.response_id], { attemptsHistory: l, validatedByTeacher: m, assignStatus: g } = o ?? {};
166
+ if (a)
167
167
  return !!(m || g === "skipped");
168
- const p = (_ = l == null ? void 0 : l.slice(-1)[0]) == null ? void 0 : _.score;
169
- return p ? (p.score ?? 0) === p.max_score ? !0 : ((l == null ? void 0 : l.length) ?? 0) >= s : !!(!c && d === "LINEAR" && (a != null && a.response || a != null && a.skipped));
168
+ const _ = (p = l == null ? void 0 : l.slice(-1)[0]) == null ? void 0 : p.score;
169
+ return _ ? (_.score ?? 0) === _.max_score ? !0 : ((l == null ? void 0 : l.length) ?? 0) >= s : !!(!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
- if (o) {
175
- const i = [...e].reverse().findIndex((a) => {
174
+ if (a) {
175
+ const i = [...e].reverse().findIndex((o) => {
176
176
  var l;
177
- return ((l = r[a.response_id]) == null ? void 0 : l.assignStatus) !== "skipped";
177
+ return ((l = r[o.response_id]) == null ? void 0 : l.assignStatus) !== "skipped";
178
178
  });
179
179
  return e.length - i - 1;
180
180
  }
181
181
  return e.length - 1;
182
182
  }
183
- if (o && n === "STUDENT") {
184
- const i = e.length - u, a = e[i], { assignStatus: l } = r[a.response_id] ?? {};
185
- return a.is_optional && !l ? i - 1 : i;
183
+ if (a && n === "STUDENT") {
184
+ const i = e.length - u, o = e[i], { assignStatus: l } = r[o.response_id] ?? {};
185
+ return o.is_optional && !l ? i - 1 : i;
186
186
  }
187
187
  return e.length - u;
188
188
  };
189
- function U(e, r) {
189
+ function B(e, r) {
190
190
  var n, s;
191
- const t = Array.isArray(e) ? e.find((o) => o.response_id === r) : e;
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`);
194
194
  return {
@@ -196,7 +196,7 @@ function U(e, r) {
196
196
  itemReference: t.item_reference,
197
197
  itemPosition: t.item_number,
198
198
  questionPosition: t.question_number,
199
- isOkayTypeQuestion: P(t),
199
+ isOkayTypeQuestion: U(t),
200
200
  score: {
201
201
  max_score: ((s = (n = t == null ? void 0 : t.validation) == null ? void 0 : n.valid_response) == null ? void 0 : s.score) ?? 0 * t.metadata.valid_response_count
202
202
  },
@@ -206,20 +206,20 @@ function U(e, r) {
206
206
  }
207
207
  };
208
208
  }
209
- const K = (e) => e.reduce(
209
+ const z = (e) => e.reduce(
210
210
  (r, t) => ({
211
211
  ...r,
212
- [t.response_id]: U(e, t.response_id)
212
+ [t.response_id]: B(e, t.response_id)
213
213
  }),
214
214
  {}
215
215
  ), X = (e, r) => {
216
216
  const { actionBar: t } = r;
217
217
  return {
218
218
  questionsContainerWidth: !e.some(
219
- (o) => o.questions.some((c) => c.stimulus_review)
220
- ) ? y : L,
219
+ (a) => a.questions.some((c) => c.stimulus_review)
220
+ ) ? y : N,
221
221
  maxQuestionWidth: y,
222
- actionbarHeight: t === "bottom" ? N : 0
222
+ actionbarHeight: t === "bottom" ? L : 0
223
223
  };
224
224
  }, Z = ({
225
225
  questions: e,
@@ -231,7 +231,7 @@ const K = (e) => e.reduce(
231
231
  block: "start",
232
232
  behavior: r ? "smooth" : "instant"
233
233
  });
234
- }, P = (e) => {
234
+ }, U = (e) => {
235
235
  const { type: r, options: t, instructor_stimulus: n } = e;
236
236
  return ("item_type" in e ? e.item_type : void 0) === "overview" || n === "Intro" || n === "SystemIntro" || n === "Concept-Intro" ? !0 : r === "mcq" && (t == null ? void 0 : t.length) === 1;
237
237
  }, q = (e) => {
@@ -240,10 +240,10 @@ const K = (e) => e.reduce(
240
240
  enableMenu: !1,
241
241
  ignoreHtmlClass: "lrn_noMath",
242
242
  compileError: function(r, t, n) {
243
- e(w.MATHJAX_COMPILE_ERROR), r.compileError(t, n);
243
+ e(T.MATHJAX_COMPILE_ERROR), r.compileError(t, n);
244
244
  },
245
245
  typesetError: function(r, t, n) {
246
- e(w.MATHJAX_TYPESET_ERROR), r.typesetError(t, n);
246
+ e(T.MATHJAX_TYPESET_ERROR), r.typesetError(t, n);
247
247
  }
248
248
  },
249
249
  tex: {
@@ -266,7 +266,7 @@ const K = (e) => e.reduce(
266
266
  overarc: ["{\\overparen{#1}}", 1]
267
267
  },
268
268
  formatError: (r, t) => {
269
- e(w.MATHJAX_FORMAT_ERROR, {
269
+ e(T.MATHJAX_FORMAT_ERROR, {
270
270
  id: t.id,
271
271
  message: t.message
272
272
  }), r.formatError(t);
@@ -328,7 +328,7 @@ const K = (e) => e.reduce(
328
328
  default:
329
329
  return "YELLOW_1";
330
330
  }
331
- }, ae = (e) => {
331
+ }, oe = (e) => {
332
332
  switch (e) {
333
333
  case "learning":
334
334
  return "Learning";
@@ -343,20 +343,20 @@ const K = (e) => e.reduce(
343
343
  default:
344
344
  return "";
345
345
  }
346
- }, oe = (e) => {
346
+ }, ae = (e) => {
347
347
  switch (e) {
348
348
  case "learning":
349
- return b;
349
+ return w;
350
350
  case "practice-basic":
351
- return R;
352
- case "practice-regular":
353
351
  return O;
352
+ case "practice-regular":
353
+ return S;
354
354
  case "exit-ticket":
355
- return C;
355
+ return R;
356
356
  case "advanced":
357
- return k;
357
+ return A;
358
358
  default:
359
- return b;
359
+ return w;
360
360
  }
361
361
  }, ie = (e) => Array.isArray(e.value) ? e.value.some(
362
362
  (t) => typeof t == "string" && t.length > Q
@@ -369,25 +369,39 @@ const K = (e) => e.reduce(
369
369
  bannerBackgroundColor: "ORANGE_2",
370
370
  label: "Complete this with your tutor in class"
371
371
  };
372
+ }, ce = ({
373
+ isPuzzleWorksheet: e,
374
+ isTestWorksheet: r,
375
+ imageHue: t = "BLUE"
376
+ }) => e ? {
377
+ bgColor: `${t}_3`,
378
+ borderColor: `${t}_4`
379
+ } : r ? {
380
+ bgColor: "WHITE_3",
381
+ borderColor: "WHITE_4"
382
+ } : {
383
+ bgColor: "BLACK_1",
384
+ borderColor: "BLACK_4"
372
385
  };
373
386
  export {
374
387
  ie as checkIsClozeFormulaResponseInvalid,
375
- V as getInitialQuestionId,
376
- K as getInitialResponses,
377
- z as getLastUnlockedQuestionIndex,
388
+ K as getInitialQuestionId,
389
+ z as getInitialResponses,
390
+ V as getLastUnlockedQuestionIndex,
378
391
  ne as getNavigationSectionBackgroundColor,
379
- oe as getNavigationSectionIcon,
380
- ae as getNavigationSectionName,
392
+ ae as getNavigationSectionIcon,
393
+ oe as getNavigationSectionName,
381
394
  ee as getPaperColorByQuestion,
382
395
  te as getQuestionBackgroundImage,
383
396
  re as getQuestionBorderColor,
384
- U as getQuestionMetadata,
397
+ B as getQuestionMetadata,
385
398
  J as getQuestionsFromItems,
386
399
  Z as getRenderableQuestions,
387
400
  X as getWorksheetDimensions,
401
+ ce as getWorksheetHeaderLayout,
388
402
  se as getWorksheetNudgeBannerInfo,
389
403
  M as isConceptIntroWidget,
390
- P as isOkayTypeQuestion,
404
+ U as isOkayTypeQuestion,
391
405
  j as scrollToQuestion,
392
406
  q as setMathJaxConfigInWindow
393
407
  };