@cuemath/leap 3.0.22-aa3 → 3.0.23-guru.0

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 (92) hide show
  1. package/dist/assets/line-icons/icons/check.js +3 -3
  2. package/dist/assets/line-icons/icons/check.js.map +1 -1
  3. package/dist/assets/line-icons/icons/lock3.js +34 -0
  4. package/dist/assets/line-icons/icons/lock3.js.map +1 -0
  5. package/dist/assets/line-icons/icons/unlock2.js +34 -0
  6. package/dist/assets/line-icons/icons/unlock2.js.map +1 -0
  7. package/dist/features/chapters-v2/chapter-details/block-sections/block-section-view.js +26 -22
  8. package/dist/features/chapters-v2/chapter-details/block-sections/block-section-view.js.map +1 -1
  9. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections.js +31 -55
  10. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections.js.map +1 -1
  11. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner.js +1 -1
  12. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner.js.map +1 -1
  13. package/dist/features/chapters-v2/chapter-details/chapter-details.js +58 -54
  14. package/dist/features/chapters-v2/chapter-details/chapter-details.js.map +1 -1
  15. package/dist/features/chapters-v2/comps/node-card/node-card-styled.js +1 -0
  16. package/dist/features/chapters-v2/comps/node-card/node-card-styled.js.map +1 -1
  17. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js +128 -107
  18. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js.map +1 -1
  19. package/dist/features/chapters-v2/constants/node-constants.js +3 -1
  20. package/dist/features/chapters-v2/constants/node-constants.js.map +1 -1
  21. package/dist/features/cue-canvas/cue-canvas-context.js +5 -8
  22. package/dist/features/cue-canvas/cue-canvas-context.js.map +1 -1
  23. package/dist/features/cue-canvas/cue-canvas-core.js +47 -51
  24. package/dist/features/cue-canvas/cue-canvas-core.js.map +1 -1
  25. package/dist/features/cue-canvas/cue-canvas-helpers.js +25 -31
  26. package/dist/features/cue-canvas/cue-canvas-helpers.js.map +1 -1
  27. package/dist/features/cue-canvas/cue-canvas-provider.js +12 -14
  28. package/dist/features/cue-canvas/cue-canvas-provider.js.map +1 -1
  29. package/dist/features/cue-canvas/cue-canvas.js +59 -61
  30. package/dist/features/cue-canvas/cue-canvas.js.map +1 -1
  31. package/dist/features/cue-canvas/cue-cavas-styled.js +42 -45
  32. package/dist/features/cue-canvas/cue-cavas-styled.js.map +1 -1
  33. package/dist/features/cue-canvas/hooks/use-canvas-sync-broker.js +46 -50
  34. package/dist/features/cue-canvas/hooks/use-canvas-sync-broker.js.map +1 -1
  35. package/dist/features/cue-canvas/hooks/use-cue-canvas-actions.js +14 -18
  36. package/dist/features/cue-canvas/hooks/use-cue-canvas-actions.js.map +1 -1
  37. package/dist/features/ui/stepper/stepper.js +7 -7
  38. package/dist/features/worksheet/worksheet/hooks/use-s3-helper.js +19 -22
  39. package/dist/features/worksheet/worksheet/hooks/use-s3-helper.js.map +1 -1
  40. package/dist/index.d.ts +7 -36
  41. package/dist/index.js +357 -357
  42. package/package.json +1 -1
  43. package/dist/assets/line-icons/icons/puzzle-icon.js +0 -51
  44. package/dist/assets/line-icons/icons/puzzle-icon.js.map +0 -1
  45. package/dist/assets/line-icons/icons/share.js +0 -48
  46. package/dist/assets/line-icons/icons/share.js.map +0 -1
  47. package/dist/assets/line-icons/icons/tile.js +0 -54
  48. package/dist/assets/line-icons/icons/tile.js.map +0 -1
  49. package/dist/features/cue-canvas/bottombar/homework-controls.js +0 -73
  50. package/dist/features/cue-canvas/bottombar/homework-controls.js.map +0 -1
  51. package/dist/features/cue-canvas/hooks/use-upload-helper.js +0 -23
  52. package/dist/features/cue-canvas/hooks/use-upload-helper.js.map +0 -1
  53. package/dist/features/cue-canvas/sidebar/homework/helper.js +0 -20
  54. package/dist/features/cue-canvas/sidebar/homework/helper.js.map +0 -1
  55. package/dist/features/cue-canvas/sidebar/homework/homework-menu.js +0 -33
  56. package/dist/features/cue-canvas/sidebar/homework/homework-menu.js.map +0 -1
  57. package/dist/features/cue-canvas/sidebar/homework/homework-request.js +0 -61
  58. package/dist/features/cue-canvas/sidebar/homework/homework-request.js.map +0 -1
  59. package/dist/features/cue-canvas/sidebar/homework/homework-styled.js +0 -25
  60. package/dist/features/cue-canvas/sidebar/homework/homework-styled.js.map +0 -1
  61. package/dist/features/cue-canvas/sidebar/homework/homework.js +0 -39
  62. package/dist/features/cue-canvas/sidebar/homework/homework.js.map +0 -1
  63. package/dist/features/cue-canvas/sidebar/puzzles/api/get-puzzles.js +0 -13
  64. package/dist/features/cue-canvas/sidebar/puzzles/api/get-puzzles.js.map +0 -1
  65. package/dist/features/cue-canvas/sidebar/puzzles/filter-selection-menu.js +0 -60
  66. package/dist/features/cue-canvas/sidebar/puzzles/filter-selection-menu.js.map +0 -1
  67. package/dist/features/cue-canvas/sidebar/puzzles/filters-section.js +0 -44
  68. package/dist/features/cue-canvas/sidebar/puzzles/filters-section.js.map +0 -1
  69. package/dist/features/cue-canvas/sidebar/puzzles/filters.js +0 -107
  70. package/dist/features/cue-canvas/sidebar/puzzles/filters.js.map +0 -1
  71. package/dist/features/cue-canvas/sidebar/puzzles/hooks/use-fetch-cue-canvas-activity.js +0 -42
  72. package/dist/features/cue-canvas/sidebar/puzzles/hooks/use-fetch-cue-canvas-activity.js.map +0 -1
  73. package/dist/features/cue-canvas/sidebar/puzzles/launch-puzzle.js +0 -84
  74. package/dist/features/cue-canvas/sidebar/puzzles/launch-puzzle.js.map +0 -1
  75. package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu-header.js +0 -36
  76. package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu-header.js.map +0 -1
  77. package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu.js +0 -133
  78. package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu.js.map +0 -1
  79. package/dist/features/cue-canvas/sidebar/puzzles/puzzles-styled.js +0 -96
  80. package/dist/features/cue-canvas/sidebar/puzzles/puzzles-styled.js.map +0 -1
  81. package/dist/features/cue-canvas/sidebar/puzzles/puzzles.js +0 -29
  82. package/dist/features/cue-canvas/sidebar/puzzles/puzzles.js.map +0 -1
  83. package/dist/features/cue-canvas/sidebar/puzzles/utils.js +0 -120
  84. package/dist/features/cue-canvas/sidebar/puzzles/utils.js.map +0 -1
  85. package/dist/features/cue-canvas/sidebar/sidebar-styled.js +0 -32
  86. package/dist/features/cue-canvas/sidebar/sidebar-styled.js.map +0 -1
  87. package/dist/features/cue-canvas/sidebar/sidebar.js +0 -29
  88. package/dist/features/cue-canvas/sidebar/sidebar.js.map +0 -1
  89. package/dist/features/cue-canvas/sidebar/tiles/tile.js +0 -16
  90. package/dist/features/cue-canvas/sidebar/tiles/tile.js.map +0 -1
  91. package/dist/features/hooks/use-debounce.js +0 -16
  92. package/dist/features/hooks/use-debounce.js.map +0 -1
