@kritzel/engine 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 (373) hide show
  1. package/LICENSE.md +50 -0
  2. package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
  3. package/dist/cjs/engine.constants-CakmdKMW.js +28206 -0
  4. package/dist/cjs/index-BbbWU2aN.js +1742 -0
  5. package/dist/cjs/index.cjs.js +4232 -0
  6. package/dist/cjs/kritzel-awareness-cursors_5.cjs.entry.js +28004 -0
  7. package/dist/cjs/loader.cjs.js +13 -0
  8. package/dist/cjs/stencil.cjs.js +25 -0
  9. package/dist/collection/classes/core/core.class.js +1389 -0
  10. package/dist/collection/classes/core/reviver.class.js +124 -0
  11. package/dist/collection/classes/core/store.class.js +337 -0
  12. package/dist/collection/classes/core/viewport.class.js +794 -0
  13. package/dist/collection/classes/core/workspace.class.js +112 -0
  14. package/dist/collection/classes/handlers/base.handler.js +20 -0
  15. package/dist/collection/classes/handlers/context-menu.handler.js +170 -0
  16. package/dist/collection/classes/handlers/hover.handler.js +35 -0
  17. package/dist/collection/classes/handlers/key.handler.js +162 -0
  18. package/dist/collection/classes/handlers/line-handle.handler.js +475 -0
  19. package/dist/collection/classes/handlers/move.handler.js +295 -0
  20. package/dist/collection/classes/handlers/resize.handler.js +327 -0
  21. package/dist/collection/classes/handlers/rotation.handler.js +174 -0
  22. package/dist/collection/classes/handlers/selection.handler.js +526 -0
  23. package/dist/collection/classes/managers/anchor.manager.js +1476 -0
  24. package/dist/collection/classes/managers/browser-permission.manager.js +64 -0
  25. package/dist/collection/classes/managers/clipboard.manager.js +346 -0
  26. package/dist/collection/classes/managers/clipboard.types.js +1 -0
  27. package/dist/collection/classes/managers/cursor.manager.js +139 -0
  28. package/dist/collection/classes/managers/license.manager.js +341 -0
  29. package/dist/collection/classes/managers/localization.manager.js +227 -0
  30. package/dist/collection/classes/managers/theme.manager.js +206 -0
  31. package/dist/collection/classes/objects/base-object.class.js +462 -0
  32. package/dist/collection/classes/objects/dynamic-object.class.js +437 -0
  33. package/dist/collection/classes/objects/group.class.js +590 -0
  34. package/dist/collection/classes/objects/image.class.js +500 -0
  35. package/dist/collection/classes/objects/line.class.js +789 -0
  36. package/dist/collection/classes/objects/path.class.js +578 -0
  37. package/dist/collection/classes/objects/selection-box.class.js +32 -0
  38. package/dist/collection/classes/objects/selection-group.class.js +752 -0
  39. package/dist/collection/classes/objects/shape.class.js +628 -0
  40. package/dist/collection/classes/objects/text.class.js +461 -0
  41. package/dist/collection/classes/providers/assets/asset-resolver.class.js +536 -0
  42. package/dist/collection/classes/providers/assets/http-asset-provider.class.js +111 -0
  43. package/dist/collection/classes/providers/assets/indexeddb-asset-provider.class.js +241 -0
  44. package/dist/collection/classes/providers/assets/presigned-asset-provider.class.js +86 -0
  45. package/dist/collection/classes/providers/paste-intent/event-paste-intent.provider.js +48 -0
  46. package/dist/collection/classes/providers/paste-intent/ios-paste-intent.provider.js +16 -0
  47. package/dist/collection/classes/providers/paste-intent/navigator-paste-intent.provider.js +86 -0
  48. package/dist/collection/classes/providers/sync/broadcast-sync-provider.class.js +100 -0
  49. package/dist/collection/classes/providers/sync/hocuspocus-sync-provider.class.js +333 -0
  50. package/dist/collection/classes/providers/sync/in-memory-sync-provider.class.js +69 -0
  51. package/dist/collection/classes/providers/sync/indexeddb-sync-provider.class.js +39 -0
  52. package/dist/collection/classes/providers/sync/websocket-sync-provider.class.js +110 -0
  53. package/dist/collection/classes/registries/dynamic-object-renderer.registry.js +52 -0
  54. package/dist/collection/classes/registries/font-registry.class.js +161 -0
  55. package/dist/collection/classes/registries/icon-registry.class.js +118 -0
  56. package/dist/collection/classes/registries/paste-intent-provider.registry.js +26 -0
  57. package/dist/collection/classes/registries/tool.registry.js +69 -0
  58. package/dist/collection/classes/structures/app-state-map.structure.js +461 -0
  59. package/dist/collection/classes/structures/object-map.structure.js +1103 -0
  60. package/dist/collection/classes/structures/quadtree.structure.js +251 -0
  61. package/dist/collection/classes/tools/base-tool.class.js +88 -0
  62. package/dist/collection/classes/tools/brush-tool.class.js +236 -0
  63. package/dist/collection/classes/tools/eraser-tool.class.js +133 -0
  64. package/dist/collection/classes/tools/image-tool.class.js +152 -0
  65. package/dist/collection/classes/tools/line-tool.class.js +249 -0
  66. package/dist/collection/classes/tools/selection-tool.class.js +611 -0
  67. package/dist/collection/classes/tools/shape-tool.class.js +251 -0
  68. package/dist/collection/classes/tools/text-tool.class.js +179 -0
  69. package/dist/collection/collection-manifest.json +17 -0
  70. package/dist/collection/components/kritzel-awareness-cursors/kritzel-awareness-cursors.css +115 -0
  71. package/dist/collection/components/kritzel-awareness-cursors/kritzel-awareness-cursors.js +380 -0
  72. package/dist/collection/components/kritzel-cursor-trail/kritzel-cursor-trail.css +10 -0
  73. package/dist/collection/components/kritzel-cursor-trail/kritzel-cursor-trail.js +153 -0
  74. package/dist/collection/components/kritzel-engine/kritzel-engine.css +81 -0
  75. package/dist/collection/components/kritzel-engine/kritzel-engine.js +6345 -0
  76. package/dist/collection/components/kritzel-icon/kritzel-icon.css +18 -0
  77. package/dist/collection/components/kritzel-icon/kritzel-icon.js +93 -0
  78. package/dist/collection/components/kritzel-watermark/kritzel-watermark.css +29 -0
  79. package/dist/collection/components/kritzel-watermark/kritzel-watermark.js +83 -0
  80. package/dist/collection/configs/default-asset-storage.config.js +9 -0
  81. package/dist/collection/configs/default-brush-tool.config.js +9 -0
  82. package/dist/collection/configs/default-engine-config.js +73 -0
  83. package/dist/collection/configs/default-line-tool.config.js +12 -0
  84. package/dist/collection/configs/default-shape-tool.config.js +15 -0
  85. package/dist/collection/configs/default-sync.config.js +6 -0
  86. package/dist/collection/configs/default-text-tool.config.js +12 -0
  87. package/dist/collection/constants/color-palette.constants.js +40 -0
  88. package/dist/collection/constants/core.constants.js +1 -0
  89. package/dist/collection/constants/engine.constants.js +4 -0
  90. package/dist/collection/constants/license.constants.js +25 -0
  91. package/dist/collection/constants/schema.constants.js +4 -0
  92. package/dist/collection/constants/storage.constants.js +1 -0
  93. package/dist/collection/constants/stroke-size.constants.js +2 -0
  94. package/dist/collection/constants/text-tool-fonts.constants.js +18 -0
  95. package/dist/collection/constants/version.js +6 -0
  96. package/dist/collection/enums/alignment.enum.js +9 -0
  97. package/dist/collection/enums/event-button.enum.js +6 -0
  98. package/dist/collection/enums/handle-type.enum.js +7 -0
  99. package/dist/collection/enums/shape-type.enum.js +6 -0
  100. package/dist/collection/events/active-workspace-change.event.js +1 -0
  101. package/dist/collection/events/editor-is-ready.event.js +1 -0
  102. package/dist/collection/events/login.event.js +1 -0
  103. package/dist/collection/helpers/alignment.helper.js +73 -0
  104. package/dist/collection/helpers/class.helper.js +5 -0
  105. package/dist/collection/helpers/color.helper.js +106 -0
  106. package/dist/collection/helpers/cursor.helper.js +57 -0
  107. package/dist/collection/helpers/devices.helper.js +28 -0
  108. package/dist/collection/helpers/event.helper.js +58 -0
  109. package/dist/collection/helpers/geometry.helper.js +149 -0
  110. package/dist/collection/helpers/html.helper.js +116 -0
  111. package/dist/collection/helpers/image-file.helper.js +6 -0
  112. package/dist/collection/helpers/keyboard.helper.js +55 -0
  113. package/dist/collection/helpers/localization.helper.js +25 -0
  114. package/dist/collection/helpers/math.helper.js +8 -0
  115. package/dist/collection/helpers/migration.helper.js +45 -0
  116. package/dist/collection/helpers/object.helper.js +29 -0
  117. package/dist/collection/helpers/svg-export.helper.js +655 -0
  118. package/dist/collection/helpers/theme.helper.js +77 -0
  119. package/dist/collection/helpers/tool-config.helper.js +63 -0
  120. package/dist/collection/helpers/wheel.helper.js +113 -0
  121. package/dist/collection/index.js +107 -0
  122. package/dist/collection/interfaces/anchor.interface.js +1 -0
  123. package/dist/collection/interfaces/arrow-head.interface.js +1 -0
  124. package/dist/collection/interfaces/asset-provider.interface.js +1 -0
  125. package/dist/collection/interfaces/asset-storage-config.interface.js +1 -0
  126. package/dist/collection/interfaces/asset.interface.js +1 -0
  127. package/dist/collection/interfaces/bounding-box.interface.js +1 -0
  128. package/dist/collection/interfaces/clonable.interface.js +1 -0
  129. package/dist/collection/interfaces/context-menu-item.interface.js +1 -0
  130. package/dist/collection/interfaces/context-menu-state.interface.js +1 -0
  131. package/dist/collection/interfaces/debug-info.interface.js +1 -0
  132. package/dist/collection/interfaces/dialog.interface.js +1 -0
  133. package/dist/collection/interfaces/document-metadata.interface.js +1 -0
  134. package/dist/collection/interfaces/dynamic-object-renderer.interface.js +1 -0
  135. package/dist/collection/interfaces/engine-state.interface.js +1 -0
  136. package/dist/collection/interfaces/font.interface.js +1 -0
  137. package/dist/collection/interfaces/localization.interface.js +1 -0
  138. package/dist/collection/interfaces/login-config.interface.js +1 -0
  139. package/dist/collection/interfaces/master-detail.interface.js +1 -0
  140. package/dist/collection/interfaces/menu-item.interface.js +1 -0
  141. package/dist/collection/interfaces/migration.interface.js +1 -0
  142. package/dist/collection/interfaces/notification.interface.js +1 -0
  143. package/dist/collection/interfaces/object-change-event.interface.js +1 -0
  144. package/dist/collection/interfaces/object-export.interface.js +1 -0
  145. package/dist/collection/interfaces/object.interface.js +1 -0
  146. package/dist/collection/interfaces/paste-intent-provider.interface.js +1 -0
  147. package/dist/collection/interfaces/point.interface.js +1 -0
  148. package/dist/collection/interfaces/polygon.interface.js +1 -0
  149. package/dist/collection/interfaces/remote-cursor.interface.js +1 -0
  150. package/dist/collection/interfaces/selection-state.interface.js +1 -0
  151. package/dist/collection/interfaces/serializable.interface.js +1 -0
  152. package/dist/collection/interfaces/settings.interface.js +1 -0
  153. package/dist/collection/interfaces/share.interface.js +1 -0
  154. package/dist/collection/interfaces/shortcut.interface.js +1 -0
  155. package/dist/collection/interfaces/sync-config.interface.js +21 -0
  156. package/dist/collection/interfaces/sync-provider.interface.js +1 -0
  157. package/dist/collection/interfaces/theme.interface.js +1 -0
  158. package/dist/collection/interfaces/tool-config.interface.js +1 -0
  159. package/dist/collection/interfaces/tool-type.interface.js +1 -0
  160. package/dist/collection/interfaces/tool.interface.js +1 -0
  161. package/dist/collection/interfaces/toolbar-item.interface.js +1 -0
  162. package/dist/collection/interfaces/undo-state.interface.js +1 -0
  163. package/dist/collection/interfaces/user.interface.js +1 -0
  164. package/dist/collection/interfaces/viewport-state.interface.js +1 -0
  165. package/dist/collection/locales/de-locale.js +119 -0
  166. package/dist/collection/locales/en-locale.js +120 -0
  167. package/dist/collection/locales/fr-locale.js +119 -0
  168. package/dist/collection/migrations/app-state.migrations.js +47 -0
  169. package/dist/collection/migrations/workspace.migrations.js +67 -0
  170. package/dist/collection/themes/dark-theme.js +340 -0
  171. package/dist/collection/themes/light-theme.js +346 -0
  172. package/dist/collection/types/deep-readonly.type.js +1 -0
  173. package/dist/collection/types/state.types.js +1 -0
  174. package/dist/components/index.d.ts +47 -0
  175. package/dist/components/index.js +4143 -0
  176. package/dist/components/kritzel-awareness-cursors.d.ts +11 -0
  177. package/dist/components/kritzel-awareness-cursors.js +6 -0
  178. package/dist/components/kritzel-cursor-trail.d.ts +11 -0
  179. package/dist/components/kritzel-cursor-trail.js +6 -0
  180. package/dist/components/kritzel-engine.d.ts +11 -0
  181. package/dist/components/kritzel-engine.js +52641 -0
  182. package/dist/components/kritzel-icon.d.ts +11 -0
  183. package/dist/components/kritzel-icon.js +6 -0
  184. package/dist/components/kritzel-watermark.d.ts +11 -0
  185. package/dist/components/kritzel-watermark.js +6 -0
  186. package/dist/components/p-B2Htv9ou.js +49 -0
  187. package/dist/components/p-BvRGQvVI.js +3456 -0
  188. package/dist/components/p-CfSx6HU_.js +1469 -0
  189. package/dist/components/p-YP8wAcF4.js +122 -0
  190. package/dist/components/p-fx6msYHJ.js +167 -0
  191. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  192. package/dist/esm/engine.constants-Bl5-pbq-.js +28143 -0
  193. package/dist/esm/index-BU9Mv7y0.js +1715 -0
  194. package/dist/esm/index.js +4134 -0
  195. package/dist/esm/kritzel-awareness-cursors_5.entry.js +27978 -0
  196. package/dist/esm/loader.js +11 -0
  197. package/dist/esm/stencil.js +21 -0
  198. package/dist/index.cjs.js +1 -0
  199. package/dist/index.js +1 -0
  200. package/dist/stencil/index.esm.js +4134 -0
  201. package/dist/stencil/p-BU9Mv7y0.js +1702 -0
  202. package/dist/stencil/p-Bl5-pbq-.js +28143 -0
  203. package/dist/stencil/p-DQuL1Twl.js +3 -0
  204. package/dist/stencil/p-f0a8b7af.entry.js +27978 -0
  205. package/dist/stencil/stencil.esm.js +21 -0
  206. package/dist/types/classes/core/core.class.d.ts +532 -0
  207. package/dist/types/classes/core/reviver.class.d.ts +32 -0
  208. package/dist/types/classes/core/store.class.d.ts +198 -0
  209. package/dist/types/classes/core/viewport.class.d.ts +256 -0
  210. package/dist/types/classes/core/workspace.class.d.ts +95 -0
  211. package/dist/types/classes/handlers/base.handler.d.ts +18 -0
  212. package/dist/types/classes/handlers/context-menu.handler.d.ts +67 -0
  213. package/dist/types/classes/handlers/hover.handler.d.ts +23 -0
  214. package/dist/types/classes/handlers/key.handler.d.ts +44 -0
  215. package/dist/types/classes/handlers/line-handle.handler.d.ts +115 -0
  216. package/dist/types/classes/handlers/move.handler.d.ts +94 -0
  217. package/dist/types/classes/handlers/resize.handler.d.ts +95 -0
  218. package/dist/types/classes/handlers/rotation.handler.d.ts +50 -0
  219. package/dist/types/classes/handlers/selection.handler.d.ts +153 -0
  220. package/dist/types/classes/managers/anchor.manager.d.ts +513 -0
  221. package/dist/types/classes/managers/browser-permission.manager.d.ts +41 -0
  222. package/dist/types/classes/managers/clipboard.manager.d.ts +71 -0
  223. package/dist/types/classes/managers/clipboard.types.d.ts +23 -0
  224. package/dist/types/classes/managers/cursor.manager.d.ts +66 -0
  225. package/dist/types/classes/managers/license.manager.d.ts +147 -0
  226. package/dist/types/classes/managers/localization.manager.d.ts +145 -0
  227. package/dist/types/classes/managers/theme.manager.d.ts +112 -0
  228. package/dist/types/classes/objects/base-object.class.d.ts +266 -0
  229. package/dist/types/classes/objects/dynamic-object.class.d.ts +148 -0
  230. package/dist/types/classes/objects/group.class.d.ts +231 -0
  231. package/dist/types/classes/objects/image.class.d.ts +246 -0
  232. package/dist/types/classes/objects/line.class.d.ts +285 -0
  233. package/dist/types/classes/objects/path.class.d.ts +220 -0
  234. package/dist/types/classes/objects/selection-box.class.d.ts +19 -0
  235. package/dist/types/classes/objects/selection-group.class.d.ts +267 -0
  236. package/dist/types/classes/objects/shape.class.d.ts +322 -0
  237. package/dist/types/classes/objects/text.class.d.ts +197 -0
  238. package/dist/types/classes/providers/assets/asset-resolver.class.d.ts +141 -0
  239. package/dist/types/classes/providers/assets/http-asset-provider.class.d.ts +79 -0
  240. package/dist/types/classes/providers/assets/indexeddb-asset-provider.class.d.ts +69 -0
  241. package/dist/types/classes/providers/assets/presigned-asset-provider.class.d.ts +69 -0
  242. package/dist/types/classes/providers/paste-intent/event-paste-intent.provider.d.ts +8 -0
  243. package/dist/types/classes/providers/paste-intent/ios-paste-intent.provider.d.ts +6 -0
  244. package/dist/types/classes/providers/paste-intent/navigator-paste-intent.provider.d.ts +9 -0
  245. package/dist/types/classes/providers/sync/broadcast-sync-provider.class.d.ts +23 -0
  246. package/dist/types/classes/providers/sync/hocuspocus-sync-provider.class.d.ts +163 -0
  247. package/dist/types/classes/providers/sync/in-memory-sync-provider.class.d.ts +39 -0
  248. package/dist/types/classes/providers/sync/indexeddb-sync-provider.class.d.ts +25 -0
  249. package/dist/types/classes/providers/sync/websocket-sync-provider.class.d.ts +63 -0
  250. package/dist/types/classes/registries/dynamic-object-renderer.registry.d.ts +32 -0
  251. package/dist/types/classes/registries/font-registry.class.d.ts +19 -0
  252. package/dist/types/classes/registries/icon-registry.class.d.ts +39 -0
  253. package/dist/types/classes/registries/paste-intent-provider.registry.d.ts +10 -0
  254. package/dist/types/classes/registries/tool.registry.d.ts +53 -0
  255. package/dist/types/classes/structures/app-state-map.structure.d.ts +171 -0
  256. package/dist/types/classes/structures/object-map.structure.d.ts +403 -0
  257. package/dist/types/classes/structures/quadtree.structure.d.ts +128 -0
  258. package/dist/types/classes/tools/base-tool.class.d.ts +72 -0
  259. package/dist/types/classes/tools/brush-tool.class.d.ts +68 -0
  260. package/dist/types/classes/tools/eraser-tool.class.d.ts +38 -0
  261. package/dist/types/classes/tools/image-tool.class.d.ts +74 -0
  262. package/dist/types/classes/tools/line-tool.class.d.ts +63 -0
  263. package/dist/types/classes/tools/selection-tool.class.d.ts +188 -0
  264. package/dist/types/classes/tools/shape-tool.class.d.ts +90 -0
  265. package/dist/types/classes/tools/text-tool.class.d.ts +66 -0
  266. package/dist/types/components/kritzel-awareness-cursors/kritzel-awareness-cursors.d.ts +29 -0
  267. package/dist/types/components/kritzel-cursor-trail/kritzel-cursor-trail.d.ts +19 -0
  268. package/dist/types/components/kritzel-engine/kritzel-engine.d.ts +695 -0
  269. package/dist/types/components/kritzel-icon/kritzel-icon.d.ts +6 -0
  270. package/dist/types/components/kritzel-watermark/kritzel-watermark.d.ts +20 -0
  271. package/dist/types/components.d.ts +981 -0
  272. package/dist/types/configs/default-asset-storage.config.d.ts +8 -0
  273. package/dist/types/configs/default-brush-tool.config.d.ts +2 -0
  274. package/dist/types/configs/default-engine-config.d.ts +2 -0
  275. package/dist/types/configs/default-line-tool.config.d.ts +2 -0
  276. package/dist/types/configs/default-shape-tool.config.d.ts +2 -0
  277. package/dist/types/configs/default-sync.config.d.ts +5 -0
  278. package/dist/types/configs/default-text-tool.config.d.ts +2 -0
  279. package/dist/types/constants/color-palette.constants.d.ts +31 -0
  280. package/dist/types/constants/core.constants.d.ts +0 -0
  281. package/dist/types/constants/engine.constants.d.ts +4 -0
  282. package/dist/types/constants/license.constants.d.ts +25 -0
  283. package/dist/types/constants/schema.constants.d.ts +4 -0
  284. package/dist/types/constants/storage.constants.d.ts +1 -0
  285. package/dist/types/constants/stroke-size.constants.d.ts +2 -0
  286. package/dist/types/constants/text-tool-fonts.constants.d.ts +3 -0
  287. package/dist/types/constants/version.d.ts +6 -0
  288. package/dist/types/enums/alignment.enum.d.ts +8 -0
  289. package/dist/types/enums/event-button.enum.d.ts +5 -0
  290. package/dist/types/enums/handle-type.enum.d.ts +6 -0
  291. package/dist/types/enums/shape-type.enum.d.ts +5 -0
  292. package/dist/types/events/active-workspace-change.event.d.ts +7 -0
  293. package/dist/types/events/editor-is-ready.event.d.ts +18 -0
  294. package/dist/types/events/login.event.d.ts +3 -0
  295. package/dist/types/helpers/alignment.helper.d.ts +21 -0
  296. package/dist/types/helpers/class.helper.d.ts +3 -0
  297. package/dist/types/helpers/color.helper.d.ts +34 -0
  298. package/dist/types/helpers/cursor.helper.d.ts +22 -0
  299. package/dist/types/helpers/devices.helper.d.ts +8 -0
  300. package/dist/types/helpers/event.helper.d.ts +6 -0
  301. package/dist/types/helpers/geometry.helper.d.ts +38 -0
  302. package/dist/types/helpers/html.helper.d.ts +8 -0
  303. package/dist/types/helpers/image-file.helper.d.ts +3 -0
  304. package/dist/types/helpers/keyboard.helper.d.ts +6 -0
  305. package/dist/types/helpers/localization.helper.d.ts +18 -0
  306. package/dist/types/helpers/math.helper.d.ts +4 -0
  307. package/dist/types/helpers/migration.helper.d.ts +30 -0
  308. package/dist/types/helpers/object.helper.d.ts +9 -0
  309. package/dist/types/helpers/svg-export.helper.d.ts +231 -0
  310. package/dist/types/helpers/theme.helper.d.ts +42 -0
  311. package/dist/types/helpers/tool-config.helper.d.ts +4 -0
  312. package/dist/types/helpers/wheel.helper.d.ts +9 -0
  313. package/dist/types/index.d.ts +109 -0
  314. package/dist/types/interfaces/anchor.interface.d.ts +147 -0
  315. package/dist/types/interfaces/arrow-head.interface.d.ts +27 -0
  316. package/dist/types/interfaces/asset-provider.interface.d.ts +88 -0
  317. package/dist/types/interfaces/asset-storage-config.interface.d.ts +40 -0
  318. package/dist/types/interfaces/asset.interface.d.ts +43 -0
  319. package/dist/types/interfaces/bounding-box.interface.d.ts +8 -0
  320. package/dist/types/interfaces/clonable.interface.d.ts +3 -0
  321. package/dist/types/interfaces/context-menu-item.interface.d.ts +25 -0
  322. package/dist/types/interfaces/context-menu-state.interface.d.ts +16 -0
  323. package/dist/types/interfaces/debug-info.interface.d.ts +7 -0
  324. package/dist/types/interfaces/dialog.interface.d.ts +4 -0
  325. package/dist/types/interfaces/document-metadata.interface.d.ts +6 -0
  326. package/dist/types/interfaces/dynamic-object-renderer.interface.d.ts +40 -0
  327. package/dist/types/interfaces/engine-state.interface.d.ts +82 -0
  328. package/dist/types/interfaces/font.interface.d.ts +15 -0
  329. package/dist/types/interfaces/localization.interface.d.ts +143 -0
  330. package/dist/types/interfaces/login-config.interface.d.ts +24 -0
  331. package/dist/types/interfaces/master-detail.interface.d.ts +14 -0
  332. package/dist/types/interfaces/menu-item.interface.d.ts +27 -0
  333. package/dist/types/interfaces/migration.interface.d.ts +16 -0
  334. package/dist/types/interfaces/notification.interface.d.ts +10 -0
  335. package/dist/types/interfaces/object-change-event.interface.d.ts +31 -0
  336. package/dist/types/interfaces/object-export.interface.d.ts +20 -0
  337. package/dist/types/interfaces/object.interface.d.ts +53 -0
  338. package/dist/types/interfaces/paste-intent-provider.interface.d.ts +10 -0
  339. package/dist/types/interfaces/point.interface.d.ts +4 -0
  340. package/dist/types/interfaces/polygon.interface.d.ts +7 -0
  341. package/dist/types/interfaces/remote-cursor.interface.d.ts +18 -0
  342. package/dist/types/interfaces/selection-state.interface.d.ts +7 -0
  343. package/dist/types/interfaces/serializable.interface.d.ts +5 -0
  344. package/dist/types/interfaces/settings.interface.d.ts +25 -0
  345. package/dist/types/interfaces/share.interface.d.ts +9 -0
  346. package/dist/types/interfaces/shortcut.interface.d.ts +10 -0
  347. package/dist/types/interfaces/sync-config.interface.d.ts +41 -0
  348. package/dist/types/interfaces/sync-provider.interface.d.ts +66 -0
  349. package/dist/types/interfaces/theme.interface.d.ts +553 -0
  350. package/dist/types/interfaces/tool-config.interface.d.ts +24 -0
  351. package/dist/types/interfaces/tool-type.interface.d.ts +1 -0
  352. package/dist/types/interfaces/tool.interface.d.ts +8 -0
  353. package/dist/types/interfaces/toolbar-item.interface.d.ts +66 -0
  354. package/dist/types/interfaces/undo-state.interface.d.ts +6 -0
  355. package/dist/types/interfaces/user.interface.d.ts +22 -0
  356. package/dist/types/interfaces/viewport-state.interface.d.ts +7 -0
  357. package/dist/types/locales/de-locale.d.ts +5 -0
  358. package/dist/types/locales/en-locale.d.ts +6 -0
  359. package/dist/types/locales/fr-locale.d.ts +5 -0
  360. package/dist/types/migrations/app-state.migrations.d.ts +11 -0
  361. package/dist/types/migrations/workspace.migrations.d.ts +11 -0
  362. package/dist/types/stencil-public-runtime.d.ts +1873 -0
  363. package/dist/types/themes/dark-theme.d.ts +5 -0
  364. package/dist/types/themes/light-theme.d.ts +5 -0
  365. package/dist/types/types/deep-readonly.type.d.ts +7 -0
  366. package/dist/types/types/state.types.d.ts +3 -0
  367. package/loader/cdn.js +1 -0
  368. package/loader/index.cjs.js +1 -0
  369. package/loader/index.d.ts +24 -0
  370. package/loader/index.es2017.js +1 -0
  371. package/loader/index.js +2 -0
  372. package/package.json +101 -0
  373. package/readme.md +11 -0
