@cuemath/leap 2.8.50 → 2.8.51-beta-0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dist/assets/illustrations/illustrations.js +10 -0
  2. package/dist/assets/illustrations/illustrations.js.map +1 -1
  3. package/dist/assets/line-icons/icons/alarm.js +41 -0
  4. package/dist/assets/line-icons/icons/alarm.js.map +1 -0
  5. package/dist/assets/line-icons/icons/clear-all.js +53 -0
  6. package/dist/assets/line-icons/icons/clear-all.js.map +1 -0
  7. package/dist/assets/line-icons/icons/dart.js +23 -0
  8. package/dist/assets/line-icons/icons/dart.js.map +1 -0
  9. package/dist/assets/line-icons/icons/download.js +48 -0
  10. package/dist/assets/line-icons/icons/download.js.map +1 -0
  11. package/dist/assets/line-icons/icons/equation.js +48 -0
  12. package/dist/assets/line-icons/icons/equation.js.map +1 -0
  13. package/dist/assets/line-icons/icons/exclamation.js +26 -0
  14. package/dist/assets/line-icons/icons/exclamation.js.map +1 -0
  15. package/dist/assets/line-icons/icons/grid-icon.js +42 -0
  16. package/dist/assets/line-icons/icons/grid-icon.js.map +1 -0
  17. package/dist/assets/line-icons/icons/home2.js +25 -0
  18. package/dist/assets/line-icons/icons/home2.js.map +1 -0
  19. package/dist/assets/line-icons/icons/important.js +23 -0
  20. package/dist/assets/line-icons/icons/important.js.map +1 -0
  21. package/dist/assets/line-icons/icons/pan.js +98 -0
  22. package/dist/assets/line-icons/icons/pan.js.map +1 -0
  23. package/dist/assets/line-icons/icons/puzzle.js +25 -0
  24. package/dist/assets/line-icons/icons/puzzle.js.map +1 -0
  25. package/dist/assets/line-icons/icons/recap.js +32 -0
  26. package/dist/assets/line-icons/icons/recap.js.map +1 -0
  27. package/dist/assets/line-icons/icons/square-checked-grid.js +25 -0
  28. package/dist/assets/line-icons/icons/square-checked-grid.js.map +1 -0
  29. package/dist/assets/line-icons/icons/square-dots.js +32 -0
  30. package/dist/assets/line-icons/icons/square-dots.js.map +1 -0
  31. package/dist/assets/line-icons/icons/square-grid.js +17 -0
  32. package/dist/assets/line-icons/icons/square-grid.js.map +1 -0
  33. package/dist/assets/line-icons/icons/square2-grid.js +13 -0
  34. package/dist/assets/line-icons/icons/square2-grid.js.map +1 -0
  35. package/dist/assets/line-icons/icons/status.js +41 -0
  36. package/dist/assets/line-icons/icons/status.js.map +1 -0
  37. package/dist/assets/line-icons/icons/testtube.js +33 -0
  38. package/dist/assets/line-icons/icons/testtube.js.map +1 -0
  39. package/dist/assets/line-icons/icons/text-icon.js +48 -0
  40. package/dist/assets/line-icons/icons/text-icon.js.map +1 -0
  41. package/dist/assets/line-icons/icons/tri-dots.js +27 -0
  42. package/dist/assets/line-icons/icons/tri-dots.js.map +1 -0
  43. package/dist/assets/line-icons/icons/tri-grid.js +27 -0
  44. package/dist/assets/line-icons/icons/tri-grid.js.map +1 -0
  45. package/dist/assets/line-icons/icons/tri2-dots.js +27 -0
  46. package/dist/assets/line-icons/icons/tri2-dots.js.map +1 -0
  47. package/dist/assets/line-icons/icons/tri2-grid.js +27 -0
  48. package/dist/assets/line-icons/icons/tri2-grid.js.map +1 -0
  49. package/dist/assets/line-icons/icons/upload.js +48 -0
  50. package/dist/assets/line-icons/icons/upload.js.map +1 -0
  51. package/dist/assets/line-icons/icons/zoom-in.js +58 -0
  52. package/dist/assets/line-icons/icons/zoom-in.js.map +1 -0
  53. package/dist/assets/line-icons/icons/zoom-out.js +48 -0
  54. package/dist/assets/line-icons/icons/zoom-out.js.map +1 -0
  55. package/dist/features/chapters-v2/api/chapter.js +10 -0
  56. package/dist/features/chapters-v2/api/chapter.js.map +1 -0
  57. package/dist/features/chapters-v2/chapter-details/block-sections/block-section-view.js +116 -0
  58. package/dist/features/chapters-v2/chapter-details/block-sections/block-section-view.js.map +1 -0
  59. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections-styled.js +26 -0
  60. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections-styled.js.map +1 -0
  61. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections.js +68 -0
  62. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections.js.map +1 -0
  63. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner-styled.js +90 -0
  64. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner-styled.js.map +1 -0
  65. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner.js +95 -0
  66. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner.js.map +1 -0
  67. package/dist/features/chapters-v2/chapter-details/chapter-details-styled.js +38 -0
  68. package/dist/features/chapters-v2/chapter-details/chapter-details-styled.js.map +1 -0
  69. package/dist/features/chapters-v2/chapter-details/chapter-details.js +89 -0
  70. package/dist/features/chapters-v2/chapter-details/chapter-details.js.map +1 -0
  71. package/dist/features/chapters-v2/comps/node-card/border-path-animation.js +13 -0
  72. package/dist/features/chapters-v2/comps/node-card/border-path-animation.js.map +1 -0
  73. package/dist/features/chapters-v2/comps/node-card/node-card-styled.js +134 -0
  74. package/dist/features/chapters-v2/comps/node-card/node-card-styled.js.map +1 -0
  75. package/dist/features/chapters-v2/comps/node-card/node-card-tags.js +12 -0
  76. package/dist/features/chapters-v2/comps/node-card/node-card-tags.js.map +1 -0
  77. package/dist/features/chapters-v2/comps/node-card/node-card.js +12 -0
  78. package/dist/features/chapters-v2/comps/node-card/node-card.js.map +1 -0
  79. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options-styled.js +32 -0
  80. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options-styled.js.map +1 -0
  81. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options.js +31 -0
  82. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options.js.map +1 -0
  83. package/dist/features/chapters-v2/comps/node-card/student-actions/student-actions.js +154 -0
  84. package/dist/features/chapters-v2/comps/node-card/student-actions/student-actions.js.map +1 -0
  85. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js +178 -0
  86. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js.map +1 -0
  87. package/dist/features/chapters-v2/comps/tag/tag-styled.js +13 -0
  88. package/dist/features/chapters-v2/comps/tag/tag-styled.js.map +1 -0
  89. package/dist/features/chapters-v2/comps/tag/tag.js +28 -0
  90. package/dist/features/chapters-v2/comps/tag/tag.js.map +1 -0
  91. package/dist/features/chapters-v2/constants/block-constants.js +18 -0
  92. package/dist/features/chapters-v2/constants/block-constants.js.map +1 -0
  93. package/dist/features/chapters-v2/utils/index.js +11 -0
  94. package/dist/features/chapters-v2/utils/index.js.map +1 -0
  95. package/dist/features/chapters-v2/utils/node-card-utils.js +72 -0
  96. package/dist/features/chapters-v2/utils/node-card-utils.js.map +1 -0
  97. package/dist/features/cue-canvas/cue-canvas-core.js +138 -49
  98. package/dist/features/cue-canvas/cue-canvas-core.js.map +1 -1
  99. package/dist/features/cue-canvas/cue-canvas-helpers.js +88 -29
  100. package/dist/features/cue-canvas/cue-canvas-helpers.js.map +1 -1
  101. package/dist/features/cue-canvas/cue-canvas.js +57 -49
  102. package/dist/features/cue-canvas/cue-canvas.js.map +1 -1
  103. package/dist/features/cue-canvas/cue-cavas-styled.js +127 -92
  104. package/dist/features/cue-canvas/cue-cavas-styled.js.map +1 -1
  105. package/dist/features/cue-canvas/toolbar/color-palette.js +49 -0
  106. package/dist/features/cue-canvas/toolbar/color-palette.js.map +1 -0
  107. package/dist/features/cue-canvas/toolbar/color-picker-menu.js +62 -0
  108. package/dist/features/cue-canvas/toolbar/color-picker-menu.js.map +1 -0
  109. package/dist/features/cue-canvas/toolbar/grid-menu.js +62 -0
  110. package/dist/features/cue-canvas/toolbar/grid-menu.js.map +1 -0
  111. package/dist/features/cue-canvas/toolbar/icon-map.js +58 -0
  112. package/dist/features/cue-canvas/toolbar/icon-map.js.map +1 -0
  113. package/dist/features/cue-canvas/toolbar/pen-tool-menu.js +56 -0
  114. package/dist/features/cue-canvas/toolbar/pen-tool-menu.js.map +1 -0
  115. package/dist/features/cue-canvas/toolbar/tool.js +34 -0
  116. package/dist/features/cue-canvas/toolbar/tool.js.map +1 -0
  117. package/dist/features/cue-canvas/toolbar/toolbar.js +18 -87
  118. package/dist/features/cue-canvas/toolbar/toolbar.js.map +1 -1
  119. package/dist/features/cue-canvas/toolbar/whiteboard-toolbar.js +16 -0
  120. package/dist/features/cue-canvas/toolbar/whiteboard-toolbar.js.map +1 -0
  121. package/dist/features/ui/arrow-tooltip/arrow-tooltip.js +30 -29
  122. package/dist/features/ui/arrow-tooltip/arrow-tooltip.js.map +1 -1
  123. package/dist/features/ui/context-menu/context-menu-styled.js +28 -14
  124. package/dist/features/ui/context-menu/context-menu-styled.js.map +1 -1
  125. package/dist/features/ui/context-menu/context-menu.js +30 -15
  126. package/dist/features/ui/context-menu/context-menu.js.map +1 -1
  127. package/dist/features/ui/theme/button.js +17 -102
  128. package/dist/features/ui/theme/button.js.map +1 -1
  129. package/dist/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.js +7 -7
  130. package/dist/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.js.map +1 -1
  131. package/dist/features/worksheet/worksheet/worksheet-questions-controller/scribble-switch.js.map +1 -1
  132. package/dist/index.d.ts +177 -3
  133. package/dist/index.js +485 -471
  134. package/dist/index.js.map +1 -1
  135. package/dist/static/chapter-header-bg-2.c8d96894.svg +1 -0
  136. package/dist/static/chapter-header-bg.4ed173c2.svg +1 -0
  137. package/dist/static/node-custom-test-bg.d3b757be.svg +1 -0
  138. package/dist/static/node-learn-bg.b61f815c.svg +1 -0
  139. package/dist/static/node-practice-bg.16cbaf2a.svg +1 -0
  140. package/dist/static/node-project-bg.e6a33e28.svg +1 -0
  141. package/dist/static/node-puzzle-bg.3422135c.svg +1 -0
  142. package/dist/static/node-recap-bg.546154e4.svg +1 -0
  143. package/dist/static/node-test-prep-bg.42c0b9c4.svg +1 -0
  144. package/dist/static/node-video-bg.3df3f73a.svg +1 -0
  145. package/package.json +3 -2
  146. package/dist/features/cue-canvas/toolbar/color-pallete.js +0 -49
  147. package/dist/features/cue-canvas/toolbar/color-pallete.js.map +0 -1
