@cuemath/leap 3.1.5 → 3.1.6-j1

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 (192) hide show
  1. package/dist/assets/illustrations/illustrations.js +1 -2
  2. package/dist/assets/illustrations/illustrations.js.map +1 -1
  3. package/dist/assets/lib/lib.js +1 -1
  4. package/dist/assets/lib/lib.js.map +1 -1
  5. package/dist/assets/line-icons/icons/check.js +3 -3
  6. package/dist/assets/line-icons/icons/check.js.map +1 -1
  7. package/dist/features/auth/account-selector/account-selector-styled.js +9 -0
  8. package/dist/features/auth/account-selector/account-selector-styled.js.map +1 -0
  9. package/dist/features/auth/account-selector/account-selector.js +57 -33
  10. package/dist/features/auth/account-selector/account-selector.js.map +1 -1
  11. package/dist/features/auth/comps/auth-page-layout/auth-page-layout-styled.js +21 -0
  12. package/dist/features/auth/comps/auth-page-layout/auth-page-layout-styled.js.map +1 -0
  13. package/dist/features/auth/comps/auth-page-layout/auth-page-layout.js +8 -9
  14. package/dist/features/auth/comps/auth-page-layout/auth-page-layout.js.map +1 -1
  15. package/dist/features/auth/comps/auth-static-panel/auth-static-panel.js +1 -1
  16. package/dist/features/auth/comps/auth-static-panel/auth-static-panel.js.map +1 -1
  17. package/dist/features/auth/forgot-password/forgot-password-styled.js +15 -3
  18. package/dist/features/auth/forgot-password/forgot-password-styled.js.map +1 -1
  19. package/dist/features/auth/forgot-password/otp-form/otp-form.js +29 -29
  20. package/dist/features/auth/forgot-password/otp-form/otp-form.js.map +1 -1
  21. package/dist/features/auth/forgot-password/reset-password-form/reset-password-form.js +14 -18
  22. package/dist/features/auth/forgot-password/reset-password-form/reset-password-form.js.map +1 -1
  23. package/dist/features/auth/forgot-password/user-identifier-form/user-identifier-form.js +23 -24
  24. package/dist/features/auth/forgot-password/user-identifier-form/user-identifier-form.js.map +1 -1
  25. package/dist/features/auth/login/identifier-otp-form/identifier-otp-form-styled.js +4 -2
  26. package/dist/features/auth/login/identifier-otp-form/identifier-otp-form-styled.js.map +1 -1
  27. package/dist/features/auth/login/identifier-otp-form/identifier-otp-form.js +85 -75
  28. package/dist/features/auth/login/identifier-otp-form/identifier-otp-form.js.map +1 -1
  29. package/dist/features/auth/login/login-styled.js +13 -0
  30. package/dist/features/auth/login/login-styled.js.map +1 -0
  31. package/dist/features/auth/login/social-account-not-found/social-account-not-found.js +27 -21
  32. package/dist/features/auth/login/social-account-not-found/social-account-not-found.js.map +1 -1
  33. package/dist/features/auth/login/social-login-methods/social-login-methods-styled.js +9 -0
  34. package/dist/features/auth/login/social-login-methods/social-login-methods-styled.js.map +1 -0
  35. package/dist/features/auth/login/social-login-methods/social-login-methods.js +43 -34
  36. package/dist/features/auth/login/social-login-methods/social-login-methods.js.map +1 -1
  37. package/dist/features/auth/login/username-password-form/username-password-form.js +22 -21
  38. package/dist/features/auth/login/username-password-form/username-password-form.js.map +1 -1
  39. package/dist/features/auth/user-list/user-item/user-item.js +33 -32
  40. package/dist/features/auth/user-list/user-item/user-item.js.map +1 -1
  41. package/dist/features/auth/user-list/user-list.js +60 -51
  42. package/dist/features/auth/user-list/user-list.js.map +1 -1
  43. package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js +74 -74
  44. package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js.map +1 -1
  45. package/dist/features/cue-canvas/constants/constants.js +3 -33
  46. package/dist/features/cue-canvas/constants/constants.js.map +1 -1
  47. package/dist/features/cue-canvas/cue-canvas-context.js +5 -8
  48. package/dist/features/cue-canvas/cue-canvas-context.js.map +1 -1
  49. package/dist/features/cue-canvas/cue-canvas-core.js +112 -133
  50. package/dist/features/cue-canvas/cue-canvas-core.js.map +1 -1
  51. package/dist/features/cue-canvas/cue-canvas-helpers.js +38 -48
  52. package/dist/features/cue-canvas/cue-canvas-helpers.js.map +1 -1
  53. package/dist/features/cue-canvas/cue-canvas-provider.js +21 -21
  54. package/dist/features/cue-canvas/cue-canvas-provider.js.map +1 -1
  55. package/dist/features/cue-canvas/cue-canvas.js +59 -66
  56. package/dist/features/cue-canvas/cue-canvas.js.map +1 -1
  57. package/dist/features/cue-canvas/cue-cavas-styled.js +47 -48
  58. package/dist/features/cue-canvas/cue-cavas-styled.js.map +1 -1
  59. package/dist/features/cue-canvas/hooks/use-canvas-sync-broker.js +44 -47
  60. package/dist/features/cue-canvas/hooks/use-canvas-sync-broker.js.map +1 -1
  61. package/dist/features/cue-canvas/hooks/use-cue-canvas-actions.js +14 -18
  62. package/dist/features/cue-canvas/hooks/use-cue-canvas-actions.js.map +1 -1
  63. package/dist/features/cue-canvas/toolbar/color-palette.js +33 -42
  64. package/dist/features/cue-canvas/toolbar/color-palette.js.map +1 -1
  65. package/dist/features/cue-canvas/toolbar/color-picker-menu.js +25 -28
  66. package/dist/features/cue-canvas/toolbar/color-picker-menu.js.map +1 -1
  67. package/dist/features/cue-canvas/toolbar/grid-menu.js +13 -13
  68. package/dist/features/cue-canvas/toolbar/grid-menu.js.map +1 -1
  69. package/dist/features/cue-canvas/toolbar/pen-tool-menu.js +35 -24
  70. package/dist/features/cue-canvas/toolbar/pen-tool-menu.js.map +1 -1
  71. package/dist/features/cue-canvas/toolbar/tool.js +20 -22
  72. package/dist/features/cue-canvas/toolbar/tool.js.map +1 -1
  73. package/dist/features/cue-canvas/toolbar/toolbar.js +18 -17
  74. package/dist/features/cue-canvas/toolbar/toolbar.js.map +1 -1
  75. package/dist/features/cue-canvas/toolbar/whiteboard-toolbar.js +11 -13
  76. package/dist/features/cue-canvas/toolbar/whiteboard-toolbar.js.map +1 -1
  77. package/dist/features/homework/hw-card-list/api/get-homeworks.js +1 -1
  78. package/dist/features/homework/hw-card-list/api/get-homeworks.js.map +1 -1
  79. package/dist/features/homework/hw-card-list/hw-card-list-view.js +112 -144
  80. package/dist/features/homework/hw-card-list/hw-card-list-view.js.map +1 -1
  81. package/dist/features/homework/styles.js +4 -5
  82. package/dist/features/homework/styles.js.map +1 -1
  83. package/dist/features/hooks/use-viewport.js +21 -0
  84. package/dist/features/hooks/use-viewport.js.map +1 -0
  85. package/dist/features/journey/hooks/use-home-page-journey/home-page-homeworks-mock.js +262 -199
  86. package/dist/features/journey/hooks/use-home-page-journey/home-page-homeworks-mock.js.map +1 -1
  87. package/dist/features/journey/hooks/use-home-page-journey/use-home-page-journey.js +15 -15
  88. package/dist/features/journey/hooks/use-home-page-journey/use-home-page-journey.js.map +1 -1
  89. package/dist/features/milestone/create/comps/add-custom-chapter/course-catalog.js +36 -38
  90. package/dist/features/milestone/create/comps/add-custom-chapter/course-catalog.js.map +1 -1
  91. package/dist/features/milestone/create/comps/add-custom-chapter/hooks/use-catalog-helpers.js +22 -24
  92. package/dist/features/milestone/create/comps/add-custom-chapter/hooks/use-catalog-helpers.js.map +1 -1
  93. package/dist/features/milestone/create/comps/chapters-selection-step/chapter-selection-step-v2/chapter-category/chapter-category-container.js +22 -23
  94. package/dist/features/milestone/create/comps/chapters-selection-step/chapter-selection-step-v2/chapter-category/chapter-category-container.js.map +1 -1
  95. package/dist/features/milestone/create/comps/chapters-selection-step/utils.js +47 -49
  96. package/dist/features/milestone/create/comps/chapters-selection-step/utils.js.map +1 -1
  97. package/dist/features/milestone/create/comps/class-details-step/class-details-step.js +87 -94
  98. package/dist/features/milestone/create/comps/class-details-step/class-details-step.js.map +1 -1
  99. package/dist/features/milestone/create/comps/class-details-step/class-details-utils.js +12 -13
  100. package/dist/features/milestone/create/comps/class-details-step/class-details-utils.js.map +1 -1
  101. package/dist/features/milestone/create/comps/test-type-step/test-type-step.js +21 -23
  102. package/dist/features/milestone/create/comps/test-type-step/test-type-step.js.map +1 -1
  103. package/dist/features/milestone/create/milestone-create-helpers.js +162 -165
  104. package/dist/features/milestone/create/milestone-create-helpers.js.map +1 -1
  105. package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js +47 -48
  106. package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js.map +1 -1
  107. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js +121 -100
  108. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js.map +1 -1
  109. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-widget-styled.js +14 -15
  110. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-widget/milestone-widget-styled.js.map +1 -1
  111. package/dist/features/milestone/milestone-list-container/milestone-list-container.js +51 -52
  112. package/dist/features/milestone/milestone-list-container/milestone-list-container.js.map +1 -1
  113. package/dist/features/trial-session/comps/pricing/pricing.js +35 -36
  114. package/dist/features/trial-session/comps/pricing/pricing.js.map +1 -1
  115. package/dist/features/ui/buttons/button/button-styled.js +29 -29
  116. package/dist/features/ui/buttons/button/button-styled.js.map +1 -1
  117. package/dist/features/ui/stepper/stepper.js +7 -7
  118. package/dist/features/utils/media.js +16 -0
  119. package/dist/features/utils/media.js.map +1 -0
  120. package/dist/features/worksheet/worksheet/hooks/use-s3-helper.js +19 -22
  121. package/dist/features/worksheet/worksheet/hooks/use-s3-helper.js.map +1 -1
  122. package/dist/features/worksheet/worksheet/worksheet-container.js +26 -26
  123. package/dist/features/worksheet/worksheet/worksheet-container.js.map +1 -1
  124. package/dist/index.d.ts +35 -93
  125. package/dist/index.js +321 -323
  126. package/dist/index.js.map +1 -1
  127. package/dist/static/cuemath-app-qr-code.7205ee79.svg +1 -0
  128. package/dist/static/lib/{polypad-4.5.4.v1.js → polypad-4.5.4.js} +1 -8
  129. package/package.json +1 -1
  130. package/dist/assets/line-icons/icons/puzzle-icon.js +0 -51
  131. package/dist/assets/line-icons/icons/puzzle-icon.js.map +0 -1
  132. package/dist/assets/line-icons/icons/share.js +0 -48
  133. package/dist/assets/line-icons/icons/share.js.map +0 -1
  134. package/dist/assets/line-icons/icons/tile.js +0 -54
  135. package/dist/assets/line-icons/icons/tile.js.map +0 -1
  136. package/dist/features/auth/comps/auth-page-layout/auth-page-layout-styles.js +0 -12
  137. package/dist/features/auth/comps/auth-page-layout/auth-page-layout-styles.js.map +0 -1
  138. package/dist/features/cue-canvas/bottombar/homework-controls.js +0 -73
  139. package/dist/features/cue-canvas/bottombar/homework-controls.js.map +0 -1
  140. package/dist/features/cue-canvas/hooks/use-config-updater.js +0 -12
  141. package/dist/features/cue-canvas/hooks/use-config-updater.js.map +0 -1
  142. package/dist/features/cue-canvas/hooks/use-upload-helper.js +0 -23
  143. package/dist/features/cue-canvas/hooks/use-upload-helper.js.map +0 -1
  144. package/dist/features/cue-canvas/sidebar/homework/helper.js +0 -20
  145. package/dist/features/cue-canvas/sidebar/homework/helper.js.map +0 -1
  146. package/dist/features/cue-canvas/sidebar/homework/homework-menu.js +0 -33
  147. package/dist/features/cue-canvas/sidebar/homework/homework-menu.js.map +0 -1
  148. package/dist/features/cue-canvas/sidebar/homework/homework-request.js +0 -68
  149. package/dist/features/cue-canvas/sidebar/homework/homework-request.js.map +0 -1
  150. package/dist/features/cue-canvas/sidebar/homework/homework-styled.js +0 -25
  151. package/dist/features/cue-canvas/sidebar/homework/homework-styled.js.map +0 -1
  152. package/dist/features/cue-canvas/sidebar/homework/homework.js +0 -39
  153. package/dist/features/cue-canvas/sidebar/homework/homework.js.map +0 -1
  154. package/dist/features/cue-canvas/sidebar/puzzles/api/get-puzzles.js +0 -13
  155. package/dist/features/cue-canvas/sidebar/puzzles/api/get-puzzles.js.map +0 -1
  156. package/dist/features/cue-canvas/sidebar/puzzles/filter-selection-menu.js +0 -60
  157. package/dist/features/cue-canvas/sidebar/puzzles/filter-selection-menu.js.map +0 -1
  158. package/dist/features/cue-canvas/sidebar/puzzles/filters-section.js +0 -44
  159. package/dist/features/cue-canvas/sidebar/puzzles/filters-section.js.map +0 -1
  160. package/dist/features/cue-canvas/sidebar/puzzles/filters.js +0 -107
  161. package/dist/features/cue-canvas/sidebar/puzzles/filters.js.map +0 -1
  162. package/dist/features/cue-canvas/sidebar/puzzles/hooks/use-fetch-cue-canvas-activity.js +0 -42
  163. package/dist/features/cue-canvas/sidebar/puzzles/hooks/use-fetch-cue-canvas-activity.js.map +0 -1
  164. package/dist/features/cue-canvas/sidebar/puzzles/launch-puzzle.js +0 -84
  165. package/dist/features/cue-canvas/sidebar/puzzles/launch-puzzle.js.map +0 -1
  166. package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu-header.js +0 -36
  167. package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu-header.js.map +0 -1
  168. package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu.js +0 -133
  169. package/dist/features/cue-canvas/sidebar/puzzles/puzzle-menu.js.map +0 -1
  170. package/dist/features/cue-canvas/sidebar/puzzles/puzzles-styled.js +0 -96
  171. package/dist/features/cue-canvas/sidebar/puzzles/puzzles-styled.js.map +0 -1
  172. package/dist/features/cue-canvas/sidebar/puzzles/puzzles.js +0 -29
  173. package/dist/features/cue-canvas/sidebar/puzzles/puzzles.js.map +0 -1
  174. package/dist/features/cue-canvas/sidebar/puzzles/utils.js +0 -120
  175. package/dist/features/cue-canvas/sidebar/puzzles/utils.js.map +0 -1
  176. package/dist/features/cue-canvas/sidebar/sidebar-styled.js +0 -32
  177. package/dist/features/cue-canvas/sidebar/sidebar-styled.js.map +0 -1
  178. package/dist/features/cue-canvas/sidebar/sidebar.js +0 -29
  179. package/dist/features/cue-canvas/sidebar/sidebar.js.map +0 -1
  180. package/dist/features/cue-canvas/sidebar/tiles/tile.js +0 -16
  181. package/dist/features/cue-canvas/sidebar/tiles/tile.js.map +0 -1
  182. package/dist/features/homework/hw-card-list/hw-card-list-utils.js +0 -8
  183. package/dist/features/homework/hw-card-list/hw-card-list-utils.js.map +0 -1
  184. package/dist/features/hooks/use-debounce.js +0 -16
  185. package/dist/features/hooks/use-debounce.js.map +0 -1
  186. package/dist/features/milestone/milestone-list-container/api/get-past-milestone-count.js +0 -18
  187. package/dist/features/milestone/milestone-list-container/api/get-past-milestone-count.js.map +0 -1
  188. package/dist/features/trial-session/comps/pricing/india-pricing/index.js +0 -96
  189. package/dist/features/trial-session/comps/pricing/india-pricing/index.js.map +0 -1
  190. package/dist/features/trial-session/comps/pricing/india-pricing/india-pricing-styled.js +0 -59
  191. package/dist/features/trial-session/comps/pricing/india-pricing/india-pricing-styled.js.map +0 -1
  192. package/dist/static/ellipse-clip.dfb25608.svg +0 -1