@@ -0,0 +1,461 @@
1
+ import { KritzelBaseObject } from "./base-object.class";
2
+ import { KritzelKeyboardHelper } from "../../helpers/keyboard.helper";
3
+ import { KritzelDevicesHelper } from "../../helpers/devices.helper";
4
+ import { EditorState, TextSelection } from "prosemirror-state";
5
+ import { EditorView } from "prosemirror-view";
6
+ import { Schema } from "prosemirror-model";
7
+ import { schema } from "prosemirror-schema-basic";
8
+ import { addListNodes } from "prosemirror-schema-list";
9
+ import { keymap } from "prosemirror-keymap";
10
+ import { baseKeymap } from "prosemirror-commands";
11
+ import { KritzelColorHelper } from "../../helpers/color.helper";
12
+ import { KritzelMathHelper } from "../../helpers/math.helper";
13
+ import { KritzelFontRegistry } from "../registries/font-registry.class";
14
+ /**
15
+ * Represents a text object on the canvas that supports rich text editing via ProseMirror.
16
+ * Extends the base object class to inherit common object properties and behaviors.
17
+ */
18
+ export class KritzelText extends KritzelBaseObject {
19
+ __class__ = 'KritzelText';
20
+ fontFamily = 'Arial';
21
+ fontSize = 8;
22
+ fontColor = { light: '#000000', dark: '#ffffff' };
23
+ initialWidth = 1;
24
+ initialHeight = 1;
25
+ scale = 1;
26
+ scaleFactor = 1;
27
+ isDebugInfoVisible = true;
28
+ isEditable = true;
29
+ isEditing = false;
30
+ isNewlyCreated = false;
31
+ editor = null;
32
+ content = null;
33
+ _schema = new Schema({
34
+ nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),
35
+ marks: schema.spec.marks,
36
+ });
37
+ uneditedObject = null;
38
+ rows = 1;
39
+ /**
40
+ * Checks whether the text object contains any content.
41
+ * @returns `true` if the editor is empty or contains only whitespace, `false` otherwise.
42
+ */
43
+ get isEmpty() {
44
+ if (!this.editor) {
45
+ return true;
46
+ }
47
+ const doc = this.editor.state.doc;
48
+ if (doc.content.size === 0) {
49
+ return true;
50
+ }
51
+ const text = doc.textContent.trim();
52
+ return text.length === 0;
53
+ }
54
+ /**
55
+ * Constructs a new KritzelText instance with optional configuration.
56
+ * Can be used by consumers to create text objects programmatically:
57
+ * ```ts
58
+ * const text = new KritzelText({ text: 'Hello World', translateX: 100, translateY: 100 });
59
+ * await editor.addObject(text);
60
+ * ```
61
+ * @param config - Optional configuration object.
62
+ * @param config.text - Initial plain text content.
63
+ * @param config.translateX - Initial X translation position.
64
+ * @param config.translateY - Initial Y translation position.
65
+ * @param config.fontSize - Font size in points (default: 8).
66
+ * @param config.fontFamily - Font family name (default: 'Arial').
67
+ * @param config.fontColor - Theme-aware color object with light and dark values.
68
+ * @param config.height - Initial height of the text element.
69
+ * @param config.width - Initial width of the text element.
70
+ * @param config.scale - Scale factor for the text object.
71
+ * @param config.initialWidth - Initial width before scaling.
72
+ * @param config.initialHeight - Initial height before scaling.
73
+ * @param config.scaleX - Horizontal scale factor.
74
+ * @param config.scaleY - Vertical scale factor.
75
+ */
76
+ constructor(config) {
77
+ super();
78
+ this.rotation = KritzelMathHelper.degreesToRadians(config?.rotation ?? 0);
79
+ // Always create the editor so setContent() works immediately
80
+ this.editor = this.createEditor();
81
+ if (config) {
82
+ this.translateX = config.translateX || 0;
83
+ this.translateY = config.translateY || 0;
84
+ this.fontSize = config.fontSize || 8;
85
+ this.fontFamily = config.fontFamily || 'Arial';
86
+ this.fontColor = config.fontColor || { light: '#000000', dark: '#ffffff' };
87
+ // Guard _core access: scale may not be available when created by consumers
88
+ const coreScale = this._core?.store?.state?.scale;
89
+ const effectiveScale = coreScale != null && coreScale < 0 ? coreScale : 1;
90
+ this.width = this.initialWidth / effectiveScale;
91
+ this.height = (this.fontSize * 1.2) / effectiveScale;
92
+ this.scale = config.scale || 1;
93
+ this.scaleFactor = config.scaleX ?? 1;
94
+ // Set initial text content if provided
95
+ if (config.text) {
96
+ this.setContent({
97
+ type: 'doc',
98
+ content: [
99
+ {
100
+ type: 'paragraph',
101
+ content: [{ type: 'text', text: config.text }],
102
+ },
103
+ ],
104
+ });
105
+ }
106
+ }
107
+ }
108
+ /**
109
+ * Factory method to create a new KritzelText instance with default settings.
110
+ * Initializes the editor and registers the object with the core store.
111
+ * @param core - The KritzelCore instance managing the canvas.
112
+ * @param fontSize - Optional font size in points.
113
+ * @param fontFamily - Optional font family name.
114
+ * @param scale - Optional scale factor (defaults to current viewport scale).
115
+ * @returns A new, fully initialized KritzelText instance.
116
+ */
117
+ static create(core, fontSize, fontFamily, scale, rotation) {
118
+ const object = new KritzelText();
119
+ object._core = core;
120
+ object.id = object.generateId();
121
+ object.workspaceId = core.store.state.activeWorkspace.id;
122
+ object.userId = core.user?.id;
123
+ object.fontSize = fontSize || 8;
124
+ object.fontFamily = fontFamily || 'Arial';
125
+ object.translateX = 0;
126
+ object.translateY = 0;
127
+ object.rotation = KritzelMathHelper.degreesToRadians(rotation ?? 0);
128
+ const coreScale = core.store.state.scale;
129
+ const effectiveScale = coreScale < 0 ? coreScale : 1;
130
+ object.width = object.initialWidth / effectiveScale;
131
+ object.height = (object.fontSize * 1.2) / effectiveScale;
132
+ object.backgroundColor = { light: 'transparent', dark: 'transparent' };
133
+ object.initialWidth = object.width;
134
+ object.initialHeight = object.height;
135
+ object.scaleFactor = 1;
136
+ object.scale = scale ?? coreScale;
137
+ object.zIndex = core.store.currentZIndex;
138
+ // Editor is already created in the constructor
139
+ return object;
140
+ }
141
+ /**
142
+ * Mounts the text object to a DOM element, attaching the ProseMirror editor.
143
+ * Applies font styling and ensures the editor is properly rendered.
144
+ * @param element - The HTML div element to mount the text object into.
145
+ */
146
+ mount(element) {
147
+ if (element === null || this.isInViewport() === false) {
148
+ return;
149
+ }
150
+ element.style.fontFamily = KritzelFontRegistry.resolveCssFontFamily(this.fontFamily);
151
+ element.style.fontSize = `${this.fontSize}pt`;
152
+ element.style.color = KritzelColorHelper.resolveThemeColor(this.fontColor, this._core?.themeManager?.currentTheme);
153
+ if (this.isMounted && this.elementRef === element && this.editor.dom.parentElement === element) {
154
+ if (!this._core.store.state.isScaling && !this._core.store.state.isPanning) {
155
+ requestAnimationFrame(() => this.adjustSizeOnInput());
156
+ }
157
+ return;
158
+ }
159
+ this.elementRef = element;
160
+ this.elementRef.style.whiteSpace = 'pre-wrap';
161
+ this.elementRef.style.wordWrap = 'break-word';
162
+ this.elementRef.innerHTML = '';
163
+ this.elementRef.appendChild(this.editor.dom);
164
+ this.isMounted = true;
165
+ requestAnimationFrame(() => this.adjustSizeOnInput());
166
+ }
167
+ /**
168
+ * Creates and configures a new ProseMirror EditorView instance.
169
+ * Sets up the document schema, plugins, and transaction handling.
170
+ * @returns A configured ProseMirror EditorView instance.
171
+ */
172
+ createEditor() {
173
+ const doc = this._schema.node('doc', null, [this._schema.node('paragraph')]);
174
+ return new EditorView(null, {
175
+ state: EditorState.create({
176
+ doc: doc,
177
+ plugins: [keymap(baseKeymap)],
178
+ }),
179
+ editable: () => false,
180
+ dispatchTransaction: transaction => {
181
+ const newState = this.editor.state.apply(transaction);
182
+ this.editor.updateState(newState);
183
+ if (transaction.docChanged) {
184
+ this.content = newState.doc.toJSON();
185
+ this.adjustSizeOnInput();
186
+ if (!transaction.getMeta('fromRemote')) {
187
+ this._core.store.objects.update(this, { temporary: true });
188
+ }
189
+ }
190
+ },
191
+ });
192
+ }
193
+ /**
194
+ * Sets the content of the text editor from a serialized document structure.
195
+ * Used to restore content from saved state or synchronize with remote changes.
196
+ * @param content - The serialized ProseMirror document content in JSON format.
197
+ */
198
+ setContent(content) {
199
+ this.content = content;
200
+ if (this.editor && content) {
201
+ const newDoc = this.editor.state.schema.nodeFromJSON(content);
202
+ const tr = this.editor.state.tr.replaceWith(0, this.editor.state.doc.content.size, newDoc.content);
203
+ tr.setMeta('fromRemote', true);
204
+ this.editor.dispatch(tr);
205
+ }
206
+ }
207
+ /**
208
+ * Dynamically adjusts the width and height of the text object based on content.
209
+ * Recalculates dimensions when content changes and handles rotation offsets
210
+ * to maintain proper positioning.
211
+ */
212
+ adjustSizeOnInput() {
213
+ const element = this.elementRef;
214
+ if (element && this.isMounted && element.scrollWidth > 0) {
215
+ const previousTotalWidth = this.totalWidth;
216
+ const previousTotalHeight = this.totalHeight;
217
+ const newWidth = element.scrollWidth;
218
+ const newHeight = element.scrollHeight;
219
+ this.width = newWidth * this.scaleFactor;
220
+ this.height = newHeight * this.scaleFactor;
221
+ if (this.rotation !== 0) {
222
+ const newTotalWidth = this.totalWidth;
223
+ const newTotalHeight = this.totalHeight;
224
+ const deltaWidth = (newTotalWidth - previousTotalWidth) / 2 / this.scale;
225
+ const deltaHeight = (newTotalHeight - previousTotalHeight) / 2 / this.scale;
226
+ if (deltaWidth !== 0 || deltaHeight !== 0) {
227
+ const cos = Math.cos(this.rotation);
228
+ const sin = Math.sin(this.rotation);
229
+ const rotatedDeltaX = cos * deltaWidth - sin * deltaHeight;
230
+ const rotatedDeltaY = sin * deltaWidth + cos * deltaHeight;
231
+ this.translateX += rotatedDeltaX - deltaWidth;
232
+ this.translateY += rotatedDeltaY - deltaHeight;
233
+ }
234
+ }
235
+ }
236
+ }
237
+ /**
238
+ * Resizes the text object while maintaining aspect ratio through scale factor adjustment.
239
+ * Updates position and dimensions, then persists changes to the store.
240
+ * @param x - New X position (translateX value).
241
+ * @param y - New Y position (translateY value).
242
+ * @param width - Target width for the text object.
243
+ * @param height - Target height for the text object.
244
+ */
245
+ resize(x, y, width, height) {
246
+ if (width <= 1 || height <= 1) {
247
+ return;
248
+ }
249
+ const originalWidth = this.width / this.scaleFactor;
250
+ const originalHeight = this.height / this.scaleFactor;
251
+ const scaleX = width / originalWidth;
252
+ const scaleY = height / originalHeight;
253
+ this.scaleFactor = Math.min(scaleX, scaleY);
254
+ this.width = originalWidth * this.scaleFactor;
255
+ this.height = originalHeight * this.scaleFactor;
256
+ this.translateX = x;
257
+ this.translateY = y;
258
+ this._core.store.objects.update(this);
259
+ }
260
+ /**
261
+ * Focuses the text editor and optionally positions the cursor at specific coordinates.
262
+ * Falls back to placing cursor at the end of the document if coordinates are invalid.
263
+ * Handles iOS-specific scrolling behavior.
264
+ * @param coords - Optional coordinates to position the cursor.
265
+ * @param coords.x - X coordinate for cursor placement.
266
+ * @param coords.y - Y coordinate for cursor placement.
267
+ */
268
+ focus(coords) {
269
+ if (this.editor) {
270
+ const doc = this.editor.state.doc;
271
+ if (coords.x && coords.y && !this.isEmpty) {
272
+ const pos = this.editor.posAtCoords({ left: coords.x, top: coords.y });
273
+ if (pos) {
274
+ this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, pos.pos)));
275
+ this.editor.focus();
276
+ if (KritzelDevicesHelper.isIOS()) {
277
+ this.scrollIntoViewOnIOS();
278
+ }
279
+ return;
280
+ }
281
+ }
282
+ const end = Math.max(1, doc.content.size - 1);
283
+ this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, end)));
284
+ this.editor.focus();
285
+ if (KritzelDevicesHelper.isIOS()) {
286
+ this.scrollIntoViewOnIOS();
287
+ }
288
+ }
289
+ }
290
+ /**
291
+ * Scrolls the editor into view on iOS devices after a short delay.
292
+ * Addresses iOS-specific virtual keyboard and viewport issues.
293
+ */
294
+ scrollIntoViewOnIOS() {
295
+ setTimeout(() => {
296
+ if (this.editor && this.editor.dom) {
297
+ this.editor.dom.scrollIntoView({
298
+ behavior: 'smooth',
299
+ block: 'center',
300
+ inline: 'nearest',
301
+ });
302
+ }
303
+ }, 300);
304
+ }
305
+ /**
306
+ * Enters edit mode for the text object, enabling content editing.
307
+ * Saves a snapshot of the current state, activates the text tool,
308
+ * enables the editor, and focuses at the pointer position.
309
+ * @param event - Optional pointer event containing cursor coordinates for focus placement.
310
+ */
311
+ edit(event) {
312
+ KritzelKeyboardHelper.disableInteractiveWidget();
313
+ this.uneditedObject = this.clone();
314
+ this._core.store.setState('activeTool', this._core.toolRegistry.getTool('text'));
315
+ this.editor.setProps({ editable: () => true });
316
+ this.isEditing = true;
317
+ this._core.rerender();
318
+ this.adjustSizeOnInput();
319
+ if (event?.clientX && event?.clientY) {
320
+ this.focus({ x: event?.clientX, y: event?.clientY });
321
+ }
322
+ KritzelKeyboardHelper.enableInteractiveWidget();
323
+ }
324
+ /**
325
+ * Exits edit mode and saves the current content.
326
+ * Disables the editor, persists content to the document,
327
+ * consolidates temporary history items, and emits change events.
328
+ */
329
+ save() {
330
+ requestAnimationFrame(() => this.adjustSizeOnInput());
331
+ this.content = this.editor.state.doc.toJSON();
332
+ this.editor.setProps({ editable: () => false });
333
+ this.editor.dom.blur();
334
+ this.isEditing = false;
335
+ this._core.store.objects.consolidateTemporaryItems();
336
+ this._core.store.objects.update(this);
337
+ this._core.engine.emitObjectsChange();
338
+ if (this.isNewlyCreated) {
339
+ this.isNewlyCreated = false;
340
+ this._core.engine.emitObjectsAdded([this]);
341
+ }
342
+ else {
343
+ this._core.engine.emitObjectsUpdated([{ object: this, changedProperties: ['content'] }]);
344
+ }
345
+ }
346
+ /**
347
+ * Handles the Escape key while the text object is in edit mode.
348
+ * Implements a two-stage behavior: if the editor currently has a non-empty
349
+ * text selection, the selection is collapsed to a caret without exiting
350
+ * edit mode. If the selection is already collapsed, edit mode is exited
351
+ * (saving the current content or deleting the object if it is empty) and
352
+ * the canvas selection is cleared so subsequent tool actions start fresh.
353
+ */
354
+ handleEscape() {
355
+ if (!this.editor || !this.isEditing) {
356
+ return;
357
+ }
358
+ const { state } = this.editor;
359
+ if (!state.selection.empty) {
360
+ const pos = state.selection.head;
361
+ this.editor.dispatch(state.tr.setSelection(TextSelection.create(state.doc, pos)));
362
+ this.editor.focus();
363
+ return;
364
+ }
365
+ this._core.resetActiveText();
366
+ this._core.clearSelection();
367
+ this._core.store.setState('activeTool', this._core.toolRegistry.getTool('selection'));
368
+ }
369
+ /**
370
+ * Handles pointer down events during text editing.
371
+ * Stops event propagation to prevent canvas interaction while editing.
372
+ * @param event - The pointer down event.
373
+ */
374
+ handlePointerDown(event) {
375
+ if (!this.isEditing) {
376
+ return;
377
+ }
378
+ event.stopPropagation();
379
+ }
380
+ /**
381
+ * Handles pointer move events during text editing.
382
+ * Conditionally stops propagation based on whether the engine is tracking
383
+ * the pointer, allowing proper event flow during text creation.
384
+ * @param event - The pointer move event.
385
+ */
386
+ handlePointerMove(event) {
387
+ if (!this.isEditing) {
388
+ return;
389
+ }
390
+ // Only stop propagation if the engine is not tracking this pointer.
391
+ // During text creation, the engine adds the pointer before the text element
392
+ // is in the DOM. We must let move events propagate so the engine can
393
+ // update its pointer state.
394
+ if (!this._core.store.state.pointers.has(event.pointerId)) {
395
+ event.stopPropagation();
396
+ }
397
+ }
398
+ /**
399
+ * Handles pointer up events during text editing.
400
+ * Conditionally stops propagation to allow the engine to clean up pointer state,
401
+ * preventing issues with stale pointers that could cause gesture misinterpretation.
402
+ * @param event - The pointer up event.
403
+ */
404
+ handlePointerUp(event) {
405
+ if (!this.isEditing) {
406
+ return;
407
+ }
408
+ // Only stop propagation if the engine is not tracking this pointer.
409
+ // When a text is created during pointerdown, the engine adds the pointer
410
+ // to its map before the text element exists in the DOM. By the time
411
+ // pointerup fires, the text element may intercept the event (especially
412
+ // on iOS where pointer capture may not redirect events in shadow DOM).
413
+ // We must let the event propagate so the engine can clean up the pointer.
414
+ // Without this, stale pointers accumulate and single-finger touches
415
+ // get misinterpreted as two-finger zoom gestures.
416
+ if (!this._core.store.state.pointers.has(event.pointerId)) {
417
+ event.stopPropagation();
418
+ }
419
+ }
420
+ /**
421
+ * Creates a deep copy of this text object, including a new editor instance.
422
+ * Preserves all content from the original object.
423
+ * @returns A new KritzelText instance with copied properties and content.
424
+ */
425
+ copy() {
426
+ const copiedObject = super.copy();
427
+ copiedObject.editor = copiedObject.createEditor();
428
+ if (this.content) {
429
+ copiedObject.setContent(this.content);
430
+ }
431
+ return copiedObject;
432
+ }
433
+ /**
434
+ * Serializes the text object to a plain object for storage or transmission.
435
+ * Excludes non-serializable properties like the core reference, editor instance,
436
+ * and DOM elements.
437
+ * @returns A plain object containing all serializable properties.
438
+ */
439
+ serialize() {
440
+ const { _core, _elementRef, _schema, element, totalWidth, totalHeight, editor, uneditedObject, ...remainingProps } = this;
441
+ const clonedProps = structuredClone(remainingProps);
442
+ if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {
443
+ clonedProps.element = element.cloneNode(true);
444
+ }
445
+ return clonedProps;
446
+ }
447
+ /**
448
+ * Restores a text object from a serialized representation.
449
+ * Reconstructs the editor content from the saved document state.
450
+ * @template KritzelText - The return type (for type inference).
451
+ * @param object - The serialized object data to restore from.
452
+ * @returns The deserialized text object instance.
453
+ */
454
+ deserialize(object) {
455
+ super.deserialize(object);
456
+ if (object.content) {
457
+ this.setContent(object.content);
458
+ }
459
+ return this;
460
+ }
461
+ }