kritzel-stencil 0.0.126 → 0.0.128

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 (451) hide show
  1. package/dist/cjs/app-globals-V2Kpy_OQ.js +8 -0
  2. package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -0
  3. package/dist/cjs/index-C7Read21.js +2638 -0
  4. package/dist/cjs/index-C7Read21.js.map +1 -0
  5. package/dist/cjs/index-CUSIflVf.js +1597 -0
  6. package/dist/cjs/index-CUSIflVf.js.map +1 -0
  7. package/dist/cjs/index.cjs.js +17 -0
  8. package/dist/cjs/index.cjs.js.map +1 -0
  9. package/dist/cjs/kritzel-brush-style_22.cjs.entry.js +3133 -0
  10. package/dist/cjs/loader.cjs.js +14 -0
  11. package/dist/cjs/loader.cjs.js.map +1 -0
  12. package/dist/cjs/stencil.cjs.js +26 -0
  13. package/dist/cjs/stencil.cjs.js.map +1 -0
  14. package/dist/collection/classes/commands/add-object.command.js +17 -0
  15. package/dist/collection/classes/commands/add-object.command.js.map +1 -0
  16. package/dist/collection/classes/commands/add-selection-group.command.js +20 -0
  17. package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -0
  18. package/dist/collection/classes/commands/base.command.js +15 -0
  19. package/dist/collection/classes/commands/base.command.js.map +1 -0
  20. package/dist/collection/classes/commands/batch.command.js +14 -0
  21. package/dist/collection/classes/commands/batch.command.js.map +1 -0
  22. package/dist/collection/classes/commands/move-selection-group.command.js +25 -0
  23. package/dist/collection/classes/commands/move-selection-group.command.js.map +1 -0
  24. package/dist/collection/classes/commands/remove-object.command.js +20 -0
  25. package/dist/collection/classes/commands/remove-object.command.js.map +1 -0
  26. package/dist/collection/classes/commands/remove-selection-group.command.js +18 -0
  27. package/dist/collection/classes/commands/remove-selection-group.command.js.map +1 -0
  28. package/dist/collection/classes/commands/resize-selection-group.command.js +18 -0
  29. package/dist/collection/classes/commands/resize-selection-group.command.js.map +1 -0
  30. package/dist/collection/classes/commands/rotate-selection-group.command.js +24 -0
  31. package/dist/collection/classes/commands/rotate-selection-group.command.js.map +1 -0
  32. package/dist/collection/classes/commands/update-object.command.js +32 -0
  33. package/dist/collection/classes/commands/update-object.command.js.map +1 -0
  34. package/dist/collection/classes/commands/update-viewport.command.js +23 -0
  35. package/dist/collection/classes/commands/update-viewport.command.js.map +1 -0
  36. package/dist/collection/classes/database.class.js +227 -0
  37. package/dist/collection/classes/database.class.js.map +1 -0
  38. package/dist/collection/classes/handlers/base.handler.js +7 -0
  39. package/dist/collection/classes/handlers/base.handler.js.map +1 -0
  40. package/dist/collection/classes/handlers/context-menu.handler.js +47 -0
  41. package/dist/collection/classes/handlers/context-menu.handler.js.map +1 -0
  42. package/dist/collection/classes/handlers/hover.handler.js +19 -0
  43. package/dist/collection/classes/handlers/hover.handler.js.map +1 -0
  44. package/dist/collection/classes/handlers/key.handler.js +80 -0
  45. package/dist/collection/classes/handlers/key.handler.js.map +1 -0
  46. package/dist/collection/classes/handlers/move.handler.js +100 -0
  47. package/dist/collection/classes/handlers/move.handler.js.map +1 -0
  48. package/dist/collection/classes/handlers/resize.handler.js +158 -0
  49. package/dist/collection/classes/handlers/resize.handler.js.map +1 -0
  50. package/dist/collection/classes/handlers/rotation.handler.js +118 -0
  51. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -0
  52. package/dist/collection/classes/handlers/selection.handler.js +200 -0
  53. package/dist/collection/classes/handlers/selection.handler.js.map +1 -0
  54. package/dist/collection/classes/history.class.js +84 -0
  55. package/dist/collection/classes/history.class.js.map +1 -0
  56. package/dist/collection/classes/objects/base-object.class.js +205 -0
  57. package/dist/collection/classes/objects/base-object.class.js.map +1 -0
  58. package/dist/collection/classes/objects/custom-element.class.js +53 -0
  59. package/dist/collection/classes/objects/custom-element.class.js.map +1 -0
  60. package/dist/collection/classes/objects/image.class.js +54 -0
  61. package/dist/collection/classes/objects/image.class.js.map +1 -0
  62. package/dist/collection/classes/objects/path.class.js +269 -0
  63. package/dist/collection/classes/objects/path.class.js.map +1 -0
  64. package/dist/collection/classes/objects/selection-box.class.js +23 -0
  65. package/dist/collection/classes/objects/selection-box.class.js.map +1 -0
  66. package/dist/collection/classes/objects/selection-group.class.js +158 -0
  67. package/dist/collection/classes/objects/selection-group.class.js.map +1 -0
  68. package/dist/collection/classes/objects/text.class.js +144 -0
  69. package/dist/collection/classes/objects/text.class.js.map +1 -0
  70. package/dist/{stencil/icon-registry.class-Bw5YkOTi.js → collection/classes/registries/icon-registry.class.js} +7 -7
  71. package/dist/collection/classes/registries/icon-registry.class.js.map +1 -0
  72. package/dist/collection/classes/registries/tool.registry.js +18 -0
  73. package/dist/collection/classes/registries/tool.registry.js.map +1 -0
  74. package/dist/collection/classes/reviver.class.js +66 -0
  75. package/dist/collection/classes/reviver.class.js.map +1 -0
  76. package/dist/collection/classes/store.class.js +410 -0
  77. package/dist/collection/classes/store.class.js.map +1 -0
  78. package/dist/collection/classes/structures/circular-buffer.structure.js +46 -0
  79. package/dist/collection/classes/structures/circular-buffer.structure.js.map +1 -0
  80. package/dist/collection/classes/structures/octree.structure.js +115 -0
  81. package/dist/collection/classes/structures/octree.structure.js.map +1 -0
  82. package/dist/collection/classes/tools/base-tool.class.js +31 -0
  83. package/dist/collection/classes/tools/base-tool.class.js.map +1 -0
  84. package/dist/collection/classes/tools/brush-tool.class.js +116 -0
  85. package/dist/collection/classes/tools/brush-tool.class.js.map +1 -0
  86. package/dist/collection/classes/tools/eraser-tool.class.js +86 -0
  87. package/dist/collection/classes/tools/eraser-tool.class.js.map +1 -0
  88. package/dist/collection/classes/tools/image-tool.class.js +91 -0
  89. package/dist/collection/classes/tools/image-tool.class.js.map +1 -0
  90. package/dist/collection/classes/tools/selection-tool.class.js +156 -0
  91. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -0
  92. package/dist/collection/classes/tools/text-tool.class.js +116 -0
  93. package/dist/collection/classes/tools/text-tool.class.js.map +1 -0
  94. package/dist/collection/classes/viewport.class.js +152 -0
  95. package/dist/collection/classes/viewport.class.js.map +1 -0
  96. package/dist/collection/classes/workspace.class.js +10 -0
  97. package/dist/collection/classes/workspace.class.js.map +1 -0
  98. package/dist/collection/collection-manifest.json +33 -0
  99. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.css +10 -0
  100. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +154 -0
  101. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js.map +1 -0
  102. package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +29 -0
  103. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +670 -0
  104. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -0
  105. package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +60 -0
  106. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +1483 -0
  107. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -0
  108. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.css +44 -0
  109. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js +100 -0
  110. package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js.map +1 -0
  111. package/dist/collection/components/shared/kritzel-color/kritzel-color.css +21 -0
  112. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +108 -0
  113. package/dist/collection/components/shared/kritzel-color/kritzel-color.js.map +1 -0
  114. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +46 -0
  115. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +147 -0
  116. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js.map +1 -0
  117. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +53 -0
  118. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js +215 -0
  119. package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js.map +1 -0
  120. package/dist/collection/components/shared/kritzel-font/kritzel-font.css +10 -0
  121. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +92 -0
  122. package/dist/collection/components/shared/kritzel-font/kritzel-font.js.map +1 -0
  123. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.css +48 -0
  124. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +115 -0
  125. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js.map +1 -0
  126. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +30 -0
  127. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +112 -0
  128. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js.map +1 -0
  129. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.css +17 -0
  130. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js +94 -0
  131. package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js.map +1 -0
  132. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +166 -0
  133. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +272 -0
  134. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -0
  135. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +218 -0
  136. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -0
  137. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +74 -0
  138. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +324 -0
  139. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -0
  140. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +28 -0
  141. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +91 -0
  142. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js.map +1 -0
  143. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.css +17 -0
  144. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +181 -0
  145. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js.map +1 -0
  146. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +55 -0
  147. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +141 -0
  148. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -0
  149. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +19 -0
  150. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +136 -0
  151. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js.map +1 -0
  152. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.css +19 -0
  153. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +116 -0
  154. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js.map +1 -0
  155. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +124 -0
  156. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +280 -0
  157. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -0
  158. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +33 -0
  159. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +79 -0
  160. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js.map +1 -0
  161. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.css +5 -0
  162. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +209 -0
  163. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -0
  164. package/dist/{stencil/default-text-tool.config-DvOZmpuR.js → collection/configs/default-brush-tool.config.js} +2 -38
  165. package/dist/collection/configs/default-brush-tool.config.js.map +1 -0
  166. package/dist/collection/configs/default-engine-state.js +61 -0
  167. package/dist/collection/configs/default-engine-state.js.map +1 -0
  168. package/dist/collection/configs/default-text-tool.config.js +32 -0
  169. package/dist/collection/configs/default-text-tool.config.js.map +1 -0
  170. package/dist/collection/constants/engine.constants.js +3 -0
  171. package/dist/collection/constants/engine.constants.js.map +1 -0
  172. package/dist/collection/enums/event-button.enum.js +7 -0
  173. package/dist/collection/enums/event-button.enum.js.map +1 -0
  174. package/dist/collection/enums/handle-type.enum.js +8 -0
  175. package/dist/collection/enums/handle-type.enum.js.map +1 -0
  176. package/dist/collection/helpers/class.helper.js +6 -0
  177. package/dist/collection/helpers/class.helper.js.map +1 -0
  178. package/dist/collection/helpers/devices.helper.js +6 -0
  179. package/dist/collection/helpers/devices.helper.js.map +1 -0
  180. package/dist/collection/helpers/event.helper.js +58 -0
  181. package/dist/collection/helpers/event.helper.js.map +1 -0
  182. package/dist/collection/helpers/geometry.helper.js +53 -0
  183. package/dist/collection/helpers/geometry.helper.js.map +1 -0
  184. package/dist/collection/helpers/html.helper.js +36 -0
  185. package/dist/collection/helpers/html.helper.js.map +1 -0
  186. package/dist/collection/helpers/keyboard.helper.js +31 -0
  187. package/dist/collection/helpers/keyboard.helper.js.map +1 -0
  188. package/dist/collection/helpers/math.helper.js +6 -0
  189. package/dist/collection/helpers/math.helper.js.map +1 -0
  190. package/dist/collection/helpers/object.helper.js +38 -0
  191. package/dist/collection/helpers/object.helper.js.map +1 -0
  192. package/dist/collection/index.js +21 -0
  193. package/dist/collection/index.js.map +1 -0
  194. package/dist/collection/interfaces/bounding-box.interface.js +2 -0
  195. package/dist/collection/interfaces/bounding-box.interface.js.map +1 -0
  196. package/dist/collection/interfaces/command.interface.js +2 -0
  197. package/dist/collection/interfaces/command.interface.js.map +1 -0
  198. package/dist/collection/interfaces/context-menu-item.interface.js +2 -0
  199. package/dist/collection/interfaces/context-menu-item.interface.js.map +1 -0
  200. package/dist/collection/interfaces/debug-info.interface.js +2 -0
  201. package/dist/collection/interfaces/debug-info.interface.js.map +1 -0
  202. package/dist/collection/interfaces/engine-state.interface.js +2 -0
  203. package/dist/collection/interfaces/engine-state.interface.js.map +1 -0
  204. package/dist/collection/interfaces/menu-item.interface.js +2 -0
  205. package/dist/collection/interfaces/menu-item.interface.js.map +1 -0
  206. package/dist/collection/interfaces/object.interface.js +2 -0
  207. package/dist/collection/interfaces/object.interface.js.map +1 -0
  208. package/dist/collection/interfaces/path-options.interface.js +2 -0
  209. package/dist/collection/interfaces/path-options.interface.js.map +1 -0
  210. package/dist/collection/interfaces/point.interface.js +2 -0
  211. package/dist/collection/interfaces/point.interface.js.map +1 -0
  212. package/dist/collection/interfaces/polygon.interface.js +2 -0
  213. package/dist/collection/interfaces/polygon.interface.js.map +1 -0
  214. package/dist/collection/interfaces/selection-state.interface.js +2 -0
  215. package/dist/collection/interfaces/selection-state.interface.js.map +1 -0
  216. package/dist/collection/interfaces/serializable.interface.js +2 -0
  217. package/dist/collection/interfaces/serializable.interface.js.map +1 -0
  218. package/dist/collection/interfaces/tool.interface.js +2 -0
  219. package/dist/collection/interfaces/tool.interface.js.map +1 -0
  220. package/dist/collection/interfaces/toolbar-control.interface.js +2 -0
  221. package/dist/collection/interfaces/toolbar-control.interface.js.map +1 -0
  222. package/dist/collection/types/state.types.js +2 -0
  223. package/dist/collection/types/state.types.js.map +1 -0
  224. package/dist/components/index.d.ts +8 -0
  225. package/dist/components/index.js +28 -0
  226. package/dist/components/index.js.map +1 -0
  227. package/dist/components/kritzel-brush-style.js +9 -0
  228. package/dist/components/kritzel-brush-style.js.map +1 -0
  229. package/dist/components/kritzel-color-palette.js +9 -0
  230. package/dist/components/kritzel-color-palette.js.map +1 -0
  231. package/dist/components/kritzel-color.js +9 -0
  232. package/dist/components/kritzel-color.js.map +1 -0
  233. package/dist/components/kritzel-context-menu.js +9 -0
  234. package/dist/components/kritzel-context-menu.js.map +1 -0
  235. package/dist/components/kritzel-control-brush-config.js +9 -0
  236. package/dist/components/kritzel-control-brush-config.js.map +1 -0
  237. package/dist/components/kritzel-control-text-config.js +9 -0
  238. package/dist/components/kritzel-control-text-config.js.map +1 -0
  239. package/dist/components/kritzel-controls.js +9 -0
  240. package/dist/components/kritzel-controls.js.map +1 -0
  241. package/dist/components/kritzel-cursor-trail.js +9 -0
  242. package/dist/components/kritzel-cursor-trail.js.map +1 -0
  243. package/dist/components/kritzel-dropdown.js +9 -0
  244. package/dist/components/kritzel-dropdown.js.map +1 -0
  245. package/dist/components/kritzel-editor.js +439 -0
  246. package/dist/components/kritzel-editor.js.map +1 -0
  247. package/dist/components/kritzel-engine.js +9 -0
  248. package/dist/components/kritzel-engine.js.map +1 -0
  249. package/dist/components/kritzel-font-family.js +9 -0
  250. package/dist/components/kritzel-font-family.js.map +1 -0
  251. package/dist/components/kritzel-font-size.js +9 -0
  252. package/dist/components/kritzel-font-size.js.map +1 -0
  253. package/dist/components/kritzel-font.js +9 -0
  254. package/dist/components/kritzel-font.js.map +1 -0
  255. package/dist/components/kritzel-icon.js +9 -0
  256. package/dist/components/kritzel-icon.js.map +1 -0
  257. package/dist/components/kritzel-menu.d.ts +11 -0
  258. package/dist/components/kritzel-menu.js +9 -0
  259. package/dist/components/kritzel-menu.js.map +1 -0
  260. package/dist/components/kritzel-portal.d.ts +11 -0
  261. package/dist/components/kritzel-portal.js +9 -0
  262. package/dist/components/kritzel-portal.js.map +1 -0
  263. package/dist/components/kritzel-split-button.d.ts +11 -0
  264. package/dist/components/kritzel-split-button.js +9 -0
  265. package/dist/components/kritzel-split-button.js.map +1 -0
  266. package/dist/components/kritzel-stroke-size.js +9 -0
  267. package/dist/components/kritzel-stroke-size.js.map +1 -0
  268. package/dist/components/kritzel-tooltip.js +9 -0
  269. package/dist/components/kritzel-tooltip.js.map +1 -0
  270. package/dist/components/kritzel-utility-panel.js +9 -0
  271. package/dist/components/kritzel-utility-panel.js.map +1 -0
  272. package/dist/components/kritzel-workspace-manager.d.ts +11 -0
  273. package/dist/components/kritzel-workspace-manager.js +9 -0
  274. package/dist/components/kritzel-workspace-manager.js.map +1 -0
  275. package/dist/{stencil/kritzel-color.entry.js → components/p-5CJxFNEE.js} +31 -11
  276. package/dist/components/p-5CJxFNEE.js.map +1 -0
  277. package/dist/{stencil/brush-tool.class-D1U3x9_Y.js → components/p-B7VrEdgP.js} +77 -110
  278. package/dist/components/p-B7VrEdgP.js.map +1 -0
  279. package/dist/{stencil/kritzel-color-palette.entry.js → components/p-BAPUTr3K.js} +40 -12
  280. package/dist/components/p-BAPUTr3K.js.map +1 -0
  281. package/dist/{stencil/kritzel-controls.entry.js → components/p-BB22cVkU.js} +135 -27
  282. package/dist/components/p-BB22cVkU.js.map +1 -0
  283. package/dist/components/p-BLmFBe2a.js +96 -0
  284. package/dist/components/p-BLmFBe2a.js.map +1 -0
  285. package/dist/components/p-BU2q3PRS.js +84 -0
  286. package/dist/components/p-BU2q3PRS.js.map +1 -0
  287. package/dist/components/p-BZ-j_4CK.js +46 -0
  288. package/dist/components/p-BZ-j_4CK.js.map +1 -0
  289. package/dist/components/p-BaKb8ZLg.js +104 -0
  290. package/dist/components/p-BaKb8ZLg.js.map +1 -0
  291. package/dist/components/p-Bb6od8He.js +42 -0
  292. package/dist/components/p-Bb6od8He.js.map +1 -0
  293. package/dist/components/p-BcQTDgzV.js +56 -0
  294. package/dist/components/p-BcQTDgzV.js.map +1 -0
  295. package/dist/components/p-BeVv4o5c.js +14 -0
  296. package/dist/components/p-BeVv4o5c.js.map +1 -0
  297. package/dist/components/p-BmJbJwkH.js +167 -0
  298. package/dist/components/p-BmJbJwkH.js.map +1 -0
  299. package/dist/components/p-BqrTPNyu.js +1330 -0
  300. package/dist/components/p-BqrTPNyu.js.map +1 -0
  301. package/dist/{stencil/kritzel-dropdown.entry.js → components/p-BvlGgLAQ.js} +39 -11
  302. package/dist/components/p-BvlGgLAQ.js.map +1 -0
  303. package/dist/components/p-BzSz74Ci.js +56 -0
  304. package/dist/components/p-BzSz74Ci.js.map +1 -0
  305. package/dist/components/p-D-zg05gA.js +3148 -0
  306. package/dist/components/p-D-zg05gA.js.map +1 -0
  307. package/dist/{stencil/event-button.enum-D8W6LE-c.js → components/p-D8W6LE-c.js} +2 -2
  308. package/dist/components/p-D8W6LE-c.js.map +1 -0
  309. package/dist/components/p-DV4ERZv5.js +112 -0
  310. package/dist/components/p-DV4ERZv5.js.map +1 -0
  311. package/dist/{stencil/kritzel-cursor-trail.entry.js → components/p-DtmZW6eP.js} +32 -11
  312. package/dist/components/p-DtmZW6eP.js.map +1 -0
  313. package/dist/components/p-V4ui5aWj.js +63 -0
  314. package/dist/components/p-V4ui5aWj.js.map +1 -0
  315. package/dist/{stencil/kritzel-font-family.entry.js → components/p-_ntxNi8v.js} +37 -11
  316. package/dist/components/p-_ntxNi8v.js.map +1 -0
  317. package/dist/components/p-a7KmQzo4.js +113 -0
  318. package/dist/components/p-a7KmQzo4.js.map +1 -0
  319. package/dist/components/p-hSuNJiIq.js +152 -0
  320. package/dist/components/p-hSuNJiIq.js.map +1 -0
  321. package/dist/{stencil/kritzel-tooltip.entry.js → components/p-jG1e48OE.js} +39 -14
  322. package/dist/components/p-jG1e48OE.js.map +1 -0
  323. package/dist/components/p-rQeWFfPG.js +54 -0
  324. package/dist/components/p-rQeWFfPG.js.map +1 -0
  325. package/dist/components/p-sQmW5NRu.js +156 -0
  326. package/dist/components/p-sQmW5NRu.js.map +1 -0
  327. package/dist/esm/app-globals-DQuL1Twl.js +6 -0
  328. package/dist/esm/app-globals-DQuL1Twl.js.map +1 -0
  329. package/dist/esm/index-J4NpPimy.js +2611 -0
  330. package/dist/esm/index-J4NpPimy.js.map +1 -0
  331. package/dist/esm/index-NiIEUDzj.js +1570 -0
  332. package/dist/esm/index-NiIEUDzj.js.map +1 -0
  333. package/dist/esm/index.js +2 -0
  334. package/dist/esm/index.js.map +1 -0
  335. package/dist/esm/kritzel-brush-style_22.entry.js +3110 -0
  336. package/dist/esm/loader.js +12 -0
  337. package/dist/esm/loader.js.map +1 -0
  338. package/dist/esm/stencil.js +22 -0
  339. package/dist/esm/stencil.js.map +1 -0
  340. package/dist/index.cjs.js +1 -0
  341. package/dist/index.js +1 -0
  342. package/dist/stencil/index.esm.js +1 -16
  343. package/dist/stencil/index.esm.js.map +1 -1
  344. package/dist/stencil/loader.esm.js.map +1 -1
  345. package/dist/stencil/p-4a0009e7.entry.js +2 -0
  346. package/dist/stencil/p-4a0009e7.entry.js.map +1 -0
  347. package/dist/stencil/p-DQuL1Twl.js +2 -0
  348. package/dist/stencil/p-DQuL1Twl.js.map +1 -0
  349. package/dist/stencil/p-J4NpPimy.js +2 -0
  350. package/dist/stencil/p-J4NpPimy.js.map +1 -0
  351. package/dist/stencil/p-NiIEUDzj.js +3 -0
  352. package/dist/stencil/p-NiIEUDzj.js.map +1 -0
  353. package/dist/stencil/stencil.esm.js +1 -49
  354. package/dist/stencil/stencil.esm.js.map +1 -1
  355. package/dist/types/classes/commands/add-object.command.d.ts +1 -1
  356. package/dist/types/classes/commands/add-selection-group.command.d.ts +1 -1
  357. package/dist/types/classes/commands/base.command.d.ts +2 -2
  358. package/dist/types/classes/commands/batch.command.d.ts +1 -1
  359. package/dist/types/classes/commands/move-selection-group.command.d.ts +1 -1
  360. package/dist/types/classes/commands/remove-object.command.d.ts +1 -1
  361. package/dist/types/classes/commands/remove-selection-group.command.d.ts +1 -1
  362. package/dist/types/classes/commands/resize-selection-group.command.d.ts +1 -1
  363. package/dist/types/classes/commands/rotate-selection-group.command.d.ts +1 -1
  364. package/dist/types/classes/commands/update-object.command.d.ts +1 -1
  365. package/dist/types/classes/commands/update-viewport.command.d.ts +1 -1
  366. package/dist/types/classes/database.class.d.ts +28 -0
  367. package/dist/types/classes/history.class.d.ts +1 -0
  368. package/dist/types/classes/objects/base-object.class.d.ts +2 -0
  369. package/dist/types/classes/objects/path.class.d.ts +1 -0
  370. package/dist/types/classes/objects/text.class.d.ts +1 -1
  371. package/dist/types/classes/store.class.d.ts +19 -2
  372. package/dist/types/classes/structures/octree.structure.d.ts +1 -0
  373. package/dist/types/classes/workspace.class.d.ts +16 -0
  374. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +6 -1
  375. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +12 -2
  376. package/dist/types/components/shared/kritzel-menu/kritzel-menu.d.ts +24 -0
  377. package/dist/types/components/shared/kritzel-portal/kritzel-portal.d.ts +24 -0
  378. package/dist/types/components/shared/kritzel-split-button/kritzel-split-button.d.ts +24 -0
  379. package/dist/types/components/ui/kritzel-context-menu/kritzel-context-menu.d.ts +3 -4
  380. package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +2 -1
  381. package/dist/types/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.d.ts +25 -0
  382. package/dist/types/components.d.ts +250 -2
  383. package/dist/types/helpers/html.helper.d.ts +3 -1
  384. package/dist/types/interfaces/command.interface.d.ts +1 -1
  385. package/dist/types/interfaces/debug-info.interface.d.ts +1 -0
  386. package/dist/types/interfaces/engine-state.interface.d.ts +3 -0
  387. package/dist/types/interfaces/menu-item.interface.d.ts +9 -0
  388. package/dist/types/interfaces/object.interface.d.ts +2 -0
  389. package/dist/types/stencil-public-runtime.d.ts +21 -0
  390. package/package.json +63 -62
  391. package/dist/stencil/brush-tool.class-D1U3x9_Y.js.map +0 -1
  392. package/dist/stencil/default-text-tool.config-DvOZmpuR.js.map +0 -1
  393. package/dist/stencil/engine.constants-DsjjAmnl.js +0 -7
  394. package/dist/stencil/engine.constants-DsjjAmnl.js.map +0 -1
  395. package/dist/stencil/event-button.enum-D8W6LE-c.js.map +0 -1
  396. package/dist/stencil/icon-registry.class-Bw5YkOTi.js.map +0 -1
  397. package/dist/stencil/image-tool.class-uKAmXFSl.js +0 -1341
  398. package/dist/stencil/image-tool.class-uKAmXFSl.js.map +0 -1
  399. package/dist/stencil/index-Df69oUcb.js +0 -4334
  400. package/dist/stencil/index-Df69oUcb.js.map +0 -1
  401. package/dist/stencil/kritzel-brush-style.entry.esm.js.map +0 -1
  402. package/dist/stencil/kritzel-brush-style.entry.js +0 -31
  403. package/dist/stencil/kritzel-brush-style.entry.js.map +0 -1
  404. package/dist/stencil/kritzel-color-palette.entry.esm.js.map +0 -1
  405. package/dist/stencil/kritzel-color-palette.entry.js.map +0 -1
  406. package/dist/stencil/kritzel-color.entry.esm.js.map +0 -1
  407. package/dist/stencil/kritzel-color.entry.js.map +0 -1
  408. package/dist/stencil/kritzel-context-menu-B2p1_Ffh.js +0 -91
  409. package/dist/stencil/kritzel-context-menu-B2p1_Ffh.js.map +0 -1
  410. package/dist/stencil/kritzel-context-menu-DPHV6MRm.js +0 -91
  411. package/dist/stencil/kritzel-context-menu-DPHV6MRm.js.map +0 -1
  412. package/dist/stencil/kritzel-context-menu.entry.esm.js.map +0 -1
  413. package/dist/stencil/kritzel-context-menu.entry.js +0 -5
  414. package/dist/stencil/kritzel-context-menu.entry.js.map +0 -1
  415. package/dist/stencil/kritzel-control-brush-config.entry.esm.js.map +0 -1
  416. package/dist/stencil/kritzel-control-brush-config.entry.js +0 -54
  417. package/dist/stencil/kritzel-control-brush-config.entry.js.map +0 -1
  418. package/dist/stencil/kritzel-control-text-config.entry.esm.js.map +0 -1
  419. package/dist/stencil/kritzel-control-text-config.entry.js +0 -42
  420. package/dist/stencil/kritzel-control-text-config.entry.js.map +0 -1
  421. package/dist/stencil/kritzel-controls.entry.esm.js.map +0 -1
  422. package/dist/stencil/kritzel-controls.entry.js.map +0 -1
  423. package/dist/stencil/kritzel-cursor-trail.entry.esm.js.map +0 -1
  424. package/dist/stencil/kritzel-cursor-trail.entry.js.map +0 -1
  425. package/dist/stencil/kritzel-dropdown.entry.esm.js.map +0 -1
  426. package/dist/stencil/kritzel-dropdown.entry.js.map +0 -1
  427. package/dist/stencil/kritzel-editor.entry.esm.js.map +0 -1
  428. package/dist/stencil/kritzel-editor.entry.js +0 -180
  429. package/dist/stencil/kritzel-editor.entry.js.map +0 -1
  430. package/dist/stencil/kritzel-engine.entry.esm.js.map +0 -1
  431. package/dist/stencil/kritzel-engine.entry.js +0 -1318
  432. package/dist/stencil/kritzel-engine.entry.js.map +0 -1
  433. package/dist/stencil/kritzel-font-family.entry.esm.js.map +0 -1
  434. package/dist/stencil/kritzel-font-family.entry.js.map +0 -1
  435. package/dist/stencil/kritzel-font-size.entry.esm.js.map +0 -1
  436. package/dist/stencil/kritzel-font-size.entry.js +0 -29
  437. package/dist/stencil/kritzel-font-size.entry.js.map +0 -1
  438. package/dist/stencil/kritzel-font.entry.esm.js.map +0 -1
  439. package/dist/stencil/kritzel-font.entry.js +0 -25
  440. package/dist/stencil/kritzel-font.entry.js.map +0 -1
  441. package/dist/stencil/kritzel-icon.entry.esm.js.map +0 -1
  442. package/dist/stencil/kritzel-icon.entry.js +0 -29
  443. package/dist/stencil/kritzel-icon.entry.js.map +0 -1
  444. package/dist/stencil/kritzel-stroke-size.entry.esm.js.map +0 -1
  445. package/dist/stencil/kritzel-stroke-size.entry.js +0 -28
  446. package/dist/stencil/kritzel-stroke-size.entry.js.map +0 -1
  447. package/dist/stencil/kritzel-tooltip.entry.esm.js.map +0 -1
  448. package/dist/stencil/kritzel-tooltip.entry.js.map +0 -1
  449. package/dist/stencil/kritzel-utility-panel.entry.esm.js.map +0 -1
  450. package/dist/stencil/kritzel-utility-panel.entry.js +0 -33
  451. package/dist/stencil/kritzel-utility-panel.entry.js.map +0 -1