@@ -1,75 +1,71 @@
1
1
  import { useMessageBrokerChannel as q } from "@cuemath/cue-message-broker";
2
2
  import { useState as x, useRef as w, useMemo as E, useCallback as h } from "react";
3
- const p = (r) => ({
4
- userId: r.userId,
5
- data: r.data,
6
- height: r.height,
7
- responseId: r.responseId,
8
- gridName: r.gridName,
9
- dimension: r.dimension
10
- }), F = (r, g, f, m = "canvas") => {
11
- const [b, l] = x(
3
+ const I = (c) => ({
4
+ userId: c.userId,
5
+ data: c.data,
6
+ height: c.height,
7
+ responseId: c.responseId
8
+ }), F = (c, f, g) => {
9
+ const [d, m] = x(
12
10
  () => {
13
- var o, n;
14
- const c = {};
15
- if (!f) return c;
16
- for (const { message: i } of f) {
17
- const e = (o = i.payload) == null ? void 0 : o.eventPayload, s = e == null ? void 0 : e.responseId;
11
+ var o, r;
12
+ const n = {};
13
+ if (!g) return n;
14
+ for (const { message: a } of g) {
15
+ const e = (o = a.payload) == null ? void 0 : o.eventPayload, s = e == null ? void 0 : e.responseId;
18
16
  if (!(e != null && e.responseId)) continue;
19
- const t = p(e);
20
- s && c[s] ? (n = c[s]) == null || n.push(t) : c[s] = [t];
17
+ const t = I(e);
18
+ s && n[s] ? (r = n[s]) == null || r.push(t) : n[s] = [t];
21
19
  }
22
- return c;
20
+ return n;
23
21
  }
24
- ), u = w({}), S = E(
22
+ ), u = w({}), b = E(
25
23
  () => ({
26
- channelId: r,
27
- ttl: m === "canvas" ? 0 : 24,
28
- logger: g
24
+ channelId: c,
25
+ ttl: 0,
26
+ logger: f
29
27
  }),
30
- [r, g, m]
31
- ), C = h((c, o) => {
32
- u.current = { ...u.current, [c]: o };
33
- }, []), D = h(
34
- (c, o) => {
35
- const n = {};
36
- c.forEach((i) => {
37
- var I;
38
- const { payload: e } = i.message, { eventPayload: s } = e, t = s == null ? void 0 : s.responseId, R = s == null ? void 0 : s.data, B = s == null ? void 0 : s.userId, j = s == null ? void 0 : s.height, k = u.current[t];
39
- if (!o && k)
40
- k({
28
+ [c, f]
29
+ ), S = h((n, o) => {
30
+ u.current = { ...u.current, [n]: o };
31
+ }, []), C = h(
32
+ (n, o) => {
33
+ const r = {};
34
+ n.forEach((a) => {
35
+ var p;
36
+ const { payload: e } = a.message, { eventPayload: s } = e, t = s == null ? void 0 : s.responseId, R = s == null ? void 0 : s.data, B = s == null ? void 0 : s.userId, j = s == null ? void 0 : s.height, l = u.current[t];
37
+ if (!o && l)
38
+ l({
41
39
  data: R,
42
40
  height: j,
43
41
  userId: B,
44
- responseId: t,
45
- gridName: s == null ? void 0 : s.gridName,
46
- dimension: s == null ? void 0 : s.dimension
42
+ responseId: t
47
43
  });
48
44
  else {
49
- const d = p(s);
50
- t && n[t] ? (I = n[t]) == null || I.push(d) : n[t] = [d];
45
+ const k = I(s);
46
+ t && r[t] ? (p = r[t]) == null || p.push(k) : r[t] = [k];
51
47
  }
52
- }), Object.keys(n).length > 0 && l((i) => {
53
- const e = { ...i };
54
- return Object.keys(n).forEach((s) => {
48
+ }), Object.keys(r).length > 0 && m((a) => {
49
+ const e = { ...a };
50
+ return Object.keys(r).forEach((s) => {
55
51
  var t;
56
- s && e[s] ? (t = e[s]) == null || t.push(...n[s] ?? []) : e[s] = n[s] ?? [];
52
+ s && e[s] ? (t = e[s]) == null || t.push(...r[s] ?? []) : e[s] = r[s] ?? [];
57
53
  }), e;
58
54
  });
59
55
  },
60
56
  []
61
- ), { publish: M, channelStatus: N, channel: a } = q({
62
- channelOptions: S,
63
- consumerFn: D
57
+ ), { publish: D, channelStatus: M, channel: i } = q({
58
+ channelOptions: b,
59
+ consumerFn: C
64
60
  }), O = h(() => {
65
- a && a.destroyChannel();
66
- }, [a]);
61
+ i && i.destroyChannel();
62
+ }, [i]);
67
63
  return {
68
- publishStrokes: M,
69
- channelStatus: N,
64
+ publishStrokes: D,
65
+ channelStatus: M,
70
66
  closeChannel: O,
71
- initialStrokesData: b,
72
- registerCallback: C
67
+ initialStrokesData: d,
68
+ registerCallback: S
73
69
  };
74
70
  }, $ = F;
75
71
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"use-canvas-sync-broker.js","sources":["../../../../src/features/cue-canvas/hooks/use-canvas-sync-broker.ts"],"sourcesContent":["import type {\n IActionData,\n IViewport,\n TCueCanvasChangeDataObject,\n TCueCanvasGridName,\n TRenderAs,\n} from '../types/cue-canvas';\n\nimport { useMessageBrokerChannel, type IChannelMessage } from '@cuemath/cue-message-broker';\nimport { useMemo, useCallback, useState, useRef } from 'react';\n\ninterface IMessage {\n eventName: string;\n eventPayload: {\n responseId: string;\n data: TCueCanvasChangeDataObject;\n userId: string;\n height: number;\n gridName?: TCueCanvasGridName;\n dimension?: IViewport;\n };\n}\n\nconst extractStrokeData = (payload: IMessage['eventPayload']): IActionData => ({\n userId: payload.userId,\n data: payload.data,\n height: payload.height,\n responseId: payload.responseId,\n gridName: payload.gridName,\n dimension: payload.dimension,\n});\n\nconst useCanvasSyncBroker = (\n channelId: string,\n logEvent: (type: string, payload?: Record<string, unknown>) => void,\n initialCanvasData?: Array<IChannelMessage>,\n type: TRenderAs = 'canvas',\n) => {\n const [initialStrokesData, setInitialStrokesData] = useState<Record<string, IActionData[]>>(\n () => {\n const map: Record<string, IActionData[]> = {};\n\n if (!initialCanvasData) return map;\n\n for (const { message } of initialCanvasData) {\n const payload = (message.payload as IMessage)?.eventPayload;\n const qrId = payload?.responseId;\n\n if (!payload?.responseId) continue;\n\n const strokeData = extractStrokeData(payload);\n\n if (qrId && map[qrId]) {\n map[qrId]?.push(strokeData);\n } else {\n map[qrId] = [strokeData];\n }\n }\n\n return map;\n },\n );\n const callbacksMapRef = useRef<Record<string, (data: IActionData) => void>>({});\n\n const channelOptions = useMemo(\n () => ({\n channelId,\n ttl: type === 'canvas' ? 0 : 24,\n logger: logEvent,\n }),\n [channelId, logEvent, type],\n );\n\n const registerCallback = useCallback((qrId: string, cb: (data: IActionData) => void) => {\n callbacksMapRef.current = { ...callbacksMapRef.current, [qrId]: cb };\n }, []);\n\n const onMessageReceive = useCallback(\n (messages: Array<IChannelMessage>, initialData?: boolean) => {\n const strokesPerWidgetMap: Record<string, Array<IActionData>> = {};\n\n messages.forEach(message => {\n const { payload } = message.message;\n const { eventPayload } = payload as IMessage;\n const qrId = eventPayload?.responseId as string;\n const strokes = eventPayload?.data;\n const userId = eventPayload?.userId;\n const canvasHeight = eventPayload?.height;\n const widgetOnReceiveCallback = callbacksMapRef.current[qrId];\n\n if (!initialData && widgetOnReceiveCallback) {\n widgetOnReceiveCallback({\n data: strokes,\n height: canvasHeight,\n userId,\n responseId: qrId,\n gridName: eventPayload?.gridName,\n dimension: eventPayload?.dimension,\n });\n } else {\n const strokeData = extractStrokeData(eventPayload);\n\n if (qrId && strokesPerWidgetMap[qrId]) {\n strokesPerWidgetMap[qrId]?.push(strokeData);\n } else {\n strokesPerWidgetMap[qrId] = [strokeData];\n }\n }\n });\n\n if (Object.keys(strokesPerWidgetMap).length > 0) {\n setInitialStrokesData(prevData => {\n const currentData = { ...prevData };\n\n Object.keys(strokesPerWidgetMap).forEach(key => {\n if (key && currentData[key]) {\n currentData[key]?.push(...(strokesPerWidgetMap[key] ?? []));\n } else {\n currentData[key] = strokesPerWidgetMap[key] ?? [];\n }\n });\n\n return currentData;\n });\n }\n },\n [],\n );\n\n const { publish, channelStatus, channel } = useMessageBrokerChannel({\n channelOptions,\n consumerFn: onMessageReceive,\n });\n\n const closeChannel = useCallback(() => {\n if (channel) {\n channel.destroyChannel();\n }\n }, [channel]);\n\n return {\n publishStrokes: publish,\n channelStatus,\n closeChannel,\n initialStrokesData,\n registerCallback,\n };\n};\n\nexport default useCanvasSyncBroker;\n"],"names":["extractStrokeData","payload","useCanvasSyncBroker","channelId","logEvent","initialCanvasData","type","initialStrokesData","setInitialStrokesData","useState","map","message","_a","qrId","strokeData","_b","callbacksMapRef","useRef","channelOptions","useMemo","registerCallback","useCallback","cb","onMessageReceive","messages","initialData","strokesPerWidgetMap","eventPayload","strokes","userId","canvasHeight","widgetOnReceiveCallback","prevData","currentData","key","publish","channelStatus","channel","useMessageBrokerChannel","closeChannel","useCanvasSyncBroker$1"],"mappings":"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"}
1
+ {"version":3,"file":"use-canvas-sync-broker.js","sources":["../../../../src/features/cue-canvas/hooks/use-canvas-sync-broker.ts"],"sourcesContent":["import type { IActionData, TCueCanvasChangeDataObject } from '../types/cue-canvas';\n\nimport { useMessageBrokerChannel, type IChannelMessage } from '@cuemath/cue-message-broker';\nimport { useMemo, useCallback, useState, useRef } from 'react';\n\ninterface IMessage {\n eventName: string;\n eventPayload: {\n responseId: string;\n data: TCueCanvasChangeDataObject;\n userId: string;\n height: number;\n };\n}\n\nconst extractStrokeData = (payload: IMessage['eventPayload']): IActionData => ({\n userId: payload.userId,\n data: payload.data,\n height: payload.height,\n responseId: payload.responseId,\n});\n\nconst useCanvasSyncBroker = (\n channelId: string,\n logEvent: (type: string, payload?: Record<string, unknown>) => void,\n initialCanvasData?: Array<IChannelMessage>,\n) => {\n const [initialStrokesData, setInitialStrokesData] = useState<Record<string, IActionData[]>>(\n () => {\n const map: Record<string, IActionData[]> = {};\n\n if (!initialCanvasData) return map;\n\n for (const { message } of initialCanvasData) {\n const payload = (message.payload as IMessage)?.eventPayload;\n const qrId = payload?.responseId;\n\n if (!payload?.responseId) continue;\n\n const strokeData = extractStrokeData(payload);\n\n if (qrId && map[qrId]) {\n map[qrId]?.push(strokeData);\n } else {\n map[qrId] = [strokeData];\n }\n }\n\n return map;\n },\n );\n const callbacksMapRef = useRef<Record<string, (data: IActionData) => void>>({});\n\n const channelOptions = useMemo(\n () => ({\n channelId,\n ttl: 0,\n logger: logEvent,\n }),\n [channelId, logEvent],\n );\n\n const registerCallback = useCallback((qrId: string, cb: (data: IActionData) => void) => {\n callbacksMapRef.current = { ...callbacksMapRef.current, [qrId]: cb };\n }, []);\n\n const onMessageReceive = useCallback(\n (messages: Array<IChannelMessage>, initialData?: boolean) => {\n const strokesPerWidgetMap: Record<string, Array<IActionData>> = {};\n\n messages.forEach(message => {\n const { payload } = message.message;\n const { eventPayload } = payload as IMessage;\n const qrId = eventPayload?.responseId as string;\n const strokes = eventPayload?.data;\n const userId = eventPayload?.userId;\n const canvasHeight = eventPayload?.height;\n const widgetOnReceiveCallback = callbacksMapRef.current[qrId];\n\n if (!initialData && widgetOnReceiveCallback) {\n widgetOnReceiveCallback({\n data: strokes,\n height: canvasHeight,\n userId,\n responseId: qrId,\n });\n } else {\n const strokeData = extractStrokeData(eventPayload);\n\n if (qrId && strokesPerWidgetMap[qrId]) {\n strokesPerWidgetMap[qrId]?.push(strokeData);\n } else {\n strokesPerWidgetMap[qrId] = [strokeData];\n }\n }\n });\n\n if (Object.keys(strokesPerWidgetMap).length > 0) {\n setInitialStrokesData(prevData => {\n const currentData = { ...prevData };\n\n Object.keys(strokesPerWidgetMap).forEach(key => {\n if (key && currentData[key]) {\n currentData[key]?.push(...(strokesPerWidgetMap[key] ?? []));\n } else {\n currentData[key] = strokesPerWidgetMap[key] ?? [];\n }\n });\n\n return currentData;\n });\n }\n },\n [],\n );\n\n const { publish, channelStatus, channel } = useMessageBrokerChannel({\n channelOptions,\n consumerFn: onMessageReceive,\n });\n\n const closeChannel = useCallback(() => {\n if (channel) {\n channel.destroyChannel();\n }\n }, [channel]);\n\n return {\n publishStrokes: publish,\n channelStatus,\n closeChannel,\n initialStrokesData,\n registerCallback,\n };\n};\n\nexport default useCanvasSyncBroker;\n"],"names":["extractStrokeData","payload","useCanvasSyncBroker","channelId","logEvent","initialCanvasData","initialStrokesData","setInitialStrokesData","useState","map","message","_a","qrId","strokeData","_b","callbacksMapRef","useRef","channelOptions","useMemo","registerCallback","useCallback","cb","onMessageReceive","messages","initialData","strokesPerWidgetMap","eventPayload","strokes","userId","canvasHeight","widgetOnReceiveCallback","prevData","currentData","key","publish","channelStatus","channel","useMessageBrokerChannel","closeChannel","useCanvasSyncBroker$1"],"mappings":"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"}
@@ -1,32 +1,28 @@
1
- import { useContext as a, useMemo as m } from "react";
2
- import v from "../cue-canvas-context.js";
3
- const A = () => {
1
+ import { useContext as c, useMemo as l } from "react";
2
+ import a from "../cue-canvas-context.js";
3
+ const m = () => {
4
4
  const {
5
- activeInstance: o,
6
- setActiveTool: t,
5
+ activeInstance: t,
6
+ setActiveTool: o,
7
7
  activeTool: e,
8
- setActiveInstance: r,
8
+ setActiveInstance: i,
9
9
  activeColor: s,
10
- setActiveColor: i,
11
- homeworkId: n,
12
- setHomeworkId: c
13
- } = a(v), l = m(
10
+ setActiveColor: n
11
+ } = c(a), r = l(
14
12
  () => e ? ["pen", "ruler", "highlighter", "marker"].includes(e) : !1,
15
13
  [e]
16
14
  );
17
15
  return {
18
- activeInstance: o,
19
- setActiveTool: t,
16
+ activeInstance: t,
17
+ setActiveTool: o,
20
18
  activeTool: e,
21
- setActiveInstance: r,
19
+ setActiveInstance: i,
22
20
  activeColor: s,
23
- setActiveColor: i,
24
- isWritingToolActive: l,
25
- homeworkId: n,
26
- setHomeworkId: c
21
+ setActiveColor: n,
22
+ isWritingToolActive: r
27
23
  };
28
24
  };
29
25
  export {
30
- A as useCueCanvasActions
26
+ m as useCueCanvasActions
31
27
  };
32
28
  //# sourceMappingURL=use-cue-canvas-actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-cue-canvas-actions.js","sources":["../../../../src/features/cue-canvas/hooks/use-cue-canvas-actions.ts"],"sourcesContent":["import { useContext, useMemo } from 'react';\n\nimport PolyContext from '../cue-canvas-context';\n\nexport const useCueCanvasActions = () => {\n const {\n activeInstance,\n setActiveTool,\n activeTool,\n setActiveInstance,\n activeColor,\n setActiveColor,\n homeworkId,\n setHomeworkId,\n } = useContext(PolyContext);\n\n const isWritingToolActive = useMemo(\n () => (activeTool ? ['pen', 'ruler', 'highlighter', 'marker'].includes(activeTool) : false),\n [activeTool],\n );\n\n return {\n activeInstance,\n setActiveTool,\n activeTool,\n setActiveInstance,\n activeColor,\n setActiveColor,\n isWritingToolActive,\n homeworkId,\n setHomeworkId,\n };\n};\n"],"names":["useCueCanvasActions","activeInstance","setActiveTool","activeTool","setActiveInstance","activeColor","setActiveColor","homeworkId","setHomeworkId","useContext","PolyContext","isWritingToolActive","useMemo"],"mappings":";;AAIO,MAAMA,IAAsB,MAAM;AACjC,QAAA;AAAA,IACJ,gBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,EAAA,IACEC,EAAWC,CAAW,GAEpBC,IAAsBC;AAAA,IAC1B,MAAOT,IAAa,CAAC,OAAO,SAAS,eAAe,QAAQ,EAAE,SAASA,CAAU,IAAI;AAAA,IACrF,CAACA,CAAU;AAAA,EAAA;AAGN,SAAA;AAAA,IACL,gBAAAF;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,qBAAAK;AAAA,IACA,YAAAJ;AAAA,IACA,eAAAC;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"use-cue-canvas-actions.js","sources":["../../../../src/features/cue-canvas/hooks/use-cue-canvas-actions.ts"],"sourcesContent":["import { useContext, useMemo } from 'react';\n\nimport PolyContext from '../cue-canvas-context';\n\nexport const useCueCanvasActions = () => {\n const {\n activeInstance,\n setActiveTool,\n activeTool,\n setActiveInstance,\n activeColor,\n setActiveColor,\n } = useContext(PolyContext);\n\n const isWritingToolActive = useMemo(\n () => (activeTool ? ['pen', 'ruler', 'highlighter', 'marker'].includes(activeTool) : false),\n [activeTool],\n );\n\n return {\n activeInstance,\n setActiveTool,\n activeTool,\n setActiveInstance,\n activeColor,\n setActiveColor,\n isWritingToolActive,\n };\n};\n"],"names":["useCueCanvasActions","activeInstance","setActiveTool","activeTool","setActiveInstance","activeColor","setActiveColor","useContext","PolyContext","isWritingToolActive","useMemo"],"mappings":";;AAIO,MAAMA,IAAsB,MAAM;AACjC,QAAA;AAAA,IACJ,gBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,IACEC,EAAWC,CAAW,GAEpBC,IAAsBC;AAAA,IAC1B,MAAOP,IAAa,CAAC,OAAO,SAAS,eAAe,QAAQ,EAAE,SAASA,CAAU,IAAI;AAAA,IACrF,CAACA,CAAU;AAAA,EAAA;AAGN,SAAA;AAAA,IACL,gBAAAF;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,qBAAAG;AAAA,EAAA;AAEJ;"}
@@ -1,14 +1,14 @@
1
1
  import { jsxs as o, jsx as t } from "react/jsx-runtime";
2
- import l from "../../../assets/line-icons/icons/check.js";
3
- import m from "../text/text.js";
2
+ import m from "../../../assets/line-icons/icons/check.js";
3
+ import h 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 W({ stepsInfo: n = [], currentStep: e = 2 }) {
7
+ function j({ 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: h }, r) => /* @__PURE__ */ o(
11
+ n.map(({ id: $, label: l }, r) => /* @__PURE__ */ o(
12
12
  g,
13
13
  {
14
14
  $flexDirection: "row",
@@ -25,10 +25,10 @@ function W({ 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(l, { height: i, width: i }) : /* @__PURE__ */ t(m, { $renderAs: "body3", $color: "WHITE", children: $ })
28
+ children: r + 1 < e ? /* @__PURE__ */ t(m, { height: i, width: i }) : /* @__PURE__ */ t(h, { $renderAs: "body3", $color: "WHITE", children: $ })
29
29
  }
30
30
  ),
31
- r + 1 === e && /* @__PURE__ */ t(s, { $renderAs: "body2", children: h })
31
+ r + 1 === e && /* @__PURE__ */ t(s, { $renderAs: "body2", children: l })
32
32
  ]
33
33
  },
34
34
  r
@@ -36,6 +36,6 @@ function W({ stepsInfo: n = [], currentStep: e = 2 }) {
36
36
  ] });
37
37
  }
38
38
  export {
39
- W as default
39
+ j as default
40
40
  };
41
41
  //# sourceMappingURL=stepper.js.map
@@ -1,36 +1,33 @@
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;
1
+ import { useEffect as g, useCallback as w } from "react";
2
+ import { useAwsSignedKey as S } from "../api/subjective-review.js";
3
+ import h from "../../../../node_modules/uuid/dist/esm-browser/v4.js";
4
+ const A = (c) => {
5
+ const { studentId: t, query: o } = c, { data: a, get: s } = S();
6
+ return g(() => {
7
+ s(t, o);
8
+ }, [o, s, t]), w(
9
+ async ({ images: d, onSuccess: i, onError: l, fileKey: u, fileName: m }) => {
13
10
  if (!a) return;
14
- const i = `https://${a.bucketName}.s3.amazonaws.com/`;
11
+ const r = `https://${a.bucketName}.s3.amazonaws.com/`;
15
12
  try {
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, {
13
+ const n = d.map(async (f) => {
14
+ const e = new FormData(), p = `${u}${m ?? h()}`;
15
+ if (e.append("key", p), 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", f.file), !(await fetch(r, {
19
16
  method: "POST",
20
17
  body: e
21
18
  })).ok)
22
19
  throw new Error("Upload failed");
23
- return `${i}${m}`;
24
- }), u = await Promise.all(l);
25
- return n == null || n(u), u;
20
+ return `${r}${p}`;
21
+ }), y = await Promise.all(n);
22
+ i(y);
26
23
  } catch {
27
- p == null || p();
24
+ l();
28
25
  }
29
26
  },
30
- []
27
+ [a]
31
28
  );
32
29
  };
33
30
  export {
34
- C as default
31
+ A as default
35
32
  };
36
33
  //# 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, 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
+ {"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 IUseS3helper {\n (params: {\n studentId: string;\n query: {\n type: string;\n };\n }): (props: IUploadImageProps) => void;\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: IUseS3helper = props => {\n const { studentId, query } = props;\n const { data: awsSignedKey, get: getAwsSignedKey } = useAwsSignedKey();\n\n useEffect(() => {\n getAwsSignedKey(studentId, query);\n }, [query, getAwsSignedKey, studentId]);\n\n const uploadImagesToS3 = useCallback(\n async ({ images, onSuccess, onError, fileKey, fileName }: IUploadImageProps) => {\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 } catch (error) {\n onError();\n }\n },\n [awsSignedKey],\n );\n\n return uploadImagesToS3;\n};\n\nexport default useS3ImageUploadHelper;\n"],"names":["useS3ImageUploadHelper","props","studentId","query","awsSignedKey","getAwsSignedKey","useAwsSignedKey","useEffect","useCallback","images","onSuccess","onError","fileKey","fileName","url","uploadPromises","item","formData","key","uuidv4","uploadedUrls"],"mappings":";;;AAwBA,MAAMA,IAAuC,CAASC,MAAA;AAC9C,QAAA,EAAE,WAAAC,GAAW,OAAAC,EAAU,IAAAF,GACvB,EAAE,MAAMG,GAAc,KAAKC,EAAA,IAAoBC;AAErD,SAAAC,EAAU,MAAM;AACd,IAAAF,EAAgBH,GAAWC,CAAK;AAAA,EAC/B,GAAA,CAACA,GAAOE,GAAiBH,CAAS,CAAC,GAEbM;AAAA,IACvB,OAAO,EAAE,QAAAC,GAAQ,WAAAC,GAAW,SAAAC,GAAS,SAAAC,GAAS,UAAAC,QAAkC;AAC9E,UAAI,CAACT,EAAc;AAEb,YAAAU,IAAM,WAAWV,EAAa,UAAU;AAE1C,UAAA;AACF,cAAMW,IAAiBN,EAAO,IAAI,OAAOO,MAAkC;AACnE,gBAAAC,IAAW,IAAI,YACfC,IAAM,GAAGN,CAAO,GAAGC,KAAYM,EAAQ,CAAA;AAgBzC,cAdKF,EAAA,OAAO,OAAOC,CAAG,GACjBD,EAAA,OAAO,kBAAkBb,EAAa,MAAM,GAC5Ca,EAAA,OAAO,OAAO,aAAa,GAC3BA,EAAA,OAAO,2BAA2B,EAAE,GACpCA,EAAA,OAAO,UAAUb,EAAa,MAAM,GACpCa,EAAA,OAAO,aAAab,EAAa,SAAS,GAC1Ca,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,QAAAL,EAAUU,CAAY;AAAA,cACR;AACN,QAAAT;MACV;AAAA,IACF;AAAA,IACA,CAACP,CAAY;AAAA,EAAA;AAIjB;"}
package/dist/index.d.ts CHANGED
@@ -295,14 +295,10 @@ export declare const CueCanvas: React.FC<ICueCanvas>;
295
295
 
296
296
  export declare const CueCanvasController: React_2.FC<IToolbarProps>;
297
297
 
298
- export declare const CueCanvasHomeworkController: NamedExoticComponent<IHomeWorkControllerProps>;
299
-
300
298
  export declare const CueCanvasProvider: FC<PropsWithChildren<{
301
299
  userType: TUserTypes;
302
300
  }>>;
303
301
 
304
- export declare const CueCanvasSideBar: NamedExoticComponent<ISidebar>;
305
-
306
302
  export declare const CuemathLogo: React_2.FC<React_2.SVGProps<SVGSVGElement>>;
307
303
 
308
304
  export declare const CueRocket: React.FC<React.SVGProps<SVGSVGElement>>;
@@ -1482,30 +1478,6 @@ export declare interface IHomepageStartJourneyProps {
1482
1478
  userType: TUserTypes;
1483
1479
  }
1484
1480
 
1485
- declare interface IHomeWorkControllerProps {
1486
- width: number;
1487
- hwRequests?: IHomeWorkHelpRequestModel[];
1488
- onMarkAsResolved?: (homeworkId: string, onSuccess: () => void) => void;
1489
- onSendImageToChat?: (homeworkId: string, snapshot: Blob[], onSuccess: () => void) => void;
1490
- }
1491
-
1492
- export declare interface IHomeWorkHelpRequestModel {
1493
- channel_id: string;
1494
- created_on_ts: number;
1495
- homework_id: string;
1496
- id: string;
1497
- message_timestamp: string;
1498
- problem_description: string;
1499
- problem_image_urls: string[];
1500
- state: string;
1501
- student_id: string;
1502
- teacher_id: string;
1503
- }
1504
-
1505
- declare interface IHomeWorkHelpRequestModelWithStudentName extends IHomeWorkHelpRequestModel {
1506
- student_name: string;
1507
- }
1508
-
1509
1481
  declare interface IIconButtonProps extends Omit<IButtonProps, 'label' | 'shape' | 'widthX' | 'width' | 'iconPosition' | 'alignSelf' | 'analyticsLabel' | 'renderAs'>, Required<Pick<IClickableAnalyticsProps, 'analyticsLabel'>> {
1510
1482
  Icon: React.FC<React.SVGProps<SVGSVGElement>>;
1511
1483
  customBgColor?: TColorNames;
@@ -2391,6 +2363,7 @@ declare interface INodeCardCallbacks {
2391
2363
  onNodeMarkAsDone?: (nodeData: INodeDataProps) => void;
2392
2364
  onNodeReset?: (nodeData: INodeDataProps, milestoneId?: string) => void;
2393
2365
  onNodeUnassign?: (nodeData: INodeDataProps, milestoneId?: string) => void;
2366
+ onNodeUnlock?: (nodeData: INodeDataProps, milestoneId?: string) => void;
2394
2367
  }
2395
2368
 
2396
2369
  export declare interface INodeDataProps {
@@ -2443,6 +2416,7 @@ declare interface INodePermissions {
2443
2416
  can_start: boolean;
2444
2417
  can_teacher_review: boolean;
2445
2418
  can_unassign: boolean;
2419
+ can_unlock: boolean;
2446
2420
  }
2447
2421
 
2448
2422
  export declare const InputStatusIcon: NamedExoticComponent<IInputStatusIconProps>;
@@ -2994,11 +2968,6 @@ declare interface ISheetsListProps extends ISheetItemCallbackProps {
2994
2968
  section?: TSheetsSection;
2995
2969
  }
2996
2970
 
2997
- declare interface ISidebar {
2998
- grade?: string;
2999
- hwRequests?: IHomeWorkHelpRequestModelWithStudentName[];
3000
- }
3001
-
3002
2971
  declare interface ISignupMethodsProps {
3003
2972
  onEmailSignup: () => void;
3004
2973
  onPhoneSignup: () => void;
@@ -3367,8 +3336,6 @@ declare interface ITile {
3367
3336
  toPort?: string;
3368
3337
  toTileId: string;
3369
3338
  }[];
3370
- html?: string;
3371
- width?: number | string;
3372
3339
  }
3373
3340
 
3374
3341
  declare interface ITimeLeftTimelineProps {
@@ -3979,6 +3946,8 @@ export declare const loadScript: ILoadScript;
3979
3946
 
3980
3947
  export declare const Lock2Icon: React_2.FC<React_2.SVGProps<SVGSVGElement>>;
3981
3948
 
3949
+ export declare const Lock3Icon: React.FC<React.SVGProps<SVGSVGElement>>;
3950
+
3982
3951
  export declare const LockIcon: React.FC<React.SVGProps<SVGSVGElement>>;
3983
3952
 
3984
3953
  export declare const LOTTIE: {
@@ -5639,13 +5608,15 @@ declare interface UIContextProps {
5639
5608
 
5640
5609
  export declare const UndoIcon: React.FC<React.SVGProps<SVGSVGElement>>;
5641
5610
 
5611
+ export declare const Unlock2Icon: React.FC<React.SVGProps<SVGSVGElement>>;
5612
+
5642
5613
  export declare const UnlockIcon: React.FC<React.SVGProps<SVGSVGElement>>;
5643
5614
 
5644
5615
  export declare const UpIcon: React.FC<React.SVGProps<SVGSVGElement>>;
5645
5616
 
5646
5617
  export declare const useAutoPlayPermission: () => IAutoPlayPermissionContextType;
5647
5618
 
5648
- export declare const useCanvasSyncBroker: (channelId: string, logEvent: (type: string, payload?: Record<string, unknown>) => void, initialCanvasData?: Array<IChannelMessage>, type?: TRenderAs_2) => {
5619
+ export declare const useCanvasSyncBroker: (channelId: string, logEvent: (type: string, payload?: Record<string, unknown>) => void, initialCanvasData?: Array<IChannelMessage>) => {
5649
5620
  publishStrokes: ((message: unknown) => boolean) | undefined;
5650
5621
  channelStatus: ChannelStatus | undefined;
5651
5622
  closeChannel: () => void;