@kritzel/editor 0.4.31

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 (298) hide show
  1. package/LICENSE.md +50 -0
  2. package/README.md +5 -0
  3. package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
  4. package/dist/cjs/index-B92VHWr4.js +1834 -0
  5. package/dist/cjs/index.cjs.js +2 -0
  6. package/dist/cjs/kritzel-active-users_46.cjs.entry.js +75271 -0
  7. package/dist/cjs/kritzel-brush-style.cjs.entry.js +31 -0
  8. package/dist/cjs/kritzel-editor.cjs.js +25 -0
  9. package/dist/cjs/loader.cjs.js +13 -0
  10. package/dist/collection/collection-manifest.json +65 -0
  11. package/dist/collection/components/kritzel-active-users/kritzel-active-users.css +65 -0
  12. package/dist/collection/components/kritzel-active-users/kritzel-active-users.js +134 -0
  13. package/dist/collection/components/kritzel-avatar/kritzel-avatar.css +58 -0
  14. package/dist/collection/components/kritzel-avatar/kritzel-avatar.js +207 -0
  15. package/dist/collection/components/kritzel-back-to-content/kritzel-back-to-content.css +42 -0
  16. package/dist/collection/components/kritzel-back-to-content/kritzel-back-to-content.js +95 -0
  17. package/dist/collection/components/kritzel-brush-style/kritzel-brush-style.css +43 -0
  18. package/dist/collection/components/kritzel-brush-style/kritzel-brush-style.js +97 -0
  19. package/dist/collection/components/kritzel-button/kritzel-button.css +73 -0
  20. package/dist/collection/components/kritzel-button/kritzel-button.js +118 -0
  21. package/dist/collection/components/kritzel-color/kritzel-color.css +25 -0
  22. package/dist/collection/components/kritzel-color/kritzel-color.js +149 -0
  23. package/dist/collection/components/kritzel-color-palette/kritzel-color-palette.css +46 -0
  24. package/dist/collection/components/kritzel-color-palette/kritzel-color-palette.js +225 -0
  25. package/dist/collection/components/kritzel-context-menu/kritzel-context-menu.css +112 -0
  26. package/dist/collection/components/kritzel-context-menu/kritzel-context-menu.js +368 -0
  27. package/dist/collection/components/kritzel-current-user/kritzel-current-user.css +11 -0
  28. package/dist/collection/components/kritzel-current-user/kritzel-current-user.js +109 -0
  29. package/dist/collection/components/kritzel-current-user-dialog/kritzel-current-user-dialog.css +39 -0
  30. package/dist/collection/components/kritzel-current-user-dialog/kritzel-current-user-dialog.js +169 -0
  31. package/dist/collection/components/kritzel-dialog/kritzel-dialog.css +209 -0
  32. package/dist/collection/components/kritzel-dialog/kritzel-dialog.js +787 -0
  33. package/dist/collection/components/kritzel-dropdown/kritzel-dropdown.css +190 -0
  34. package/dist/collection/components/kritzel-dropdown/kritzel-dropdown.js +418 -0
  35. package/dist/collection/components/kritzel-editor/kritzel-editor.css +161 -0
  36. package/dist/collection/components/kritzel-editor/kritzel-editor.js +4678 -0
  37. package/dist/collection/components/kritzel-export/kritzel-export.css +89 -0
  38. package/dist/collection/components/kritzel-export/kritzel-export.js +246 -0
  39. package/dist/collection/components/kritzel-font/kritzel-font.css +10 -0
  40. package/dist/collection/components/kritzel-font/kritzel-font.js +89 -0
  41. package/dist/collection/components/kritzel-font-family/kritzel-font-family.css +48 -0
  42. package/dist/collection/components/kritzel-font-family/kritzel-font-family.js +122 -0
  43. package/dist/collection/components/kritzel-font-size/kritzel-font-size.css +30 -0
  44. package/dist/collection/components/kritzel-font-size/kritzel-font-size.js +117 -0
  45. package/dist/collection/components/kritzel-input/kritzel-input.css +69 -0
  46. package/dist/collection/components/kritzel-input/kritzel-input.js +198 -0
  47. package/dist/collection/components/kritzel-line-endings/kritzel-line-endings.css +60 -0
  48. package/dist/collection/components/kritzel-line-endings/kritzel-line-endings.js +165 -0
  49. package/dist/collection/components/kritzel-loading-overlay/kritzel-loading-overlay.css +54 -0
  50. package/dist/collection/components/kritzel-loading-overlay/kritzel-loading-overlay.js +70 -0
  51. package/dist/collection/components/kritzel-login-dialog/kritzel-login-dialog.css +98 -0
  52. package/dist/collection/components/kritzel-login-dialog/kritzel-login-dialog.js +239 -0
  53. package/dist/collection/components/kritzel-master-detail/kritzel-master-detail.css +190 -0
  54. package/dist/collection/components/kritzel-master-detail/kritzel-master-detail.js +201 -0
  55. package/dist/collection/components/kritzel-menu/kritzel-menu.css +34 -0
  56. package/dist/collection/components/kritzel-menu/kritzel-menu.js +297 -0
  57. package/dist/collection/components/kritzel-menu-item/kritzel-menu-item.css +167 -0
  58. package/dist/collection/components/kritzel-menu-item/kritzel-menu-item.js +298 -0
  59. package/dist/collection/components/kritzel-more-menu/kritzel-more-menu.css +58 -0
  60. package/dist/collection/components/kritzel-more-menu/kritzel-more-menu.js +381 -0
  61. package/dist/collection/components/kritzel-notification-card/kritzel-notification-card.css +101 -0
  62. package/dist/collection/components/kritzel-notification-card/kritzel-notification-card.js +173 -0
  63. package/dist/collection/components/kritzel-numeric-input/kritzel-numeric-input.css +102 -0
  64. package/dist/collection/components/kritzel-numeric-input/kritzel-numeric-input.js +255 -0
  65. package/dist/collection/components/kritzel-opacity-slider/kritzel-opacity-slider.css +85 -0
  66. package/dist/collection/components/kritzel-opacity-slider/kritzel-opacity-slider.js +164 -0
  67. package/dist/collection/components/kritzel-pill-tabs/kritzel-pill-tabs.css +68 -0
  68. package/dist/collection/components/kritzel-pill-tabs/kritzel-pill-tabs.js +135 -0
  69. package/dist/collection/components/kritzel-portal/kritzel-portal.js +432 -0
  70. package/dist/collection/components/kritzel-settings/kritzel-settings.css +137 -0
  71. package/dist/collection/components/kritzel-settings/kritzel-settings.js +448 -0
  72. package/dist/collection/components/kritzel-shape-fill/kritzel-shape-fill.css +47 -0
  73. package/dist/collection/components/kritzel-shape-fill/kritzel-shape-fill.js +93 -0
  74. package/dist/collection/components/kritzel-share-dialog/kritzel-share-dialog.css +150 -0
  75. package/dist/collection/components/kritzel-share-dialog/kritzel-share-dialog.js +308 -0
  76. package/dist/collection/components/kritzel-slide-toggle/kritzel-slide-toggle.css +48 -0
  77. package/dist/collection/components/kritzel-slide-toggle/kritzel-slide-toggle.js +119 -0
  78. package/dist/collection/components/kritzel-split-button/kritzel-split-button.css +78 -0
  79. package/dist/collection/components/kritzel-split-button/kritzel-split-button.js +433 -0
  80. package/dist/collection/components/kritzel-stroke-size/kritzel-stroke-size.css +37 -0
  81. package/dist/collection/components/kritzel-stroke-size/kritzel-stroke-size.js +89 -0
  82. package/dist/collection/components/kritzel-tool-config/kritzel-tool-config.css +38 -0
  83. package/dist/collection/components/kritzel-tool-config/kritzel-tool-config.js +467 -0
  84. package/dist/collection/components/kritzel-toolbar/kritzel-toolbar.css +348 -0
  85. package/dist/collection/components/kritzel-toolbar/kritzel-toolbar.js +588 -0
  86. package/dist/collection/components/kritzel-tooltip/kritzel-tooltip.css +18 -0
  87. package/dist/collection/components/kritzel-tooltip/kritzel-tooltip.js +388 -0
  88. package/dist/collection/components/kritzel-utility-panel/kritzel-utility-panel.css +46 -0
  89. package/dist/collection/components/kritzel-utility-panel/kritzel-utility-panel.js +146 -0
  90. package/dist/collection/components/kritzel-workspace-manager/kritzel-workspace-manager.css +16 -0
  91. package/dist/collection/components/kritzel-workspace-manager/kritzel-workspace-manager.js +365 -0
  92. package/dist/collection/components/kritzel-zoom-panel/kritzel-zoom-panel.css +72 -0
  93. package/dist/collection/components/kritzel-zoom-panel/kritzel-zoom-panel.js +173 -0
  94. package/dist/collection/index.js +1 -0
  95. package/dist/components/index.d.ts +121 -0
  96. package/dist/components/index.js +48 -0
  97. package/dist/components/kritzel-active-users.d.ts +11 -0
  98. package/dist/components/kritzel-active-users.js +6 -0
  99. package/dist/components/kritzel-avatar.d.ts +11 -0
  100. package/dist/components/kritzel-avatar.js +6 -0
  101. package/dist/components/kritzel-awareness-cursors.js +6 -0
  102. package/dist/components/kritzel-back-to-content.d.ts +11 -0
  103. package/dist/components/kritzel-back-to-content.js +6 -0
  104. package/dist/components/kritzel-brush-style.d.ts +11 -0
  105. package/dist/components/kritzel-brush-style.js +64 -0
  106. package/dist/components/kritzel-button.d.ts +11 -0
  107. package/dist/components/kritzel-button.js +6 -0
  108. package/dist/components/kritzel-color-palette.d.ts +11 -0
  109. package/dist/components/kritzel-color-palette.js +6 -0
  110. package/dist/components/kritzel-color.d.ts +11 -0
  111. package/dist/components/kritzel-color.js +6 -0
  112. package/dist/components/kritzel-context-menu.d.ts +11 -0
  113. package/dist/components/kritzel-context-menu.js +6 -0
  114. package/dist/components/kritzel-current-user-dialog.d.ts +11 -0
  115. package/dist/components/kritzel-current-user-dialog.js +6 -0
  116. package/dist/components/kritzel-current-user.d.ts +11 -0
  117. package/dist/components/kritzel-current-user.js +6 -0
  118. package/dist/components/kritzel-cursor-trail.js +6 -0
  119. package/dist/components/kritzel-dialog.d.ts +11 -0
  120. package/dist/components/kritzel-dialog.js +6 -0
  121. package/dist/components/kritzel-dropdown.d.ts +11 -0
  122. package/dist/components/kritzel-dropdown.js +6 -0
  123. package/dist/components/kritzel-editor.d.ts +11 -0
  124. package/dist/components/kritzel-editor.js +1792 -0
  125. package/dist/components/kritzel-engine.js +6 -0
  126. package/dist/components/kritzel-export.d.ts +11 -0
  127. package/dist/components/kritzel-export.js +6 -0
  128. package/dist/components/kritzel-font-family.d.ts +11 -0
  129. package/dist/components/kritzel-font-family.js +6 -0
  130. package/dist/components/kritzel-font-size.d.ts +11 -0
  131. package/dist/components/kritzel-font-size.js +6 -0
  132. package/dist/components/kritzel-font.d.ts +11 -0
  133. package/dist/components/kritzel-font.js +6 -0
  134. package/dist/components/kritzel-icon.js +6 -0
  135. package/dist/components/kritzel-input.d.ts +11 -0
  136. package/dist/components/kritzel-input.js +6 -0
  137. package/dist/components/kritzel-line-endings.d.ts +11 -0
  138. package/dist/components/kritzel-line-endings.js +6 -0
  139. package/dist/components/kritzel-loading-overlay.d.ts +11 -0
  140. package/dist/components/kritzel-loading-overlay.js +6 -0
  141. package/dist/components/kritzel-login-dialog.d.ts +11 -0
  142. package/dist/components/kritzel-login-dialog.js +6 -0
  143. package/dist/components/kritzel-master-detail.d.ts +11 -0
  144. package/dist/components/kritzel-master-detail.js +6 -0
  145. package/dist/components/kritzel-menu-item.d.ts +11 -0
  146. package/dist/components/kritzel-menu-item.js +6 -0
  147. package/dist/components/kritzel-menu.d.ts +11 -0
  148. package/dist/components/kritzel-menu.js +6 -0
  149. package/dist/components/kritzel-more-menu.d.ts +11 -0
  150. package/dist/components/kritzel-more-menu.js +6 -0
  151. package/dist/components/kritzel-notification-card.d.ts +11 -0
  152. package/dist/components/kritzel-notification-card.js +6 -0
  153. package/dist/components/kritzel-numeric-input.d.ts +11 -0
  154. package/dist/components/kritzel-numeric-input.js +6 -0
  155. package/dist/components/kritzel-opacity-slider.d.ts +11 -0
  156. package/dist/components/kritzel-opacity-slider.js +6 -0
  157. package/dist/components/kritzel-pill-tabs.d.ts +11 -0
  158. package/dist/components/kritzel-pill-tabs.js +6 -0
  159. package/dist/components/kritzel-portal.d.ts +11 -0
  160. package/dist/components/kritzel-portal.js +6 -0
  161. package/dist/components/kritzel-settings.d.ts +11 -0
  162. package/dist/components/kritzel-settings.js +6 -0
  163. package/dist/components/kritzel-shape-fill.d.ts +11 -0
  164. package/dist/components/kritzel-shape-fill.js +6 -0
  165. package/dist/components/kritzel-share-dialog.d.ts +11 -0
  166. package/dist/components/kritzel-share-dialog.js +6 -0
  167. package/dist/components/kritzel-slide-toggle.d.ts +11 -0
  168. package/dist/components/kritzel-slide-toggle.js +6 -0
  169. package/dist/components/kritzel-split-button.d.ts +11 -0
  170. package/dist/components/kritzel-split-button.js +6 -0
  171. package/dist/components/kritzel-stroke-size.d.ts +11 -0
  172. package/dist/components/kritzel-stroke-size.js +6 -0
  173. package/dist/components/kritzel-tool-config.d.ts +11 -0
  174. package/dist/components/kritzel-tool-config.js +6 -0
  175. package/dist/components/kritzel-toolbar.d.ts +11 -0
  176. package/dist/components/kritzel-toolbar.js +6 -0
  177. package/dist/components/kritzel-tooltip.d.ts +11 -0
  178. package/dist/components/kritzel-tooltip.js +6 -0
  179. package/dist/components/kritzel-utility-panel.d.ts +11 -0
  180. package/dist/components/kritzel-utility-panel.js +6 -0
  181. package/dist/components/kritzel-watermark.js +6 -0
  182. package/dist/components/kritzel-workspace-manager.d.ts +11 -0
  183. package/dist/components/kritzel-workspace-manager.js +6 -0
  184. package/dist/components/kritzel-zoom-panel.d.ts +11 -0
  185. package/dist/components/kritzel-zoom-panel.js +6 -0
  186. package/dist/components/p-4-qLegHb.js +142 -0
  187. package/dist/components/p-5qkOM1RJ.js +1557 -0
  188. package/dist/components/p-B3Tqoyl9.js +43 -0
  189. package/dist/components/p-B5xYV1o3.js +77 -0
  190. package/dist/components/p-B6UJztrf.js +290 -0
  191. package/dist/components/p-BDjRSoAc.js +43 -0
  192. package/dist/components/p-BFTU3MAI.js +7 -0
  193. package/dist/components/p-BGmTmdLe.js +167 -0
  194. package/dist/components/p-BN8VWPlq.js +164 -0
  195. package/dist/components/p-BZ_KnHdR.js +222 -0
  196. package/dist/components/p-B_gT0lCn.js +94 -0
  197. package/dist/components/p-BfMlwIcG.js +62 -0
  198. package/dist/components/p-BjFrt1q0.js +62 -0
  199. package/dist/components/p-Blq9a1ni.js +3267 -0
  200. package/dist/components/p-BrGJIoGK.js +52 -0
  201. package/dist/components/p-BvG3JO85.js +56 -0
  202. package/dist/components/p-CS3YZVYE.js +319 -0
  203. package/dist/components/p-CVxGF4bJ.js +150 -0
  204. package/dist/components/p-Ckqh1tqY.js +468 -0
  205. package/dist/components/p-ClfOtiNp.js +84 -0
  206. package/dist/components/p-CmjXRLdr.js +220 -0
  207. package/dist/components/p-CoNexfpB.js +106 -0
  208. package/dist/components/p-Cp4e4oTE.js +122 -0
  209. package/dist/components/p-CrIEmItB.js +85 -0
  210. package/dist/components/p-CvaxFYS0.js +304 -0
  211. package/dist/components/p-CwBxnzYu.js +57 -0
  212. package/dist/components/p-Cy_cLtOP.js +3456 -0
  213. package/dist/components/p-CzUeIini.js +381 -0
  214. package/dist/components/p-D0tPTPkR.js +99 -0
  215. package/dist/components/p-DJxgPPfs.js +194 -0
  216. package/dist/components/p-DOJCDPVD.js +55 -0
  217. package/dist/components/p-DVv8ChhE.js +91 -0
  218. package/dist/components/p-DXZBWJBt.js +70 -0
  219. package/dist/components/p-DXuf225S.js +53 -0
  220. package/dist/components/p-DZsSiMnA.js +63037 -0
  221. package/dist/components/p-DqOC_Yck.js +112 -0
  222. package/dist/components/p-Ds0uNtwQ.js +97 -0
  223. package/dist/components/p-DyRJFg4w.js +57 -0
  224. package/dist/components/p-GbCxpbQ6.js +88 -0
  225. package/dist/components/p-McY5wZ0h.js +135 -0
  226. package/dist/components/p-QEue33R5.js +70 -0
  227. package/dist/components/p-R1D8Sr0l.js +299 -0
  228. package/dist/components/p-SLnqczCS.js +49 -0
  229. package/dist/components/p-hQwVRh0t.js +147 -0
  230. package/dist/components/p-h_uh_Njf.js +63 -0
  231. package/dist/components/p-kOINnzaR.js +161 -0
  232. package/dist/components/p-peZjvnkK.js +486 -0
  233. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  234. package/dist/esm/index-OjbYJz-P.js +1807 -0
  235. package/dist/esm/index.js +1 -0
  236. package/dist/esm/kritzel-active-users_46.entry.js +75224 -0
  237. package/dist/esm/kritzel-brush-style.entry.js +29 -0
  238. package/dist/esm/kritzel-editor.js +21 -0
  239. package/dist/esm/loader.js +11 -0
  240. package/dist/index.cjs.js +1 -0
  241. package/dist/index.js +1 -0
  242. package/dist/kritzel-editor/index.esm.js +1 -0
  243. package/dist/kritzel-editor/kritzel-editor.esm.js +21 -0
  244. package/dist/kritzel-editor/p-501047d8.entry.js +29 -0
  245. package/dist/kritzel-editor/p-60319edb.entry.js +75224 -0
  246. package/dist/kritzel-editor/p-DQuL1Twl.js +3 -0
  247. package/dist/kritzel-editor/p-OjbYJz-P.js +1790 -0
  248. package/dist/types/components/kritzel-active-users/kritzel-active-users.d.ts +21 -0
  249. package/dist/types/components/kritzel-avatar/kritzel-avatar.d.ts +27 -0
  250. package/dist/types/components/kritzel-back-to-content/kritzel-back-to-content.d.ts +17 -0
  251. package/dist/types/components/kritzel-brush-style/kritzel-brush-style.d.ts +11 -0
  252. package/dist/types/components/kritzel-button/kritzel-button.d.ts +13 -0
  253. package/dist/types/components/kritzel-color/kritzel-color.d.ts +10 -0
  254. package/dist/types/components/kritzel-color-palette/kritzel-color-palette.d.ts +17 -0
  255. package/dist/types/components/kritzel-context-menu/kritzel-context-menu.d.ts +40 -0
  256. package/dist/types/components/kritzel-current-user/kritzel-current-user.d.ts +15 -0
  257. package/dist/types/components/kritzel-current-user-dialog/kritzel-current-user-dialog.d.ts +18 -0
  258. package/dist/types/components/kritzel-dialog/kritzel-dialog.d.ts +85 -0
  259. package/dist/types/components/kritzel-dropdown/kritzel-dropdown.d.ts +48 -0
  260. package/dist/types/components/kritzel-editor/kritzel-editor.d.ts +356 -0
  261. package/dist/types/components/kritzel-export/kritzel-export.d.ts +35 -0
  262. package/dist/types/components/kritzel-font/kritzel-font.d.ts +6 -0
  263. package/dist/types/components/kritzel-font-family/kritzel-font-family.d.ts +17 -0
  264. package/dist/types/components/kritzel-font-size/kritzel-font-size.d.ts +10 -0
  265. package/dist/types/components/kritzel-input/kritzel-input.d.ts +22 -0
  266. package/dist/types/components/kritzel-line-endings/kritzel-line-endings.d.ts +21 -0
  267. package/dist/types/components/kritzel-loading-overlay/kritzel-loading-overlay.d.ts +11 -0
  268. package/dist/types/components/kritzel-login-dialog/kritzel-login-dialog.d.ts +32 -0
  269. package/dist/types/components/kritzel-master-detail/kritzel-master-detail.d.ts +25 -0
  270. package/dist/types/components/kritzel-menu/kritzel-menu.d.ts +25 -0
  271. package/dist/types/components/kritzel-menu-item/kritzel-menu-item.d.ts +28 -0
  272. package/dist/types/components/kritzel-more-menu/kritzel-more-menu.d.ts +55 -0
  273. package/dist/types/components/kritzel-notification-card/kritzel-notification-card.d.ts +22 -0
  274. package/dist/types/components/kritzel-numeric-input/kritzel-numeric-input.d.ts +32 -0
  275. package/dist/types/components/kritzel-opacity-slider/kritzel-opacity-slider.d.ts +17 -0
  276. package/dist/types/components/kritzel-pill-tabs/kritzel-pill-tabs.d.ts +26 -0
  277. package/dist/types/components/kritzel-portal/kritzel-portal.d.ts +33 -0
  278. package/dist/types/components/kritzel-settings/kritzel-settings.d.ts +64 -0
  279. package/dist/types/components/kritzel-shape-fill/kritzel-shape-fill.d.ts +10 -0
  280. package/dist/types/components/kritzel-share-dialog/kritzel-share-dialog.d.ts +49 -0
  281. package/dist/types/components/kritzel-slide-toggle/kritzel-slide-toggle.d.ts +14 -0
  282. package/dist/types/components/kritzel-split-button/kritzel-split-button.d.ts +38 -0
  283. package/dist/types/components/kritzel-stroke-size/kritzel-stroke-size.d.ts +8 -0
  284. package/dist/types/components/kritzel-tool-config/kritzel-tool-config.d.ts +39 -0
  285. package/dist/types/components/kritzel-toolbar/kritzel-toolbar.d.ts +76 -0
  286. package/dist/types/components/kritzel-tooltip/kritzel-tooltip.d.ts +30 -0
  287. package/dist/types/components/kritzel-utility-panel/kritzel-utility-panel.d.ts +14 -0
  288. package/dist/types/components/kritzel-workspace-manager/kritzel-workspace-manager.d.ts +40 -0
  289. package/dist/types/components/kritzel-zoom-panel/kritzel-zoom-panel.d.ts +20 -0
  290. package/dist/types/components.d.ts +3166 -0
  291. package/dist/types/index.d.ts +8 -0
  292. package/dist/types/stencil-public-runtime.d.ts +1873 -0
  293. package/loader/cdn.js +1 -0
  294. package/loader/index.cjs.js +1 -0
  295. package/loader/index.d.ts +24 -0
  296. package/loader/index.es2017.js +1 -0
  297. package/loader/index.js +2 -0
  298. package/package.json +83 -0
