@cuemath/leap 3.0.27 → 3.0.29-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.
- package/dist/assets/line-icons/icons/check.js +3 -3
- package/dist/assets/line-icons/icons/check.js.map +1 -1
- package/dist/assets/line-icons/icons/puzzle-icon.js +51 -0
- package/dist/assets/line-icons/icons/puzzle-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/share.js +48 -0
- package/dist/assets/line-icons/icons/share.js.map +1 -0
- package/dist/assets/line-icons/icons/tile.js +54 -0
- package/dist/assets/line-icons/icons/tile.js.map +1 -0
- package/dist/features/cue-canvas/bottombar/homework-controls.js +73 -0
- package/dist/features/cue-canvas/bottombar/homework-controls.js.map +1 -0
- package/dist/features/cue-canvas/cue-canvas-context.js +8 -5
- package/dist/features/cue-canvas/cue-canvas-context.js.map +1 -1
- package/dist/features/cue-canvas/cue-canvas-core.js +68 -70
- package/dist/features/cue-canvas/cue-canvas-core.js.map +1 -1
- package/dist/features/cue-canvas/cue-canvas-helpers.js +31 -25
- package/dist/features/cue-canvas/cue-canvas-helpers.js.map +1 -1
- package/dist/features/cue-canvas/cue-canvas-provider.js +14 -12
- package/dist/features/cue-canvas/cue-canvas-provider.js.map +1 -1
- package/dist/features/cue-canvas/cue-canvas.js +85 -66
- package/dist/features/cue-canvas/cue-canvas.js.map +1 -1
- package/dist/features/cue-canvas/cue-cavas-styled.js +45 -42
- package/dist/features/cue-canvas/cue-cavas-styled.js.map +1 -1
- package/dist/features/cue-canvas/hooks/use-canvas-sync-broker.js +61 -54
- package/dist/features/cue-canvas/hooks/use-canvas-sync-broker.js.map +1 -1
- package/dist/features/cue-canvas/hooks/use-cue-canvas-actions.js +18 -14
- package/dist/features/cue-canvas/hooks/use-cue-canvas-actions.js.map +1 -1
- package/dist/features/cue-canvas/hooks/use-upload-helper.js +23 -0
- package/dist/features/cue-canvas/hooks/use-upload-helper.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/homework/helper.js +20 -0
- package/dist/features/cue-canvas/sidebar/homework/helper.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/homework/homework-menu.js +33 -0
- package/dist/features/cue-canvas/sidebar/homework/homework-menu.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/homework/homework-request.js +68 -0
- package/dist/features/cue-canvas/sidebar/homework/homework-request.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/homework/homework-styled.js +25 -0
- package/dist/features/cue-canvas/sidebar/homework/homework-styled.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/homework/homework.js +39 -0
- package/dist/features/cue-canvas/sidebar/homework/homework.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/api/get-puzzles.js +13 -0
- package/dist/features/cue-canvas/sidebar/puzzles/api/get-puzzles.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/filter-selection-menu.js +60 -0
- package/dist/features/cue-canvas/sidebar/puzzles/filter-selection-menu.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/filters-section.js +44 -0
- package/dist/features/cue-canvas/sidebar/puzzles/filters-section.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/filters.js +107 -0
- package/dist/features/cue-canvas/sidebar/puzzles/filters.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/hooks/use-fetch-cue-canvas-activity.js +42 -0
- package/dist/features/cue-canvas/sidebar/puzzles/hooks/use-fetch-cue-canvas-activity.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/launch-puzzle.js +84 -0
- package/dist/features/cue-canvas/sidebar/puzzles/launch-puzzle.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu-header.js +36 -0
- package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu-header.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu.js +133 -0
- package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/puzzles-styled.js +96 -0
- package/dist/features/cue-canvas/sidebar/puzzles/puzzles-styled.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/puzzles.js +29 -0
- package/dist/features/cue-canvas/sidebar/puzzles/puzzles.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/puzzles/utils.js +120 -0
- package/dist/features/cue-canvas/sidebar/puzzles/utils.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/sidebar-styled.js +32 -0
- package/dist/features/cue-canvas/sidebar/sidebar-styled.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/sidebar.js +29 -0
- package/dist/features/cue-canvas/sidebar/sidebar.js.map +1 -0
- package/dist/features/cue-canvas/sidebar/tiles/tile.js +16 -0
- package/dist/features/cue-canvas/sidebar/tiles/tile.js.map +1 -0
- package/dist/features/cue-canvas/toolbar/grid-menu.js +13 -13
- package/dist/features/cue-canvas/toolbar/grid-menu.js.map +1 -1
- package/dist/features/hooks/use-debounce.js +16 -0
- package/dist/features/hooks/use-debounce.js.map +1 -0
- package/dist/features/ui/error/error.js +20 -20
- package/dist/features/ui/error/error.js.map +1 -1
- package/dist/features/ui/stepper/stepper.js +7 -7
- package/dist/features/worksheet/worksheet/hooks/use-s3-helper.js +22 -19
- package/dist/features/worksheet/worksheet/hooks/use-s3-helper.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-helpers.js +57 -58
- package/dist/features/worksheet/worksheet/worksheet-helpers.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.js +90 -94
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.js.map +1 -1
- package/dist/index.d.ts +48 -4
- package/dist/index.js +184 -180
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
@@ -1,27 +1,27 @@
|
|
1
1
|
import { jsxs as a, jsx as r } from "react/jsx-runtime";
|
2
2
|
import { memo as f, useRef as C, useCallback as $ } from "react";
|
3
|
-
import
|
3
|
+
import t from "../../ui/buttons/clickable/clickable.js";
|
4
4
|
import h from "../../ui/hooks/use-context-menu-click-handler.js";
|
5
|
-
import
|
5
|
+
import l from "../../ui/layout/flex-view.js";
|
6
6
|
import { GRID_NAMES as b } from "../cue-canvas-helpers.js";
|
7
7
|
import { StyledWrapper as k, MenuWrapper as G } from "../cue-cavas-styled.js";
|
8
|
-
import { useCueCanvasActions as
|
8
|
+
import { useCueCanvasActions as c } from "../hooks/use-cue-canvas-actions.js";
|
9
9
|
import { GRID_TO_COMP as x } from "./icon-map.js";
|
10
|
-
const A = f(({ GridIcon:
|
11
|
-
const { activeInstance: e } =
|
12
|
-
|
10
|
+
const A = f(({ GridIcon: d }) => {
|
11
|
+
const { activeInstance: e } = c(), n = C(null), { activeTool: m } = c(), { menuVisible: u, onMenuClick: i } = h(
|
12
|
+
n,
|
13
13
|
void 0,
|
14
14
|
!0,
|
15
15
|
void 0
|
16
16
|
), p = $(
|
17
17
|
(o) => {
|
18
|
-
e == null || e.changeGrid(o);
|
18
|
+
e == null || e.changeGrid(o), i();
|
19
19
|
},
|
20
|
-
[e]
|
20
|
+
[e, i]
|
21
21
|
);
|
22
|
-
return /* @__PURE__ */ a(
|
23
|
-
/* @__PURE__ */ r(
|
24
|
-
|
22
|
+
return /* @__PURE__ */ a(l, { $gutterX: 0.25, ref: n, children: [
|
23
|
+
/* @__PURE__ */ r(t, { onClick: i, label: "grid", children: /* @__PURE__ */ r(k, { $active: m === "grid", children: /* @__PURE__ */ r(d, {}) }) }),
|
24
|
+
u && /* @__PURE__ */ r(
|
25
25
|
G,
|
26
26
|
{
|
27
27
|
$borderColor: "GREY_1",
|
@@ -33,12 +33,12 @@ const A = f(({ GridIcon: c }) => {
|
|
33
33
|
children: b.map((o) => {
|
34
34
|
const s = x[o];
|
35
35
|
return /* @__PURE__ */ r(
|
36
|
-
|
36
|
+
t,
|
37
37
|
{
|
38
38
|
onClick: () => p(o),
|
39
39
|
label: o,
|
40
40
|
children: /* @__PURE__ */ r(
|
41
|
-
|
41
|
+
l,
|
42
42
|
{
|
43
43
|
$width: 48,
|
44
44
|
$height: 48,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"grid-menu.js","sources":["../../../../src/features/cue-canvas/toolbar/grid-menu.tsx"],"sourcesContent":["import type { TCueCanvasGridName } from '../types/cue-canvas';\nimport type { IGridMenu, TToolComponentType } from '../types/toolbar';\n\nimport React, { memo, useCallback, useRef } from 'react';\n\nimport Clickable from '../../ui/buttons/clickable/clickable';\nimport useContextMenuClickHandler from '../../ui/hooks/use-context-menu-click-handler';\nimport FlexView from '../../ui/layout/flex-view';\nimport { GRID_NAMES } from '../cue-canvas-helpers';\nimport { MenuWrapper, StyledWrapper } from '../cue-cavas-styled';\nimport { useCueCanvasActions } from '../hooks/use-cue-canvas-actions';\nimport { GRID_TO_COMP } from './icon-map';\n\nconst GridMenu: React.FC<IGridMenu> = memo(({ GridIcon }) => {\n const { activeInstance: cueCanvas } = useCueCanvasActions();\n const gridMenuRef = useRef(null);\n const { activeTool } = useCueCanvasActions();\n const { menuVisible, onMenuClick } = useContextMenuClickHandler(\n gridMenuRef,\n undefined,\n true,\n undefined,\n );\n const onGridOptionClick = useCallback(\n (gridOption: TCueCanvasGridName) => {\n cueCanvas?.changeGrid(gridOption);\n },\n [cueCanvas],\n );\n\n return (\n <FlexView $gutterX={0.25} ref={gridMenuRef}>\n <Clickable onClick={onMenuClick} label=\"grid\">\n <StyledWrapper $active={activeTool === 'grid'}>\n <GridIcon />\n </StyledWrapper>\n </Clickable>\n {menuVisible && (\n <MenuWrapper\n $borderColor=\"GREY_1\"\n $background=\"GREY_1\"\n $flexDirection=\"row\"\n $widthX={11.15}\n $flexWrap={true}\n $flexGapX={0.5}\n >\n {GRID_NAMES.map(gridName => {\n const GridComponent = GRID_TO_COMP[gridName] as TToolComponentType;\n\n return (\n <Clickable\n key={gridName}\n onClick={() => onGridOptionClick(gridName)}\n label={gridName}\n >\n <FlexView\n $width={48}\n $height={48}\n $borderColor=\"BLACK\"\n $borderRadius={4}\n $background=\"WHITE\"\n >\n <GridComponent />\n </FlexView>\n </Clickable>\n );\n })}\n </MenuWrapper>\n )}\n </FlexView>\n );\n});\n\nexport default GridMenu;\n"],"names":["GridMenu","memo","GridIcon","cueCanvas","useCueCanvasActions","gridMenuRef","useRef","activeTool","menuVisible","onMenuClick","useContextMenuClickHandler","onGridOptionClick","useCallback","gridOption","jsxs","FlexView","jsx","Clickable","StyledWrapper","MenuWrapper","GRID_NAMES","gridName","GridComponent","GRID_TO_COMP"],"mappings":";;;;;;;;;AAaA,MAAMA,IAAgCC,EAAK,CAAC,EAAE,UAAAC,QAAe;AAC3D,QAAM,EAAE,gBAAgBC,EAAU,IAAIC,EAAoB,GACpDC,IAAcC,EAAO,IAAI,GACzB,EAAE,YAAAC,MAAeH,KACjB,EAAE,aAAAI,GAAa,aAAAC,EAAA,IAAgBC;AAAA,IACnCL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEIM,IAAoBC;AAAA,IACxB,CAACC,MAAmC;AAClC,MAAAV,KAAA,QAAAA,EAAW,WAAWU
|
1
|
+
{"version":3,"file":"grid-menu.js","sources":["../../../../src/features/cue-canvas/toolbar/grid-menu.tsx"],"sourcesContent":["import type { TCueCanvasGridName } from '../types/cue-canvas';\nimport type { IGridMenu, TToolComponentType } from '../types/toolbar';\n\nimport React, { memo, useCallback, useRef } from 'react';\n\nimport Clickable from '../../ui/buttons/clickable/clickable';\nimport useContextMenuClickHandler from '../../ui/hooks/use-context-menu-click-handler';\nimport FlexView from '../../ui/layout/flex-view';\nimport { GRID_NAMES } from '../cue-canvas-helpers';\nimport { MenuWrapper, StyledWrapper } from '../cue-cavas-styled';\nimport { useCueCanvasActions } from '../hooks/use-cue-canvas-actions';\nimport { GRID_TO_COMP } from './icon-map';\n\nconst GridMenu: React.FC<IGridMenu> = memo(({ GridIcon }) => {\n const { activeInstance: cueCanvas } = useCueCanvasActions();\n const gridMenuRef = useRef(null);\n const { activeTool } = useCueCanvasActions();\n const { menuVisible, onMenuClick } = useContextMenuClickHandler(\n gridMenuRef,\n undefined,\n true,\n undefined,\n );\n const onGridOptionClick = useCallback(\n (gridOption: TCueCanvasGridName) => {\n cueCanvas?.changeGrid(gridOption);\n onMenuClick();\n },\n [cueCanvas, onMenuClick],\n );\n\n return (\n <FlexView $gutterX={0.25} ref={gridMenuRef}>\n <Clickable onClick={onMenuClick} label=\"grid\">\n <StyledWrapper $active={activeTool === 'grid'}>\n <GridIcon />\n </StyledWrapper>\n </Clickable>\n {menuVisible && (\n <MenuWrapper\n $borderColor=\"GREY_1\"\n $background=\"GREY_1\"\n $flexDirection=\"row\"\n $widthX={11.15}\n $flexWrap={true}\n $flexGapX={0.5}\n >\n {GRID_NAMES.map(gridName => {\n const GridComponent = GRID_TO_COMP[gridName] as TToolComponentType;\n\n return (\n <Clickable\n key={gridName}\n onClick={() => onGridOptionClick(gridName)}\n label={gridName}\n >\n <FlexView\n $width={48}\n $height={48}\n $borderColor=\"BLACK\"\n $borderRadius={4}\n $background=\"WHITE\"\n >\n <GridComponent />\n </FlexView>\n </Clickable>\n );\n })}\n </MenuWrapper>\n )}\n </FlexView>\n );\n});\n\nexport default GridMenu;\n"],"names":["GridMenu","memo","GridIcon","cueCanvas","useCueCanvasActions","gridMenuRef","useRef","activeTool","menuVisible","onMenuClick","useContextMenuClickHandler","onGridOptionClick","useCallback","gridOption","jsxs","FlexView","jsx","Clickable","StyledWrapper","MenuWrapper","GRID_NAMES","gridName","GridComponent","GRID_TO_COMP"],"mappings":";;;;;;;;;AAaA,MAAMA,IAAgCC,EAAK,CAAC,EAAE,UAAAC,QAAe;AAC3D,QAAM,EAAE,gBAAgBC,EAAU,IAAIC,EAAoB,GACpDC,IAAcC,EAAO,IAAI,GACzB,EAAE,YAAAC,MAAeH,KACjB,EAAE,aAAAI,GAAa,aAAAC,EAAA,IAAgBC;AAAA,IACnCL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEIM,IAAoBC;AAAA,IACxB,CAACC,MAAmC;AAClC,MAAAV,KAAA,QAAAA,EAAW,WAAWU,IACVJ;IACd;AAAA,IACA,CAACN,GAAWM,CAAW;AAAA,EAAA;AAGzB,SACG,gBAAAK,EAAAC,GAAA,EAAS,UAAU,MAAM,KAAKV,GAC7B,UAAA;AAAA,IAAA,gBAAAW,EAACC,GAAU,EAAA,SAASR,GAAa,OAAM,QACrC,UAAA,gBAAAO,EAACE,GAAc,EAAA,SAASX,MAAe,QACrC,UAAC,gBAAAS,EAAAd,GAAA,CAAA,CAAS,EACZ,CAAA,GACF;AAAA,IACCM,KACC,gBAAAQ;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,cAAa;AAAA,QACb,aAAY;AAAA,QACZ,gBAAe;AAAA,QACf,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,QAEV,UAAAC,EAAW,IAAI,CAAYC,MAAA;AACpB,gBAAAC,IAAgBC,EAAaF,CAAQ;AAGzC,iBAAA,gBAAAL;AAAA,YAACC;AAAA,YAAA;AAAA,cAEC,SAAS,MAAMN,EAAkBU,CAAQ;AAAA,cACzC,OAAOA;AAAA,cAEP,UAAA,gBAAAL;AAAA,gBAACD;AAAA,gBAAA;AAAA,kBACC,QAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,cAAa;AAAA,kBACb,eAAe;AAAA,kBACf,aAAY;AAAA,kBAEZ,4BAACO,GAAc,EAAA;AAAA,gBAAA;AAAA,cACjB;AAAA,YAAA;AAAA,YAZKD;AAAA,UAAA;AAAA,QAaP,CAEH;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ,EAAA,CAAA;AAEJ,CAAC;"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { useRef as n, useCallback as c } from "react";
|
2
|
+
function a(u, r) {
|
3
|
+
const e = n(null);
|
4
|
+
return c(
|
5
|
+
(t) => (e.current && clearTimeout(e.current), e.current = setTimeout(() => {
|
6
|
+
u(t);
|
7
|
+
}, r), () => {
|
8
|
+
e.current && clearTimeout(e.current);
|
9
|
+
}),
|
10
|
+
[u, r]
|
11
|
+
);
|
12
|
+
}
|
13
|
+
export {
|
14
|
+
a as default
|
15
|
+
};
|
16
|
+
//# sourceMappingURL=use-debounce.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-debounce.js","sources":["../../../src/features/hooks/use-debounce.tsx"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nfunction useDebounce<T>(callback: (arg: T) => void, wait: number) {\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const debouncedCallback = useCallback(\n (val: T) => {\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = setTimeout(() => {\n callback(val);\n }, wait);\n\n return () => {\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n },\n [callback, wait],\n );\n\n return debouncedCallback;\n}\n\nexport default useDebounce;\n"],"names":["useDebounce","callback","wait","timeoutIdRef","useRef","useCallback","val"],"mappings":";AAEA,SAASA,EAAeC,GAA4BC,GAAc;AAC1D,QAAAC,IAAeC,EAA6C,IAAI;AAgB/D,SAdmBC;AAAA,IACxB,CAACC,OACKH,EAAa,WAAsB,aAAAA,EAAa,OAAO,GAC9CA,EAAA,UAAU,WAAW,MAAM;AACtC,MAAAF,EAASK,CAAG;AAAA,OACXJ,CAAI,GAEA,MAAM;AACX,MAAIC,EAAa,WAAsB,aAAAA,EAAa,OAAO;AAAA,IAAA;AAAA,IAG/D,CAACF,GAAUC,CAAI;AAAA,EAAA;AAInB;"}
|
@@ -1,17 +1,17 @@
|
|
1
|
-
import { jsxs as o, jsx as r
|
2
|
-
import { useCallback as
|
3
|
-
import { ILLUSTRATIONS as
|
4
|
-
import
|
5
|
-
import
|
6
|
-
import
|
7
|
-
import
|
8
|
-
const
|
9
|
-
const
|
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(() => {
|
10
10
|
t ? t() : window.location.reload();
|
11
|
-
}, [t]), e =
|
12
|
-
return /* @__PURE__ */ o(
|
11
|
+
}, [t]), e = l === "dark" ? "WHITE_T_87" : "BLACK_T_87";
|
12
|
+
return /* @__PURE__ */ o(i, { $alignItems: "center", $justifyContent: "center", $height: a, children: [
|
13
13
|
/* @__PURE__ */ r(
|
14
|
-
|
14
|
+
i,
|
15
15
|
{
|
16
16
|
$widthX: 22.5,
|
17
17
|
$heightX: 11.5,
|
@@ -20,28 +20,28 @@ const w = (a) => {
|
|
20
20
|
$background: "GREY_1",
|
21
21
|
$justifyContent: "center",
|
22
22
|
$alignItems: "center",
|
23
|
-
children: /* @__PURE__ */ r(
|
23
|
+
children: /* @__PURE__ */ r(h, { width: 122, height: 100, src: c.ROCKET_BROKEN, withLoader: !1 })
|
24
24
|
}
|
25
25
|
),
|
26
|
-
/* @__PURE__ */ r(
|
27
|
-
/* @__PURE__ */
|
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: [
|
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
|
-
|
33
|
+
d,
|
34
34
|
{
|
35
35
|
label: "Try again",
|
36
|
-
onClick:
|
36
|
+
onClick: s,
|
37
37
|
renderAs: "primary",
|
38
38
|
size: "small",
|
39
39
|
widthX: 14
|
40
40
|
}
|
41
41
|
)
|
42
42
|
] });
|
43
|
-
},
|
43
|
+
}, T = $;
|
44
44
|
export {
|
45
|
-
|
45
|
+
T 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
|
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,14 +1,14 @@
|
|
1
1
|
import { jsxs as o, jsx as t } from "react/jsx-runtime";
|
2
|
-
import
|
3
|
-
import
|
2
|
+
import l from "../../../assets/line-icons/icons/check.js";
|
3
|
+
import m from "../text/text.js";
|
4
4
|
import { getTheme as p } from "../theme/get-theme.js";
|
5
5
|
import { MainWrapper as a, HorizontalLine as d, Wrapper as g, NumberWrapper as f, StyledText as s } from "./stepper-styled.js";
|
6
6
|
const { layout: u } = p(), { gutter: i } = u;
|
7
|
-
function
|
7
|
+
function W({ stepsInfo: n = [], currentStep: e = 2 }) {
|
8
8
|
const c = n.length && e >= 1 ? (e - 1) / n.length * 100 : 0;
|
9
9
|
return /* @__PURE__ */ o(a, { $flexDirection: "row", $width: "fit-content", $gutterX: 0.625, $gapX: 0.625, children: [
|
10
10
|
/* @__PURE__ */ t(d, { $percentageCompleted: c, $height: 1 }),
|
11
|
-
n.map(({ id: $, label:
|
11
|
+
n.map(({ id: $, label: h }, r) => /* @__PURE__ */ o(
|
12
12
|
g,
|
13
13
|
{
|
14
14
|
$flexDirection: "row",
|
@@ -25,10 +25,10 @@ function j({ stepsInfo: n = [], currentStep: e = 2 }) {
|
|
25
25
|
$justifyContent: "center",
|
26
26
|
$heightX: 1.25,
|
27
27
|
$widthX: 1.25,
|
28
|
-
children: r + 1 < e ? /* @__PURE__ */ t(
|
28
|
+
children: r + 1 < e ? /* @__PURE__ */ t(l, { height: i, width: i }) : /* @__PURE__ */ t(m, { $renderAs: "body3", $color: "WHITE", children: $ })
|
29
29
|
}
|
30
30
|
),
|
31
|
-
r + 1 === e && /* @__PURE__ */ t(s, { $renderAs: "body2", children:
|
31
|
+
r + 1 === e && /* @__PURE__ */ t(s, { $renderAs: "body2", children: h })
|
32
32
|
]
|
33
33
|
},
|
34
34
|
r
|
@@ -36,6 +36,6 @@ function j({ stepsInfo: n = [], currentStep: e = 2 }) {
|
|
36
36
|
] });
|
37
37
|
}
|
38
38
|
export {
|
39
|
-
|
39
|
+
W as default
|
40
40
|
};
|
41
41
|
//# sourceMappingURL=stepper.js.map
|
@@ -1,33 +1,36 @@
|
|
1
|
-
import { useEffect as
|
2
|
-
import { useAwsSignedKey as
|
3
|
-
import
|
4
|
-
const
|
5
|
-
const { studentId: t, query: o } =
|
6
|
-
return
|
7
|
-
s
|
8
|
-
}, [
|
9
|
-
|
1
|
+
import { useRef as h, useEffect as f, useCallback as k } from "react";
|
2
|
+
import { useAwsSignedKey as I } from "../api/subjective-review.js";
|
3
|
+
import S from "../../../../node_modules/uuid/dist/esm-browser/v4.js";
|
4
|
+
const C = (y) => {
|
5
|
+
const { studentId: t, query: o, enabled: r = !0 } = y, { data: s, get: d } = I(), c = h(s);
|
6
|
+
return f(() => {
|
7
|
+
c.current = s;
|
8
|
+
}, [s]), f(() => {
|
9
|
+
r && t && d(t, o);
|
10
|
+
}, [o, d, t, r]), k(
|
11
|
+
async ({ images: g, onSuccess: n, onError: p, fileKey: w, fileName: K }) => {
|
12
|
+
const a = c.current;
|
10
13
|
if (!a) return;
|
11
|
-
const
|
14
|
+
const i = `https://${a.bucketName}.s3.amazonaws.com/`;
|
12
15
|
try {
|
13
|
-
const
|
14
|
-
const e = new FormData(),
|
15
|
-
if (e.append("key",
|
16
|
+
const l = g.map(async (b) => {
|
17
|
+
const e = new FormData(), m = `${w}${K ?? S()}`;
|
18
|
+
if (e.append("key", m), e.append("AWSAccessKeyId", a.awsKey), e.append("acl", "public-read"), e.append("success_action_redirect", ""), e.append("policy", a.policy), e.append("signature", a.signature), e.append("Content-Type", "image/jpeg"), e.append("file", b.file), !(await fetch(i, {
|
16
19
|
method: "POST",
|
17
20
|
body: e
|
18
21
|
})).ok)
|
19
22
|
throw new Error("Upload failed");
|
20
|
-
return `${
|
21
|
-
}),
|
22
|
-
|
23
|
+
return `${i}${m}`;
|
24
|
+
}), u = await Promise.all(l);
|
25
|
+
return n == null || n(u), u;
|
23
26
|
} catch {
|
24
|
-
|
27
|
+
p == null || p();
|
25
28
|
}
|
26
29
|
},
|
27
|
-
[
|
30
|
+
[]
|
28
31
|
);
|
29
32
|
};
|
30
33
|
export {
|
31
|
-
|
34
|
+
C as default
|
32
35
|
};
|
33
36
|
//# sourceMappingURL=use-s3-helper.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"use-s3-helper.js","sources":["../../../../../src/features/worksheet/worksheet/hooks/use-s3-helper.ts"],"sourcesContent":["import type { IFile } from '../worksheet-question/subjective-review';\n\nimport { useCallback, useEffect } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { useAwsSignedKey } from '../api/subjective-review';\n\ninterface
|
1
|
+
{"version":3,"file":"use-s3-helper.js","sources":["../../../../../src/features/worksheet/worksheet/hooks/use-s3-helper.ts"],"sourcesContent":["import type { IFile } from '../worksheet-question/subjective-review';\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { useAwsSignedKey } from '../api/subjective-review';\n\ninterface IUseS3helperProps {\n studentId: string;\n query: {\n type: string;\n };\n enabled?: boolean;\n}\n\ninterface IUploadImageProps {\n images: IFile[];\n onSuccess?: (urls: string[]) => void;\n onError?: () => void;\n fileKey: string;\n fileName?: string;\n}\n\nconst useS3ImageUploadHelper = (props: IUseS3helperProps) => {\n const { studentId, query, enabled = true } = props;\n const { data, get: getAwsSignedKey } = useAwsSignedKey();\n const awsSignedKeyRef = useRef(data);\n\n useEffect(() => {\n awsSignedKeyRef.current = data;\n }, [data]);\n\n useEffect(() => {\n if (enabled && studentId) {\n getAwsSignedKey(studentId, query);\n }\n }, [query, getAwsSignedKey, studentId, enabled]);\n\n const uploadImagesToS3 = useCallback(\n async ({ images, onSuccess, onError, fileKey, fileName }: IUploadImageProps) => {\n const awsSignedKey = awsSignedKeyRef.current;\n\n if (!awsSignedKey) return;\n\n const url = `https://${awsSignedKey.bucketName}.s3.amazonaws.com/`;\n\n try {\n const uploadPromises = images.map(async (item: { file: string | Blob }) => {\n const formData = new FormData();\n const key = `${fileKey}${fileName ?? uuidv4()}`;\n\n formData.append('key', key);\n formData.append('AWSAccessKeyId', awsSignedKey.awsKey);\n formData.append('acl', 'public-read');\n formData.append('success_action_redirect', '');\n formData.append('policy', awsSignedKey.policy);\n formData.append('signature', awsSignedKey.signature);\n formData.append('Content-Type', 'image/jpeg');\n formData.append('file', item.file);\n\n const res = await fetch(url, {\n method: 'POST',\n body: formData,\n });\n\n if (!res.ok) {\n throw new Error('Upload failed');\n }\n\n return `${url}${key}`;\n });\n\n const uploadedUrls = await Promise.all(uploadPromises);\n\n onSuccess?.(uploadedUrls);\n\n return uploadedUrls;\n } catch (error) {\n onError?.();\n }\n },\n [],\n );\n\n return uploadImagesToS3;\n};\n\nexport default useS3ImageUploadHelper;\n"],"names":["useS3ImageUploadHelper","props","studentId","query","enabled","data","getAwsSignedKey","useAwsSignedKey","awsSignedKeyRef","useRef","useEffect","useCallback","images","onSuccess","onError","fileKey","fileName","awsSignedKey","url","uploadPromises","item","formData","key","uuidv4","uploadedUrls"],"mappings":";;;AAuBM,MAAAA,IAAyB,CAACC,MAA6B;AAC3D,QAAM,EAAE,WAAAC,GAAW,OAAAC,GAAO,SAAAC,IAAU,OAASH,GACvC,EAAE,MAAAI,GAAM,KAAKC,MAAoBC,EAAgB,GACjDC,IAAkBC,EAAOJ,CAAI;AAEnC,SAAAK,EAAU,MAAM;AACd,IAAAF,EAAgB,UAAUH;AAAA,EAAA,GACzB,CAACA,CAAI,CAAC,GAETK,EAAU,MAAM;AACd,IAAIN,KAAWF,KACbI,EAAgBJ,GAAWC,CAAK;AAAA,KAEjC,CAACA,GAAOG,GAAiBJ,GAAWE,CAAO,CAAC,GAEtBO;AAAA,IACvB,OAAO,EAAE,QAAAC,GAAQ,WAAAC,GAAW,SAAAC,GAAS,SAAAC,GAAS,UAAAC,QAAkC;AAC9E,YAAMC,IAAeT,EAAgB;AAErC,UAAI,CAACS,EAAc;AAEb,YAAAC,IAAM,WAAWD,EAAa,UAAU;AAE1C,UAAA;AACF,cAAME,IAAiBP,EAAO,IAAI,OAAOQ,MAAkC;AACnE,gBAAAC,IAAW,IAAI,YACfC,IAAM,GAAGP,CAAO,GAAGC,KAAYO,EAAQ,CAAA;AAgBzC,cAdKF,EAAA,OAAO,OAAOC,CAAG,GACjBD,EAAA,OAAO,kBAAkBJ,EAAa,MAAM,GAC5CI,EAAA,OAAO,OAAO,aAAa,GAC3BA,EAAA,OAAO,2BAA2B,EAAE,GACpCA,EAAA,OAAO,UAAUJ,EAAa,MAAM,GACpCI,EAAA,OAAO,aAAaJ,EAAa,SAAS,GAC1CI,EAAA,OAAO,gBAAgB,YAAY,GACnCA,EAAA,OAAO,QAAQD,EAAK,IAAI,GAO7B,EALQ,MAAM,MAAMF,GAAK;AAAA,YAC3B,QAAQ;AAAA,YACR,MAAMG;AAAA,UAAA,CACP,GAEQ;AACD,kBAAA,IAAI,MAAM,eAAe;AAG1B,iBAAA,GAAGH,CAAG,GAAGI,CAAG;AAAA,QAAA,CACpB,GAEKE,IAAe,MAAM,QAAQ,IAAIL,CAAc;AAErD,eAAAN,KAAA,QAAAA,EAAYW,IAELA;AAAA,cACO;AACJ,QAAAV,KAAA,QAAAA;AAAA,MACZ;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EAAA;AAIL;"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import b from "../../../assets/line-icons/icons/bulb2.js";
|
2
|
-
import
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import
|
2
|
+
import O from "../../../assets/line-icons/icons/edit-star.js";
|
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";
|
6
6
|
import w from "../constants/events.js";
|
7
7
|
import { OPTIONAL_ITEM_TYPES as A, ACTION_BAR_HEIGHT as N, QUESTION_WIDTH as y, SPLIT_QUESTION_WIDTH as Q } from "./constants.js";
|
8
8
|
import { QUESTION_TAGS as E } from "./worksheet-types.js";
|
@@ -36,17 +36,17 @@ const x = (e) => {
|
|
36
36
|
const r = e.toLowerCase();
|
37
37
|
return r === "intro" || r === "concept-intro";
|
38
38
|
}, I = (e) => e.reduce((r, t) => {
|
39
|
-
const [n, s] = t.split(":"),
|
40
|
-
return !
|
39
|
+
const [n, s] = t.split(":"), a = n == null ? void 0 : n.trim(), c = s == null ? void 0 : s.trim();
|
40
|
+
return !a || !c ? r : {
|
41
41
|
...r,
|
42
|
-
[
|
42
|
+
[a.toLowerCase()]: c
|
43
43
|
};
|
44
44
|
}, {}), Y = (e, { sectioned: r = !1, adaptive: t = !1 }) => {
|
45
45
|
if (r)
|
46
|
-
return e.reduce((s,
|
46
|
+
return e.reduce((s, a, c) => {
|
47
47
|
var T;
|
48
48
|
let d = !1;
|
49
|
-
const { content: u, questions: i, itemType:
|
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) => {
|
50
50
|
const v = i.find(
|
51
51
|
({ response_id: S }) => S === f.replace("question-", "")
|
52
52
|
);
|
@@ -56,20 +56,20 @@ const x = (e) => {
|
|
56
56
|
...v,
|
57
57
|
// Some questions are set to limited number of attempts which can show feedback which is causing the question to be stuck in the errored state
|
58
58
|
feedback_attempts: void 0,
|
59
|
-
item_reference:
|
59
|
+
item_reference: a.reference,
|
60
60
|
item_number: c,
|
61
61
|
item_display_number: g,
|
62
62
|
section_name: l,
|
63
|
-
item_type: r ?
|
64
|
-
is_optional:
|
65
|
-
item_tags:
|
66
|
-
item_tags_map: I(
|
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 ?? []),
|
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 =
|
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;
|
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: `${
|
86
|
-
is_optional:
|
85
|
+
response_id: `${o}-system-intro`,
|
86
|
+
is_optional: o == null ? void 0 : o.startsWith("advanced-")
|
87
87
|
},
|
88
88
|
..._ ?? []
|
89
89
|
];
|
90
90
|
}
|
91
91
|
return [...s, ..._ ?? []];
|
92
92
|
}, []);
|
93
|
-
const n = e.reduce((s,
|
94
|
-
const { content: d, questions: u } =
|
93
|
+
const n = e.reduce((s, a, c) => {
|
94
|
+
const { content: d, questions: u } = a, i = d.match(/question-[^"]*/g), o = i == null ? void 0 : i.map(
|
95
95
|
(l, m) => {
|
96
96
|
const g = u.find(
|
97
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:
|
104
|
+
item_reference: a.reference,
|
105
105
|
item_number: c,
|
106
106
|
item_display_number: c + 1,
|
107
|
-
item_tags:
|
108
|
-
item_tags_map: I(
|
107
|
+
item_tags: a.tags ?? [],
|
108
|
+
item_tags_map: I(a.tags ?? []),
|
109
109
|
question_number: m,
|
110
110
|
total_questions: i.length
|
111
111
|
};
|
112
112
|
}
|
113
113
|
);
|
114
|
-
return [...s, ...
|
114
|
+
return [...s, ...o ?? []];
|
115
115
|
}, []);
|
116
116
|
if (t) {
|
117
|
-
const s = [],
|
117
|
+
const s = [], a = {};
|
118
118
|
return n.sort((c, d) => {
|
119
119
|
var m, g;
|
120
120
|
const u = c.item_tags_map[E.TRIAL_TOPIC], i = d.item_tags_map[E.TRIAL_TOPIC];
|
121
|
-
if (u &&
|
121
|
+
if (u && a[u] === void 0 && (a[u] = s.length, s.push(u)), i && a[i] === void 0 && (a[i] = s.length, s.push(i)), !u || !i)
|
122
122
|
return 0;
|
123
|
-
const
|
124
|
-
return
|
123
|
+
const o = `${a[u]}-${((m = c.item_tags_map[E.QUESTION_CODE]) == null ? void 0 : m.length) ?? 0}`, l = `${a[i]}-${((g = d.item_tags_map[E.QUESTION_CODE]) == null ? void 0 : g.length) ?? 0}`;
|
124
|
+
return o > l ? 1 : -1;
|
125
125
|
}).map((c) => {
|
126
|
-
const d =
|
126
|
+
const d = a[c.item_tags_map[E.TRIAL_TOPIC] ?? ""] ?? 0, u = c.item_tags_map[E.QUESTION_CODE] ?? "";
|
127
127
|
return {
|
128
128
|
...c,
|
129
129
|
item_display_number: d * 3 + u.length
|
@@ -139,11 +139,11 @@ const x = (e) => {
|
|
139
139
|
lastUnlockedQuestionIndex: s
|
140
140
|
}) => {
|
141
141
|
var d, u;
|
142
|
-
const
|
143
|
-
if (t &&
|
142
|
+
const a = e.slice(0, s + 1), c = e[s];
|
143
|
+
if (t && a.find((i) => i.response_id === t))
|
144
144
|
return t;
|
145
145
|
if (typeof n == "number" && n <= c.item_number) {
|
146
|
-
const i = e.find((
|
146
|
+
const i = e.find((o) => o.item_number === n);
|
147
147
|
if (i != null && i.response_id)
|
148
148
|
return i.response_id;
|
149
149
|
}
|
@@ -160,35 +160,35 @@ const x = (e) => {
|
|
160
160
|
behavior: t,
|
161
161
|
userType: n
|
162
162
|
}) => {
|
163
|
-
const { maximumAttempts: s, teacherValidationEnabled:
|
163
|
+
const { maximumAttempts: s, teacherValidationEnabled: a, validation: c, navigationMode: d } = t, u = [...e].reverse().findIndex((i) => {
|
164
164
|
var _;
|
165
|
-
const
|
166
|
-
if (
|
165
|
+
const o = r[i.response_id], { attemptsHistory: l, validatedByTeacher: m, assignStatus: g } = o ?? {};
|
166
|
+
if (a)
|
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" && (
|
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));
|
170
170
|
});
|
171
171
|
if (u === -1)
|
172
172
|
return 0;
|
173
173
|
if (u === 0) {
|
174
|
-
if (
|
175
|
-
const i = [...e].reverse().findIndex((
|
174
|
+
if (a) {
|
175
|
+
const i = [...e].reverse().findIndex((o) => {
|
176
176
|
var l;
|
177
|
-
return ((l = r[
|
177
|
+
return ((l = r[o.response_id]) == null ? void 0 : l.assignStatus) !== "skipped";
|
178
178
|
});
|
179
179
|
return e.length - i - 1;
|
180
180
|
}
|
181
181
|
return e.length - 1;
|
182
182
|
}
|
183
|
-
if (
|
184
|
-
const i = e.length - u,
|
185
|
-
return
|
183
|
+
if (a && n === "STUDENT") {
|
184
|
+
const i = e.length - u, o = e[i], { assignStatus: l } = r[o.response_id] ?? {};
|
185
|
+
return o.is_optional && !l ? i - 1 : i;
|
186
186
|
}
|
187
187
|
return e.length - u;
|
188
188
|
};
|
189
189
|
function M(e, r) {
|
190
190
|
var n, s;
|
191
|
-
const t = Array.isArray(e) ? e.find((
|
191
|
+
const t = Array.isArray(e) ? e.find((a) => a.response_id === r) : e;
|
192
192
|
if (!t)
|
193
193
|
throw new Error(`Question with id ${r} not found`);
|
194
194
|
return {
|
@@ -206,22 +206,22 @@ function M(e, r) {
|
|
206
206
|
}
|
207
207
|
};
|
208
208
|
}
|
209
|
-
const
|
209
|
+
const K = (e) => e.reduce(
|
210
210
|
(r, t) => ({
|
211
211
|
...r,
|
212
212
|
[t.response_id]: M(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
|
-
(
|
219
|
+
(a) => a.questions.some((c) => c.stimulus_review)
|
220
220
|
) ? y : Q,
|
221
221
|
maxQuestionWidth: y,
|
222
222
|
actionbarHeight: t === "bottom" ? N : 0
|
223
223
|
};
|
224
|
-
},
|
224
|
+
}, z = ({
|
225
225
|
questions: e,
|
226
226
|
lastUnlockedQuestionIndex: r,
|
227
227
|
userType: t
|
@@ -343,22 +343,22 @@ const z = (e) => e.reduce(
|
|
343
343
|
default:
|
344
344
|
return "";
|
345
345
|
}
|
346
|
-
},
|
346
|
+
}, oe = (e) => {
|
347
347
|
switch (e) {
|
348
348
|
case "learning":
|
349
349
|
return b;
|
350
350
|
case "practice-basic":
|
351
|
-
return k;
|
352
|
-
case "practice-regular":
|
353
351
|
return R;
|
352
|
+
case "practice-regular":
|
353
|
+
return O;
|
354
354
|
case "exit-ticket":
|
355
|
-
return
|
355
|
+
return k;
|
356
356
|
case "advanced":
|
357
|
-
return
|
357
|
+
return C;
|
358
358
|
default:
|
359
359
|
return b;
|
360
360
|
}
|
361
|
-
},
|
361
|
+
}, ae = (e, r) => {
|
362
362
|
const t = e === "TEACHER";
|
363
363
|
return r ? {
|
364
364
|
bannerBackgroundColor: "GREEN_4",
|
@@ -369,21 +369,20 @@ const z = (e) => e.reduce(
|
|
369
369
|
};
|
370
370
|
};
|
371
371
|
export {
|
372
|
-
oe as checkIsClozeFormulaResponseInvalid,
|
373
372
|
J as getInitialQuestionId,
|
374
|
-
|
373
|
+
K as getInitialResponses,
|
375
374
|
V as getLastUnlockedQuestionIndex,
|
376
375
|
re as getNavigationSectionBackgroundColor,
|
377
|
-
|
376
|
+
oe as getNavigationSectionIcon,
|
378
377
|
ne as getNavigationSectionName,
|
379
378
|
q as getPaperColorByQuestion,
|
380
379
|
ee as getQuestionBackgroundImage,
|
381
380
|
te as getQuestionBorderColor,
|
382
381
|
M as getQuestionMetadata,
|
383
382
|
Y as getQuestionsFromItems,
|
384
|
-
|
385
|
-
|
386
|
-
|
383
|
+
z as getRenderableQuestions,
|
384
|
+
X as getWorksheetDimensions,
|
385
|
+
ae as getWorksheetNudgeBannerInfo,
|
387
386
|
L as isConceptIntroWidget,
|
388
387
|
U as isOkayTypeQuestion,
|
389
388
|
j as scrollToQuestion,
|