js-draw 0.17.3 → 0.18.0

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 (516) hide show
  1. package/.github/workflows/firebase-hosting-merge.yml +2 -0
  2. package/.github/workflows/firebase-hosting-pull-request.yml +2 -0
  3. package/.github/workflows/github-pages.yml +2 -0
  4. package/CHANGELOG.md +10 -1
  5. package/README.md +17 -8
  6. package/build_tools/postDist.ts +71 -0
  7. package/dist/bundle.js +9 -1
  8. package/dist/cjs/build_tools/BundledFile.js +163 -0
  9. package/dist/cjs/build_tools/buildTranslationTemplate.js +119 -0
  10. package/dist/cjs/build_tools/bundle.js +10 -0
  11. package/dist/cjs/build_tools/postDist.js +72 -0
  12. package/dist/{src → cjs/src}/Color4.d.ts +1 -0
  13. package/dist/cjs/src/Color4.js +197 -0
  14. package/dist/{src → cjs/src}/Editor.d.ts +57 -1
  15. package/dist/cjs/src/Editor.js +904 -0
  16. package/dist/{src → cjs/src}/EditorImage.d.ts +4 -2
  17. package/dist/cjs/src/EditorImage.js +486 -0
  18. package/dist/cjs/src/EventDispatcher.js +57 -0
  19. package/dist/cjs/src/Pointer.js +84 -0
  20. package/dist/{src → cjs/src}/SVGLoader.d.ts +4 -0
  21. package/dist/cjs/src/SVGLoader.js +472 -0
  22. package/dist/cjs/src/UndoRedoHistory.js +93 -0
  23. package/dist/cjs/src/Viewport.js +264 -0
  24. package/dist/cjs/src/bundle/bundled.js +24 -0
  25. package/dist/cjs/src/commands/Command.js +34 -0
  26. package/dist/cjs/src/commands/Duplicate.js +39 -0
  27. package/dist/cjs/src/commands/Erase.js +63 -0
  28. package/dist/cjs/src/commands/SerializableCommand.js +42 -0
  29. package/dist/cjs/src/commands/UnresolvedCommand.js +28 -0
  30. package/dist/cjs/src/commands/invertCommand.js +49 -0
  31. package/dist/cjs/src/commands/lib.js +18 -0
  32. package/dist/cjs/src/commands/localization.js +24 -0
  33. package/dist/cjs/src/commands/uniteCommands.js +121 -0
  34. package/dist/cjs/src/components/AbstractComponent.js +258 -0
  35. package/dist/cjs/src/components/ImageBackground.js +146 -0
  36. package/dist/cjs/src/components/ImageComponent.js +152 -0
  37. package/dist/cjs/src/components/RestylableComponent.js +88 -0
  38. package/dist/cjs/src/components/SVGGlobalAttributesObject.js +65 -0
  39. package/dist/cjs/src/components/Stroke.js +191 -0
  40. package/dist/cjs/src/components/TextComponent.js +258 -0
  41. package/dist/cjs/src/components/UnknownSVGObject.js +50 -0
  42. package/dist/cjs/src/components/builders/ArrowBuilder.js +117 -0
  43. package/dist/cjs/src/components/builders/FreehandLineBuilder.js +173 -0
  44. package/dist/cjs/src/components/builders/LineBuilder.js +89 -0
  45. package/dist/cjs/src/components/builders/PressureSensitiveFreehandLineBuilder.js +347 -0
  46. package/dist/cjs/src/components/builders/RectangleBuilder.js +59 -0
  47. package/dist/cjs/src/components/builders/types.js +2 -0
  48. package/dist/cjs/src/components/lib.js +43 -0
  49. package/dist/cjs/src/components/localization.js +13 -0
  50. package/dist/cjs/src/components/util/StrokeSmoother.js +217 -0
  51. package/dist/cjs/src/components/util/describeComponentList.js +16 -0
  52. package/dist/{src → cjs/src}/lib.d.ts +2 -1
  53. package/dist/cjs/src/lib.js +63 -0
  54. package/dist/cjs/src/localization.js +13 -0
  55. package/dist/cjs/src/localizations/de.js +6 -0
  56. package/dist/cjs/src/localizations/en.js +6 -0
  57. package/dist/cjs/src/localizations/es.js +20 -0
  58. package/dist/cjs/src/localizations/getLocalizationTable.js +50 -0
  59. package/dist/cjs/src/math/LineSegment2.js +131 -0
  60. package/dist/cjs/src/math/Mat33.js +332 -0
  61. package/dist/cjs/src/math/Path.js +655 -0
  62. package/dist/cjs/src/math/Rect2.js +234 -0
  63. package/dist/cjs/src/math/Triangle.js +22 -0
  64. package/dist/cjs/src/math/Vec2.js +19 -0
  65. package/dist/cjs/src/math/Vec3.js +177 -0
  66. package/dist/cjs/src/math/lib.js +18 -0
  67. package/dist/cjs/src/math/rounding.js +135 -0
  68. package/dist/cjs/src/rendering/Display.js +214 -0
  69. package/dist/cjs/src/rendering/RenderingStyle.js +48 -0
  70. package/dist/cjs/src/rendering/TextRenderingStyle.js +29 -0
  71. package/dist/cjs/src/rendering/caching/CacheRecord.js +61 -0
  72. package/dist/cjs/src/rendering/caching/CacheRecordManager.js +50 -0
  73. package/dist/cjs/src/rendering/caching/RenderingCache.js +51 -0
  74. package/dist/cjs/src/rendering/caching/RenderingCacheNode.js +326 -0
  75. package/dist/cjs/src/rendering/caching/testUtils.js +27 -0
  76. package/dist/cjs/src/rendering/caching/types.js +2 -0
  77. package/dist/{src → cjs/src}/rendering/lib.d.ts +2 -0
  78. package/dist/cjs/src/rendering/lib.js +16 -0
  79. package/dist/cjs/src/rendering/localization.js +12 -0
  80. package/dist/cjs/src/rendering/renderers/AbstractRenderer.js +170 -0
  81. package/dist/{src → cjs/src}/rendering/renderers/CanvasRenderer.d.ts +25 -0
  82. package/dist/cjs/src/rendering/renderers/CanvasRenderer.js +236 -0
  83. package/dist/cjs/src/rendering/renderers/DummyRenderer.js +112 -0
  84. package/dist/{src → cjs/src}/rendering/renderers/SVGRenderer.d.ts +15 -0
  85. package/dist/cjs/src/rendering/renderers/SVGRenderer.js +311 -0
  86. package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.js +63 -0
  87. package/dist/cjs/src/testing/beforeEachFile.js +12 -0
  88. package/dist/cjs/src/testing/createEditor.js +14 -0
  89. package/dist/cjs/src/testing/lib.d.ts +2 -0
  90. package/dist/cjs/src/testing/lib.js +10 -0
  91. package/dist/cjs/src/testing/loadExpectExtensions.js +28 -0
  92. package/dist/cjs/src/testing/sendPenEvent.d.ts +12 -0
  93. package/dist/cjs/src/testing/sendPenEvent.js +24 -0
  94. package/dist/cjs/src/testing/sendTouchEvent.d.ts +42 -0
  95. package/dist/cjs/src/testing/sendTouchEvent.js +87 -0
  96. package/dist/cjs/src/toolbar/HTMLToolbar.js +383 -0
  97. package/dist/cjs/src/toolbar/IconProvider.js +660 -0
  98. package/dist/cjs/src/toolbar/lib.js +24 -0
  99. package/dist/cjs/src/toolbar/localization.js +51 -0
  100. package/dist/cjs/src/toolbar/makeColorInput.js +120 -0
  101. package/dist/cjs/src/toolbar/types.js +2 -0
  102. package/dist/cjs/src/toolbar/widgets/ActionButtonWidget.js +31 -0
  103. package/dist/cjs/src/toolbar/widgets/BaseToolWidget.js +50 -0
  104. package/dist/cjs/src/toolbar/widgets/BaseWidget.js +313 -0
  105. package/dist/cjs/src/toolbar/widgets/DocumentPropertiesWidget.js +126 -0
  106. package/dist/cjs/src/toolbar/widgets/EraserToolWidget.js +63 -0
  107. package/dist/cjs/src/toolbar/widgets/HandToolWidget.js +201 -0
  108. package/dist/cjs/src/toolbar/widgets/InsertImageWidget.js +176 -0
  109. package/dist/cjs/src/toolbar/widgets/OverflowWidget.js +77 -0
  110. package/dist/cjs/src/toolbar/widgets/PenToolWidget.js +226 -0
  111. package/dist/cjs/src/toolbar/widgets/SelectionToolWidget.js +153 -0
  112. package/dist/cjs/src/toolbar/widgets/TextToolWidget.js +115 -0
  113. package/dist/cjs/src/toolbar/widgets/lib.js +26 -0
  114. package/dist/cjs/src/tools/BaseTool.js +66 -0
  115. package/dist/cjs/src/tools/Eraser.js +112 -0
  116. package/dist/cjs/src/tools/FindTool.js +121 -0
  117. package/dist/cjs/src/tools/PanZoom.js +421 -0
  118. package/dist/cjs/src/tools/PasteHandler.js +99 -0
  119. package/dist/cjs/src/tools/Pen.js +179 -0
  120. package/dist/cjs/src/tools/PipetteTool.js +45 -0
  121. package/dist/cjs/src/tools/SelectionTool/SelectAllShortcutHandler.js +28 -0
  122. package/dist/cjs/src/tools/SelectionTool/Selection.js +488 -0
  123. package/dist/cjs/src/tools/SelectionTool/SelectionHandle.js +85 -0
  124. package/dist/cjs/src/tools/SelectionTool/SelectionTool.js +405 -0
  125. package/dist/cjs/src/tools/SelectionTool/TransformMode.js +107 -0
  126. package/dist/cjs/src/tools/SelectionTool/types.js +14 -0
  127. package/dist/cjs/src/tools/TextTool.js +262 -0
  128. package/dist/cjs/src/tools/ToolController.js +187 -0
  129. package/dist/cjs/src/tools/ToolEnabledGroup.js +14 -0
  130. package/dist/cjs/src/tools/ToolSwitcherShortcut.js +38 -0
  131. package/dist/cjs/src/tools/ToolbarShortcutHandler.js +29 -0
  132. package/dist/cjs/src/tools/UndoRedoShortcut.js +28 -0
  133. package/dist/cjs/src/tools/lib.js +36 -0
  134. package/dist/cjs/src/tools/localization.js +30 -0
  135. package/dist/cjs/src/types.js +38 -0
  136. package/dist/cjs/src/util/assertions.js +51 -0
  137. package/dist/cjs/src/util/fileToBase64.js +15 -0
  138. package/dist/cjs/src/util/untilNextAnimationFrame.js +9 -0
  139. package/dist/cjs/src/util/waitForTimeout.js +9 -0
  140. package/dist/mjs/build_tools/BundledFile.d.ts +13 -0
  141. package/dist/{build_tools/buildTranslationTemplate.js → mjs/build_tools/buildTranslationTemplate.mjs} +1 -1
  142. package/dist/{build_tools/bundle.js → mjs/build_tools/bundle.mjs} +1 -1
  143. package/dist/mjs/build_tools/postDist.d.ts +1 -0
  144. package/dist/mjs/build_tools/postDist.mjs +67 -0
  145. package/dist/mjs/src/Color4.d.ts +61 -0
  146. package/dist/{src/Color4.js → mjs/src/Color4.mjs} +1 -0
  147. package/dist/mjs/src/Editor.d.ts +308 -0
  148. package/dist/{src/Editor.js → mjs/src/Editor.mjs} +86 -49
  149. package/dist/mjs/src/EditorImage.d.ts +97 -0
  150. package/dist/{src/EditorImage.js → mjs/src/EditorImage.mjs} +12 -10
  151. package/dist/mjs/src/EventDispatcher.d.ts +30 -0
  152. package/dist/mjs/src/Pointer.d.ts +24 -0
  153. package/dist/{src/Pointer.js → mjs/src/Pointer.mjs} +1 -1
  154. package/dist/mjs/src/SVGLoader.d.ts +48 -0
  155. package/dist/{src/SVGLoader.js → mjs/src/SVGLoader.mjs} +15 -11
  156. package/dist/mjs/src/UndoRedoHistory.d.ts +19 -0
  157. package/dist/{src/UndoRedoHistory.js → mjs/src/UndoRedoHistory.mjs} +1 -1
  158. package/dist/mjs/src/Viewport.d.ts +71 -0
  159. package/dist/{src/Viewport.js → mjs/src/Viewport.mjs} +5 -5
  160. package/dist/mjs/src/bundle/bundled.d.ts +4 -0
  161. package/dist/{src/bundle/bundled.js → mjs/src/bundle/bundled.mjs} +2 -2
  162. package/dist/mjs/src/commands/Command.d.ts +16 -0
  163. package/dist/mjs/src/commands/Duplicate.d.ts +14 -0
  164. package/dist/{src/commands/Duplicate.js → mjs/src/commands/Duplicate.mjs} +3 -3
  165. package/dist/mjs/src/commands/Erase.d.ts +14 -0
  166. package/dist/{src/commands/Erase.js → mjs/src/commands/Erase.mjs} +3 -3
  167. package/dist/mjs/src/commands/SerializableCommand.d.ts +12 -0
  168. package/dist/{src/commands/SerializableCommand.js → mjs/src/commands/SerializableCommand.mjs} +1 -1
  169. package/dist/mjs/src/commands/UnresolvedCommand.d.ts +14 -0
  170. package/dist/{src/commands/UnresolvedCommand.js → mjs/src/commands/UnresolvedCommand.mjs} +1 -1
  171. package/dist/mjs/src/commands/invertCommand.d.ts +4 -0
  172. package/dist/{src/commands/invertCommand.js → mjs/src/commands/invertCommand.mjs} +2 -2
  173. package/dist/mjs/src/commands/lib.mjs +7 -0
  174. package/dist/mjs/src/commands/localization.d.ts +23 -0
  175. package/dist/mjs/src/commands/uniteCommands.d.ts +4 -0
  176. package/dist/{src/commands/uniteCommands.js → mjs/src/commands/uniteCommands.mjs} +2 -2
  177. package/dist/mjs/src/components/AbstractComponent.d.ts +73 -0
  178. package/dist/{src/components/AbstractComponent.js → mjs/src/components/AbstractComponent.mjs} +4 -4
  179. package/dist/mjs/src/components/ImageBackground.d.ts +42 -0
  180. package/dist/{src/components/ImageBackground.js → mjs/src/components/ImageBackground.mjs} +5 -5
  181. package/dist/mjs/src/components/ImageComponent.d.ts +31 -0
  182. package/dist/{src/components/ImageComponent.js → mjs/src/components/ImageComponent.mjs} +3 -3
  183. package/dist/mjs/src/components/RestylableComponent.d.ts +24 -0
  184. package/dist/{src/components/RestylableComponent.js → mjs/src/components/RestylableComponent.mjs} +4 -4
  185. package/dist/mjs/src/components/SVGGlobalAttributesObject.d.ts +21 -0
  186. package/dist/{src/components/SVGGlobalAttributesObject.js → mjs/src/components/SVGGlobalAttributesObject.mjs} +3 -3
  187. package/dist/mjs/src/components/Stroke.d.ts +40 -0
  188. package/dist/{src/components/Stroke.js → mjs/src/components/Stroke.mjs} +5 -5
  189. package/dist/mjs/src/components/TextComponent.d.ts +53 -0
  190. package/dist/{src/components/TextComponent.js → mjs/src/components/TextComponent.mjs} +7 -7
  191. package/dist/mjs/src/components/UnknownSVGObject.d.ts +18 -0
  192. package/dist/{src/components/UnknownSVGObject.js → mjs/src/components/UnknownSVGObject.mjs} +3 -3
  193. package/dist/mjs/src/components/builders/ArrowBuilder.d.ts +19 -0
  194. package/dist/{src/components/builders/ArrowBuilder.js → mjs/src/components/builders/ArrowBuilder.mjs} +2 -2
  195. package/dist/mjs/src/components/builders/FreehandLineBuilder.d.ts +33 -0
  196. package/dist/{src/components/builders/FreehandLineBuilder.js → mjs/src/components/builders/FreehandLineBuilder.mjs} +7 -7
  197. package/dist/mjs/src/components/builders/LineBuilder.d.ts +18 -0
  198. package/dist/{src/components/builders/LineBuilder.js → mjs/src/components/builders/LineBuilder.mjs} +2 -2
  199. package/dist/mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +36 -0
  200. package/dist/{src/components/builders/PressureSensitiveFreehandLineBuilder.js → mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.mjs} +6 -6
  201. package/dist/mjs/src/components/builders/RectangleBuilder.d.ts +20 -0
  202. package/dist/{src/components/builders/RectangleBuilder.js → mjs/src/components/builders/RectangleBuilder.mjs} +4 -4
  203. package/dist/mjs/src/components/builders/types.d.ts +12 -0
  204. package/dist/mjs/src/components/builders/types.mjs +1 -0
  205. package/dist/{src/components/lib.js → mjs/src/components/lib.d.ts} +3 -3
  206. package/dist/mjs/src/components/lib.mjs +12 -0
  207. package/dist/mjs/src/components/localization.d.ts +11 -0
  208. package/dist/mjs/src/components/util/StrokeSmoother.d.ts +35 -0
  209. package/dist/{src/components/util/StrokeSmoother.js → mjs/src/components/util/StrokeSmoother.mjs} +3 -3
  210. package/dist/mjs/src/components/util/describeComponentList.d.ts +4 -0
  211. package/dist/{src/lib.js → mjs/src/lib.d.ts} +4 -3
  212. package/dist/mjs/src/lib.mjs +34 -0
  213. package/dist/mjs/src/localization.d.ts +14 -0
  214. package/dist/{src/localization.js → mjs/src/localization.mjs} +5 -5
  215. package/dist/mjs/src/localizations/de.d.ts +3 -0
  216. package/dist/{src/localizations/de.js → mjs/src/localizations/de.mjs} +1 -1
  217. package/dist/mjs/src/localizations/en.d.ts +3 -0
  218. package/dist/{src/localizations/en.js → mjs/src/localizations/en.mjs} +1 -1
  219. package/dist/mjs/src/localizations/es.d.ts +3 -0
  220. package/dist/{src/localizations/es.js → mjs/src/localizations/es.mjs} +1 -1
  221. package/dist/mjs/src/localizations/getLocalizationTable.d.ts +3 -0
  222. package/dist/{src/localizations/getLocalizationTable.js → mjs/src/localizations/getLocalizationTable.mjs} +4 -4
  223. package/dist/mjs/src/math/LineSegment2.d.ts +24 -0
  224. package/dist/{src/math/LineSegment2.js → mjs/src/math/LineSegment2.mjs} +2 -2
  225. package/dist/mjs/src/math/Mat33.d.ts +118 -0
  226. package/dist/{src/math/Mat33.js → mjs/src/math/Mat33.mjs} +2 -2
  227. package/dist/mjs/src/math/Path.d.ts +71 -0
  228. package/dist/{src/math/Path.js → mjs/src/math/Path.mjs} +5 -5
  229. package/dist/mjs/src/math/Rect2.d.ts +52 -0
  230. package/dist/{src/math/Rect2.js → mjs/src/math/Rect2.mjs} +2 -2
  231. package/dist/mjs/src/math/Triangle.d.ts +11 -0
  232. package/dist/mjs/src/math/Vec2.d.ts +13 -0
  233. package/dist/{src/math/Vec2.js → mjs/src/math/Vec2.mjs} +1 -1
  234. package/dist/mjs/src/math/Vec3.d.ts +106 -0
  235. package/dist/mjs/src/math/lib.mjs +7 -0
  236. package/dist/mjs/src/math/rounding.d.ts +4 -0
  237. package/dist/mjs/src/rendering/Display.d.ts +75 -0
  238. package/dist/{src/rendering/Display.js → mjs/src/rendering/Display.mjs} +7 -7
  239. package/dist/mjs/src/rendering/RenderingStyle.d.ts +31 -0
  240. package/dist/{src/rendering/RenderingStyle.js → mjs/src/rendering/RenderingStyle.mjs} +1 -1
  241. package/dist/mjs/src/rendering/TextRenderingStyle.d.ts +36 -0
  242. package/dist/{src/rendering/TextRenderingStyle.js → mjs/src/rendering/TextRenderingStyle.mjs} +1 -1
  243. package/dist/mjs/src/rendering/caching/CacheRecord.d.ts +20 -0
  244. package/dist/{src/rendering/caching/CacheRecord.js → mjs/src/rendering/caching/CacheRecord.mjs} +1 -1
  245. package/dist/mjs/src/rendering/caching/CacheRecordManager.d.ts +12 -0
  246. package/dist/{src/rendering/caching/CacheRecordManager.js → mjs/src/rendering/caching/CacheRecordManager.mjs} +1 -1
  247. package/dist/mjs/src/rendering/caching/RenderingCache.d.ts +11 -0
  248. package/dist/{src/rendering/caching/RenderingCache.js → mjs/src/rendering/caching/RenderingCache.mjs} +3 -3
  249. package/dist/mjs/src/rendering/caching/RenderingCacheNode.d.ts +29 -0
  250. package/dist/{src/rendering/caching/RenderingCacheNode.js → mjs/src/rendering/caching/RenderingCacheNode.mjs} +3 -3
  251. package/dist/mjs/src/rendering/caching/testUtils.d.ts +9 -0
  252. package/dist/{src/rendering/caching/testUtils.js → mjs/src/rendering/caching/testUtils.mjs} +4 -4
  253. package/dist/mjs/src/rendering/caching/types.d.ts +19 -0
  254. package/dist/mjs/src/rendering/caching/types.mjs +1 -0
  255. package/dist/{src/rendering/lib.js → mjs/src/rendering/lib.d.ts} +2 -0
  256. package/dist/mjs/src/rendering/lib.mjs +5 -0
  257. package/dist/mjs/src/rendering/localization.d.ts +10 -0
  258. package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +68 -0
  259. package/dist/{src/rendering/renderers/AbstractRenderer.js → mjs/src/rendering/renderers/AbstractRenderer.mjs} +3 -3
  260. package/dist/mjs/src/rendering/renderers/CanvasRenderer.d.ts +63 -0
  261. package/dist/{src/rendering/renderers/CanvasRenderer.js → mjs/src/rendering/renderers/CanvasRenderer.mjs} +32 -5
  262. package/dist/mjs/src/rendering/renderers/DummyRenderer.d.ts +35 -0
  263. package/dist/{src/rendering/renderers/DummyRenderer.js → mjs/src/rendering/renderers/DummyRenderer.mjs} +2 -2
  264. package/dist/mjs/src/rendering/renderers/SVGRenderer.d.ts +57 -0
  265. package/dist/{src/rendering/renderers/SVGRenderer.js → mjs/src/rendering/renderers/SVGRenderer.mjs} +33 -7
  266. package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.d.ts +29 -0
  267. package/dist/{src/rendering/renderers/TextOnlyRenderer.js → mjs/src/rendering/renderers/TextOnlyRenderer.mjs} +2 -2
  268. package/dist/mjs/src/testing/beforeEachFile.d.ts +1 -0
  269. package/dist/{src/testing/beforeEachFile.js → mjs/src/testing/beforeEachFile.mjs} +1 -1
  270. package/dist/mjs/src/testing/createEditor.d.ts +4 -0
  271. package/dist/{src/testing/createEditor.js → mjs/src/testing/createEditor.mjs} +2 -2
  272. package/dist/mjs/src/testing/lib.d.ts +2 -0
  273. package/dist/mjs/src/testing/lib.mjs +2 -0
  274. package/dist/mjs/src/testing/loadExpectExtensions.d.ts +2 -0
  275. package/dist/mjs/src/testing/sendPenEvent.d.ts +12 -0
  276. package/dist/mjs/src/testing/sendPenEvent.mjs +19 -0
  277. package/dist/mjs/src/testing/sendTouchEvent.d.ts +42 -0
  278. package/dist/mjs/src/testing/sendTouchEvent.mjs +62 -0
  279. package/dist/mjs/src/toolbar/HTMLToolbar.d.ts +103 -0
  280. package/dist/{src/toolbar/HTMLToolbar.js → mjs/src/toolbar/HTMLToolbar.mjs} +17 -17
  281. package/dist/mjs/src/toolbar/IconProvider.d.ts +62 -0
  282. package/dist/{src/toolbar/IconProvider.js → mjs/src/toolbar/IconProvider.mjs} +4 -4
  283. package/dist/mjs/src/toolbar/lib.mjs +3 -0
  284. package/dist/mjs/src/toolbar/localization.d.ts +49 -0
  285. package/dist/mjs/src/toolbar/makeColorInput.d.ts +6 -0
  286. package/dist/{src/toolbar/makeColorInput.js → mjs/src/toolbar/makeColorInput.mjs} +3 -3
  287. package/dist/mjs/src/toolbar/types.d.ts +4 -0
  288. package/dist/mjs/src/toolbar/types.mjs +1 -0
  289. package/dist/mjs/src/toolbar/widgets/ActionButtonWidget.d.ts +15 -0
  290. package/dist/{src/toolbar/widgets/ActionButtonWidget.js → mjs/src/toolbar/widgets/ActionButtonWidget.mjs} +1 -1
  291. package/dist/mjs/src/toolbar/widgets/BaseToolWidget.d.ts +11 -0
  292. package/dist/{src/toolbar/widgets/BaseToolWidget.js → mjs/src/toolbar/widgets/BaseToolWidget.mjs} +2 -2
  293. package/dist/mjs/src/toolbar/widgets/BaseWidget.d.ts +72 -0
  294. package/dist/{src/toolbar/widgets/BaseWidget.js → mjs/src/toolbar/widgets/BaseWidget.mjs} +3 -3
  295. package/dist/mjs/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +18 -0
  296. package/dist/{src/toolbar/widgets/DocumentPropertiesWidget.js → mjs/src/toolbar/widgets/DocumentPropertiesWidget.mjs} +9 -7
  297. package/dist/mjs/src/toolbar/widgets/EraserToolWidget.d.ts +17 -0
  298. package/dist/{src/toolbar/widgets/EraserToolWidget.js → mjs/src/toolbar/widgets/EraserToolWidget.mjs} +3 -3
  299. package/dist/mjs/src/toolbar/widgets/HandToolWidget.d.ts +17 -0
  300. package/dist/{src/toolbar/widgets/HandToolWidget.js → mjs/src/toolbar/widgets/HandToolWidget.mjs} +7 -7
  301. package/dist/mjs/src/toolbar/widgets/InsertImageWidget.d.ts +19 -0
  302. package/dist/{src/toolbar/widgets/InsertImageWidget.js → mjs/src/toolbar/widgets/InsertImageWidget.mjs} +8 -8
  303. package/dist/mjs/src/toolbar/widgets/OverflowWidget.d.ts +25 -0
  304. package/dist/{src/toolbar/widgets/OverflowWidget.js → mjs/src/toolbar/widgets/OverflowWidget.mjs} +1 -1
  305. package/dist/mjs/src/toolbar/widgets/PenToolWidget.d.ts +27 -0
  306. package/dist/{src/toolbar/widgets/PenToolWidget.js → mjs/src/toolbar/widgets/PenToolWidget.mjs} +11 -10
  307. package/dist/mjs/src/toolbar/widgets/SelectionToolWidget.d.ts +13 -0
  308. package/dist/{src/toolbar/widgets/SelectionToolWidget.js → mjs/src/toolbar/widgets/SelectionToolWidget.mjs} +8 -8
  309. package/dist/mjs/src/toolbar/widgets/TextToolWidget.d.ts +16 -0
  310. package/dist/{src/toolbar/widgets/TextToolWidget.js → mjs/src/toolbar/widgets/TextToolWidget.mjs} +9 -6
  311. package/dist/mjs/src/toolbar/widgets/lib.mjs +10 -0
  312. package/dist/mjs/src/tools/BaseTool.d.ts +22 -0
  313. package/dist/{src/tools/BaseTool.js → mjs/src/tools/BaseTool.mjs} +1 -1
  314. package/dist/mjs/src/tools/Eraser.d.ts +23 -0
  315. package/dist/{src/tools/Eraser.js → mjs/src/tools/Eraser.mjs} +8 -8
  316. package/dist/mjs/src/tools/FindTool.d.ts +21 -0
  317. package/dist/{src/tools/FindTool.js → mjs/src/tools/FindTool.mjs} +2 -2
  318. package/dist/mjs/src/tools/PanZoom.d.ts +52 -0
  319. package/dist/{src/tools/PanZoom.js → mjs/src/tools/PanZoom.mjs} +8 -8
  320. package/dist/mjs/src/tools/PasteHandler.d.ts +23 -0
  321. package/dist/{src/tools/PasteHandler.js → mjs/src/tools/PasteHandler.mjs} +7 -7
  322. package/dist/mjs/src/tools/Pen.d.ts +39 -0
  323. package/dist/{src/tools/Pen.js → mjs/src/tools/Pen.mjs} +5 -5
  324. package/dist/mjs/src/tools/PipetteTool.d.ts +18 -0
  325. package/dist/{src/tools/PipetteTool.js → mjs/src/tools/PipetteTool.mjs} +1 -1
  326. package/dist/mjs/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +8 -0
  327. package/dist/{src/tools/SelectionTool/SelectAllShortcutHandler.js → mjs/src/tools/SelectionTool/SelectAllShortcutHandler.mjs} +2 -2
  328. package/dist/mjs/src/tools/SelectionTool/Selection.d.ts +64 -0
  329. package/dist/{src/tools/SelectionTool/Selection.js → mjs/src/tools/SelectionTool/Selection.mjs} +12 -12
  330. package/dist/mjs/src/tools/SelectionTool/SelectionHandle.d.ts +38 -0
  331. package/dist/{src/tools/SelectionTool/SelectionHandle.js → mjs/src/tools/SelectionTool/SelectionHandle.mjs} +3 -3
  332. package/dist/mjs/src/tools/SelectionTool/SelectionTool.d.ts +36 -0
  333. package/dist/{src/tools/SelectionTool/SelectionTool.js → mjs/src/tools/SelectionTool/SelectionTool.mjs} +13 -14
  334. package/dist/mjs/src/tools/SelectionTool/TransformMode.d.ts +34 -0
  335. package/dist/{src/tools/SelectionTool/TransformMode.js → mjs/src/tools/SelectionTool/TransformMode.mjs} +4 -4
  336. package/dist/mjs/src/tools/SelectionTool/types.d.ts +9 -0
  337. package/dist/mjs/src/tools/TextTool.d.ts +33 -0
  338. package/dist/{src/tools/TextTool.js → mjs/src/tools/TextTool.mjs} +11 -11
  339. package/dist/mjs/src/tools/ToolController.d.ts +18 -0
  340. package/dist/{src/tools/ToolController.js → mjs/src/tools/ToolController.mjs} +16 -16
  341. package/dist/mjs/src/tools/ToolEnabledGroup.d.ts +6 -0
  342. package/dist/mjs/src/tools/ToolSwitcherShortcut.d.ts +16 -0
  343. package/dist/{src/tools/ToolSwitcherShortcut.js → mjs/src/tools/ToolSwitcherShortcut.mjs} +1 -1
  344. package/dist/mjs/src/tools/ToolbarShortcutHandler.d.ts +12 -0
  345. package/dist/{src/tools/ToolbarShortcutHandler.js → mjs/src/tools/ToolbarShortcutHandler.mjs} +1 -1
  346. package/dist/mjs/src/tools/UndoRedoShortcut.d.ts +8 -0
  347. package/dist/{src/tools/UndoRedoShortcut.js → mjs/src/tools/UndoRedoShortcut.mjs} +1 -1
  348. package/dist/{src/tools/lib.js → mjs/src/tools/lib.d.ts} +1 -1
  349. package/dist/mjs/src/tools/lib.mjs +16 -0
  350. package/dist/mjs/src/tools/localization.d.ts +28 -0
  351. package/dist/mjs/src/types.d.ts +151 -0
  352. package/dist/mjs/src/util/assertions.d.ts +23 -0
  353. package/dist/mjs/src/util/fileToBase64.d.ts +3 -0
  354. package/dist/mjs/src/util/untilNextAnimationFrame.d.ts +3 -0
  355. package/dist/mjs/src/util/waitForTimeout.d.ts +2 -0
  356. package/package.json +34 -33
  357. package/src/Color4.ts +2 -0
  358. package/src/Editor.ts +62 -28
  359. package/src/EditorImage.ts +4 -2
  360. package/src/SVGLoader.ts +4 -0
  361. package/src/lib.ts +2 -1
  362. package/src/rendering/lib.ts +2 -0
  363. package/src/rendering/renderers/CanvasRenderer.ts +27 -0
  364. package/src/rendering/renderers/SVGRenderer.ts +32 -1
  365. package/src/testing/lib.ts +3 -0
  366. package/src/testing/sendPenEvent.ts +31 -0
  367. package/src/testing/sendTouchEvent.ts +36 -1
  368. package/src/toolbar/toolbar.css +5 -0
  369. package/src/toolbar/widgets/DocumentPropertiesWidget.ts +4 -2
  370. package/src/toolbar/widgets/PenToolWidget.ts +1 -0
  371. package/src/toolbar/widgets/TextToolWidget.ts +4 -1
  372. package/src/tools/Eraser.test.ts +11 -10
  373. package/src/tools/PanZoom.test.ts +1 -1
  374. package/src/tools/Pen.test.ts +63 -62
  375. package/src/tools/SelectionTool/SelectionTool.test.ts +15 -14
  376. package/src/tools/SelectionTool/SelectionTool.ts +5 -7
  377. package/tsconfig.json +3 -2
  378. package/tsconfig.mjs.json +9 -0
  379. package/dist/src/testing/sendTouchEvent.d.ts +0 -6
  380. package/dist/src/testing/sendTouchEvent.js +0 -26
  381. /package/dist/{build_tools → cjs/build_tools}/BundledFile.d.ts +0 -0
  382. /package/dist/{build_tools → cjs/build_tools}/buildTranslationTemplate.d.ts +0 -0
  383. /package/dist/{build_tools → cjs/build_tools}/bundle.d.ts +0 -0
  384. /package/dist/{src/components/builders/types.js → cjs/build_tools/postDist.d.ts} +0 -0
  385. /package/dist/{src → cjs/src}/EventDispatcher.d.ts +0 -0
  386. /package/dist/{src → cjs/src}/Pointer.d.ts +0 -0
  387. /package/dist/{src → cjs/src}/UndoRedoHistory.d.ts +0 -0
  388. /package/dist/{src → cjs/src}/Viewport.d.ts +0 -0
  389. /package/dist/{src → cjs/src}/bundle/bundled.d.ts +0 -0
  390. /package/dist/{src → cjs/src}/commands/Command.d.ts +0 -0
  391. /package/dist/{src → cjs/src}/commands/Duplicate.d.ts +0 -0
  392. /package/dist/{src → cjs/src}/commands/Erase.d.ts +0 -0
  393. /package/dist/{src → cjs/src}/commands/SerializableCommand.d.ts +0 -0
  394. /package/dist/{src → cjs/src}/commands/UnresolvedCommand.d.ts +0 -0
  395. /package/dist/{src → cjs/src}/commands/invertCommand.d.ts +0 -0
  396. /package/dist/{src → cjs/src}/commands/lib.d.ts +0 -0
  397. /package/dist/{src → cjs/src}/commands/localization.d.ts +0 -0
  398. /package/dist/{src → cjs/src}/commands/uniteCommands.d.ts +0 -0
  399. /package/dist/{src → cjs/src}/components/AbstractComponent.d.ts +0 -0
  400. /package/dist/{src → cjs/src}/components/ImageBackground.d.ts +0 -0
  401. /package/dist/{src → cjs/src}/components/ImageComponent.d.ts +0 -0
  402. /package/dist/{src → cjs/src}/components/RestylableComponent.d.ts +0 -0
  403. /package/dist/{src → cjs/src}/components/SVGGlobalAttributesObject.d.ts +0 -0
  404. /package/dist/{src → cjs/src}/components/Stroke.d.ts +0 -0
  405. /package/dist/{src → cjs/src}/components/TextComponent.d.ts +0 -0
  406. /package/dist/{src → cjs/src}/components/UnknownSVGObject.d.ts +0 -0
  407. /package/dist/{src → cjs/src}/components/builders/ArrowBuilder.d.ts +0 -0
  408. /package/dist/{src → cjs/src}/components/builders/FreehandLineBuilder.d.ts +0 -0
  409. /package/dist/{src → cjs/src}/components/builders/LineBuilder.d.ts +0 -0
  410. /package/dist/{src → cjs/src}/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +0 -0
  411. /package/dist/{src → cjs/src}/components/builders/RectangleBuilder.d.ts +0 -0
  412. /package/dist/{src → cjs/src}/components/builders/types.d.ts +0 -0
  413. /package/dist/{src → cjs/src}/components/lib.d.ts +0 -0
  414. /package/dist/{src → cjs/src}/components/localization.d.ts +0 -0
  415. /package/dist/{src → cjs/src}/components/util/StrokeSmoother.d.ts +0 -0
  416. /package/dist/{src → cjs/src}/components/util/describeComponentList.d.ts +0 -0
  417. /package/dist/{src → cjs/src}/localization.d.ts +0 -0
  418. /package/dist/{src → cjs/src}/localizations/de.d.ts +0 -0
  419. /package/dist/{src → cjs/src}/localizations/en.d.ts +0 -0
  420. /package/dist/{src → cjs/src}/localizations/es.d.ts +0 -0
  421. /package/dist/{src → cjs/src}/localizations/getLocalizationTable.d.ts +0 -0
  422. /package/dist/{src → cjs/src}/math/LineSegment2.d.ts +0 -0
  423. /package/dist/{src → cjs/src}/math/Mat33.d.ts +0 -0
  424. /package/dist/{src → cjs/src}/math/Path.d.ts +0 -0
  425. /package/dist/{src → cjs/src}/math/Rect2.d.ts +0 -0
  426. /package/dist/{src → cjs/src}/math/Triangle.d.ts +0 -0
  427. /package/dist/{src → cjs/src}/math/Vec2.d.ts +0 -0
  428. /package/dist/{src → cjs/src}/math/Vec3.d.ts +0 -0
  429. /package/dist/{src → cjs/src}/math/lib.d.ts +0 -0
  430. /package/dist/{src → cjs/src}/math/rounding.d.ts +0 -0
  431. /package/dist/{src → cjs/src}/rendering/Display.d.ts +0 -0
  432. /package/dist/{src → cjs/src}/rendering/RenderingStyle.d.ts +0 -0
  433. /package/dist/{src → cjs/src}/rendering/TextRenderingStyle.d.ts +0 -0
  434. /package/dist/{src → cjs/src}/rendering/caching/CacheRecord.d.ts +0 -0
  435. /package/dist/{src → cjs/src}/rendering/caching/CacheRecordManager.d.ts +0 -0
  436. /package/dist/{src → cjs/src}/rendering/caching/RenderingCache.d.ts +0 -0
  437. /package/dist/{src → cjs/src}/rendering/caching/RenderingCacheNode.d.ts +0 -0
  438. /package/dist/{src → cjs/src}/rendering/caching/testUtils.d.ts +0 -0
  439. /package/dist/{src → cjs/src}/rendering/caching/types.d.ts +0 -0
  440. /package/dist/{src → cjs/src}/rendering/localization.d.ts +0 -0
  441. /package/dist/{src → cjs/src}/rendering/renderers/AbstractRenderer.d.ts +0 -0
  442. /package/dist/{src → cjs/src}/rendering/renderers/DummyRenderer.d.ts +0 -0
  443. /package/dist/{src → cjs/src}/rendering/renderers/TextOnlyRenderer.d.ts +0 -0
  444. /package/dist/{src → cjs/src}/testing/beforeEachFile.d.ts +0 -0
  445. /package/dist/{src → cjs/src}/testing/createEditor.d.ts +0 -0
  446. /package/dist/{src → cjs/src}/testing/loadExpectExtensions.d.ts +0 -0
  447. /package/dist/{src → cjs/src}/toolbar/HTMLToolbar.d.ts +0 -0
  448. /package/dist/{src → cjs/src}/toolbar/IconProvider.d.ts +0 -0
  449. /package/dist/{src → cjs/src}/toolbar/lib.d.ts +0 -0
  450. /package/dist/{src → cjs/src}/toolbar/localization.d.ts +0 -0
  451. /package/dist/{src → cjs/src}/toolbar/makeColorInput.d.ts +0 -0
  452. /package/dist/{src → cjs/src}/toolbar/types.d.ts +0 -0
  453. /package/dist/{src → cjs/src}/toolbar/widgets/ActionButtonWidget.d.ts +0 -0
  454. /package/dist/{src → cjs/src}/toolbar/widgets/BaseToolWidget.d.ts +0 -0
  455. /package/dist/{src → cjs/src}/toolbar/widgets/BaseWidget.d.ts +0 -0
  456. /package/dist/{src → cjs/src}/toolbar/widgets/DocumentPropertiesWidget.d.ts +0 -0
  457. /package/dist/{src → cjs/src}/toolbar/widgets/EraserToolWidget.d.ts +0 -0
  458. /package/dist/{src → cjs/src}/toolbar/widgets/HandToolWidget.d.ts +0 -0
  459. /package/dist/{src → cjs/src}/toolbar/widgets/InsertImageWidget.d.ts +0 -0
  460. /package/dist/{src → cjs/src}/toolbar/widgets/OverflowWidget.d.ts +0 -0
  461. /package/dist/{src → cjs/src}/toolbar/widgets/PenToolWidget.d.ts +0 -0
  462. /package/dist/{src → cjs/src}/toolbar/widgets/SelectionToolWidget.d.ts +0 -0
  463. /package/dist/{src → cjs/src}/toolbar/widgets/TextToolWidget.d.ts +0 -0
  464. /package/dist/{src → cjs/src}/toolbar/widgets/lib.d.ts +0 -0
  465. /package/dist/{src → cjs/src}/tools/BaseTool.d.ts +0 -0
  466. /package/dist/{src → cjs/src}/tools/Eraser.d.ts +0 -0
  467. /package/dist/{src → cjs/src}/tools/FindTool.d.ts +0 -0
  468. /package/dist/{src → cjs/src}/tools/PanZoom.d.ts +0 -0
  469. /package/dist/{src → cjs/src}/tools/PasteHandler.d.ts +0 -0
  470. /package/dist/{src → cjs/src}/tools/Pen.d.ts +0 -0
  471. /package/dist/{src → cjs/src}/tools/PipetteTool.d.ts +0 -0
  472. /package/dist/{src → cjs/src}/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -0
  473. /package/dist/{src → cjs/src}/tools/SelectionTool/Selection.d.ts +0 -0
  474. /package/dist/{src → cjs/src}/tools/SelectionTool/SelectionHandle.d.ts +0 -0
  475. /package/dist/{src → cjs/src}/tools/SelectionTool/SelectionTool.d.ts +0 -0
  476. /package/dist/{src → cjs/src}/tools/SelectionTool/TransformMode.d.ts +0 -0
  477. /package/dist/{src → cjs/src}/tools/SelectionTool/types.d.ts +0 -0
  478. /package/dist/{src → cjs/src}/tools/TextTool.d.ts +0 -0
  479. /package/dist/{src → cjs/src}/tools/ToolController.d.ts +0 -0
  480. /package/dist/{src → cjs/src}/tools/ToolEnabledGroup.d.ts +0 -0
  481. /package/dist/{src → cjs/src}/tools/ToolSwitcherShortcut.d.ts +0 -0
  482. /package/dist/{src → cjs/src}/tools/ToolbarShortcutHandler.d.ts +0 -0
  483. /package/dist/{src → cjs/src}/tools/UndoRedoShortcut.d.ts +0 -0
  484. /package/dist/{src → cjs/src}/tools/lib.d.ts +0 -0
  485. /package/dist/{src → cjs/src}/tools/localization.d.ts +0 -0
  486. /package/dist/{src → cjs/src}/types.d.ts +0 -0
  487. /package/dist/{src → cjs/src}/util/assertions.d.ts +0 -0
  488. /package/dist/{src → cjs/src}/util/fileToBase64.d.ts +0 -0
  489. /package/dist/{src → cjs/src}/util/untilNextAnimationFrame.d.ts +0 -0
  490. /package/dist/{src → cjs/src}/util/waitForTimeout.d.ts +0 -0
  491. /package/dist/{build_tools/BundledFile.js → mjs/build_tools/BundledFile.mjs} +0 -0
  492. /package/dist/{src/rendering/caching/types.js → mjs/build_tools/buildTranslationTemplate.d.ts} +0 -0
  493. /package/dist/{src/toolbar/types.js → mjs/build_tools/bundle.d.ts} +0 -0
  494. /package/dist/{src/EventDispatcher.js → mjs/src/EventDispatcher.mjs} +0 -0
  495. /package/dist/{src/commands/Command.js → mjs/src/commands/Command.mjs} +0 -0
  496. /package/dist/{src/commands/lib.js → mjs/src/commands/lib.d.ts} +0 -0
  497. /package/dist/{src/commands/localization.js → mjs/src/commands/localization.mjs} +0 -0
  498. /package/dist/{src/components/localization.js → mjs/src/components/localization.mjs} +0 -0
  499. /package/dist/{src/components/util/describeComponentList.js → mjs/src/components/util/describeComponentList.mjs} +0 -0
  500. /package/dist/{src/math/Triangle.js → mjs/src/math/Triangle.mjs} +0 -0
  501. /package/dist/{src/math/Vec3.js → mjs/src/math/Vec3.mjs} +0 -0
  502. /package/dist/{src/math/lib.js → mjs/src/math/lib.d.ts} +0 -0
  503. /package/dist/{src/math/rounding.js → mjs/src/math/rounding.mjs} +0 -0
  504. /package/dist/{src/rendering/localization.js → mjs/src/rendering/localization.mjs} +0 -0
  505. /package/dist/{src/testing/loadExpectExtensions.js → mjs/src/testing/loadExpectExtensions.mjs} +0 -0
  506. /package/dist/{src/toolbar/lib.js → mjs/src/toolbar/lib.d.ts} +0 -0
  507. /package/dist/{src/toolbar/localization.js → mjs/src/toolbar/localization.mjs} +0 -0
  508. /package/dist/{src/toolbar/widgets/lib.js → mjs/src/toolbar/widgets/lib.d.ts} +0 -0
  509. /package/dist/{src/tools/SelectionTool/types.js → mjs/src/tools/SelectionTool/types.mjs} +0 -0
  510. /package/dist/{src/tools/ToolEnabledGroup.js → mjs/src/tools/ToolEnabledGroup.mjs} +0 -0
  511. /package/dist/{src/tools/localization.js → mjs/src/tools/localization.mjs} +0 -0
  512. /package/dist/{src/types.js → mjs/src/types.mjs} +0 -0
  513. /package/dist/{src/util/assertions.js → mjs/src/util/assertions.mjs} +0 -0
  514. /package/dist/{src/util/fileToBase64.js → mjs/src/util/fileToBase64.mjs} +0 -0
  515. /package/dist/{src/util/untilNextAnimationFrame.js → mjs/src/util/untilNextAnimationFrame.mjs} +0 -0
  516. /package/dist/{src/util/waitForTimeout.js → mjs/src/util/waitForTimeout.mjs} +0 -0