@@ -0,0 +1,178 @@
1
+ import { jsx as e, jsxs as o } from "react/jsx-runtime";
2
+ import N from "../../../../../assets/line-icons/icons/check2.js";
3
+ import j from "../../../../../assets/line-icons/icons/eye2.js";
4
+ import M from "../../../../../assets/line-icons/icons/home2.js";
5
+ import C from "../../../../../assets/line-icons/icons/more-vertical.js";
6
+ import P from "../../../../ui/arrow-tooltip/arrow-tooltip.js";
7
+ import I from "../../../../ui/context-menu/context-menu.js";
8
+ import R from "../../../../ui/layout/flex-view.js";
9
+ import X from "../../../../ui/text/text.js";
10
+ import { getNodeTypeBasedBgImage as K } from "../../../utils/index.js";
11
+ import { getNodeCardBasedIcon as F } from "../../../utils/node-card-utils.js";
12
+ import Z from "../border-path-animation.js";
13
+ import { NodeCardContainer as z, NodeCardInfoWrapper as q, IconWrapper as J, StyledImportantIcon as Q, NodeOptionsMenuWrapper as w, NodeCardContentWrapper as U, NodeCardTitle as Y } from "../node-card-styled.js";
14
+ import V from "../node-card-tags.js";
15
+ import _ from "../node-menu-options/node-menu-options.js";
16
+ const $e = ({
17
+ nodeData: n,
18
+ imageHue: b,
19
+ blockType: x,
20
+ isSkipped: m,
21
+ onNodeAttemptLocationChange: a,
22
+ onNodeMarkAsDone: c,
23
+ onNodeView: d
24
+ }) => {
25
+ const {
26
+ accuracy: O,
27
+ attempt_location: T,
28
+ node_type: s,
29
+ card_header: y,
30
+ title: E,
31
+ state: t,
32
+ is_optional: p,
33
+ on_hover_text: h,
34
+ permissions: k
35
+ } = n, {
36
+ can_change_attempt_location: B,
37
+ can_mark_familiar: W
38
+ } = k, H = t === "IN_PROGRESS", r = t === "LOCKED", S = t === "NOT_STARTED", v = t === "COMPLETED", A = T === "INCLASS", G = K(s), $ = F(s), i = x === "GOAL", L = !h || !i || r, f = !p && (H || S), l = (u) => {
39
+ switch (u) {
40
+ case "node-card-view":
41
+ d == null || d(n);
42
+ return;
43
+ case "node-card-assign-as-hw":
44
+ a == null || a(n);
45
+ return;
46
+ case "node-card-mark-as-done":
47
+ c == null || c(n);
48
+ return;
49
+ default:
50
+ throw new Error(`No callback function for ${u}`);
51
+ }
52
+ }, g = [
53
+ {
54
+ id: "node-card-view",
55
+ label: v ? "Review" : "View",
56
+ icon: j,
57
+ disabled: !1,
58
+ onClick: l
59
+ },
60
+ {
61
+ id: "node-card-assign-as-hw",
62
+ label: "Assign as HW",
63
+ icon: M,
64
+ disabled: !B,
65
+ onClick: l
66
+ },
67
+ {
68
+ id: "node-card-mark-as-done",
69
+ label: "Mark as done",
70
+ icon: N,
71
+ disabled: !W,
72
+ onClick: l
73
+ }
74
+ ];
75
+ return /* @__PURE__ */ e(
76
+ z,
77
+ {
78
+ $showOutline: !i || !f,
79
+ $background: `${b}_2`,
80
+ $disabled: !!m,
81
+ children: /* @__PURE__ */ o(
82
+ P,
83
+ {
84
+ renderAs: "primary",
85
+ tooltipItem: h,
86
+ position: "bottom",
87
+ zIndex: 5,
88
+ hidden: L,
89
+ parentWidth: "100%",
90
+ widthX: 11.25,
91
+ children: [
92
+ /* @__PURE__ */ o(
93
+ q,
94
+ {
95
+ $flexDirection: "row",
96
+ $alignItems: "center",
97
+ $width: "100%",
98
+ $heightX: 3.5,
99
+ $bgImage: G,
100
+ $gutterX: 0.78125,
101
+ $flexGap: 8.5,
102
+ children: [
103
+ /* @__PURE__ */ o(
104
+ J,
105
+ {
106
+ $width: 31,
107
+ $height: 31,
108
+ $background: "WHITE_1",
109
+ $position: "relative",
110
+ $alignItems: "center",
111
+ $justifyContent: "center",
112
+ $opacity: r ? 0.5 : 1,
113
+ children: [
114
+ $ && /* @__PURE__ */ e($, { width: 20, height: 20 }),
115
+ !p && /* @__PURE__ */ e(Q, {})
116
+ ]
117
+ }
118
+ ),
119
+ /* @__PURE__ */ o(X, { $renderAs: "ac4-black", $color: "BLACK", $opacity: r ? 0.5 : 1, children: [
120
+ y,
121
+ " ",
122
+ A && ". CW"
123
+ ] }),
124
+ /* @__PURE__ */ e(R, { className: "context-menu", children: i && /* @__PURE__ */ e(
125
+ I,
126
+ {
127
+ targetElement: /* @__PURE__ */ e(
128
+ w,
129
+ {
130
+ $width: 16,
131
+ $height: 16,
132
+ $opacity: r ? 0.5 : 1,
133
+ children: /* @__PURE__ */ e(C, { width: 16, height: 16 })
134
+ }
135
+ ),
136
+ menuElement: /* @__PURE__ */ e(_, { options: g }),
137
+ menuOffset: 5,
138
+ menuZIndex: 6
139
+ }
140
+ ) }),
141
+ f && !m && /* @__PURE__ */ e(Z, {})
142
+ ]
143
+ }
144
+ ),
145
+ /* @__PURE__ */ e(V, { nodeType: s, state: t, accuracy: O }),
146
+ !i && /* @__PURE__ */ o(
147
+ U,
148
+ {
149
+ $flexDirection: "row",
150
+ $alignItems: "center",
151
+ $background: "WHITE_1",
152
+ $flexGap: 8,
153
+ $heightX: 4,
154
+ $justifyContent: "space-between",
155
+ children: [
156
+ /* @__PURE__ */ e(Y, { $renderAs: "ab3", $color: "BLACK_1", $opacity: r ? 0.5 : 1, children: E }),
157
+ /* @__PURE__ */ e(
158
+ I,
159
+ {
160
+ targetElement: /* @__PURE__ */ e(w, { children: /* @__PURE__ */ e(C, { width: 16, height: 16 }) }),
161
+ menuElement: /* @__PURE__ */ e(_, { options: g }),
162
+ menuOffset: 5,
163
+ menuZIndex: 6
164
+ }
165
+ )
166
+ ]
167
+ }
168
+ )
169
+ ]
170
+ }
171
+ )
172
+ }
173
+ );
174
+ };
175
+ export {
176
+ $e as default
177
+ };
178
+ //# sourceMappingURL=teacher-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teacher-actions.js","sources":["../../../../../../src/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.tsx"],"sourcesContent":["import type { INodeCardProps } from '../node-card-types';\nimport type { INodeMenuOption } from '../node-menu-options/node-menu-options-types';\nimport type { FC } from 'react';\n\nimport Check2Icon from '../../../../../assets/line-icons/icons/check2';\nimport Eye2Icon from '../../../../../assets/line-icons/icons/eye2';\nimport Home2Icon from '../../../../../assets/line-icons/icons/home2';\nimport MoreVerticalIcon from '../../../../../assets/line-icons/icons/more-vertical';\nimport ArrowTooltip from '../../../../ui/arrow-tooltip/arrow-tooltip';\nimport ContextMenu from '../../../../ui/context-menu/context-menu';\nimport FlexView from '../../../../ui/layout/flex-view';\nimport Text from '../../../../ui/text/text';\nimport { getNodeTypeBasedBgImage } from '../../../utils';\nimport { getNodeCardBasedIcon } from '../../../utils/node-card-utils';\nimport BorderPathAnimation from '../border-path-animation';\nimport * as Styled from '../node-card-styled';\nimport NodeCardTags from '../node-card-tags';\nimport NodeMenuOptions from '../node-menu-options/node-menu-options';\n\nconst NodeCardTeacherActions: FC<Omit<INodeCardProps, 'userType'>> = ({\n nodeData,\n imageHue,\n blockType,\n isSkipped,\n onNodeAttemptLocationChange,\n onNodeMarkAsDone,\n onNodeView,\n}) => {\n const {\n accuracy,\n attempt_location: attemptLocation,\n node_type: nodeType,\n card_header: cardHeader,\n title,\n state,\n is_optional: isOptional,\n on_hover_text: onHoverText,\n permissions,\n } = nodeData;\n\n const {\n can_change_attempt_location: canChangeAttemptLocation,\n can_mark_familiar: canMarkFamiliar,\n } = permissions;\n\n const sheetInProgress = state === 'IN_PROGRESS';\n const sheetLocked = state === 'LOCKED';\n const sheetNotStarted = state === 'NOT_STARTED';\n const sheetCompleted = state === 'COMPLETED';\n const inClassSheet = attemptLocation === 'INCLASS';\n const nodeBgImage = getNodeTypeBasedBgImage(nodeType);\n const NodeCardIcon = getNodeCardBasedIcon(nodeType);\n const isGoalBlock = blockType === 'GOAL';\n const tooltipHidden = !onHoverText || !isGoalBlock || sheetLocked;\n\n const showCardAnimation = !isOptional && (sheetInProgress || sheetNotStarted);\n\n const handleOnMenuOptionClick = (optionId: string) => {\n switch (optionId) {\n case 'node-card-view':\n onNodeView?.(nodeData);\n\n return;\n\n case 'node-card-assign-as-hw':\n onNodeAttemptLocationChange?.(nodeData);\n\n return;\n\n case 'node-card-mark-as-done':\n onNodeMarkAsDone?.(nodeData);\n\n return;\n default:\n throw new Error(`No callback function for ${optionId}`);\n }\n };\n\n const menuOptions: INodeMenuOption[] = [\n {\n id: 'node-card-view',\n label: sheetCompleted ? 'Review' : 'View',\n icon: Eye2Icon,\n disabled: false,\n onClick: handleOnMenuOptionClick,\n },\n {\n id: 'node-card-assign-as-hw',\n label: 'Assign as HW',\n icon: Home2Icon,\n disabled: !canChangeAttemptLocation,\n onClick: handleOnMenuOptionClick,\n },\n {\n id: 'node-card-mark-as-done',\n label: 'Mark as done',\n icon: Check2Icon,\n disabled: !canMarkFamiliar,\n onClick: handleOnMenuOptionClick,\n },\n ];\n\n return (\n <Styled.NodeCardContainer\n $showOutline={!isGoalBlock || !showCardAnimation}\n $background={`${imageHue}_2`}\n $disabled={Boolean(isSkipped)}\n >\n <ArrowTooltip\n renderAs=\"primary\"\n tooltipItem={onHoverText}\n position=\"bottom\"\n zIndex={5}\n hidden={tooltipHidden}\n parentWidth=\"100%\"\n widthX={11.25}\n >\n <Styled.NodeCardInfoWrapper\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $width=\"100%\"\n $heightX={3.5}\n $bgImage={nodeBgImage}\n $gutterX={0.78125}\n $flexGap={8.5}\n >\n <Styled.IconWrapper\n $width={31}\n $height={31}\n $background=\"WHITE_1\"\n $position=\"relative\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $opacity={sheetLocked ? 0.5 : 1}\n >\n {NodeCardIcon && <NodeCardIcon width={20} height={20} />}\n {!isOptional && <Styled.StyledImportantIcon />}\n </Styled.IconWrapper>\n\n <Text $renderAs=\"ac4-black\" $color=\"BLACK\" $opacity={sheetLocked ? 0.5 : 1}>\n {cardHeader} {inClassSheet && `. CW`}\n </Text>\n\n <FlexView className=\"context-menu\">\n {isGoalBlock && (\n <ContextMenu\n targetElement={\n <Styled.NodeOptionsMenuWrapper\n $width={16}\n $height={16}\n $opacity={sheetLocked ? 0.5 : 1}\n >\n <MoreVerticalIcon width={16} height={16} />\n </Styled.NodeOptionsMenuWrapper>\n }\n menuElement={<NodeMenuOptions options={menuOptions} />}\n menuOffset={5}\n menuZIndex={6}\n />\n )}\n </FlexView>\n\n {showCardAnimation && !isSkipped && <BorderPathAnimation />}\n </Styled.NodeCardInfoWrapper>\n\n <NodeCardTags nodeType={nodeType} state={state} accuracy={accuracy} />\n\n {!isGoalBlock && (\n <Styled.NodeCardContentWrapper\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $background=\"WHITE_1\"\n $flexGap={8}\n $heightX={4}\n $justifyContent=\"space-between\"\n >\n <Styled.NodeCardTitle $renderAs=\"ab3\" $color=\"BLACK_1\" $opacity={sheetLocked ? 0.5 : 1}>\n {title}\n </Styled.NodeCardTitle>\n\n <ContextMenu\n targetElement={\n <Styled.NodeOptionsMenuWrapper>\n <MoreVerticalIcon width={16} height={16} />\n </Styled.NodeOptionsMenuWrapper>\n }\n menuElement={<NodeMenuOptions options={menuOptions} />}\n menuOffset={5}\n menuZIndex={6}\n />\n </Styled.NodeCardContentWrapper>\n )}\n </ArrowTooltip>\n </Styled.NodeCardContainer>\n );\n};\n\nexport default NodeCardTeacherActions;\n"],"names":["NodeCardTeacherActions","nodeData","imageHue","blockType","isSkipped","onNodeAttemptLocationChange","onNodeMarkAsDone","onNodeView","accuracy","attemptLocation","nodeType","cardHeader","title","state","isOptional","onHoverText","permissions","canChangeAttemptLocation","canMarkFamiliar","sheetInProgress","sheetLocked","sheetNotStarted","sheetCompleted","inClassSheet","nodeBgImage","getNodeTypeBasedBgImage","NodeCardIcon","getNodeCardBasedIcon","isGoalBlock","tooltipHidden","showCardAnimation","handleOnMenuOptionClick","optionId","menuOptions","Eye2Icon","Home2Icon","Check2Icon","jsx","Styled.NodeCardContainer","jsxs","ArrowTooltip","Styled.NodeCardInfoWrapper","Styled.IconWrapper","Styled.StyledImportantIcon","Text","FlexView","ContextMenu","Styled.NodeOptionsMenuWrapper","MoreVerticalIcon","NodeMenuOptions","BorderPathAnimation","NodeCardTags","Styled.NodeCardContentWrapper","Styled.NodeCardTitle"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import e from "styled-components";
2
+ import i from "../../../ui/layout/flex-view.js";
3
+ const p = e(i)(({ $onlyIcon: t, theme: o }) => `
4
+ ${!t && "padding-left: 2px;"}
5
+
6
+ max-height: 20px;
7
+ height: fit-content;
8
+ outline: 1px solid ${o.colors.BLACK_1};
9
+ `);
10
+ export {
11
+ p as TagContainer
12
+ };
13
+ //# sourceMappingURL=tag-styled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-styled.js","sources":["../../../../../src/features/chapters-v2/comps/tag/tag-styled.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport FlexView from '../../../ui/layout/flex-view';\n\ninterface ITagContainer {\n $onlyIcon?: boolean;\n}\n\nconst TagContainer = styled(FlexView)<ITagContainer>(({ $onlyIcon, theme }) => {\n return `\n ${!$onlyIcon && 'padding-left: 2px;'}\n\n max-height: 20px;\n height: fit-content;\n outline: 1px solid ${theme.colors.BLACK_1};\n `;\n});\n\nexport { TagContainer };\n"],"names":["TagContainer","styled","FlexView","$onlyIcon","theme"],"mappings":";;AAQM,MAAAA,IAAeC,EAAOC,CAAQ,EAAiB,CAAC,EAAE,WAAAC,GAAW,OAAAC,QAC1D;AAAA,MACH,CAACD,KAAa,oBAAoB;AAAA;AAAA;AAAA;AAAA,yBAIfC,EAAM,OAAO,OAAO;AAAA,GAE5C;"}
@@ -0,0 +1,28 @@
1
+ import { jsxs as n, jsx as o } from "react/jsx-runtime";
2
+ import { memo as i } from "react";
3
+ import s from "../../../ui/text/text.js";
4
+ import { TagContainer as c } from "./tag-styled.js";
5
+ const f = i(({ label: r, Icon: e }) => {
6
+ const t = !r;
7
+ return /* @__PURE__ */ n(
8
+ c,
9
+ {
10
+ $flexDirection: "row",
11
+ $alignItems: "center",
12
+ $justifyContent: "center",
13
+ $borderRadius: 50,
14
+ $gap: t ? 0 : 6,
15
+ $gutter: t ? 0 : 6,
16
+ $background: "WHITE_1",
17
+ $onlyIcon: t,
18
+ children: [
19
+ e ? /* @__PURE__ */ o(e, { width: 20, height: 20 }) : void 0,
20
+ r && /* @__PURE__ */ o(s, { $renderAs: "ac4-black", children: r })
21
+ ]
22
+ }
23
+ );
24
+ });
25
+ export {
26
+ f as default
27
+ };
28
+ //# sourceMappingURL=tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.js","sources":["../../../../../src/features/chapters-v2/comps/tag/tag.tsx"],"sourcesContent":["import type { FC } from 'react';\n\nimport React, { memo } from 'react';\n\nimport Text from '../../../ui/text/text';\nimport * as Styled from './tag-styled';\n\ninterface ITagProps {\n label?: string;\n Icon?: FC<React.SVGProps<SVGSVGElement>>;\n}\n\nconst Tag: FC<ITagProps> = memo(({ label, Icon }) => {\n const isOnlyIconPresent = !label;\n\n return (\n <Styled.TagContainer\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $borderRadius={50}\n $gap={isOnlyIconPresent ? 0 : 6}\n $gutter={isOnlyIconPresent ? 0 : 6}\n $background=\"WHITE_1\"\n $onlyIcon={isOnlyIconPresent}\n >\n {Icon ? <Icon width={20} height={20} /> : undefined}\n\n {label && <Text $renderAs=\"ac4-black\">{label}</Text>}\n </Styled.TagContainer>\n );\n});\n\nexport default Tag;\n"],"names":["Tag","memo","label","Icon","isOnlyIconPresent","jsxs","Styled.TagContainer","jsx","Text"],"mappings":";;;;AAYA,MAAMA,IAAqBC,EAAK,CAAC,EAAE,OAAAC,GAAO,MAAAC,QAAW;AACnD,QAAMC,IAAoB,CAACF;AAGzB,SAAA,gBAAAG;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,gBAAe;AAAA,MACf,aAAY;AAAA,MACZ,iBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,MAAMF,IAAoB,IAAI;AAAA,MAC9B,SAASA,IAAoB,IAAI;AAAA,MACjC,aAAY;AAAA,MACZ,WAAWA;AAAA,MAEV,UAAA;AAAA,QAAAD,sBAAQA,GAAK,EAAA,OAAO,IAAI,QAAQ,IAAI,IAAK;AAAA,QAEzCD,KAAS,gBAAAK,EAACC,GAAK,EAAA,WAAU,aAAa,UAAMN,GAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnD,CAAC;"}
@@ -0,0 +1,18 @@
1
+ const S = {
2
+ DEFAULT: "Default",
3
+ PREREQ: "Prerequisite",
4
+ RECAP: "Recap",
5
+ GOAL: "Lesson",
6
+ TESTS: "Tests",
7
+ PLAYLIST: "Playlist",
8
+ SOLUTIONS: "Solutions",
9
+ NOTES: "Notes",
10
+ FLASHCARDS: "Flashcards",
11
+ SUBJECTIVES: "Subjective Questions",
12
+ PUZZLE_CARDS: "Puzzles",
13
+ SAT_MOCK_TEST: "SAT Mock Test"
14
+ };
15
+ export {
16
+ S as BLOCK_NAME
17
+ };
18
+ //# sourceMappingURL=block-constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-constants.js","sources":["../../../../src/features/chapters-v2/constants/block-constants.ts"],"sourcesContent":["export enum BLOCK_TYPE {\n DEFAULT = 'DEFAULT',\n PREREQ = 'PREREQ',\n RECAP = 'RECAP',\n GOAL = 'GOAL',\n TESTS = 'TESTS',\n PLAYLIST = 'PLAYLIST',\n SOLUTIONS = 'SOLUTIONS',\n NOTES = 'NOTES',\n FLASHCARDS = 'FLASHCARDS',\n SUBJECTIVES = 'SUBJECTIVES',\n PUZZLE_CARDS = 'PUZZLE_CARDS',\n SAT_MOCK_TEST = 'SAT_MOCK_TEST',\n}\n\nexport enum SECTION_CODE {\n READINESS = 'READINESS',\n GOALS = 'GOALS',\n TESTS = 'TESTS',\n ENRICHMENT = 'ENRICHMENT',\n SUBJECTIVE = 'SUBJECTIVE',\n VIDEOS = 'VIDEOS',\n NOTES = 'NOTES',\n FLASHCARDS = 'FLASHCARDS',\n PUZZLE_CARDS = 'PUZZLE_CARDS',\n}\n\nexport const BLOCK_NAME: Record<BLOCK_TYPE, string> = {\n [BLOCK_TYPE.DEFAULT]: 'Default',\n [BLOCK_TYPE.PREREQ]: 'Prerequisite',\n [BLOCK_TYPE.RECAP]: 'Recap',\n [BLOCK_TYPE.GOAL]: 'Lesson',\n [BLOCK_TYPE.TESTS]: 'Tests',\n [BLOCK_TYPE.PLAYLIST]: 'Playlist',\n [BLOCK_TYPE.SOLUTIONS]: 'Solutions',\n [BLOCK_TYPE.NOTES]: 'Notes',\n [BLOCK_TYPE.FLASHCARDS]: 'Flashcards',\n [BLOCK_TYPE.SUBJECTIVES]: 'Subjective Questions',\n [BLOCK_TYPE.PUZZLE_CARDS]: 'Puzzles',\n [BLOCK_TYPE.SAT_MOCK_TEST]: 'SAT Mock Test',\n};\n"],"names":["BLOCK_NAME"],"mappings":"AA2BO,MAAMA,IAAyC;AAAA,EACnD,SAAqB;AAAA,EACrB,QAAoB;AAAA,EACpB,OAAmB;AAAA,EACnB,MAAkB;AAAA,EAClB,OAAmB;AAAA,EACnB,UAAsB;AAAA,EACtB,WAAuB;AAAA,EACvB,OAAmB;AAAA,EACnB,YAAwB;AAAA,EACxB,aAAyB;AAAA,EACzB,cAA0B;AAAA,EAC1B,eAA2B;AAC9B;"}
@@ -0,0 +1,11 @@
1
+ import { ILLUSTRATIONS as r } from "../../../assets/illustrations/illustrations.js";
2
+ const C = (t) => {
3
+ if (!t) return 0;
4
+ const { mandatory: E } = t, { completed: _, total: e } = E;
5
+ return Math.floor(_ / e * 100);
6
+ }, A = (t) => t === "LEARNING" ? r.NODE_LEARN_BG : t === "RECAP" ? r.NODE_RECAP_BG : t === "DYNAMIC" ? r.NODE_CUSTOM_TEST_BG : t === "PRACTICE" ? r.NODE_PRACTICE_BG : t === "PUZZLE_EASY" || t === "PUZZLE_MEDIUM" || t === "PUZZLE_HARD" ? r.NODE_PUZZLE_BG : r.NODE_CUSTOM_TEST_BG;
7
+ export {
8
+ C as getChapterCompletionPercentage,
9
+ A as getNodeTypeBasedBgImage
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/features/chapters-v2/utils/index.ts"],"sourcesContent":["import type { IChapterProgressStats } from '../chapter-details/chapter-details-types';\nimport type { INodeDataProps } from '../comps/node-card/node-card-types';\n\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\n\n// This function calculates the completion percentage of a chapter based on progress stats.\n// If no progress stats are provided, it returns 0.\n// It uses the `mandatory` field from the progress stats to determine the completed and total items.\n// It returns an integer representing the percentage of completion, rounded down to the nearest whole number.\nconst getChapterCompletionPercentage = (progressStats: IChapterProgressStats | null) => {\n if (!progressStats) return 0;\n\n const { mandatory } = progressStats;\n const { completed, total } = mandatory;\n\n const percentage = Math.floor((completed / total) * 100);\n\n return percentage;\n};\n\nconst getNodeTypeBasedBgImage = (nodeType: INodeDataProps['node_type']) => {\n if (nodeType === 'LEARNING') return ILLUSTRATIONS.NODE_LEARN_BG;\n\n if (nodeType === 'RECAP') return ILLUSTRATIONS.NODE_RECAP_BG;\n\n if (nodeType === 'DYNAMIC') return ILLUSTRATIONS.NODE_CUSTOM_TEST_BG;\n\n if (nodeType === 'PRACTICE') return ILLUSTRATIONS.NODE_PRACTICE_BG;\n\n if (nodeType === 'PUZZLE_EASY' || nodeType === 'PUZZLE_MEDIUM' || nodeType === 'PUZZLE_HARD')\n return ILLUSTRATIONS.NODE_PUZZLE_BG;\n\n return ILLUSTRATIONS.NODE_CUSTOM_TEST_BG;\n};\n\nexport { getChapterCompletionPercentage, getNodeTypeBasedBgImage };\n"],"names":["getChapterCompletionPercentage","progressStats","mandatory","completed","total","getNodeTypeBasedBgImage","nodeType","ILLUSTRATIONS"],"mappings":";AASM,MAAAA,IAAiC,CAACC,MAAgD;AAClF,MAAA,CAACA,EAAsB,QAAA;AAErB,QAAA,EAAE,WAAAC,EAAc,IAAAD,GAChB,EAAE,WAAAE,GAAW,OAAAC,EAAU,IAAAF;AAItB,SAFY,KAAK,MAAOC,IAAYC,IAAS,GAAG;AAGzD,GAEMC,IAA0B,CAACC,MAC3BA,MAAa,aAAmBC,EAAc,gBAE9CD,MAAa,UAAgBC,EAAc,gBAE3CD,MAAa,YAAkBC,EAAc,sBAE7CD,MAAa,aAAmBC,EAAc,mBAE9CD,MAAa,iBAAiBA,MAAa,mBAAmBA,MAAa,gBACtEC,EAAc,iBAEhBA,EAAc;"}
@@ -0,0 +1,72 @@
1
+ import { jsx as r } from "react/jsx-runtime";
2
+ import c from "../../../assets/line-icons/icons/alarm.js";
3
+ import n from "../../../assets/line-icons/icons/bulb2.js";
4
+ import i from "../../../assets/line-icons/icons/check2.js";
5
+ import m from "../../../assets/line-icons/icons/dart.js";
6
+ import a from "../../../assets/line-icons/icons/exclamation.js";
7
+ import I from "../../../assets/line-icons/icons/lock2.js";
8
+ import s from "../../../assets/line-icons/icons/puzzle.js";
9
+ import p from "../../../assets/line-icons/icons/recap.js";
10
+ import E from "../../../assets/line-icons/icons/status.js";
11
+ import { InProgressIconWrapper as f } from "../comps/node-card/node-card-styled.js";
12
+ import e from "../comps/tag/tag.js";
13
+ const D = (o, t) => {
14
+ switch (o) {
15
+ case "LOCKED":
16
+ return {
17
+ icon: /* @__PURE__ */ r(I, { width: 32, height: 32 }),
18
+ top: -12,
19
+ right: -12
20
+ };
21
+ case "IN_PROGRESS":
22
+ return {
23
+ icon: /* @__PURE__ */ r(f, { children: /* @__PURE__ */ r(E, {}) })
24
+ };
25
+ case "COMPLETED":
26
+ return {
27
+ icon: /* @__PURE__ */ r(
28
+ e,
29
+ {
30
+ Icon: i,
31
+ label: typeof t == "number" ? `${t}%` : void 0
32
+ }
33
+ ),
34
+ top: -10,
35
+ right: -10
36
+ };
37
+ case "WAIT_FOR_REVIEW":
38
+ return {
39
+ icon: /* @__PURE__ */ r(e, { Icon: a }),
40
+ //<AlertIcon width={32} height={32} fill="white" />,
41
+ top: -10,
42
+ right: -10
43
+ };
44
+ default:
45
+ return {
46
+ icon: void 0
47
+ };
48
+ }
49
+ }, N = (o) => {
50
+ switch (o) {
51
+ case "LEARNING":
52
+ return n;
53
+ case "RECAP":
54
+ return p;
55
+ case "DYNAMIC":
56
+ return c;
57
+ case "PRACTICE":
58
+ case "EXTRA_PRACTICE":
59
+ return m;
60
+ case "PUZZLE_EASY":
61
+ case "PUZZLE_MEDIUM":
62
+ case "PUZZLE_HARD":
63
+ return s;
64
+ default:
65
+ return "";
66
+ }
67
+ };
68
+ export {
69
+ N as getNodeCardBasedIcon,
70
+ D as getNodeStateBasedTagInfo
71
+ };
72
+ //# sourceMappingURL=node-card-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-card-utils.js","sources":["../../../../src/features/chapters-v2/utils/node-card-utils.tsx"],"sourcesContent":["import type { INodeDataProps } from '../comps/node-card/node-card-types';\n\nimport AlarmIcon from '../../../assets/line-icons/icons/alarm';\nimport Bulb2Icon from '../../../assets/line-icons/icons/bulb2';\nimport Check2Icon from '../../../assets/line-icons/icons/check2';\nimport DartIcon from '../../../assets/line-icons/icons/dart';\nimport ExclamationIcon from '../../../assets/line-icons/icons/exclamation';\nimport Lock2Icon from '../../../assets/line-icons/icons/lock2';\nimport PuzzleIcon from '../../../assets/line-icons/icons/puzzle';\nimport RecapIcon from '../../../assets/line-icons/icons/recap';\nimport StatusIcon from '../../../assets/line-icons/icons/status';\nimport { InProgressIconWrapper } from '../comps/node-card/node-card-styled';\nimport Tag from '../comps/tag/tag';\n\nconst getNodeStateBasedTagInfo = (nodeState: INodeDataProps['state'], accuracy?: number | null) => {\n switch (nodeState) {\n case 'LOCKED':\n return {\n icon: <Lock2Icon width={32} height={32} />,\n top: -12,\n right: -12,\n };\n case 'IN_PROGRESS':\n return {\n icon: (\n <InProgressIconWrapper>\n <StatusIcon />\n </InProgressIconWrapper>\n ),\n };\n case 'COMPLETED':\n return {\n icon: (\n <Tag\n Icon={Check2Icon}\n label={typeof accuracy === 'number' ? `${accuracy}%` : undefined}\n />\n ),\n top: -10,\n right: -10,\n };\n case 'WAIT_FOR_REVIEW':\n return {\n icon: <Tag Icon={ExclamationIcon} />, //<AlertIcon width={32} height={32} fill=\"white\" />,\n top: -10,\n right: -10,\n };\n\n default:\n return {\n icon: undefined,\n };\n }\n};\n\nconst getNodeCardBasedIcon = (nodeType: INodeDataProps['node_type']) => {\n switch (nodeType) {\n case 'LEARNING':\n return Bulb2Icon;\n case 'RECAP':\n return RecapIcon;\n case 'DYNAMIC':\n return AlarmIcon;\n case 'PRACTICE':\n case 'EXTRA_PRACTICE':\n return DartIcon;\n case 'PUZZLE_EASY':\n case 'PUZZLE_MEDIUM':\n case 'PUZZLE_HARD':\n return PuzzleIcon;\n\n default:\n return '';\n }\n};\n\nexport { getNodeStateBasedTagInfo, getNodeCardBasedIcon };\n"],"names":["getNodeStateBasedTagInfo","nodeState","accuracy","jsx","Lock2Icon","InProgressIconWrapper","StatusIcon","Tag","Check2Icon","ExclamationIcon","getNodeCardBasedIcon","nodeType","Bulb2Icon","RecapIcon","AlarmIcon","DartIcon","PuzzleIcon"],"mappings":";;;;;;;;;;;;AAcM,MAAAA,IAA2B,CAACC,GAAoCC,MAA6B;AACjG,UAAQD,GAAW;AAAA,IACjB,KAAK;AACI,aAAA;AAAA,QACL,MAAO,gBAAAE,EAAAC,GAAA,EAAU,OAAO,IAAI,QAAQ,IAAI;AAAA,QACxC,KAAK;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,IAEX,KAAK;AACI,aAAA;AAAA,QACL,MACE,gBAAAD,EAACE,GACC,EAAA,UAAA,gBAAAF,EAACG,IAAW,CAAA,GACd;AAAA,MAAA;AAAA,IAGN,KAAK;AACI,aAAA;AAAA,QACL,MACE,gBAAAH;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,MAAMC;AAAA,YACN,OAAO,OAAON,KAAa,WAAW,GAAGA,CAAQ,MAAM;AAAA,UAAA;AAAA,QACzD;AAAA,QAEF,KAAK;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,IAEX,KAAK;AACI,aAAA;AAAA,QACL,MAAM,gBAAAC,EAACI,GAAI,EAAA,MAAME,EAAiB,CAAA;AAAA;AAAA,QAClC,KAAK;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,IAGX;AACS,aAAA;AAAA,QACL,MAAM;AAAA,MAAA;AAAA,EAEZ;AACF,GAEMC,IAAuB,CAACC,MAA0C;AACtE,UAAQA,GAAU;AAAA,IAChB,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAAC;AAAA,IAET;AACS,aAAA;AAAA,EACX;AACF;"}
@@ -1,68 +1,156 @@
1
- var c = Object.defineProperty;
2
- var d = (o, t, s) => t in o ? c(o, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : o[t] = s;
3
- var e = (o, t, s) => d(o, typeof t != "symbol" ? t + "" : t, s);
4
- import { removeMask as p, getReverseMap as u, getToolAndSubtool as l } from "./cue-canvas-helpers.js";
5
- class y {
6
- constructor(t, s, i, a, h, n, r) {
7
- e(this, "polycanvas");
8
- e(this, "publish");
9
- e(this, "height");
10
- e(this, "onUpdateHeight");
11
- e(this, "userId");
12
- e(this, "responseId");
13
- e(this, "userType");
14
- e(this, "resetViewPort", () => {
15
- this.polycanvas && this.polycanvas.resetViewport();
16
- });
17
- e(this, "onChange", (t) => {
18
- const i = Object.fromEntries(t.entries());
1
+ var d = Object.defineProperty;
2
+ var u = (r, t, e) => t in r ? d(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
3
+ var s = (r, t, e) => u(r, typeof t != "symbol" ? t + "" : t, e);
4
+ import v from "../../node_modules/lodash.debounce/index.js";
5
+ import { removeMask as f, checkTextOrEquationTool as g, getReverseMap as y, getToolAndSubtool as m } from "./cue-canvas-helpers.js";
6
+ class T {
7
+ constructor(t, e, i, n, o, a, p, h, c, l) {
8
+ s(this, "polycanvas");
9
+ s(this, "publish");
10
+ s(this, "height");
11
+ s(this, "onUpdateActiveTool");
12
+ s(this, "onUpdateHeight");
13
+ s(this, "userId");
14
+ s(this, "responseId");
15
+ s(this, "userType");
16
+ s(this, "renderAs");
17
+ s(this, "fileInput", null);
18
+ s(this, "debouncedViewportChange");
19
+ s(this, "uploadImageToS3");
20
+ s(this, "publishToChannel", (t, e, i) => {
19
21
  this.publish && this.publish({
20
22
  eventName: "cue_canvas_changed",
21
23
  eventPayload: {
22
- data: i,
24
+ data: t,
23
25
  height: this.height,
24
26
  userId: this.userId,
25
- responseId: this.responseId
27
+ responseId: this.responseId,
28
+ gridName: e,
29
+ dimension: i
26
30
  }
27
31
  });
28
32
  });
29
- e(this, "undo", () => {
33
+ s(this, "onChange", (t) => {
34
+ const i = Object.fromEntries(t.entries());
35
+ g(i) && this.onUpdateActiveTool("move"), this.publishToChannel(i);
36
+ });
37
+ s(this, "undo", () => {
30
38
  if (!this.polycanvas)
31
39
  return;
32
40
  const t = this.polycanvas.undo();
33
41
  if (!t)
34
42
  return;
35
- const s = u(t);
36
- this.onChange(s);
43
+ const e = y(t);
44
+ this.onChange(e);
37
45
  });
38
- e(this, "redo", () => {
46
+ s(this, "redo", () => {
39
47
  if (!this.polycanvas)
40
48
  return;
41
49
  const t = this.polycanvas.redo();
42
50
  t && this.onChange(t);
43
51
  });
44
- e(this, "setTool", (t) => {
52
+ s(this, "clearCanvas", () => {
53
+ this.polycanvas && this.polycanvas.clear();
54
+ });
55
+ s(this, "zoomIn", () => {
56
+ if (!this.polycanvas) return;
57
+ const t = this.polycanvas.getViewport();
58
+ this.polycanvas.setViewport(t.x, t.y, t.zoom * 1.1);
59
+ });
60
+ s(this, "zoomOut", () => {
61
+ if (!this.polycanvas) return;
62
+ const t = this.polycanvas.getViewport();
63
+ this.polycanvas.setViewport(t.x, t.y, t.zoom * 0.9);
64
+ });
65
+ s(this, "downloadCanvasAsImage", async () => {
66
+ if (!this.polycanvas) return;
67
+ const t = await this.polycanvas.image(3e3, 3e3, "png");
68
+ if (!t) return;
69
+ const e = document.createElement("a");
70
+ e.href = t, e.download = `canvas-drawing-${Date.now()}.png`, e.click();
71
+ });
72
+ s(this, "uploadFileToCanvas", async (t) => new Promise((e, i) => {
73
+ this.uploadImageToS3 ? e(this.uploadImageToS3(t)) : i(new Error("Upload function not provided"));
74
+ }));
75
+ s(this, "onViewPortChange", (t) => {
76
+ if (!this.publish) return;
77
+ const e = t;
78
+ this.publishToChannel({}, void 0, e);
79
+ });
80
+ s(this, "openFileUpload", () => {
81
+ this.fileInput || (this.fileInput = document.createElement("input"), this.fileInput.type = "file", this.fileInput.accept = "image/*", this.fileInput.style.display = "none", this.fileInput.onchange = this.addImageToCanvas, document.body.appendChild(this.fileInput)), this.fileInput.click();
82
+ });
83
+ s(this, "addImageToCanvas", async (t) => {
84
+ var h;
85
+ const e = t.target, i = (h = e.files) == null ? void 0 : h[0];
86
+ if (!i || !this.polycanvas || !this.uploadImageToS3) return;
87
+ const n = await this.uploadImageToS3(i), o = this.polycanvas.getViewport(), a = {
88
+ name: "image",
89
+ href: n,
90
+ x: o.x + 88,
91
+ y: o.y + 88
92
+ }, p = this.polycanvas.add({
93
+ ...a
94
+ });
95
+ this.publishToChannel({
96
+ [p]: [void 0, { ...a, status: "locked" }]
97
+ }), e.value = "";
98
+ });
99
+ s(this, "updateCanvasConfig", (t, e, i) => {
100
+ this.polycanvas && (t > this.height && this.updateHeight(t), e && this.polycanvas.setViewport(e.x, e.y, e.zoom), i && this.polycanvas.setOptions({
101
+ grid: i
102
+ }));
103
+ });
104
+ s(this, "updateCanvas", ({ data: t, userId: e }) => {
105
+ const i = this.userType === "TEACHER" || e === this.userId;
106
+ Object.entries(t).forEach(([n, o]) => {
107
+ var a, p, h;
108
+ !o[0] && o[1] ? (a = this.polycanvas) == null || a.add({ ...o[1], cannotEdit: !i }, n) : o[0] && !o[1] ? (p = this.polycanvas) == null || p.delete(n) : o[0] && o[1] && ((h = this.polycanvas) == null || h.update(n, { ...o[1] }));
109
+ });
110
+ });
111
+ s(this, "resetViewPort", () => {
112
+ this.polycanvas && this.polycanvas.resetViewport();
113
+ });
114
+ s(this, "changeGrid", (t) => {
115
+ this.polycanvas && (this.polycanvas.setOptions({
116
+ grid: t
117
+ }), this.publishToChannel({}, t));
118
+ });
119
+ s(this, "setTool", (t) => {
45
120
  if (this.polycanvas) {
46
- const [s, i] = l(t);
47
- switch (s) {
121
+ const [e, i] = m(t);
122
+ switch (e) {
123
+ case "clearAll":
124
+ this.clearCanvas();
125
+ break;
126
+ case "home":
127
+ this.resetViewPort();
128
+ break;
48
129
  case "undo":
49
130
  this.undo();
50
131
  break;
51
132
  case "redo":
52
133
  this.redo();
53
134
  break;
135
+ case "zoomIn":
136
+ this.zoomIn();
137
+ break;
138
+ case "zoomOut":
139
+ this.zoomOut();
140
+ break;
141
+ case "upload":
142
+ this.openFileUpload();
143
+ break;
144
+ case "download":
145
+ this.downloadCanvasAsImage();
146
+ break;
147
+ case "grid":
148
+ break;
54
149
  default:
55
- this.polycanvas.setTool(s, i);
150
+ this.polycanvas.setTool(e, i);
56
151
  }
57
152
  }
58
153
  });
59
- e(this, "updateCanvas", ({ data: t, userId: s }) => {
60
- const i = this.userType === "TEACHER" || s === this.userId;
61
- Object.entries(t).forEach(([a, h]) => {
62
- var n, r;
63
- !h[0] && h[1] ? (n = this.polycanvas) == null || n.add({ ...h[1], cannotEdit: !i }, a) : h[0] && !h[1] && ((r = this.polycanvas) == null || r.delete(a));
64
- });
65
- });
66
154
  /**
67
155
  * The `update` method is called in two cases:
68
156
  * 1. When receiving initial data to update the canvas content.
@@ -75,36 +163,37 @@ class y {
75
163
  *
76
164
  * Additionally, if the payload contains a height greater than the current height of the canvas, the `updateHeight` method is called to update the canvas height.
77
165
  */
78
- e(this, "update", (t) => {
166
+ s(this, "update", (t) => {
79
167
  if (Array.isArray(t)) {
80
- const s = t.map((a) => a.height), i = Math.max(...s);
81
- i > this.height && this.updateHeight(i), t.forEach((a) => this.updateCanvas(a));
168
+ const e = t.map((a) => a.height).filter(Boolean), i = Math.max(...e), n = t.map((a) => a.dimension).filter(Boolean)[t.length - 1], o = t.map((a) => a.gridName).filter(Boolean)[t.length - 1];
169
+ this.updateCanvasConfig(i, n, o), t.forEach((a) => this.updateCanvas(a));
82
170
  } else
83
- t.height > this.height && this.updateHeight(t.height), this.updateCanvas(t);
171
+ this.updateCanvasConfig(t.height, t.dimension, t == null ? void 0 : t.gridName), this.updateCanvas(t);
84
172
  });
85
- e(this, "setColor", (t) => {
173
+ s(this, "setColor", (t) => {
86
174
  this.polycanvas && this.polycanvas.setColor(t);
87
175
  });
88
- e(this, "updateHeight", (t) => {
176
+ s(this, "updateHeight", (t) => {
89
177
  this.height = t, this.onUpdateHeight(t);
90
178
  });
91
- e(this, "destroy", () => {
92
- this.polycanvas && (this.polycanvas.off("change", this.onChange), this.polycanvas.destroy(), this.polycanvas = void 0);
179
+ s(this, "destroy", () => {
180
+ this.polycanvas && (this.polycanvas.off("change", this.onChange), this.polycanvas.destroy(), this.debouncedViewportChange.cancel(), this.renderAs === "whiteboard" && this.userType === "TEACHER" && this.polycanvas.off("viewport", this.debouncedViewportChange), this.polycanvas = void 0, this.fileInput && this.fileInput.parentNode && (this.fileInput.parentNode.removeChild(this.fileInput), this.fileInput = null));
93
181
  });
94
- this.onUpdateHeight = i, this.height = a, this.userId = h, this.responseId = n, this.publish = t, this.userType = r, s(this.responseId, this.update);
182
+ this.onUpdateHeight = n, this.onUpdateActiveTool = i, this.height = a, this.uploadImageToS3 = o, this.userId = p, this.responseId = h, this.publish = t, this.userType = c, this.renderAs = l, this.debouncedViewportChange = v(this.onViewPortChange, 300), e(this.responseId, this.update);
95
183
  }
96
- async create({ canvasElementRef: t, canvasConfig: s, canvasSetting: i, initialData: a }) {
184
+ async create({ canvasElementRef: t, canvasConfig: e, canvasSetting: i, initialData: n }) {
97
185
  if (!t.current)
98
186
  throw new Error("PolyCanvas: Div Element Not found for canvas");
99
187
  this.polycanvas = await window.Polypad.create(t.current, {
100
188
  initial: {
101
- options: s
189
+ options: e
102
190
  },
103
- ...i
104
- }), p(t), this.polycanvas.on("change", this.onChange), a && this.update(a);
191
+ ...i,
192
+ imageUpload: this.renderAs === "whiteboard" && this.userType === "TEACHER" ? this.uploadFileToCanvas : void 0
193
+ }), this.renderAs === "whiteboard" && this.userType === "TEACHER" && this.polycanvas.on("viewport", this.debouncedViewportChange), f(t), this.polycanvas.on("change", this.onChange), n && this.update(n);
105
194
  }
106
195
  }
107
196
  export {
108
- y as CueCanvasCore
197
+ T as CueCanvasCore
109
198
  };
110
199
  //# sourceMappingURL=cue-canvas-core.js.map