@@ -0,0 +1,1792 @@
1
+ import { p as proxyCustomElement, H, c as createEvent, h, d as Host, t as transformTag } from './p-5qkOM1RJ.js';
2
+ import { ABSOLUTE_SCALE_MAX, ABSOLUTE_SCALE_MIN, KritzelSelectionTool, DEFAULT_BRUSH_CONFIG, KritzelBrushTool, KritzelEraserTool, DEFAULT_LINE_TOOL_CONFIG, KritzelLineTool, ShapeType, DEFAULT_SHAPE_CONFIG, KritzelShapeTool, DEFAULT_TEXT_CONFIG, KritzelTextTool, KritzelImageTool, KritzelAlignment, hasRemoteSyncProvider, DEFAULT_SYNC_CONFIG, DEFAULT_ASSET_STORAGE_CONFIG, ObjectHelper, resolveTextToolAvailableFonts, ThemeHelper, darkTheme, lightTheme, KritzelSelectionGroup, KritzelSelectionBox, KritzelIconRegistry, KritzelFontRegistry, KritzelKeyboardHelper, KritzelDevicesHelper } from '@kritzel/engine';
3
+ import { d as defineCustomElement$K } from './p-QEue33R5.js';
4
+ import { d as defineCustomElement$J } from './p-4-qLegHb.js';
5
+ import { d as defineCustomElement$I } from './p-Cy_cLtOP.js';
6
+ import { d as defineCustomElement$H } from './p-CwBxnzYu.js';
7
+ import { d as defineCustomElement$G } from './p-DOJCDPVD.js';
8
+ import { d as defineCustomElement$F } from './p-DVv8ChhE.js';
9
+ import { d as defineCustomElement$E } from './p-GbCxpbQ6.js';
10
+ import { d as defineCustomElement$D } from './p-B6UJztrf.js';
11
+ import { d as defineCustomElement$C } from './p-BrGJIoGK.js';
12
+ import { d as defineCustomElement$B } from './p-CrIEmItB.js';
13
+ import { d as defineCustomElement$A } from './p-Cp4e4oTE.js';
14
+ import { d as defineCustomElement$z } from './p-peZjvnkK.js';
15
+ import { d as defineCustomElement$y } from './p-R1D8Sr0l.js';
16
+ import { d as defineCustomElement$x } from './p-DZsSiMnA.js';
17
+ import { d as defineCustomElement$w } from './p-hQwVRh0t.js';
18
+ import { d as defineCustomElement$v } from './p-BDjRSoAc.js';
19
+ import { d as defineCustomElement$u } from './p-ClfOtiNp.js';
20
+ import { d as defineCustomElement$t } from './p-BfMlwIcG.js';
21
+ import { d as defineCustomElement$s } from './p-BGmTmdLe.js';
22
+ import { d as defineCustomElement$r } from './p-B5xYV1o3.js';
23
+ import { d as defineCustomElement$q } from './p-CoNexfpB.js';
24
+ import { d as defineCustomElement$p } from './p-B3Tqoyl9.js';
25
+ import { d as defineCustomElement$o } from './p-Ds0uNtwQ.js';
26
+ import { d as defineCustomElement$n } from './p-CVxGF4bJ.js';
27
+ import { d as defineCustomElement$m } from './p-DqOC_Yck.js';
28
+ import { d as defineCustomElement$l } from './p-BN8VWPlq.js';
29
+ import { d as defineCustomElement$k } from './p-BZ_KnHdR.js';
30
+ import { d as defineCustomElement$j } from './p-D0tPTPkR.js';
31
+ import { d as defineCustomElement$i } from './p-McY5wZ0h.js';
32
+ import { d as defineCustomElement$h } from './p-h_uh_Njf.js';
33
+ import { d as defineCustomElement$g } from './p-B_gT0lCn.js';
34
+ import { d as defineCustomElement$f } from './p-CS3YZVYE.js';
35
+ import { d as defineCustomElement$e } from './p-CvaxFYS0.js';
36
+ import { d as defineCustomElement$d } from './p-BvG3JO85.js';
37
+ import { d as defineCustomElement$c } from './p-Blq9a1ni.js';
38
+ import { d as defineCustomElement$b } from './p-DyRJFg4w.js';
39
+ import { d as defineCustomElement$a } from './p-kOINnzaR.js';
40
+ import { d as defineCustomElement$9 } from './p-DXuf225S.js';
41
+ import { d as defineCustomElement$8 } from './p-CzUeIini.js';
42
+ import { d as defineCustomElement$7 } from './p-Ckqh1tqY.js';
43
+ import { d as defineCustomElement$6 } from './p-DJxgPPfs.js';
44
+ import { d as defineCustomElement$5 } from './p-BjFrt1q0.js';
45
+ import { d as defineCustomElement$4 } from './p-SLnqczCS.js';
46
+ import { d as defineCustomElement$3 } from './p-CmjXRLdr.js';
47
+ import { d as defineCustomElement$2 } from './p-DXZBWJBt.js';
48
+
49
+ const kritzelEditorCss = () => `kritzel-editor{display:flex;margin:0;position:relative;container-type:inline-size;overflow:hidden;width:100%;height:100%;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:start;line-height:normal}.editor-content{position:absolute;inset:0}.editor-content>kritzel-engine{position:absolute;inset:0;z-index:0}kritzel-toolbar{position:absolute;z-index:2;left:0;right:0;margin-inline:auto;width:max-content;max-width:calc(100% - 16px);bottom:var(--kritzel-editor-toolbar-bottom, 14px);transition:transform var(--kritzel-editor-toolbar-transition-duration, 0.1s) var(--kritzel-editor-toolbar-transition, ease-in-out)}kritzel-toolbar.keyboard-open{transform:var(--kritzel-editor-toolbar-transform, translateY(300%))}.top-left-buttons{position:absolute;z-index:2;top:var(--kritzel-editor-top-left-buttons-top, 14px);left:var(--kritzel-editor-top-left-buttons-left, 14px);display:flex;align-items:flex-start;gap:8px}.top-center-notification-layer{position:absolute;top:var(--kritzel-editor-top-center-notification-top, 14px);left:0;right:0;z-index:var(--kritzel-editor-top-center-notification-z-index, 10001);display:flex;justify-content:center;pointer-events:none}.top-center-notification-container{width:min(90vw, 420px);pointer-events:auto;animation:kritzel-notification-slide-in var(--kritzel-editor-notification-animation-duration, 220ms) var(--kritzel-editor-notification-animation-easing, cubic-bezier(0.22, 1, 0.36, 1))}.top-center-notification-container.is-dismissing{animation:kritzel-notification-fade-out var(--kritzel-editor-notification-dismiss-animation-duration, 180ms) var(--kritzel-editor-notification-dismiss-animation-easing, ease-in) forwards}@keyframes kritzel-notification-slide-in{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes kritzel-notification-fade-out{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-6px)}}@media (prefers-reduced-motion: reduce){.top-center-notification-container{animation:none}}.top-right-buttons{position:absolute;z-index:2;top:var(--kritzel-editor-top-right-buttons-top, 14px);right:var(--kritzel-editor-top-right-buttons-right, 14px);display:flex;align-items:center;gap:8px}.bottom-left-buttons{position:absolute;z-index:2;left:var(--kritzel-editor-top-left-buttons-left, 14px);bottom:var(--kritzel-editor-toolbar-bottom, 14px);display:flex;align-items:flex-end}@container (max-width: 767px){.bottom-left-buttons{display:none}}.top-right-button{display:flex;align-items:center;justify-content:center;width:50px;height:50px;padding:0;border:var(--kritzel-split-button-border, 1px solid #ebebeb);border-radius:var(--kritzel-split-button-border-radius, 12px);background-color:var(--kritzel-split-button-background-color, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.top-right-button:hover{background-color:#f5f5f5}.top-right-button:active{background-color:#ebebeb}`;
50
+
51
+ const KritzelEditor$1 = /*@__PURE__*/ proxyCustomElement(class KritzelEditor extends H {
52
+ constructor(registerHost) {
53
+ super();
54
+ if (registerHost !== false) {
55
+ this.__registerHost();
56
+ }
57
+ this.isReady = createEvent(this, "isReady");
58
+ this.activeWorkspaceChange = createEvent(this, "activeWorkspaceChange");
59
+ this.objectsChange = createEvent(this, "objectsChange");
60
+ this.objectsAdded = createEvent(this, "objectsAdded");
61
+ this.objectsRemoved = createEvent(this, "objectsRemoved");
62
+ this.objectsUpdated = createEvent(this, "objectsUpdated");
63
+ this.objectsSelectionChange = createEvent(this, "objectsSelectionChange");
64
+ this.undoStateChange = createEvent(this, "undoStateChange");
65
+ this.themeChange = createEvent(this, "themeChange");
66
+ this.localeChange = createEvent(this, "localeChange");
67
+ this.viewportChange = createEvent(this, "viewportChange");
68
+ this.logout = createEvent(this, "logout");
69
+ this.login = createEvent(this, "login");
70
+ this.isPublicChange = createEvent(this, "isPublicChange");
71
+ this.awarenessChange = createEvent(this, "awarenessChange");
72
+ }
73
+ get host() { return this; }
74
+ scaleMax = ABSOLUTE_SCALE_MAX;
75
+ scaleMin = ABSOLUTE_SCALE_MIN;
76
+ lockDrawingScale = true;
77
+ viewportBoundaryLeft = -Infinity;
78
+ viewportBoundaryRight = Infinity;
79
+ viewportBoundaryTop = -Infinity;
80
+ viewportBoundaryBottom = Infinity;
81
+ debugInfo = {
82
+ showViewportInfo: false,
83
+ showObjectInfo: false,
84
+ showSyncProviderInfo: true,
85
+ showMigrationInfo: true,
86
+ showAssetResolverInfo: false,
87
+ };
88
+ user;
89
+ activeUsers;
90
+ toolbarItems = [
91
+ {
92
+ name: 'selection',
93
+ type: 'tool',
94
+ isDefault: true,
95
+ tool: KritzelSelectionTool,
96
+ icon: 'cursor',
97
+ },
98
+ {
99
+ name: 'brush',
100
+ type: 'tool',
101
+ tool: KritzelBrushTool,
102
+ icon: 'pen',
103
+ config: DEFAULT_BRUSH_CONFIG,
104
+ },
105
+ {
106
+ name: 'eraser',
107
+ type: 'tool',
108
+ tool: KritzelEraserTool,
109
+ icon: 'eraser',
110
+ },
111
+ {
112
+ name: 'line',
113
+ type: 'tool',
114
+ tool: KritzelLineTool,
115
+ icon: 'arrow',
116
+ config: DEFAULT_LINE_TOOL_CONFIG,
117
+ },
118
+ {
119
+ name: 'shape',
120
+ type: 'tool',
121
+ tool: KritzelShapeTool,
122
+ icon: 'shape-rectangle',
123
+ config: DEFAULT_SHAPE_CONFIG,
124
+ subOptions: [
125
+ { id: 'rectangle', icon: 'shape-rectangle', label: 'Rectangle', value: ShapeType.Rectangle, toolProperty: 'shapeType' },
126
+ { id: 'ellipse', icon: 'shape-ellipse', label: 'Ellipse', value: ShapeType.Ellipse, toolProperty: 'shapeType' },
127
+ { id: 'triangle', icon: 'shape-triangle', label: 'Triangle', value: ShapeType.Triangle, toolProperty: 'shapeType' },
128
+ ],
129
+ },
130
+ {
131
+ name: 'text',
132
+ type: 'tool',
133
+ tool: KritzelTextTool,
134
+ icon: 'type',
135
+ config: DEFAULT_TEXT_CONFIG,
136
+ },
137
+ {
138
+ name: 'image',
139
+ type: 'tool',
140
+ tool: KritzelImageTool,
141
+ icon: 'image',
142
+ },
143
+ {
144
+ name: 'config',
145
+ type: 'config',
146
+ },
147
+ ];
148
+ globalContextMenuItems = [
149
+ {
150
+ label: 'menu.paste',
151
+ icon: 'paste',
152
+ action: menu => this.engineRef.paste(menu.x, menu.y),
153
+ },
154
+ {
155
+ label: 'menu.selectAll',
156
+ icon: 'select-all',
157
+ action: () => this.selectAllObjectsInViewport(),
158
+ },
159
+ ];
160
+ objectContextMenuItems = [
161
+ { label: 'menu.copy', icon: 'copy', group: 'clipboard', action: () => this.engineRef.copy() },
162
+ { label: 'menu.cut', icon: 'cut', group: 'clipboard', action: () => this.engineRef.cut() },
163
+ {
164
+ label: 'menu.paste',
165
+ icon: 'paste',
166
+ group: 'clipboard',
167
+ action: (menu, _) => this.engineRef.paste(menu.x, menu.y),
168
+ },
169
+ {
170
+ label: 'menu.export',
171
+ icon: 'upload',
172
+ group: 'clipboard',
173
+ isVisible: (_, objects) => this.canExportObjects(objects),
174
+ action: (_, objects) => {
175
+ const format = this.getPreferredExportFormat(objects);
176
+ if (!format) {
177
+ return;
178
+ }
179
+ void this.engineRef.exportSelectedObject(format);
180
+ },
181
+ },
182
+ {
183
+ label: 'menu.order',
184
+ icon: 'ordering',
185
+ group: 'other',
186
+ children: [
187
+ { label: 'menu.bringToFront', icon: 'bring-to-front', action: () => this.engineRef.bringToFront() },
188
+ { label: 'menu.sendToBack', icon: 'send-to-back', action: () => this.engineRef.sendToBack() },
189
+ { label: 'menu.moveUp', icon: 'arrow-up-from-dot', action: () => this.engineRef.bringForward() },
190
+ { label: 'menu.moveDown', icon: 'arrow-down-from-dot', action: () => this.engineRef.sendBackward() },
191
+ ],
192
+ },
193
+ {
194
+ label: 'menu.align',
195
+ icon: 'align',
196
+ group: 'other',
197
+ children: [
198
+ { label: 'menu.alignLeft', icon: 'align-start-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.StartHorizontal) },
199
+ { label: 'menu.alignCenterHorizontal', icon: 'align-center-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterHorizontal) },
200
+ { label: 'menu.alignRight', icon: 'align-end-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.EndHorizontal) },
201
+ { label: 'menu.alignTop', icon: 'align-start-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.StartVertical) },
202
+ { label: 'menu.alignCenterVertical', icon: 'align-center-vertical', action: () => this.engineRef.alignObjects(KritzelAlignment.CenterVertical) },
203
+ { label: 'menu.alignBottom', icon: 'align-end-horizontal', action: () => this.engineRef.alignObjects(KritzelAlignment.EndVertical) },
204
+ ],
205
+ },
206
+ {
207
+ label: 'menu.group',
208
+ icon: 'group',
209
+ group: 'other',
210
+ children: [
211
+ {
212
+ label: 'menu.group',
213
+ icon: 'group',
214
+ action: () => this.engineRef.group(),
215
+ },
216
+ {
217
+ label: 'menu.ungroup',
218
+ icon: 'ungroup',
219
+ action: () => this.engineRef.ungroup(),
220
+ },
221
+ ],
222
+ },
223
+ { label: 'menu.delete', icon: 'delete', group: 'edit', action: () => this.engineRef.delete() },
224
+ ];
225
+ moreMenuItems = [
226
+ {
227
+ id: 'share',
228
+ label: 'menu.share',
229
+ icon: 'share',
230
+ isVisible: async () => hasRemoteSyncProvider(this.syncConfig),
231
+ action: () => {
232
+ if (!this.isLoggedIn && this.loginConfig) {
233
+ this.openLoginDialog();
234
+ return;
235
+ }
236
+ this.shareDialogRef.open();
237
+ },
238
+ },
239
+ {
240
+ id: 'export',
241
+ label: 'menu.export',
242
+ icon: 'upload',
243
+ action: async () => {
244
+ const preview = await this.engineRef.getScreenshot('png');
245
+ this.exportRef.open(preview ?? undefined);
246
+ },
247
+ },
248
+ {
249
+ id: 'import',
250
+ label: 'menu.import',
251
+ icon: 'download',
252
+ action: () => this.engineRef.importFromFile(),
253
+ },
254
+ {
255
+ id: 'settings',
256
+ label: 'menu.settings',
257
+ icon: 'settings',
258
+ action: () => this.settingsRef.open(),
259
+ },
260
+ ];
261
+ themes;
262
+ theme = 'light';
263
+ /** License key that, when valid, removes the "Powered by Kritzel" watermark. */
264
+ licenseKey;
265
+ /** The current locale (language) code applied to the editor, e.g. 'en', 'de', 'fr'. */
266
+ locale = 'en';
267
+ /** An array of available locale definitions (with optional partial term overrides). */
268
+ locales;
269
+ /** The locale used to resolve terms missing from the active locale. */
270
+ fallbackLocale = 'en';
271
+ customSvgIcons = {};
272
+ /**
273
+ * Registers fonts for runtime usage (for example custom object rendering).
274
+ * Text-tool config tooltip options are controlled via toolbarItems[].config.availableFonts.
275
+ */
276
+ customFonts = {};
277
+ isPanningEnabled = true;
278
+ isZoomingEnabled = true;
279
+ isToolbarVisible = true;
280
+ isUtilityPanelVisible = true;
281
+ isWorkspaceManagerVisible = true;
282
+ isMoreMenuVisible = true;
283
+ isZoomPanelVisible = true;
284
+ syncConfig = DEFAULT_SYNC_CONFIG;
285
+ assetStorageConfig = DEFAULT_ASSET_STORAGE_CONFIG;
286
+ /** The element to use as the target for the cursor. Defaults to the editor container if not set. */
287
+ cursorTarget;
288
+ /** Optional login configuration. When provided, a "Sign in" button is shown that opens a login dialog with the configured providers. */
289
+ loginConfig;
290
+ /** Optional unique identifier for namespacing storage keys across multiple editor instances. */
291
+ editorId;
292
+ /** Optional workspace ID to set as active. If provided, the editor will automatically activate the workspace with this ID. */
293
+ activeWorkspaceId;
294
+ /** Authoritative workspace catalog for this editor instance. When provided, provider-only workspaces are hidden but not deleted. */
295
+ workspaces;
296
+ isReady;
297
+ activeWorkspaceChange;
298
+ objectsChange;
299
+ objectsAdded;
300
+ objectsRemoved;
301
+ objectsUpdated;
302
+ objectsSelectionChange;
303
+ undoStateChange;
304
+ themeChange;
305
+ localeChange;
306
+ viewportChange;
307
+ logout;
308
+ login;
309
+ isPublicChange;
310
+ awarenessChange;
311
+ isEngineReady = false;
312
+ isToolbarReady = false;
313
+ isWorkspaceManagerReady = false;
314
+ availableWorkspaces = [];
315
+ activeWorkspace;
316
+ isVirtualKeyboardOpen = false;
317
+ undoState = null;
318
+ isBackToContentButtonVisible = false;
319
+ /** Localized strings for editor-owned UI (e.g. the more menu), resolved from the active locale. */
320
+ resolvedTerms = {};
321
+ /** Available locales as `{ code, label }` options for the settings language selector. */
322
+ availableLocaleOptions = [];
323
+ currentZoomPercent = 100;
324
+ shortcuts = [];
325
+ currentIsPublic = false;
326
+ isEditorVisible = false;
327
+ activeNotification;
328
+ isNotificationDismissing = false;
329
+ contextMenuState;
330
+ resolvedMoreMenuItems = [];
331
+ isLoadingOverlayVisible = false;
332
+ loadingOverlayShowTimeout;
333
+ loadingOverlayHideTimeout;
334
+ loadingOverlayShownTimestamp;
335
+ loadingOverlayDelayMs = 300;
336
+ loadingOverlayMinDisplayDurationMs = 400;
337
+ notificationDismissTimeout;
338
+ notificationDismissAnimationTimeout;
339
+ notificationDisplayDurationMs = 5000;
340
+ notificationDismissAnimationDurationMs = 180;
341
+ isNotificationHovered = false;
342
+ customFontsLoadVersion = 0;
343
+ customFontsReady = Promise.resolve();
344
+ onIsEngineReady(newValue) {
345
+ if (newValue && this.isToolbarReady) {
346
+ this.checkIsReady();
347
+ }
348
+ }
349
+ onIsToolbarReady(newValue) {
350
+ if (newValue && this.isEngineReady) {
351
+ this.checkIsReady();
352
+ }
353
+ }
354
+ onAvailableWorkspacesChange(newWorkspaces) {
355
+ const activeWorkspace = this.activeWorkspace;
356
+ if (activeWorkspace) {
357
+ const updatedActiveWorkspace = newWorkspaces.find(ws => ws.id === activeWorkspace.id);
358
+ if (updatedActiveWorkspace && updatedActiveWorkspace !== activeWorkspace) {
359
+ this.activeWorkspace = updatedActiveWorkspace;
360
+ }
361
+ }
362
+ // If activeWorkspaceId is set, try to keep it in sync with the updated workspaces list
363
+ if (this.activeWorkspaceId) {
364
+ const workspaceWithId = newWorkspaces.find(ws => ws.id === this.activeWorkspaceId);
365
+ if (workspaceWithId && workspaceWithId !== this.activeWorkspace) {
366
+ this.activeWorkspace = workspaceWithId;
367
+ }
368
+ }
369
+ }
370
+ onActiveWorkspaceChange() {
371
+ this.updateCurrentIsPublic();
372
+ }
373
+ onCustomFontsChange(newValue) {
374
+ void this.registerCustomFonts(newValue);
375
+ }
376
+ onMoreMenuItemsChange() {
377
+ this.recomputeMoreMenuItems();
378
+ }
379
+ onSyncConfigChange() {
380
+ this.recomputeMoreMenuItems();
381
+ }
382
+ onLoginConfigChange() {
383
+ this.recomputeMoreMenuItems();
384
+ }
385
+ onUserChange() {
386
+ this.recomputeMoreMenuItems();
387
+ }
388
+ onActiveWorkspaceIdChange(newId) {
389
+ // If no ID is provided, do nothing (allows other logic to control activeWorkspace)
390
+ if (!newId) {
391
+ return;
392
+ }
393
+ // If workspaces are not loaded yet, the watch will fire again once they are
394
+ if (this.availableWorkspaces.length === 0) {
395
+ return;
396
+ }
397
+ // Find the workspace with the matching ID
398
+ const workspace = this.availableWorkspaces.find(ws => ws.id === newId);
399
+ if (workspace) {
400
+ // Only update if it's different from the current activeWorkspace
401
+ if (workspace !== this.activeWorkspace) {
402
+ this.activeWorkspace = workspace;
403
+ }
404
+ }
405
+ else {
406
+ console.warn(`[KritzelEditor] No workspace found with ID: ${newId}`);
407
+ }
408
+ }
409
+ onCurrentThemeChange() {
410
+ this.applyTheme();
411
+ setTimeout(() => this.setOsSpecificCssVariables(), 0);
412
+ if (this.engineRef) {
413
+ this.engineRef.saveSettings(this.currentSettingsConfig);
414
+ }
415
+ }
416
+ onThemesChange() {
417
+ this.applyTheme();
418
+ }
419
+ onLocaleChange(newValue) {
420
+ if (this.engineRef) {
421
+ this.engineRef.setLocale(newValue);
422
+ this.engineRef.saveSettings(this.currentSettingsConfig);
423
+ void this.refreshLocalizedTerms();
424
+ }
425
+ }
426
+ onLocalesChange(newValue) {
427
+ if (this.engineRef) {
428
+ void this.engineRef.configureLocales(newValue).then(() => this.refreshLocalizedTerms());
429
+ }
430
+ }
431
+ /**
432
+ * Refreshes the editor-owned localized strings (e.g. the more menu and the
433
+ * strings forwarded to child UI components) from the engine's localization
434
+ * manager for the active locale.
435
+ */
436
+ async refreshLocalizedTerms() {
437
+ if (!this.engineRef) {
438
+ return;
439
+ }
440
+ const resolvedLocale = await this.engineRef.getLocale();
441
+ if (resolvedLocale !== this.locale) {
442
+ // Auto-selected because the previous locale isn't in the (possibly replaced) available set.
443
+ this.locale = resolvedLocale;
444
+ this.localeChange.emit(resolvedLocale);
445
+ }
446
+ this.resolvedTerms = await this.engineRef.getResolvedTerms();
447
+ this.availableLocaleOptions = await this.engineRef.getAvailableLocaleOptions();
448
+ this.recomputeMoreMenuItems();
449
+ }
450
+ onTouchStart(event) {
451
+ if (event.cancelable) {
452
+ event.preventDefault();
453
+ }
454
+ }
455
+ async getObjectById(id) {
456
+ return this.engineRef.getObjectById(id);
457
+ }
458
+ async addObject(object) {
459
+ return this.engineRef.addObject(object);
460
+ }
461
+ async addObjects(objects) {
462
+ return this.engineRef.addObjects(objects);
463
+ }
464
+ async updateObject(object, updatedProperties) {
465
+ return this.engineRef.updateObject(object, updatedProperties);
466
+ }
467
+ async removeObject(object) {
468
+ return this.engineRef.removeObject(object);
469
+ }
470
+ async removeObjects(objects) {
471
+ return this.engineRef.removeObjects(objects);
472
+ }
473
+ async getSelectedObjects() {
474
+ return this.engineRef.getSelectedObjects();
475
+ }
476
+ async selectObjects(objects) {
477
+ return this.engineRef.selectObjects(objects);
478
+ }
479
+ async selectAllObjectsInViewport() {
480
+ return this.engineRef.selectAllObjectsInViewport();
481
+ }
482
+ async clearSelection() {
483
+ this.engineRef.clearSelection();
484
+ }
485
+ async centerObjectInViewport(object) {
486
+ return this.engineRef.centerObjectInViewport(object);
487
+ }
488
+ async panToObject(object) {
489
+ return this.engineRef.panToObject(object);
490
+ }
491
+ async backToContent() {
492
+ return this.engineRef.backToContent();
493
+ }
494
+ async centerAllObjects(animate = true) {
495
+ return this.engineRef.centerAllObjects(animate);
496
+ }
497
+ async centerObjects(objects, animate = true) {
498
+ return this.engineRef.centerObjects(objects, animate);
499
+ }
500
+ async setViewport(x, y, scale) {
501
+ return this.engineRef.setViewport(x, y, scale);
502
+ }
503
+ async panTo(x, y) {
504
+ return this.engineRef.panTo(x, y);
505
+ }
506
+ async zoomTo(scale, worldX, worldY) {
507
+ return this.engineRef.zoomTo(scale, worldX, worldY);
508
+ }
509
+ async zoomIn(factor = 1.6, duration = 200) {
510
+ return this.engineRef.zoomIn(factor, duration);
511
+ }
512
+ async zoomOut(factor = 1.6, duration = 200) {
513
+ return this.engineRef.zoomOut(factor, duration);
514
+ }
515
+ async getViewport() {
516
+ return this.engineRef.getViewport();
517
+ }
518
+ async screenToWorld(x, y) {
519
+ return this.engineRef.screenToWorld(x, y);
520
+ }
521
+ async worldToScreen(x, y) {
522
+ return this.engineRef.worldToScreen(x, y);
523
+ }
524
+ async setActiveWorkspace(id) {
525
+ return this.engineRef.setActiveWorkspace(id);
526
+ }
527
+ async createWorkspace(workspace) {
528
+ return this.engineRef.createWorkspace(workspace);
529
+ }
530
+ async updateWorkspace(workspace) {
531
+ return this.engineRef.updateWorkspace(workspace);
532
+ }
533
+ async deleteWorkspace(workspace) {
534
+ return this.engineRef.deleteWorkspace(workspace);
535
+ }
536
+ async getWorkspaces() {
537
+ return this.engineRef.getWorkspaces();
538
+ }
539
+ async getActiveWorkspace() {
540
+ return this.engineRef.getActiveWorkspace();
541
+ }
542
+ async loadSharedWorkspace(token) {
543
+ return this.engineRef.loadSharedWorkspace(token);
544
+ }
545
+ async reinitSync() {
546
+ return this.engineRef.reinitSync();
547
+ }
548
+ // ── Tool management ─────────────────────────────────────────────────
549
+ async registerTool(toolName, toolClass, toolConfig) {
550
+ return this.engineRef.registerTool(toolName, toolClass, toolConfig);
551
+ }
552
+ async changeActiveTool(toolName) {
553
+ return this.engineRef.changeActiveTool(toolName);
554
+ }
555
+ async disable() {
556
+ return this.engineRef.disable();
557
+ }
558
+ async enable() {
559
+ return this.engineRef.enable();
560
+ }
561
+ async copy() {
562
+ return this.engineRef.copy();
563
+ }
564
+ async cut() {
565
+ return this.engineRef.cut();
566
+ }
567
+ async paste(x, y) {
568
+ return this.engineRef.paste(x, y);
569
+ }
570
+ async delete() {
571
+ return this.engineRef.delete();
572
+ }
573
+ async bringForward(object) {
574
+ return this.engineRef.bringForward(object);
575
+ }
576
+ async sendBackward(object) {
577
+ return this.engineRef.sendBackward(object);
578
+ }
579
+ async bringToFront(object) {
580
+ return this.engineRef.bringToFront(object);
581
+ }
582
+ async sendToBack(object) {
583
+ return this.engineRef.sendToBack(object);
584
+ }
585
+ async alignObjects(alignment) {
586
+ return this.engineRef.alignObjects(alignment);
587
+ }
588
+ async group() {
589
+ return this.engineRef.group();
590
+ }
591
+ async ungroup() {
592
+ return this.engineRef.ungroup();
593
+ }
594
+ async undo() {
595
+ return this.engineRef.undo();
596
+ }
597
+ async redo() {
598
+ return this.engineRef.redo();
599
+ }
600
+ async getScreenshot(format = 'png') {
601
+ return this.engineRef.getScreenshot(format);
602
+ }
603
+ async exportViewportAsPng() {
604
+ return this.engineRef.exportViewportAsPng();
605
+ }
606
+ async exportViewportAsSvg() {
607
+ return this.engineRef.exportViewportAsSvg();
608
+ }
609
+ async getSelectedObjectSupportedExportFormats() {
610
+ return this.engineRef.getSelectedObjectSupportedExportFormats();
611
+ }
612
+ async canExportSelectedObjectAs(format) {
613
+ return this.engineRef.canExportSelectedObjectAs(format);
614
+ }
615
+ async exportSelectedObject(format) {
616
+ return this.engineRef.exportSelectedObject(format);
617
+ }
618
+ async exportAsJson() {
619
+ return this.engineRef.exportAsJson();
620
+ }
621
+ async importFromJson(json) {
622
+ return this.engineRef.importFromJson(json);
623
+ }
624
+ async downloadAsJson(filename) {
625
+ return this.engineRef.downloadAsJson(filename);
626
+ }
627
+ async importFromFile() {
628
+ return this.engineRef.importFromFile();
629
+ }
630
+ async loadObjectsFromJson(json) {
631
+ return this.engineRef.loadObjectsFromJson(json);
632
+ }
633
+ async getObjectsTotalCount() {
634
+ return this.engineRef.getObjectsTotalCount();
635
+ }
636
+ async getAllObjects() {
637
+ return this.engineRef.getAllObjects();
638
+ }
639
+ async findObjects(predicate) {
640
+ return this.engineRef.findObjects(predicate);
641
+ }
642
+ async getObjectsInViewport() {
643
+ return this.engineRef.getObjectsInViewport();
644
+ }
645
+ async hideContextMenu() {
646
+ return this.engineRef.hideContextMenu();
647
+ }
648
+ async openContextMenu(options) {
649
+ return this.engineRef.openContextMenu(options);
650
+ }
651
+ async openWorkspaceManagerMenu() {
652
+ if (!this.isWorkspaceManagerVisible) {
653
+ return;
654
+ }
655
+ await this.workspaceManagerRef?.open();
656
+ }
657
+ async closeWorkspaceManagerMenu() {
658
+ await this.workspaceManagerRef?.close();
659
+ }
660
+ async openMoreMenu() {
661
+ if (!this.isMoreMenuVisible) {
662
+ return;
663
+ }
664
+ await this.moreMenuRef?.open();
665
+ }
666
+ async closeMoreMenu() {
667
+ await this.moreMenuRef?.close();
668
+ }
669
+ async openUserDialog() {
670
+ await this.currentUserDialogRef?.open();
671
+ }
672
+ async closeUserDialog() {
673
+ await this.currentUserDialogRef?.close();
674
+ }
675
+ async openExportDialog() {
676
+ const preview = await this.engineRef.getScreenshot('png');
677
+ await this.exportRef?.open(preview ?? undefined);
678
+ }
679
+ async closeExportDialog() {
680
+ await this.exportRef?.close();
681
+ }
682
+ async openImportDialog() {
683
+ await this.engineRef.importFromFile();
684
+ }
685
+ async closeImportDialog() {
686
+ await this.engineRef.cancelImportFromFile();
687
+ }
688
+ async openSettingsDialog() {
689
+ await this.settingsRef?.open();
690
+ }
691
+ async closeSettingsDialog() {
692
+ await this.settingsRef?.close();
693
+ }
694
+ async openShareDialog() {
695
+ await this.shareDialogRef?.open();
696
+ }
697
+ async closeShareDialog() {
698
+ await this.shareDialogRef?.close();
699
+ }
700
+ async triggerSelectionChange() {
701
+ return this.engineRef.triggerSelectionChange();
702
+ }
703
+ async beginSceneBootstrap() {
704
+ return this.engineRef.beginSceneBootstrap();
705
+ }
706
+ async endSceneBootstrap() {
707
+ return this.engineRef.endSceneBootstrap();
708
+ }
709
+ async getDisplayableShortcuts() {
710
+ return this.engineRef.getDisplayableShortcuts();
711
+ }
712
+ async openLoginDialog() {
713
+ this.loginDialogRef?.open();
714
+ }
715
+ async closeLoginDialog() {
716
+ this.loginDialogRef?.close();
717
+ }
718
+ async setLoginLoading(provider) {
719
+ this.loginDialogRef?.setLoading(provider);
720
+ }
721
+ /**
722
+ * Sets the active locale (language) and re-renders the UI.
723
+ * @param code - The locale code to activate, e.g. 'de'.
724
+ */
725
+ async setLocale(code) {
726
+ this.locale = code;
727
+ await this.engineRef?.setLocale(code);
728
+ }
729
+ /**
730
+ * Gets the currently active locale code.
731
+ */
732
+ async getLocale() {
733
+ return this.engineRef ? this.engineRef.getLocale() : this.locale;
734
+ }
735
+ /**
736
+ * Gets the list of available locale codes (built-in and registered).
737
+ */
738
+ async getAvailableLocales() {
739
+ return this.engineRef ? this.engineRef.getAvailableLocales() : [];
740
+ }
741
+ /**
742
+ * Registers additional locale definitions (with optional partial term overrides).
743
+ * @param locales - The locale definitions to register.
744
+ */
745
+ async registerLocales(locales) {
746
+ await this.engineRef?.registerLocales(locales);
747
+ }
748
+ /**
749
+ * Registers custom fonts for the editor runtime.
750
+ * @param fonts - Mapping from font keys to family names or font definitions.
751
+ * @remarks This no longer controls the text-tool config tooltip font options.
752
+ * Configure tooltip fonts via toolbarItems[].config.availableFonts.
753
+ */
754
+ async registerFonts(fonts) {
755
+ await this.registerCustomFonts(fonts);
756
+ }
757
+ /**
758
+ * Resolves a term key to its translated string for the active locale.
759
+ * @param key - The term key to resolve.
760
+ * @param vars - Optional values for `{placeholder}` interpolation.
761
+ */
762
+ async t(key, vars) {
763
+ return this.engineRef ? this.engineRef.t(key, vars) : key;
764
+ }
765
+ /**
766
+ * Triggers a UI notification programmatically.
767
+ * @param notification - Notification payload. `id` and `timestamp` are optional.
768
+ */
769
+ async triggerNotification(notification) {
770
+ const normalizedNotification = {
771
+ ...notification,
772
+ id: notification.id ?? ObjectHelper.generateUUID(),
773
+ timestamp: notification.timestamp ?? new Date(),
774
+ };
775
+ this.clearNotificationDismissAnimationTimer();
776
+ this.isNotificationDismissing = false;
777
+ this.isNotificationHovered = false;
778
+ this.activeNotification = normalizedNotification;
779
+ this.scheduleNotificationDismiss();
780
+ }
781
+ engineRef;
782
+ toolbarRef;
783
+ settingsRef;
784
+ exportRef;
785
+ splitButtonRef;
786
+ workspaceManagerRef;
787
+ moreMenuRef;
788
+ shareDialogRef;
789
+ loginDialogRef;
790
+ currentUserDialogRef;
791
+ componentWillLoad() {
792
+ this.recomputeMoreMenuItems();
793
+ this.loadSettingsFromStorage();
794
+ this.applyTheme();
795
+ }
796
+ isTextToolConfig(config) {
797
+ return !!config && 'fontFamily' in config && 'size' in config && 'color' in config;
798
+ }
799
+ lastToolbarItemsRef = null;
800
+ lastNormalizedToolbarItems = [];
801
+ getNormalizedToolbarItems() {
802
+ if (this.toolbarItems !== this.lastToolbarItemsRef) {
803
+ this.lastToolbarItemsRef = this.toolbarItems;
804
+ this.lastNormalizedToolbarItems = this.normalizeToolbar(this.toolbarItems);
805
+ }
806
+ return this.lastNormalizedToolbarItems;
807
+ }
808
+ normalizeToolbar(toolbarItems) {
809
+ return toolbarItems.map(control => {
810
+ if (!this.isTextToolConfig(control.config)) {
811
+ return control;
812
+ }
813
+ return {
814
+ ...control,
815
+ config: {
816
+ ...control.config,
817
+ availableFonts: resolveTextToolAvailableFonts(control.config.availableFonts),
818
+ },
819
+ };
820
+ });
821
+ }
822
+ recomputeMoreMenuItems() {
823
+ if (this.moreMenuItems) {
824
+ this.resolvedMoreMenuItems = this.moreMenuItems;
825
+ return;
826
+ }
827
+ }
828
+ applyTheme() {
829
+ const themeObj = this.resolveThemeObject();
830
+ ThemeHelper.applyThemeToElement(this.host, themeObj);
831
+ }
832
+ resolveThemeObject() {
833
+ return this.themes?.find(t => t.name === this.theme) ?? (this.theme === 'dark' ? darkTheme : lightTheme);
834
+ }
835
+ componentDidLoad() {
836
+ this.registerCustomSvgIcons();
837
+ this.registerCustomFonts();
838
+ this.listenForMobileKeyboard();
839
+ this.setOsSpecificCssVariables();
840
+ }
841
+ disconnectedCallback() {
842
+ this.clearLoadingOverlayShowTimer();
843
+ this.clearLoadingOverlayHideTimer();
844
+ this.clearNotificationDismissTimer();
845
+ this.clearNotificationDismissAnimationTimer();
846
+ }
847
+ async checkIsReady() {
848
+ await customElements.whenDefined('kritzel-editor');
849
+ await customElements.whenDefined('kritzel-workspace-manager');
850
+ await customElements.whenDefined('kritzel-toolbar');
851
+ await customElements.whenDefined('kritzel-engine');
852
+ await this.waitForCustomFontsReady();
853
+ if (!this.isEngineReady || !this.isToolbarReady || !this.isWorkspaceManagerReady || !this.activeWorkspace) {
854
+ return;
855
+ }
856
+ this.isEditorVisible = true;
857
+ const { id, name, isPublic, createdAt, updatedAt } = this.activeWorkspace;
858
+ this.isReady.emit({
859
+ host: this.host,
860
+ activeWorkspace: {
861
+ id,
862
+ name,
863
+ isPublic,
864
+ createdAt,
865
+ updatedAt,
866
+ },
867
+ syncConfig: this.syncConfig,
868
+ assetStorageConfig: this.assetStorageConfig,
869
+ loginConfig: this.loginConfig,
870
+ theme: this.theme,
871
+ });
872
+ }
873
+ async onEngineReady(event) {
874
+ this.isEngineReady = true;
875
+ if (!event.detail.activeWorkspace) {
876
+ return;
877
+ }
878
+ this.activeWorkspace = event.detail.activeWorkspace;
879
+ this.availableWorkspaces = event.detail.workspaces;
880
+ this.currentIsPublic = await this.engineRef.getIsPublic();
881
+ await this.refreshLocalizedTerms();
882
+ const viewport = await this.engineRef.getViewport();
883
+ this.currentZoomPercent = this.getZoomPercentFromScale(viewport.scale);
884
+ this.loadShortcuts();
885
+ }
886
+ handleWorkspacesChange(event) {
887
+ event.stopPropagation();
888
+ this.availableWorkspaces = event.detail;
889
+ }
890
+ async handleWorkspaceManagerChange(event) {
891
+ event.stopPropagation();
892
+ const workspace = event.detail;
893
+ this.activeWorkspace = workspace ?? undefined;
894
+ if (!workspace) {
895
+ return;
896
+ }
897
+ await this.engineRef.setActiveWorkspace(workspace.id);
898
+ }
899
+ handleActiveWorkspaceChange(event) {
900
+ event.stopPropagation();
901
+ this.activeWorkspace = event.detail;
902
+ if (!this.isEngineReady) {
903
+ return;
904
+ }
905
+ const { id, name, isPublic, createdAt, updatedAt } = this.activeWorkspace;
906
+ this.activeWorkspaceChange.emit({
907
+ id,
908
+ name,
909
+ isPublic,
910
+ createdAt,
911
+ updatedAt,
912
+ });
913
+ }
914
+ handleObjectsChange(event) {
915
+ event.stopPropagation();
916
+ this.objectsChange.emit(event.detail);
917
+ }
918
+ handleObjectsAdded(event) {
919
+ event.stopPropagation();
920
+ this.objectsAdded.emit(event.detail);
921
+ }
922
+ handleObjectsRemoved(event) {
923
+ event.stopPropagation();
924
+ this.objectsRemoved.emit(event.detail);
925
+ }
926
+ handleObjectsUpdated(event) {
927
+ event.stopPropagation();
928
+ this.objectsUpdated.emit(event.detail);
929
+ }
930
+ handleObjectsSelectionChange(event) {
931
+ console.log(event.detail);
932
+ event.stopPropagation();
933
+ this.objectsSelectionChange.emit(event.detail);
934
+ }
935
+ handleUndoStateChange(event) {
936
+ event.stopPropagation();
937
+ this.undoStateChange.emit(event.detail);
938
+ this.undoState = event.detail;
939
+ }
940
+ async handleObjectsInViewportChange(event) {
941
+ event.stopPropagation();
942
+ const hasVisibleObjects = this.getContentObjects(event.detail).length > 0;
943
+ const hasAnyObjectsAtAll = this.getContentObjects(await this.engineRef.getAllObjects()).length > 0;
944
+ this.isBackToContentButtonVisible = !hasVisibleObjects && hasAnyObjectsAtAll;
945
+ }
946
+ handleViewportChange(event) {
947
+ event.stopPropagation();
948
+ this.currentZoomPercent = this.getZoomPercentFromScale(event.detail.scale);
949
+ this.viewportChange.emit(event.detail);
950
+ }
951
+ getZoomPercentFromScale(scale) {
952
+ if (!Number.isFinite(scale) || scale <= 0) {
953
+ return 100;
954
+ }
955
+ return Math.round(scale * 100);
956
+ }
957
+ handleAwarenessChange(event) {
958
+ event.stopPropagation();
959
+ this.awarenessChange.emit(event.detail);
960
+ }
961
+ handleNotificationsChange(event) {
962
+ event.stopPropagation();
963
+ this.clearNotificationDismissAnimationTimer();
964
+ this.isNotificationDismissing = false;
965
+ this.isNotificationHovered = false;
966
+ this.activeNotification = event.detail;
967
+ this.scheduleNotificationDismiss();
968
+ }
969
+ handleContextMenuStateChange(event) {
970
+ event.stopPropagation();
971
+ this.contextMenuState = event.detail.isVisible ? event.detail : undefined;
972
+ }
973
+ handleIsLoadingChange(event) {
974
+ console.log('isLoadingChange event:', event.detail);
975
+ event.stopPropagation();
976
+ this.clearLoadingOverlayShowTimer();
977
+ this.clearLoadingOverlayHideTimer();
978
+ if (event.detail) {
979
+ this.loadingOverlayShowTimeout = setTimeout(() => {
980
+ this.isLoadingOverlayVisible = true;
981
+ this.loadingOverlayShownTimestamp = Date.now();
982
+ this.loadingOverlayShowTimeout = undefined;
983
+ }, this.loadingOverlayDelayMs);
984
+ return;
985
+ }
986
+ if (this.isLoadingOverlayVisible && this.loadingOverlayShownTimestamp !== undefined) {
987
+ const elapsed = Date.now() - this.loadingOverlayShownTimestamp;
988
+ const remaining = this.loadingOverlayMinDisplayDurationMs - elapsed;
989
+ if (remaining > 0) {
990
+ this.loadingOverlayHideTimeout = setTimeout(() => {
991
+ this.isLoadingOverlayVisible = false;
992
+ this.loadingOverlayShownTimestamp = undefined;
993
+ this.loadingOverlayHideTimeout = undefined;
994
+ }, remaining);
995
+ return;
996
+ }
997
+ }
998
+ this.isLoadingOverlayVisible = false;
999
+ this.loadingOverlayShownTimestamp = undefined;
1000
+ }
1001
+ clearLoadingOverlayShowTimer() {
1002
+ if (this.loadingOverlayShowTimeout) {
1003
+ clearTimeout(this.loadingOverlayShowTimeout);
1004
+ this.loadingOverlayShowTimeout = undefined;
1005
+ }
1006
+ }
1007
+ clearLoadingOverlayHideTimer() {
1008
+ if (this.loadingOverlayHideTimeout) {
1009
+ clearTimeout(this.loadingOverlayHideTimeout);
1010
+ this.loadingOverlayHideTimeout = undefined;
1011
+ }
1012
+ }
1013
+ handleContextMenuActionSelected(event) {
1014
+ const contextMenuState = this.contextMenuState;
1015
+ if (!contextMenuState || !event.detail.action) {
1016
+ void this.hideContextMenu();
1017
+ return;
1018
+ }
1019
+ event.detail.action({
1020
+ x: contextMenuState.worldPosition.x,
1021
+ y: contextMenuState.worldPosition.y,
1022
+ }, contextMenuState.objects);
1023
+ void this.hideContextMenu();
1024
+ }
1025
+ handleNotificationHoverChange(event) {
1026
+ event.stopPropagation();
1027
+ this.isNotificationHovered = event.detail;
1028
+ if (this.isNotificationHovered) {
1029
+ this.clearNotificationDismissTimer();
1030
+ return;
1031
+ }
1032
+ if (this.activeNotification && !this.isNotificationDismissing) {
1033
+ this.scheduleNotificationDismiss();
1034
+ }
1035
+ }
1036
+ scheduleNotificationDismiss() {
1037
+ this.clearNotificationDismissTimer();
1038
+ this.notificationDismissTimeout = setTimeout(() => {
1039
+ this.dismissNotification();
1040
+ }, this.notificationDisplayDurationMs);
1041
+ }
1042
+ clearNotificationDismissTimer() {
1043
+ if (this.notificationDismissTimeout) {
1044
+ clearTimeout(this.notificationDismissTimeout);
1045
+ this.notificationDismissTimeout = undefined;
1046
+ }
1047
+ }
1048
+ clearNotificationDismissAnimationTimer() {
1049
+ if (this.notificationDismissAnimationTimeout) {
1050
+ clearTimeout(this.notificationDismissAnimationTimeout);
1051
+ this.notificationDismissAnimationTimeout = undefined;
1052
+ }
1053
+ }
1054
+ dismissNotification = () => {
1055
+ this.clearNotificationDismissTimer();
1056
+ this.isNotificationHovered = false;
1057
+ if (!this.activeNotification || this.isNotificationDismissing) {
1058
+ return;
1059
+ }
1060
+ this.isNotificationDismissing = true;
1061
+ this.clearNotificationDismissAnimationTimer();
1062
+ this.notificationDismissAnimationTimeout = setTimeout(() => {
1063
+ this.activeNotification = undefined;
1064
+ this.isNotificationDismissing = false;
1065
+ this.notificationDismissAnimationTimeout = undefined;
1066
+ }, this.notificationDismissAnimationDurationMs);
1067
+ };
1068
+ handleSettingsChange(event) {
1069
+ this.scaleMin = event.detail.scaleMin;
1070
+ this.scaleMax = event.detail.scaleMax;
1071
+ this.lockDrawingScale = event.detail.lockDrawingScale;
1072
+ this.theme = event.detail.theme;
1073
+ if (typeof event.detail.locale === 'string' && event.detail.locale !== this.locale) {
1074
+ this.locale = event.detail.locale;
1075
+ this.localeChange.emit(event.detail.locale);
1076
+ }
1077
+ this.viewportBoundaryLeft = event.detail.viewportBoundaryLeft ?? -Infinity;
1078
+ this.viewportBoundaryRight = event.detail.viewportBoundaryRight ?? Infinity;
1079
+ this.viewportBoundaryTop = event.detail.viewportBoundaryTop ?? -Infinity;
1080
+ this.viewportBoundaryBottom = event.detail.viewportBoundaryBottom ?? Infinity;
1081
+ this.debugInfo = event.detail.debugInfo;
1082
+ if (this.engineRef) {
1083
+ this.engineRef.saveSettings(event.detail);
1084
+ }
1085
+ this.themeChange.emit(event.detail.theme);
1086
+ }
1087
+ handleToggleIsPublic = async (event) => {
1088
+ const isPublic = event.detail;
1089
+ const activeWorkspace = await this.engineRef.getActiveWorkspace();
1090
+ activeWorkspace.isPublic = isPublic;
1091
+ await this.engineRef.updateWorkspace(activeWorkspace);
1092
+ this.activeWorkspace = activeWorkspace.clone();
1093
+ this.isPublicChange.emit({ isPublic, workspaceId: activeWorkspace.id });
1094
+ };
1095
+ /**
1096
+ * Updates the currentIsPublic state from the active workspace and emits the isPublicChange event.
1097
+ */
1098
+ updateCurrentIsPublic() {
1099
+ const isPublic = this.activeWorkspace?.isPublic ?? false;
1100
+ const workspaceId = this.activeWorkspace?.id;
1101
+ this.currentIsPublic = isPublic;
1102
+ if (!workspaceId) {
1103
+ return;
1104
+ }
1105
+ this.isPublicChange.emit({ isPublic, workspaceId });
1106
+ }
1107
+ handleProviderLogin = (event) => {
1108
+ this.login.emit(event.detail);
1109
+ };
1110
+ handleCurrentUserLogout = () => {
1111
+ this.logout.emit();
1112
+ };
1113
+ get isLoggedIn() {
1114
+ return !!this.user && !this.user.isGuest;
1115
+ }
1116
+ canExportObjectsAs(objects, format) {
1117
+ if (!objects || objects.length !== 1) {
1118
+ return false;
1119
+ }
1120
+ const [selected] = objects;
1121
+ if (!ObjectHelper.isKritzelExportable(selected)) {
1122
+ return false;
1123
+ }
1124
+ return selected.getSupportedExportFormats().includes(format);
1125
+ }
1126
+ canExportObjects(objects) {
1127
+ return this.canExportObjectsAs(objects, 'png') || this.canExportObjectsAs(objects, 'svg');
1128
+ }
1129
+ getPreferredExportFormat(objects) {
1130
+ if (this.canExportObjectsAs(objects, 'png')) {
1131
+ return 'png';
1132
+ }
1133
+ if (this.canExportObjectsAs(objects, 'svg')) {
1134
+ return 'svg';
1135
+ }
1136
+ return null;
1137
+ }
1138
+ getSettingsStorageKey() {
1139
+ return this.editorId ? `kritzel-settings-${this.editorId}` : 'kritzel-settings';
1140
+ }
1141
+ loadSettingsFromStorage() {
1142
+ const stored = localStorage.getItem(this.getSettingsStorageKey());
1143
+ if (stored) {
1144
+ try {
1145
+ const parsed = JSON.parse(stored);
1146
+ if (typeof parsed.scaleMin === 'number') {
1147
+ this.scaleMin = parsed.scaleMin;
1148
+ }
1149
+ if (typeof parsed.scaleMax === 'number') {
1150
+ this.scaleMax = parsed.scaleMax;
1151
+ }
1152
+ if (typeof parsed.lockDrawingScale === 'boolean') {
1153
+ this.lockDrawingScale = parsed.lockDrawingScale;
1154
+ }
1155
+ if (typeof parsed.theme === 'string') {
1156
+ this.theme = parsed.theme;
1157
+ }
1158
+ if (typeof parsed.locale === 'string') {
1159
+ this.locale = parsed.locale;
1160
+ }
1161
+ if (typeof parsed.viewportBoundaryLeft === 'number') {
1162
+ this.viewportBoundaryLeft = parsed.viewportBoundaryLeft;
1163
+ }
1164
+ if (typeof parsed.viewportBoundaryRight === 'number') {
1165
+ this.viewportBoundaryRight = parsed.viewportBoundaryRight;
1166
+ }
1167
+ if (typeof parsed.viewportBoundaryTop === 'number') {
1168
+ this.viewportBoundaryTop = parsed.viewportBoundaryTop;
1169
+ }
1170
+ if (typeof parsed.viewportBoundaryBottom === 'number') {
1171
+ this.viewportBoundaryBottom = parsed.viewportBoundaryBottom;
1172
+ }
1173
+ if (parsed.debugInfo) {
1174
+ this.debugInfo = { ...this.debugInfo, ...parsed.debugInfo };
1175
+ }
1176
+ }
1177
+ catch {
1178
+ // Invalid JSON, use prop defaults
1179
+ }
1180
+ }
1181
+ }
1182
+ async loadShortcuts() {
1183
+ this.shortcuts = await this.engineRef.getDisplayableShortcuts();
1184
+ }
1185
+ get currentSettingsConfig() {
1186
+ return {
1187
+ scaleMin: this.scaleMin,
1188
+ scaleMax: this.scaleMax,
1189
+ lockDrawingScale: this.lockDrawingScale,
1190
+ theme: this.theme,
1191
+ locale: this.locale,
1192
+ viewportBoundaryLeft: this.viewportBoundaryLeft,
1193
+ viewportBoundaryRight: this.viewportBoundaryRight,
1194
+ viewportBoundaryTop: this.viewportBoundaryTop,
1195
+ viewportBoundaryBottom: this.viewportBoundaryBottom,
1196
+ debugInfo: this.debugInfo,
1197
+ };
1198
+ }
1199
+ getContentObjects(objects) {
1200
+ return objects.filter(obj => !(obj instanceof KritzelSelectionGroup) && !(obj instanceof KritzelSelectionBox));
1201
+ }
1202
+ registerCustomSvgIcons() {
1203
+ for (const [name, svg] of Object.entries(this.customSvgIcons)) {
1204
+ KritzelIconRegistry.register(name, svg);
1205
+ }
1206
+ }
1207
+ async registerCustomFonts(fonts = this.customFonts) {
1208
+ KritzelFontRegistry.registerFonts(fonts);
1209
+ const currentVersion = ++this.customFontsLoadVersion;
1210
+ const loadPromise = KritzelFontRegistry.waitForFonts(fonts);
1211
+ this.customFontsReady = loadPromise;
1212
+ await loadPromise;
1213
+ if (currentVersion !== this.customFontsLoadVersion) {
1214
+ await this.waitForCustomFontsReady();
1215
+ }
1216
+ }
1217
+ async waitForCustomFontsReady() {
1218
+ while (true) {
1219
+ const version = this.customFontsLoadVersion;
1220
+ await this.customFontsReady;
1221
+ if (version === this.customFontsLoadVersion) {
1222
+ return;
1223
+ }
1224
+ }
1225
+ }
1226
+ listenForMobileKeyboard() {
1227
+ KritzelKeyboardHelper.onKeyboardVisibleChanged(isOpen => {
1228
+ this.isVirtualKeyboardOpen = isOpen;
1229
+ });
1230
+ }
1231
+ setOsSpecificCssVariables() {
1232
+ const os = KritzelDevicesHelper.detectOS();
1233
+ switch (os) {
1234
+ case 'iOS':
1235
+ // iOS specific adjustments
1236
+ this.host.style.setProperty('--kritzel-editor-top-left-buttons-top', '14px');
1237
+ this.host.style.setProperty('--kritzel-editor-top-left-buttons-left', '14px');
1238
+ this.host.style.setProperty('--kritzel-editor-toolbar-bottom', '14px');
1239
+ this.host.style.setProperty('--kritzel-editor-toolbar-transition', 'cubic-bezier(0.25, 0.1, 0.25, 1.0)');
1240
+ this.host.style.setProperty('--kritzel-editor-toolbar-transform', 'translateY(200%)');
1241
+ this.host.style.setProperty('--kritzel-editor-toolbar-transition-duration', '0.25s');
1242
+ break;
1243
+ case 'Android':
1244
+ // Android specific adjustments
1245
+ this.host.style.setProperty('--kritzel-editor-top-left-buttons-top', '14px');
1246
+ this.host.style.setProperty('--kritzel-editor-top-left-buttons-left', '14px');
1247
+ this.host.style.setProperty('--kritzel-editor-toolbar-bottom', '24px');
1248
+ this.host.style.setProperty('--kritzel-editor-toolbar-transition', 'cubic-bezier(0.25, 0.1, 0.25, 1.0)');
1249
+ this.host.style.setProperty('--kritzel-editor-toolbar-transform', 'translateY(200%)');
1250
+ this.host.style.setProperty('--kritzel-editor-toolbar-transition-duration', '0.25s');
1251
+ break;
1252
+ default:
1253
+ // Default for Windows/Linux
1254
+ this.host.style.setProperty('--kritzel-editor-top-left-buttons-top', '14px');
1255
+ this.host.style.setProperty('--kritzel-editor-top-left-buttons-left', '14px');
1256
+ this.host.style.setProperty('--kritzel-editor-toolbar-bottom', '14px');
1257
+ break;
1258
+ }
1259
+ }
1260
+ render() {
1261
+ const isLoggedIn = this.isLoggedIn;
1262
+ const shouldShowCurrentUser = isLoggedIn;
1263
+ const shouldShowLoginButton = this.isReady && !!this.loginConfig && !isLoggedIn;
1264
+ const normalizedToolbarItems = this.getNormalizedToolbarItems();
1265
+ return (h(Host, { key: '34f8001fb3d6ac1f52a51aa57eef893a41fb1c8c' }, h("div", { key: '61ae20a731ee495361bdd9cb0ed334cde2b3af42', class: "editor-content", style: {
1266
+ opacity: this.isEditorVisible ? '1' : '0',
1267
+ visibility: this.isEditorVisible ? 'visible' : 'hidden',
1268
+ transition: 'opacity 0.2s ease-in-out, visibility 0.2s ease-in-out',
1269
+ } }, h("div", { key: '760c5f02ae80fba30fff328f307fa78e45531f13', class: "top-left-buttons" }, h("kritzel-workspace-manager", { key: '4daf1b5fbc6523c46ce3c0b4bec206f1905cf1b7', ref: el => {
1270
+ if (el) {
1271
+ this.workspaceManagerRef = el;
1272
+ }
1273
+ }, visible: this.isWorkspaceManagerVisible, workspaces: this.availableWorkspaces, activeWorkspace: this.activeWorkspace, terms: this.resolvedTerms, onWorkspaceChange: event => this.handleWorkspaceManagerChange(event), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), h("kritzel-back-to-content", { key: '72e7649d13e3f03bcb7cd7c0507d1bd15e2f4cb3', visible: this.isBackToContentButtonVisible, text: this.resolvedTerms['backToContent.label'] ?? 'Back to content', onBackToContent: () => this.backToContent() })), this.activeNotification && (h("div", { key: '0651bba45fabb7342ea28e120bc930be5ee45de6', class: "top-center-notification-layer", role: "presentation" }, h("div", { key: 'b4b0bf29824b7cb025ef168a7c7be31d5054c0ff', class: { 'top-center-notification-container': true, 'is-dismissing': this.isNotificationDismissing }, role: "presentation" }, h("kritzel-notification-card", { key: '93c6f6b313a082f155eca9c60e623bcfbdd4119f', notification: this.activeNotification, locale: this.locale, onDismiss: this.dismissNotification, onHoverChange: event => this.handleNotificationHoverChange(event) })))), this.contextMenuState && this.contextMenuState.items.length > 0 && (h("kritzel-context-menu", { key: '0ad85b0ee5e85fffa081f88cdc991b3233ddd5ad', class: "context-menu", items: this.contextMenuState.items, objects: this.contextMenuState.objects, style: {
1274
+ position: 'absolute',
1275
+ left: `${this.contextMenuState.position.x}px`,
1276
+ top: `${this.contextMenuState.position.y}px`,
1277
+ zIndex: '10002',
1278
+ }, onActionSelected: event => this.handleContextMenuActionSelected(event), onClose: () => this.hideContextMenu() })), h("kritzel-loading-overlay", { key: 'bf4a9e25c3f78633831bcfdaf580a45171b67fff', visible: this.isLoadingOverlayVisible, text: this.resolvedTerms['editor.loading'] ?? 'Loading...' }), h("kritzel-engine", { key: '46bdfb77cddd106b7c6e8f7767520a331608592f', ref: el => {
1279
+ if (el) {
1280
+ this.engineRef = el;
1281
+ }
1282
+ }, workspaces: this.workspaces, activeWorkspaceId: this.activeWorkspaceId, editorId: this.editorId, syncConfig: this.syncConfig, assetStorageConfig: this.assetStorageConfig, user: this.user, scaleMax: this.scaleMax, lockDrawingScale: this.lockDrawingScale, scaleMin: this.scaleMin, cursorTarget: this.cursorTarget, viewportBoundaryLeft: this.viewportBoundaryLeft, viewportBoundaryRight: this.viewportBoundaryRight, viewportBoundaryTop: this.viewportBoundaryTop, viewportBoundaryBottom: this.viewportBoundaryBottom, isPanningEnabled: this.isPanningEnabled, isZoomingEnabled: this.isZoomingEnabled, theme: this.theme, themes: this.themes, licenseKey: this.licenseKey, locale: this.locale, locales: this.locales, fallbackLocale: this.fallbackLocale, debugInfo: this.debugInfo, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onActiveWorkspaceChange: event => this.handleActiveWorkspaceChange(event), onObjectsChange: event => this.handleObjectsChange(event), onObjectsAdded: event => this.handleObjectsAdded(event), onObjectsRemoved: event => this.handleObjectsRemoved(event), onObjectsUpdated: event => this.handleObjectsUpdated(event), onObjectsSelectionChange: event => this.handleObjectsSelectionChange(event), onUndoStateChange: event => this.handleUndoStateChange(event), onObjectsInViewportChange: event => this.handleObjectsInViewportChange(event), onViewportChange: event => this.handleViewportChange(event), onAwarenessChange: event => this.handleAwarenessChange(event), onNotificationsChange: event => this.handleNotificationsChange(event), onContextMenuStateChange: event => this.handleContextMenuStateChange(event), onIsLoadingChange: event => this.handleIsLoadingChange(event) }), h("kritzel-toolbar", { key: 'f19449a3b6aa08c51eb58ba53a37e133a6d1d1d5', visible: this.isToolbarVisible, class: { 'keyboard-open': this.isVirtualKeyboardOpen }, ref: el => {
1283
+ if (el) {
1284
+ this.toolbarRef = el;
1285
+ }
1286
+ }, toolbarItems: normalizedToolbarItems, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState ?? undefined, theme: this.theme, terms: this.resolvedTerms, onIsToolbarReady: () => (this.isToolbarReady = true) }), h("div", { key: '3d7b417b286f9e003137d02a7520ef1d9b5563f2', class: "bottom-left-buttons" }, h("kritzel-zoom-panel", { key: '1d366c23cb68e5e345a8cb8833cdc61c9a0c607b', visible: this.isZoomPanelVisible, zoomPercent: this.currentZoomPercent, terms: this.resolvedTerms, onZoomIn: () => this.zoomIn(), onZoomOut: () => this.zoomOut() })), h("div", { key: '1c27cd556dea88b7dcf1fb6960157cff37210260', class: "top-right-buttons" }, h("kritzel-settings", { key: '61be74fbd336e64236a618bc40c5a68c9e4ba2a9', ref: el => {
1287
+ if (el) {
1288
+ this.settingsRef = el;
1289
+ }
1290
+ }, shortcuts: this.shortcuts, availableThemes: this.themes && this.themes.length > 0 ? this.themes.map(t => t.name) : ['light', 'dark'], availableLocales: this.availableLocaleOptions, settings: this.currentSettingsConfig, terms: this.resolvedTerms, onSettingsChange: event => this.handleSettingsChange(event) }), h("kritzel-export", { key: '4e84be18db6d1c1982bd6420d034f80876b22651', ref: el => {
1291
+ if (el) {
1292
+ this.exportRef = el;
1293
+ }
1294
+ }, workspaceName: this.activeWorkspace?.name || 'workspace', terms: this.resolvedTerms, onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg(), onExportJson: event => this.engineRef.downloadAsJson(event.detail) }), h("kritzel-active-users", { key: 'a5c1b3de7e67ecddbac0a581a00585f796cd3dc3', users: this.activeUsers }), shouldShowCurrentUser && h("kritzel-current-user", { key: 'ff5f5668cb662f7275f714b3bad7ae7baff89eb4', user: this.user, terms: this.resolvedTerms, onClick: () => this.currentUserDialogRef?.open() }), shouldShowCurrentUser && (h("kritzel-current-user-dialog", { key: '18139a2382c60adec64fcb093e05904d3f37a639', ref: el => {
1295
+ if (el) {
1296
+ this.currentUserDialogRef = el;
1297
+ }
1298
+ }, user: this.user, terms: this.resolvedTerms, onLogoutRequest: this.handleCurrentUserLogout })), shouldShowLoginButton && h("kritzel-button", { key: 'c1d72827c6416efda9ba1f5576390135c8161665', onButtonClick: () => this.loginDialogRef?.open() }, this.resolvedTerms['login.dialogTitle'] ?? 'Sign in'), h("kritzel-more-menu", { key: '6cf3f77fd2a1c5f9e04e3cf415e775dd60e94927', ref: el => {
1299
+ if (el) {
1300
+ this.moreMenuRef = el;
1301
+ }
1302
+ }, items: this.resolvedMoreMenuItems, visible: this.isMoreMenuVisible, terms: this.resolvedTerms }), h("kritzel-share-dialog", { key: '60de09f78488162b0739f0494cc52706ba0df58d', ref: el => {
1303
+ if (el) {
1304
+ this.shareDialogRef = el;
1305
+ }
1306
+ }, isPublic: this.currentIsPublic, workspaceId: this.activeWorkspace?.id, terms: this.resolvedTerms, onToggleIsPublic: this.handleToggleIsPublic }), this.loginConfig && (h("kritzel-login-dialog", { key: 'ab05733b8c6985f3b3a3d327c4effd58e57b0a8f', ref: el => {
1307
+ if (el) {
1308
+ this.loginDialogRef = el;
1309
+ }
1310
+ }, providers: this.loginConfig.providers, dialogTitle: this.loginConfig.title ?? this.resolvedTerms['login.dialogTitle'] ?? 'Sign in', subtitle: this.loginConfig.subtitle, onProviderLogin: this.handleProviderLogin }))))));
1311
+ }
1312
+ static get watchers() { return {
1313
+ "isEngineReady": [{
1314
+ "onIsEngineReady": 0
1315
+ }],
1316
+ "isToolbarReady": [{
1317
+ "onIsToolbarReady": 0
1318
+ }],
1319
+ "availableWorkspaces": [{
1320
+ "onAvailableWorkspacesChange": 0
1321
+ }],
1322
+ "activeWorkspace": [{
1323
+ "onActiveWorkspaceChange": 0
1324
+ }],
1325
+ "customFonts": [{
1326
+ "onCustomFontsChange": 0
1327
+ }],
1328
+ "moreMenuItems": [{
1329
+ "onMoreMenuItemsChange": 0
1330
+ }],
1331
+ "syncConfig": [{
1332
+ "onSyncConfigChange": 0
1333
+ }],
1334
+ "loginConfig": [{
1335
+ "onLoginConfigChange": 0
1336
+ }],
1337
+ "user": [{
1338
+ "onUserChange": 0
1339
+ }],
1340
+ "activeWorkspaceId": [{
1341
+ "onActiveWorkspaceIdChange": 0
1342
+ }],
1343
+ "theme": [{
1344
+ "onCurrentThemeChange": 0
1345
+ }],
1346
+ "themes": [{
1347
+ "onThemesChange": 0
1348
+ }],
1349
+ "locale": [{
1350
+ "onLocaleChange": 0
1351
+ }],
1352
+ "locales": [{
1353
+ "onLocalesChange": 0
1354
+ }]
1355
+ }; }
1356
+ static get style() { return kritzelEditorCss(); }
1357
+ }, [512, "kritzel-editor", {
1358
+ "scaleMax": [1026, "scale-max"],
1359
+ "scaleMin": [1026, "scale-min"],
1360
+ "lockDrawingScale": [1028, "lock-drawing-scale"],
1361
+ "viewportBoundaryLeft": [1026, "viewport-boundary-left"],
1362
+ "viewportBoundaryRight": [1026, "viewport-boundary-right"],
1363
+ "viewportBoundaryTop": [1026, "viewport-boundary-top"],
1364
+ "viewportBoundaryBottom": [1026, "viewport-boundary-bottom"],
1365
+ "debugInfo": [1040],
1366
+ "user": [16],
1367
+ "activeUsers": [16],
1368
+ "toolbarItems": [16],
1369
+ "globalContextMenuItems": [16],
1370
+ "objectContextMenuItems": [16],
1371
+ "moreMenuItems": [16],
1372
+ "themes": [16],
1373
+ "theme": [1025],
1374
+ "licenseKey": [1, "license-key"],
1375
+ "locale": [1025],
1376
+ "locales": [16],
1377
+ "fallbackLocale": [1, "fallback-locale"],
1378
+ "customSvgIcons": [16],
1379
+ "customFonts": [16],
1380
+ "isPanningEnabled": [1028, "is-panning-enabled"],
1381
+ "isZoomingEnabled": [1028, "is-zooming-enabled"],
1382
+ "isToolbarVisible": [4, "is-toolbar-visible"],
1383
+ "isUtilityPanelVisible": [4, "is-utility-panel-visible"],
1384
+ "isWorkspaceManagerVisible": [4, "is-workspace-manager-visible"],
1385
+ "isMoreMenuVisible": [4, "is-more-menu-visible"],
1386
+ "isZoomPanelVisible": [4, "is-zoom-panel-visible"],
1387
+ "syncConfig": [16],
1388
+ "assetStorageConfig": [16],
1389
+ "cursorTarget": [16],
1390
+ "loginConfig": [16],
1391
+ "editorId": [1, "editor-id"],
1392
+ "activeWorkspaceId": [1, "active-workspace-id"],
1393
+ "workspaces": [16],
1394
+ "isEngineReady": [32],
1395
+ "isToolbarReady": [32],
1396
+ "isWorkspaceManagerReady": [32],
1397
+ "availableWorkspaces": [32],
1398
+ "activeWorkspace": [32],
1399
+ "isVirtualKeyboardOpen": [32],
1400
+ "undoState": [32],
1401
+ "isBackToContentButtonVisible": [32],
1402
+ "resolvedTerms": [32],
1403
+ "availableLocaleOptions": [32],
1404
+ "currentZoomPercent": [32],
1405
+ "shortcuts": [32],
1406
+ "currentIsPublic": [32],
1407
+ "isEditorVisible": [32],
1408
+ "activeNotification": [32],
1409
+ "isNotificationDismissing": [32],
1410
+ "contextMenuState": [32],
1411
+ "resolvedMoreMenuItems": [32],
1412
+ "isLoadingOverlayVisible": [32],
1413
+ "getObjectById": [64],
1414
+ "addObject": [64],
1415
+ "addObjects": [64],
1416
+ "updateObject": [64],
1417
+ "removeObject": [64],
1418
+ "removeObjects": [64],
1419
+ "getSelectedObjects": [64],
1420
+ "selectObjects": [64],
1421
+ "selectAllObjectsInViewport": [64],
1422
+ "clearSelection": [64],
1423
+ "centerObjectInViewport": [64],
1424
+ "panToObject": [64],
1425
+ "backToContent": [64],
1426
+ "centerAllObjects": [64],
1427
+ "centerObjects": [64],
1428
+ "setViewport": [64],
1429
+ "panTo": [64],
1430
+ "zoomTo": [64],
1431
+ "zoomIn": [64],
1432
+ "zoomOut": [64],
1433
+ "getViewport": [64],
1434
+ "screenToWorld": [64],
1435
+ "worldToScreen": [64],
1436
+ "setActiveWorkspace": [64],
1437
+ "createWorkspace": [64],
1438
+ "updateWorkspace": [64],
1439
+ "deleteWorkspace": [64],
1440
+ "getWorkspaces": [64],
1441
+ "getActiveWorkspace": [64],
1442
+ "loadSharedWorkspace": [64],
1443
+ "reinitSync": [64],
1444
+ "registerTool": [64],
1445
+ "changeActiveTool": [64],
1446
+ "disable": [64],
1447
+ "enable": [64],
1448
+ "copy": [64],
1449
+ "cut": [64],
1450
+ "paste": [64],
1451
+ "delete": [64],
1452
+ "bringForward": [64],
1453
+ "sendBackward": [64],
1454
+ "bringToFront": [64],
1455
+ "sendToBack": [64],
1456
+ "alignObjects": [64],
1457
+ "group": [64],
1458
+ "ungroup": [64],
1459
+ "undo": [64],
1460
+ "redo": [64],
1461
+ "getScreenshot": [64],
1462
+ "exportViewportAsPng": [64],
1463
+ "exportViewportAsSvg": [64],
1464
+ "getSelectedObjectSupportedExportFormats": [64],
1465
+ "canExportSelectedObjectAs": [64],
1466
+ "exportSelectedObject": [64],
1467
+ "exportAsJson": [64],
1468
+ "importFromJson": [64],
1469
+ "downloadAsJson": [64],
1470
+ "importFromFile": [64],
1471
+ "loadObjectsFromJson": [64],
1472
+ "getObjectsTotalCount": [64],
1473
+ "getAllObjects": [64],
1474
+ "findObjects": [64],
1475
+ "getObjectsInViewport": [64],
1476
+ "hideContextMenu": [64],
1477
+ "openContextMenu": [64],
1478
+ "openWorkspaceManagerMenu": [64],
1479
+ "closeWorkspaceManagerMenu": [64],
1480
+ "openMoreMenu": [64],
1481
+ "closeMoreMenu": [64],
1482
+ "openUserDialog": [64],
1483
+ "closeUserDialog": [64],
1484
+ "openExportDialog": [64],
1485
+ "closeExportDialog": [64],
1486
+ "openImportDialog": [64],
1487
+ "closeImportDialog": [64],
1488
+ "openSettingsDialog": [64],
1489
+ "closeSettingsDialog": [64],
1490
+ "openShareDialog": [64],
1491
+ "closeShareDialog": [64],
1492
+ "triggerSelectionChange": [64],
1493
+ "beginSceneBootstrap": [64],
1494
+ "endSceneBootstrap": [64],
1495
+ "getDisplayableShortcuts": [64],
1496
+ "openLoginDialog": [64],
1497
+ "closeLoginDialog": [64],
1498
+ "setLoginLoading": [64],
1499
+ "setLocale": [64],
1500
+ "getLocale": [64],
1501
+ "getAvailableLocales": [64],
1502
+ "registerLocales": [64],
1503
+ "registerFonts": [64],
1504
+ "t": [64],
1505
+ "triggerNotification": [64]
1506
+ }, [[0, "dblclick", "onTouchStart"]], {
1507
+ "isEngineReady": [{
1508
+ "onIsEngineReady": 0
1509
+ }],
1510
+ "isToolbarReady": [{
1511
+ "onIsToolbarReady": 0
1512
+ }],
1513
+ "availableWorkspaces": [{
1514
+ "onAvailableWorkspacesChange": 0
1515
+ }],
1516
+ "activeWorkspace": [{
1517
+ "onActiveWorkspaceChange": 0
1518
+ }],
1519
+ "customFonts": [{
1520
+ "onCustomFontsChange": 0
1521
+ }],
1522
+ "moreMenuItems": [{
1523
+ "onMoreMenuItemsChange": 0
1524
+ }],
1525
+ "syncConfig": [{
1526
+ "onSyncConfigChange": 0
1527
+ }],
1528
+ "loginConfig": [{
1529
+ "onLoginConfigChange": 0
1530
+ }],
1531
+ "user": [{
1532
+ "onUserChange": 0
1533
+ }],
1534
+ "activeWorkspaceId": [{
1535
+ "onActiveWorkspaceIdChange": 0
1536
+ }],
1537
+ "theme": [{
1538
+ "onCurrentThemeChange": 0
1539
+ }],
1540
+ "themes": [{
1541
+ "onThemesChange": 0
1542
+ }],
1543
+ "locale": [{
1544
+ "onLocaleChange": 0
1545
+ }],
1546
+ "locales": [{
1547
+ "onLocalesChange": 0
1548
+ }]
1549
+ }]);
1550
+ function defineCustomElement$1() {
1551
+ if (typeof customElements === "undefined") {
1552
+ return;
1553
+ }
1554
+ const components = ["kritzel-editor", "kritzel-active-users", "kritzel-avatar", "kritzel-awareness-cursors", "kritzel-back-to-content", "kritzel-button", "kritzel-color", "kritzel-color-palette", "kritzel-context-menu", "kritzel-current-user", "kritzel-current-user-dialog", "kritzel-cursor-trail", "kritzel-dialog", "kritzel-dropdown", "kritzel-engine", "kritzel-export", "kritzel-font", "kritzel-font-family", "kritzel-font-size", "kritzel-icon", "kritzel-input", "kritzel-line-endings", "kritzel-loading-overlay", "kritzel-login-dialog", "kritzel-master-detail", "kritzel-menu", "kritzel-menu-item", "kritzel-more-menu", "kritzel-notification-card", "kritzel-numeric-input", "kritzel-opacity-slider", "kritzel-pill-tabs", "kritzel-portal", "kritzel-settings", "kritzel-shape-fill", "kritzel-share-dialog", "kritzel-slide-toggle", "kritzel-split-button", "kritzel-stroke-size", "kritzel-tool-config", "kritzel-toolbar", "kritzel-tooltip", "kritzel-utility-panel", "kritzel-watermark", "kritzel-workspace-manager", "kritzel-zoom-panel"];
1555
+ components.forEach(tagName => { switch (tagName) {
1556
+ case "kritzel-editor":
1557
+ if (!customElements.get(transformTag(tagName))) {
1558
+ customElements.define(transformTag(tagName), KritzelEditor$1);
1559
+ }
1560
+ break;
1561
+ case "kritzel-active-users":
1562
+ if (!customElements.get(transformTag(tagName))) {
1563
+ defineCustomElement$K();
1564
+ }
1565
+ break;
1566
+ case "kritzel-avatar":
1567
+ if (!customElements.get(transformTag(tagName))) {
1568
+ defineCustomElement$J();
1569
+ }
1570
+ break;
1571
+ case "kritzel-awareness-cursors":
1572
+ if (!customElements.get(transformTag(tagName))) {
1573
+ defineCustomElement$I();
1574
+ }
1575
+ break;
1576
+ case "kritzel-back-to-content":
1577
+ if (!customElements.get(transformTag(tagName))) {
1578
+ defineCustomElement$H();
1579
+ }
1580
+ break;
1581
+ case "kritzel-button":
1582
+ if (!customElements.get(transformTag(tagName))) {
1583
+ defineCustomElement$G();
1584
+ }
1585
+ break;
1586
+ case "kritzel-color":
1587
+ if (!customElements.get(transformTag(tagName))) {
1588
+ defineCustomElement$F();
1589
+ }
1590
+ break;
1591
+ case "kritzel-color-palette":
1592
+ if (!customElements.get(transformTag(tagName))) {
1593
+ defineCustomElement$E();
1594
+ }
1595
+ break;
1596
+ case "kritzel-context-menu":
1597
+ if (!customElements.get(transformTag(tagName))) {
1598
+ defineCustomElement$D();
1599
+ }
1600
+ break;
1601
+ case "kritzel-current-user":
1602
+ if (!customElements.get(transformTag(tagName))) {
1603
+ defineCustomElement$C();
1604
+ }
1605
+ break;
1606
+ case "kritzel-current-user-dialog":
1607
+ if (!customElements.get(transformTag(tagName))) {
1608
+ defineCustomElement$B();
1609
+ }
1610
+ break;
1611
+ case "kritzel-cursor-trail":
1612
+ if (!customElements.get(transformTag(tagName))) {
1613
+ defineCustomElement$A();
1614
+ }
1615
+ break;
1616
+ case "kritzel-dialog":
1617
+ if (!customElements.get(transformTag(tagName))) {
1618
+ defineCustomElement$z();
1619
+ }
1620
+ break;
1621
+ case "kritzel-dropdown":
1622
+ if (!customElements.get(transformTag(tagName))) {
1623
+ defineCustomElement$y();
1624
+ }
1625
+ break;
1626
+ case "kritzel-engine":
1627
+ if (!customElements.get(transformTag(tagName))) {
1628
+ defineCustomElement$x();
1629
+ }
1630
+ break;
1631
+ case "kritzel-export":
1632
+ if (!customElements.get(transformTag(tagName))) {
1633
+ defineCustomElement$w();
1634
+ }
1635
+ break;
1636
+ case "kritzel-font":
1637
+ if (!customElements.get(transformTag(tagName))) {
1638
+ defineCustomElement$v();
1639
+ }
1640
+ break;
1641
+ case "kritzel-font-family":
1642
+ if (!customElements.get(transformTag(tagName))) {
1643
+ defineCustomElement$u();
1644
+ }
1645
+ break;
1646
+ case "kritzel-font-size":
1647
+ if (!customElements.get(transformTag(tagName))) {
1648
+ defineCustomElement$t();
1649
+ }
1650
+ break;
1651
+ case "kritzel-icon":
1652
+ if (!customElements.get(transformTag(tagName))) {
1653
+ defineCustomElement$s();
1654
+ }
1655
+ break;
1656
+ case "kritzel-input":
1657
+ if (!customElements.get(transformTag(tagName))) {
1658
+ defineCustomElement$r();
1659
+ }
1660
+ break;
1661
+ case "kritzel-line-endings":
1662
+ if (!customElements.get(transformTag(tagName))) {
1663
+ defineCustomElement$q();
1664
+ }
1665
+ break;
1666
+ case "kritzel-loading-overlay":
1667
+ if (!customElements.get(transformTag(tagName))) {
1668
+ defineCustomElement$p();
1669
+ }
1670
+ break;
1671
+ case "kritzel-login-dialog":
1672
+ if (!customElements.get(transformTag(tagName))) {
1673
+ defineCustomElement$o();
1674
+ }
1675
+ break;
1676
+ case "kritzel-master-detail":
1677
+ if (!customElements.get(transformTag(tagName))) {
1678
+ defineCustomElement$n();
1679
+ }
1680
+ break;
1681
+ case "kritzel-menu":
1682
+ if (!customElements.get(transformTag(tagName))) {
1683
+ defineCustomElement$m();
1684
+ }
1685
+ break;
1686
+ case "kritzel-menu-item":
1687
+ if (!customElements.get(transformTag(tagName))) {
1688
+ defineCustomElement$l();
1689
+ }
1690
+ break;
1691
+ case "kritzel-more-menu":
1692
+ if (!customElements.get(transformTag(tagName))) {
1693
+ defineCustomElement$k();
1694
+ }
1695
+ break;
1696
+ case "kritzel-notification-card":
1697
+ if (!customElements.get(transformTag(tagName))) {
1698
+ defineCustomElement$j();
1699
+ }
1700
+ break;
1701
+ case "kritzel-numeric-input":
1702
+ if (!customElements.get(transformTag(tagName))) {
1703
+ defineCustomElement$i();
1704
+ }
1705
+ break;
1706
+ case "kritzel-opacity-slider":
1707
+ if (!customElements.get(transformTag(tagName))) {
1708
+ defineCustomElement$h();
1709
+ }
1710
+ break;
1711
+ case "kritzel-pill-tabs":
1712
+ if (!customElements.get(transformTag(tagName))) {
1713
+ defineCustomElement$g();
1714
+ }
1715
+ break;
1716
+ case "kritzel-portal":
1717
+ if (!customElements.get(transformTag(tagName))) {
1718
+ defineCustomElement$f();
1719
+ }
1720
+ break;
1721
+ case "kritzel-settings":
1722
+ if (!customElements.get(transformTag(tagName))) {
1723
+ defineCustomElement$e();
1724
+ }
1725
+ break;
1726
+ case "kritzel-shape-fill":
1727
+ if (!customElements.get(transformTag(tagName))) {
1728
+ defineCustomElement$d();
1729
+ }
1730
+ break;
1731
+ case "kritzel-share-dialog":
1732
+ if (!customElements.get(transformTag(tagName))) {
1733
+ defineCustomElement$c();
1734
+ }
1735
+ break;
1736
+ case "kritzel-slide-toggle":
1737
+ if (!customElements.get(transformTag(tagName))) {
1738
+ defineCustomElement$b();
1739
+ }
1740
+ break;
1741
+ case "kritzel-split-button":
1742
+ if (!customElements.get(transformTag(tagName))) {
1743
+ defineCustomElement$a();
1744
+ }
1745
+ break;
1746
+ case "kritzel-stroke-size":
1747
+ if (!customElements.get(transformTag(tagName))) {
1748
+ defineCustomElement$9();
1749
+ }
1750
+ break;
1751
+ case "kritzel-tool-config":
1752
+ if (!customElements.get(transformTag(tagName))) {
1753
+ defineCustomElement$8();
1754
+ }
1755
+ break;
1756
+ case "kritzel-toolbar":
1757
+ if (!customElements.get(transformTag(tagName))) {
1758
+ defineCustomElement$7();
1759
+ }
1760
+ break;
1761
+ case "kritzel-tooltip":
1762
+ if (!customElements.get(transformTag(tagName))) {
1763
+ defineCustomElement$6();
1764
+ }
1765
+ break;
1766
+ case "kritzel-utility-panel":
1767
+ if (!customElements.get(transformTag(tagName))) {
1768
+ defineCustomElement$5();
1769
+ }
1770
+ break;
1771
+ case "kritzel-watermark":
1772
+ if (!customElements.get(transformTag(tagName))) {
1773
+ defineCustomElement$4();
1774
+ }
1775
+ break;
1776
+ case "kritzel-workspace-manager":
1777
+ if (!customElements.get(transformTag(tagName))) {
1778
+ defineCustomElement$3();
1779
+ }
1780
+ break;
1781
+ case "kritzel-zoom-panel":
1782
+ if (!customElements.get(transformTag(tagName))) {
1783
+ defineCustomElement$2();
1784
+ }
1785
+ break;
1786
+ } });
1787
+ }
1788
+
1789
+ const KritzelEditor = KritzelEditor$1;
1790
+ const defineCustomElement = defineCustomElement$1;
1791
+
1792
+ export { KritzelEditor, defineCustomElement };