@cuemath/leap 3.1.41-as5 → 3.1.41-as6
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,5 +1,5 @@
|
|
|
1
1
|
import { CANVAS_COLORS as u } from "./constants/constants.js";
|
|
2
|
-
const
|
|
2
|
+
const S = [
|
|
3
3
|
"none",
|
|
4
4
|
"square2-grid",
|
|
5
5
|
"square-checked",
|
|
@@ -9,7 +9,7 @@ const h = [
|
|
|
9
9
|
"square-grid",
|
|
10
10
|
"tri-grid",
|
|
11
11
|
"tri2-grid"
|
|
12
|
-
],
|
|
12
|
+
], m = /* @__PURE__ */ new Set([
|
|
13
13
|
"undo",
|
|
14
14
|
"redo",
|
|
15
15
|
"clearAll",
|
|
@@ -20,68 +20,68 @@ const h = [
|
|
|
20
20
|
"zoomOut",
|
|
21
21
|
"upload",
|
|
22
22
|
"download"
|
|
23
|
-
]),
|
|
24
|
-
var
|
|
25
|
-
const
|
|
26
|
-
if (
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
29
|
-
const s =
|
|
30
|
-
|
|
23
|
+
]), y = (e) => {
|
|
24
|
+
var o;
|
|
25
|
+
const t = (o = e.current) == null ? void 0 : o.shadowRoot;
|
|
26
|
+
if (t) {
|
|
27
|
+
const n = t.querySelectorAll("x-polypad");
|
|
28
|
+
if (n[0]) {
|
|
29
|
+
const s = n[0].querySelector("svg.canvas"), r = s == null ? void 0 : s.querySelector("path.mask");
|
|
30
|
+
r == null || r.setAttribute("stroke", "transparent"), r == null || r.setAttribute("fill", "transparent"), r == null || r.removeAttribute("style");
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
},
|
|
34
|
-
var
|
|
35
|
-
const
|
|
36
|
-
if (
|
|
37
|
-
const a =
|
|
33
|
+
}, E = (e) => {
|
|
34
|
+
var r;
|
|
35
|
+
const t = (r = e.current) == null ? void 0 : r.shadowRoot, o = t == null ? void 0 : t.querySelector("x-pp-sidebar"), n = o == null ? void 0 : o.getElementsByClassName("tabs-header"), s = o == null ? void 0 : o.getElementsByClassName("tabs-body");
|
|
36
|
+
if (o == null || o.setAttribute("style", "display: none;"), o == null || o.setAttribute("style", "height: 30px;"), n && n.length > 0) {
|
|
37
|
+
const a = n[0];
|
|
38
38
|
a.style.display = "none";
|
|
39
39
|
}
|
|
40
40
|
if (s && s.length > 0) {
|
|
41
41
|
const a = s[0];
|
|
42
42
|
a.style.top = "48px";
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
}, b = (
|
|
46
|
-
var
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
}, f = (
|
|
44
|
+
o == null || o.setAttribute("style", "display: block;");
|
|
45
|
+
}, b = (e) => {
|
|
46
|
+
var n, s;
|
|
47
|
+
const t = (n = e.current.shadowRoot) == null ? void 0 : n.querySelectorAll('[data-key="music"]')[0], o = (s = e.current.shadowRoot) == null ? void 0 : s.querySelectorAll('[data-key="logic"]')[0];
|
|
48
|
+
t && (t.style.display = "none"), o && (o.style.display = "none");
|
|
49
|
+
}, f = (e, t, o, n) => o === "canvas" ? {
|
|
50
50
|
canvas: "notebook",
|
|
51
|
-
canvasX:
|
|
52
|
-
canvasY:
|
|
51
|
+
canvasX: e,
|
|
52
|
+
canvasY: t,
|
|
53
53
|
noPinchPan: !0,
|
|
54
54
|
grid: "none",
|
|
55
55
|
background: "transparent",
|
|
56
56
|
noSnapping: !0
|
|
57
57
|
} : {
|
|
58
58
|
canvas: "infinite",
|
|
59
|
-
canvasX:
|
|
60
|
-
canvasY:
|
|
59
|
+
canvasX: e,
|
|
60
|
+
canvasY: t,
|
|
61
61
|
grid: "none",
|
|
62
|
-
noPinchPan:
|
|
63
|
-
noDeleting:
|
|
64
|
-
noCopyPaste:
|
|
62
|
+
noPinchPan: n === "STUDENT",
|
|
63
|
+
noDeleting: n === "STUDENT",
|
|
64
|
+
noCopyPaste: n === "STUDENT",
|
|
65
65
|
noMusic: !0,
|
|
66
66
|
noAudio: !0
|
|
67
|
-
}, C = (
|
|
67
|
+
}, C = (e, t) => e === "canvas" ? {
|
|
68
68
|
sidebarTiles: !1,
|
|
69
69
|
sidebarSettings: !1,
|
|
70
70
|
settings: !1,
|
|
71
71
|
toolbar: !1,
|
|
72
72
|
canvasMargin: 0
|
|
73
73
|
} : {
|
|
74
|
-
sidebarTiles:
|
|
74
|
+
sidebarTiles: t === "TEACHER",
|
|
75
75
|
sidebarSettings: !1,
|
|
76
76
|
settings: !1,
|
|
77
77
|
toolbar: !1
|
|
78
|
-
}, d = (
|
|
79
|
-
const
|
|
80
|
-
return
|
|
81
|
-
|
|
82
|
-
}),
|
|
83
|
-
}, O = (
|
|
84
|
-
switch (
|
|
78
|
+
}, d = (e) => [e[1], e[0]], v = (e) => {
|
|
79
|
+
const t = /* @__PURE__ */ new Map();
|
|
80
|
+
return e.forEach((o, n) => {
|
|
81
|
+
t.set(n, d(o));
|
|
82
|
+
}), t;
|
|
83
|
+
}, O = (e) => {
|
|
84
|
+
switch (e) {
|
|
85
85
|
case "pen":
|
|
86
86
|
return ["pen", "pen"];
|
|
87
87
|
case "marker":
|
|
@@ -93,7 +93,7 @@ const h = [
|
|
|
93
93
|
case "equation":
|
|
94
94
|
return ["text", "equation"];
|
|
95
95
|
default:
|
|
96
|
-
return [
|
|
96
|
+
return [e, void 0];
|
|
97
97
|
}
|
|
98
98
|
}, g = [
|
|
99
99
|
"pen",
|
|
@@ -136,17 +136,17 @@ const h = [
|
|
|
136
136
|
"move",
|
|
137
137
|
"undo",
|
|
138
138
|
"redo"
|
|
139
|
-
], T = ["pen", "ruler", "eraser", "move", "undo", "redo"], R = (
|
|
140
|
-
(
|
|
141
|
-
) :
|
|
142
|
-
const
|
|
143
|
-
for (let c = 0; c <
|
|
144
|
-
i[c] =
|
|
139
|
+
], T = ["pen", "ruler", "eraser", "move", "undo", "redo"], R = (e, t) => t === "whiteboard" ? e === "TEACHER" ? g : A : e === "TEACHER" ? p : T, N = (e, t = "canvas") => t === "whiteboard" ? Object.keys(u).filter(
|
|
140
|
+
(o) => !o.startsWith("CANVAS")
|
|
141
|
+
) : e === "TEACHER" ? ["CANVAS_RED", "CANVAS_YELLOW", "CANVAS_GREEN"] : ["CANVAS_BLUE", "CANVAS_PURPLE", "CANVAS_PINK"], _ = (e) => ["pen", "ruler", "marker", "highlighter"].includes(e), k = (e) => Object.values(e).some((t) => !!(!t[0] && t[1] && "name" in t[1] && (t[1].name === "text" || t[1].name === "equation"))), q = (e) => {
|
|
142
|
+
const t = e.split(","), o = t[0] ?? "", n = t[1] ?? "", r = o.includes("base64") ? atob(n) : decodeURIComponent(n), a = o.match(/:(.*?);/), l = a ? a[1] : "application/octet-stream", i = new Uint8Array(r.length);
|
|
143
|
+
for (let c = 0; c < r.length; c++)
|
|
144
|
+
i[c] = r.charCodeAt(c);
|
|
145
145
|
return new Blob([i], { type: l });
|
|
146
146
|
};
|
|
147
147
|
export {
|
|
148
|
-
|
|
149
|
-
|
|
148
|
+
S as GRID_NAMES,
|
|
149
|
+
m as STATELESS_TOOLS,
|
|
150
150
|
k as checkTextOrEquationTool,
|
|
151
151
|
q as dataURIToBlob,
|
|
152
152
|
f as getCanvasConfig,
|
|
@@ -157,8 +157,8 @@ export {
|
|
|
157
157
|
v as getReverseMap,
|
|
158
158
|
O as getToolAndSubtool,
|
|
159
159
|
R as getUserTools,
|
|
160
|
-
|
|
160
|
+
y as removeMask,
|
|
161
161
|
b as removeMusicTiles,
|
|
162
|
-
|
|
162
|
+
E as removeTileButton
|
|
163
163
|
};
|
|
164
164
|
//# sourceMappingURL=cue-canvas-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cue-canvas-helpers.js","sources":["../../../src/features/cue-canvas/cue-canvas-helpers.ts"],"sourcesContent":["import type { TUserTypes } from '../ui/types';\nimport type {\n TCueCanvasColors,\n TCueCanvasChangeData,\n TCueCanvasTool,\n TCueCanvasToolOption,\n TDrawingData,\n TRenderAs,\n TCueCanvasGridName,\n TCueCanvasChangeDataObject,\n} from './types/cue-canvas';\nimport type { IPolypadCreateOptions, IPolypadOptions } from './types/polypad';\n\nimport { CANVAS_COLORS } from './constants/constants';\n\nexport const GRID_NAMES: TCueCanvasGridName[] = [\n 'none',\n 'square2-grid',\n 'square-checked',\n 'square-dots',\n 'tri-dots',\n 'tri2-dots',\n 'square-grid',\n 'tri-grid',\n 'tri2-grid',\n];\n\nexport const STATELESS_TOOLS = new Set<TCueCanvasTool>([\n 'undo',\n 'redo',\n 'clearAll',\n 'home',\n 'lock',\n 'unlock',\n 'zoomIn',\n 'zoomOut',\n 'upload',\n 'download',\n]);\n\nexport const removeMask = (canvasElementRef: React.RefObject<HTMLDivElement>) => {\n const shadowRoot = canvasElementRef.current?.shadowRoot;\n\n if (shadowRoot) {\n const xPolypad = shadowRoot.querySelectorAll('x-polypad');\n\n if (xPolypad[0]) {\n const svgCanvas = xPolypad[0].querySelector('svg.canvas');\n const maskPath = svgCanvas?.querySelector('path.mask');\n\n maskPath?.setAttribute('stroke', 'transparent');\n maskPath?.setAttribute('fill', 'transparent');\n maskPath?.removeAttribute('style');\n }\n }\n\n return undefined;\n};\n\nexport const removeTileButton = (canvasElementRef: React.RefObject<HTMLDivElement>) => {\n const shadowRoot = canvasElementRef.current?.shadowRoot;\n const sidebar = shadowRoot?.querySelector('x-pp-sidebar') as HTMLElement;\n const tabsHeader = sidebar?.getElementsByClassName('tabs-header');\n const tabsBody = sidebar?.getElementsByClassName('tabs-body');\n\n sidebar?.setAttribute('style', 'display: none;');\n sidebar?.setAttribute('style', 'height: 30px;');\n\n if (tabsHeader && tabsHeader.length > 0) {\n const firstTabHeader = tabsHeader[0] as HTMLElement;\n\n firstTabHeader.style.display = 'none';\n }\n\n if (tabsBody && tabsBody.length > 0) {\n const firstTabBody = tabsBody[0] as HTMLElement;\n\n firstTabBody.style.top = '48px';\n }\n sidebar?.setAttribute('style', 'display: block;');\n};\n\n/**\n * Hides the music and logic tiles in the canvas to prevent CORS issues with audio elements\n * @param canvasElementRef - Reference to the canvas div element\n */\nexport const removeMusicTiles = (canvasElementRef: React.RefObject<HTMLDivElement>) => {\n const musicTiles = canvasElementRef.current.shadowRoot?.querySelectorAll(`[data-key=\"music\"]`)[0];\n // const logicTiles = canvasElementRef.current.shadowRoot?.querySelectorAll(`[data-key=\"logic\"]`)[0];\n\n if (musicTiles) {\n (musicTiles as HTMLElement).style.display = 'none';\n }\n\n // if (logicTiles) {\n // (logicTiles as HTMLElement).style.display = 'none';\n // }\n};\n\nexport const getCanvasConfig = (\n width: number,\n height: number,\n renderAs: TRenderAs,\n userType: TUserTypes,\n): IPolypadOptions => {\n return renderAs === 'canvas'\n ? {\n canvas: 'notebook',\n canvasX: width,\n canvasY: height,\n noPinchPan: true,\n grid: 'none',\n background: 'transparent',\n noSnapping: true,\n }\n : {\n canvas: 'infinite',\n canvasX: width,\n canvasY: height,\n grid: 'none',\n noPinchPan: userType === 'STUDENT',\n noDeleting: userType === 'STUDENT',\n noCopyPaste: userType === 'STUDENT',\n noMusic: true,\n noAudio: true,\n };\n};\n\nexport const getCanvasSettings = (\n renderAs: TRenderAs,\n userType: TUserTypes,\n): IPolypadCreateOptions => {\n return renderAs === 'canvas'\n ? {\n sidebarTiles: false,\n sidebarSettings: false,\n settings: false,\n toolbar: false,\n canvasMargin: 0,\n }\n : {\n sidebarTiles: userType === 'TEACHER',\n sidebarSettings: false,\n settings: false,\n toolbar: false,\n };\n};\n\nexport const getReverseAction = (action: TDrawingData[]) => [action[1], action[0]];\n\nexport const getReverseMap = (data: TCueCanvasChangeData) => {\n const newData = new Map<string, TDrawingData[]>();\n\n data.forEach((value, key) => {\n newData.set(key, getReverseAction(value));\n });\n\n return newData;\n};\n\nexport const getToolAndSubtool = (\n tool: TCueCanvasTool,\n): [\n Exclude<TCueCanvasTool, 'marker' | 'highlighter' | 'ruler' | 'equation'>,\n TCueCanvasToolOption | undefined,\n] => {\n switch (tool) {\n case 'pen':\n return ['pen', 'pen'];\n case 'marker':\n return ['pen', 'marker'];\n case 'highlighter':\n return ['pen', 'highlighter'];\n case 'ruler':\n return ['pen', 'ruler'];\n case 'equation':\n return ['text', 'equation'];\n default:\n return [tool, undefined];\n }\n};\n\nconst TEACHER_WHITEBOARD_TOOLS: TCueCanvasTool[] = [\n 'pen',\n 'ruler',\n 'marker',\n 'highlighter',\n 'eraser',\n 'move',\n 'lock',\n 'unlock',\n 'zoomIn',\n 'zoomOut',\n 'pan',\n 'clearAll',\n 'text',\n 'equation',\n 'grid',\n 'home',\n 'undo',\n 'redo',\n\n 'upload',\n 'download',\n];\n\nconst STUDENT_WHITEBOARD_TOOLS: TCueCanvasTool[] = [\n 'pen',\n 'ruler',\n 'marker',\n 'highlighter',\n 'eraser',\n 'move',\n 'text',\n 'undo',\n 'redo',\n 'download',\n];\n\nconst TEACHER_DEFAULT_TOOLS: TCueCanvasTool[] = [\n 'pen',\n 'ruler',\n 'marker',\n 'highlighter',\n 'eraser',\n 'move',\n 'undo',\n 'redo',\n];\n\nconst STUDENT_DEFAULT_TOOLS: TCueCanvasTool[] = ['pen', 'ruler', 'eraser', 'move', 'undo', 'redo'];\n\nexport const getUserTools = (userType: TUserTypes, renderAs: TRenderAs): TCueCanvasTool[] => {\n if (renderAs === 'whiteboard') {\n return userType === 'TEACHER' ? TEACHER_WHITEBOARD_TOOLS : STUDENT_WHITEBOARD_TOOLS;\n }\n\n return userType === 'TEACHER' ? TEACHER_DEFAULT_TOOLS : STUDENT_DEFAULT_TOOLS;\n};\n\nexport const getColorsForUser = (userType: TUserTypes, renderAs: TRenderAs = 'canvas') => {\n if (renderAs === 'whiteboard') {\n return Object.keys(CANVAS_COLORS).filter(\n color => !color.startsWith('CANVAS'),\n ) as TCueCanvasColors[];\n }\n\n return userType === 'TEACHER'\n ? (['CANVAS_RED', 'CANVAS_YELLOW', 'CANVAS_GREEN'] as TCueCanvasColors[])\n : (['CANVAS_BLUE', 'CANVAS_PURPLE', 'CANVAS_PINK'] as TCueCanvasColors[]);\n};\n\nexport const getIsWritingTool = (penTool: string) => {\n return ['pen', 'ruler', 'marker', 'highlighter'].includes(penTool);\n};\n\nexport const checkTextOrEquationTool = (payload: TCueCanvasChangeDataObject) => {\n return Object.values(payload).some(value => {\n if (\n !value[0] &&\n value[1] &&\n 'name' in value[1] &&\n (value[1].name === 'text' || value[1].name === 'equation')\n ) {\n return true;\n }\n\n return false;\n });\n};\n\nexport const dataURIToBlob = (dataURI: string): Blob => {\n const parts = dataURI.split(',');\n const metadata = parts[0] ?? '';\n const base64Data = parts[1] ?? '';\n\n const isBase64 = metadata.includes('base64');\n const byteString = isBase64 ? atob(base64Data) : decodeURIComponent(base64Data);\n\n const mimeTypeMatch = metadata.match(/:(.*?);/);\n const mimeType = mimeTypeMatch ? mimeTypeMatch[1] : 'application/octet-stream';\n\n const byteArray = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n byteArray[i] = byteString.charCodeAt(i);\n }\n\n return new Blob([byteArray], { type: mimeType });\n};\n\nexport const jsonToBlob = (json: unknown) => {\n const data = JSON.stringify(json);\n\n return new Blob([data], {\n type: 'application/json',\n });\n};\n"],"names":["GRID_NAMES","STATELESS_TOOLS","removeMask","canvasElementRef","shadowRoot","_a","xPolypad","svgCanvas","maskPath","removeTileButton","sidebar","tabsHeader","tabsBody","firstTabHeader","firstTabBody","removeMusicTiles","musicTiles","getCanvasConfig","width","height","renderAs","userType","getCanvasSettings","getReverseAction","action","getReverseMap","data","newData","value","key","getToolAndSubtool","tool","TEACHER_WHITEBOARD_TOOLS","STUDENT_WHITEBOARD_TOOLS","TEACHER_DEFAULT_TOOLS","STUDENT_DEFAULT_TOOLS","getUserTools","getColorsForUser","CANVAS_COLORS","color","getIsWritingTool","penTool","checkTextOrEquationTool","payload","dataURIToBlob","dataURI","parts","metadata","base64Data","byteString","mimeTypeMatch","mimeType","byteArray","i"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cue-canvas-helpers.js","sources":["../../../src/features/cue-canvas/cue-canvas-helpers.ts"],"sourcesContent":["import type { TUserTypes } from '../ui/types';\nimport type {\n TCueCanvasColors,\n TCueCanvasChangeData,\n TCueCanvasTool,\n TCueCanvasToolOption,\n TDrawingData,\n TRenderAs,\n TCueCanvasGridName,\n TCueCanvasChangeDataObject,\n} from './types/cue-canvas';\nimport type { IPolypadCreateOptions, IPolypadOptions } from './types/polypad';\n\nimport { CANVAS_COLORS } from './constants/constants';\n\nexport const GRID_NAMES: TCueCanvasGridName[] = [\n 'none',\n 'square2-grid',\n 'square-checked',\n 'square-dots',\n 'tri-dots',\n 'tri2-dots',\n 'square-grid',\n 'tri-grid',\n 'tri2-grid',\n];\n\nexport const STATELESS_TOOLS = new Set<TCueCanvasTool>([\n 'undo',\n 'redo',\n 'clearAll',\n 'home',\n 'lock',\n 'unlock',\n 'zoomIn',\n 'zoomOut',\n 'upload',\n 'download',\n]);\n\nexport const removeMask = (canvasElementRef: React.RefObject<HTMLDivElement>) => {\n const shadowRoot = canvasElementRef.current?.shadowRoot;\n\n if (shadowRoot) {\n const xPolypad = shadowRoot.querySelectorAll('x-polypad');\n\n if (xPolypad[0]) {\n const svgCanvas = xPolypad[0].querySelector('svg.canvas');\n const maskPath = svgCanvas?.querySelector('path.mask');\n\n maskPath?.setAttribute('stroke', 'transparent');\n maskPath?.setAttribute('fill', 'transparent');\n maskPath?.removeAttribute('style');\n }\n }\n\n return undefined;\n};\n\nexport const removeTileButton = (canvasElementRef: React.RefObject<HTMLDivElement>) => {\n const shadowRoot = canvasElementRef.current?.shadowRoot;\n const sidebar = shadowRoot?.querySelector('x-pp-sidebar') as HTMLElement;\n const tabsHeader = sidebar?.getElementsByClassName('tabs-header');\n const tabsBody = sidebar?.getElementsByClassName('tabs-body');\n\n sidebar?.setAttribute('style', 'display: none;');\n sidebar?.setAttribute('style', 'height: 30px;');\n\n if (tabsHeader && tabsHeader.length > 0) {\n const firstTabHeader = tabsHeader[0] as HTMLElement;\n\n firstTabHeader.style.display = 'none';\n }\n\n if (tabsBody && tabsBody.length > 0) {\n const firstTabBody = tabsBody[0] as HTMLElement;\n\n firstTabBody.style.top = '48px';\n }\n sidebar?.setAttribute('style', 'display: block;');\n};\n\n/**\n * Hides the music and logic tiles in the canvas to prevent CORS issues with audio elements\n * @param canvasElementRef - Reference to the canvas div element\n */\nexport const removeMusicTiles = (canvasElementRef: React.RefObject<HTMLDivElement>) => {\n const musicTiles = canvasElementRef.current.shadowRoot?.querySelectorAll(`[data-key=\"music\"]`)[0];\n const logicTiles = canvasElementRef.current.shadowRoot?.querySelectorAll(`[data-key=\"logic\"]`)[0];\n\n if (musicTiles) {\n (musicTiles as HTMLElement).style.display = 'none';\n }\n\n if (logicTiles) {\n (logicTiles as HTMLElement).style.display = 'none';\n }\n};\n\nexport const getCanvasConfig = (\n width: number,\n height: number,\n renderAs: TRenderAs,\n userType: TUserTypes,\n): IPolypadOptions => {\n return renderAs === 'canvas'\n ? {\n canvas: 'notebook',\n canvasX: width,\n canvasY: height,\n noPinchPan: true,\n grid: 'none',\n background: 'transparent',\n noSnapping: true,\n }\n : {\n canvas: 'infinite',\n canvasX: width,\n canvasY: height,\n grid: 'none',\n noPinchPan: userType === 'STUDENT',\n noDeleting: userType === 'STUDENT',\n noCopyPaste: userType === 'STUDENT',\n noMusic: true,\n noAudio: true,\n };\n};\n\nexport const getCanvasSettings = (\n renderAs: TRenderAs,\n userType: TUserTypes,\n): IPolypadCreateOptions => {\n return renderAs === 'canvas'\n ? {\n sidebarTiles: false,\n sidebarSettings: false,\n settings: false,\n toolbar: false,\n canvasMargin: 0,\n }\n : {\n sidebarTiles: userType === 'TEACHER',\n sidebarSettings: false,\n settings: false,\n toolbar: false,\n };\n};\n\nexport const getReverseAction = (action: TDrawingData[]) => [action[1], action[0]];\n\nexport const getReverseMap = (data: TCueCanvasChangeData) => {\n const newData = new Map<string, TDrawingData[]>();\n\n data.forEach((value, key) => {\n newData.set(key, getReverseAction(value));\n });\n\n return newData;\n};\n\nexport const getToolAndSubtool = (\n tool: TCueCanvasTool,\n): [\n Exclude<TCueCanvasTool, 'marker' | 'highlighter' | 'ruler' | 'equation'>,\n TCueCanvasToolOption | undefined,\n] => {\n switch (tool) {\n case 'pen':\n return ['pen', 'pen'];\n case 'marker':\n return ['pen', 'marker'];\n case 'highlighter':\n return ['pen', 'highlighter'];\n case 'ruler':\n return ['pen', 'ruler'];\n case 'equation':\n return ['text', 'equation'];\n default:\n return [tool, undefined];\n }\n};\n\nconst TEACHER_WHITEBOARD_TOOLS: TCueCanvasTool[] = [\n 'pen',\n 'ruler',\n 'marker',\n 'highlighter',\n 'eraser',\n 'move',\n 'lock',\n 'unlock',\n 'zoomIn',\n 'zoomOut',\n 'pan',\n 'clearAll',\n 'text',\n 'equation',\n 'grid',\n 'home',\n 'undo',\n 'redo',\n\n 'upload',\n 'download',\n];\n\nconst STUDENT_WHITEBOARD_TOOLS: TCueCanvasTool[] = [\n 'pen',\n 'ruler',\n 'marker',\n 'highlighter',\n 'eraser',\n 'move',\n 'text',\n 'undo',\n 'redo',\n 'download',\n];\n\nconst TEACHER_DEFAULT_TOOLS: TCueCanvasTool[] = [\n 'pen',\n 'ruler',\n 'marker',\n 'highlighter',\n 'eraser',\n 'move',\n 'undo',\n 'redo',\n];\n\nconst STUDENT_DEFAULT_TOOLS: TCueCanvasTool[] = ['pen', 'ruler', 'eraser', 'move', 'undo', 'redo'];\n\nexport const getUserTools = (userType: TUserTypes, renderAs: TRenderAs): TCueCanvasTool[] => {\n if (renderAs === 'whiteboard') {\n return userType === 'TEACHER' ? TEACHER_WHITEBOARD_TOOLS : STUDENT_WHITEBOARD_TOOLS;\n }\n\n return userType === 'TEACHER' ? TEACHER_DEFAULT_TOOLS : STUDENT_DEFAULT_TOOLS;\n};\n\nexport const getColorsForUser = (userType: TUserTypes, renderAs: TRenderAs = 'canvas') => {\n if (renderAs === 'whiteboard') {\n return Object.keys(CANVAS_COLORS).filter(\n color => !color.startsWith('CANVAS'),\n ) as TCueCanvasColors[];\n }\n\n return userType === 'TEACHER'\n ? (['CANVAS_RED', 'CANVAS_YELLOW', 'CANVAS_GREEN'] as TCueCanvasColors[])\n : (['CANVAS_BLUE', 'CANVAS_PURPLE', 'CANVAS_PINK'] as TCueCanvasColors[]);\n};\n\nexport const getIsWritingTool = (penTool: string) => {\n return ['pen', 'ruler', 'marker', 'highlighter'].includes(penTool);\n};\n\nexport const checkTextOrEquationTool = (payload: TCueCanvasChangeDataObject) => {\n return Object.values(payload).some(value => {\n if (\n !value[0] &&\n value[1] &&\n 'name' in value[1] &&\n (value[1].name === 'text' || value[1].name === 'equation')\n ) {\n return true;\n }\n\n return false;\n });\n};\n\nexport const dataURIToBlob = (dataURI: string): Blob => {\n const parts = dataURI.split(',');\n const metadata = parts[0] ?? '';\n const base64Data = parts[1] ?? '';\n\n const isBase64 = metadata.includes('base64');\n const byteString = isBase64 ? atob(base64Data) : decodeURIComponent(base64Data);\n\n const mimeTypeMatch = metadata.match(/:(.*?);/);\n const mimeType = mimeTypeMatch ? mimeTypeMatch[1] : 'application/octet-stream';\n\n const byteArray = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n byteArray[i] = byteString.charCodeAt(i);\n }\n\n return new Blob([byteArray], { type: mimeType });\n};\n\nexport const jsonToBlob = (json: unknown) => {\n const data = JSON.stringify(json);\n\n return new Blob([data], {\n type: 'application/json',\n });\n};\n"],"names":["GRID_NAMES","STATELESS_TOOLS","removeMask","canvasElementRef","shadowRoot","_a","xPolypad","svgCanvas","maskPath","removeTileButton","sidebar","tabsHeader","tabsBody","firstTabHeader","firstTabBody","removeMusicTiles","musicTiles","logicTiles","_b","getCanvasConfig","width","height","renderAs","userType","getCanvasSettings","getReverseAction","action","getReverseMap","data","newData","value","key","getToolAndSubtool","tool","TEACHER_WHITEBOARD_TOOLS","STUDENT_WHITEBOARD_TOOLS","TEACHER_DEFAULT_TOOLS","STUDENT_DEFAULT_TOOLS","getUserTools","getColorsForUser","CANVAS_COLORS","color","getIsWritingTool","penTool","checkTextOrEquationTool","payload","dataURIToBlob","dataURI","parts","metadata","base64Data","byteString","mimeTypeMatch","mimeType","byteArray","i"],"mappings":"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"}
|