@@ -0,0 +1,10 @@
1
+ export interface TextRendererLocalization {
2
+ pathNodeCount(pathCount: number): string;
3
+ textNodeCount(nodeCount: number): string;
4
+ imageNodeCount(nodeCount: number): string;
5
+ textNode(content: string): string;
6
+ unlabeledImageNode: string;
7
+ imageNode(label: string): string;
8
+ rerenderAsText: string;
9
+ }
10
+ export declare const defaultTextRendererLocalization: TextRendererLocalization;
@@ -0,0 +1,68 @@
1
+ import Color4 from '../../Color4';
2
+ import { LoadSaveDataTable } from '../../components/AbstractComponent';
3
+ import Mat33 from '../../math/Mat33';
4
+ import Path, { PathCommand } from '../../math/Path';
5
+ import Rect2 from '../../math/Rect2';
6
+ import { Point2, Vec2 } from '../../math/Vec2';
7
+ import Viewport from '../../Viewport';
8
+ import RenderingStyle from '../RenderingStyle';
9
+ import TextStyle from '../TextRenderingStyle';
10
+ export interface RenderablePathSpec {
11
+ startPoint: Point2;
12
+ commands: PathCommand[];
13
+ style: RenderingStyle;
14
+ path?: Path;
15
+ }
16
+ export interface RenderableImage {
17
+ transform: Mat33;
18
+ image: HTMLImageElement | HTMLCanvasElement;
19
+ base64Url: string;
20
+ label?: string;
21
+ }
22
+ export default abstract class AbstractRenderer {
23
+ private viewport;
24
+ private selfTransform;
25
+ private transformStack;
26
+ protected constructor(viewport: Viewport);
27
+ protected getViewport(): Viewport;
28
+ abstract displaySize(): Vec2;
29
+ abstract clear(): void;
30
+ protected abstract beginPath(startPoint: Point2): void;
31
+ protected abstract endPath(style: RenderingStyle): void;
32
+ protected abstract lineTo(point: Point2): void;
33
+ protected abstract moveTo(point: Point2): void;
34
+ protected abstract traceCubicBezierCurve(p1: Point2, p2: Point2, p3: Point2): void;
35
+ protected abstract traceQuadraticBezierCurve(controlPoint: Point2, endPoint: Point2): void;
36
+ abstract drawText(text: string, transform: Mat33, style: TextStyle): void;
37
+ abstract drawImage(image: RenderableImage): void;
38
+ abstract isTooSmallToRender(rect: Rect2): boolean;
39
+ setDraftMode(_draftMode: boolean): void;
40
+ protected objectLevel: number;
41
+ private currentPaths;
42
+ private flushPath;
43
+ drawPath(path: RenderablePathSpec): void;
44
+ drawRect(rect: Rect2, lineWidth: number, lineFill: RenderingStyle): void;
45
+ fillRect(rect: Rect2, fill: Color4): void;
46
+ startObject(_boundingBox: Rect2, _clip?: boolean): void;
47
+ /**
48
+ * Notes the end of an object.
49
+ * @param _loaderData - a map from strings to JSON-ifyable objects
50
+ * and contains properties attached to the object by whatever loader loaded the image. This
51
+ * is used to preserve attributes not supported by js-draw when loading/saving an image.
52
+ * Renderers may ignore this.
53
+ *
54
+ * @param _objectTags - a list of labels (e.g. `className`s) to be attached to the object.
55
+ * Renderers may ignore this.
56
+ */
57
+ endObject(_loaderData?: LoadSaveDataTable, _objectTags?: string[]): void;
58
+ protected getNestingLevel(): number;
59
+ abstract drawPoints(...points: Point2[]): void;
60
+ canRenderFromWithoutDataLoss(_other: AbstractRenderer): boolean;
61
+ renderFromOtherOfSameType(_renderTo: Mat33, other: AbstractRenderer): void;
62
+ setTransform(transform: Mat33 | null): void;
63
+ pushTransform(transform: Mat33): void;
64
+ popTransform(): void;
65
+ getCanvasToScreenTransform(): Mat33;
66
+ canvasToScreen(vec: Vec2): Vec2;
67
+ getSizeOfCanvasPixelOnScreen(): number;
68
+ }
@@ -1,6 +1,6 @@
1
- import Path, { PathCommandType } from '../../math/Path';
2
- import { Vec2 } from '../../math/Vec2';
3
- import { stylesEqual } from '../RenderingStyle';
1
+ import Path, { PathCommandType } from '../../math/Path.mjs';
2
+ import { Vec2 } from '../../math/Vec2.mjs';
3
+ import { stylesEqual } from '../RenderingStyle.mjs';
4
4
  export default class AbstractRenderer {
5
5
  constructor(viewport) {
6
6
  this.viewport = viewport;
@@ -0,0 +1,63 @@
1
+ import Mat33 from '../../math/Mat33';
2
+ import Rect2 from '../../math/Rect2';
3
+ import { Point2, Vec2 } from '../../math/Vec2';
4
+ import Vec3 from '../../math/Vec3';
5
+ import Viewport from '../../Viewport';
6
+ import RenderingStyle from '../RenderingStyle';
7
+ import TextStyle from '../TextRenderingStyle';
8
+ import AbstractRenderer, { RenderableImage, RenderablePathSpec } from './AbstractRenderer';
9
+ /**
10
+ * Renders onto a `CanvasRenderingContext2D`.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const editor = new Editor(document.body);
15
+ *
16
+ * const canvas = document.createElement('canvas');
17
+ * const ctx = canvas.getContext('2d');
18
+ *
19
+ * // Ensure that the canvas can fit the entire rendering
20
+ * const viewport = editor.image.getImportExportViewport();
21
+ * canvas.width = viewport.getScreenRectSize().x;
22
+ * canvas.height = viewport.getScreenRectSize().y;
23
+ *
24
+ * // Render editor.image onto the renderer
25
+ * const renderer = new CanvasRenderer(ctx, viewport);
26
+ * editor.image.render(renderer, viewport);
27
+ * ```
28
+ */
29
+ export default class CanvasRenderer extends AbstractRenderer {
30
+ private ctx;
31
+ private ignoreObjectsAboveLevel;
32
+ private ignoringObject;
33
+ private currentObjectBBox;
34
+ private minSquareCurveApproxDist;
35
+ private minRenderSizeAnyDimen;
36
+ private minRenderSizeBothDimens;
37
+ /**
38
+ * Creates a new `CanvasRenderer` that renders to the given rendering context.
39
+ * The `viewport` is used to determine the translation/rotation/scaling of the content
40
+ * to draw.
41
+ */
42
+ constructor(ctx: CanvasRenderingContext2D, viewport: Viewport);
43
+ private transformBy;
44
+ canRenderFromWithoutDataLoss(other: AbstractRenderer): boolean;
45
+ renderFromOtherOfSameType(transformBy: Mat33, other: AbstractRenderer): void;
46
+ setDraftMode(draftMode: boolean): void;
47
+ displaySize(): Vec2;
48
+ clear(): void;
49
+ protected beginPath(startPoint: Point2): void;
50
+ protected endPath(style: RenderingStyle): void;
51
+ protected lineTo(point: Point2): void;
52
+ protected moveTo(point: Point2): void;
53
+ protected traceCubicBezierCurve(p1: Point2, p2: Point2, p3: Point2): void;
54
+ protected traceQuadraticBezierCurve(controlPoint: Vec3, endPoint: Vec3): void;
55
+ drawPath(path: RenderablePathSpec): void;
56
+ drawText(text: string, transform: Mat33, style: TextStyle): void;
57
+ drawImage(image: RenderableImage): void;
58
+ private clipLevels;
59
+ startObject(boundingBox: Rect2, clip?: boolean): void;
60
+ endObject(): void;
61
+ drawPoints(...points: Point2[]): void;
62
+ isTooSmallToRender(rect: Rect2): boolean;
63
+ }
@@ -1,9 +1,34 @@
1
- import Color4 from '../../Color4';
2
- import TextComponent from '../../components/TextComponent';
3
- import Path from '../../math/Path';
4
- import { Vec2 } from '../../math/Vec2';
5
- import AbstractRenderer from './AbstractRenderer';
1
+ import Color4 from '../../Color4.mjs';
2
+ import TextComponent from '../../components/TextComponent.mjs';
3
+ import Path from '../../math/Path.mjs';
4
+ import { Vec2 } from '../../math/Vec2.mjs';
5
+ import AbstractRenderer from './AbstractRenderer.mjs';
6
+ /**
7
+ * Renders onto a `CanvasRenderingContext2D`.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const editor = new Editor(document.body);
12
+ *
13
+ * const canvas = document.createElement('canvas');
14
+ * const ctx = canvas.getContext('2d');
15
+ *
16
+ * // Ensure that the canvas can fit the entire rendering
17
+ * const viewport = editor.image.getImportExportViewport();
18
+ * canvas.width = viewport.getScreenRectSize().x;
19
+ * canvas.height = viewport.getScreenRectSize().y;
20
+ *
21
+ * // Render editor.image onto the renderer
22
+ * const renderer = new CanvasRenderer(ctx, viewport);
23
+ * editor.image.render(renderer, viewport);
24
+ * ```
25
+ */
6
26
  export default class CanvasRenderer extends AbstractRenderer {
27
+ /**
28
+ * Creates a new `CanvasRenderer` that renders to the given rendering context.
29
+ * The `viewport` is used to determine the translation/rotation/scaling of the content
30
+ * to draw.
31
+ */
7
32
  constructor(ctx, viewport) {
8
33
  super(viewport);
9
34
  this.ctx = ctx;
@@ -175,6 +200,7 @@ export default class CanvasRenderer extends AbstractRenderer {
175
200
  this.ignoringObject = false;
176
201
  }
177
202
  }
203
+ // @internal
178
204
  drawPoints(...points) {
179
205
  const pointRadius = 10;
180
206
  for (let i = 0; i < points.length; i++) {
@@ -191,6 +217,7 @@ export default class CanvasRenderer extends AbstractRenderer {
191
217
  this.ctx.fillText(`${i}`, point.x, point.y, pointRadius * 2);
192
218
  }
193
219
  }
220
+ // @internal
194
221
  isTooSmallToRender(rect) {
195
222
  // Should we ignore all objects within this object's bbox?
196
223
  const diagonal = this.getCanvasToScreenTransform().transformVec3(rect.size);
@@ -0,0 +1,35 @@
1
+ import Mat33 from '../../math/Mat33';
2
+ import Rect2 from '../../math/Rect2';
3
+ import { Point2, Vec2 } from '../../math/Vec2';
4
+ import Vec3 from '../../math/Vec3';
5
+ import Viewport from '../../Viewport';
6
+ import RenderingStyle from '../RenderingStyle';
7
+ import TextStyle from '../TextRenderingStyle';
8
+ import AbstractRenderer, { RenderableImage } from './AbstractRenderer';
9
+ export default class DummyRenderer extends AbstractRenderer {
10
+ clearedCount: number;
11
+ renderedPathCount: number;
12
+ lastFillStyle: RenderingStyle | null;
13
+ lastPoint: Point2 | null;
14
+ objectNestingLevel: number;
15
+ lastText: string | null;
16
+ lastImage: RenderableImage | null;
17
+ pointBuffer: Point2[];
18
+ constructor(viewport: Viewport);
19
+ displaySize(): Vec2;
20
+ clear(): void;
21
+ protected beginPath(startPoint: Vec3): void;
22
+ protected endPath(style: RenderingStyle): void;
23
+ protected lineTo(point: Vec3): void;
24
+ protected moveTo(point: Point2): void;
25
+ protected traceCubicBezierCurve(p1: Vec3, p2: Vec3, p3: Vec3): void;
26
+ protected traceQuadraticBezierCurve(controlPoint: Vec3, endPoint: Vec3): void;
27
+ drawPoints(..._points: Vec3[]): void;
28
+ drawText(text: string, _transform: Mat33, _style: TextStyle): void;
29
+ drawImage(image: RenderableImage): void;
30
+ startObject(boundingBox: Rect2, _clip: boolean): void;
31
+ endObject(): void;
32
+ isTooSmallToRender(_rect: Rect2): boolean;
33
+ canRenderFromWithoutDataLoss(other: AbstractRenderer): boolean;
34
+ renderFromOtherOfSameType(transform: Mat33, other: AbstractRenderer): void;
35
+ }
@@ -1,5 +1,5 @@
1
- import { Vec2 } from '../../math/Vec2';
2
- import AbstractRenderer from './AbstractRenderer';
1
+ import { Vec2 } from '../../math/Vec2.mjs';
2
+ import AbstractRenderer from './AbstractRenderer.mjs';
3
3
  // Renderer that outputs almost nothing. Useful for automated tests.
4
4
  export default class DummyRenderer extends AbstractRenderer {
5
5
  constructor(viewport) {
@@ -0,0 +1,57 @@
1
+ import { LoadSaveDataTable } from '../../components/AbstractComponent';
2
+ import Mat33 from '../../math/Mat33';
3
+ import Rect2 from '../../math/Rect2';
4
+ import { Point2, Vec2 } from '../../math/Vec2';
5
+ import Viewport from '../../Viewport';
6
+ import RenderingStyle from '../RenderingStyle';
7
+ import TextStyle from '../TextRenderingStyle';
8
+ import AbstractRenderer, { RenderableImage, RenderablePathSpec } from './AbstractRenderer';
9
+ export declare const renderedStylesheetId = "js-draw-style-sheet";
10
+ /**
11
+ * Renders onto an `SVGElement`.
12
+ *
13
+ * @see {@link Editor.toSVG}
14
+ */
15
+ export default class SVGRenderer extends AbstractRenderer {
16
+ private elem;
17
+ private sanitize;
18
+ private lastPathStyle;
19
+ private lastPathString;
20
+ private objectElems;
21
+ private overwrittenAttrs;
22
+ /**
23
+ * Creates a renderer that renders onto `elem`. If `sanitize`, don't render potentially untrusted data.
24
+ *
25
+ * `viewport` is used to determine the translation/rotation/scaling/output size of the rendered
26
+ * data.
27
+ */
28
+ constructor(elem: SVGSVGElement, viewport: Viewport, sanitize?: boolean);
29
+ private addStyleSheet;
30
+ setRootSVGAttribute(name: string, value: string | null): void;
31
+ displaySize(): Vec2;
32
+ clear(): void;
33
+ private addPathToSVG;
34
+ drawPath(pathSpec: RenderablePathSpec): void;
35
+ private transformFrom;
36
+ private textContainer;
37
+ private textContainerTransform;
38
+ private textParentStyle;
39
+ drawText(text: string, transform: Mat33, style: TextStyle): void;
40
+ drawImage(image: RenderableImage): void;
41
+ startObject(boundingBox: Rect2): void;
42
+ endObject(loaderData?: LoadSaveDataTable, elemClassNames?: string[]): void;
43
+ private unimplementedMessage;
44
+ protected beginPath(_startPoint: Point2): void;
45
+ protected endPath(_style: RenderingStyle): void;
46
+ protected lineTo(_point: Point2): void;
47
+ protected moveTo(_point: Point2): void;
48
+ protected traceCubicBezierCurve(_controlPoint1: Point2, _controlPoint2: Point2, _endPoint: Point2): void;
49
+ protected traceQuadraticBezierCurve(_controlPoint: Point2, _endPoint: Point2): void;
50
+ drawPoints(...points: Point2[]): void;
51
+ drawSVGElem(elem: SVGElement): void;
52
+ isTooSmallToRender(_rect: Rect2): boolean;
53
+ static fromViewport(viewport: Viewport, sanitize?: boolean): {
54
+ element: SVGSVGElement;
55
+ renderer: SVGRenderer;
56
+ };
57
+ }
@@ -1,13 +1,23 @@
1
- import Mat33 from '../../math/Mat33';
2
- import Path from '../../math/Path';
3
- import { toRoundedString } from '../../math/rounding';
4
- import { Vec2 } from '../../math/Vec2';
5
- import { svgAttributesDataKey, svgStyleAttributesDataKey } from '../../SVGLoader';
6
- import AbstractRenderer from './AbstractRenderer';
1
+ import Mat33 from '../../math/Mat33.mjs';
2
+ import Path from '../../math/Path.mjs';
3
+ import { toRoundedString } from '../../math/rounding.mjs';
4
+ import { Vec2 } from '../../math/Vec2.mjs';
5
+ import { svgAttributesDataKey, svgStyleAttributesDataKey } from '../../SVGLoader.mjs';
6
+ import AbstractRenderer from './AbstractRenderer.mjs';
7
7
  export const renderedStylesheetId = 'js-draw-style-sheet';
8
8
  const svgNameSpace = 'http://www.w3.org/2000/svg';
9
+ /**
10
+ * Renders onto an `SVGElement`.
11
+ *
12
+ * @see {@link Editor.toSVG}
13
+ */
9
14
  export default class SVGRenderer extends AbstractRenderer {
10
- // Renders onto `elem`. If `sanitize`, don't render potentially untrusted data.
15
+ /**
16
+ * Creates a renderer that renders onto `elem`. If `sanitize`, don't render potentially untrusted data.
17
+ *
18
+ * `viewport` is used to determine the translation/rotation/scaling/output size of the rendered
19
+ * data.
20
+ */
11
21
  constructor(elem, viewport, sanitize = false) {
12
22
  super(viewport);
13
23
  this.elem = elem;
@@ -275,4 +285,20 @@ export default class SVGRenderer extends AbstractRenderer {
275
285
  isTooSmallToRender(_rect) {
276
286
  return false;
277
287
  }
288
+ // Creates a new SVG element and SVGRenerer with attributes set for the given Viewport.
289
+ static fromViewport(viewport, sanitize = true) {
290
+ const svgNameSpace = 'http://www.w3.org/2000/svg';
291
+ const result = document.createElementNS(svgNameSpace, 'svg');
292
+ const rect = viewport.getScreenRectSize();
293
+ // rect.x -> size of rect in x direction, rect.y -> size of rect in y direction.
294
+ result.setAttribute('viewBox', [0, 0, rect.x, rect.y].map(part => toRoundedString(part)).join(' '));
295
+ result.setAttribute('width', toRoundedString(rect.x));
296
+ result.setAttribute('height', toRoundedString(rect.y));
297
+ // Ensure the image can be identified as an SVG if downloaded.
298
+ // See https://jwatt.org/svg/authoring/
299
+ result.setAttribute('version', '1.1');
300
+ result.setAttribute('baseProfile', 'full');
301
+ result.setAttribute('xmlns', svgNameSpace);
302
+ return { element: result, renderer: new SVGRenderer(result, viewport, sanitize) };
303
+ }
278
304
  }
@@ -0,0 +1,29 @@
1
+ import Mat33 from '../../math/Mat33';
2
+ import Rect2 from '../../math/Rect2';
3
+ import Vec3 from '../../math/Vec3';
4
+ import Viewport from '../../Viewport';
5
+ import { TextRendererLocalization } from '../localization';
6
+ import RenderingStyle from '../RenderingStyle';
7
+ import TextStyle from '../TextRenderingStyle';
8
+ import AbstractRenderer, { RenderableImage } from './AbstractRenderer';
9
+ export default class TextOnlyRenderer extends AbstractRenderer {
10
+ private localizationTable;
11
+ private descriptionBuilder;
12
+ private pathCount;
13
+ private textNodeCount;
14
+ private imageNodeCount;
15
+ constructor(viewport: Viewport, localizationTable: TextRendererLocalization);
16
+ displaySize(): Vec3;
17
+ clear(): void;
18
+ getDescription(): string;
19
+ protected beginPath(_startPoint: Vec3): void;
20
+ protected endPath(_style: RenderingStyle): void;
21
+ protected lineTo(_point: Vec3): void;
22
+ protected moveTo(_point: Vec3): void;
23
+ protected traceCubicBezierCurve(_p1: Vec3, _p2: Vec3, _p3: Vec3): void;
24
+ protected traceQuadraticBezierCurve(_controlPoint: Vec3, _endPoint: Vec3): void;
25
+ drawText(text: string, _transform: Mat33, _style: TextStyle): void;
26
+ drawImage(image: RenderableImage): void;
27
+ isTooSmallToRender(rect: Rect2): boolean;
28
+ drawPoints(..._points: Vec3[]): void;
29
+ }
@@ -1,5 +1,5 @@
1
- import { Vec2 } from '../../math/Vec2';
2
- import AbstractRenderer from './AbstractRenderer';
1
+ import { Vec2 } from '../../math/Vec2.mjs';
2
+ import AbstractRenderer from './AbstractRenderer.mjs';
3
3
  // Outputs a description of what was rendered.
4
4
  export default class TextOnlyRenderer extends AbstractRenderer {
5
5
  constructor(viewport, localizationTable) {
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import loadExpectExtensions from './loadExpectExtensions';
1
+ import loadExpectExtensions from './loadExpectExtensions.mjs';
2
2
  loadExpectExtensions();
3
3
  jest.useFakeTimers();
4
4
  // jsdom doesn't support HTMLCanvasElement#getContext — it logs an error
@@ -0,0 +1,4 @@
1
+ import Editor from '../Editor';
2
+ /** Creates an editor. Should only be used in test files. */
3
+ declare const _default: () => Editor;
4
+ export default _default;
@@ -1,5 +1,5 @@
1
- import { RenderingMode } from '../rendering/Display';
2
- import Editor from '../Editor';
1
+ import { RenderingMode } from '../rendering/Display.mjs';
2
+ import Editor from '../Editor.mjs';
3
3
  /** Creates an editor. Should only be used in test files. */
4
4
  export default () => {
5
5
  if (jest === undefined) {
@@ -0,0 +1,2 @@
1
+ export { default as sendPenEvent } from './sendPenEvent';
2
+ export { default as sendTouchEvent } from './sendTouchEvent';
@@ -0,0 +1,2 @@
1
+ export { default as sendPenEvent } from './sendPenEvent.mjs';
2
+ export { default as sendTouchEvent } from './sendTouchEvent.mjs';
@@ -0,0 +1,2 @@
1
+ export declare const loadExpectExtensions: () => void;
2
+ export default loadExpectExtensions;
@@ -0,0 +1,12 @@
1
+ import Editor from '../Editor';
2
+ import { Point2 } from '../math/Vec2';
3
+ import Pointer from '../Pointer';
4
+ import { InputEvtType } from '../types';
5
+ /**
6
+ * Dispatch a pen event to the currently selected tool.
7
+ * Intended for unit tests.
8
+ *
9
+ * @see {@link sendTouchEvent}
10
+ */
11
+ declare const sendPenEvent: (editor: Editor, eventType: InputEvtType.PointerDownEvt | InputEvtType.PointerMoveEvt | InputEvtType.PointerUpEvt, point: Point2, allPointers?: Pointer[]) => void;
12
+ export default sendPenEvent;
@@ -0,0 +1,19 @@
1
+ import Pointer from '../Pointer.mjs';
2
+ import { InputEvtType } from '../types.mjs';
3
+ /**
4
+ * Dispatch a pen event to the currently selected tool.
5
+ * Intended for unit tests.
6
+ *
7
+ * @see {@link sendTouchEvent}
8
+ */
9
+ const sendPenEvent = (editor, eventType, point, allPointers) => {
10
+ const mainPointer = Pointer.ofCanvasPoint(point, eventType !== InputEvtType.PointerUpEvt, editor.viewport);
11
+ editor.toolController.dispatchInputEvent({
12
+ kind: eventType,
13
+ allPointers: allPointers !== null && allPointers !== void 0 ? allPointers : [
14
+ mainPointer,
15
+ ],
16
+ current: mainPointer,
17
+ });
18
+ };
19
+ export default sendPenEvent;
@@ -0,0 +1,42 @@
1
+ import Editor from '../Editor';
2
+ import { Vec2 } from '../math/Vec2';
3
+ import Pointer from '../Pointer';
4
+ import { InputEvtType } from '../types';
5
+ /**
6
+ * Dispatch a touch event to the currently selected tool. Intended for unit tests.
7
+ *
8
+ * @see {@link sendPenEvent}
9
+ *
10
+ * @example
11
+ * **Simulating a horizontal swipe gesture:**
12
+ * ```ts
13
+ * sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
14
+ * for (let i = 1; i <= 10; i++) {
15
+ * jest.advanceTimersByTime(10);
16
+ * sendTouchEvent(editor, InputEvtType.PointerMoveEvt, Vec2.of(i * 10, 0));
17
+ * }
18
+ * ```
19
+ *
20
+ * @example
21
+ * **Simulating a pinch gesture.** This example assumes that you're using [Jest with timer mocks enabled](https://jestjs.io/docs/timer-mocks).
22
+ * ```ts
23
+ * let firstPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
24
+ * let secondPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(100, 0), [ firstPointer ]);
25
+ *
26
+ * // Simulate a pinch
27
+ * const maxIterations = 10;
28
+ * for (let i = 0; i < maxIterations; i++) {
29
+ * // Use the unit testing framework's tool for increasing the current time
30
+ * // returned by (new Date()).getTime(), etc.
31
+ * jest.advanceTimersByTime(100);
32
+ *
33
+ * const point1 = Vec2.of(-i * 5, 0);
34
+ * const point2 = Vec2.of(i * 5 + 100, 0);
35
+ *
36
+ * firstPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point1, [ secondPointer ]);
37
+ * secondPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point2, [ firstPointer ]);
38
+ * }
39
+ * ```
40
+ */
41
+ declare const sendTouchEvent: (editor: Editor, eventType: InputEvtType.PointerDownEvt | InputEvtType.PointerMoveEvt | InputEvtType.PointerUpEvt, screenPos: Vec2, allOtherPointers?: Pointer[]) => Pointer;
42
+ export default sendTouchEvent;
@@ -0,0 +1,62 @@
1
+ import Pointer, { PointerDevice } from '../Pointer.mjs';
2
+ import { InputEvtType } from '../types.mjs';
3
+ /**
4
+ * Dispatch a touch event to the currently selected tool. Intended for unit tests.
5
+ *
6
+ * @see {@link sendPenEvent}
7
+ *
8
+ * @example
9
+ * **Simulating a horizontal swipe gesture:**
10
+ * ```ts
11
+ * sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
12
+ * for (let i = 1; i <= 10; i++) {
13
+ * jest.advanceTimersByTime(10);
14
+ * sendTouchEvent(editor, InputEvtType.PointerMoveEvt, Vec2.of(i * 10, 0));
15
+ * }
16
+ * ```
17
+ *
18
+ * @example
19
+ * **Simulating a pinch gesture.** This example assumes that you're using [Jest with timer mocks enabled](https://jestjs.io/docs/timer-mocks).
20
+ * ```ts
21
+ * let firstPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
22
+ * let secondPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(100, 0), [ firstPointer ]);
23
+ *
24
+ * // Simulate a pinch
25
+ * const maxIterations = 10;
26
+ * for (let i = 0; i < maxIterations; i++) {
27
+ * // Use the unit testing framework's tool for increasing the current time
28
+ * // returned by (new Date()).getTime(), etc.
29
+ * jest.advanceTimersByTime(100);
30
+ *
31
+ * const point1 = Vec2.of(-i * 5, 0);
32
+ * const point2 = Vec2.of(i * 5 + 100, 0);
33
+ *
34
+ * firstPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point1, [ secondPointer ]);
35
+ * secondPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point2, [ firstPointer ]);
36
+ * }
37
+ * ```
38
+ */
39
+ const sendTouchEvent = (editor, eventType, screenPos, allOtherPointers) => {
40
+ const canvasPos = editor.viewport.screenToCanvas(screenPos);
41
+ let ptrId = 0;
42
+ let maxPtrId = 0;
43
+ // Get a unique ID for the main pointer
44
+ // (try to use id=0, but don't use it if it's already in use).
45
+ for (const pointer of allOtherPointers !== null && allOtherPointers !== void 0 ? allOtherPointers : []) {
46
+ maxPtrId = Math.max(pointer.id, maxPtrId);
47
+ if (pointer.id === ptrId) {
48
+ ptrId = maxPtrId + 1;
49
+ }
50
+ }
51
+ const mainPointer = Pointer.ofCanvasPoint(canvasPos, eventType !== InputEvtType.PointerUpEvt, editor.viewport, ptrId, PointerDevice.Touch);
52
+ editor.toolController.dispatchInputEvent({
53
+ kind: eventType,
54
+ allPointers: [
55
+ ...(allOtherPointers !== null && allOtherPointers !== void 0 ? allOtherPointers : []),
56
+ mainPointer,
57
+ ],
58
+ current: mainPointer,
59
+ });
60
+ return mainPointer;
61
+ };
62
+ export default sendTouchEvent;