@@ -0,0 +1,116 @@
1
+ import { KritzelText } from "../objects/text.class";
2
+ import { KritzelBaseTool } from "./base-tool.class";
3
+ import { AddObjectCommand } from "../commands/add-object.command";
4
+ import { KritzelEventHelper } from "../../helpers/event.helper";
5
+ import { KritzelToolRegistry } from "../registries/tool.registry";
6
+ import { KritzelKeyboardHelper } from "../../helpers/keyboard.helper";
7
+ export class KritzelTextTool extends KritzelBaseTool {
8
+ constructor(store) {
9
+ super(store);
10
+ this.fontFamily = 'Arial';
11
+ this.fontSize = 16;
12
+ this.fontColor = '#000000';
13
+ this.palette = [
14
+ '#000000',
15
+ '#FFFFFF',
16
+ '#FF0000',
17
+ '#00FF00',
18
+ '#0000FF',
19
+ '#FFFF00',
20
+ '#FF00FF',
21
+ '#00FFFF',
22
+ '#808080',
23
+ '#C0C0C0',
24
+ '#800000',
25
+ '#008000',
26
+ '#000080',
27
+ '#808000',
28
+ '#800080',
29
+ ];
30
+ }
31
+ handlePointerDown(event) {
32
+ if (event.cancelable) {
33
+ event.preventDefault();
34
+ }
35
+ if (event.pointerType === 'mouse') {
36
+ const path = event.composedPath().slice(1);
37
+ const objectElement = path.find(element => element.classList && element.classList.contains('object'));
38
+ const object = this._store.findObjectById(objectElement === null || objectElement === void 0 ? void 0 : objectElement.id);
39
+ if (this._store.state.activeText === null && object && object instanceof KritzelText) {
40
+ this._store.state.activeText = object;
41
+ object.focus();
42
+ return;
43
+ }
44
+ if (this._store.state.activeText !== null && object instanceof KritzelText) {
45
+ object.focus();
46
+ return;
47
+ }
48
+ if (this._store.state.activeText !== null) {
49
+ this._store.resetActiveText();
50
+ this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
51
+ return;
52
+ }
53
+ if (KritzelEventHelper.isLeftClick(event) === false) {
54
+ return;
55
+ }
56
+ const clientX = event.clientX - this._store.offsetX;
57
+ const clientY = event.clientY - this._store.offsetY;
58
+ const text = KritzelText.create(this._store, this.fontSize, this.fontFamily);
59
+ text.fontColor = this.fontColor;
60
+ text.translateX = (clientX - this._store.state.translateX) / this._store.state.scale;
61
+ text.translateY = (clientY - this._store.state.translateY) / this._store.state.scale;
62
+ text.zIndex = this._store.currentZIndex;
63
+ this._store.state.activeText = text;
64
+ this._store.history.executeCommand(new AddObjectCommand(this._store, this, text));
65
+ }
66
+ if (event.pointerType === 'touch') {
67
+ const activePointers = Array.from(this._store.state.pointers.values());
68
+ const path = event.composedPath().slice(1);
69
+ const objectElement = path.find(element => element.classList && element.classList.contains('object'));
70
+ const object = this._store.findObjectById(objectElement === null || objectElement === void 0 ? void 0 : objectElement.id);
71
+ if (this._store.state.activeText === null && object && object instanceof KritzelText) {
72
+ this._store.state.activeText = object;
73
+ object.focus();
74
+ return;
75
+ }
76
+ if (this._store.state.activeText !== null && object instanceof KritzelText) {
77
+ object.focus();
78
+ return;
79
+ }
80
+ if (this._store.state.activeText !== null) {
81
+ this._store.resetActiveText();
82
+ this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
83
+ return;
84
+ }
85
+ if (activePointers.length > 1) {
86
+ return;
87
+ }
88
+ KritzelKeyboardHelper.disableInteractiveWidget();
89
+ const clientX = Math.round(activePointers[0].clientX - this._store.offsetX);
90
+ const clientY = Math.round(activePointers[0].clientY - this._store.offsetY);
91
+ const text = KritzelText.create(this._store, this.fontSize, this.fontFamily);
92
+ text.fontColor = this.fontColor;
93
+ text.translateX = (clientX - this._store.state.translateX) / this._store.state.scale;
94
+ text.translateY = (clientY - this._store.state.translateY) / this._store.state.scale;
95
+ text.zIndex = this._store.currentZIndex;
96
+ this._store.state.activeText = text;
97
+ this._store.history.executeCommand(new AddObjectCommand(this._store, this, text));
98
+ }
99
+ }
100
+ handlePointerUp(event) {
101
+ var _a, _b, _c, _d;
102
+ if (event.cancelable) {
103
+ event.preventDefault();
104
+ }
105
+ if (event.pointerType === 'mouse') {
106
+ (_a = this._store.state.activeText) === null || _a === void 0 ? void 0 : _a.updateTextareaDimensions();
107
+ (_b = this._store.state.activeText) === null || _b === void 0 ? void 0 : _b.focus();
108
+ }
109
+ if (event.pointerType === 'touch') {
110
+ (_c = this._store.state.activeText) === null || _c === void 0 ? void 0 : _c.updateTextareaDimensions();
111
+ (_d = this._store.state.activeText) === null || _d === void 0 ? void 0 : _d.focus();
112
+ KritzelKeyboardHelper.enableInteractiveWidget();
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=text-tool.class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-tool.class.js","sourceRoot":"","sources":["../../../src/classes/tools/text-tool.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,OAAO,eAAgB,SAAQ,eAAe;IAuBlD,YAAY,KAAmB;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC;QAvBf,eAAU,GAAW,OAAO,CAAC;QAC7B,aAAQ,GAAW,EAAE,CAAC;QACtB,cAAS,GAAW,SAAS,CAAC;QAE9B,YAAO,GAAa;YAClB,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC;IAIF,CAAC;IAED,iBAAiB,CAAC,KAAmB;QACnC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAkB,CAAC;YAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,EAAE,CAAC,CAAC;YAE7D,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC;gBACrF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;gBACtC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC;gBAC3E,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC7E,OAAO;YACT,CAAC;YAED,IAAI,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;gBACpD,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACpD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAE7E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YACrF,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YACrF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAExC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;YAEpC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAEvE,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAkB,CAAC;YAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,EAAE,CAAC,CAAC;YAE7D,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC;gBACrF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;gBACtC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC;gBAC3E,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC7E,OAAO;YACT,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO;YACT,CAAC;YAED,qBAAqB,CAAC,wBAAwB,EAAE,CAAC;YAEjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAE7E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YACrF,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YACrF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAExC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;YAEpC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,eAAe,CAAC,KAAmB;;QACjC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;YAClC,MAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,0CAAE,wBAAwB,EAAE,CAAC;YACzD,MAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,0CAAE,KAAK,EAAE,CAAC;QACxC,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;YAClC,MAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,0CAAE,wBAAwB,EAAE,CAAC;YACzD,MAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,0CAAE,KAAK,EAAE,CAAC;YAEtC,qBAAqB,CAAC,uBAAuB,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;CACF","sourcesContent":["import { KritzelText } from '../objects/text.class';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\nimport { AddObjectCommand } from '../commands/add-object.command';\r\nimport { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelKeyboardHelper } from '../../helpers/keyboard.helper';\r\n\r\nexport class KritzelTextTool extends KritzelBaseTool {\r\n fontFamily: string = 'Arial';\r\n fontSize: number = 16;\r\n fontColor: string = '#000000';\r\n\r\n palette: string[] = [\r\n '#000000',\r\n '#FFFFFF',\r\n '#FF0000',\r\n '#00FF00',\r\n '#0000FF',\r\n '#FFFF00',\r\n '#FF00FF',\r\n '#00FFFF',\r\n '#808080',\r\n '#C0C0C0',\r\n '#800000',\r\n '#008000',\r\n '#000080',\r\n '#808000',\r\n '#800080',\r\n ];\r\n\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n const path = event.composedPath().slice(1) as HTMLElement[];\r\n const objectElement = path.find(element => element.classList && element.classList.contains('object'));\r\n const object = this._store.findObjectById(objectElement?.id);\r\n\r\n if (this._store.state.activeText === null && object && object instanceof KritzelText) {\r\n this._store.state.activeText = object;\r\n object.focus();\r\n return;\r\n }\r\n\r\n if (this._store.state.activeText !== null && object instanceof KritzelText) {\r\n object.focus();\r\n return;\r\n }\r\n\r\n if (this._store.state.activeText !== null) {\r\n this._store.resetActiveText();\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n return;\r\n }\r\n\r\n if (KritzelEventHelper.isLeftClick(event) === false) {\r\n return;\r\n }\r\n\r\n const clientX = event.clientX - this._store.offsetX;\r\n const clientY = event.clientY - this._store.offsetY;\r\n const text = KritzelText.create(this._store, this.fontSize, this.fontFamily);\r\n\r\n text.fontColor = this.fontColor;\r\n text.translateX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n text.translateY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n text.zIndex = this._store.currentZIndex;\r\n\r\n this._store.state.activeText = text;\r\n\r\n this._store.history.executeCommand(new AddObjectCommand(this._store, this, text));\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n const path = event.composedPath().slice(1) as HTMLElement[];\r\n const objectElement = path.find(element => element.classList && element.classList.contains('object'));\r\n const object = this._store.findObjectById(objectElement?.id);\r\n\r\n if (this._store.state.activeText === null && object && object instanceof KritzelText) {\r\n this._store.state.activeText = object;\r\n object.focus();\r\n return;\r\n }\r\n\r\n if (this._store.state.activeText !== null && object instanceof KritzelText) {\r\n object.focus();\r\n return;\r\n }\r\n\r\n if (this._store.state.activeText !== null) {\r\n this._store.resetActiveText();\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n return;\r\n }\r\n\r\n if (activePointers.length > 1) {\r\n return;\r\n }\r\n\r\n KritzelKeyboardHelper.disableInteractiveWidget();\r\n\r\n const clientX = Math.round(activePointers[0].clientX - this._store.offsetX);\r\n const clientY = Math.round(activePointers[0].clientY - this._store.offsetY);\r\n const text = KritzelText.create(this._store, this.fontSize, this.fontFamily);\r\n\r\n text.fontColor = this.fontColor;\r\n text.translateX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n text.translateY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n text.zIndex = this._store.currentZIndex;\r\n\r\n this._store.state.activeText = text;\r\n\r\n this._store.history.executeCommand(new AddObjectCommand(this._store, this, text));\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n this._store.state.activeText?.updateTextareaDimensions();\r\n this._store.state.activeText?.focus();\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n this._store.state.activeText?.updateTextareaDimensions();\r\n this._store.state.activeText?.focus();\r\n\r\n KritzelKeyboardHelper.enableInteractiveWidget();\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,152 @@
1
+ import { KritzelMouseButton } from "../enums/event-button.enum";
2
+ import { KritzelEventHelper } from "../helpers/event.helper";
3
+ export class KritzelViewport {
4
+ constructor(store, host) {
5
+ this.initialTouchDistance = 0;
6
+ this.startX = 0;
7
+ this.startY = 0;
8
+ this._store = store;
9
+ this._store.state.host = host;
10
+ this._store.state.viewportWidth = host.clientWidth;
11
+ this._store.state.viewportHeight = host.clientHeight;
12
+ this._store.state.startX = 0;
13
+ this._store.state.startY = 0;
14
+ this._store.state.translateX = 0;
15
+ this._store.state.translateY = 0;
16
+ }
17
+ handleResize() {
18
+ this._store.state.viewportWidth = this._store.state.host.clientWidth;
19
+ this._store.state.viewportHeight = this._store.state.host.clientHeight;
20
+ this._store.state.hasViewportChanged = true;
21
+ this._store.rerender();
22
+ }
23
+ handlePointerDown(event) {
24
+ if (event.pointerType === 'mouse') {
25
+ const adjustedClientX = event.clientX - this._store.offsetX;
26
+ const adjustedClientY = event.clientY - this._store.offsetY;
27
+ if (event.button === KritzelMouseButton.Right) {
28
+ this._store.state.isPanning = true;
29
+ this._store.state.startX = adjustedClientX;
30
+ this._store.state.startY = adjustedClientY;
31
+ }
32
+ }
33
+ if (event.pointerType === 'touch') {
34
+ const activePointers = Array.from(this._store.state.pointers.values());
35
+ if (activePointers.length === 2) {
36
+ this._store.state.currentPath = null;
37
+ this._store.state.isScaling = true;
38
+ const firstTouchX = activePointers[0].clientX - this._store.offsetX;
39
+ const firstTouchY = activePointers[0].clientY - this._store.offsetY;
40
+ const secondTouchX = activePointers[1].clientX - this._store.offsetX;
41
+ const secondTouchY = activePointers[1].clientY - this._store.offsetY;
42
+ this.initialTouchDistance = Math.sqrt(Math.pow(firstTouchX - secondTouchX, 2) + Math.pow(firstTouchY - secondTouchY, 2));
43
+ this.startX = (firstTouchX + secondTouchX) / 2;
44
+ this.startY = (firstTouchY + secondTouchY) / 2;
45
+ this._store.rerender();
46
+ }
47
+ }
48
+ }
49
+ handlePointerMove(event) {
50
+ if (event.pointerType === 'mouse') {
51
+ const hostRect = this._store.state.host.getBoundingClientRect();
52
+ const xRelativeToHost = event.clientX - hostRect.left;
53
+ const yRelativeToHost = event.clientY - hostRect.top;
54
+ this._store.state.pointerX = (xRelativeToHost - this._store.state.translateX) / this._store.state.scale;
55
+ this._store.state.pointerY = (yRelativeToHost - this._store.state.translateY) / this._store.state.scale;
56
+ if (this._store.state.isPanning) {
57
+ this._store.state.translateX -= this._store.state.startX - xRelativeToHost;
58
+ this._store.state.translateY -= this._store.state.startY - yRelativeToHost;
59
+ this._store.state.startX = xRelativeToHost;
60
+ this._store.state.startY = yRelativeToHost;
61
+ this._store.state.hasViewportChanged = true;
62
+ this._store.state.skipContextMenu = true;
63
+ this._store.rerender();
64
+ this._store.updateWorkspaceViewport(this._store.state.translateX, this._store.state.translateY, this._store.state.scale);
65
+ }
66
+ }
67
+ if (event.pointerType === 'touch') {
68
+ const hostRect = this._store.state.host.getBoundingClientRect();
69
+ const xRelativeToHost = event.clientX - hostRect.left;
70
+ const yRelativeToHost = event.clientY - hostRect.top;
71
+ this._store.state.pointerX = (xRelativeToHost - this._store.state.translateX) / this._store.state.scale;
72
+ this._store.state.pointerY = (yRelativeToHost - this._store.state.translateY) / this._store.state.scale;
73
+ const activePointers = Array.from(this._store.state.pointers.values());
74
+ if (activePointers.length === 2) {
75
+ const firstTouchX = activePointers[0].clientX - this._store.offsetX;
76
+ const firstTouchY = activePointers[0].clientY - this._store.offsetY;
77
+ const secondTouchX = activePointers[1].clientX - this._store.offsetX;
78
+ const secondTouchY = activePointers[1].clientY - this._store.offsetY;
79
+ const currentTouchDistance = Math.sqrt(Math.pow(firstTouchX - secondTouchX, 2) + Math.pow(firstTouchY - secondTouchY, 2));
80
+ const midpointX = (firstTouchX + secondTouchX) / 2;
81
+ const midpointY = (firstTouchY + secondTouchY) / 2;
82
+ const scaleRatio = currentTouchDistance / this.initialTouchDistance;
83
+ const newScale = this._store.state.scale * scaleRatio;
84
+ if (newScale > this._store.state.scaleMax || newScale < this._store.state.scaleMin) {
85
+ this._store.state.translateX += midpointX - this.startX;
86
+ this._store.state.translateY += midpointY - this.startY;
87
+ }
88
+ else {
89
+ const translateXAdjustment = (midpointX - this._store.state.translateX) * (scaleRatio - 1);
90
+ const translateYAdjustment = (midpointY - this._store.state.translateY) * (scaleRatio - 1);
91
+ this._store.state.translateX += midpointX - this.startX - translateXAdjustment;
92
+ this._store.state.translateY += midpointY - this.startY - translateYAdjustment;
93
+ this._store.state.scale = newScale;
94
+ this.initialTouchDistance = currentTouchDistance;
95
+ }
96
+ this.startX = midpointX;
97
+ this.startY = midpointY;
98
+ this._store.state.hasViewportChanged = true;
99
+ this._store.rerender();
100
+ this._store.updateWorkspaceViewport(this._store.state.translateX, this._store.state.translateY, this._store.state.scale);
101
+ }
102
+ }
103
+ }
104
+ handlePointerUp(event) {
105
+ if (event.pointerType === 'mouse') {
106
+ if (this._store.state.isPanning) {
107
+ this._store.state.isPanning = false;
108
+ this._store.rerender();
109
+ }
110
+ }
111
+ if (event.pointerType === 'touch') {
112
+ this._store.state.isScaling = false;
113
+ this._store.rerender();
114
+ }
115
+ }
116
+ handleWheel(event) {
117
+ event.preventDefault();
118
+ if (event.ctrlKey === true && KritzelEventHelper.isMainMouseWheel(event)) {
119
+ this.handleZoom(event);
120
+ }
121
+ if (!event.ctrlKey) {
122
+ this.handlePan(event);
123
+ }
124
+ }
125
+ handleZoom(event) {
126
+ const rect = this._store.state.host.getBoundingClientRect();
127
+ const xRelativeToHost = event.clientX - rect.left;
128
+ const yRelativeToHost = event.clientY - rect.top;
129
+ this._store.state.pointerX = (xRelativeToHost - this._store.state.translateX) / this._store.state.scale;
130
+ this._store.state.pointerY = (yRelativeToHost - this._store.state.translateY) / this._store.state.scale;
131
+ const delta = event.deltaY > 0 ? -this._store.state.scaleStep * this._store.state.scale : this._store.state.scaleStep * this._store.state.scale;
132
+ const newScale = Math.min(this._store.state.scaleMax, Math.max(this._store.state.scaleMin, this._store.state.scale + delta));
133
+ const scaleRatio = newScale / this._store.state.scale;
134
+ const translateXAdjustment = (xRelativeToHost - this._store.state.translateX) * (scaleRatio - 1);
135
+ const translateYAdjustment = (yRelativeToHost - this._store.state.translateY) * (scaleRatio - 1);
136
+ this._store.state.scale = newScale;
137
+ this._store.state.translateX -= translateXAdjustment;
138
+ this._store.state.translateY -= translateYAdjustment;
139
+ this._store.state.hasViewportChanged = true;
140
+ this._store.rerender();
141
+ this._store.updateWorkspaceViewport(this._store.state.translateX, this._store.state.translateY, this._store.state.scale);
142
+ }
143
+ handlePan(event) {
144
+ const panSpeed = 0.8;
145
+ this._store.state.translateX -= event.deltaX * panSpeed;
146
+ this._store.state.translateY -= event.deltaY * panSpeed;
147
+ this._store.state.hasViewportChanged = true;
148
+ this._store.rerender();
149
+ this._store.updateWorkspaceViewport(this._store.state.translateX, this._store.state.translateY, this._store.state.scale);
150
+ }
151
+ }
152
+ //# sourceMappingURL=viewport.class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.class.js","sourceRoot":"","sources":["../../src/classes/viewport.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelMouseButton } from '../enums/event-button.enum';\r\nimport { KritzelEventHelper } from '../helpers/event.helper';\r\nimport { KritzelStore } from './store.class';\r\n\r\nexport class KritzelViewport {\r\n private readonly _store: KritzelStore;\r\n\r\n initialTouchDistance: number = 0;\r\n startX: number = 0;\r\n startY: number = 0;\r\n\r\n constructor(store: KritzelStore, host: HTMLElement) {\r\n this._store = store;\r\n this._store.state.host = host;\r\n this._store.state.viewportWidth = host.clientWidth;\r\n this._store.state.viewportHeight = host.clientHeight;\r\n this._store.state.startX = 0;\r\n this._store.state.startY = 0;\r\n this._store.state.translateX = 0;\r\n this._store.state.translateY = 0;\r\n }\r\n\r\n handleResize(): void {\r\n this._store.state.viewportWidth = this._store.state.host.clientWidth;\r\n this._store.state.viewportHeight = this._store.state.host.clientHeight;\r\n this._store.state.hasViewportChanged = true;\r\n this._store.rerender();\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n const adjustedClientX = event.clientX - this._store.offsetX;\r\n const adjustedClientY = event.clientY - this._store.offsetY;\r\n\r\n if (event.button === KritzelMouseButton.Right) {\r\n this._store.state.isPanning = true;\r\n this._store.state.startX = adjustedClientX;\r\n this._store.state.startY = adjustedClientY;\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n if (activePointers.length === 2) {\r\n this._store.state.currentPath = null;\r\n this._store.state.isScaling = true;\r\n\r\n const firstTouchX = activePointers[0].clientX - this._store.offsetX;\r\n const firstTouchY = activePointers[0].clientY - this._store.offsetY;\r\n\r\n const secondTouchX = activePointers[1].clientX - this._store.offsetX;\r\n const secondTouchY = activePointers[1].clientY - this._store.offsetY;\r\n\r\n this.initialTouchDistance = Math.sqrt(Math.pow(firstTouchX - secondTouchX, 2) + Math.pow(firstTouchY - secondTouchY, 2));\r\n\r\n this.startX = (firstTouchX + secondTouchX) / 2;\r\n this.startY = (firstTouchY + secondTouchY) / 2;\r\n this._store.rerender();\r\n }\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n const hostRect = this._store.state.host.getBoundingClientRect();\r\n const xRelativeToHost = event.clientX - hostRect.left;\r\n const yRelativeToHost = event.clientY - hostRect.top;\r\n\r\n this._store.state.pointerX = (xRelativeToHost - this._store.state.translateX) / this._store.state.scale;\r\n this._store.state.pointerY = (yRelativeToHost - this._store.state.translateY) / this._store.state.scale;\r\n\r\n if (this._store.state.isPanning) {\r\n this._store.state.translateX -= this._store.state.startX - xRelativeToHost;\r\n this._store.state.translateY -= this._store.state.startY - yRelativeToHost;\r\n this._store.state.startX = xRelativeToHost;\r\n this._store.state.startY = yRelativeToHost;\r\n this._store.state.hasViewportChanged = true;\r\n this._store.state.skipContextMenu = true;\r\n\r\n this._store.rerender();\r\n this._store.updateWorkspaceViewport(this._store.state.translateX, this._store.state.translateY, this._store.state.scale);\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const hostRect = this._store.state.host.getBoundingClientRect();\r\n const xRelativeToHost = event.clientX - hostRect.left;\r\n const yRelativeToHost = event.clientY - hostRect.top;\r\n\r\n this._store.state.pointerX = (xRelativeToHost - this._store.state.translateX) / this._store.state.scale;\r\n this._store.state.pointerY = (yRelativeToHost - this._store.state.translateY) / this._store.state.scale;\r\n\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n if (activePointers.length === 2) {\r\n const firstTouchX = activePointers[0].clientX - this._store.offsetX;\r\n const firstTouchY = activePointers[0].clientY - this._store.offsetY;\r\n\r\n const secondTouchX = activePointers[1].clientX - this._store.offsetX;\r\n const secondTouchY = activePointers[1].clientY - this._store.offsetY;\r\n\r\n const currentTouchDistance = Math.sqrt(Math.pow(firstTouchX - secondTouchX, 2) + Math.pow(firstTouchY - secondTouchY, 2));\r\n\r\n const midpointX = (firstTouchX + secondTouchX) / 2;\r\n const midpointY = (firstTouchY + secondTouchY) / 2;\r\n\r\n const scaleRatio = currentTouchDistance / this.initialTouchDistance!;\r\n const newScale = this._store.state.scale * scaleRatio;\r\n\r\n if (newScale > this._store.state.scaleMax || newScale < this._store.state.scaleMin) {\r\n this._store.state.translateX += midpointX - this.startX;\r\n this._store.state.translateY += midpointY - this.startY;\r\n } else {\r\n const translateXAdjustment = (midpointX - this._store.state.translateX) * (scaleRatio - 1);\r\n const translateYAdjustment = (midpointY - this._store.state.translateY) * (scaleRatio - 1);\r\n\r\n this._store.state.translateX += midpointX - this.startX - translateXAdjustment;\r\n this._store.state.translateY += midpointY - this.startY - translateYAdjustment;\r\n this._store.state.scale = newScale;\r\n\r\n this.initialTouchDistance = currentTouchDistance;\r\n }\r\n\r\n this.startX = midpointX;\r\n this.startY = midpointY;\r\n\r\n this._store.state.hasViewportChanged = true;\r\n\r\n this._store.rerender();\r\n this._store.updateWorkspaceViewport(this._store.state.translateX, this._store.state.translateY, this._store.state.scale);\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isPanning) {\r\n this._store.state.isPanning = false;\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n this._store.state.isScaling = false;\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n handleWheel(event: WheelEvent): void {\r\n event.preventDefault();\r\n\r\n if (event.ctrlKey === true && KritzelEventHelper.isMainMouseWheel(event)) {\r\n this.handleZoom(event);\r\n }\r\n\r\n if (!event.ctrlKey) {\r\n this.handlePan(event);\r\n }\r\n }\r\n\r\n private handleZoom(event: WheelEvent): void {\r\n const rect = this._store.state.host.getBoundingClientRect();\r\n const xRelativeToHost = event.clientX - rect.left;\r\n const yRelativeToHost = event.clientY - rect.top;\r\n\r\n this._store.state.pointerX = (xRelativeToHost - this._store.state.translateX) / this._store.state.scale;\r\n this._store.state.pointerY = (yRelativeToHost - this._store.state.translateY) / this._store.state.scale;\r\n\r\n const delta = event.deltaY > 0 ? -this._store.state.scaleStep * this._store.state.scale : this._store.state.scaleStep * this._store.state.scale;\r\n const newScale = Math.min(this._store.state.scaleMax, Math.max(this._store.state.scaleMin, this._store.state.scale + delta));\r\n\r\n const scaleRatio = newScale / this._store.state.scale;\r\n const translateXAdjustment = (xRelativeToHost - this._store.state.translateX) * (scaleRatio - 1);\r\n const translateYAdjustment = (yRelativeToHost - this._store.state.translateY) * (scaleRatio - 1);\r\n\r\n this._store.state.scale = newScale;\r\n\r\n this._store.state.translateX -= translateXAdjustment;\r\n this._store.state.translateY -= translateYAdjustment;\r\n\r\n this._store.state.hasViewportChanged = true;\r\n\r\n this._store.rerender();\r\n this._store.updateWorkspaceViewport(this._store.state.translateX, this._store.state.translateY, this._store.state.scale);\r\n }\r\n\r\n private handlePan(event: WheelEvent): void {\r\n const panSpeed = 0.8;\r\n\r\n this._store.state.translateX -= event.deltaX * panSpeed;\r\n this._store.state.translateY -= event.deltaY * panSpeed;\r\n\r\n this._store.state.hasViewportChanged = true;\r\n\r\n this._store.rerender();\r\n this._store.updateWorkspaceViewport(this._store.state.translateX, this._store.state.translateY, this._store.state.scale);\r\n }\r\n}\r\n"]}
@@ -0,0 +1,10 @@
1
+ export class KritzelWorkspace {
2
+ constructor(id, name, viewport = { translateX: 0, translateY: 0, scale: 1 }) {
3
+ this.id = id;
4
+ this.name = name;
5
+ this.createdAt = new Date();
6
+ this.updatedAt = new Date();
7
+ this.viewport = viewport;
8
+ }
9
+ }
10
+ //# sourceMappingURL=workspace.class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.class.js","sourceRoot":"","sources":["../../src/classes/workspace.class.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAgB;IAW3B,YAAY,EAAU,EAAE,IAAY,EAAE,WAAsE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QACpJ,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF","sourcesContent":["export class KritzelWorkspace {\r\n id: string;\r\n name: string;\r\n createdAt: Date;\r\n updatedAt: Date;\r\n viewport: {\r\n translateX: number;\r\n translateY: number;\r\n scale: number;\r\n };\r\n\r\n constructor(id: string, name: string, viewport: { translateX: number; translateY: number; scale: number } = { translateX: 0, translateY: 0, scale: 1 }) {\r\n this.id = id;\r\n this.name = name;\r\n this.createdAt = new Date();\r\n this.updatedAt = new Date();\r\n this.viewport = viewport;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,33 @@
1
+ {
2
+ "entries": [
3
+ "components/shared/kritzel-dropdown/kritzel-dropdown.js",
4
+ "components/shared/kritzel-brush-style/kritzel-brush-style.js",
5
+ "components/core/kritzel-engine/kritzel-engine.js",
6
+ "components/ui/kritzel-context-menu/kritzel-context-menu.js",
7
+ "components/shared/kritzel-font-family/kritzel-font-family.js",
8
+ "components/core/kritzel-cursor-trail/kritzel-cursor-trail.js",
9
+ "components/core/kritzel-editor/kritzel-editor.js",
10
+ "components/shared/kritzel-color/kritzel-color.js",
11
+ "components/shared/kritzel-color-palette/kritzel-color-palette.js",
12
+ "components/shared/kritzel-font/kritzel-font.js",
13
+ "components/shared/kritzel-font-size/kritzel-font-size.js",
14
+ "components/shared/kritzel-icon/kritzel-icon.js",
15
+ "components/shared/kritzel-menu/kritzel-menu.js",
16
+ "components/shared/kritzel-portal/kritzel-portal.js",
17
+ "components/shared/kritzel-split-button/kritzel-split-button.js",
18
+ "components/shared/kritzel-stroke-size/kritzel-stroke-size.js",
19
+ "components/shared/kritzel-tooltip/kritzel-tooltip.js",
20
+ "components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js",
21
+ "components/ui/kritzel-control-text-config/kritzel-control-text-config.js",
22
+ "components/ui/kritzel-controls/kritzel-controls.js",
23
+ "components/ui/kritzel-utility-panel/kritzel-utility-panel.js",
24
+ "components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js"
25
+ ],
26
+ "compiler": {
27
+ "name": "@stencil/core",
28
+ "version": "4.37.0",
29
+ "typescriptVersion": "5.5.4"
30
+ },
31
+ "collections": [],
32
+ "bundles": []
33
+ }
@@ -0,0 +1,10 @@
1
+ :host {
2
+ display: block;
3
+ position: fixed;
4
+ top: 0;
5
+ left: 0;
6
+ width: 100vw;
7
+ height: 100vh;
8
+ pointer-events: none;
9
+ z-index: 9000;
10
+ }
@@ -0,0 +1,154 @@
1
+ import { Host, h } from "@stencil/core";
2
+ import { KritzelMouseButton } from "../../../enums/event-button.enum";
3
+ export class KritzelCursorTrail {
4
+ constructor() {
5
+ this.cursorTrailPoints = [];
6
+ this.isLeftButtonDown = false;
7
+ this.TRAIL_DURATION_MS = 100;
8
+ this.MAX_TRAIL_POINTS = 50;
9
+ }
10
+ componentDidLoad() {
11
+ this.trailCleanupIntervalId = window.setInterval(() => {
12
+ const now = Date.now();
13
+ const newTrailPoints = this.cursorTrailPoints.filter(p => now - p.timestamp < this.TRAIL_DURATION_MS);
14
+ if (newTrailPoints.length !== this.cursorTrailPoints.length) {
15
+ this.cursorTrailPoints = newTrailPoints;
16
+ }
17
+ }, 50);
18
+ }
19
+ disconnectedCallback() {
20
+ if (this.trailCleanupIntervalId) {
21
+ window.clearInterval(this.trailCleanupIntervalId);
22
+ }
23
+ }
24
+ handleMouseDown(ev) {
25
+ if (ev.pointerType === 'mouse') {
26
+ if (ev.button === KritzelMouseButton.Left) {
27
+ this.isLeftButtonDown = true;
28
+ this.cursorTrailPoints = [];
29
+ }
30
+ }
31
+ if (ev.pointerType === 'touch') {
32
+ if (this.store.state.pointers.size === 1) {
33
+ this.isLeftButtonDown = true;
34
+ this.cursorTrailPoints = [];
35
+ }
36
+ }
37
+ }
38
+ handlePointerMove(ev) {
39
+ if (!this.isLeftButtonDown) {
40
+ return;
41
+ }
42
+ const newPoint = { x: ev.clientX, y: ev.clientY, timestamp: Date.now() };
43
+ const updatedTrail = [newPoint, ...this.cursorTrailPoints];
44
+ if (updatedTrail.length > this.MAX_TRAIL_POINTS) {
45
+ this.cursorTrailPoints = updatedTrail.slice(0, this.MAX_TRAIL_POINTS);
46
+ }
47
+ else {
48
+ this.cursorTrailPoints = updatedTrail;
49
+ }
50
+ }
51
+ handlePointerUp(ev) {
52
+ if (ev.pointerType === 'mouse') {
53
+ if (ev.button === KritzelMouseButton.Left) {
54
+ this.isLeftButtonDown = false;
55
+ this.cursorTrailPoints = [];
56
+ }
57
+ }
58
+ if (ev.pointerType === 'touch') {
59
+ if (this.store.state.pointers.size === 0) {
60
+ this.isLeftButtonDown = false;
61
+ this.cursorTrailPoints = [];
62
+ }
63
+ }
64
+ }
65
+ render() {
66
+ return (h(Host, { key: 'c519ab89ffb793de887a870bafe8772f7584f097' }, this.cursorTrailPoints.length > 1 && (h("svg", { key: 'db7ac0975c5a39c0b68d8fd4af4edd4d15f439f3', class: "cursor-trail-svg", xmlns: "http://www.w3.org/2000/svg", style: {
67
+ position: 'absolute',
68
+ left: '0',
69
+ top: '0',
70
+ width: '100%',
71
+ height: '100%',
72
+ pointerEvents: 'none',
73
+ opacity: 'var(--kritzel-cursor-trail-opacity, 0.6)',
74
+ zIndex: '9000',
75
+ } }, this.cursorTrailPoints.slice(1).map((point, index) => {
76
+ const prevPoint = this.cursorTrailPoints[index];
77
+ const now = Date.now();
78
+ const age = now - point.timestamp;
79
+ const progress = Math.max(0, Math.min(1, age / this.TRAIL_DURATION_MS));
80
+ if (progress >= 1)
81
+ return null;
82
+ const baseStrokeWidth = Math.max(2, 15 * (1 - progress));
83
+ return (h("line", { key: `trail-segment-${point.timestamp}`, x1: prevPoint.x.toString(), y1: prevPoint.y.toString(), x2: point.x.toString(), y2: point.y.toString(), stroke: "var(--kritzel-cursor-trail-color, rgb(228, 228, 228))", "stroke-width": baseStrokeWidth.toString(), "stroke-linecap": "round" }));
84
+ })))));
85
+ }
86
+ static get is() { return "kritzel-cursor-trail"; }
87
+ static get encapsulation() { return "shadow"; }
88
+ static get originalStyleUrls() {
89
+ return {
90
+ "$": ["kritzel-cursor-trail.css"]
91
+ };
92
+ }
93
+ static get styleUrls() {
94
+ return {
95
+ "$": ["kritzel-cursor-trail.css"]
96
+ };
97
+ }
98
+ static get properties() {
99
+ return {
100
+ "store": {
101
+ "type": "unknown",
102
+ "attribute": "store",
103
+ "mutable": false,
104
+ "complexType": {
105
+ "original": "KritzelStore",
106
+ "resolved": "KritzelStore",
107
+ "references": {
108
+ "KritzelStore": {
109
+ "location": "import",
110
+ "path": "../../../classes/store.class",
111
+ "id": "src/classes/store.class.ts::KritzelStore"
112
+ }
113
+ }
114
+ },
115
+ "required": false,
116
+ "optional": false,
117
+ "docs": {
118
+ "tags": [],
119
+ "text": ""
120
+ },
121
+ "getter": false,
122
+ "setter": false
123
+ }
124
+ };
125
+ }
126
+ static get states() {
127
+ return {
128
+ "cursorTrailPoints": {},
129
+ "isLeftButtonDown": {}
130
+ };
131
+ }
132
+ static get listeners() {
133
+ return [{
134
+ "name": "pointerdown",
135
+ "method": "handleMouseDown",
136
+ "target": "window",
137
+ "capture": false,
138
+ "passive": true
139
+ }, {
140
+ "name": "pointermove",
141
+ "method": "handlePointerMove",
142
+ "target": "window",
143
+ "capture": false,
144
+ "passive": true
145
+ }, {
146
+ "name": "pointerup",
147
+ "method": "handlePointerUp",
148
+ "target": "window",
149
+ "capture": false,
150
+ "passive": true
151
+ }];
152
+ }
153
+ }
154
+ //# sourceMappingURL=kritzel-cursor-trail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kritzel-cursor-trail.js","sourceRoot":"","sources":["../../../../src/components/core/kritzel-cursor-trail/kritzel-cursor-trail.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, Listen, Prop, State, h } from '@stencil/core';\r\nimport { KritzelMouseButton } from '../../../enums/event-button.enum';\r\nimport { KritzelStore } from '../../../classes/store.class';\r\n\r\n@Component({\r\n tag: 'kritzel-cursor-trail',\r\n styleUrl: 'kritzel-cursor-trail.css',\r\n shadow: true,\r\n})\r\nexport class KritzelCursorTrail {\r\n @Prop()\r\n store: KritzelStore;\r\n\r\n @State()\r\n cursorTrailPoints: Array<{ x: number; y: number; timestamp: number }> = [];\r\n\r\n @State()\r\n isLeftButtonDown: boolean = false;\r\n\r\n private trailCleanupIntervalId: number;\r\n\r\n private readonly TRAIL_DURATION_MS = 100;\r\n\r\n private readonly MAX_TRAIL_POINTS = 50;\r\n\r\n componentDidLoad() {\r\n this.trailCleanupIntervalId = window.setInterval(() => {\r\n const now = Date.now();\r\n const newTrailPoints = this.cursorTrailPoints.filter(p => now - p.timestamp < this.TRAIL_DURATION_MS);\r\n if (newTrailPoints.length !== this.cursorTrailPoints.length) {\r\n this.cursorTrailPoints = newTrailPoints;\r\n }\r\n }, 50);\r\n }\r\n\r\n disconnectedCallback() {\r\n if (this.trailCleanupIntervalId) {\r\n window.clearInterval(this.trailCleanupIntervalId);\r\n }\r\n }\r\n\r\n @Listen('pointerdown', { target: 'window', passive: true })\r\n handleMouseDown(ev: PointerEvent) {\r\n if (ev.pointerType === 'mouse') {\r\n if (ev.button === KritzelMouseButton.Left) {\r\n this.isLeftButtonDown = true;\r\n this.cursorTrailPoints = [];\r\n }\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n if (this.store.state.pointers.size === 1) {\r\n this.isLeftButtonDown = true;\r\n this.cursorTrailPoints = [];\r\n }\r\n }\r\n }\r\n\r\n @Listen('pointermove', { target: 'window', passive: true })\r\n handlePointerMove(ev: PointerEvent) {\r\n if (!this.isLeftButtonDown) {\r\n return;\r\n }\r\n const newPoint = { x: ev.clientX, y: ev.clientY, timestamp: Date.now() };\r\n const updatedTrail = [newPoint, ...this.cursorTrailPoints];\r\n if (updatedTrail.length > this.MAX_TRAIL_POINTS) {\r\n this.cursorTrailPoints = updatedTrail.slice(0, this.MAX_TRAIL_POINTS);\r\n } else {\r\n this.cursorTrailPoints = updatedTrail;\r\n }\r\n }\r\n\r\n @Listen('pointerup', { target: 'window', passive: true })\r\n handlePointerUp(ev: PointerEvent) {\r\n if (ev.pointerType === 'mouse') {\r\n if(ev.button === KritzelMouseButton.Left){\r\n this.isLeftButtonDown = false;\r\n this.cursorTrailPoints = [];\r\n }\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n if(this.store.state.pointers.size === 0){\r\n this.isLeftButtonDown = false;\r\n this.cursorTrailPoints = [];\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.cursorTrailPoints.length > 1 && (\r\n <svg\r\n class=\"cursor-trail-svg\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n position: 'absolute',\r\n left: '0',\r\n top: '0',\r\n width: '100%',\r\n height: '100%',\r\n pointerEvents: 'none',\r\n opacity: 'var(--kritzel-cursor-trail-opacity, 0.6)',\r\n zIndex: '9000',\r\n }}\r\n >\r\n {this.cursorTrailPoints.slice(1).map((point, index) => {\r\n const prevPoint = this.cursorTrailPoints[index];\r\n const now = Date.now();\r\n const age = now - point.timestamp;\r\n const progress = Math.max(0, Math.min(1, age / this.TRAIL_DURATION_MS));\r\n\r\n if (progress >= 1) return null;\r\n\r\n const baseStrokeWidth = Math.max(2, 15 * (1 - progress));\r\n\r\n return (\r\n <line\r\n key={`trail-segment-${point.timestamp}`}\r\n x1={prevPoint.x.toString()}\r\n y1={prevPoint.y.toString()}\r\n x2={point.x.toString()}\r\n y2={point.y.toString()}\r\n stroke=\"var(--kritzel-cursor-trail-color, rgb(228, 228, 228))\"\r\n stroke-width={baseStrokeWidth.toString()}\r\n stroke-linecap=\"round\"\r\n />\r\n );\r\n })}\r\n </svg>\r\n )}\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -0,0 +1,29 @@
1
+ kritzel-editor{
2
+ display: flex;
3
+ margin: 0;
4
+ position: relative;
5
+ overflow: hidden;
6
+ width: 100%;
7
+ height: 100%;
8
+ align-items: center;
9
+ justify-content: center;
10
+ touch-action: manipulation;
11
+ user-select: none;
12
+ -webkit-touch-callout: none;
13
+ -webkit-user-select: none;
14
+ -khtml-user-select: none;
15
+ -moz-user-select: none;
16
+ -ms-user-select: none;
17
+ user-select: none;
18
+ }
19
+
20
+ kritzel-workspace-manager {
21
+ position: absolute;
22
+ top: 14px;
23
+ left: 14px;
24
+ }
25
+
26
+ kritzel-controls {
27
+ position: absolute;
28
+ bottom: 28px;
29
+ }