@@ -1,42 +1,12 @@
1
- const E = {
1
+ const A = {
2
2
  CANVAS_BLUE: "#006BE5",
3
3
  CANVAS_PURPLE: "#3C1B98",
4
4
  CANVAS_PINK: "#DE52E0",
5
- //Studnet Colors Up Canvas Worksheet
6
5
  CANVAS_RED: "#E52900",
7
6
  CANVAS_YELLOW: "#FFBF00",
8
- CANVAS_GREEN: "#1AC76B",
9
- //Teacher Colors Up Canvas Worksheet
10
- LIGHT_ORANGE: "#fec680",
11
- LIGHT_RED: "#f5a393",
12
- LIGHT_PINK: "#e687b3",
13
- LIGHT_PURPLE: "#b69ddf",
14
- LIGHT_BLUE: "#87c1f9",
15
- LIGHT_TEAL: "#80cfd3",
16
- LIGHT_GREEN: "#91d592",
17
- LIGHT_YELLOW: "#dfe189",
18
- WHITE: "#eeeeee",
19
- ORANGE: "#fd8c00",
20
- RED: "#eb4726",
21
- PINK: "#cd0e66",
22
- PURPLE: "#6d3bbf",
23
- BLUE: "#0f82f2",
24
- TEAL: "#009ea6",
25
- GREEN: "#22ab24",
26
- YELLOW: "#bfc212",
27
- GREY: "#777777",
28
- DARK_ORANGE: "#b16200",
29
- DARK_RED: "#a5321b",
30
- DARK_PINK: "#900a47",
31
- DARK_PURPLE: "#4c2986",
32
- DARK_BLUE: "#0b5ba9",
33
- DARK_TEAL: "#006f74",
34
- DARK_GREEN: "#187819",
35
- DARK_YELLOW: "#86880d",
36
- BLACK: "#111111"
37
- //WhiteBoard Colors Up from polypad
7
+ CANVAS_GREEN: "#1AC76B"
38
8
  };
39
9
  export {
40
- E as CANVAS_COLORS
10
+ A as CANVAS_COLORS
41
11
  };
42
12
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../src/features/cue-canvas/constants/constants.ts"],"sourcesContent":["import type { TCueCanvasColors } from '../types/cue-canvas';\n\nexport const CANVAS_COLORS: Record<TCueCanvasColors, string> = {\n CANVAS_BLUE: '#006BE5',\n CANVAS_PURPLE: '#3C1B98',\n CANVAS_PINK: '#DE52E0',\n //Studnet Colors Up Canvas Worksheet\n\n CANVAS_RED: '#E52900',\n CANVAS_YELLOW: '#FFBF00',\n CANVAS_GREEN: '#1AC76B',\n //Teacher Colors Up Canvas Worksheet\n\n LIGHT_ORANGE: '#fec680',\n LIGHT_RED: '#f5a393',\n LIGHT_PINK: '#e687b3',\n LIGHT_PURPLE: '#b69ddf',\n LIGHT_BLUE: '#87c1f9',\n LIGHT_TEAL: '#80cfd3',\n LIGHT_GREEN: '#91d592',\n LIGHT_YELLOW: '#dfe189',\n WHITE: '#eeeeee',\n ORANGE: '#fd8c00',\n RED: '#eb4726',\n PINK: '#cd0e66',\n PURPLE: '#6d3bbf',\n BLUE: '#0f82f2',\n TEAL: '#009ea6',\n GREEN: '#22ab24',\n YELLOW: '#bfc212',\n GREY: '#777777',\n DARK_ORANGE: '#b16200',\n DARK_RED: '#a5321b',\n DARK_PINK: '#900a47',\n DARK_PURPLE: '#4c2986',\n DARK_BLUE: '#0b5ba9',\n DARK_TEAL: '#006f74',\n DARK_GREEN: '#187819',\n DARK_YELLOW: '#86880d',\n BLACK: '#111111',\n //WhiteBoard Colors Up from polypad\n};\n"],"names":["CANVAS_COLORS"],"mappings":"AAEO,MAAMA,IAAkD;AAAA,EAC7D,aAAa;AAAA,EACb,eAAe;AAAA,EACf,aAAa;AAAA;AAAA,EAGb,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,cAAc;AAAA;AAAA,EAGd,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc;AAAA,EACd,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EACV,WAAW;AAAA,EACX,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,OAAO;AAAA;AAET;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/features/cue-canvas/constants/constants.ts"],"sourcesContent":["import type { TCueCanvasColors } from '../types/cue-canvas';\n\nexport const CANVAS_COLORS: Record<TCueCanvasColors, string> = {\n CANVAS_BLUE: '#006BE5',\n CANVAS_PURPLE: '#3C1B98',\n CANVAS_PINK: '#DE52E0',\n\n CANVAS_RED: '#E52900',\n CANVAS_YELLOW: '#FFBF00',\n CANVAS_GREEN: '#1AC76B',\n};\n"],"names":["CANVAS_COLORS"],"mappings":"AAEO,MAAMA,IAAkD;AAAA,EAC7D,aAAa;AAAA,EACb,eAAe;AAAA,EACf,aAAa;AAAA,EAEb,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,cAAc;AAChB;"}
@@ -1,20 +1,17 @@
1
- import { createContext as o } from "react";
2
- import { CANVAS_COLORS as e } from "./constants/constants.js";
3
- const v = o({
1
+ import { createContext as t } from "react";
2
+ import { CANVAS_COLORS as o } from "./constants/constants.js";
3
+ const c = t({
4
4
  activeInstance: void 0,
5
5
  setActiveInstance: () => {
6
6
  },
7
7
  activeTool: "pen",
8
8
  setActiveTool: () => {
9
9
  },
10
- activeColor: Object.keys(e)[0],
10
+ activeColor: Object.keys(o)[0],
11
11
  setActiveColor: () => {
12
- },
13
- homeworkId: void 0,
14
- setHomeworkId: () => {
15
12
  }
16
13
  });
17
14
  export {
18
- v as default
15
+ c as default
19
16
  };
20
17
  //# sourceMappingURL=cue-canvas-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cue-canvas-context.js","sources":["../../../src/features/cue-canvas/cue-canvas-context.tsx"],"sourcesContent":["import type { TPolyContextValue } from './types/context';\nimport type { TCueCanvasColors } from './types/cue-canvas';\n\nimport { createContext } from 'react';\n\nimport { CANVAS_COLORS } from './constants/constants';\n\nconst PolyContext = createContext<TPolyContextValue>({\n activeInstance: undefined,\n setActiveInstance: () => undefined,\n activeTool: 'pen',\n setActiveTool: () => undefined,\n activeColor: Object.keys(CANVAS_COLORS)[0] as TCueCanvasColors,\n setActiveColor: () => undefined,\n homeworkId: undefined,\n setHomeworkId: () => undefined,\n});\n\nexport default PolyContext;\n"],"names":["PolyContext","createContext","CANVAS_COLORS"],"mappings":";;AAOA,MAAMA,IAAcC,EAAiC;AAAA,EACnD,gBAAgB;AAAA,EAChB,mBAAmB,MAAM;AAAA;AAAA,EACzB,YAAY;AAAA,EACZ,eAAe,MAAM;AAAA;AAAA,EACrB,aAAa,OAAO,KAAKC,CAAa,EAAE,CAAC;AAAA,EACzC,gBAAgB,MAAM;AAAA;AAAA,EACtB,YAAY;AAAA,EACZ,eAAe,MAAM;AAAA;AACvB,CAAC;"}
1
+ {"version":3,"file":"cue-canvas-context.js","sources":["../../../src/features/cue-canvas/cue-canvas-context.tsx"],"sourcesContent":["import type { TPolyContextValue } from './types/context';\nimport type { TCueCanvasColors } from './types/cue-canvas';\n\nimport { createContext } from 'react';\n\nimport { CANVAS_COLORS } from './constants/constants';\n\nconst PolyContext = createContext<TPolyContextValue>({\n activeInstance: undefined,\n setActiveInstance: () => undefined,\n activeTool: 'pen',\n setActiveTool: () => undefined,\n activeColor: Object.keys(CANVAS_COLORS)[0] as TCueCanvasColors,\n setActiveColor: () => undefined,\n});\n\nexport default PolyContext;\n"],"names":["PolyContext","createContext","CANVAS_COLORS"],"mappings":";;AAOA,MAAMA,IAAcC,EAAiC;AAAA,EACnD,gBAAgB;AAAA,EAChB,mBAAmB,MAAM;AAAA;AAAA,EACzB,YAAY;AAAA,EACZ,eAAe,MAAM;AAAA;AAAA,EACrB,aAAa,OAAO,KAAKC,CAAa,EAAE,CAAC;AAAA,EACzC,gBAAgB,MAAM;AAAA;AACxB,CAAC;"}
@@ -1,23 +1,20 @@
1
- var v = Object.defineProperty;
2
- var g = (c, t, e) => t in c ? v(c, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : c[t] = e;
3
- var s = (c, t, e) => g(c, typeof t != "symbol" ? t + "" : t, e);
4
- import { captureMessage as f } from "@sentry/browser";
5
- import y from "../../node_modules/lodash.debounce/index.js";
6
- import { CANVAS_COLORS as d } from "./constants/constants.js";
7
- import { getColorsForUser as C, removeTileButton as m, removeMask as T, checkTextOrEquationTool as w, getReverseMap as I, getToolAndSubtool as b } from "./cue-canvas-helpers.js";
8
- class U {
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 { removeTileButton as f, removeMask as g, checkTextOrEquationTool as y, getReverseMap as C, getToolAndSubtool as m } from "./cue-canvas-helpers.js";
6
+ class b {
9
7
  constructor({
10
8
  onPublish: t,
11
9
  onSubscribe: e,
12
10
  onUpdateActiveTool: a,
13
- onUpdateHeight: i,
11
+ onUpdateHeight: n,
14
12
  uploadImageToS3: o,
15
- height: n,
16
- userId: h,
17
- canvasId: r,
18
- userType: l,
19
- renderAs: p,
20
- updateCanvasConfig: u
13
+ height: i,
14
+ userId: l,
15
+ canvasId: h,
16
+ userType: c,
17
+ renderAs: p
21
18
  }) {
22
19
  s(this, "polycanvas");
23
20
  s(this, "publish");
@@ -31,24 +28,22 @@ class U {
31
28
  s(this, "fileInput", null);
32
29
  s(this, "debouncedViewportChange");
33
30
  s(this, "uploadImageToS3");
34
- s(this, "updateCanvasConfigChange");
35
- s(this, "gridName");
36
- s(this, "activeColor");
37
- s(this, "activeTool");
38
- s(this, "publishToChannel", (t) => {
31
+ s(this, "publishToChannel", (t, e, a) => {
39
32
  this.publish && this.publish({
40
33
  eventName: "cue_canvas_changed",
41
34
  eventPayload: {
42
35
  data: t,
43
36
  height: this.height,
44
37
  userId: this.userId,
45
- responseId: this.canvasId
38
+ responseId: this.canvasId,
39
+ gridName: e,
40
+ dimension: a
46
41
  }
47
42
  });
48
43
  });
49
44
  s(this, "onChange", (t) => {
50
45
  const a = Object.fromEntries(t.entries());
51
- w(a) && this.onUpdateActiveTool("move"), this.publishToChannel(a);
46
+ y(a) && this.onUpdateActiveTool("move"), this.publishToChannel(a);
52
47
  });
53
48
  s(this, "undo", () => {
54
49
  if (!this.polycanvas)
@@ -56,7 +51,7 @@ class U {
56
51
  const t = this.polycanvas.undo();
57
52
  if (!t)
58
53
  return;
59
- const e = I(t);
54
+ const e = C(t);
60
55
  this.onChange(e);
61
56
  });
62
57
  s(this, "redo", () => {
@@ -78,7 +73,6 @@ class U {
78
73
  const t = this.polycanvas.getViewport();
79
74
  this.polycanvas.setViewport(t.x, t.y, t.zoom * 0.9);
80
75
  });
81
- s(this, "getCanvasAsImage", async () => this.polycanvas ? await this.polycanvas.image(3e3, 3e3, "png") : void 0);
82
76
  s(this, "downloadCanvasAsImage", async () => {
83
77
  if (!this.polycanvas) return;
84
78
  const t = await this.polycanvas.image(3e3, 3e3, "png");
@@ -86,139 +80,132 @@ class U {
86
80
  const e = document.createElement("a");
87
81
  e.href = t, e.download = `canvas-drawing-${Date.now()}.png`, e.click();
88
82
  });
83
+ s(this, "uploadFileToCanvas", async (t) => new Promise((e, a) => {
84
+ this.uploadImageToS3 ? e(this.uploadImageToS3(t)) : a(new Error("Upload function not provided"));
85
+ }));
89
86
  s(this, "onViewPortChange", (t) => {
90
- this.updateCanvasConfigChange && this.updateCanvasConfigChange({ dimesion: t });
87
+ if (!this.publish) return;
88
+ const e = t;
89
+ this.publishToChannel({}, void 0, e);
91
90
  });
92
91
  s(this, "openFileUpload", () => {
93
- this.fileInput || (this.fileInput = document.createElement("input"), this.fileInput.type = "file", this.fileInput.accept = "image/*", this.fileInput.style.display = "none", this.fileInput.onchange = this.onSelectImage, document.body.appendChild(this.fileInput)), this.fileInput.click();
92
+ 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();
94
93
  });
95
- s(this, "addImageToCanvas", (t) => {
96
- if (!this.polycanvas) return;
97
- const e = this.polycanvas.getViewport(), a = {
94
+ s(this, "addImageToCanvas", async (t) => {
95
+ var h;
96
+ const e = t.target, a = (h = e.files) == null ? void 0 : h[0];
97
+ if (!a || !this.polycanvas || !this.uploadImageToS3) return;
98
+ const n = await this.uploadImageToS3(a), o = this.polycanvas.getViewport(), i = {
98
99
  name: "image",
99
- href: t,
100
- x: e.x + 24,
101
- y: e.y + 24,
102
- width: 500
103
- }, i = this.polycanvas.add({
104
- ...a
100
+ href: n,
101
+ x: o.x + 88,
102
+ y: o.y + 88
103
+ }, l = this.polycanvas.add({
104
+ ...i
105
105
  });
106
106
  this.publishToChannel({
107
- [i]: [void 0, { ...a, status: "locked" }]
108
- });
107
+ [l]: [void 0, { ...i, status: "locked" }]
108
+ }), e.value = "";
109
109
  });
110
- s(this, "onSelectImage", async (t) => {
111
- var o;
112
- const e = t.target, a = (o = e.files) == null ? void 0 : o[0];
113
- if (!a || !this.polycanvas || !this.uploadImageToS3) return;
114
- const i = await this.uploadImageToS3(a);
115
- i !== "error" && (this.addImageToCanvas(i), e.value = "");
110
+ s(this, "updateCanvasConfig", (t, e, a) => {
111
+ this.polycanvas && (t > this.height && this.updateHeight(t), e && this.polycanvas.setViewport(e.x, e.y, e.zoom), a && this.polycanvas.setOptions({
112
+ grid: a
113
+ }));
116
114
  });
117
115
  s(this, "updateCanvas", ({ data: t, userId: e }) => {
118
116
  const a = this.userType === "TEACHER" || e === this.userId;
119
- try {
120
- Object.entries(t).forEach(([i, o]) => {
121
- var n, h, r;
122
- !o[0] && o[1] ? ("name" in o[1] && o[1].name === "image" && (o[1].status = this.userType === "STUDENT" ? "locked" : void 0), (n = this.polycanvas) == null || n.add({ ...o[1], cannotEdit: !a }, i)) : o[0] && !o[1] ? (h = this.polycanvas) == null || h.delete(i) : o[0] && o[1] && ((r = this.polycanvas) == null || r.update(i, { ...o[1] }));
123
- });
124
- } catch {
125
- f("Error Updating Canvas", t);
126
- }
117
+ Object.entries(t).forEach(([n, o]) => {
118
+ var i, l, h;
119
+ !o[0] && o[1] ? (i = this.polycanvas) == null || i.add({ ...o[1], cannotEdit: !a }, n) : o[0] && !o[1] ? (l = this.polycanvas) == null || l.delete(n) : o[0] && o[1] && ((h = this.polycanvas) == null || h.update(n, { ...o[1] }));
120
+ });
127
121
  });
128
122
  s(this, "toggleTiles", (t) => {
129
123
  var e;
130
124
  (e = this.polycanvas) == null || e.toggleSidebar(t);
131
125
  });
132
- s(this, "setViewPort", ({ x: t, y: e, zoom: a }) => {
133
- var i;
134
- if (this.polycanvas) {
135
- const o = (i = this.polycanvas) == null ? void 0 : i.getViewport();
136
- if (o.x === t && o.y === e && o.zoom === a)
137
- return;
138
- this.polycanvas.setViewport(t, e, a);
139
- }
140
- });
141
126
  s(this, "resetViewPort", () => {
142
127
  this.polycanvas && this.polycanvas.resetViewport();
143
128
  });
144
129
  s(this, "changeGrid", (t) => {
145
- !this.polycanvas || this.gridName === t || (this.polycanvas.setOptions({
130
+ this.polycanvas && (this.polycanvas.setOptions({
146
131
  grid: t
147
- }), this.gridName = t, this.updateCanvasConfigChange && this.updateCanvasConfigChange({ gridName: t }));
132
+ }), this.publishToChannel({}, t));
148
133
  });
149
134
  s(this, "lockSelectedTiles", () => {
150
- var a, i;
151
- const { tiles: t } = ((a = this.polycanvas) == null ? void 0 : a.serialize()) || {}, e = ((i = this.polycanvas) == null ? void 0 : i.getSelection()) || [];
135
+ var a, n;
136
+ const { tiles: t } = ((a = this.polycanvas) == null ? void 0 : a.serialize()) || {}, e = ((n = this.polycanvas) == null ? void 0 : n.getSelection()) || [];
152
137
  if (e.length > 0 && t) {
153
138
  const o = {};
154
- e.forEach((n) => {
155
- var r, l, p;
156
- if (!((r = t[n]) != null && r.name)) return;
157
- const h = { ...t[n], status: "locked" };
158
- (l = this.polycanvas) == null || l.update(n, h), (p = t[n]) != null && p.name && (o[n] = [t[n], h]);
139
+ e.forEach((i) => {
140
+ var h, c, p;
141
+ if (!((h = t[i]) != null && h.name)) return;
142
+ const l = { ...t[i], status: "locked" };
143
+ (c = this.polycanvas) == null || c.update(i, l), (p = t[i]) != null && p.name && (o[i] = [t[i], l]);
159
144
  }), this.publishToChannel(o);
160
145
  }
161
146
  });
162
147
  s(this, "unlockAllTiles", () => {
163
148
  if (!this.polycanvas) return;
164
149
  const { tiles: t } = this.polycanvas.serialize(), e = {};
165
- t && Object.entries(t).length > 0 && (Object.entries(t).forEach(([a, i]) => {
166
- var n;
167
- if (i.status !== "locked") return;
168
- const o = { ...i, status: void 0 };
169
- (n = this.polycanvas) == null || n.update(a, o), e[a] = [i, o];
150
+ t && Object.entries(t).length > 0 && (Object.entries(t).forEach(([a, n]) => {
151
+ var i;
152
+ if (n.status !== "locked") return;
153
+ const o = { ...n, status: void 0 };
154
+ (i = this.polycanvas) == null || i.update(a, o), e[a] = [n, o];
170
155
  }), this.publishToChannel(e));
171
156
  });
172
157
  s(this, "replaceCanvas", (t) => {
173
158
  if (!this.polycanvas) return;
174
159
  const { data: e, gridName: a } = t;
175
- this.polycanvas.clear(), a && this.changeGrid(a), Object.entries(e).forEach(([i, o]) => {
176
- var n;
160
+ this.polycanvas.clear(), a && this.polycanvas.setOptions({
161
+ grid: a
162
+ }), Object.entries(e).forEach(([n, o]) => {
163
+ var i;
177
164
  if (!o[0] && o[1]) {
178
- (n = this.polycanvas) == null || n.add({ ...o[1] }, i);
165
+ (i = this.polycanvas) == null || i.add({ ...o[1] }, n);
179
166
  return;
180
167
  }
181
- }), this.publishToChannel(e);
168
+ }), this.publishToChannel(e, a);
182
169
  });
183
170
  s(this, "setTool", (t) => {
184
- if (!this.polycanvas || t === this.activeTool) return;
185
- this.activeTool = t;
186
- const [e, a] = b(t);
187
- switch (e) {
188
- case "clearAll":
189
- this.clearCanvas();
190
- break;
191
- case "home":
192
- this.resetViewPort();
193
- break;
194
- case "undo":
195
- this.undo();
196
- break;
197
- case "redo":
198
- this.redo();
199
- break;
200
- case "lock":
201
- this.lockSelectedTiles();
202
- break;
203
- case "unlock":
204
- this.unlockAllTiles();
205
- break;
206
- case "zoomIn":
207
- this.zoomIn();
208
- break;
209
- case "zoomOut":
210
- this.zoomOut();
211
- break;
212
- case "upload":
213
- this.openFileUpload();
214
- break;
215
- case "download":
216
- this.downloadCanvasAsImage();
217
- break;
218
- case "grid":
219
- break;
220
- default:
221
- this.polycanvas.setTool(e, a);
171
+ if (this.polycanvas) {
172
+ const [e, a] = m(t);
173
+ switch (e) {
174
+ case "clearAll":
175
+ this.clearCanvas();
176
+ break;
177
+ case "home":
178
+ this.resetViewPort();
179
+ break;
180
+ case "undo":
181
+ this.undo();
182
+ break;
183
+ case "redo":
184
+ this.redo();
185
+ break;
186
+ case "lock":
187
+ this.lockSelectedTiles();
188
+ break;
189
+ case "unlock":
190
+ this.unlockAllTiles();
191
+ break;
192
+ case "zoomIn":
193
+ this.zoomIn();
194
+ break;
195
+ case "zoomOut":
196
+ this.zoomOut();
197
+ break;
198
+ case "upload":
199
+ this.openFileUpload();
200
+ break;
201
+ case "download":
202
+ this.downloadCanvasAsImage();
203
+ break;
204
+ case "grid":
205
+ break;
206
+ default:
207
+ this.polycanvas.setTool(e, a);
208
+ }
222
209
  }
223
210
  });
224
211
  /**
@@ -235,21 +222,13 @@ class U {
235
222
  */
236
223
  s(this, "update", (t) => {
237
224
  if (Array.isArray(t)) {
238
- const e = t.map((i) => i.height).filter(Boolean), a = Math.max(...e);
239
- a > this.height && this.updateHeight(a), t.forEach((i) => this.updateCanvas(i));
225
+ const e = t.map((i) => i.height).filter(Boolean), a = Math.max(...e), n = t.map((i) => i.dimension).filter(Boolean)[t.length - 1], o = t.map((i) => i.gridName).filter(Boolean)[t.length - 1];
226
+ this.updateCanvasConfig(a, n, o), t.forEach((i) => this.updateCanvas(i));
240
227
  } else
241
- t.height > this.height && this.updateHeight(t.height), this.updateCanvas(t);
228
+ this.updateCanvasConfig(t.height, t.dimension, t == null ? void 0 : t.gridName), this.updateCanvas(t);
242
229
  });
243
- s(this, "getSelections", () => this.polycanvas ? this.polycanvas.getSelection() : []);
244
230
  s(this, "setColor", (t) => {
245
- if (!this.polycanvas || !this.activeColor) return;
246
- const e = d[t], a = this.getSelections();
247
- a && a.length > 0 && a.forEach((i) => {
248
- var o;
249
- (o = this.polycanvas) == null || o.update(i, { color: e }), this.onChange(
250
- /* @__PURE__ */ new Map([[i, [{ color: d[this.activeColor] }, { color: e }]]])
251
- );
252
- }), this.polycanvas.setColor(e), this.activeColor = t;
231
+ this.polycanvas && this.polycanvas.setColor(t);
253
232
  });
254
233
  s(this, "updateHeight", (t) => {
255
234
  var e;
@@ -258,9 +237,9 @@ class U {
258
237
  s(this, "destroy", () => {
259
238
  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));
260
239
  });
261
- this.onUpdateHeight = i, this.onUpdateActiveTool = a, this.height = n, this.uploadImageToS3 = o, this.userId = h, this.canvasId = r, this.publish = t, this.userType = l, this.renderAs = p, this.debouncedViewportChange = y(this.onViewPortChange, 300), this.updateCanvasConfigChange = u, this.activeColor = C(l, p)[0], this.activeTool = void 0, e == null || e(this.canvasId, this.update);
240
+ this.onUpdateHeight = n, this.onUpdateActiveTool = a, this.height = i, this.uploadImageToS3 = o, this.userId = l, this.canvasId = h, this.publish = t, this.userType = c, this.renderAs = p, this.debouncedViewportChange = v(this.onViewPortChange, 300), e == null || e(this.canvasId, this.update);
262
241
  }
263
- async create({ canvasElementRef: t, canvasConfig: e, canvasSetting: a, initialData: i }) {
242
+ async create({ canvasElementRef: t, canvasConfig: e, canvasSetting: a, initialData: n }) {
264
243
  if (!t.current)
265
244
  throw new Error("PolyCanvas: Div Element Not found for canvas");
266
245
  this.polycanvas = await window.Polypad.create(t.current, {
@@ -268,11 +247,11 @@ class U {
268
247
  options: e
269
248
  },
270
249
  ...a,
271
- imageUpload: this.renderAs === "whiteboard" && this.userType === "TEACHER" && this.uploadImageToS3 ? this.uploadImageToS3 : void 0
272
- }), this.renderAs === "whiteboard" && this.userType === "TEACHER" && (this.polycanvas.toggleSidebar(!1), this.polycanvas.bindKeyboardEvents({}), m(t), this.polycanvas.on("viewport", this.debouncedViewportChange)), T(t), this.polycanvas.on("change", this.onChange), i && this.update(i);
250
+ imageUpload: this.renderAs === "whiteboard" && this.userType === "TEACHER" ? this.uploadFileToCanvas : void 0
251
+ }), this.renderAs === "whiteboard" && this.userType === "TEACHER" && (this.polycanvas.toggleSidebar(!1), f(t), this.polycanvas.on("viewport", this.debouncedViewportChange)), g(t), this.polycanvas.on("change", this.onChange), n && this.update(n);
273
252
  }
274
253
  }
275
254
  export {
276
- U as CueCanvasCore
255
+ b as CueCanvasCore
277
256
  };
278
257
  //# sourceMappingURL=cue-canvas-core.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cue-canvas-core.js","sources":["../../../src/features/cue-canvas/cue-canvas-core.ts"],"sourcesContent":["import type { TUserTypes } from '../ui/types';\nimport type {\n IActionData,\n IViewport,\n TCueCanvasChangeData,\n TCueCanvasGridName,\n TCueCanvasTool,\n TPublish,\n TRenderAs,\n TCueCanvasChangeDataObject,\n IReplaceCanvas,\n ICueCanvasCoreProps,\n TUpdateCanvasConfig,\n TCueCanvasColors,\n} from './types/cue-canvas';\nimport type { ICreateOptions } from './types/cue-canvas';\nimport type { IPolypad, IPolyPadInstance } from './types/polypad';\n\nimport { captureMessage } from '@sentry/browser';\nimport debounce from 'lodash.debounce';\n\nimport { CANVAS_COLORS } from './constants/constants';\nimport {\n checkTextOrEquationTool,\n getColorsForUser,\n getReverseMap,\n getToolAndSubtool,\n removeMask,\n removeTileButton,\n} from './cue-canvas-helpers';\n\ndeclare global {\n interface Window {\n Polypad: IPolypad;\n }\n}\n\n/**\n * The CueCanvasCore class manages the canvas state and tool synchronization.\n * When text or equations are added, Polypad automatically switches to 'move' tool.\n * onUpdateActiveTool ensures the UI reflects this automatic tool change.\n */\n\nexport class CueCanvasCore {\n private polycanvas: IPolyPadInstance | undefined;\n private publish?: TPublish;\n private height: number;\n private onUpdateActiveTool: (tool: TCueCanvasTool) => void;\n private onUpdateHeight?: (height: number) => void;\n private userId: string;\n private canvasId: string;\n private userType: TUserTypes;\n private renderAs: TRenderAs;\n private fileInput: HTMLInputElement | null = null;\n private debouncedViewportChange: ReturnType<typeof debounce>;\n private uploadImageToS3?: (file: File) => Promise<string>;\n private updateCanvasConfigChange?: TUpdateCanvasConfig;\n private gridName?: TCueCanvasGridName;\n private activeColor: TCueCanvasColors;\n private activeTool: TCueCanvasTool | undefined;\n\n constructor({\n onPublish,\n onSubscribe,\n onUpdateActiveTool,\n onUpdateHeight,\n uploadImageToS3,\n height,\n userId,\n canvasId,\n userType,\n renderAs,\n updateCanvasConfig,\n }: ICueCanvasCoreProps) {\n this.onUpdateHeight = onUpdateHeight;\n this.onUpdateActiveTool = onUpdateActiveTool;\n this.height = height;\n this.uploadImageToS3 = uploadImageToS3;\n this.userId = userId;\n this.canvasId = canvasId;\n this.publish = onPublish;\n this.userType = userType;\n this.renderAs = renderAs;\n this.debouncedViewportChange = debounce(this.onViewPortChange, 300);\n this.updateCanvasConfigChange = updateCanvasConfig;\n this.activeColor = getColorsForUser(userType, renderAs)[0] as TCueCanvasColors;\n this.activeTool = undefined; // Default to first color in the palette\n onSubscribe?.(this.canvasId, this.update);\n }\n\n async create({ canvasElementRef, canvasConfig, canvasSetting, initialData }: ICreateOptions) {\n if (!canvasElementRef.current) {\n throw new Error('PolyCanvas: Div Element Not found for canvas');\n }\n this.polycanvas = await window.Polypad.create(canvasElementRef.current, {\n initial: {\n options: canvasConfig,\n },\n ...canvasSetting,\n imageUpload:\n this.renderAs === 'whiteboard' && this.userType === 'TEACHER' && this.uploadImageToS3\n ? this.uploadImageToS3\n : undefined,\n });\n\n if (this.renderAs === 'whiteboard' && this.userType === 'TEACHER') {\n this.polycanvas.toggleSidebar(false);\n this.polycanvas.bindKeyboardEvents({});\n\n removeTileButton(canvasElementRef);\n this.polycanvas.on('viewport', this.debouncedViewportChange);\n }\n\n removeMask(canvasElementRef);\n this.polycanvas.on('change', this.onChange);\n if (initialData) {\n this.update(initialData);\n }\n }\n\n private publishToChannel = (payload: TCueCanvasChangeDataObject) => {\n if (!this.publish) return;\n\n this.publish({\n eventName: 'cue_canvas_changed',\n eventPayload: {\n data: payload,\n height: this.height,\n userId: this.userId,\n responseId: this.canvasId,\n },\n });\n };\n\n private onChange = (e: unknown) => {\n const data = e as TCueCanvasChangeData;\n const payload = Object.fromEntries(data.entries());\n\n if (checkTextOrEquationTool(payload)) {\n this.onUpdateActiveTool('move');\n }\n\n this.publishToChannel(payload);\n };\n\n private undo = () => {\n if (!this.polycanvas) {\n return;\n }\n\n const data = this.polycanvas.undo() as TCueCanvasChangeData;\n\n if (!data) {\n return;\n }\n\n const undoData = getReverseMap(data);\n\n this.onChange(undoData);\n };\n\n private redo = () => {\n if (!this.polycanvas) {\n return;\n }\n\n const data = this.polycanvas.redo() as TCueCanvasChangeData;\n\n if (!data) {\n return;\n }\n\n this.onChange(data);\n };\n\n clearCanvas = () => {\n if (this.polycanvas) {\n this.polycanvas.clear();\n }\n };\n\n private zoomIn = () => {\n if (!this.polycanvas) return;\n\n const viewPort = this.polycanvas.getViewport();\n\n this.polycanvas.setViewport(viewPort.x, viewPort.y, viewPort.zoom * 1.1);\n };\n\n private zoomOut = () => {\n if (!this.polycanvas) return;\n\n const viewPort = this.polycanvas.getViewport();\n\n this.polycanvas.setViewport(viewPort.x, viewPort.y, viewPort.zoom * 0.9);\n };\n\n getCanvasAsImage = async () => {\n if (!this.polycanvas) return;\n\n const image = await this.polycanvas.image(3000, 3000, 'png');\n\n return image;\n };\n\n private downloadCanvasAsImage = async () => {\n if (!this.polycanvas) return;\n\n const image = await this.polycanvas.image(3000, 3000, 'png');\n\n if (!image) return;\n\n const downloadLink = document.createElement('a');\n\n downloadLink.href = image;\n downloadLink.download = `canvas-drawing-${Date.now()}.png`;\n downloadLink.click();\n };\n\n private onViewPortChange = (e: IViewport): void => {\n if (!this.updateCanvasConfigChange) return;\n\n this.updateCanvasConfigChange({ dimesion: e });\n };\n\n private openFileUpload = (): void => {\n if (!this.fileInput) {\n this.fileInput = document.createElement('input');\n this.fileInput.type = 'file';\n this.fileInput.accept = 'image/*';\n this.fileInput.style.display = 'none';\n this.fileInput.onchange = this.onSelectImage;\n document.body.appendChild(this.fileInput);\n }\n\n this.fileInput.click();\n };\n\n addImageToCanvas = (imageUrl: string): void => {\n if (!this.polycanvas) return;\n\n const viewPort = this.polycanvas.getViewport();\n const imgJson = {\n name: 'image',\n href: imageUrl,\n x: viewPort.x + 24,\n y: viewPort.y + 24,\n width: 500,\n };\n\n const key = this.polycanvas.add({\n ...imgJson,\n });\n\n this.publishToChannel({\n [key]: [undefined, { ...imgJson, status: 'locked' }],\n });\n };\n\n private onSelectImage = async (event: Event): Promise<void> => {\n const target = event.target as HTMLInputElement;\n const file = target.files?.[0];\n\n if (!file || !this.polycanvas || !this.uploadImageToS3) return;\n\n const imageUrl = await this.uploadImageToS3(file);\n\n if (imageUrl === 'error') {\n return;\n }\n\n this.addImageToCanvas(imageUrl);\n\n target.value = '';\n };\n\n private updateCanvas = ({ data, userId }: IActionData) => {\n const canEditStroke = this.userType === 'TEACHER' || userId === this.userId;\n\n try {\n Object.entries(data).forEach(([key, value]) => {\n if (!value[0] && value[1]) {\n if ('name' in value[1] && value[1].name === 'image') {\n value[1].status = this.userType === 'STUDENT' ? 'locked' : undefined; // Lock only images for students\n }\n this.polycanvas?.add({ ...value[1], cannotEdit: !canEditStroke }, key);\n } else if (value[0] && !value[1]) {\n this.polycanvas?.delete(key);\n } else if (value[0] && value[1]) {\n this.polycanvas?.update(key, { ...value[1] });\n }\n });\n } catch (error) {\n captureMessage('Error Updating Canvas', data);\n }\n };\n\n toggleTiles = (val: boolean) => {\n this.polycanvas?.toggleSidebar(val);\n };\n\n setViewPort = ({ x, y, zoom }: IViewport) => {\n if (this.polycanvas) {\n const cv = this.polycanvas?.getViewport();\n\n if (cv.x === x && cv.y === y && cv.zoom === zoom) {\n return; // No change needed\n }\n\n this.polycanvas.setViewport(x, y, zoom);\n }\n };\n\n resetViewPort = () => {\n if (this.polycanvas) {\n this.polycanvas.resetViewport();\n }\n };\n\n changeGrid = (gridName: TCueCanvasGridName) => {\n if (!this.polycanvas || this.gridName === gridName) return;\n\n this.polycanvas.setOptions({\n grid: gridName,\n });\n this.gridName = gridName;\n if (this.updateCanvasConfigChange) {\n this.updateCanvasConfigChange({ gridName: gridName });\n }\n };\n\n lockSelectedTiles = () => {\n const { tiles: allTiles } = this.polycanvas?.serialize() || {};\n const selectedItems = this.polycanvas?.getSelection() || [];\n\n if (selectedItems.length > 0 && allTiles) {\n const lockedTiles: TCueCanvasChangeDataObject = {};\n\n selectedItems.forEach(key => {\n if (!allTiles[key]?.name) return;\n\n const updatedJson = { ...allTiles[key], status: 'locked' as const };\n\n this.polycanvas?.update(key, updatedJson);\n if (allTiles[key]?.name) lockedTiles[key] = [allTiles[key], updatedJson];\n });\n\n this.publishToChannel(lockedTiles);\n }\n };\n\n unlockAllTiles = () => {\n if (!this.polycanvas) return;\n\n const { tiles: allTiles } = this.polycanvas.serialize();\n const unlockedTiles: TCueCanvasChangeDataObject = {};\n\n if (allTiles && Object.entries(allTiles).length > 0) {\n Object.entries(allTiles).forEach(([key, item]) => {\n if (item.status !== 'locked') return;\n\n const updatedJson = { ...item, status: undefined };\n\n this.polycanvas?.update(key, updatedJson);\n unlockedTiles[key] = [item, updatedJson];\n });\n\n this.publishToChannel(unlockedTiles);\n }\n };\n\n replaceCanvas = (data: IReplaceCanvas) => {\n if (!this.polycanvas) return;\n\n const { data: canvasData, gridName } = data;\n\n this.polycanvas.clear();\n if (gridName) {\n this.changeGrid(gridName);\n }\n\n Object.entries(canvasData).forEach(([key, value]) => {\n if (!value[0] && value[1]) {\n this.polycanvas?.add({ ...value[1] }, key);\n\n return;\n }\n });\n\n this.publishToChannel(canvasData);\n };\n\n setTool = (tool: TCueCanvasTool) => {\n if (!this.polycanvas || tool === this.activeTool) return;\n this.activeTool = tool;\n const [currTool, currSubTool] = getToolAndSubtool(tool);\n\n switch (currTool) {\n case 'clearAll':\n this.clearCanvas();\n break;\n case 'home':\n this.resetViewPort();\n break;\n case 'undo':\n this.undo();\n break;\n case 'redo':\n this.redo();\n break;\n case 'lock':\n this.lockSelectedTiles();\n break;\n case 'unlock':\n this.unlockAllTiles();\n break;\n case 'zoomIn':\n this.zoomIn();\n break;\n case 'zoomOut':\n this.zoomOut();\n break;\n case 'upload':\n this.openFileUpload();\n break;\n case 'download':\n this.downloadCanvasAsImage();\n break;\n case 'grid':\n break;\n default:\n this.polycanvas.setTool(currTool, currSubTool);\n }\n };\n\n /**\n * The `update` method is called in two cases:\n * 1. When receiving initial data to update the canvas content.\n * 2. When receiving strokes from other peers to update the canvas content.\n * Each item can contain multiple actions, which are applied to the canvas.\n *\n * The method checks if the payload is an array or a single object.\n * If it's an array, it iterates over each item and updates the canvas accordingly.\n * If it's a single object, it directly updates the canvas.\n *\n * 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.\n */\n update = (payload: IActionData | IActionData[]) => {\n if (Array.isArray(payload)) {\n const heights = payload.map(data => data.height).filter(Boolean);\n const maxHeight = Math.max(...heights);\n\n if (maxHeight > this.height) {\n this.updateHeight(maxHeight);\n }\n payload.forEach(item => this.updateCanvas(item));\n } else {\n if (payload.height > this.height) {\n this.updateHeight(payload.height);\n }\n this.updateCanvas(payload);\n }\n };\n\n getSelections = () => {\n return this.polycanvas ? this.polycanvas.getSelection() : [];\n };\n\n setColor = (color: TCueCanvasColors) => {\n if (!this.polycanvas || !this.activeColor) return;\n\n const selectedColor = CANVAS_COLORS[color];\n\n const selections = this.getSelections();\n\n if (selections && selections.length > 0) {\n selections.forEach((key: string) => {\n this.polycanvas?.update(key, { color: selectedColor });\n this.onChange(\n new Map([[key, [{ color: CANVAS_COLORS[this.activeColor] }, { color: selectedColor }]]]),\n );\n });\n }\n this.polycanvas.setColor(selectedColor);\n this.activeColor = color;\n };\n\n updateHeight = (height: number) => {\n this.height = height;\n this.onUpdateHeight?.(height);\n };\n\n destroy = () => {\n if (this.polycanvas) {\n this.polycanvas.off('change', this.onChange);\n this.polycanvas.destroy();\n this.debouncedViewportChange.cancel();\n\n if (this.renderAs === 'whiteboard' && this.userType === 'TEACHER') {\n this.polycanvas.off('viewport', this.debouncedViewportChange);\n }\n this.polycanvas = undefined;\n\n if (this.fileInput && this.fileInput.parentNode) {\n this.fileInput.parentNode.removeChild(this.fileInput);\n this.fileInput = null;\n }\n }\n };\n}\n"],"names":["CueCanvasCore","onPublish","onSubscribe","onUpdateActiveTool","onUpdateHeight","uploadImageToS3","height","userId","canvasId","userType","renderAs","updateCanvasConfig","__publicField","payload","e","checkTextOrEquationTool","data","undoData","getReverseMap","viewPort","image","downloadLink","imageUrl","imgJson","key","event","target","file","_a","canEditStroke","value","_b","_c","captureMessage","val","x","y","zoom","cv","gridName","allTiles","selectedItems","lockedTiles","updatedJson","unlockedTiles","item","canvasData","tool","currTool","currSubTool","getToolAndSubtool","heights","maxHeight","color","selectedColor","CANVAS_COLORS","selections","debounce","getColorsForUser","canvasElementRef","canvasConfig","canvasSetting","initialData","removeTileButton","removeMask"],"mappings":"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"}
1
+ {"version":3,"file":"cue-canvas-core.js","sources":["../../../src/features/cue-canvas/cue-canvas-core.ts"],"sourcesContent":["import type { TUserTypes } from '../ui/types';\nimport type {\n IActionData,\n IViewport,\n TCueCanvasChangeData,\n TCueCanvasGridName,\n TCueCanvasTool,\n TPublish,\n TRenderAs,\n TCueCanvasChangeDataObject,\n IReplaceCanvas,\n ICueCanvasCoreProps,\n} from './types/cue-canvas';\nimport type { ICreateOptions } from './types/cue-canvas';\nimport type { IPolypad, IPolyPadInstance } from './types/polypad';\n\nimport debounce from 'lodash.debounce';\n\nimport {\n checkTextOrEquationTool,\n getReverseMap,\n getToolAndSubtool,\n removeMask,\n removeTileButton,\n} from './cue-canvas-helpers';\n\ndeclare global {\n interface Window {\n Polypad: IPolypad;\n }\n}\n\n/**\n * The CueCanvasCore class manages the canvas state and tool synchronization.\n * When text or equations are added, Polypad automatically switches to 'move' tool.\n * onUpdateActiveTool ensures the UI reflects this automatic tool change.\n */\n\nexport class CueCanvasCore {\n private polycanvas: IPolyPadInstance | undefined;\n private publish?: TPublish;\n private height: number;\n private onUpdateActiveTool: (tool: TCueCanvasTool) => void;\n private onUpdateHeight?: (height: number) => void;\n private userId: string;\n private canvasId: string;\n private userType: TUserTypes;\n private renderAs: TRenderAs;\n private fileInput: HTMLInputElement | null = null;\n private debouncedViewportChange: ReturnType<typeof debounce>;\n private uploadImageToS3?: (file: File) => string;\n\n constructor({\n onPublish,\n onSubscribe,\n onUpdateActiveTool,\n onUpdateHeight,\n uploadImageToS3,\n height,\n userId,\n canvasId,\n userType,\n renderAs,\n }: ICueCanvasCoreProps) {\n this.onUpdateHeight = onUpdateHeight;\n this.onUpdateActiveTool = onUpdateActiveTool;\n this.height = height;\n this.uploadImageToS3 = uploadImageToS3;\n this.userId = userId;\n this.canvasId = canvasId;\n this.publish = onPublish;\n this.userType = userType;\n this.renderAs = renderAs;\n this.debouncedViewportChange = debounce(this.onViewPortChange, 300);\n onSubscribe?.(this.canvasId, this.update);\n }\n\n async create({ canvasElementRef, canvasConfig, canvasSetting, initialData }: ICreateOptions) {\n if (!canvasElementRef.current) {\n throw new Error('PolyCanvas: Div Element Not found for canvas');\n }\n this.polycanvas = await window.Polypad.create(canvasElementRef.current, {\n initial: {\n options: canvasConfig,\n },\n ...canvasSetting,\n imageUpload:\n this.renderAs === 'whiteboard' && this.userType === 'TEACHER'\n ? this.uploadFileToCanvas\n : undefined,\n });\n\n if (this.renderAs === 'whiteboard' && this.userType === 'TEACHER') {\n this.polycanvas.toggleSidebar(false);\n\n removeTileButton(canvasElementRef);\n this.polycanvas.on('viewport', this.debouncedViewportChange);\n }\n\n removeMask(canvasElementRef);\n this.polycanvas.on('change', this.onChange);\n if (initialData) {\n this.update(initialData);\n }\n }\n\n private publishToChannel = (\n payload: TCueCanvasChangeDataObject,\n gridName?: TCueCanvasGridName,\n dimension?: IViewport,\n ) => {\n if (!this.publish) return;\n\n this.publish({\n eventName: 'cue_canvas_changed',\n eventPayload: {\n data: payload,\n height: this.height,\n userId: this.userId,\n responseId: this.canvasId,\n gridName,\n dimension,\n },\n });\n };\n\n private onChange = (e: unknown) => {\n const data = e as TCueCanvasChangeData;\n const payload = Object.fromEntries(data.entries());\n\n if (checkTextOrEquationTool(payload)) {\n this.onUpdateActiveTool('move');\n }\n\n this.publishToChannel(payload);\n };\n\n private undo = () => {\n if (!this.polycanvas) {\n return;\n }\n\n const data = this.polycanvas.undo() as TCueCanvasChangeData;\n\n if (!data) {\n return;\n }\n\n const undoData = getReverseMap(data);\n\n this.onChange(undoData);\n };\n\n private redo = () => {\n if (!this.polycanvas) {\n return;\n }\n\n const data = this.polycanvas.redo() as TCueCanvasChangeData;\n\n if (!data) {\n return;\n }\n\n this.onChange(data);\n };\n\n private clearCanvas = () => {\n if (this.polycanvas) {\n this.polycanvas.clear();\n }\n };\n\n private zoomIn = () => {\n if (!this.polycanvas) return;\n\n const viewPort = this.polycanvas.getViewport();\n\n this.polycanvas.setViewport(viewPort.x, viewPort.y, viewPort.zoom * 1.1);\n };\n\n private zoomOut = () => {\n if (!this.polycanvas) return;\n\n const viewPort = this.polycanvas.getViewport();\n\n this.polycanvas.setViewport(viewPort.x, viewPort.y, viewPort.zoom * 0.9);\n };\n\n private downloadCanvasAsImage = async () => {\n if (!this.polycanvas) return;\n\n const image = await this.polycanvas.image(3000, 3000, 'png');\n\n if (!image) return;\n\n const downloadLink = document.createElement('a');\n\n downloadLink.href = image;\n downloadLink.download = `canvas-drawing-${Date.now()}.png`;\n downloadLink.click();\n };\n\n private uploadFileToCanvas = async (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n this.uploadImageToS3\n ? resolve(this.uploadImageToS3(file))\n : reject(new Error('Upload function not provided'));\n });\n };\n\n private onViewPortChange = (e: IViewport): void => {\n if (!this.publish) return;\n\n const data = e as IViewport;\n\n this.publishToChannel({}, undefined, data);\n };\n\n private openFileUpload = (): void => {\n if (!this.fileInput) {\n this.fileInput = document.createElement('input');\n this.fileInput.type = 'file';\n this.fileInput.accept = 'image/*';\n this.fileInput.style.display = 'none';\n this.fileInput.onchange = this.addImageToCanvas;\n document.body.appendChild(this.fileInput);\n }\n\n this.fileInput.click();\n };\n\n private addImageToCanvas = async (event: Event): Promise<void> => {\n const target = event.target as HTMLInputElement;\n const file = target.files?.[0];\n\n if (!file || !this.polycanvas || !this.uploadImageToS3) return;\n\n const imageBase64 = await this.uploadImageToS3(file);\n const viewPort = this.polycanvas.getViewport();\n const imgJson = {\n name: 'image',\n href: imageBase64,\n x: viewPort.x + 88,\n y: viewPort.y + 88,\n };\n\n const key = this.polycanvas.add({\n ...imgJson,\n });\n\n this.publishToChannel({\n [key]: [undefined, { ...imgJson, status: 'locked' }],\n });\n\n target.value = '';\n };\n\n private updateCanvasConfig = (\n height: number,\n dimension: IViewport | undefined,\n gridName: TCueCanvasGridName | undefined,\n ) => {\n if (!this.polycanvas) return;\n\n if (height > this.height) {\n this.updateHeight(height);\n }\n\n if (dimension) {\n this.polycanvas.setViewport(dimension.x, dimension.y, dimension.zoom);\n }\n\n if (gridName) {\n this.polycanvas.setOptions({\n grid: gridName,\n });\n }\n };\n\n private updateCanvas = ({ data, userId }: IActionData) => {\n const canEditStroke = this.userType === 'TEACHER' || userId === this.userId;\n\n Object.entries(data).forEach(([key, value]) => {\n if (!value[0] && value[1]) {\n this.polycanvas?.add({ ...value[1], cannotEdit: !canEditStroke }, key);\n } else if (value[0] && !value[1]) {\n this.polycanvas?.delete(key);\n } else if (value[0] && value[1]) {\n this.polycanvas?.update(key, { ...value[1] });\n }\n });\n };\n\n toggleTiles = (val: boolean) => {\n this.polycanvas?.toggleSidebar(val);\n };\n\n resetViewPort = () => {\n if (this.polycanvas) {\n this.polycanvas.resetViewport();\n }\n };\n\n changeGrid = (gridName: TCueCanvasGridName) => {\n if (!this.polycanvas) return;\n\n this.polycanvas.setOptions({\n grid: gridName,\n });\n\n this.publishToChannel({}, gridName);\n };\n\n lockSelectedTiles = () => {\n const { tiles: allTiles } = this.polycanvas?.serialize() || {};\n const selectedItems = this.polycanvas?.getSelection() || [];\n\n if (selectedItems.length > 0 && allTiles) {\n const lockedTiles: TCueCanvasChangeDataObject = {};\n\n selectedItems.forEach(key => {\n if (!allTiles[key]?.name) return;\n\n const updatedJson = { ...allTiles[key], status: 'locked' as const };\n\n this.polycanvas?.update(key, updatedJson);\n if (allTiles[key]?.name) lockedTiles[key] = [allTiles[key], updatedJson];\n });\n\n this.publishToChannel(lockedTiles);\n }\n };\n\n unlockAllTiles = () => {\n if (!this.polycanvas) return;\n\n const { tiles: allTiles } = this.polycanvas.serialize();\n const unlockedTiles: TCueCanvasChangeDataObject = {};\n\n if (allTiles && Object.entries(allTiles).length > 0) {\n Object.entries(allTiles).forEach(([key, item]) => {\n if (item.status !== 'locked') return;\n\n const updatedJson = { ...item, status: undefined };\n\n this.polycanvas?.update(key, updatedJson);\n unlockedTiles[key] = [item, updatedJson];\n });\n\n this.publishToChannel(unlockedTiles);\n }\n };\n\n replaceCanvas = (data: IReplaceCanvas) => {\n if (!this.polycanvas) return;\n\n const { data: canvasData, gridName } = data;\n\n this.polycanvas.clear();\n\n if (gridName) {\n this.polycanvas.setOptions({\n grid: gridName,\n });\n }\n\n Object.entries(canvasData).forEach(([key, value]) => {\n if (!value[0] && value[1]) {\n this.polycanvas?.add({ ...value[1] }, key);\n\n return;\n }\n });\n\n this.publishToChannel(canvasData, gridName);\n };\n\n setTool = (tool: TCueCanvasTool) => {\n if (this.polycanvas) {\n const [currTool, currSubTool] = getToolAndSubtool(tool);\n\n switch (currTool) {\n case 'clearAll':\n this.clearCanvas();\n break;\n case 'home':\n this.resetViewPort();\n break;\n case 'undo':\n this.undo();\n break;\n case 'redo':\n this.redo();\n break;\n case 'lock':\n this.lockSelectedTiles();\n break;\n case 'unlock':\n this.unlockAllTiles();\n break;\n case 'zoomIn':\n this.zoomIn();\n break;\n case 'zoomOut':\n this.zoomOut();\n break;\n case 'upload':\n this.openFileUpload();\n break;\n case 'download':\n this.downloadCanvasAsImage();\n break;\n case 'grid':\n break;\n default:\n this.polycanvas.setTool(currTool, currSubTool);\n }\n }\n };\n\n /**\n * The `update` method is called in two cases:\n * 1. When receiving initial data to update the canvas content.\n * 2. When receiving strokes from other peers to update the canvas content.\n * Each item can contain multiple actions, which are applied to the canvas.\n *\n * The method checks if the payload is an array or a single object.\n * If it's an array, it iterates over each item and updates the canvas accordingly.\n * If it's a single object, it directly updates the canvas.\n *\n * 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.\n */\n update = (payload: IActionData | IActionData[]) => {\n if (Array.isArray(payload)) {\n const heights = payload.map(data => data.height).filter(Boolean);\n const maxHeight = Math.max(...heights);\n const lastDimension = payload.map(data => data.dimension).filter(Boolean)[payload.length - 1];\n const lastGrid = payload.map(data => data.gridName).filter(Boolean)[payload.length - 1];\n\n this.updateCanvasConfig(maxHeight, lastDimension, lastGrid);\n payload.forEach(item => this.updateCanvas(item));\n } else {\n this.updateCanvasConfig(payload.height, payload.dimension, payload?.gridName);\n this.updateCanvas(payload);\n }\n };\n\n setColor = (color: string) => {\n if (this.polycanvas) {\n this.polycanvas.setColor(color);\n }\n };\n\n updateHeight = (height: number) => {\n this.height = height;\n this.onUpdateHeight?.(height);\n };\n\n destroy = () => {\n if (this.polycanvas) {\n this.polycanvas.off('change', this.onChange);\n this.polycanvas.destroy();\n this.debouncedViewportChange.cancel();\n\n if (this.renderAs === 'whiteboard' && this.userType === 'TEACHER') {\n this.polycanvas.off('viewport', this.debouncedViewportChange);\n }\n this.polycanvas = undefined;\n\n if (this.fileInput && this.fileInput.parentNode) {\n this.fileInput.parentNode.removeChild(this.fileInput);\n this.fileInput = null;\n }\n }\n };\n}\n"],"names":["CueCanvasCore","onPublish","onSubscribe","onUpdateActiveTool","onUpdateHeight","uploadImageToS3","height","userId","canvasId","userType","renderAs","__publicField","payload","gridName","dimension","e","checkTextOrEquationTool","data","undoData","getReverseMap","viewPort","image","downloadLink","file","resolve","reject","event","target","_a","imageBase64","imgJson","key","canEditStroke","value","_b","_c","val","allTiles","selectedItems","lockedTiles","updatedJson","unlockedTiles","item","canvasData","tool","currTool","currSubTool","getToolAndSubtool","heights","maxHeight","lastDimension","lastGrid","color","debounce","canvasElementRef","canvasConfig","canvasSetting","initialData","removeTileButton","removeMask"],"mappings":"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"}