@cuemath/leap 3.1.16 → 3.1.17-aa0

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.
@@ -1,17 +1,17 @@
1
- import { jsxs as o, jsx as r } from "react/jsx-runtime";
2
- import { useCallback as m } from "react";
3
- import { ILLUSTRATIONS as c } from "../../../assets/illustrations/illustrations.js";
4
- import d from "../buttons/button/button.js";
5
- import h from "../image/image.js";
6
- import i from "../layout/flex-view.js";
7
- import n from "../text/text.js";
8
- const $ = ({ height: a, onTryAgain: t, theme: l = "light" }) => {
9
- const s = m(() => {
1
+ import { jsxs as o, jsx as r, Fragment as h } from "react/jsx-runtime";
2
+ import { useCallback as g } from "react";
3
+ import { ILLUSTRATIONS as $ } from "../../../assets/illustrations/illustrations.js";
4
+ import p from "../buttons/button/button.js";
5
+ import f from "../image/image.js";
6
+ import n from "../layout/flex-view.js";
7
+ import i from "../text/text.js";
8
+ const w = (a) => {
9
+ const { height: l, onTryAgain: t, theme: s = "light", title: m, description: c } = a, d = g(() => {
10
10
  t ? t() : window.location.reload();
11
- }, [t]), e = l === "dark" ? "WHITE_T_87" : "BLACK_T_87";
12
- return /* @__PURE__ */ o(i, { $alignItems: "center", $justifyContent: "center", $height: a, children: [
11
+ }, [t]), e = s === "dark" ? "WHITE_T_87" : "BLACK_T_87";
12
+ return /* @__PURE__ */ o(n, { $alignItems: "center", $justifyContent: "center", $height: l, children: [
13
13
  /* @__PURE__ */ r(
14
- i,
14
+ n,
15
15
  {
16
16
  $widthX: 22.5,
17
17
  $heightX: 11.5,
@@ -20,28 +20,28 @@ const $ = ({ height: a, onTryAgain: t, theme: l = "light" }) => {
20
20
  $background: "GREY_1",
21
21
  $justifyContent: "center",
22
22
  $alignItems: "center",
23
- children: /* @__PURE__ */ r(h, { width: 122, height: 100, src: c.ROCKET_BROKEN, withLoader: !1 })
23
+ children: /* @__PURE__ */ r(f, { width: 122, height: 100, src: $.ROCKET_BROKEN, withLoader: !1 })
24
24
  }
25
25
  ),
26
- /* @__PURE__ */ r(n, { $renderAs: "h4", $marginBottomX: 0.5, $color: e, $align: "center", children: "Oops! Looks like something went wrong" }),
27
- /* @__PURE__ */ o(n, { $renderAs: "body2", $align: "center", $marginBottomX: 1.5, $color: e, children: [
26
+ /* @__PURE__ */ r(i, { $renderAs: "h4", $marginBottomX: 0.5, $color: e, $align: "center", children: m ?? "Oops! Looks like something went wrong" }),
27
+ /* @__PURE__ */ r(i, { $renderAs: "body2", $align: "center", $marginBottomX: 1.5, $color: e, children: c ?? /* @__PURE__ */ o(h, { children: [
28
28
  "Please try again. Alternatively if that does not work,",
29
29
  /* @__PURE__ */ r("br", {}),
30
30
  " please contact support."
31
- ] }),
31
+ ] }) }),
32
32
  /* @__PURE__ */ r(
33
- d,
33
+ p,
34
34
  {
35
35
  label: "Try again",
36
- onClick: s,
36
+ onClick: d,
37
37
  renderAs: "primary",
38
38
  size: "small",
39
39
  widthX: 14
40
40
  }
41
41
  )
42
42
  ] });
43
- }, T = $;
43
+ }, b = w;
44
44
  export {
45
- T as default
45
+ b as default
46
46
  };
47
47
  //# sourceMappingURL=error.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sources":["../../../../src/features/ui/error/error.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\n\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\nimport Button from '../buttons/button/button';\nimport Image from '../image/image';\nimport FlexView from '../layout/flex-view';\nimport Text from '../text/text';\n\ninterface IErrorProps {\n onTryAgain?: () => void;\n height?: string | number;\n theme?: 'light' | 'dark';\n}\n\nconst Error: React.FC<IErrorProps> = ({ height, onTryAgain, theme = 'light' }) => {\n const handleTryAgain = useCallback(() => {\n if (onTryAgain) {\n onTryAgain();\n } else {\n window.location.reload();\n }\n }, [onTryAgain]);\n\n const textColor = theme === 'dark' ? 'WHITE_T_87' : 'BLACK_T_87';\n\n return (\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" $height={height}>\n <FlexView\n $widthX={22.5}\n $heightX={11.5}\n $borderRadiusX={1}\n $marginBottomX={1.5}\n $background=\"GREY_1\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n >\n <Image width={122} height={100} src={ILLUSTRATIONS.ROCKET_BROKEN} withLoader={false} />\n </FlexView>\n <Text $renderAs=\"h4\" $marginBottomX={0.5} $color={textColor} $align=\"center\">\n Oops! Looks like something went wrong\n </Text>\n <Text $renderAs=\"body2\" $align=\"center\" $marginBottomX={1.5} $color={textColor}>\n Please try again. Alternatively if that does not work,\n <br /> please contact support.\n </Text>\n <Button\n label=\"Try again\"\n onClick={handleTryAgain}\n renderAs=\"primary\"\n size=\"small\"\n widthX={14}\n />\n </FlexView>\n );\n};\n\nexport default Error;\n"],"names":["Error","height","onTryAgain","theme","handleTryAgain","useCallback","textColor","FlexView","jsx","Image","ILLUSTRATIONS","Text","jsxs","Button","Error$1"],"mappings":";;;;;;;AAcA,MAAMA,IAA+B,CAAC,EAAE,QAAAC,GAAQ,YAAAC,GAAY,OAAAC,IAAQ,cAAc;AAC1E,QAAAC,IAAiBC,EAAY,MAAM;AACvC,IAAIH,IACSA,MAEX,OAAO,SAAS;EAClB,GACC,CAACA,CAAU,CAAC,GAETI,IAAYH,MAAU,SAAS,eAAe;AAEpD,2BACGI,GAAS,EAAA,aAAY,UAAS,iBAAgB,UAAS,SAASN,GAC/D,UAAA;AAAA,IAAA,gBAAAO;AAAA,MAACD;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,aAAY;AAAA,QACZ,iBAAgB;AAAA,QAChB,aAAY;AAAA,QAEZ,UAAA,gBAAAC,EAACC,GAAM,EAAA,OAAO,KAAK,QAAQ,KAAK,KAAKC,EAAc,eAAe,YAAY,GAAO,CAAA;AAAA,MAAA;AAAA,IACvF;AAAA,IACA,gBAAAF,EAACG,GAAK,EAAA,WAAU,MAAK,gBAAgB,KAAK,QAAQL,GAAW,QAAO,UAAS,UAE7E,wCAAA,CAAA;AAAA,IACA,gBAAAM,EAACD,KAAK,WAAU,SAAQ,QAAO,UAAS,gBAAgB,KAAK,QAAQL,GAAW,UAAA;AAAA,MAAA;AAAA,wBAE7E,MAAG,EAAA;AAAA,MAAE;AAAA,IAAA,GACR;AAAA,IACA,gBAAAE;AAAA,MAACK;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAST;AAAA,QACT,UAAS;AAAA,QACT,MAAK;AAAA,QACL,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,EACF,EAAA,CAAA;AAEJ,GAEAU,IAAed;"}
1
+ {"version":3,"file":"error.js","sources":["../../../../src/features/ui/error/error.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\n\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\nimport Button from '../buttons/button/button';\nimport Image from '../image/image';\nimport FlexView from '../layout/flex-view';\nimport Text from '../text/text';\n\ninterface IErrorProps {\n onTryAgain?: () => void;\n height?: string | number;\n theme?: 'light' | 'dark';\n title?: string;\n description?: string;\n}\n\nconst Error: React.FC<IErrorProps> = props => {\n const { height, onTryAgain, theme = 'light', title, description } = props;\n const handleTryAgain = useCallback(() => {\n if (onTryAgain) {\n onTryAgain();\n } else {\n window.location.reload();\n }\n }, [onTryAgain]);\n\n const textColor = theme === 'dark' ? 'WHITE_T_87' : 'BLACK_T_87';\n\n return (\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" $height={height}>\n <FlexView\n $widthX={22.5}\n $heightX={11.5}\n $borderRadiusX={1}\n $marginBottomX={1.5}\n $background=\"GREY_1\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n >\n <Image width={122} height={100} src={ILLUSTRATIONS.ROCKET_BROKEN} withLoader={false} />\n </FlexView>\n <Text $renderAs=\"h4\" $marginBottomX={0.5} $color={textColor} $align=\"center\">\n {title ?? 'Oops! Looks like something went wrong'}\n </Text>\n <Text $renderAs=\"body2\" $align=\"center\" $marginBottomX={1.5} $color={textColor}>\n {description ?? (\n <>\n Please try again. Alternatively if that does not work,\n <br /> please contact support.\n </>\n )}\n </Text>\n <Button\n label=\"Try again\"\n onClick={handleTryAgain}\n renderAs=\"primary\"\n size=\"small\"\n widthX={14}\n />\n </FlexView>\n );\n};\n\nexport default Error;\n"],"names":["Error","props","height","onTryAgain","theme","title","description","handleTryAgain","useCallback","textColor","FlexView","jsx","Image","ILLUSTRATIONS","Text","jsxs","Fragment","Button","Error$1"],"mappings":";;;;;;;AAgBA,MAAMA,IAA+B,CAASC,MAAA;AAC5C,QAAM,EAAE,QAAAC,GAAQ,YAAAC,GAAY,OAAAC,IAAQ,SAAS,OAAAC,GAAO,aAAAC,EAAgB,IAAAL,GAC9DM,IAAiBC,EAAY,MAAM;AACvC,IAAIL,IACSA,MAEX,OAAO,SAAS;EAClB,GACC,CAACA,CAAU,CAAC,GAETM,IAAYL,MAAU,SAAS,eAAe;AAEpD,2BACGM,GAAS,EAAA,aAAY,UAAS,iBAAgB,UAAS,SAASR,GAC/D,UAAA;AAAA,IAAA,gBAAAS;AAAA,MAACD;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,aAAY;AAAA,QACZ,iBAAgB;AAAA,QAChB,aAAY;AAAA,QAEZ,UAAA,gBAAAC,EAACC,GAAM,EAAA,OAAO,KAAK,QAAQ,KAAK,KAAKC,EAAc,eAAe,YAAY,GAAO,CAAA;AAAA,MAAA;AAAA,IACvF;AAAA,IACA,gBAAAF,EAACG,GAAK,EAAA,WAAU,MAAK,gBAAgB,KAAK,QAAQL,GAAW,QAAO,UACjE,UAAAJ,KAAS,wCACZ,CAAA;AAAA,IACA,gBAAAM,EAACG,GAAK,EAAA,WAAU,SAAQ,QAAO,UAAS,gBAAgB,KAAK,QAAQL,GAClE,UAAAH,KACG,gBAAAS,EAAAC,GAAA,EAAA,UAAA;AAAA,MAAA;AAAA,wBAEC,MAAG,EAAA;AAAA,MAAE;AAAA,IAAA,EAAA,CACR,EAEJ,CAAA;AAAA,IACA,gBAAAL;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAASV;AAAA,QACT,UAAS;AAAA,QACT,MAAK;AAAA,QACL,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,EACF,EAAA,CAAA;AAEJ,GAEAW,IAAelB;"}
@@ -1,22 +1,22 @@
1
- const t = 792, e = 1008, s = 30, T = 32, n = 28, I = 48, a = 42, c = 16, E = 56, o = 0, _ = 360, O = 52, N = { left: 0, top: 56 }, A = [
1
+ const t = 792, e = 1008, s = 30, T = 32, n = 28, I = 48, E = 42, c = 16, a = 56, _ = 0, o = 360, O = 52, N = { left: 0, top: 56 }, R = [
2
2
  "practice-basic-optional",
3
3
  "practice-regular-optional",
4
4
  "advanced-we-do",
5
5
  "advanced-your-turn",
6
6
  "advanced-explore",
7
7
  "advanced-practice"
8
- ], R = [
8
+ ], A = 2e3, S = [
9
9
  { name: "CORRECT", url: "https://static.qumath.in/static/intel-student/cmpress/correct-zap.mp3" },
10
10
  {
11
11
  name: "INCORRECT",
12
12
  url: "https://static.qumath.in/static/intel-student/cmpress/incorrect-zap.mp3"
13
13
  }
14
- ], S = [
14
+ ], i = [
15
15
  {
16
16
  name: "VALIDATE",
17
17
  url: "https://wmznlejcfq.s3.ap-southeast-1.amazonaws.com/static/intel-student/cmpress/validate-zap.mp3"
18
18
  }
19
- ], i = [
19
+ ], l = [
20
20
  {
21
21
  label: "Answered all the questions independently.",
22
22
  id: "E"
@@ -31,22 +31,23 @@ const t = 792, e = 1008, s = 30, T = 32, n = 28, I = 48, a = 42, c = 16, E = 56,
31
31
  }
32
32
  ];
33
33
  export {
34
- E as ACTION_BAR_HEIGHT,
34
+ a as ACTION_BAR_HEIGHT,
35
+ A as CLOZE_FORMULA_RESPONSE_LIMIT,
35
36
  N as DESMOS_CALC_POSITION,
36
- i as EXIT_TICKET_RATING_OPTIONS,
37
+ l as EXIT_TICKET_RATING_OPTIONS,
37
38
  s as INTERSECTION_OBSERVER_THRESHOLD_POINTS,
38
39
  T as INTERSECTION_OBSERVER_THROTTLE_TIME,
39
- _ as LEARNOSITY_KEYBOARD_HEIGHT,
40
- A as OPTIONAL_ITEM_TYPES,
40
+ o as LEARNOSITY_KEYBOARD_HEIGHT,
41
+ R as OPTIONAL_ITEM_TYPES,
41
42
  c as QUESTIONS_GAP,
42
43
  t as QUESTION_WIDTH,
43
44
  O as SIDEBAR_WIDTH,
44
45
  e as SPLIT_QUESTION_WIDTH,
45
- R as SYSTEM_VALIDATION_AUDIO_LIST,
46
- S as TEACHER_VALIDATION_AUDIO_LIST,
47
- a as TOP_NAVIGATION_ARROW_WIDTH,
46
+ S as SYSTEM_VALIDATION_AUDIO_LIST,
47
+ i as TEACHER_VALIDATION_AUDIO_LIST,
48
+ E as TOP_NAVIGATION_ARROW_WIDTH,
48
49
  I as TOP_NAVIGATION_HEIGHT,
49
- o as WORKSHEET_CONTAINER_BORDER_RADIUS,
50
+ _ as WORKSHEET_CONTAINER_BORDER_RADIUS,
50
51
  n as WORKSHEET_NUDGE_BANNER_HEIGHT
51
52
  };
52
53
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../src/features/worksheet/worksheet/constants.ts"],"sourcesContent":["import type { QUESTIONS_RATING, TItemType } from './worksheet-types';\n\nexport const QUESTION_WIDTH = 792;\nexport const SPLIT_QUESTION_WIDTH = 1008; // 1024 - 16\nexport const INTERSECTION_OBSERVER_THRESHOLD_POINTS = 30;\nexport const INTERSECTION_OBSERVER_THROTTLE_TIME = 32; // in ms, 2 frames\nexport const WORKSHEET_NUDGE_BANNER_HEIGHT = 28;\n\nexport const TOP_NAVIGATION_HEIGHT = 48;\nexport const TOP_NAVIGATION_ARROW_WIDTH = 42;\n\nexport const QUESTIONS_GAP = 16;\nexport const ACTION_BAR_HEIGHT = 56;\nexport const WORKSHEET_CONTAINER_BORDER_RADIUS = 0;\nexport const LEARNOSITY_KEYBOARD_HEIGHT = 360;\nexport const SIDEBAR_WIDTH = 52;\n\nexport const DESMOS_CALC_POSITION = { left: 0, top: 56 };\n\nexport const OPTIONAL_ITEM_TYPES: TItemType[] = [\n 'practice-basic-optional',\n 'practice-regular-optional',\n 'advanced-we-do',\n 'advanced-your-turn',\n 'advanced-explore',\n 'advanced-practice',\n];\n\nexport const SYSTEM_VALIDATION_AUDIO_LIST = [\n { name: 'CORRECT', url: 'https://static.qumath.in/static/intel-student/cmpress/correct-zap.mp3' },\n {\n name: 'INCORRECT',\n url: 'https://static.qumath.in/static/intel-student/cmpress/incorrect-zap.mp3',\n },\n];\nexport const TEACHER_VALIDATION_AUDIO_LIST = [\n {\n name: 'VALIDATE',\n url: 'https://wmznlejcfq.s3.ap-southeast-1.amazonaws.com/static/intel-student/cmpress/validate-zap.mp3',\n },\n];\n\nexport const EXIT_TICKET_RATING_OPTIONS: Array<{\n label: string;\n id: keyof typeof QUESTIONS_RATING;\n}> = [\n {\n label: 'Answered all the questions independently.',\n id: 'E',\n },\n {\n label: 'Needed some help to answer the questions.',\n id: 'S',\n },\n {\n label: 'Needed a lot of help to answer the questions.',\n id: 'H',\n },\n];\n"],"names":["QUESTION_WIDTH","SPLIT_QUESTION_WIDTH","INTERSECTION_OBSERVER_THRESHOLD_POINTS","INTERSECTION_OBSERVER_THROTTLE_TIME","WORKSHEET_NUDGE_BANNER_HEIGHT","TOP_NAVIGATION_HEIGHT","TOP_NAVIGATION_ARROW_WIDTH","QUESTIONS_GAP","ACTION_BAR_HEIGHT","WORKSHEET_CONTAINER_BORDER_RADIUS","LEARNOSITY_KEYBOARD_HEIGHT","SIDEBAR_WIDTH","DESMOS_CALC_POSITION","OPTIONAL_ITEM_TYPES","SYSTEM_VALIDATION_AUDIO_LIST","TEACHER_VALIDATION_AUDIO_LIST","EXIT_TICKET_RATING_OPTIONS"],"mappings":"AAEO,MAAMA,IAAiB,KACjBC,IAAuB,MACvBC,IAAyC,IACzCC,IAAsC,IACtCC,IAAgC,IAEhCC,IAAwB,IACxBC,IAA6B,IAE7BC,IAAgB,IAChBC,IAAoB,IACpBC,IAAoC,GACpCC,IAA6B,KAC7BC,IAAgB,IAEhBC,IAAuB,EAAE,MAAM,GAAG,KAAK,GAAG,GAE1CC,IAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAA+B;AAAA,EAC1C,EAAE,MAAM,WAAW,KAAK,wEAAwE;AAAA,EAChG;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AACF,GACaC,IAAgC;AAAA,EAC3C;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AACF,GAEaC,IAGR;AAAA,EACH;AAAA,IACE,OAAO;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,IAAI;AAAA,EACN;AACF;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/features/worksheet/worksheet/constants.ts"],"sourcesContent":["import type { QUESTIONS_RATING, TItemType } from './worksheet-types';\n\nexport const QUESTION_WIDTH = 792;\nexport const SPLIT_QUESTION_WIDTH = 1008; // 1024 - 16\nexport const INTERSECTION_OBSERVER_THRESHOLD_POINTS = 30;\nexport const INTERSECTION_OBSERVER_THROTTLE_TIME = 32; // in ms, 2 frames\nexport const WORKSHEET_NUDGE_BANNER_HEIGHT = 28;\n\nexport const TOP_NAVIGATION_HEIGHT = 48;\nexport const TOP_NAVIGATION_ARROW_WIDTH = 42;\n\nexport const QUESTIONS_GAP = 16;\nexport const ACTION_BAR_HEIGHT = 56;\nexport const WORKSHEET_CONTAINER_BORDER_RADIUS = 0;\nexport const LEARNOSITY_KEYBOARD_HEIGHT = 360;\nexport const SIDEBAR_WIDTH = 52;\n\nexport const DESMOS_CALC_POSITION = { left: 0, top: 56 };\n\nexport const OPTIONAL_ITEM_TYPES: TItemType[] = [\n 'practice-basic-optional',\n 'practice-regular-optional',\n 'advanced-we-do',\n 'advanced-your-turn',\n 'advanced-explore',\n 'advanced-practice',\n];\nexport const CLOZE_FORMULA_RESPONSE_LIMIT = 2000;\n\nexport const SYSTEM_VALIDATION_AUDIO_LIST = [\n { name: 'CORRECT', url: 'https://static.qumath.in/static/intel-student/cmpress/correct-zap.mp3' },\n {\n name: 'INCORRECT',\n url: 'https://static.qumath.in/static/intel-student/cmpress/incorrect-zap.mp3',\n },\n];\nexport const TEACHER_VALIDATION_AUDIO_LIST = [\n {\n name: 'VALIDATE',\n url: 'https://wmznlejcfq.s3.ap-southeast-1.amazonaws.com/static/intel-student/cmpress/validate-zap.mp3',\n },\n];\n\nexport const EXIT_TICKET_RATING_OPTIONS: Array<{\n label: string;\n id: keyof typeof QUESTIONS_RATING;\n}> = [\n {\n label: 'Answered all the questions independently.',\n id: 'E',\n },\n {\n label: 'Needed some help to answer the questions.',\n id: 'S',\n },\n {\n label: 'Needed a lot of help to answer the questions.',\n id: 'H',\n },\n];\n"],"names":["QUESTION_WIDTH","SPLIT_QUESTION_WIDTH","INTERSECTION_OBSERVER_THRESHOLD_POINTS","INTERSECTION_OBSERVER_THROTTLE_TIME","WORKSHEET_NUDGE_BANNER_HEIGHT","TOP_NAVIGATION_HEIGHT","TOP_NAVIGATION_ARROW_WIDTH","QUESTIONS_GAP","ACTION_BAR_HEIGHT","WORKSHEET_CONTAINER_BORDER_RADIUS","LEARNOSITY_KEYBOARD_HEIGHT","SIDEBAR_WIDTH","DESMOS_CALC_POSITION","OPTIONAL_ITEM_TYPES","CLOZE_FORMULA_RESPONSE_LIMIT","SYSTEM_VALIDATION_AUDIO_LIST","TEACHER_VALIDATION_AUDIO_LIST","EXIT_TICKET_RATING_OPTIONS"],"mappings":"AAEO,MAAMA,IAAiB,KACjBC,IAAuB,MACvBC,IAAyC,IACzCC,IAAsC,IACtCC,IAAgC,IAEhCC,IAAwB,IACxBC,IAA6B,IAE7BC,IAAgB,IAChBC,IAAoB,IACpBC,IAAoC,GACpCC,IAA6B,KAC7BC,IAAgB,IAEhBC,IAAuB,EAAE,MAAM,GAAG,KAAK,GAAG,GAE1CC,IAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACaC,IAA+B,KAE/BC,IAA+B;AAAA,EAC1C,EAAE,MAAM,WAAW,KAAK,wEAAwE;AAAA,EAChG;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AACF,GACaC,IAAgC;AAAA,EAC3C;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AACF,GAEaC,IAGR;AAAA,EACH;AAAA,IACE,OAAO;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,IAAI;AAAA,EACN;AACF;"}
@@ -1,10 +1,10 @@
1
1
  import b from "../../../assets/line-icons/icons/bulb2.js";
2
2
  import O from "../../../assets/line-icons/icons/edit-star.js";
3
3
  import R from "../../../assets/line-icons/icons/edit2.js";
4
- import k from "../../../assets/line-icons/icons/question-letter.js";
5
- import C from "../../../assets/line-icons/icons/star2.js";
4
+ import C from "../../../assets/line-icons/icons/question-letter.js";
5
+ import k from "../../../assets/line-icons/icons/star2.js";
6
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 Q } from "./constants.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";
8
8
  import { QUESTION_TAGS as E } from "./worksheet-types.js";
9
9
  const x = (e) => {
10
10
  switch (e) {
@@ -30,46 +30,46 @@ const x = (e) => {
30
30
  default:
31
31
  return;
32
32
  }
33
- }, L = (e) => {
33
+ }, M = (e) => {
34
34
  if (!e)
35
35
  return !1;
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(":"), a = n == null ? void 0 : n.trim(), c = s == null ? void 0 : s.trim();
40
- return !a || !c ? r : {
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 : {
41
41
  ...r,
42
- [a.toLowerCase()]: c
42
+ [o.toLowerCase()]: c
43
43
  };
44
- }, {}), Y = (e, { sectioned: r = !1, adaptive: t = !1 }) => {
44
+ }, {}), J = (e, { sectioned: r = !1, adaptive: t = !1 }) => {
45
45
  if (r)
46
- return e.reduce((s, a, c) => {
46
+ return e.reduce((s, o, c) => {
47
47
  var T;
48
48
  let d = !1;
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, p = u.match(/question-[^"]*/g), _ = p == null ? void 0 : p.map((f, h) => {
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) => {
50
50
  const v = i.find(
51
51
  ({ response_id: S }) => S === f.replace("question-", "")
52
52
  );
53
53
  if (!v)
54
54
  throw new Error(`Question not found for the response id: ${f}`);
55
- return d = d || L(v.instructor_stimulus), {
55
+ return d = d || M(v.instructor_stimulus), {
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: a.reference,
59
+ item_reference: o.reference,
60
60
  item_number: c,
61
61
  item_display_number: g,
62
62
  section_name: l,
63
- item_type: r ? o : void 0,
64
- is_optional: o ? A.includes(o) : !1,
65
- item_tags: a.tags ?? [],
66
- item_tags_map: I(a.tags ?? []),
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 ?? []),
67
67
  question_number: h - (d ? 1 : 0),
68
68
  total_questions: p.length
69
69
  };
70
70
  });
71
71
  if (d = !1, _ != null && _[0] && c > 0 && e.length > 0) {
72
- const f = (T = e[c - 1]) == null ? void 0 : T.itemType, h = o != null && o.startsWith("advanced-") ? "advanced" : o, v = f != null && f.startsWith("advanced-") ? "advanced" : f;
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;
73
73
  if ((h === "practice-basic" || h === "practice-regular" || h === "exit-ticket" || h === "advanced") && h !== v)
74
74
  return [
75
75
  ...s,
@@ -82,16 +82,16 @@ const x = (e) => {
82
82
  solution: void 0
83
83
  },
84
84
  instructor_stimulus: "SystemIntro",
85
- response_id: `${o}-system-intro`,
86
- is_optional: o == null ? void 0 : o.startsWith("advanced-")
85
+ response_id: `${a}-system-intro`,
86
+ is_optional: a == null ? void 0 : a.startsWith("advanced-")
87
87
  },
88
88
  ..._ ?? []
89
89
  ];
90
90
  }
91
91
  return [...s, ..._ ?? []];
92
92
  }, []);
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(
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(
95
95
  (l, m) => {
96
96
  const g = u.find(
97
97
  ({ response_id: p }) => p === l.replace("question-", "")
@@ -101,29 +101,29 @@ const x = (e) => {
101
101
  return {
102
102
  ...g,
103
103
  feedback_attempts: void 0,
104
- item_reference: a.reference,
104
+ item_reference: o.reference,
105
105
  item_number: c,
106
106
  item_display_number: c + 1,
107
- item_tags: a.tags ?? [],
108
- item_tags_map: I(a.tags ?? []),
107
+ item_tags: o.tags ?? [],
108
+ item_tags_map: I(o.tags ?? []),
109
109
  question_number: m,
110
110
  total_questions: i.length
111
111
  };
112
112
  }
113
113
  );
114
- return [...s, ...o ?? []];
114
+ return [...s, ...a ?? []];
115
115
  }, []);
116
116
  if (t) {
117
- const s = [], a = {};
117
+ const s = [], o = {};
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 && 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)
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)
122
122
  return 0;
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;
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;
125
125
  }).map((c) => {
126
- const d = a[c.item_tags_map[E.TRIAL_TOPIC] ?? ""] ?? 0, u = c.item_tags_map[E.QUESTION_CODE] ?? "";
126
+ const d = o[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
- }, J = ({
134
+ }, V = ({
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 a = e.slice(0, s + 1), c = e[s];
143
- if (t && a.find((i) => i.response_id === t))
142
+ const o = e.slice(0, s + 1), c = e[s];
143
+ if (t && o.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((o) => o.item_number === n);
146
+ const i = e.find((a) => a.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
- }, V = ({
157
+ }, z = ({
158
158
  questions: e,
159
159
  responses: r,
160
160
  behavior: t,
161
161
  userType: n
162
162
  }) => {
163
- const { maximumAttempts: s, teacherValidationEnabled: a, validation: c, navigationMode: d } = t, u = [...e].reverse().findIndex((i) => {
163
+ const { maximumAttempts: s, teacherValidationEnabled: o, validation: c, navigationMode: d } = t, u = [...e].reverse().findIndex((i) => {
164
164
  var _;
165
- const o = r[i.response_id], { attemptsHistory: l, validatedByTeacher: m, assignStatus: g } = o ?? {};
166
- if (a)
165
+ const a = r[i.response_id], { attemptsHistory: l, validatedByTeacher: m, assignStatus: g } = a ?? {};
166
+ if (o)
167
167
  return !!(m || g === "skipped");
168
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" && (o != null && o.response || o != null && o.skipped));
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));
170
170
  });
171
171
  if (u === -1)
172
172
  return 0;
173
173
  if (u === 0) {
174
- if (a) {
175
- const i = [...e].reverse().findIndex((o) => {
174
+ if (o) {
175
+ const i = [...e].reverse().findIndex((a) => {
176
176
  var l;
177
- return ((l = r[o.response_id]) == null ? void 0 : l.assignStatus) !== "skipped";
177
+ return ((l = r[a.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 (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;
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;
186
186
  }
187
187
  return e.length - u;
188
188
  };
189
- function M(e, r) {
189
+ function U(e, r) {
190
190
  var n, s;
191
- const t = Array.isArray(e) ? e.find((a) => a.response_id === r) : e;
191
+ const t = Array.isArray(e) ? e.find((o) => o.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 M(e, r) {
196
196
  itemReference: t.item_reference,
197
197
  itemPosition: t.item_number,
198
198
  questionPosition: t.question_number,
199
- isOkayTypeQuestion: U(t),
199
+ isOkayTypeQuestion: P(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
  },
@@ -209,19 +209,19 @@ function M(e, r) {
209
209
  const K = (e) => e.reduce(
210
210
  (r, t) => ({
211
211
  ...r,
212
- [t.response_id]: M(e, t.response_id)
212
+ [t.response_id]: U(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
- (a) => a.questions.some((c) => c.stimulus_review)
220
- ) ? y : Q,
219
+ (o) => o.questions.some((c) => c.stimulus_review)
220
+ ) ? y : L,
221
221
  maxQuestionWidth: y,
222
222
  actionbarHeight: t === "bottom" ? N : 0
223
223
  };
224
- }, z = ({
224
+ }, Z = ({
225
225
  questions: e,
226
226
  lastUnlockedQuestionIndex: r,
227
227
  userType: t
@@ -231,10 +231,10 @@ const K = (e) => e.reduce(
231
231
  block: "start",
232
232
  behavior: r ? "smooth" : "instant"
233
233
  });
234
- }, U = (e) => {
234
+ }, P = (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
- }, Z = (e) => {
237
+ }, q = (e) => {
238
238
  window.MathJax = {
239
239
  options: {
240
240
  enableMenu: !1,
@@ -277,7 +277,7 @@ const K = (e) => e.reduce(
277
277
  matchFontHeight: !1
278
278
  }
279
279
  };
280
- }, q = (e) => {
280
+ }, ee = (e) => {
281
281
  const { item_type: r, instructor_stimulus: t } = e, n = t == null ? void 0 : t.toLowerCase();
282
282
  switch (r) {
283
283
  case "overview":
@@ -296,7 +296,7 @@ const K = (e) => e.reduce(
296
296
  default:
297
297
  return n === "learn" ? "blue" : n === "try" || n === "apply" ? "green" : "yellow";
298
298
  }
299
- }, ee = (e) => `https://cuemath-intel.s3.ap-southeast-1.amazonaws.com/media/math-canvas/paper-${e}.png`, te = (e, r) => {
299
+ }, te = (e) => `https://cuemath-intel.s3.ap-southeast-1.amazonaws.com/media/math-canvas/paper-${e}.png`, re = (e, r) => {
300
300
  if (!r)
301
301
  return "GREY_3";
302
302
  switch (e) {
@@ -314,7 +314,7 @@ const K = (e) => e.reduce(
314
314
  default:
315
315
  return "GREY_3";
316
316
  }
317
- }, re = (e) => {
317
+ }, ne = (e) => {
318
318
  switch (e) {
319
319
  case "learning":
320
320
  return "BLUE_1";
@@ -328,7 +328,7 @@ const K = (e) => e.reduce(
328
328
  default:
329
329
  return "YELLOW_1";
330
330
  }
331
- }, ne = (e) => {
331
+ }, ae = (e) => {
332
332
  switch (e) {
333
333
  case "learning":
334
334
  return "Learning";
@@ -352,13 +352,15 @@ const K = (e) => e.reduce(
352
352
  case "practice-regular":
353
353
  return O;
354
354
  case "exit-ticket":
355
- return k;
356
- case "advanced":
357
355
  return C;
356
+ case "advanced":
357
+ return k;
358
358
  default:
359
359
  return b;
360
360
  }
361
- }, ae = (e, r) => {
361
+ }, ie = (e) => Array.isArray(e.value) ? e.value.some(
362
+ (t) => typeof t == "string" && t.length > Q
363
+ ) : !1, se = (e, r) => {
362
364
  const t = e === "TEACHER";
363
365
  return r ? {
364
366
  bannerBackgroundColor: "GREEN_4",
@@ -369,23 +371,24 @@ const K = (e) => e.reduce(
369
371
  };
370
372
  };
371
373
  export {
372
- J as getInitialQuestionId,
374
+ ie as checkIsClozeFormulaResponseInvalid,
375
+ V as getInitialQuestionId,
373
376
  K as getInitialResponses,
374
- V as getLastUnlockedQuestionIndex,
375
- re as getNavigationSectionBackgroundColor,
377
+ z as getLastUnlockedQuestionIndex,
378
+ ne as getNavigationSectionBackgroundColor,
376
379
  oe as getNavigationSectionIcon,
377
- ne as getNavigationSectionName,
378
- q as getPaperColorByQuestion,
379
- ee as getQuestionBackgroundImage,
380
- te as getQuestionBorderColor,
381
- M as getQuestionMetadata,
382
- Y as getQuestionsFromItems,
383
- z as getRenderableQuestions,
380
+ ae as getNavigationSectionName,
381
+ ee as getPaperColorByQuestion,
382
+ te as getQuestionBackgroundImage,
383
+ re as getQuestionBorderColor,
384
+ U as getQuestionMetadata,
385
+ J as getQuestionsFromItems,
386
+ Z as getRenderableQuestions,
384
387
  X as getWorksheetDimensions,
385
- ae as getWorksheetNudgeBannerInfo,
386
- L as isConceptIntroWidget,
387
- U as isOkayTypeQuestion,
388
+ se as getWorksheetNudgeBannerInfo,
389
+ M as isConceptIntroWidget,
390
+ P as isOkayTypeQuestion,
388
391
  j as scrollToQuestion,
389
- Z as setMathJaxConfigInWindow
392
+ q as setMathJaxConfigInWindow
390
393
  };
391
394
  //# sourceMappingURL=worksheet-helpers.js.map
@@ -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';\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 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 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\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};\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","getWorksheetNudgeBannerInfo","markedAsCompleted","isTeacher"],"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, TUserTypes } from '../../ui/types';\nimport type { TWorksheetQuestionPaperColor } from './worksheet-question/worksheet-question-types';\nimport type { ILearnosityQuestionResponse } 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\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};\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","checkIsClozeFormulaResponseInvalid","response","CLOZE_FORMULA_RESPONSE_LIMIT","getWorksheetNudgeBannerInfo","markedAsCompleted","isTeacher"],"mappings":";;;;;;;;AAoCA,MAAMA,IAA0D,CAAYC,MAAA;AAC1E,UAAQA,GAAU;AAAA,IAChB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT;AACS;AAAA,EACX;AACF,GAEMC,IAAuB,CAACC,MAA6C;AACzE,MAAI,CAACA;AACI,WAAA;AAGH,QAAAC,IAA8BD,EAAmB;AAEhD,SAAAC,MAAgC,WAAWA,MAAgC;AACpF,GAEMC,IAAa,CAACC,MACXA,EAAK,OAAO,CAACC,GAAKC,MAAQ;AAC/B,QAAM,CAACC,GAAKC,CAAK,IAAIF,EAAI,MAAM,GAAG,GAC5BG,IAAaF,KAAA,gBAAAA,EAAK,QAClBG,IAAeF,KAAA,gBAAAA,EAAO;AAExB,SAAA,CAACC,KAAc,CAACC,IACXL,IAGF;AAAA,IACL,GAAGA;AAAA,IACH,CAACI,EAAW,YAAY,CAAC,GAAGC;AAAA,EAAA;AAEhC,GAAG,CAAE,CAAA,GAYDC,IAAgD,CACpDC,GACA,EAAE,WAAAC,IAAY,IAAO,UAAAC,IAAW,SAC7B;AACH,MAAID;AACF,WAAOD,EAAM,OAAO,CAACP,GAAKU,GAAMC,MAAc;;AAC5C,UAAIC,IAAiB;AACrB,YAAM,EAAE,SAAAC,GAAS,WAAAC,GAAW,UAAApB,EAAA,IAAagB,GACnCK,IAActB,EAA2BC,CAAQ,GACjDsB,IAAWhB,EAAIA,EAAI,SAAS,CAAC,GAC7BiB,IACJF,OAAgBC,KAAA,gBAAAA,EAAU,kBAAgBA,KAAA,QAAAA,EAAU,uBAChDA,EAAS,sBAAsB,IAC/B,GACAE,IAAqBL,EAAQ,MAAM,iBAAiB,GACpDM,IAAmBD,KAAA,gBAAAA,EAAoB,IAAI,CAACE,GAAYC,MAAgB;AAC5E,cAAMC,IAAWR,EAAU;AAAA,UACzB,CAAC,EAAE,aAAaS,QAAaA,MAAWH,EAAW,QAAQ,aAAa,EAAE;AAAA,QAAA;AAG5E,YAAI,CAACE;AACH,gBAAM,IAAI,MAAM,2CAA2CF,CAAU,EAAE;AAGxD,eAAAR,IAAAA,KAAkBjB,EAAqB2B,EAAS,mBAAmB,GAE7E;AAAA,UACL,GAAGA;AAAA;AAAA,UAEH,mBAAmB;AAAA,UACnB,gBAAgBZ,EAAK;AAAA,UACrB,aAAaC;AAAA,UACb,qBAAqBM;AAAA,UACrB,cAAcF;AAAA,UACd,WAAWP,IAAYd,IAAW;AAAA,UAClC,aAAaA,IAAW8B,EAAoB,SAAS9B,CAAQ,IAAI;AAAA,UACjE,WAAWgB,EAAK,QAAQ,CAAC;AAAA,UACzB,eAAeZ,EAAWY,EAAK,QAAQ,CAAA,CAAE;AAAA,UACzC,iBAAiBW,KAAeT,IAAiB,IAAI;AAAA,UACrD,iBAAiBM,EAAmB;AAAA,QAAA;AAAA,MACtC;AAKF,UAFiBN,IAAA,IAEbO,KAAA,QAAAA,EAAmB,MAAMR,IAAY,KAAKJ,EAAM,SAAS,GAAG;AAC9D,cAAMkB,KAAeC,IAAAnB,EAAMI,IAAY,CAAC,MAAnB,gBAAAe,EAAsB,UACrCC,IAAkBjC,KAAA,QAAAA,EAAU,WAAW,eAAe,aAAaA,GACnEkC,IAAsBH,KAAA,QAAAA,EAAc,WAAW,eACjD,aACAA;AAGD,aAAAE,MAAoB,oBACnBA,MAAoB,sBACpBA,MAAoB,iBACpBA,MAAoB,eACtBA,MAAoBC;AAEb,iBAAA;AAAA,YACL,GAAG5B;AAAA,YACH;AAAA,cACE,GAAGmB,EAAiB,CAAC;AAAA,cACrB,UAAU;AAAA,gBACR,GAAGA,EAAiB,CAAC,EAAE;AAAA,gBACvB,cAAc;AAAA,gBACd,OAAO;AAAA,gBACP,UAAU;AAAA,cACZ;AAAA,cACA,qBAAqB;AAAA,cACrB,aAAa,GAAGzB,CAAQ;AAAA,cACxB,aAAaA,KAAA,gBAAAA,EAAU,WAAW;AAAA,YACpC;AAAA,YACA,GAAIyB,KAAoB,CAAC;AAAA,UAAA;AAAA,MAG/B;AAEA,aAAO,CAAC,GAAGnB,GAAK,GAAImB,KAAoB,CAAG,CAAA;AAAA,IAC7C,GAAG,CAA0B,CAAA;AAG/B,QAAMU,IAAiBtB,EAAM,OAAO,CAACP,GAAKU,GAAMC,MAAc;AACtD,UAAA,EAAE,SAAAE,GAAS,WAAAC,EAAc,IAAAJ,GACzBQ,IAAqBL,EAAQ,MAAM,iBAAiB,GACpDM,IAAmBD,KAAA,gBAAAA,EAAoB;AAAA,MAC3C,CAACE,GAAYC,MAAgB;AAC3B,cAAMC,IAAWR,EAAU;AAAA,UACzB,CAAC,EAAE,aAAaS,QAAaA,MAAWH,EAAW,QAAQ,aAAa,EAAE;AAAA,QAAA;AAG5E,YAAI,CAACE;AACH,gBAAM,IAAI,MAAM,2CAA2CF,CAAU,EAAE;AAGlE,eAAA;AAAA,UACL,GAAGE;AAAA,UACH,mBAAmB;AAAA,UACnB,gBAAgBZ,EAAK;AAAA,UACrB,aAAaC;AAAA,UACb,qBAAqBA,IAAY;AAAA,UACjC,WAAWD,EAAK,QAAQ,CAAC;AAAA,UACzB,eAAeZ,EAAWY,EAAK,QAAQ,CAAA,CAAE;AAAA,UACzC,iBAAiBW;AAAA,UACjB,iBAAiBH,EAAmB;AAAA,QAAA;AAAA,MAExC;AAAA;AAGF,WAAO,CAAC,GAAGlB,GAAK,GAAImB,KAAoB,CAAG,CAAA;AAAA,EAC7C,GAAG,CAA0B,CAAA;AAE7B,MAAIV,GAAU;AACZ,UAAMqB,IAAmB,CAAA,GACnBC,IAAsC,CAAA;AAE5C,WAAOF,EACJ,KAAK,CAACG,GAAGC,MAAM;;AACd,YAAMC,IAASF,EAAE,cAAcG,EAAc,WAAW,GAClDC,IAASH,EAAE,cAAcE,EAAc,WAAW;AAYpD,UAVAD,KAAUH,EAAYG,CAAM,MAAM,WACxBH,EAAAG,CAAM,IAAIJ,EAAO,QAC7BA,EAAO,KAAKI,CAAM,IAGhBE,KAAUL,EAAYK,CAAM,MAAM,WACxBL,EAAAK,CAAM,IAAIN,EAAO,QAC7BA,EAAO,KAAKM,CAAM,IAGhB,CAACF,KAAU,CAACE;AACP,eAAA;AAGT,YAAMC,IAAW,GAAGN,EAAYG,CAAM,CAAC,MACrCR,IAAAM,EAAE,cAAcG,EAAc,aAAa,MAA3C,gBAAAT,EAA8C,WAAU,CAC1D,IACMY,IAAW,GAAGP,EAAYK,CAAM,CAAC,MACrCG,IAAAN,EAAE,cAAcE,EAAc,aAAa,MAA3C,gBAAAI,EAA8C,WAAU,CAC1D;AAEO,aAAAF,IAAWC,IAAW,IAAI;AAAA,IAAA,CAClC,EACA,IAAI,CAAYhB,MAAA;AACT,YAAAkB,IACJT,EAAYT,EAAS,cAAca,EAAc,WAAW,KAAK,EAAE,KAAK,GACpEM,IAAenB,EAAS,cAAca,EAAc,aAAa,KAAK;AAErE,aAAA;AAAA,QACL,GAAGb;AAAA,QACH,qBAAqBkB,IAAa,IAAIC,EAAa;AAAA,MAAA;AAAA,IACrD,CACD;AAAA,EACL;AAEO,SAAAZ;AACT,GAYMa,IAA8C,CAAC;AAAA,EACnD,WAAA5B;AAAA,EACA,iBAAA6B;AAAA,EACA,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,2BAAAC;AACF,MAAM;;AACJ,QAAMC,IAAoBjC,EAAU,MAAM,GAAGgC,IAA4B,CAAC,GACpEE,IAAuBlC,EAAUgC,CAAyB;AAEhE,MAAIF,KAAqBG,EAAkB,KAAK,OAAKE,EAAE,gBAAgBL,CAAiB;AAC/E,WAAAA;AAGT,MACE,OAAOC,KAAqB,YAC5BA,KAAoBG,EAAqB,aACzC;AACA,UAAM1B,IAAWR,EAAU,KAAK,CAAKmC,MAAAA,EAAE,gBAAgBJ,CAAgB;AAEvE,QAAIvB,KAAA,QAAAA,EAAU;AACZ,aAAOA,EAAS;AAAA,EAEpB;AAEA,MAAIqB,MAAoB,aAAWjB,IAAAZ,EAAU,CAAC,MAAX,QAAAY,EAAc;AACxC,WAAAZ,EAAU,CAAC,EAAE;AAGtB,MAAI6B,MAAoB;AACtB,WAAOK,EAAqB;AAG1B,OAAAT,IAAAzB,EAAU,CAAC,MAAX,QAAAyB,EAAc;AACT,WAAAzB,EAAU,CAAC,EAAE;AAGhB,QAAA,IAAI,MAAM,4BAA4B;AAC9C,GAWMoC,IAA8D,CAAC;AAAA,EACnE,WAAApC;AAAA,EACA,WAAAqC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAM,EAAE,iBAAAC,GAAiB,0BAAAC,GAA0B,YAAAC,GAAY,gBAAAC,MAAmBL,GAC5EM,IAAgB,CAAC,GAAG5C,CAAS,EAAE,UAAU,UAAU,CAAKmC,MAAA;;AACtD,UAAAU,IAAQR,EAAUF,EAAE,WAAW,GAE/B,EAAE,iBAAAW,GAAiB,oBAAAC,GAAoB,cAAAC,EAAa,IAAIH,KAAS,CAAA;AAEvE,QAAIJ;AAKF,aAJI,GAAAM,KAIAC,MAAiB;AAOvB,UAAMC,KAAmBrC,IAAAkC,KAAA,gBAAAA,EAAiB,MAAM,IAAI,OAA3B,gBAAAlC,EAA+B;AAExD,WAAIqC,KACGA,EAAiB,SAAS,OAAOA,EAAiB,YAC9C,OAGuBH,KAAA,gBAAAA,EAAiB,WAAU,MAAMN,IAK/D,IAACE,KAAcC,MAAmB,aAAaE,KAAA,QAAAA,EAAO,YAAYA,KAAA,QAAAA,EAAO;AAAA,EAItE,CACR;AAED,MAAID,MAAkB;AACb,WAAA;AAGT,MAAIA,MAAkB,GAAG;AACvB,QAAIH,GAA0B;AACtB,YAAAS,IAAyB,CAAC,GAAGlD,CAAS,EAAE,UAAU,UAAU,CAAKmC,MAAA;;AACrE,iBAAOvB,IAAAyB,EAAUF,EAAE,WAAW,MAAvB,gBAAAvB,EAA0B,kBAAiB;AAAA,MAAA,CACnD;AAEM,aAAAZ,EAAU,SAASkD,IAAyB;AAAA,IACrD;AAEA,WAAOlD,EAAU,SAAS;AAAA,EAC5B;AAEI,MAAAyC,KAA4BF,MAAa,WAAW;AAChD,UAAAP,IAA4BhC,EAAU,SAAS4C,GAC/CV,IAAuBlC,EAAUgC,CAAyB,GAC1D,EAAE,cAAAgB,EAAa,IAAIX,EAAUH,EAAqB,WAAW,KAAK;AAEpE,WAAAA,EAAqB,eAAe,CAACc,IAChChB,IAA4B,IAG9BA;AAAA,EACT;AAEA,SAAOhC,EAAU,SAAS4C;AAC5B;AAYA,SAASO,EACPnD,GACAoD,GACA;;AACM,QAAA5C,IAAW,MAAM,QAAQR,CAAS,IACpCA,EAAU,KAAK,CAAKmC,MAAAA,EAAE,gBAAgBiB,CAAU,IAChDpD;AAEJ,MAAI,CAACQ;AACH,UAAM,IAAI,MAAM,oBAAoB4C,CAAU,YAAY;AAGrD,SAAA;AAAA,IACL,iBAAiB5C,EAAS,SAAS;AAAA,IACnC,eAAeA,EAAS;AAAA,IACxB,cAAcA,EAAS;AAAA,IACvB,kBAAkBA,EAAS;AAAA,IAC3B,oBAAoB6C,EAAmB7C,CAAQ;AAAA,IAC/C,OAAO;AAAA,MACL,aACEiB,KAAAb,IAAAJ,KAAA,gBAAAA,EAAU,eAAV,gBAAAI,EAAsB,mBAAtB,gBAAAa,EAAsC,UAAS,IAAIjB,EAAS,SAAS;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,MACJ,GAAGA,EAAS;AAAA,MACZ,qBAAqBA,EAAS;AAAA,IAChC;AAAA,EAAA;AAEJ;AAMA,MAAM8C,IAA4C,CAAatD,MACtDA,EAAU;AAAA,EACf,CAACd,GAAKsB,OAAc;AAAA,IAClB,GAAGtB;AAAA,IACH,CAACsB,EAAS,WAAW,GAAG2C,EAAoBnD,GAAWQ,EAAS,WAAW;AAAA,EAAA;AAAA,EAE7E,CAAC;AAAA,GAeC+C,IAAkD,CAAC9D,GAAO+D,MAAW;AACnE,QAAA,EAAE,WAAAC,EAAc,IAAAD;AAMf,SAAA;AAAA,IACL,yBANqB,CAAC/D,EAAM;AAAA,MAAK,OACjCG,EAAK,UAAU,KAAK,CAAAY,MAAYA,EAAS,eAAe;AAAA,IAAA,IAKdkD,IAAiBC;AAAA,IAC3D,kBAAkBD;AAAA,IAClB,iBALsBD,MAAc,WAAWG,IAAoB;AAAA,EAKnE;AAEJ,GASMC,IAAkD,CAAC;AAAA,EACvD,WAAA7D;AAAA,EACA,2BAAAgC;AAAA,EACA,UAAAO;AACF,MACMA,MAAa,YAAkBvC,EAAU,MAAM,GAAGgC,IAA4B,CAAC,IAE5EhC,GAOH8D,IAAsC,CAACV,GAAY,EAAE,WAAAW,IAAY,GAAM,IAAI,CAAA,MAAO;AACtF,QAAMC,IAAc,SAAS,iBAAiB,WAAWZ,CAAU,EAAE,EAAE,CAAC;AAExE,EAAIY,KACFA,EAAY,eAAe;AAAA,IACzB,OAAO;AAAA,IACP,UAAUD,IAAY,WAAW;AAAA,EAAA,CAClC;AAEL,GAMMV,IAA0C,CAAY7C,MAAA;AAC1D,QAAM,EAAE,MAAAyD,GAAM,SAAAC,GAAS,qBAAAC,EAAA,IAAwB3D;AAG/C,UAFiB,eAAeA,IAAWA,EAAS,YAAY,YAGjD,cACb2D,MAAwB,WACxBA,MAAwB,iBACxBA,MAAwB,kBAEjB,KAGFF,MAAS,UAASC,KAAA,gBAAAA,EAAS,YAAW;AAC/C,GAEME,IAA2B,CAC/BC,MACG;AACH,SAAO,UAAU;AAAA,IACf,SAAS;AAAA,MACP,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,cAAc,SAAUC,GAAKC,GAAMC,GAAK;AACtC,QAAAH,EAAOI,EAAO,qBAAqB,GAC/BH,EAAA,aAAaC,GAAMC,CAAG;AAAA,MAC5B;AAAA,MACA,cAAc,SAAUF,GAAKC,GAAMC,GAAK;AACtC,QAAAH,EAAOI,EAAO,qBAAqB,GAC/BH,EAAA,aAAaC,GAAMC,CAAG;AAAA,MAE5B;AAAA,IACF;AAAA,IACA,KAAK;AAAA,MACH,YAAY;AAAA,QACV,CAAC,OAAO,KAAK;AAAA,QACb,CAAC,MAAM,IAAI;AAAA,MACb;AAAA,MACA,aAAa,CAAC,CAAC,OAAO,KAAK,CAAC;AAAA,MAC5B,QAAQ;AAAA,QACN,KAAK,CAAC,UAAU,CAAC;AAAA,QACjB,QAAQ,CAAC,GAAG;AAAA,QACZ,SAAS,CAAC,4BAA4B,CAAC;AAAA,QACvC,QAAQ,CAAC,gBAAgB,CAAC;AAAA,QAC1B,YAAY,CAAC,kBAAkB,CAAC;AAAA,QAChC,WAAW,CAAC,UAAU;AAAA,QACtB,eAAe,CAAC,kBAAkB;AAAA,QAClC,MAAM,CAAC,kBAAkB;AAAA,QACzB,OAAO,CAAC,kBAAkB;AAAA,QAC1B,mBAAmB,CAAC,MAAM,CAAC;AAAA,QAC3B,SAAS,CAAC,qBAAqB,CAAC;AAAA,MAClC;AAAA,MACA,aAAa,CAACE,GAAKF,MAAQ;AACzB,QAAAH,EAAOI,EAAO,sBAAsB;AAAA,UAClC,IAAID,EAAI;AAAA,UACR,SAASA,EAAI;AAAA,QAAA,CACd,GACDE,EAAI,YAAYF,CAAG;AAAA,MACrB;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,EAAA;AAEJ,GAMMG,KAAoD,CAAYnE,MAAA;AAC9D,QAAA,EAAE,WAAAoE,GAAW,qBAAAT,EAAwB,IAAA3D,GACrCzB,IAA8BoF,KAAA,gBAAAA,EAAqB;AAEzD,UAAQS,GAAW;AAAA,IACjB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aACE7F,MAAgC,iBAChCA,MAAgC,WAChCA,MAAgC,kBAEzB,SAGLA,MAAgC,SAC3B,UAGF;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACM,aAAAA,MAAgC,UAAgB,SAEhDA,MAAgC,SAASA,MAAgC,UACpE,UAEF;AAAA,EACX;AACF,GAEM8F,KAA6B,CAACC,MAC3B,iFAAiFA,CAAU,QAG9FC,KAAyB,CAC7BD,GACAE,MACgB;AAChB,MAAI,CAACA;AACI,WAAA;AAGT,UAAQF,GAAY;AAAA,IAClB,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF,GAEMG,KAAsC,CAAChF,MAA4C;AACvF,UAAQA,GAAa;AAAA,IACnB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF,GAEMiF,KAA2B,CAACjF,MAAuC;AACvE,UAAQA,GAAa;AAAA,IACnB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF,GAEMkF,KAA2B,CAAClF,MAA+B;AAC/D,UAAQA,GAAa;AAAA,IACnB,KAAK;AACI,aAAAmF;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,IACT;AACS,aAAAJ;AAAA,EACX;AACF,GAKMK,KAAqC,CAACC,MACtC,MAAM,QAAQA,EAAS,KAAK,IACZA,EAAS,MAAM;AAAA,EAC/B,CAAQ9F,MAAA,OAAOA,KAAS,YAAYA,EAAK,SAAS+F;AAAA,IAM/C,IAGHC,KAA8B,CAClCrD,GACAsD,MAC0B;AAC1B,QAAMC,IAAYvD,MAAa;AAE/B,SAAIsD,IACK;AAAA,IACL,uBAAuB;AAAA,IACvB,OAAOC,IACH,wCACA;AAAA,EAAA,IAID;AAAA,IACL,uBAAuB;AAAA,IACvB,OAAO;AAAA,EAAA;AAEX;"}
@@ -1,53 +1,54 @@
1
1
  import { useCallback as c } from "react";
2
- import nt from "../../../hooks/use-audio-player.js";
3
- import it from "../../constants/events.js";
4
- import { SYSTEM_VALIDATION_AUDIO_LIST as ot } from "../constants.js";
5
- import { isOkayTypeQuestion as M, getQuestionMetadata as f, scrollToQuestion as $ } from "../worksheet-helpers.js";
6
- const dt = (y) => {
2
+ import { useErrorBoundary as ot } from "react-error-boundary";
3
+ import it from "../../../hooks/use-audio-player.js";
4
+ import ct from "../../constants/events.js";
5
+ import { SYSTEM_VALIDATION_AUDIO_LIST as rt } from "../constants.js";
6
+ import { isOkayTypeQuestion as v, getQuestionMetadata as f, scrollToQuestion as z, checkIsClozeFormulaResponseInvalid as ut } from "../worksheet-helpers.js";
7
+ const kt = (B) => {
7
8
  const {
8
- behavior: K,
9
+ behavior: F,
9
10
  layout: P,
10
- learnosity: l,
11
- question: q,
11
+ learnosity: a,
12
+ question: C,
12
13
  questionIndex: k,
13
14
  questions: o,
14
- getTimeSpentOnQuestion: A
15
- } = y, { setResponses: r, setSummaryVisible: I, setActiveQuestionId: S, setBlocker: d, setSkipped: N } = y, { onHelp: _, onResponseChange: n, onTeacherValidation: B, loggerRef: E } = y, { questionsScrollable: m } = P, { response_id: e, item_type: W, question_number: T, item_number: w, total_questions: x } = q, H = W === "exit-ticket", { validation: Q, teacherValidationEnabled: Y } = K, C = nt(ot), O = c(() => {
16
- const t = l.question(e);
17
- t && Q && !M(t.getQuestion()) && t.getScore((s) => {
18
- const { max_score: i, score: u } = s || {};
19
- i && C(i === u ? "CORRECT" : "INCORRECT");
15
+ getTimeSpentOnQuestion: b
16
+ } = B, { setResponses: l, setSummaryVisible: q, setActiveQuestionId: S, setBlocker: d, setSkipped: N } = B, { onHelp: _, onResponseChange: n, onTeacherValidation: E, loggerRef: x } = B, { questionsScrollable: m } = P, { response_id: e, item_type: X, question_number: w, item_number: T, total_questions: H } = C, O = X === "exit-ticket", { validation: Q, teacherValidationEnabled: $ } = F, y = it(rt), { showBoundary: L } = ot(), V = c(() => {
17
+ const t = a.question(e);
18
+ t && Q && !v(t.getQuestion()) && t.getScore((s) => {
19
+ const { max_score: i, score: r } = s || {};
20
+ i && y(i === r ? "CORRECT" : "INCORRECT");
20
21
  });
21
- }, [l, C, e, Q]), V = c(
22
- (t, s, i, u) => {
23
- const b = A(e);
24
- r((D) => {
25
- const a = D[t], h = !!u, L = {
22
+ }, [a, y, e, Q]), g = c(
23
+ (t, s, i, r) => {
24
+ const h = b(e);
25
+ l((A) => {
26
+ const u = A[t], I = !!r, D = {
26
27
  ...f(o, t),
27
- ...a,
28
+ ...u,
28
29
  response: s,
29
30
  score: i,
30
- responseEdited: !h,
31
- attemptsHistory: h ? [...(a == null ? void 0 : a.attemptsHistory) ?? [], { response: s, score: i }] : a == null ? void 0 : a.attemptsHistory,
31
+ responseEdited: !I,
32
+ attemptsHistory: I ? [...(u == null ? void 0 : u.attemptsHistory) ?? [], { response: s, score: i }] : u == null ? void 0 : u.attemptsHistory,
32
33
  skipped: !s,
33
- timeSpent: b
34
+ timeSpent: h
34
35
  };
35
36
  return n == null || n({
36
37
  responseId: t,
37
- response: L,
38
- question: o.find((st) => st.response_id === t),
39
- isNewAttempt: h
38
+ response: D,
39
+ question: o.find((nt) => nt.response_id === t),
40
+ isNewAttempt: I
40
41
  }), {
41
- ...D,
42
- [t]: L
42
+ ...A,
43
+ [t]: D
43
44
  };
44
45
  });
45
46
  },
46
- [A, n, o, e, r]
47
- ), U = c(
47
+ [b, n, o, e, l]
48
+ ), M = c(
48
49
  (t, s) => {
49
- r((i) => {
50
- const u = {
50
+ l((i) => {
51
+ const r = {
51
52
  ...f(o, t),
52
53
  ...i[t],
53
54
  validatedByTeacher: !0,
@@ -55,23 +56,23 @@ const dt = (y) => {
55
56
  };
56
57
  return n == null || n({
57
58
  responseId: t,
58
- response: u,
59
- question: o.find((b) => b.response_id === t),
59
+ response: r,
60
+ question: o.find((h) => h.response_id === t),
60
61
  isNewAttempt: !1
61
62
  }), {
62
63
  ...i,
63
- [t]: u
64
+ [t]: r
64
65
  };
65
66
  });
66
67
  },
67
- [n, o, r]
68
- ), j = c(() => {
69
- _ && q && _({
68
+ [n, o, l]
69
+ ), G = c(() => {
70
+ _ && C && _({
70
71
  questionId: e,
71
- questionNumber: `${w + 1}${x > 1 ? String.fromCharCode(97 + T) : ""}`
72
+ questionNumber: `${T + 1}${H > 1 ? String.fromCharCode(97 + w) : ""}`
72
73
  });
73
- }, [w, _, q, T, e, x]), v = c(() => {
74
- E.current(it.WORKSHEET_V3_HINT_SEEN), r((t) => {
74
+ }, [T, _, C, w, e, H]), K = c(() => {
75
+ x.current(ct.WORKSHEET_V3_HINT_SEEN), l((t) => {
75
76
  var i;
76
77
  const s = {
77
78
  ...f(o, e),
@@ -81,23 +82,23 @@ const dt = (y) => {
81
82
  return n == null || n({
82
83
  responseId: e,
83
84
  response: s,
84
- question: o.find((u) => u.response_id === e),
85
+ question: o.find((r) => r.response_id === e),
85
86
  isNewAttempt: !1
86
87
  }), {
87
88
  ...t,
88
89
  [e]: s
89
90
  };
90
91
  });
91
- }, [E, n, o, e, r]), z = c(() => {
92
+ }, [x, n, o, e, l]), R = c(() => {
92
93
  var s;
93
94
  const t = (s = o[k - 1]) == null ? void 0 : s.response_id;
94
- t && (m ? $(t) : S(t));
95
- }, [k, o, m, S]), F = c(() => {
95
+ t && (m ? z(t) : S(t));
96
+ }, [k, o, m, S]), W = c(() => {
96
97
  var s;
97
98
  const t = (s = o[k + 1]) == null ? void 0 : s.response_id;
98
- t ? m ? $(t) : S(t) : I(!0);
99
- }, [k, o, m, S, I]), G = c(() => {
100
- r((t) => {
99
+ t ? m ? z(t) : S(t) : q(!0);
100
+ }, [k, o, m, S, q]), Y = c(() => {
101
+ l((t) => {
101
102
  const s = {
102
103
  ...f(o, e),
103
104
  ...t[e],
@@ -113,43 +114,46 @@ const dt = (y) => {
113
114
  [e]: s
114
115
  };
115
116
  }), N(!0);
116
- }, [n, o, e, r, N]), p = c(
117
+ }, [n, o, e, l, N]), p = c(
117
118
  (t) => {
118
- const s = l.question(e);
119
- s && s.getScore((i) => {
120
- V(
121
- e,
122
- s.getResponse(),
123
- M(s.getQuestion()) || !i ? {
124
- max_score: 0,
125
- score: 0,
126
- unscored: !i
127
- // score will be null for unscored questions
128
- } : { ...i, score: i.score ?? 0 },
129
- t
130
- );
131
- });
119
+ const s = a.question(e);
120
+ if (s) {
121
+ const i = s.getQuestion(), r = s.getResponse();
122
+ (i.type === "clozeformula" && r && (r == null ? void 0 : r.value) ? ut(r) : !1) && L(new Error("CLOZE_FORMULA_RESPONSE_EXCEEDS_MAX_LENGTH")), s.getScore((u) => {
123
+ g(
124
+ e,
125
+ r,
126
+ v(i) || !u ? {
127
+ max_score: 0,
128
+ score: 0,
129
+ unscored: !u
130
+ // score will be null for unscored questions
131
+ } : { ...u, score: u.score ?? 0 },
132
+ t
133
+ );
134
+ });
135
+ }
132
136
  },
133
- [l, e, V]
134
- ), J = c(() => {
135
- const t = l.question(e);
137
+ [a, e, L, g]
138
+ ), Z = c(() => {
139
+ const t = a.question(e);
136
140
  t && (t.enable(), t.resetValidationUI(), p());
137
- }, [p, l, e]), g = c(() => {
138
- O(), p(!0);
139
- }, [p, O]), X = c(() => {
140
- const t = l.question(e);
141
+ }, [p, a, e]), U = c(() => {
142
+ V(), p(!0);
143
+ }, [p, V]), j = c(() => {
144
+ const t = a.question(e);
141
145
  t && (t.disable(), t.validate(
142
146
  {
143
147
  feedbackAttempts: !0
144
148
  },
145
- g
149
+ U
146
150
  ));
147
- }, [g, l, e]), Z = c(() => {
148
- H ? d("exit-ticket-review") : B == null || B(e);
149
- }, [H, B, e, d]), R = c(() => {
150
- U(e);
151
- }, [e, U]), tt = c(() => {
152
- r((t) => {
151
+ }, [U, a, e]), J = c(() => {
152
+ O ? d("exit-ticket-review") : E == null || E(e);
153
+ }, [O, E, e, d]), tt = c(() => {
154
+ M(e);
155
+ }, [e, M]), et = c(() => {
156
+ l((t) => {
153
157
  const s = {
154
158
  ...f(o, e),
155
159
  ...t[e],
@@ -165,25 +169,25 @@ const dt = (y) => {
165
169
  [e]: s
166
170
  };
167
171
  }), d("exit-ticket-student-submission");
168
- }, [n, o, e, d, r]), et = c(() => {
172
+ }, [n, o, e, d, l]), st = c(() => {
169
173
  d("optional-items-skip");
170
174
  }, [d]);
171
175
  return {
172
176
  handleResponseChange: p,
173
- handleHelpButtonClick: _ ? j : void 0,
174
- handleHintButtonClick: v,
175
- handleBackButtonClick: !m && !Y ? z : void 0,
176
- handleNextButtonClick: F,
177
- handleRetryButtonClick: J,
178
- handleCheckButtonClick: X,
179
- handleValidateButtonClick: Z,
180
- handleStartButtonClick: R,
181
- handleReadyButtonClick: tt,
182
- handleSkipSectionButtonClick: et,
183
- handleSkipButtonClick: G
177
+ handleHelpButtonClick: _ ? G : void 0,
178
+ handleHintButtonClick: K,
179
+ handleBackButtonClick: !m && !$ ? R : void 0,
180
+ handleNextButtonClick: W,
181
+ handleRetryButtonClick: Z,
182
+ handleCheckButtonClick: j,
183
+ handleValidateButtonClick: J,
184
+ handleStartButtonClick: tt,
185
+ handleReadyButtonClick: et,
186
+ handleSkipSectionButtonClick: st,
187
+ handleSkipButtonClick: Y
184
188
  };
185
189
  };
186
190
  export {
187
- dt as default
191
+ kt as default
188
192
  };
189
193
  //# sourceMappingURL=use-handler-callbacks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-handler-callbacks.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.ts"],"sourcesContent":["import type {\n ILearnosityQuestionResponse,\n ILearnosityQuestionScore,\n IWorksheetResponse,\n} from '../worksheet-types';\nimport type { IWorksheetQuestionsControllerProps } from './worksheet-questions-controller-types';\nimport type { Dispatch, SetStateAction } from 'react';\n\nimport { useCallback } from 'react';\n\nimport useAudioPlayer from '../../../hooks/use-audio-player';\nimport EVENTS from '../../constants/events';\nimport { SYSTEM_VALIDATION_AUDIO_LIST } from '../constants';\nimport { getQuestionMetadata, isOkayTypeQuestion, scrollToQuestion } from '../worksheet-helpers';\n\ninterface IUseHandlerCallbacks {\n (\n options: Pick<\n IWorksheetQuestionsControllerProps,\n | 'learnosity'\n | 'layout'\n | 'questionIndex'\n | 'question'\n | 'questions'\n | 'setActiveQuestionId'\n | 'setResponses'\n | 'setSummaryVisible'\n | 'setBlocker'\n | 'onHelp'\n | 'onResponseChange'\n | 'onTeacherValidation'\n | 'behavior'\n | 'loggerRef'\n | 'getTimeSpentOnQuestion'\n > & {\n setSkipped: Dispatch<SetStateAction<boolean>>;\n },\n ): {\n handleResponseChange: () => void;\n handleHelpButtonClick?: () => void;\n handleHintButtonClick: () => void;\n handleBackButtonClick?: () => void;\n handleNextButtonClick: () => void;\n handleRetryButtonClick: () => void;\n handleCheckButtonClick: () => void;\n handleValidateButtonClick: () => void;\n handleStartButtonClick: () => void;\n handleReadyButtonClick: () => void;\n handleSkipSectionButtonClick: () => void;\n handleSkipButtonClick: () => void;\n };\n}\n\nconst useHandlerCallbacks: IUseHandlerCallbacks = options => {\n const {\n behavior,\n layout,\n learnosity,\n question,\n questionIndex,\n questions,\n getTimeSpentOnQuestion,\n } = options;\n const { setResponses, setSummaryVisible, setActiveQuestionId, setBlocker, setSkipped } = options;\n const { onHelp, onResponseChange, onTeacherValidation, loggerRef } = options;\n const { questionsScrollable } = layout;\n const { response_id, item_type, question_number, item_number, total_questions } = question;\n const isExitTicket = item_type === 'exit-ticket';\n const { validation, teacherValidationEnabled } = behavior;\n const playNotifSound = useAudioPlayer(SYSTEM_VALIDATION_AUDIO_LIST);\n\n const playAudio = useCallback(() => {\n const questionInstance = learnosity.question(response_id);\n\n if (questionInstance && validation && !isOkayTypeQuestion(questionInstance.getQuestion())) {\n questionInstance.getScore(sc => {\n const { max_score: maxScore, score: currentScore } = sc || {};\n\n if (maxScore) {\n if (maxScore === currentScore) {\n playNotifSound('CORRECT');\n } else {\n playNotifSound('INCORRECT');\n }\n }\n });\n }\n }, [learnosity, playNotifSound, response_id, validation]);\n\n const updateResponse = useCallback(\n (\n questionId: string,\n response: ILearnosityQuestionResponse,\n score: ILearnosityQuestionScore,\n answerChecked?: boolean,\n ) => {\n const timeSpentOnQuestions = getTimeSpentOnQuestion(response_id);\n\n setResponses(prevResponses => {\n const prevResponse = prevResponses[questionId];\n const isNewAttempt = !!answerChecked;\n\n const newResponse = {\n ...getQuestionMetadata(questions, questionId),\n ...prevResponse,\n response,\n score,\n responseEdited: !isNewAttempt,\n attemptsHistory: isNewAttempt\n ? [...(prevResponse?.attemptsHistory ?? []), { response, score }]\n : prevResponse?.attemptsHistory,\n skipped: !response,\n timeSpent: timeSpentOnQuestions,\n };\n\n onResponseChange?.({\n responseId: questionId,\n response: newResponse,\n question: questions.find(q => q.response_id === questionId)!,\n isNewAttempt,\n });\n\n return {\n ...prevResponses,\n [questionId]: newResponse,\n };\n });\n },\n [getTimeSpentOnQuestion, onResponseChange, questions, response_id, setResponses],\n );\n\n const validateQuestion = useCallback(\n (questionId: string, rating?: number) => {\n setResponses(prevResponses => {\n const newResponse = {\n ...getQuestionMetadata(questions, questionId),\n ...prevResponses[questionId],\n validatedByTeacher: true,\n rating,\n };\n\n onResponseChange?.({\n responseId: questionId,\n response: newResponse,\n question: questions.find(q => q.response_id === questionId)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [questionId]: newResponse,\n };\n });\n },\n [onResponseChange, questions, setResponses],\n );\n\n const handleHelpButtonClick = useCallback(() => {\n if (onHelp && question) {\n onHelp({\n questionId: response_id,\n questionNumber: `${item_number + 1}${\n total_questions > 1 ? String.fromCharCode('a'.charCodeAt(0) + question_number) : ''\n }`,\n });\n }\n }, [item_number, onHelp, question, question_number, response_id, total_questions]);\n\n const handleHintButtonClick = useCallback(() => {\n loggerRef.current(EVENTS.WORKSHEET_V3_HINT_SEEN);\n setResponses(prevResponses => {\n const newResponse = {\n ...getQuestionMetadata(questions, response_id),\n ...prevResponses[response_id],\n hintsUsed: (prevResponses[response_id]?.hintsUsed ?? 0) + 1,\n };\n\n onResponseChange?.({\n responseId: response_id,\n response: newResponse,\n question: questions.find(q => q.response_id === response_id)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [response_id]: newResponse,\n };\n });\n }, [loggerRef, onResponseChange, questions, response_id, setResponses]);\n\n const handleBackButtonClick = useCallback(() => {\n const questionId = questions[questionIndex - 1]?.response_id;\n\n if (questionId) {\n if (questionsScrollable) {\n scrollToQuestion(questionId);\n } else {\n setActiveQuestionId(questionId);\n }\n }\n }, [questionIndex, questions, questionsScrollable, setActiveQuestionId]);\n\n const handleNextButtonClick = useCallback(() => {\n const questionId = questions[questionIndex + 1]?.response_id;\n\n if (questionId) {\n if (questionsScrollable) {\n scrollToQuestion(questionId);\n } else {\n setActiveQuestionId(questionId);\n }\n } else {\n setSummaryVisible(true);\n }\n }, [questionIndex, questions, questionsScrollable, setActiveQuestionId, setSummaryVisible]);\n\n const handleSkipButtonClick = useCallback(() => {\n setResponses(prevResponses => {\n const newResponse = {\n ...getQuestionMetadata(questions, response_id),\n ...prevResponses[response_id],\n skipped: true,\n };\n\n onResponseChange?.({\n responseId: response_id,\n response: newResponse,\n question: questions.find(q => q.response_id === response_id)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [response_id]: newResponse,\n };\n });\n setSkipped(true);\n }, [onResponseChange, questions, response_id, setResponses, setSkipped]);\n\n const handleResponseChange = useCallback(\n (answerChecked?: boolean) => {\n const questionInstance = learnosity.question(response_id);\n\n if (questionInstance) {\n questionInstance.getScore(score => {\n updateResponse(\n response_id,\n questionInstance.getResponse(),\n isOkayTypeQuestion(questionInstance.getQuestion()) || !score\n ? {\n max_score: 0,\n score: 0,\n unscored: !score, // score will be null for unscored questions\n }\n : { ...score, score: score.score ?? 0 },\n answerChecked,\n );\n });\n }\n },\n [learnosity, response_id, updateResponse],\n );\n\n const handleRetryButtonClick = useCallback(() => {\n const questionInstance = learnosity.question(response_id);\n\n if (questionInstance) {\n questionInstance.enable();\n questionInstance.resetValidationUI();\n handleResponseChange();\n }\n }, [handleResponseChange, learnosity, response_id]);\n\n const handleValidate = useCallback(() => {\n playAudio();\n handleResponseChange(true);\n }, [handleResponseChange, playAudio]);\n\n const handleCheckButtonClick = useCallback(() => {\n const questionInstance = learnosity.question(response_id);\n\n if (questionInstance) {\n questionInstance.disable();\n questionInstance.validate(\n {\n feedbackAttempts: true,\n },\n handleValidate,\n );\n }\n }, [handleValidate, learnosity, response_id]);\n\n const handleValidateButtonClick = useCallback(() => {\n if (isExitTicket) {\n setBlocker('exit-ticket-review');\n } else {\n onTeacherValidation?.(response_id);\n }\n }, [isExitTicket, onTeacherValidation, response_id, setBlocker]);\n\n const handleStartButtonClick = useCallback(() => {\n validateQuestion(response_id);\n }, [response_id, validateQuestion]);\n\n const handleReadyButtonClick = useCallback(() => {\n setResponses(prevResponses => {\n const newResponse: IWorksheetResponse = {\n ...getQuestionMetadata(questions, response_id),\n ...prevResponses[response_id],\n submittedByStudent: true,\n };\n\n onResponseChange?.({\n responseId: response_id,\n response: newResponse,\n question: questions.find(q => q.response_id === response_id)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [response_id]: newResponse,\n };\n });\n setBlocker('exit-ticket-student-submission');\n }, [onResponseChange, questions, response_id, setBlocker, setResponses]);\n\n const handleSkipSectionButtonClick = useCallback(() => {\n setBlocker('optional-items-skip');\n }, [setBlocker]);\n\n return {\n handleResponseChange,\n handleHelpButtonClick: onHelp ? handleHelpButtonClick : undefined,\n handleHintButtonClick,\n handleBackButtonClick:\n !questionsScrollable && !teacherValidationEnabled ? handleBackButtonClick : undefined,\n handleNextButtonClick,\n handleRetryButtonClick,\n handleCheckButtonClick,\n handleValidateButtonClick,\n handleStartButtonClick,\n handleReadyButtonClick,\n handleSkipSectionButtonClick,\n handleSkipButtonClick,\n };\n};\n\nexport default useHandlerCallbacks;\n"],"names":["useHandlerCallbacks","options","behavior","layout","learnosity","question","questionIndex","questions","getTimeSpentOnQuestion","setResponses","setSummaryVisible","setActiveQuestionId","setBlocker","setSkipped","onHelp","onResponseChange","onTeacherValidation","loggerRef","questionsScrollable","response_id","item_type","question_number","item_number","total_questions","isExitTicket","validation","teacherValidationEnabled","playNotifSound","useAudioPlayer","SYSTEM_VALIDATION_AUDIO_LIST","playAudio","useCallback","questionInstance","isOkayTypeQuestion","sc","maxScore","currentScore","updateResponse","questionId","response","score","answerChecked","timeSpentOnQuestions","prevResponses","prevResponse","isNewAttempt","newResponse","getQuestionMetadata","q","validateQuestion","rating","handleHelpButtonClick","handleHintButtonClick","EVENTS","_a","handleBackButtonClick","scrollToQuestion","handleNextButtonClick","handleSkipButtonClick","handleResponseChange","handleRetryButtonClick","handleValidate","handleCheckButtonClick","handleValidateButtonClick","handleStartButtonClick","handleReadyButtonClick","handleSkipSectionButtonClick"],"mappings":"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"}
1
+ {"version":3,"file":"use-handler-callbacks.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.ts"],"sourcesContent":["import type {\n ILearnosityQuestionResponse,\n ILearnosityQuestionScore,\n IWorksheetResponse,\n} from '../worksheet-types';\nimport type { IWorksheetQuestionsControllerProps } from './worksheet-questions-controller-types';\nimport type { Dispatch, SetStateAction } from 'react';\n\nimport { useCallback } from 'react';\nimport { useErrorBoundary } from 'react-error-boundary';\n\nimport useAudioPlayer from '../../../hooks/use-audio-player';\nimport EVENTS from '../../constants/events';\nimport { SYSTEM_VALIDATION_AUDIO_LIST } from '../constants';\nimport { getQuestionMetadata, isOkayTypeQuestion, scrollToQuestion } from '../worksheet-helpers';\nimport { checkIsClozeFormulaResponseInvalid } from '../worksheet-helpers';\n\ninterface IUseHandlerCallbacks {\n (\n options: Pick<\n IWorksheetQuestionsControllerProps,\n | 'learnosity'\n | 'layout'\n | 'questionIndex'\n | 'question'\n | 'questions'\n | 'setActiveQuestionId'\n | 'setResponses'\n | 'setSummaryVisible'\n | 'setBlocker'\n | 'onHelp'\n | 'onResponseChange'\n | 'onTeacherValidation'\n | 'behavior'\n | 'loggerRef'\n | 'getTimeSpentOnQuestion'\n > & {\n setSkipped: Dispatch<SetStateAction<boolean>>;\n },\n ): {\n handleResponseChange: () => void;\n handleHelpButtonClick?: () => void;\n handleHintButtonClick: () => void;\n handleBackButtonClick?: () => void;\n handleNextButtonClick: () => void;\n handleRetryButtonClick: () => void;\n handleCheckButtonClick: () => void;\n handleValidateButtonClick: () => void;\n handleStartButtonClick: () => void;\n handleReadyButtonClick: () => void;\n handleSkipSectionButtonClick: () => void;\n handleSkipButtonClick: () => void;\n };\n}\n\nconst useHandlerCallbacks: IUseHandlerCallbacks = options => {\n const {\n behavior,\n layout,\n learnosity,\n question,\n questionIndex,\n questions,\n getTimeSpentOnQuestion,\n } = options;\n const { setResponses, setSummaryVisible, setActiveQuestionId, setBlocker, setSkipped } = options;\n const { onHelp, onResponseChange, onTeacherValidation, loggerRef } = options;\n const { questionsScrollable } = layout;\n const { response_id, item_type, question_number, item_number, total_questions } = question;\n const isExitTicket = item_type === 'exit-ticket';\n const { validation, teacherValidationEnabled } = behavior;\n const playNotifSound = useAudioPlayer(SYSTEM_VALIDATION_AUDIO_LIST);\n const { showBoundary } = useErrorBoundary();\n\n const playAudio = useCallback(() => {\n const questionInstance = learnosity.question(response_id);\n\n if (questionInstance && validation && !isOkayTypeQuestion(questionInstance.getQuestion())) {\n questionInstance.getScore(sc => {\n const { max_score: maxScore, score: currentScore } = sc || {};\n\n if (maxScore) {\n if (maxScore === currentScore) {\n playNotifSound('CORRECT');\n } else {\n playNotifSound('INCORRECT');\n }\n }\n });\n }\n }, [learnosity, playNotifSound, response_id, validation]);\n\n const updateResponse = useCallback(\n (\n questionId: string,\n response: ILearnosityQuestionResponse,\n score: ILearnosityQuestionScore,\n answerChecked?: boolean,\n ) => {\n const timeSpentOnQuestions = getTimeSpentOnQuestion(response_id);\n\n setResponses(prevResponses => {\n const prevResponse = prevResponses[questionId];\n const isNewAttempt = !!answerChecked;\n\n const newResponse = {\n ...getQuestionMetadata(questions, questionId),\n ...prevResponse,\n response,\n score,\n responseEdited: !isNewAttempt,\n attemptsHistory: isNewAttempt\n ? [...(prevResponse?.attemptsHistory ?? []), { response, score }]\n : prevResponse?.attemptsHistory,\n skipped: !response,\n timeSpent: timeSpentOnQuestions,\n };\n\n onResponseChange?.({\n responseId: questionId,\n response: newResponse,\n question: questions.find(q => q.response_id === questionId)!,\n isNewAttempt,\n });\n\n return {\n ...prevResponses,\n [questionId]: newResponse,\n };\n });\n },\n [getTimeSpentOnQuestion, onResponseChange, questions, response_id, setResponses],\n );\n\n const validateQuestion = useCallback(\n (questionId: string, rating?: number) => {\n setResponses(prevResponses => {\n const newResponse = {\n ...getQuestionMetadata(questions, questionId),\n ...prevResponses[questionId],\n validatedByTeacher: true,\n rating,\n };\n\n onResponseChange?.({\n responseId: questionId,\n response: newResponse,\n question: questions.find(q => q.response_id === questionId)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [questionId]: newResponse,\n };\n });\n },\n [onResponseChange, questions, setResponses],\n );\n\n const handleHelpButtonClick = useCallback(() => {\n if (onHelp && question) {\n onHelp({\n questionId: response_id,\n questionNumber: `${item_number + 1}${\n total_questions > 1 ? String.fromCharCode('a'.charCodeAt(0) + question_number) : ''\n }`,\n });\n }\n }, [item_number, onHelp, question, question_number, response_id, total_questions]);\n\n const handleHintButtonClick = useCallback(() => {\n loggerRef.current(EVENTS.WORKSHEET_V3_HINT_SEEN);\n setResponses(prevResponses => {\n const newResponse = {\n ...getQuestionMetadata(questions, response_id),\n ...prevResponses[response_id],\n hintsUsed: (prevResponses[response_id]?.hintsUsed ?? 0) + 1,\n };\n\n onResponseChange?.({\n responseId: response_id,\n response: newResponse,\n question: questions.find(q => q.response_id === response_id)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [response_id]: newResponse,\n };\n });\n }, [loggerRef, onResponseChange, questions, response_id, setResponses]);\n\n const handleBackButtonClick = useCallback(() => {\n const questionId = questions[questionIndex - 1]?.response_id;\n\n if (questionId) {\n if (questionsScrollable) {\n scrollToQuestion(questionId);\n } else {\n setActiveQuestionId(questionId);\n }\n }\n }, [questionIndex, questions, questionsScrollable, setActiveQuestionId]);\n\n const handleNextButtonClick = useCallback(() => {\n const questionId = questions[questionIndex + 1]?.response_id;\n\n if (questionId) {\n if (questionsScrollable) {\n scrollToQuestion(questionId);\n } else {\n setActiveQuestionId(questionId);\n }\n } else {\n setSummaryVisible(true);\n }\n }, [questionIndex, questions, questionsScrollable, setActiveQuestionId, setSummaryVisible]);\n\n const handleSkipButtonClick = useCallback(() => {\n setResponses(prevResponses => {\n const newResponse = {\n ...getQuestionMetadata(questions, response_id),\n ...prevResponses[response_id],\n skipped: true,\n };\n\n onResponseChange?.({\n responseId: response_id,\n response: newResponse,\n question: questions.find(q => q.response_id === response_id)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [response_id]: newResponse,\n };\n });\n setSkipped(true);\n }, [onResponseChange, questions, response_id, setResponses, setSkipped]);\n\n const handleResponseChange = useCallback(\n (answerChecked?: boolean) => {\n const questionInstance = learnosity.question(response_id);\n\n if (questionInstance) {\n const lquestion = questionInstance.getQuestion();\n const questionResponse = questionInstance.getResponse();\n const shouldCheckAbuse =\n lquestion.type === 'clozeformula' && questionResponse && questionResponse?.value;\n const isInputExceedingMaxLength = shouldCheckAbuse\n ? checkIsClozeFormulaResponseInvalid(questionResponse)\n : false;\n\n if (isInputExceedingMaxLength) {\n showBoundary(new Error('CLOZE_FORMULA_RESPONSE_EXCEEDS_MAX_LENGTH'));\n }\n\n questionInstance.getScore(score => {\n updateResponse(\n response_id,\n questionResponse,\n isOkayTypeQuestion(lquestion) || !score\n ? {\n max_score: 0,\n score: 0,\n unscored: !score, // score will be null for unscored questions\n }\n : { ...score, score: score.score ?? 0 },\n answerChecked,\n );\n });\n }\n },\n [learnosity, response_id, showBoundary, updateResponse],\n );\n\n const handleRetryButtonClick = useCallback(() => {\n const questionInstance = learnosity.question(response_id);\n\n if (questionInstance) {\n questionInstance.enable();\n questionInstance.resetValidationUI();\n handleResponseChange();\n }\n }, [handleResponseChange, learnosity, response_id]);\n\n const handleValidate = useCallback(() => {\n playAudio();\n handleResponseChange(true);\n }, [handleResponseChange, playAudio]);\n\n const handleCheckButtonClick = useCallback(() => {\n const questionInstance = learnosity.question(response_id);\n\n if (questionInstance) {\n questionInstance.disable();\n questionInstance.validate(\n {\n feedbackAttempts: true,\n },\n handleValidate,\n );\n }\n }, [handleValidate, learnosity, response_id]);\n\n const handleValidateButtonClick = useCallback(() => {\n if (isExitTicket) {\n setBlocker('exit-ticket-review');\n } else {\n onTeacherValidation?.(response_id);\n }\n }, [isExitTicket, onTeacherValidation, response_id, setBlocker]);\n\n const handleStartButtonClick = useCallback(() => {\n validateQuestion(response_id);\n }, [response_id, validateQuestion]);\n\n const handleReadyButtonClick = useCallback(() => {\n setResponses(prevResponses => {\n const newResponse: IWorksheetResponse = {\n ...getQuestionMetadata(questions, response_id),\n ...prevResponses[response_id],\n submittedByStudent: true,\n };\n\n onResponseChange?.({\n responseId: response_id,\n response: newResponse,\n question: questions.find(q => q.response_id === response_id)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [response_id]: newResponse,\n };\n });\n setBlocker('exit-ticket-student-submission');\n }, [onResponseChange, questions, response_id, setBlocker, setResponses]);\n\n const handleSkipSectionButtonClick = useCallback(() => {\n setBlocker('optional-items-skip');\n }, [setBlocker]);\n\n return {\n handleResponseChange,\n handleHelpButtonClick: onHelp ? handleHelpButtonClick : undefined,\n handleHintButtonClick,\n handleBackButtonClick:\n !questionsScrollable && !teacherValidationEnabled ? handleBackButtonClick : undefined,\n handleNextButtonClick,\n handleRetryButtonClick,\n handleCheckButtonClick,\n handleValidateButtonClick,\n handleStartButtonClick,\n handleReadyButtonClick,\n handleSkipSectionButtonClick,\n handleSkipButtonClick,\n };\n};\n\nexport default useHandlerCallbacks;\n"],"names":["useHandlerCallbacks","options","behavior","layout","learnosity","question","questionIndex","questions","getTimeSpentOnQuestion","setResponses","setSummaryVisible","setActiveQuestionId","setBlocker","setSkipped","onHelp","onResponseChange","onTeacherValidation","loggerRef","questionsScrollable","response_id","item_type","question_number","item_number","total_questions","isExitTicket","validation","teacherValidationEnabled","playNotifSound","useAudioPlayer","SYSTEM_VALIDATION_AUDIO_LIST","showBoundary","useErrorBoundary","playAudio","useCallback","questionInstance","isOkayTypeQuestion","sc","maxScore","currentScore","updateResponse","questionId","response","score","answerChecked","timeSpentOnQuestions","prevResponses","prevResponse","isNewAttempt","newResponse","getQuestionMetadata","q","validateQuestion","rating","handleHelpButtonClick","handleHintButtonClick","EVENTS","_a","handleBackButtonClick","scrollToQuestion","handleNextButtonClick","handleSkipButtonClick","handleResponseChange","lquestion","questionResponse","checkIsClozeFormulaResponseInvalid","handleRetryButtonClick","handleValidate","handleCheckButtonClick","handleValidateButtonClick","handleStartButtonClick","handleReadyButtonClick","handleSkipSectionButtonClick"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1324,6 +1324,8 @@ declare interface IErrorProps {
1324
1324
  onTryAgain?: () => void;
1325
1325
  height?: string | number;
1326
1326
  theme?: 'light' | 'dark';
1327
+ title?: string;
1328
+ description?: string;
1327
1329
  }
1328
1330
 
1329
1331
  declare interface IExpandableHeaderProps {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cuemath/leap",
3
- "version": "3.1.16",
3
+ "version": "3.1.17-aa0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -27,8 +27,7 @@
27
27
  "lodash.isequal": "^4.5.0",
28
28
  "lodash.throttle": "^4.1.1",
29
29
  "query-string": "^8.1.0",
30
- "react-datepicker": "^8.3.0",
31
- "react-error-boundary": "^6.0.0"
30
+ "react-datepicker": "^8.3.0"
32
31
  },
33
32
  "sideEffects": false,
34
33
  "devDependencies": {
@@ -86,6 +85,7 @@
86
85
  "prettier": "3.1.0",
87
86
  "react": "18.2.0",
88
87
  "react-dom": "18.2.0",
88
+ "react-error-boundary": "^6.0.0",
89
89
  "storybook": "^7.6.3",
90
90
  "storybook-addon-fetch-mock": "^2.0.1",
91
91
  "styled-components": "6.0.7",