@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,40 @@
1
+ import { AssetProviderConfig } from './asset-provider.interface';
2
+ /**
3
+ * Configuration for the asset storage layer used by Kritzel to store
4
+ * binary payloads (images, etc.) outside of the Yjs CRDT.
5
+ *
6
+ * The Yjs document only stores asset ids; the actual bytes live in the
7
+ * providers configured here. This keeps CRDT updates tiny regardless of
8
+ * attachment size.
9
+ *
10
+ * @example Local-only (offline friendly):
11
+ * ```ts
12
+ * { providers: [IndexedDBAssetProvider] }
13
+ * ```
14
+ *
15
+ * @example Write-through to a REST backend with IDB cache:
16
+ * ```ts
17
+ * {
18
+ * providers: [
19
+ * IndexedDBAssetProvider,
20
+ * HttpAssetProvider.with({
21
+ * uploadUrl: () => '/api/assets',
22
+ * resolveUrl: (id) => `/api/assets/${id}`,
23
+ * headers: async () => ({ Authorization: `Bearer ${await getToken()}` }),
24
+ * }),
25
+ * ],
26
+ * }
27
+ * ```
28
+ */
29
+ export interface KritzelAssetStorageConfig {
30
+ /**
31
+ * Ordered list of asset providers. Resolution walks the list in order
32
+ * and returns the first provider that can serve a given id (typically
33
+ * the local cache first, then the remote authority).
34
+ *
35
+ * For uploads, the resolver writes to every provider in a write-through
36
+ * fashion: local providers receive the bytes immediately; remote
37
+ * providers are written via a persistent background queue.
38
+ */
39
+ providers: AssetProviderConfig[];
40
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Kinds of assets that can be stored via an asset storage provider.
3
+ * Images are the primary consumer today; other kinds are reserved so a
4
+ * single provider infrastructure can serve future object types.
5
+ */
6
+ export type KritzelAssetKind = 'image' | 'video' | 'audio' | 'file';
7
+ /**
8
+ * Describes a stored binary asset.
9
+ * Only the `id` is persisted inside the Yjs document on Kritzel objects;
10
+ * all other fields are metadata carried by the asset layer.
11
+ */
12
+ export interface KritzelAsset {
13
+ /** Stable identifier (uuid). Persisted inside canvas objects. */
14
+ id: string;
15
+ /** Coarse kind used to dispatch consumers. */
16
+ kind: KritzelAssetKind;
17
+ /** MIME type of the stored bytes (e.g. `image/png`). */
18
+ mimeType: string;
19
+ /** Size of the stored bytes in bytes. */
20
+ size: number;
21
+ /** Creation timestamp (ms since epoch). */
22
+ createdAt: number;
23
+ /** Optional width hint (pixels) for visual assets. */
24
+ width?: number;
25
+ /** Optional height hint (pixels) for visual assets. */
26
+ height?: number;
27
+ /** Optional duration hint (milliseconds) for time-based assets. */
28
+ durationMs?: number;
29
+ /** Optional original filename as supplied by the user. */
30
+ originalFilename?: string;
31
+ /**
32
+ * Names of remote providers that have not yet successfully received a
33
+ * copy of this asset. When non-empty, the resolver will keep retrying
34
+ * the upload in the background. Empty / undefined means the asset is
35
+ * fully replicated (or no remote providers are configured).
36
+ */
37
+ pendingRemotes?: string[];
38
+ }
39
+ /**
40
+ * Lifecycle state used by consumers (e.g. the renderer) to react to
41
+ * in-flight asset resolution without having to poll.
42
+ */
43
+ export type KritzelAssetLoadState = 'idle' | 'loading' | 'ready' | 'error';
@@ -0,0 +1,8 @@
1
+ export interface KritzelBoundingBox {
2
+ x: number;
3
+ y: number;
4
+ z: number;
5
+ width: number;
6
+ height: number;
7
+ depth?: number;
8
+ }
@@ -0,0 +1,3 @@
1
+ export interface KritzelClonable<T> {
2
+ clone(): T;
3
+ }
@@ -0,0 +1,25 @@
1
+ import { KritzelBaseObject } from "../classes/objects/base-object.class";
2
+ import { KritzelTermKey } from "./localization.interface";
3
+ export interface ContextMenuItem {
4
+ /**
5
+ * The item label. Always resolved through the active locale: pass a
6
+ * {@link KritzelTermKey} (e.g. `'menu.copy'`) to display its translation, or
7
+ * any other string to use it verbatim. Known term keys are autocompleted.
8
+ */
9
+ label: KritzelTermKey | (string & NonNullable<unknown>);
10
+ action?: (menu: {
11
+ x: number;
12
+ y: number;
13
+ }, objects: KritzelBaseObject[]) => void;
14
+ icon?: string;
15
+ group?: string;
16
+ children?: ContextMenuItem[];
17
+ isVisible?: boolean | ((menu: {
18
+ x: number;
19
+ y: number;
20
+ }, objects: KritzelBaseObject[]) => boolean | Promise<boolean>);
21
+ isDisabled?: boolean | ((menu: {
22
+ x: number;
23
+ y: number;
24
+ }, objects: KritzelBaseObject[]) => boolean | Promise<boolean>);
25
+ }
@@ -0,0 +1,16 @@
1
+ import { KritzelBaseObject } from '../classes/objects/base-object.class';
2
+ import { ContextMenuItem } from './context-menu-item.interface';
3
+ export interface KritzelContextMenuState {
4
+ isVisible: boolean;
5
+ isObjectMenu: boolean;
6
+ items: ContextMenuItem[];
7
+ objects: KritzelBaseObject[];
8
+ position: {
9
+ x: number;
10
+ y: number;
11
+ };
12
+ worldPosition: {
13
+ x: number;
14
+ y: number;
15
+ };
16
+ }
@@ -0,0 +1,7 @@
1
+ export interface KritzelDebugInfo {
2
+ showViewportInfo: boolean;
3
+ showObjectInfo: boolean;
4
+ showSyncProviderInfo: boolean;
5
+ showMigrationInfo: boolean;
6
+ showAssetResolverInfo: boolean;
7
+ }
@@ -0,0 +1,4 @@
1
+ export type KritzelDialogCloseReason = 'backdrop' | 'escape' | 'close-button' | 'programmatic';
2
+ export interface IKritzelDialogCloseEvent {
3
+ reason: KritzelDialogCloseReason;
4
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Type of a Y.Doc managed by Kritzel.
3
+ * - 'workspace': Contains drawable objects for a specific workspace
4
+ * - 'state': Contains application-level state (workspace list, settings)
5
+ */
6
+ export type KritzelDocumentType = 'workspace' | 'state';
@@ -0,0 +1,40 @@
1
+ import { KritzelDynamicObject } from '../classes/objects/dynamic-object.class';
2
+ /**
3
+ * Context passed to a renderer when mounting, updating, or unmounting.
4
+ */
5
+ export interface KritzelDynamicObjectRenderContext {
6
+ /** The dynamic object object being rendered. */
7
+ object: KritzelDynamicObject;
8
+ /** Container element to render into (mount) or receive lifecycle notifications (unmount). */
9
+ container: HTMLElement | null;
10
+ /** Custom data payload for the renderer (e.g., component props, state). */
11
+ data?: unknown;
12
+ }
13
+ /**
14
+ * Renderer implementation for dynamic objects on the canvas.
15
+ * Handles framework-specific mounting, updating, and cleanup.
16
+ */
17
+ export interface KritzelDynamicObjectRenderer {
18
+ /**
19
+ * Called when the dynamic object enters the viewport or is first added to canvas.
20
+ * Renderer is responsible for creating and appending DOM to context.container.
21
+ * @param context - Render context with object, container, and data
22
+ */
23
+ onMount(context: KritzelDynamicObjectRenderContext): void;
24
+ /**
25
+ * Called when object properties (position, size, rotation, etc.) change.
26
+ * Renderer can react to dimension/transform updates or data changes.
27
+ * Optional; default is no-op.
28
+ * @param context - Render context with updated object and data
29
+ * @param changedProperties - Array of property names that changed
30
+ */
31
+ onUpdate?(context: KritzelDynamicObjectRenderContext, changedProperties: string[]): void;
32
+ /**
33
+ * Called when the object leaves the viewport, is deleted, or workspace is unloaded.
34
+ * Renderer must clean up event listeners, timers, framework instances, and remove DOM.
35
+ * May optionally return updated data to capture back into object.rendererData.
36
+ * @param context - Render context with object and container
37
+ * @returns Optional updated data payload to persist
38
+ */
39
+ onUnmount(context: KritzelDynamicObjectRenderContext): unknown;
40
+ }
@@ -0,0 +1,82 @@
1
+ import { KritzelBaseObject } from "../classes/objects/base-object.class";
2
+ import { KritzelObjectMap } from "../classes/structures/object-map.structure";
3
+ import { KritzelBaseTool } from "../classes/tools/base-tool.class";
4
+ import { KritzelWorkspace } from "../classes/core/workspace.class";
5
+ import { KritzelHandleType } from "../enums/handle-type.enum";
6
+ import { ContextMenuItem } from "./context-menu-item.interface";
7
+ import { KritzelDebugInfo } from "./debug-info.interface";
8
+ import { LineHandleType } from "../classes/handlers/line-handle.handler";
9
+ import { SnapCandidate, SnapPreviewCandidate } from "./anchor.interface";
10
+ export interface KritzelEngineState {
11
+ activeWorkspace: KritzelWorkspace | null | undefined;
12
+ activeTool: KritzelBaseTool | null;
13
+ objects: KritzelObjectMap<KritzelBaseObject<Element>> | null;
14
+ snapCandidate?: SnapCandidate | null;
15
+ snapPreviewCandidate?: SnapPreviewCandidate | null;
16
+ resizeHandleType: KritzelHandleType | undefined;
17
+ lineHandleType: LineHandleType | undefined;
18
+ hasViewportChanged: boolean;
19
+ hasObjectsChanged: boolean;
20
+ isReady: boolean;
21
+ isEnabled: boolean;
22
+ isScaling: boolean;
23
+ isPanning: boolean;
24
+ isSelecting: boolean;
25
+ isResizing: boolean;
26
+ isResizeHandleHovered: boolean;
27
+ isResizeHandleSelected: boolean;
28
+ isRotating: boolean;
29
+ isRotationHandleHovered: boolean;
30
+ isRotationHandleSelected: boolean;
31
+ isLineHandleSelected: boolean;
32
+ isLineHandleDragging: boolean;
33
+ isDragging: boolean;
34
+ isDrawing: boolean;
35
+ isErasing: boolean;
36
+ isWriting: boolean;
37
+ isLoading: boolean;
38
+ isCtrlKeyPressed: boolean;
39
+ isContextMenuVisible: boolean;
40
+ contextMenuItems: ContextMenuItem[];
41
+ contextMenuX: number;
42
+ contextMenuY: number;
43
+ contextMenuWorldX: number;
44
+ contextMenuWorldY: number;
45
+ skipContextMenu: boolean;
46
+ debugInfo: KritzelDebugInfo;
47
+ host: HTMLElement | null;
48
+ pointerX: number;
49
+ pointerY: number;
50
+ scale: number;
51
+ scaleMax: number;
52
+ scaleMin: number;
53
+ startX: number;
54
+ startY: number;
55
+ translateX: number;
56
+ translateXMax: number;
57
+ translateXMin: number;
58
+ translateY: number;
59
+ translateYMax: number;
60
+ translateYMin: number;
61
+ viewportWidth: number;
62
+ viewportHeight: number;
63
+ longTouchTimeout: number | null;
64
+ longTouchDelay: number;
65
+ pointers: Map<number, PointerEvent>;
66
+ workspaces: KritzelWorkspace[];
67
+ cursor: {
68
+ icon: string;
69
+ iconActive?: string;
70
+ rotation?: number;
71
+ };
72
+ /** When true, objects are drawn at a fixed visual size regardless of zoom level */
73
+ lockDrawingScale: boolean;
74
+ /** Left boundary of the viewport in world coordinates */
75
+ viewportBoundaryLeft: number;
76
+ /** Right boundary of the viewport in world coordinates */
77
+ viewportBoundaryRight: number;
78
+ /** Top boundary of the viewport in world coordinates */
79
+ viewportBoundaryTop: number;
80
+ /** Bottom boundary of the viewport in world coordinates */
81
+ viewportBoundaryBottom: number;
82
+ }
@@ -0,0 +1,15 @@
1
+ export interface KritzelFontDefinition {
2
+ family: string;
3
+ label?: string;
4
+ cssFontFamily?: string;
5
+ source?: string;
6
+ }
7
+ export type KritzelFontRegistration = string | KritzelFontDefinition;
8
+ export interface KritzelRegisteredFont {
9
+ key: string;
10
+ family: string;
11
+ label: string;
12
+ cssFontFamily: string;
13
+ source?: string;
14
+ }
15
+ export type KritzelFontMap = Record<string, KritzelFontRegistration>;
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Canonical locale identifier type for available locales.
3
+ * Locales are identified by their code (e.g. 'en', 'de', 'fr').
4
+ * The union is open so consumers can register additional locale codes.
5
+ */
6
+ export type LocaleCode = 'en' | 'de' | 'fr' | (string & NonNullable<unknown>);
7
+ /**
8
+ * Typed map of all known user-visible UI term keys to their translated strings.
9
+ *
10
+ * Keys are namespaced with a dotted prefix (e.g. `menu.copy`, `settings.title`)
11
+ * to group related strings. Using a closed interface gives full compile-time
12
+ * safety: typos in term keys are caught by the compiler and editors can
13
+ * autocomplete the available keys.
14
+ */
15
+ export interface KritzelTerms {
16
+ 'menu.copy': string;
17
+ 'menu.cut': string;
18
+ 'menu.paste': string;
19
+ 'menu.selectAll': string;
20
+ 'menu.order': string;
21
+ 'menu.bringToFront': string;
22
+ 'menu.sendToBack': string;
23
+ 'menu.moveUp': string;
24
+ 'menu.moveDown': string;
25
+ 'menu.align': string;
26
+ 'menu.alignLeft': string;
27
+ 'menu.alignCenterHorizontal': string;
28
+ 'menu.alignRight': string;
29
+ 'menu.alignTop': string;
30
+ 'menu.alignCenterVertical': string;
31
+ 'menu.alignBottom': string;
32
+ 'menu.group': string;
33
+ 'menu.ungroup': string;
34
+ 'menu.export': string;
35
+ 'menu.exportAsSvg': string;
36
+ 'menu.exportAsPng': string;
37
+ 'menu.delete': string;
38
+ 'menu.share': string;
39
+ 'menu.import': string;
40
+ 'menu.settings': string;
41
+ 'menu.logout': string;
42
+ 'settings.dialogTitle': string;
43
+ 'settings.categories.general': string;
44
+ 'settings.categories.viewport': string;
45
+ 'settings.categories.shortcuts': string;
46
+ 'settings.categories.developer': string;
47
+ 'settings.categories.about': string;
48
+ 'settings.general.title': string;
49
+ 'settings.general.theme.label': string;
50
+ 'settings.general.theme.description': string;
51
+ 'settings.general.language.label': string;
52
+ 'settings.general.language.description': string;
53
+ 'settings.general.lockDrawingScale.label': string;
54
+ 'settings.general.lockDrawingScale.description': string;
55
+ 'settings.viewport.title': string;
56
+ 'settings.viewport.minZoom.label': string;
57
+ 'settings.viewport.minZoom.description': string;
58
+ 'settings.viewport.maxZoom.label': string;
59
+ 'settings.viewport.maxZoom.description': string;
60
+ 'settings.viewport.boundaryLeft.label': string;
61
+ 'settings.viewport.boundaryLeft.description': string;
62
+ 'settings.viewport.boundaryRight.label': string;
63
+ 'settings.viewport.boundaryRight.description': string;
64
+ 'settings.viewport.boundaryTop.label': string;
65
+ 'settings.viewport.boundaryTop.description': string;
66
+ 'settings.viewport.boundaryBottom.label': string;
67
+ 'settings.viewport.boundaryBottom.description': string;
68
+ 'settings.viewport.boundaryPlaceholder': string;
69
+ 'settings.shortcuts.title': string;
70
+ 'settings.developer.title': string;
71
+ 'settings.developer.showViewportInfo.label': string;
72
+ 'settings.developer.showViewportInfo.description': string;
73
+ 'settings.developer.showObjectInfo.label': string;
74
+ 'settings.developer.showObjectInfo.description': string;
75
+ 'settings.developer.showSyncProviderInfo.label': string;
76
+ 'settings.developer.showSyncProviderInfo.description': string;
77
+ 'settings.developer.showMigrationInfo.label': string;
78
+ 'settings.developer.showMigrationInfo.description': string;
79
+ 'settings.about.title': string;
80
+ 'settings.about.description': string;
81
+ 'export.dialogTitle': string;
82
+ 'export.tabs.viewport': string;
83
+ 'export.tabs.workspace': string;
84
+ 'export.format.label': string;
85
+ 'export.filename.label': string;
86
+ 'export.filename.placeholder': string;
87
+ 'export.exportButton': string;
88
+ 'workspace.sharedTooltip': string;
89
+ 'workspace.rename': string;
90
+ 'workspace.delete': string;
91
+ 'zoom.zoomIn': string;
92
+ 'zoom.zoomOut': string;
93
+ 'utility.undo': string;
94
+ 'utility.redo': string;
95
+ 'utility.delete': string;
96
+ 'share.dialogTitle': string;
97
+ 'share.linkSharing.label': string;
98
+ 'share.linkSharing.enabledDescription': string;
99
+ 'share.linkSharing.disabledDescription': string;
100
+ 'share.linkSharing.toggleLabel': string;
101
+ 'share.copyLink.title': string;
102
+ 'share.copyLink.copied': string;
103
+ 'login.dialogTitle': string;
104
+ 'currentUser.dialogTitle': string;
105
+ 'backToContent.label': string;
106
+ 'toolConfig.collapse': string;
107
+ 'toolConfig.expand': string;
108
+ 'moreMenu.ariaLabel': string;
109
+ 'editor.loading': string;
110
+ 'watermark.poweredBy': string;
111
+ }
112
+ /**
113
+ * A localization key. Restricted to the known {@link KritzelTerms} keys so that
114
+ * lookups are validated at compile time.
115
+ */
116
+ export type KritzelTermKey = keyof KritzelTerms;
117
+ /**
118
+ * Definition of a single locale.
119
+ *
120
+ * `terms` is a `Partial<KritzelTerms>`, so a locale may override only a subset
121
+ * of the available terms. Any missing term is resolved through the fallback
122
+ * chain (see {@link KritzelLocalizationManager}). This mirrors the theming API,
123
+ * allowing consumers to spread a built-in locale and override specific keys:
124
+ *
125
+ * ```ts
126
+ * const myDe: KritzelLocale = {
127
+ * code: 'de',
128
+ * terms: { ...DE_LOCALE.terms, 'menu.copy': 'Duplizieren' },
129
+ * };
130
+ * ```
131
+ */
132
+ export interface KritzelLocale {
133
+ /** Canonical locale code, e.g. 'en', 'de', 'fr'. */
134
+ code: LocaleCode;
135
+ /** Optional human-readable display name shown in the language selector, e.g. 'Deutsch'. */
136
+ label?: string;
137
+ /** Partial map of term keys to translated strings. Missing keys fall back. */
138
+ terms: Partial<KritzelTerms>;
139
+ }
140
+ /**
141
+ * Values used to interpolate `{placeholder}` tokens inside a translated term.
142
+ */
143
+ export type KritzelTermVars = Record<string, string | number>;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Represents an authentication provider button displayed in the login dialog.
3
+ */
4
+ export interface KritzelLoginProvider {
5
+ /** Machine identifier emitted in events (e.g. 'google', 'apple', 'facebook') */
6
+ name: string;
7
+ /** Button label text (e.g. 'Continue with Google') */
8
+ label: string;
9
+ /** Optional icon name registered in KritzelIconRegistry via customSvgIcons */
10
+ icon?: string;
11
+ }
12
+ /**
13
+ * Configuration for the integrated login dialog.
14
+ * When provided to kritzel-editor, a "Sign in" button is rendered that opens
15
+ * a dialog with the configured authentication provider buttons.
16
+ */
17
+ export interface KritzelLoginConfig {
18
+ /** Array of authentication provider buttons to render */
19
+ providers: KritzelLoginProvider[];
20
+ /** Dialog title (defaults to 'Sign in') */
21
+ title?: string;
22
+ /** Optional subtitle text displayed below the title */
23
+ subtitle?: string;
24
+ }
@@ -0,0 +1,14 @@
1
+ export interface IKritzelMasterDetailItem {
2
+ /** Unique identifier for the item */
3
+ id: string;
4
+ /** Display label for the menu item */
5
+ label: string;
6
+ /** Optional icon name (for kritzel-icon) */
7
+ icon?: string;
8
+ /** Whether the item is disabled */
9
+ disabled?: boolean;
10
+ }
11
+ export interface IKritzelMasterDetailSelectEvent {
12
+ /** The selected item */
13
+ item: IKritzelMasterDetailItem;
14
+ }
@@ -0,0 +1,27 @@
1
+ export interface IKritzelMenuItem<T = any> {
2
+ id: string;
3
+ label: string;
4
+ icon?: string;
5
+ iconTooltip?: string;
6
+ color?: string;
7
+ value?: T;
8
+ children?: IKritzelMenuItem[];
9
+ isSelectable?: boolean;
10
+ isSelected?: boolean;
11
+ isEditing?: boolean;
12
+ isDisabled?: boolean;
13
+ isVisible?: boolean | (() => boolean | Promise<boolean>);
14
+ isChildMenuOpen?: boolean;
15
+ isNewItem?: boolean;
16
+ childMenuAnchor?: HTMLElement;
17
+ unchangedState?: Partial<IKritzelMenuItem>;
18
+ action?: (item: IKritzelMenuItem, parent: IKritzelMenuItem) => void;
19
+ }
20
+ export interface IKritzelMenuItemSelectEvent {
21
+ item: IKritzelMenuItem;
22
+ parent: IKritzelMenuItem;
23
+ }
24
+ export interface IKritzelMenuItemToggleChildMenuEvent {
25
+ item: IKritzelMenuItem;
26
+ childMenuAnchor: HTMLElement;
27
+ }
@@ -0,0 +1,16 @@
1
+ import * as Y from 'yjs';
2
+ /**
3
+ * Describes a single schema migration step for a Y.Doc.
4
+ * Migrations transform the data stored in Yjs maps from one schema version to another.
5
+ *
6
+ * Each migration must be idempotent — in a collaborative environment, multiple clients
7
+ * may execute the same migration concurrently due to Yjs CRDT merging.
8
+ */
9
+ export interface KritzelMigration {
10
+ /** The schema version this migration upgrades from. */
11
+ fromVersion: number;
12
+ /** The schema version this migration upgrades to. Must equal fromVersion + 1. */
13
+ toVersion: number;
14
+ /** Mutates the Yjs maps in-place to transform data from fromVersion to toVersion. */
15
+ migrate(ydoc: Y.Doc, maps: Record<string, Y.Map<any>>): void;
16
+ }
@@ -0,0 +1,10 @@
1
+ export interface KritzelNotification {
2
+ /** Unique identifier for the notification */
3
+ id: string;
4
+ /** Type of the notification (e.g., 'info', 'warning', 'error') */
5
+ type: 'info' | 'warning' | 'error';
6
+ /** Message content of the notification */
7
+ message: string;
8
+ /** Optional timestamp for when the notification was created */
9
+ timestamp?: Date;
10
+ }
@@ -0,0 +1,31 @@
1
+ import { KritzelBaseObject } from '../classes/objects/base-object.class';
2
+ /**
3
+ * Emitted when one or more objects are added to the canvas.
4
+ */
5
+ export interface ObjectsAddedEvent {
6
+ objects: KritzelBaseObject[];
7
+ }
8
+ /**
9
+ * Emitted when one or more objects are removed from the canvas.
10
+ * Contains snapshots of the objects before removal.
11
+ */
12
+ export interface ObjectsRemovedEvent {
13
+ objects: KritzelBaseObject[];
14
+ }
15
+ /**
16
+ * Emitted when one or more objects are updated on the canvas.
17
+ * Each entry contains the updated object and the list of changed property keys.
18
+ */
19
+ export interface ObjectsUpdatedEvent {
20
+ objects: {
21
+ object: KritzelBaseObject;
22
+ changedProperties: string[];
23
+ }[];
24
+ }
25
+ /**
26
+ * Payload emitted when the set of objects visible in the current viewport changes
27
+ * (e.g., after a pan or zoom).
28
+ * Kept as a named alias so wrapper proxy generators don't try to import
29
+ * the DOM global `Element` from `@kritzel/engine` (which causes TS2749).
30
+ */
31
+ export type ObjectsInViewportChangeEvent = KritzelBaseObject<Element>[];
@@ -0,0 +1,20 @@
1
+ import { KritzelBaseObject } from '../classes/objects/base-object.class';
2
+ export type KritzelObjectExportFormat = 'png' | 'svg';
3
+ /**
4
+ * Runtime context passed to object-owned export methods.
5
+ * The engine provides these callbacks so object classes can request
6
+ * serialization/rasterization without owning global dependencies.
7
+ */
8
+ export interface KritzelObjectExportContext {
9
+ getObjectAsSvgDataUrl(object: KritzelBaseObject, options?: {
10
+ rasterSafeForCanvas?: boolean;
11
+ }): Promise<string | null>;
12
+ getObjectAsPngDataUrl(object: KritzelBaseObject): Promise<string | null>;
13
+ }
14
+ /**
15
+ * Capability contract for objects that can export themselves.
16
+ */
17
+ export interface KritzelExportable {
18
+ getSupportedExportFormats(): KritzelObjectExportFormat[];
19
+ exportAs(format: KritzelObjectExportFormat, context: KritzelObjectExportContext): Promise<string | null>;
20
+ }
@@ -0,0 +1,53 @@
1
+ import { KritzelBaseObject } from '../classes/objects/base-object.class';
2
+ import { KritzelBoundingBox } from './bounding-box.interface';
3
+ import { KritzelPolygon } from './polygon.interface';
4
+ import { ThemeAwareColor } from '../constants/color-palette.constants';
5
+ export interface KritzelObject<T = Element> {
6
+ _elementRef: T;
7
+ id: string;
8
+ workspaceId: string;
9
+ x: number;
10
+ y: number;
11
+ translateX: number;
12
+ translateY: number;
13
+ height: number;
14
+ width: number;
15
+ backgroundColor?: ThemeAwareColor;
16
+ borderColor?: ThemeAwareColor;
17
+ borderWidth: number;
18
+ opacity: number;
19
+ scale?: number;
20
+ resizing: boolean;
21
+ rotation: number;
22
+ markedForRemoval: boolean;
23
+ zIndex: number;
24
+ userId?: string;
25
+ isVisible: boolean;
26
+ isSelected: boolean;
27
+ isHovered: boolean;
28
+ isMounted: boolean;
29
+ isEditable: boolean;
30
+ isInteractive: boolean;
31
+ set elementRef(element: T);
32
+ get elementRef(): T;
33
+ get boundingBox(): KritzelBoundingBox;
34
+ get totalWidth(): number;
35
+ get totalHeight(): number;
36
+ get rotationDegrees(): number;
37
+ get centerX(): number;
38
+ get centerY(): number;
39
+ mount(element: T): void;
40
+ generateId(): string;
41
+ isInViewport(viewport: KritzelBoundingBox, scale: number): boolean;
42
+ centerInViewport(): void;
43
+ update(): void;
44
+ move(startX: number, startY: number, endX: number, endY: number): void;
45
+ resize(x: number, y: number, width: number, height: number): void;
46
+ rotate(value: number): void;
47
+ copy(): KritzelBaseObject<Element>;
48
+ isClass<T extends KritzelBaseObject>(this: T, type: string): this is T;
49
+ edit(event?: PointerEvent): void;
50
+ hitTest(x: number, y: number): boolean;
51
+ hitTestPolygon(polygon: KritzelPolygon): boolean;
52
+ updatePosition(x: number, y: number): void;
53
+ }
@@ -0,0 +1,10 @@
1
+ import { KritzelCore } from '../classes/core/core.class';
2
+ import { PasteIntent } from '../classes/managers/clipboard.types';
3
+ export interface KritzelPasteIntentProviderContext {
4
+ core: KritzelCore;
5
+ event?: ClipboardEvent;
6
+ }
7
+ export interface KritzelPasteIntentProvider {
8
+ canHandle(context: KritzelPasteIntentProviderContext): boolean;
9
+ getPasteIntent(context: KritzelPasteIntentProviderContext): Promise<PasteIntent>;
10
+ }