js-draw 0.25.1 → 1.0.1

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 (750) hide show
  1. package/README.md +80 -26
  2. package/build-config.json +22 -21
  3. package/dist/Editor.css +1281 -0
  4. package/dist/bundle.js +3 -3
  5. package/dist/bundledStyles.js +1 -1
  6. package/dist/cjs/Editor.d.ts +91 -12
  7. package/dist/cjs/Editor.js +619 -590
  8. package/dist/cjs/EditorImage.d.ts +5 -2
  9. package/dist/cjs/EditorImage.js +258 -297
  10. package/dist/cjs/EventDispatcher.js +17 -19
  11. package/dist/cjs/Pointer.d.ts +3 -1
  12. package/dist/cjs/Pointer.js +41 -44
  13. package/dist/cjs/SVGLoader.d.ts +7 -1
  14. package/dist/cjs/SVGLoader.js +373 -474
  15. package/dist/cjs/UndoRedoHistory.js +28 -40
  16. package/dist/cjs/Viewport.d.ts +1 -4
  17. package/dist/cjs/Viewport.js +150 -193
  18. package/dist/cjs/bundle/bundled.js +4 -1
  19. package/dist/cjs/commands/Command.js +22 -49
  20. package/dist/cjs/commands/Duplicate.js +28 -44
  21. package/dist/cjs/commands/Erase.js +36 -54
  22. package/dist/cjs/commands/SerializableCommand.js +20 -35
  23. package/dist/cjs/commands/UnresolvedCommand.js +14 -29
  24. package/dist/cjs/commands/invertCommand.js +29 -51
  25. package/dist/cjs/commands/lib.js +9 -6
  26. package/dist/cjs/commands/localization.d.ts +1 -1
  27. package/dist/cjs/commands/localization.js +9 -9
  28. package/dist/cjs/commands/uniteCommands.js +57 -87
  29. package/dist/cjs/components/AbstractComponent.d.ts +11 -3
  30. package/dist/cjs/components/AbstractComponent.js +141 -169
  31. package/dist/cjs/components/BackgroundComponent.d.ts +3 -6
  32. package/dist/cjs/components/BackgroundComponent.js +124 -149
  33. package/dist/cjs/components/ImageComponent.d.ts +3 -5
  34. package/dist/cjs/components/ImageComponent.js +95 -175
  35. package/dist/cjs/components/RestylableComponent.d.ts +1 -1
  36. package/dist/cjs/components/RestylableComponent.js +41 -56
  37. package/dist/cjs/components/SVGGlobalAttributesObject.d.ts +1 -3
  38. package/dist/cjs/components/SVGGlobalAttributesObject.js +34 -51
  39. package/dist/cjs/components/Stroke.d.ts +4 -6
  40. package/dist/cjs/components/Stroke.js +95 -121
  41. package/dist/cjs/components/TextComponent.d.ts +2 -4
  42. package/dist/cjs/components/TextComponent.js +189 -234
  43. package/dist/cjs/components/UnknownSVGObject.d.ts +1 -3
  44. package/dist/cjs/components/UnknownSVGObject.js +30 -43
  45. package/dist/cjs/components/builders/ArrowBuilder.d.ts +1 -1
  46. package/dist/cjs/components/builders/ArrowBuilder.js +43 -42
  47. package/dist/cjs/components/builders/CircleBuilder.js +43 -43
  48. package/dist/cjs/components/builders/FreehandLineBuilder.d.ts +3 -2
  49. package/dist/cjs/components/builders/FreehandLineBuilder.js +73 -86
  50. package/dist/cjs/components/builders/LineBuilder.d.ts +1 -1
  51. package/dist/cjs/components/builders/LineBuilder.js +38 -36
  52. package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +1 -1
  53. package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.js +131 -139
  54. package/dist/cjs/components/builders/RectangleBuilder.d.ts +1 -1
  55. package/dist/cjs/components/builders/RectangleBuilder.js +31 -31
  56. package/dist/cjs/components/builders/types.d.ts +1 -1
  57. package/dist/cjs/components/lib.d.ts +3 -1
  58. package/dist/cjs/components/lib.js +10 -7
  59. package/dist/cjs/components/localization.js +4 -4
  60. package/dist/cjs/components/util/StrokeSmoother.d.ts +1 -2
  61. package/dist/cjs/components/util/StrokeSmoother.js +67 -72
  62. package/dist/cjs/components/util/describeComponentList.d.ts +1 -1
  63. package/dist/cjs/components/util/describeComponentList.js +4 -5
  64. package/dist/cjs/dialogs/makeAboutDialog.d.ts +15 -0
  65. package/dist/cjs/dialogs/makeAboutDialog.js +54 -0
  66. package/dist/cjs/inputEvents.d.ts +84 -0
  67. package/dist/cjs/inputEvents.js +40 -0
  68. package/dist/cjs/lib.d.ts +29 -13
  69. package/dist/cjs/lib.js +38 -23
  70. package/dist/cjs/localization.js +19 -18
  71. package/dist/cjs/localizations/de.js +117 -13
  72. package/dist/cjs/localizations/en.js +4 -13
  73. package/dist/cjs/localizations/es.js +62 -23
  74. package/dist/cjs/localizations/getLocalizationTable.js +15 -13
  75. package/dist/cjs/rendering/Display.d.ts +1 -2
  76. package/dist/cjs/rendering/Display.js +70 -83
  77. package/dist/cjs/rendering/RenderablePathSpec.d.ts +15 -0
  78. package/dist/cjs/rendering/RenderablePathSpec.js +70 -0
  79. package/dist/cjs/rendering/RenderingStyle.d.ts +4 -4
  80. package/dist/cjs/rendering/RenderingStyle.js +18 -28
  81. package/dist/cjs/rendering/TextRenderingStyle.d.ts +10 -10
  82. package/dist/cjs/rendering/TextRenderingStyle.js +13 -18
  83. package/dist/cjs/rendering/caching/CacheRecord.d.ts +1 -2
  84. package/dist/cjs/rendering/caching/CacheRecord.js +20 -22
  85. package/dist/cjs/rendering/caching/CacheRecordManager.d.ts +1 -1
  86. package/dist/cjs/rendering/caching/CacheRecordManager.js +17 -15
  87. package/dist/cjs/rendering/caching/RenderingCache.js +19 -19
  88. package/dist/cjs/rendering/caching/RenderingCacheNode.d.ts +1 -1
  89. package/dist/cjs/rendering/caching/RenderingCacheNode.js +98 -118
  90. package/dist/cjs/rendering/caching/testUtils.js +24 -23
  91. package/dist/cjs/rendering/caching/types.d.ts +3 -3
  92. package/dist/cjs/rendering/lib.js +8 -5
  93. package/dist/cjs/rendering/localization.js +5 -5
  94. package/dist/cjs/rendering/renderers/AbstractRenderer.d.ts +2 -11
  95. package/dist/cjs/rendering/renderers/AbstractRenderer.js +53 -57
  96. package/dist/cjs/rendering/renderers/CanvasRenderer.d.ts +3 -5
  97. package/dist/cjs/rendering/renderers/CanvasRenderer.js +91 -106
  98. package/dist/cjs/rendering/renderers/DummyRenderer.d.ts +1 -4
  99. package/dist/cjs/rendering/renderers/DummyRenderer.js +56 -76
  100. package/dist/cjs/rendering/renderers/SVGRenderer.d.ts +5 -5
  101. package/dist/cjs/rendering/renderers/SVGRenderer.js +194 -176
  102. package/dist/cjs/rendering/renderers/TextOnlyRenderer.d.ts +1 -3
  103. package/dist/cjs/rendering/renderers/TextOnlyRenderer.js +47 -72
  104. package/dist/cjs/shortcuts/KeyBinding.d.ts +5 -0
  105. package/dist/cjs/shortcuts/KeyBinding.js +94 -70
  106. package/dist/cjs/shortcuts/KeyboardShortcutManager.d.ts +1 -1
  107. package/dist/cjs/shortcuts/KeyboardShortcutManager.js +36 -45
  108. package/dist/cjs/shortcuts/lib.js +5 -2
  109. package/dist/cjs/testing/createEditor.js +7 -4
  110. package/dist/cjs/testing/getUniquePointerId.js +4 -5
  111. package/dist/cjs/testing/lib.js +5 -2
  112. package/dist/cjs/testing/sendPenEvent.d.ts +2 -2
  113. package/dist/cjs/testing/sendPenEvent.js +10 -7
  114. package/dist/cjs/testing/sendTouchEvent.d.ts +2 -2
  115. package/dist/cjs/testing/sendTouchEvent.js +34 -16
  116. package/dist/cjs/toolbar/AbstractToolbar.d.ts +166 -0
  117. package/dist/cjs/toolbar/AbstractToolbar.js +410 -0
  118. package/dist/cjs/toolbar/DropdownToolbar.d.ts +43 -0
  119. package/dist/cjs/toolbar/DropdownToolbar.js +176 -0
  120. package/dist/cjs/toolbar/EdgeToolbar.d.ts +47 -0
  121. package/dist/cjs/toolbar/EdgeToolbar.js +422 -0
  122. package/dist/cjs/toolbar/IconProvider.d.ts +54 -30
  123. package/dist/cjs/toolbar/IconProvider.js +652 -224
  124. package/dist/cjs/toolbar/constants.d.ts +1 -0
  125. package/dist/cjs/toolbar/constants.js +4 -0
  126. package/dist/cjs/toolbar/lib.d.ts +4 -2
  127. package/dist/cjs/toolbar/lib.js +10 -3
  128. package/dist/cjs/toolbar/localization.d.ts +9 -2
  129. package/dist/cjs/toolbar/localization.js +26 -19
  130. package/dist/cjs/toolbar/types.d.ts +7 -0
  131. package/dist/cjs/toolbar/widgets/ActionButtonWidget.d.ts +1 -1
  132. package/dist/cjs/toolbar/widgets/ActionButtonWidget.js +23 -39
  133. package/dist/cjs/toolbar/widgets/BaseToolWidget.d.ts +1 -1
  134. package/dist/cjs/toolbar/widgets/BaseToolWidget.js +35 -37
  135. package/dist/cjs/toolbar/widgets/BaseWidget.d.ts +60 -5
  136. package/dist/cjs/toolbar/widgets/BaseWidget.js +232 -177
  137. package/dist/cjs/toolbar/widgets/DocumentPropertiesWidget.js +130 -117
  138. package/dist/cjs/toolbar/widgets/EraserToolWidget.d.ts +1 -3
  139. package/dist/cjs/toolbar/widgets/EraserToolWidget.js +45 -73
  140. package/dist/cjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
  141. package/dist/cjs/toolbar/widgets/HandToolWidget.js +126 -141
  142. package/dist/cjs/toolbar/widgets/InsertImageWidget.d.ts +9 -7
  143. package/dist/cjs/toolbar/widgets/InsertImageWidget.js +147 -212
  144. package/dist/cjs/toolbar/widgets/OverflowWidget.js +33 -61
  145. package/dist/cjs/toolbar/widgets/PenToolWidget.d.ts +8 -1
  146. package/dist/cjs/toolbar/widgets/PenToolWidget.js +162 -234
  147. package/dist/cjs/toolbar/widgets/SelectionToolWidget.d.ts +3 -1
  148. package/dist/cjs/toolbar/widgets/SelectionToolWidget.js +105 -177
  149. package/dist/cjs/toolbar/widgets/TextToolWidget.js +64 -87
  150. package/dist/cjs/toolbar/widgets/components/makeColorInput.d.ts +10 -0
  151. package/dist/cjs/toolbar/{makeColorInput.js → widgets/components/makeColorInput.js} +57 -34
  152. package/dist/cjs/toolbar/widgets/components/makeFileInput.d.ts +12 -0
  153. package/dist/cjs/toolbar/widgets/components/makeFileInput.js +111 -0
  154. package/dist/cjs/toolbar/widgets/components/makeGridSelector.d.ts +24 -0
  155. package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +127 -0
  156. package/dist/cjs/toolbar/widgets/components/makeSeparator.d.ts +7 -0
  157. package/dist/cjs/toolbar/widgets/components/makeSeparator.js +16 -0
  158. package/dist/cjs/toolbar/widgets/components/makeThicknessSlider.d.ts +8 -0
  159. package/dist/cjs/toolbar/widgets/components/makeThicknessSlider.js +47 -0
  160. package/dist/cjs/toolbar/widgets/keybindings.js +8 -5
  161. package/dist/cjs/toolbar/widgets/layout/DropdownLayoutManager.d.ts +21 -0
  162. package/dist/cjs/toolbar/widgets/layout/DropdownLayoutManager.js +199 -0
  163. package/dist/cjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.d.ts +14 -0
  164. package/dist/cjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.js +60 -0
  165. package/dist/cjs/toolbar/widgets/layout/types.d.ts +63 -0
  166. package/dist/cjs/toolbar/widgets/layout/types.js +2 -0
  167. package/dist/cjs/toolbar/widgets/lib.d.ts +1 -1
  168. package/dist/cjs/toolbar/widgets/lib.js +15 -11
  169. package/dist/cjs/tools/BaseTool.d.ts +28 -9
  170. package/dist/cjs/tools/BaseTool.js +128 -51
  171. package/dist/cjs/tools/Eraser.d.ts +8 -1
  172. package/dist/cjs/tools/Eraser.js +82 -92
  173. package/dist/cjs/tools/FindTool.d.ts +1 -1
  174. package/dist/cjs/tools/FindTool.js +61 -77
  175. package/dist/cjs/tools/InputFilter/FunctionMapper.d.ts +12 -0
  176. package/dist/cjs/tools/InputFilter/FunctionMapper.js +21 -0
  177. package/dist/cjs/tools/InputFilter/InputMapper.d.ts +23 -0
  178. package/dist/cjs/tools/InputFilter/InputMapper.js +38 -0
  179. package/dist/cjs/tools/InputFilter/InputPipeline.d.ts +15 -0
  180. package/dist/cjs/tools/InputFilter/InputPipeline.js +54 -0
  181. package/dist/cjs/tools/InputFilter/InputStabilizer.d.ts +29 -0
  182. package/dist/cjs/tools/InputFilter/InputStabilizer.js +181 -0
  183. package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.d.ts +21 -0
  184. package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.js +84 -0
  185. package/dist/cjs/tools/PanZoom.d.ts +4 -2
  186. package/dist/cjs/tools/PanZoom.js +186 -248
  187. package/dist/cjs/tools/PasteHandler.d.ts +1 -1
  188. package/dist/cjs/tools/PasteHandler.js +49 -148
  189. package/dist/cjs/tools/Pen.d.ts +12 -11
  190. package/dist/cjs/tools/Pen.js +123 -158
  191. package/dist/cjs/tools/PipetteTool.d.ts +11 -2
  192. package/dist/cjs/tools/PipetteTool.js +51 -48
  193. package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +1 -1
  194. package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.js +15 -30
  195. package/dist/cjs/tools/SelectionTool/Selection.d.ts +5 -5
  196. package/dist/cjs/tools/SelectionTool/Selection.js +308 -415
  197. package/dist/cjs/tools/SelectionTool/SelectionHandle.d.ts +15 -5
  198. package/dist/cjs/tools/SelectionTool/SelectionHandle.js +63 -37
  199. package/dist/cjs/tools/SelectionTool/SelectionTool.d.ts +4 -4
  200. package/dist/cjs/tools/SelectionTool/SelectionTool.js +164 -187
  201. package/dist/cjs/tools/SelectionTool/TransformMode.d.ts +1 -1
  202. package/dist/cjs/tools/SelectionTool/TransformMode.js +65 -66
  203. package/dist/cjs/tools/SoundUITool.d.ts +2 -1
  204. package/dist/cjs/tools/SoundUITool.js +70 -84
  205. package/dist/cjs/tools/TextTool.d.ts +5 -3
  206. package/dist/cjs/tools/TextTool.js +169 -173
  207. package/dist/cjs/tools/ToolController.d.ts +16 -2
  208. package/dist/cjs/tools/ToolController.js +124 -100
  209. package/dist/cjs/tools/ToolEnabledGroup.js +6 -9
  210. package/dist/cjs/tools/ToolSwitcherShortcut.d.ts +1 -1
  211. package/dist/cjs/tools/ToolSwitcherShortcut.js +16 -32
  212. package/dist/cjs/tools/ToolbarShortcutHandler.d.ts +1 -1
  213. package/dist/cjs/tools/ToolbarShortcutHandler.js +17 -33
  214. package/dist/cjs/tools/UndoRedoShortcut.d.ts +1 -1
  215. package/dist/cjs/tools/UndoRedoShortcut.js +12 -27
  216. package/dist/cjs/tools/keybindings.js +21 -18
  217. package/dist/cjs/tools/lib.js +17 -14
  218. package/dist/cjs/tools/localization.d.ts +2 -1
  219. package/dist/cjs/tools/localization.js +8 -7
  220. package/dist/cjs/types.d.ts +22 -80
  221. package/dist/cjs/types.js +8 -16
  222. package/dist/cjs/util/ReactiveValue.d.ts +65 -0
  223. package/dist/cjs/util/ReactiveValue.js +166 -0
  224. package/dist/cjs/util/assertions.js +5 -8
  225. package/dist/cjs/util/fileToBase64.js +6 -6
  226. package/dist/cjs/util/guessKeyCodeFromKey.d.ts +9 -0
  227. package/dist/cjs/util/guessKeyCodeFromKey.js +32 -0
  228. package/dist/cjs/util/listPrefixMatch.d.ts +6 -0
  229. package/dist/cjs/util/listPrefixMatch.js +17 -0
  230. package/dist/cjs/util/stopPropagationOfScrollingWheelEvents.d.ts +2 -0
  231. package/dist/cjs/util/stopPropagationOfScrollingWheelEvents.js +17 -0
  232. package/dist/cjs/util/untilNextAnimationFrame.js +3 -3
  233. package/dist/cjs/util/waitForAll.js +3 -3
  234. package/dist/cjs/util/waitForTimeout.js +3 -3
  235. package/dist/cjs/version.d.ts +4 -0
  236. package/dist/cjs/version.js +5 -0
  237. package/dist/mjs/Editor.d.ts +91 -12
  238. package/dist/mjs/Editor.mjs +565 -563
  239. package/dist/mjs/EditorImage.d.ts +5 -2
  240. package/dist/mjs/EditorImage.mjs +248 -291
  241. package/dist/mjs/EventDispatcher.mjs +17 -20
  242. package/dist/mjs/Pointer.d.ts +3 -1
  243. package/dist/mjs/Pointer.mjs +40 -44
  244. package/dist/mjs/SVGLoader.d.ts +7 -1
  245. package/dist/mjs/SVGLoader.mjs +338 -466
  246. package/dist/mjs/UndoRedoHistory.mjs +27 -39
  247. package/dist/mjs/Viewport.d.ts +1 -4
  248. package/dist/mjs/Viewport.mjs +139 -187
  249. package/dist/mjs/commands/Command.mjs +21 -49
  250. package/dist/mjs/commands/Duplicate.mjs +22 -41
  251. package/dist/mjs/commands/Erase.mjs +30 -51
  252. package/dist/mjs/commands/SerializableCommand.mjs +16 -34
  253. package/dist/mjs/commands/UnresolvedCommand.mjs +10 -29
  254. package/dist/mjs/commands/invertCommand.mjs +24 -49
  255. package/dist/mjs/commands/localization.d.ts +1 -1
  256. package/dist/mjs/commands/localization.mjs +10 -10
  257. package/dist/mjs/commands/uniteCommands.mjs +52 -85
  258. package/dist/mjs/components/AbstractComponent.d.ts +11 -3
  259. package/dist/mjs/components/AbstractComponent.mjs +135 -166
  260. package/dist/mjs/components/BackgroundComponent.d.ts +3 -6
  261. package/dist/mjs/components/BackgroundComponent.mjs +107 -136
  262. package/dist/mjs/components/ImageComponent.d.ts +3 -5
  263. package/dist/mjs/components/ImageComponent.mjs +90 -174
  264. package/dist/mjs/components/RestylableComponent.d.ts +1 -1
  265. package/dist/mjs/components/RestylableComponent.mjs +35 -53
  266. package/dist/mjs/components/SVGGlobalAttributesObject.d.ts +1 -3
  267. package/dist/mjs/components/SVGGlobalAttributesObject.mjs +29 -50
  268. package/dist/mjs/components/Stroke.d.ts +4 -6
  269. package/dist/mjs/components/Stroke.mjs +89 -119
  270. package/dist/mjs/components/TextComponent.d.ts +2 -4
  271. package/dist/mjs/components/TextComponent.mjs +180 -228
  272. package/dist/mjs/components/UnknownSVGObject.d.ts +1 -3
  273. package/dist/mjs/components/UnknownSVGObject.mjs +26 -43
  274. package/dist/mjs/components/builders/ArrowBuilder.d.ts +1 -1
  275. package/dist/mjs/components/builders/ArrowBuilder.mjs +32 -35
  276. package/dist/mjs/components/builders/CircleBuilder.mjs +35 -38
  277. package/dist/mjs/components/builders/FreehandLineBuilder.d.ts +3 -2
  278. package/dist/mjs/components/builders/FreehandLineBuilder.mjs +52 -69
  279. package/dist/mjs/components/builders/LineBuilder.d.ts +1 -1
  280. package/dist/mjs/components/builders/LineBuilder.mjs +30 -32
  281. package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +1 -1
  282. package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.mjs +103 -115
  283. package/dist/mjs/components/builders/RectangleBuilder.d.ts +1 -1
  284. package/dist/mjs/components/builders/RectangleBuilder.mjs +27 -31
  285. package/dist/mjs/components/builders/types.d.ts +1 -1
  286. package/dist/mjs/components/lib.d.ts +3 -1
  287. package/dist/mjs/components/lib.mjs +1 -1
  288. package/dist/mjs/components/localization.mjs +5 -5
  289. package/dist/mjs/components/util/StrokeSmoother.d.ts +1 -2
  290. package/dist/mjs/components/util/StrokeSmoother.mjs +63 -69
  291. package/dist/mjs/components/util/describeComponentList.d.ts +1 -1
  292. package/dist/mjs/components/util/describeComponentList.mjs +4 -5
  293. package/dist/mjs/dialogs/makeAboutDialog.d.ts +15 -0
  294. package/dist/mjs/dialogs/makeAboutDialog.mjs +52 -0
  295. package/dist/mjs/inputEvents.d.ts +84 -0
  296. package/dist/mjs/inputEvents.mjs +34 -0
  297. package/dist/mjs/lib.d.ts +29 -13
  298. package/dist/mjs/lib.mjs +30 -13
  299. package/dist/mjs/localization.mjs +14 -13
  300. package/dist/mjs/localizations/de.mjs +116 -12
  301. package/dist/mjs/localizations/en.mjs +3 -12
  302. package/dist/mjs/localizations/es.mjs +61 -22
  303. package/dist/mjs/localizations/getLocalizationTable.mjs +12 -13
  304. package/dist/mjs/rendering/Display.d.ts +1 -2
  305. package/dist/mjs/rendering/Display.mjs +62 -79
  306. package/dist/mjs/rendering/RenderablePathSpec.d.ts +15 -0
  307. package/dist/mjs/rendering/RenderablePathSpec.mjs +64 -0
  308. package/dist/mjs/rendering/RenderingStyle.d.ts +4 -4
  309. package/dist/mjs/rendering/RenderingStyle.mjs +16 -26
  310. package/dist/mjs/rendering/TextRenderingStyle.d.ts +10 -10
  311. package/dist/mjs/rendering/TextRenderingStyle.mjs +12 -17
  312. package/dist/mjs/rendering/caching/CacheRecord.d.ts +1 -2
  313. package/dist/mjs/rendering/caching/CacheRecord.mjs +20 -23
  314. package/dist/mjs/rendering/caching/CacheRecordManager.d.ts +1 -1
  315. package/dist/mjs/rendering/caching/CacheRecordManager.mjs +13 -15
  316. package/dist/mjs/rendering/caching/RenderingCache.mjs +13 -17
  317. package/dist/mjs/rendering/caching/RenderingCacheNode.d.ts +1 -1
  318. package/dist/mjs/rendering/caching/RenderingCacheNode.mjs +94 -115
  319. package/dist/mjs/rendering/caching/testUtils.mjs +19 -21
  320. package/dist/mjs/rendering/caching/types.d.ts +3 -3
  321. package/dist/mjs/rendering/localization.mjs +6 -6
  322. package/dist/mjs/rendering/renderers/AbstractRenderer.d.ts +2 -11
  323. package/dist/mjs/rendering/renderers/AbstractRenderer.mjs +47 -52
  324. package/dist/mjs/rendering/renderers/CanvasRenderer.d.ts +3 -5
  325. package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +84 -103
  326. package/dist/mjs/rendering/renderers/DummyRenderer.d.ts +1 -4
  327. package/dist/mjs/rendering/renderers/DummyRenderer.mjs +51 -75
  328. package/dist/mjs/rendering/renderers/SVGRenderer.d.ts +5 -5
  329. package/dist/mjs/rendering/renderers/SVGRenderer.mjs +185 -171
  330. package/dist/mjs/rendering/renderers/TextOnlyRenderer.d.ts +1 -3
  331. package/dist/mjs/rendering/renderers/TextOnlyRenderer.mjs +43 -72
  332. package/dist/mjs/shortcuts/KeyBinding.d.ts +5 -0
  333. package/dist/mjs/shortcuts/KeyBinding.mjs +94 -71
  334. package/dist/mjs/shortcuts/KeyboardShortcutManager.d.ts +1 -1
  335. package/dist/mjs/shortcuts/KeyboardShortcutManager.mjs +32 -44
  336. package/dist/mjs/testing/createEditor.mjs +2 -2
  337. package/dist/mjs/testing/getUniquePointerId.mjs +4 -5
  338. package/dist/mjs/testing/sendPenEvent.d.ts +2 -2
  339. package/dist/mjs/testing/sendPenEvent.mjs +5 -5
  340. package/dist/mjs/testing/sendTouchEvent.d.ts +2 -2
  341. package/dist/mjs/testing/sendTouchEvent.mjs +8 -16
  342. package/dist/mjs/toolbar/AbstractToolbar.d.ts +166 -0
  343. package/dist/mjs/toolbar/AbstractToolbar.mjs +405 -0
  344. package/dist/mjs/toolbar/DropdownToolbar.d.ts +43 -0
  345. package/dist/mjs/toolbar/DropdownToolbar.mjs +168 -0
  346. package/dist/mjs/toolbar/EdgeToolbar.d.ts +47 -0
  347. package/dist/mjs/toolbar/EdgeToolbar.mjs +414 -0
  348. package/dist/mjs/toolbar/IconProvider.d.ts +54 -30
  349. package/dist/mjs/toolbar/IconProvider.mjs +644 -219
  350. package/dist/mjs/toolbar/constants.d.ts +1 -0
  351. package/dist/mjs/toolbar/constants.mjs +1 -0
  352. package/dist/mjs/toolbar/lib.d.ts +4 -2
  353. package/dist/mjs/toolbar/lib.mjs +3 -1
  354. package/dist/mjs/toolbar/localization.d.ts +9 -2
  355. package/dist/mjs/toolbar/localization.mjs +27 -20
  356. package/dist/mjs/toolbar/types.d.ts +7 -0
  357. package/dist/mjs/toolbar/widgets/ActionButtonWidget.d.ts +1 -1
  358. package/dist/mjs/toolbar/widgets/ActionButtonWidget.mjs +19 -39
  359. package/dist/mjs/toolbar/widgets/BaseToolWidget.d.ts +1 -1
  360. package/dist/mjs/toolbar/widgets/BaseToolWidget.mjs +30 -36
  361. package/dist/mjs/toolbar/widgets/BaseWidget.d.ts +60 -5
  362. package/dist/mjs/toolbar/widgets/BaseWidget.mjs +227 -176
  363. package/dist/mjs/toolbar/widgets/DocumentPropertiesWidget.mjs +98 -111
  364. package/dist/mjs/toolbar/widgets/EraserToolWidget.d.ts +1 -3
  365. package/dist/mjs/toolbar/widgets/EraserToolWidget.mjs +41 -73
  366. package/dist/mjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
  367. package/dist/mjs/toolbar/widgets/HandToolWidget.mjs +94 -136
  368. package/dist/mjs/toolbar/widgets/InsertImageWidget.d.ts +9 -7
  369. package/dist/mjs/toolbar/widgets/InsertImageWidget.mjs +140 -208
  370. package/dist/mjs/toolbar/widgets/OverflowWidget.mjs +30 -62
  371. package/dist/mjs/toolbar/widgets/PenToolWidget.d.ts +8 -1
  372. package/dist/mjs/toolbar/widgets/PenToolWidget.mjs +150 -225
  373. package/dist/mjs/toolbar/widgets/SelectionToolWidget.d.ts +3 -1
  374. package/dist/mjs/toolbar/widgets/SelectionToolWidget.mjs +97 -173
  375. package/dist/mjs/toolbar/widgets/TextToolWidget.mjs +59 -85
  376. package/dist/mjs/toolbar/widgets/components/makeColorInput.d.ts +10 -0
  377. package/dist/mjs/toolbar/{makeColorInput.mjs → widgets/components/makeColorInput.mjs} +53 -33
  378. package/dist/mjs/toolbar/widgets/components/makeFileInput.d.ts +12 -0
  379. package/dist/mjs/toolbar/widgets/components/makeFileInput.mjs +106 -0
  380. package/dist/mjs/toolbar/widgets/components/makeGridSelector.d.ts +24 -0
  381. package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +122 -0
  382. package/dist/mjs/toolbar/widgets/components/makeSeparator.d.ts +7 -0
  383. package/dist/mjs/toolbar/widgets/components/makeSeparator.mjs +14 -0
  384. package/dist/mjs/toolbar/widgets/components/makeThicknessSlider.d.ts +8 -0
  385. package/dist/mjs/toolbar/widgets/components/makeThicknessSlider.mjs +45 -0
  386. package/dist/mjs/toolbar/widgets/keybindings.mjs +5 -5
  387. package/dist/mjs/toolbar/widgets/layout/DropdownLayoutManager.d.ts +21 -0
  388. package/dist/mjs/toolbar/widgets/layout/DropdownLayoutManager.mjs +193 -0
  389. package/dist/mjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.d.ts +14 -0
  390. package/dist/mjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.mjs +57 -0
  391. package/dist/mjs/toolbar/widgets/layout/types.d.ts +63 -0
  392. package/dist/mjs/toolbar/widgets/lib.d.ts +1 -1
  393. package/dist/mjs/toolbar/widgets/lib.mjs +1 -1
  394. package/dist/mjs/tools/BaseTool.d.ts +28 -9
  395. package/dist/mjs/tools/BaseTool.mjs +127 -50
  396. package/dist/mjs/tools/Eraser.d.ts +8 -1
  397. package/dist/mjs/tools/Eraser.mjs +72 -86
  398. package/dist/mjs/tools/FindTool.d.ts +1 -1
  399. package/dist/mjs/tools/FindTool.mjs +55 -75
  400. package/dist/mjs/tools/InputFilter/FunctionMapper.d.ts +12 -0
  401. package/dist/mjs/tools/InputFilter/FunctionMapper.mjs +15 -0
  402. package/dist/mjs/tools/InputFilter/InputMapper.d.ts +23 -0
  403. package/dist/mjs/tools/InputFilter/InputMapper.mjs +36 -0
  404. package/dist/mjs/tools/InputFilter/InputPipeline.d.ts +15 -0
  405. package/dist/mjs/tools/InputFilter/InputPipeline.mjs +49 -0
  406. package/dist/mjs/tools/InputFilter/InputStabilizer.d.ts +29 -0
  407. package/dist/mjs/tools/InputFilter/InputStabilizer.mjs +175 -0
  408. package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.d.ts +21 -0
  409. package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.mjs +78 -0
  410. package/dist/mjs/tools/PanZoom.d.ts +4 -2
  411. package/dist/mjs/tools/PanZoom.mjs +169 -235
  412. package/dist/mjs/tools/PasteHandler.d.ts +1 -1
  413. package/dist/mjs/tools/PasteHandler.mjs +42 -145
  414. package/dist/mjs/tools/Pen.d.ts +12 -11
  415. package/dist/mjs/tools/Pen.mjs +115 -154
  416. package/dist/mjs/tools/PipetteTool.d.ts +11 -2
  417. package/dist/mjs/tools/PipetteTool.mjs +47 -48
  418. package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +1 -1
  419. package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.mjs +9 -28
  420. package/dist/mjs/tools/SelectionTool/Selection.d.ts +5 -5
  421. package/dist/mjs/tools/SelectionTool/Selection.mjs +268 -401
  422. package/dist/mjs/tools/SelectionTool/SelectionHandle.d.ts +15 -5
  423. package/dist/mjs/tools/SelectionTool/SelectionHandle.mjs +62 -37
  424. package/dist/mjs/tools/SelectionTool/SelectionTool.d.ts +4 -4
  425. package/dist/mjs/tools/SelectionTool/SelectionTool.mjs +153 -179
  426. package/dist/mjs/tools/SelectionTool/TransformMode.d.ts +1 -1
  427. package/dist/mjs/tools/SelectionTool/TransformMode.mjs +52 -59
  428. package/dist/mjs/tools/SoundUITool.d.ts +2 -1
  429. package/dist/mjs/tools/SoundUITool.mjs +66 -84
  430. package/dist/mjs/tools/TextTool.d.ts +5 -3
  431. package/dist/mjs/tools/TextTool.mjs +155 -163
  432. package/dist/mjs/tools/ToolController.d.ts +16 -2
  433. package/dist/mjs/tools/ToolController.mjs +81 -84
  434. package/dist/mjs/tools/ToolEnabledGroup.mjs +6 -10
  435. package/dist/mjs/tools/ToolSwitcherShortcut.d.ts +1 -1
  436. package/dist/mjs/tools/ToolSwitcherShortcut.mjs +12 -32
  437. package/dist/mjs/tools/ToolbarShortcutHandler.d.ts +1 -1
  438. package/dist/mjs/tools/ToolbarShortcutHandler.mjs +13 -33
  439. package/dist/mjs/tools/UndoRedoShortcut.d.ts +1 -1
  440. package/dist/mjs/tools/UndoRedoShortcut.mjs +7 -26
  441. package/dist/mjs/tools/keybindings.mjs +34 -34
  442. package/dist/mjs/tools/localization.d.ts +2 -1
  443. package/dist/mjs/tools/localization.mjs +9 -8
  444. package/dist/mjs/types.d.ts +22 -80
  445. package/dist/mjs/types.mjs +7 -15
  446. package/dist/mjs/util/ReactiveValue.d.ts +65 -0
  447. package/dist/mjs/util/ReactiveValue.mjs +161 -0
  448. package/dist/mjs/util/assertions.mjs +5 -8
  449. package/dist/mjs/util/fileToBase64.mjs +6 -6
  450. package/dist/mjs/util/guessKeyCodeFromKey.d.ts +9 -0
  451. package/dist/mjs/util/guessKeyCodeFromKey.mjs +30 -0
  452. package/dist/mjs/util/listPrefixMatch.d.ts +6 -0
  453. package/dist/mjs/util/listPrefixMatch.mjs +15 -0
  454. package/dist/mjs/util/stopPropagationOfScrollingWheelEvents.d.ts +2 -0
  455. package/dist/mjs/util/stopPropagationOfScrollingWheelEvents.mjs +15 -0
  456. package/dist/mjs/util/untilNextAnimationFrame.mjs +3 -3
  457. package/dist/mjs/util/waitForAll.mjs +3 -3
  458. package/dist/mjs/util/waitForTimeout.mjs +3 -3
  459. package/dist/mjs/version.d.ts +4 -0
  460. package/dist/mjs/version.mjs +3 -0
  461. package/dist-test/test_imports/package.json +1 -1
  462. package/dist-test/test_imports/test-imports.js +5 -11
  463. package/dist-test/test_imports/test-require.cjs +6 -11
  464. package/package.json +11 -22
  465. package/src/Coloris.css +8 -8
  466. package/src/Editor.loadFrom.test.ts +1 -1
  467. package/src/Editor.scss +148 -0
  468. package/src/Editor.test.ts +107 -0
  469. package/src/Editor.toSVG.test.ts +184 -1
  470. package/src/Editor.ts +325 -53
  471. package/src/EditorImage.test.ts +4 -7
  472. package/src/EditorImage.ts +10 -4
  473. package/src/Pointer.ts +18 -5
  474. package/src/SVGLoader.ts +77 -15
  475. package/src/UndoRedoHistory.test.ts +2 -1
  476. package/src/Viewport.ts +1 -4
  477. package/src/commands/Erase.ts +1 -0
  478. package/src/commands/localization.ts +1 -1
  479. package/src/commands/uniteCommands.test.ts +3 -3
  480. package/src/components/AbstractComponent.transformBy.test.ts +2 -1
  481. package/src/components/AbstractComponent.ts +12 -3
  482. package/src/components/BackgroundComponent.test.ts +1 -2
  483. package/src/components/BackgroundComponent.ts +3 -8
  484. package/src/components/ImageComponent.ts +1 -3
  485. package/src/components/RestylableComponent.ts +1 -1
  486. package/src/components/SVGGlobalAttributesObject.ts +1 -3
  487. package/src/components/Stroke.test.ts +4 -6
  488. package/src/components/Stroke.ts +5 -7
  489. package/src/components/TextComponent.test.ts +1 -3
  490. package/src/components/TextComponent.ts +1 -4
  491. package/src/components/UnknownSVGObject.ts +3 -3
  492. package/src/components/builders/ArrowBuilder.ts +1 -2
  493. package/src/components/builders/CircleBuilder.ts +3 -5
  494. package/src/components/builders/FreehandLineBuilder.test.ts +2 -3
  495. package/src/components/builders/FreehandLineBuilder.ts +3 -5
  496. package/src/components/builders/LineBuilder.ts +3 -3
  497. package/src/components/builders/PressureSensitiveFreehandLineBuilder.ts +3 -4
  498. package/src/components/builders/RectangleBuilder.ts +3 -4
  499. package/src/components/builders/types.ts +1 -1
  500. package/src/components/lib.ts +1 -1
  501. package/src/components/util/StrokeSmoother.ts +7 -7
  502. package/src/dialogs/dialogs.scss +36 -0
  503. package/src/dialogs/makeAboutDialog.scss +41 -0
  504. package/src/dialogs/makeAboutDialog.ts +82 -0
  505. package/src/inputEvents.ts +143 -0
  506. package/src/lib.ts +35 -13
  507. package/src/localizations/de.ts +2 -2
  508. package/src/localizations/es.ts +5 -5
  509. package/src/rendering/Display.ts +1 -2
  510. package/src/rendering/RenderablePathSpec.ts +88 -0
  511. package/src/rendering/RenderingStyle.test.ts +1 -1
  512. package/src/rendering/RenderingStyle.ts +1 -1
  513. package/src/rendering/caching/CacheRecord.test.ts +1 -2
  514. package/src/rendering/caching/CacheRecord.ts +1 -2
  515. package/src/rendering/caching/CacheRecordManager.ts +1 -1
  516. package/src/rendering/caching/RenderingCache.test.ts +3 -4
  517. package/src/rendering/caching/RenderingCache.ts +1 -1
  518. package/src/rendering/caching/RenderingCacheNode.ts +1 -2
  519. package/src/rendering/caching/testUtils.ts +1 -1
  520. package/src/rendering/caching/types.ts +3 -3
  521. package/src/rendering/renderers/AbstractRenderer.ts +4 -14
  522. package/src/rendering/renderers/CanvasRenderer.ts +17 -12
  523. package/src/rendering/renderers/DummyRenderer.test.ts +1 -2
  524. package/src/rendering/renderers/DummyRenderer.ts +1 -4
  525. package/src/rendering/renderers/SVGRenderer.ts +68 -11
  526. package/src/rendering/renderers/TextOnlyRenderer.ts +1 -4
  527. package/src/shortcuts/KeyBinding.test.ts +10 -0
  528. package/src/shortcuts/KeyBinding.ts +74 -35
  529. package/src/shortcuts/KeyboardShortcutManager.test.ts +1 -1
  530. package/src/styles.js +1 -1
  531. package/src/testing/sendPenEvent.ts +2 -2
  532. package/src/testing/sendTouchEvent.ts +2 -2
  533. package/src/toolbar/{toolbar.css → AbstractToolbar.scss} +47 -85
  534. package/src/toolbar/AbstractToolbar.ts +542 -0
  535. package/src/toolbar/DropdownToolbar.scss +46 -0
  536. package/src/toolbar/DropdownToolbar.ts +220 -0
  537. package/src/toolbar/EdgeToolbar.scss +511 -0
  538. package/src/toolbar/EdgeToolbar.test.ts +54 -0
  539. package/src/toolbar/EdgeToolbar.ts +543 -0
  540. package/src/toolbar/IconProvider.ts +189 -133
  541. package/src/toolbar/constants.ts +1 -0
  542. package/src/toolbar/lib.ts +4 -2
  543. package/src/toolbar/localization.ts +39 -17
  544. package/src/toolbar/toolbar.scss +11 -0
  545. package/src/toolbar/types.ts +8 -0
  546. package/src/toolbar/widgets/ActionButtonWidget.ts +2 -2
  547. package/src/toolbar/widgets/BaseToolWidget.ts +17 -1
  548. package/src/toolbar/widgets/BaseWidget.ts +179 -112
  549. package/src/toolbar/widgets/DocumentPropertiesWidget.scss +7 -0
  550. package/src/toolbar/widgets/DocumentPropertiesWidget.ts +26 -10
  551. package/src/toolbar/widgets/EraserToolWidget.ts +21 -22
  552. package/src/toolbar/widgets/HandToolWidget.scss +14 -0
  553. package/src/toolbar/widgets/HandToolWidget.ts +21 -32
  554. package/src/toolbar/widgets/InsertImageWidget.scss +41 -0
  555. package/src/toolbar/widgets/InsertImageWidget.ts +90 -65
  556. package/src/toolbar/widgets/PenToolWidget.css +0 -51
  557. package/src/toolbar/widgets/PenToolWidget.ts +106 -146
  558. package/src/toolbar/widgets/SelectionToolWidget.scss +6 -0
  559. package/src/toolbar/widgets/SelectionToolWidget.ts +83 -85
  560. package/src/toolbar/widgets/TextToolWidget.ts +9 -5
  561. package/src/toolbar/widgets/components/components.scss +5 -0
  562. package/src/toolbar/widgets/components/makeColorInput.scss +82 -0
  563. package/src/toolbar/{makeColorInput.ts → widgets/components/makeColorInput.ts} +39 -14
  564. package/src/toolbar/widgets/components/makeFileInput.scss +77 -0
  565. package/src/toolbar/widgets/components/makeFileInput.ts +128 -0
  566. package/src/toolbar/widgets/components/makeGridSelector.scss +60 -0
  567. package/src/toolbar/widgets/components/makeGridSelector.ts +179 -0
  568. package/src/toolbar/widgets/components/makeSeparator.scss +14 -0
  569. package/src/toolbar/widgets/components/makeSeparator.ts +17 -0
  570. package/src/toolbar/widgets/components/makeThicknessSlider.scss +9 -0
  571. package/src/toolbar/widgets/components/makeThicknessSlider.ts +62 -0
  572. package/src/toolbar/widgets/keybindings.ts +1 -3
  573. package/src/toolbar/widgets/layout/DropdownLayoutManager.ts +262 -0
  574. package/src/toolbar/widgets/layout/EdgeToolbarLayoutManager.ts +71 -0
  575. package/src/toolbar/widgets/layout/types.ts +74 -0
  576. package/src/toolbar/widgets/lib.ts +2 -2
  577. package/src/tools/BaseTool.ts +102 -30
  578. package/src/tools/Eraser.test.ts +2 -2
  579. package/src/tools/Eraser.ts +24 -11
  580. package/src/tools/FindTool.css +3 -3
  581. package/src/tools/FindTool.test.ts +67 -0
  582. package/src/tools/FindTool.ts +3 -3
  583. package/src/tools/InputFilter/FunctionMapper.ts +17 -0
  584. package/src/tools/InputFilter/InputMapper.ts +41 -0
  585. package/src/tools/InputFilter/InputPipeline.test.ts +41 -0
  586. package/src/tools/InputFilter/InputPipeline.ts +34 -0
  587. package/src/tools/InputFilter/InputStabilizer.ts +254 -0
  588. package/src/tools/InputFilter/StrokeKeyboardControl.ts +104 -0
  589. package/src/tools/PanZoom.test.ts +3 -13
  590. package/src/tools/PanZoom.ts +33 -10
  591. package/src/tools/PasteHandler.ts +2 -3
  592. package/src/tools/Pen.test.ts +2 -4
  593. package/src/tools/Pen.ts +54 -70
  594. package/src/tools/PipetteTool.ts +31 -2
  595. package/src/tools/SelectionTool/SelectAllShortcutHandler.ts +1 -1
  596. package/src/tools/SelectionTool/Selection.ts +52 -16
  597. package/src/tools/SelectionTool/SelectionHandle.ts +46 -12
  598. package/src/tools/SelectionTool/SelectionTool.css +23 -11
  599. package/src/tools/SelectionTool/SelectionTool.test.ts +130 -21
  600. package/src/tools/SelectionTool/SelectionTool.ts +62 -48
  601. package/src/tools/SelectionTool/TransformMode.ts +1 -3
  602. package/src/tools/SoundUITool.ts +13 -4
  603. package/src/tools/TextTool.ts +29 -30
  604. package/src/tools/ToolController.ts +60 -36
  605. package/src/tools/ToolSwitcherShortcut.ts +1 -1
  606. package/src/tools/ToolbarShortcutHandler.ts +1 -1
  607. package/src/tools/UndoRedoShortcut.test.ts +10 -4
  608. package/src/tools/UndoRedoShortcut.ts +1 -1
  609. package/src/tools/keybindings.ts +17 -17
  610. package/src/tools/localization.ts +4 -2
  611. package/src/tools/tools.scss +4 -0
  612. package/src/types.ts +25 -113
  613. package/src/util/ReactiveValue.test.ts +168 -0
  614. package/src/util/ReactiveValue.ts +241 -0
  615. package/src/util/guessKeyCodeFromKey.ts +36 -0
  616. package/src/util/listPrefixMatch.ts +19 -0
  617. package/src/util/stopPropagationOfScrollingWheelEvents.ts +20 -0
  618. package/src/version.test.ts +12 -0
  619. package/src/version.ts +3 -0
  620. package/tsconfig.json +1 -1
  621. package/typedoc.json +4 -0
  622. package/dist/cjs/Color4.d.ts +0 -69
  623. package/dist/cjs/Color4.js +0 -263
  624. package/dist/cjs/math/Mat33.d.ts +0 -123
  625. package/dist/cjs/math/Mat33.js +0 -340
  626. package/dist/cjs/math/Vec2.d.ts +0 -33
  627. package/dist/cjs/math/Vec2.js +0 -37
  628. package/dist/cjs/math/Vec3.d.ts +0 -106
  629. package/dist/cjs/math/Vec3.js +0 -183
  630. package/dist/cjs/math/lib.d.ts +0 -7
  631. package/dist/cjs/math/lib.js +0 -15
  632. package/dist/cjs/math/polynomial/solveQuadratic.d.ts +0 -9
  633. package/dist/cjs/math/polynomial/solveQuadratic.js +0 -39
  634. package/dist/cjs/math/rounding.d.ts +0 -4
  635. package/dist/cjs/math/rounding.js +0 -140
  636. package/dist/cjs/math/shapes/Abstract2DShape.d.ts +0 -49
  637. package/dist/cjs/math/shapes/Abstract2DShape.js +0 -42
  638. package/dist/cjs/math/shapes/BezierJSWrapper.d.ts +0 -36
  639. package/dist/cjs/math/shapes/BezierJSWrapper.js +0 -109
  640. package/dist/cjs/math/shapes/CubicBezier.d.ts +0 -17
  641. package/dist/cjs/math/shapes/CubicBezier.js +0 -50
  642. package/dist/cjs/math/shapes/LineSegment2.d.ts +0 -70
  643. package/dist/cjs/math/shapes/LineSegment2.js +0 -204
  644. package/dist/cjs/math/shapes/Path.d.ts +0 -93
  645. package/dist/cjs/math/shapes/Path.js +0 -865
  646. package/dist/cjs/math/shapes/PointShape2D.d.ts +0 -18
  647. package/dist/cjs/math/shapes/PointShape2D.js +0 -46
  648. package/dist/cjs/math/shapes/QuadraticBezier.d.ts +0 -34
  649. package/dist/cjs/math/shapes/QuadraticBezier.js +0 -133
  650. package/dist/cjs/math/shapes/Rect2.d.ts +0 -57
  651. package/dist/cjs/math/shapes/Rect2.js +0 -311
  652. package/dist/cjs/math/shapes/Triangle.d.ts +0 -46
  653. package/dist/cjs/math/shapes/Triangle.js +0 -148
  654. package/dist/cjs/toolbar/HTMLToolbar.d.ts +0 -105
  655. package/dist/cjs/toolbar/HTMLToolbar.js +0 -465
  656. package/dist/cjs/toolbar/makeColorInput.d.ts +0 -6
  657. package/dist/mjs/Color4.d.ts +0 -69
  658. package/dist/mjs/Color4.mjs +0 -260
  659. package/dist/mjs/Color4.test.d.ts +0 -1
  660. package/dist/mjs/math/Mat33.d.ts +0 -123
  661. package/dist/mjs/math/Mat33.mjs +0 -338
  662. package/dist/mjs/math/Mat33.test.d.ts +0 -1
  663. package/dist/mjs/math/Vec2.d.ts +0 -33
  664. package/dist/mjs/math/Vec2.mjs +0 -34
  665. package/dist/mjs/math/Vec2.test.d.ts +0 -1
  666. package/dist/mjs/math/Vec3.d.ts +0 -106
  667. package/dist/mjs/math/Vec3.mjs +0 -181
  668. package/dist/mjs/math/Vec3.test.d.ts +0 -1
  669. package/dist/mjs/math/lib.d.ts +0 -7
  670. package/dist/mjs/math/lib.mjs +0 -7
  671. package/dist/mjs/math/polynomial/solveQuadratic.d.ts +0 -9
  672. package/dist/mjs/math/polynomial/solveQuadratic.mjs +0 -37
  673. package/dist/mjs/math/polynomial/solveQuadratic.test.d.ts +0 -1
  674. package/dist/mjs/math/rounding.d.ts +0 -4
  675. package/dist/mjs/math/rounding.mjs +0 -133
  676. package/dist/mjs/math/rounding.test.d.ts +0 -1
  677. package/dist/mjs/math/shapes/Abstract2DShape.d.ts +0 -49
  678. package/dist/mjs/math/shapes/Abstract2DShape.mjs +0 -40
  679. package/dist/mjs/math/shapes/BezierJSWrapper.d.ts +0 -36
  680. package/dist/mjs/math/shapes/BezierJSWrapper.mjs +0 -107
  681. package/dist/mjs/math/shapes/CubicBezier.d.ts +0 -17
  682. package/dist/mjs/math/shapes/CubicBezier.mjs +0 -48
  683. package/dist/mjs/math/shapes/LineSegment2.d.ts +0 -70
  684. package/dist/mjs/math/shapes/LineSegment2.mjs +0 -202
  685. package/dist/mjs/math/shapes/LineSegment2.test.d.ts +0 -1
  686. package/dist/mjs/math/shapes/Path.d.ts +0 -93
  687. package/dist/mjs/math/shapes/Path.fromString.test.d.ts +0 -1
  688. package/dist/mjs/math/shapes/Path.mjs +0 -862
  689. package/dist/mjs/math/shapes/Path.test.d.ts +0 -1
  690. package/dist/mjs/math/shapes/Path.toString.test.d.ts +0 -1
  691. package/dist/mjs/math/shapes/PointShape2D.d.ts +0 -18
  692. package/dist/mjs/math/shapes/PointShape2D.mjs +0 -44
  693. package/dist/mjs/math/shapes/QuadraticBezier.d.ts +0 -34
  694. package/dist/mjs/math/shapes/QuadraticBezier.mjs +0 -131
  695. package/dist/mjs/math/shapes/QuadraticBezier.test.d.ts +0 -1
  696. package/dist/mjs/math/shapes/Rect2.d.ts +0 -57
  697. package/dist/mjs/math/shapes/Rect2.mjs +0 -309
  698. package/dist/mjs/math/shapes/Rect2.test.d.ts +0 -1
  699. package/dist/mjs/math/shapes/Triangle.d.ts +0 -46
  700. package/dist/mjs/math/shapes/Triangle.mjs +0 -146
  701. package/dist/mjs/math/shapes/Triangle.test.d.ts +0 -1
  702. package/dist/mjs/toolbar/HTMLToolbar.d.ts +0 -105
  703. package/dist/mjs/toolbar/HTMLToolbar.mjs +0 -462
  704. package/dist/mjs/toolbar/makeColorInput.d.ts +0 -6
  705. package/src/Color4.test.ts +0 -47
  706. package/src/Color4.ts +0 -304
  707. package/src/Editor.css +0 -98
  708. package/src/math/Mat33.test.ts +0 -244
  709. package/src/math/Mat33.ts +0 -442
  710. package/src/math/Vec2.test.ts +0 -30
  711. package/src/math/Vec2.ts +0 -40
  712. package/src/math/Vec3.test.ts +0 -44
  713. package/src/math/Vec3.ts +0 -218
  714. package/src/math/lib.ts +0 -15
  715. package/src/math/polynomial/solveQuadratic.test.ts +0 -39
  716. package/src/math/polynomial/solveQuadratic.ts +0 -43
  717. package/src/math/rounding.test.ts +0 -65
  718. package/src/math/rounding.ts +0 -156
  719. package/src/math/shapes/Abstract2DShape.ts +0 -63
  720. package/src/math/shapes/BezierJSWrapper.ts +0 -93
  721. package/src/math/shapes/CubicBezier.ts +0 -35
  722. package/src/math/shapes/LineSegment2.test.ts +0 -99
  723. package/src/math/shapes/LineSegment2.ts +0 -231
  724. package/src/math/shapes/Path.fromString.test.ts +0 -223
  725. package/src/math/shapes/Path.test.ts +0 -309
  726. package/src/math/shapes/Path.toString.test.ts +0 -77
  727. package/src/math/shapes/Path.ts +0 -1027
  728. package/src/math/shapes/PointShape2D.ts +0 -33
  729. package/src/math/shapes/QuadraticBezier.test.ts +0 -31
  730. package/src/math/shapes/QuadraticBezier.ts +0 -141
  731. package/src/math/shapes/Rect2.test.ts +0 -209
  732. package/src/math/shapes/Rect2.ts +0 -344
  733. package/src/math/shapes/Triangle.test.ts +0 -61
  734. package/src/math/shapes/Triangle.ts +0 -139
  735. package/src/toolbar/HTMLToolbar.ts +0 -567
  736. package/src/toolbar/widgets/InsertImageWidget.css +0 -44
  737. package/src/tools/tools.css +0 -4
  738. /package/dist/cjs/{Color4.test.d.ts → Editor.test.d.ts} +0 -0
  739. /package/dist/cjs/{math/Mat33.test.d.ts → toolbar/EdgeToolbar.test.d.ts} +0 -0
  740. /package/dist/cjs/{math/Vec2.test.d.ts → tools/FindTool.test.d.ts} +0 -0
  741. /package/dist/cjs/{math/Vec3.test.d.ts → tools/InputFilter/InputPipeline.test.d.ts} +0 -0
  742. /package/dist/cjs/{math/polynomial/solveQuadratic.test.d.ts → util/ReactiveValue.test.d.ts} +0 -0
  743. /package/dist/cjs/{math/rounding.test.d.ts → version.test.d.ts} +0 -0
  744. /package/dist/{cjs/math/shapes/LineSegment2.test.d.ts → mjs/Editor.test.d.ts} +0 -0
  745. /package/dist/{cjs/math/shapes/Path.fromString.test.d.ts → mjs/toolbar/EdgeToolbar.test.d.ts} +0 -0
  746. /package/dist/{cjs/math/shapes/Path.test.d.ts → mjs/toolbar/widgets/layout/types.mjs} +0 -0
  747. /package/dist/{cjs/math/shapes/Path.toString.test.d.ts → mjs/tools/FindTool.test.d.ts} +0 -0
  748. /package/dist/{cjs/math/shapes/QuadraticBezier.test.d.ts → mjs/tools/InputFilter/InputPipeline.test.d.ts} +0 -0
  749. /package/dist/{cjs/math/shapes/Rect2.test.d.ts → mjs/util/ReactiveValue.test.d.ts} +0 -0
  750. /package/dist/{cjs/math/shapes/Triangle.test.d.ts → mjs/version.test.d.ts} +0 -0
@@ -1,45 +1,23 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
2
  var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
18
3
  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
19
4
  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
20
5
  };
21
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
22
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
23
- if (ar || !(i in from)) {
24
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
25
- ar[i] = from[i];
26
- }
27
- }
28
- return to.concat(ar || Array.prototype.slice.call(from));
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
29
8
  };
9
+ var _a, _b, _c;
30
10
  Object.defineProperty(exports, "__esModule", { value: true });
31
11
  exports.ImageNode = exports.EditorImageEventType = exports.sortLeavesByZIndex = void 0;
32
- var Viewport_1 = require("./Viewport");
33
- var AbstractComponent_1 = require("./components/AbstractComponent");
34
- var Rect2_1 = require("./math/shapes/Rect2");
35
- var SerializableCommand_1 = require("./commands/SerializableCommand");
36
- var EventDispatcher_1 = require("./EventDispatcher");
37
- var Vec2_1 = require("./math/Vec2");
38
- var Mat33_1 = require("./math/Mat33");
39
- var assertions_1 = require("./util/assertions");
12
+ const Viewport_1 = __importDefault(require("./Viewport"));
13
+ const AbstractComponent_1 = __importDefault(require("./components/AbstractComponent"));
14
+ const math_1 = require("@js-draw/math");
15
+ const SerializableCommand_1 = __importDefault(require("./commands/SerializableCommand"));
16
+ const EventDispatcher_1 = __importDefault(require("./EventDispatcher"));
17
+ const assertions_1 = require("./util/assertions");
40
18
  // @internal Sort by z-index, low to high
41
- var sortLeavesByZIndex = function (leaves) {
42
- leaves.sort(function (a, b) { return a.getContent().getZIndex() - b.getContent().getZIndex(); });
19
+ const sortLeavesByZIndex = (leaves) => {
20
+ leaves.sort((a, b) => a.getContent().getZIndex() - b.getContent().getZIndex());
43
21
  };
44
22
  exports.sortLeavesByZIndex = sortLeavesByZIndex;
45
23
  var EditorImageEventType;
@@ -47,114 +25,117 @@ var EditorImageEventType;
47
25
  EditorImageEventType[EditorImageEventType["ExportViewportChanged"] = 0] = "ExportViewportChanged";
48
26
  })(EditorImageEventType || (exports.EditorImageEventType = EditorImageEventType = {}));
49
27
  // Handles lookup/storage of elements in the image
50
- var EditorImage = /** @class */ (function () {
28
+ class EditorImage {
51
29
  // @internal
52
- function EditorImage() {
53
- var _this = this;
30
+ constructor() {
31
+ this.componentCount = 0;
54
32
  this.root = new ImageNode();
55
33
  this.background = new ImageNode();
56
34
  this.componentsById = {};
57
35
  this.notifier = new EventDispatcher_1.default();
58
- this.importExportViewport = new Viewport_1.default(function () {
59
- _this.notifier.dispatch(EditorImageEventType.ExportViewportChanged, {
60
- image: _this,
36
+ this.importExportViewport = new Viewport_1.default(() => {
37
+ this.notifier.dispatch(EditorImageEventType.ExportViewportChanged, {
38
+ image: this,
61
39
  });
62
40
  });
63
41
  // Default to a 500x500 image
64
- this.importExportViewport.updateScreenSize(Vec2_1.Vec2.of(500, 500));
42
+ this.importExportViewport.updateScreenSize(math_1.Vec2.of(500, 500));
65
43
  }
66
44
  // Returns all components that make up the background of this image. These
67
45
  // components are rendered below all other components.
68
- EditorImage.prototype.getBackgroundComponents = function () {
69
- var result = [];
70
- var leaves = this.background.getLeaves();
46
+ getBackgroundComponents() {
47
+ const result = [];
48
+ const leaves = this.background.getLeaves();
71
49
  (0, exports.sortLeavesByZIndex)(leaves);
72
- for (var _i = 0, leaves_1 = leaves; _i < leaves_1.length; _i++) {
73
- var leaf = leaves_1[_i];
74
- var content = leaf.getContent();
50
+ for (const leaf of leaves) {
51
+ const content = leaf.getContent();
75
52
  if (content) {
76
53
  result.push(content);
77
54
  }
78
55
  }
79
56
  return result;
80
- };
57
+ }
81
58
  // Returns the parent of the given element, if it exists.
82
- EditorImage.prototype.findParent = function (elem) {
83
- var _b;
84
- return (_b = this.background.getChildWithContent(elem)) !== null && _b !== void 0 ? _b : this.root.getChildWithContent(elem);
85
- };
59
+ findParent(elem) {
60
+ return this.background.getChildWithContent(elem) ?? this.root.getChildWithContent(elem);
61
+ }
86
62
  // Forces a re-render of `elem` when the image is next re-rendered as a whole.
87
63
  // Does nothing if `elem` is not in this.
88
- EditorImage.prototype.queueRerenderOf = function (elem) {
64
+ queueRerenderOf(elem) {
89
65
  // TODO: Make more efficient (e.g. increase IDs of all parents,
90
66
  // make cache take into account last modified time instead of IDs, etc.)
91
- var parent = this.findParent(elem);
67
+ const parent = this.findParent(elem);
92
68
  if (parent) {
93
69
  parent.remove();
94
70
  this.addElementDirectly(elem);
95
71
  }
96
- };
72
+ }
97
73
  /** @internal */
98
- EditorImage.prototype.renderWithCache = function (screenRenderer, cache, viewport) {
74
+ renderWithCache(screenRenderer, cache, viewport) {
99
75
  this.background.render(screenRenderer, viewport.visibleRect);
100
76
  cache.render(screenRenderer, this.root, viewport);
101
- };
77
+ }
102
78
  /**
103
79
  * Renders all nodes visible from `viewport` (or all nodes if `viewport = null`).
104
80
  *
105
81
  * `viewport` is used to improve rendering performance. If given, it must match
106
82
  * the viewport used by the `renderer` (if any).
107
83
  */
108
- EditorImage.prototype.render = function (renderer, viewport) {
109
- this.background.render(renderer, viewport === null || viewport === void 0 ? void 0 : viewport.visibleRect);
110
- this.root.render(renderer, viewport === null || viewport === void 0 ? void 0 : viewport.visibleRect);
111
- };
84
+ render(renderer, viewport) {
85
+ this.background.render(renderer, viewport?.visibleRect);
86
+ this.root.render(renderer, viewport?.visibleRect);
87
+ }
112
88
  /** Renders all nodes, even ones not within the viewport. @internal */
113
- EditorImage.prototype.renderAll = function (renderer) {
89
+ renderAll(renderer) {
114
90
  this.render(renderer, null);
115
- };
91
+ }
116
92
  /** @returns all elements in the image, sorted by z-index. This can be slow for large images. */
117
- EditorImage.prototype.getAllElements = function () {
118
- var leaves = this.root.getLeaves();
93
+ getAllElements() {
94
+ const leaves = this.root.getLeaves();
119
95
  (0, exports.sortLeavesByZIndex)(leaves);
120
- return leaves.map(function (leaf) { return leaf.getContent(); });
121
- };
96
+ return leaves.map(leaf => leaf.getContent());
97
+ }
98
+ /** Returns the number of elements added to this image. @internal */
99
+ estimateNumElements() {
100
+ return this.componentCount;
101
+ }
122
102
  /** @returns a list of `AbstractComponent`s intersecting `region`, sorted by z-index. */
123
- EditorImage.prototype.getElementsIntersectingRegion = function (region) {
124
- var leaves = this.root.getLeavesIntersectingRegion(region);
103
+ getElementsIntersectingRegion(region) {
104
+ const leaves = this.root.getLeavesIntersectingRegion(region);
125
105
  (0, exports.sortLeavesByZIndex)(leaves);
126
- return leaves.map(function (leaf) { return leaf.getContent(); });
127
- };
128
- /** @internal */
129
- EditorImage.prototype.onDestroyElement = function (elem) {
106
+ return leaves.map(leaf => leaf.getContent());
107
+ }
108
+ /** Called whenever an element is completely removed. @internal */
109
+ onDestroyElement(elem) {
110
+ this.componentCount--;
130
111
  delete this.componentsById[elem.getId()];
131
- };
112
+ }
132
113
  /**
133
114
  * @returns the AbstractComponent with `id`, if it exists.
134
115
  *
135
116
  * @see {@link AbstractComponent.getId}
136
117
  */
137
- EditorImage.prototype.lookupElement = function (id) {
138
- var _b;
139
- return (_b = this.componentsById[id]) !== null && _b !== void 0 ? _b : null;
140
- };
141
- EditorImage.prototype.addElementDirectly = function (elem) {
118
+ lookupElement(id) {
119
+ return this.componentsById[id] ?? null;
120
+ }
121
+ addElementDirectly(elem) {
142
122
  elem.onAddToImage(this);
123
+ this.componentCount++;
143
124
  this.componentsById[elem.getId()] = elem;
144
125
  // If a background component, add to the background. Else,
145
126
  // add to the normal component tree.
146
- var parentTree = elem.isBackground() ? this.background : this.root;
127
+ const parentTree = elem.isBackground() ? this.background : this.root;
147
128
  return parentTree.addLeaf(elem);
148
- };
149
- EditorImage.prototype.removeElementDirectly = function (element) {
150
- var container = this.findParent(element);
151
- container === null || container === void 0 ? void 0 : container.remove();
129
+ }
130
+ removeElementDirectly(element) {
131
+ const container = this.findParent(element);
132
+ container?.remove();
152
133
  if (container) {
153
134
  this.onDestroyElement(element);
154
135
  return true;
155
136
  }
156
137
  return false;
157
- };
138
+ }
158
139
  /**
159
140
  * Returns a command that adds the given element to the `EditorImage`.
160
141
  * If `applyByFlattening` is true, the content of the wet ink renderer is
@@ -162,233 +143,219 @@ var EditorImage = /** @class */ (function () {
162
143
  *
163
144
  * @see {@link Display.flatten}
164
145
  */
165
- EditorImage.addElement = function (elem, applyByFlattening) {
166
- if (applyByFlattening === void 0) { applyByFlattening = false; }
146
+ static addElement(elem, applyByFlattening = false) {
167
147
  return new EditorImage.AddElementCommand(elem, applyByFlattening);
168
- };
148
+ }
169
149
  /** @see EditorImage.addElement */
170
- EditorImage.prototype.addElement = function (elem, applyByFlattening) {
150
+ addElement(elem, applyByFlattening) {
171
151
  return EditorImage.addElement(elem, applyByFlattening);
172
- };
152
+ }
173
153
  /**
174
154
  * @returns a `Viewport` for rendering the image when importing/exporting.
175
155
  */
176
- EditorImage.prototype.getImportExportViewport = function () {
156
+ getImportExportViewport() {
177
157
  return this.importExportViewport;
178
- };
179
- EditorImage.prototype.setImportExportRect = function (imageRect) {
180
- var importExportViewport = this.getImportExportViewport();
181
- var origSize = importExportViewport.visibleRect.size;
182
- var origTransform = importExportViewport.canvasToScreenTransform;
158
+ }
159
+ setImportExportRect(imageRect) {
160
+ const importExportViewport = this.getImportExportViewport();
161
+ const origSize = importExportViewport.visibleRect.size;
162
+ const origTransform = importExportViewport.canvasToScreenTransform;
183
163
  return new EditorImage.SetImportExportRectCommand(origSize, origTransform, imageRect);
184
- };
185
- var _a, _b, _c;
186
- _a = EditorImage;
187
- // A Command that can access private [EditorImage] functionality
188
- EditorImage.AddElementCommand = (_b = /** @class */ (function (_super) {
189
- __extends(class_1, _super);
190
- // If [applyByFlattening], then the rendered content of this element
191
- // is present on the display's wet ink canvas. As such, no re-render is necessary
192
- // the first time this command is applied (the surfaces are joined instead).
193
- function class_1(element, applyByFlattening) {
194
- if (applyByFlattening === void 0) { applyByFlattening = false; }
195
- var _this = _super.call(this, 'add-element') || this;
196
- _this.element = element;
197
- _this.applyByFlattening = applyByFlattening;
198
- _this.serializedElem = null;
199
- // FIXME: The serialized version of this command may be inaccurate if this is
200
- // serialized when this command is not on the top of the undo stack.
201
- //
202
- // Caching the element's serialized data leads to additional memory usage *and*
203
- // sometimes incorrect behavior in collaborative editing.
204
- _this.serializedElem = null;
205
- if (isNaN(element.getBBox().area)) {
206
- throw new Error('Elements in the image cannot have NaN bounding boxes');
207
- }
208
- return _this;
164
+ }
165
+ }
166
+ _a = EditorImage;
167
+ // A Command that can access private [EditorImage] functionality
168
+ EditorImage.AddElementCommand = (_b = class extends SerializableCommand_1.default {
169
+ // If [applyByFlattening], then the rendered content of this element
170
+ // is present on the display's wet ink canvas. As such, no re-render is necessary
171
+ // the first time this command is applied (the surfaces are joined instead).
172
+ constructor(element, applyByFlattening = false) {
173
+ super('add-element');
174
+ this.element = element;
175
+ this.applyByFlattening = applyByFlattening;
176
+ this.serializedElem = null;
177
+ // FIXME: The serialized version of this command may be inaccurate if this is
178
+ // serialized when this command is not on the top of the undo stack.
179
+ //
180
+ // Caching the element's serialized data leads to additional memory usage *and*
181
+ // sometimes incorrect behavior in collaborative editing.
182
+ this.serializedElem = null;
183
+ if (isNaN(element.getBBox().area)) {
184
+ throw new Error('Elements in the image cannot have NaN bounding boxes');
209
185
  }
210
- class_1.prototype.apply = function (editor) {
211
- editor.image.addElementDirectly(this.element);
212
- if (!this.applyByFlattening) {
213
- editor.queueRerender();
214
- }
215
- else {
216
- this.applyByFlattening = false;
217
- editor.display.flatten();
218
- }
219
- };
220
- class_1.prototype.unapply = function (editor) {
221
- editor.image.removeElementDirectly(this.element);
186
+ }
187
+ apply(editor) {
188
+ editor.image.addElementDirectly(this.element);
189
+ if (!this.applyByFlattening) {
222
190
  editor.queueRerender();
223
- };
224
- class_1.prototype.description = function (_editor, localization) {
225
- return localization.addElementAction(this.element.description(localization));
226
- };
227
- class_1.prototype.serializeToJSON = function () {
228
- var _b;
229
- return {
230
- elemData: (_b = this.serializedElem) !== null && _b !== void 0 ? _b : this.element.serialize(),
231
- };
232
- };
233
- return class_1;
234
- }(SerializableCommand_1.default)),
235
- __setFunctionName(_b, "AddElementCommand"),
236
- (function () {
237
- SerializableCommand_1.default.register('add-element', function (json, editor) {
238
- var id = json.elemData.id;
239
- var foundElem = editor.image.lookupElement(id);
240
- var elem = foundElem !== null && foundElem !== void 0 ? foundElem : AbstractComponent_1.default.deserialize(json.elemData);
241
- var result = new EditorImage.AddElementCommand(elem);
242
- result.serializedElem = json.elemData;
243
- return result;
244
- });
245
- })(),
246
- _b);
247
- // Handles resizing the background import/export region of the image.
248
- EditorImage.SetImportExportRectCommand = (_c = /** @class */ (function (_super) {
249
- __extends(class_2, _super);
250
- function class_2(originalSize, originalTransform, finalRect) {
251
- var _this = _super.call(this, EditorImage.SetImportExportRectCommand.commandId) || this;
252
- _this.originalSize = originalSize;
253
- _this.originalTransform = originalTransform;
254
- _this.finalRect = finalRect;
255
- return _this;
256
191
  }
257
- class_2.prototype.apply = function (editor) {
258
- var viewport = editor.image.getImportExportViewport();
259
- viewport.updateScreenSize(this.finalRect.size);
260
- viewport.resetTransform(Mat33_1.default.translation(this.finalRect.topLeft.times(-1)));
261
- editor.queueRerender();
262
- };
263
- class_2.prototype.unapply = function (editor) {
264
- var viewport = editor.image.getImportExportViewport();
265
- viewport.updateScreenSize(this.originalSize);
266
- viewport.resetTransform(this.originalTransform);
267
- editor.queueRerender();
268
- };
269
- class_2.prototype.description = function (_editor, localization) {
270
- return localization.resizeOutputCommand(this.finalRect);
192
+ else {
193
+ this.applyByFlattening = false;
194
+ editor.display.flatten();
195
+ }
196
+ }
197
+ unapply(editor) {
198
+ editor.image.removeElementDirectly(this.element);
199
+ editor.queueRerender();
200
+ }
201
+ description(_editor, localization) {
202
+ return localization.addElementAction(this.element.description(localization));
203
+ }
204
+ serializeToJSON() {
205
+ return {
206
+ elemData: this.serializedElem ?? this.element.serialize(),
271
207
  };
272
- class_2.prototype.serializeToJSON = function () {
273
- return {
274
- originalSize: this.originalSize.xy,
275
- originalTransform: this.originalTransform.toArray(),
276
- newRegion: {
277
- x: this.finalRect.x,
278
- y: this.finalRect.y,
279
- w: this.finalRect.w,
280
- h: this.finalRect.h,
281
- },
282
- };
208
+ }
209
+ },
210
+ __setFunctionName(_b, "AddElementCommand"),
211
+ (() => {
212
+ SerializableCommand_1.default.register('add-element', (json, editor) => {
213
+ const id = json.elemData.id;
214
+ const foundElem = editor.image.lookupElement(id);
215
+ const elem = foundElem ?? AbstractComponent_1.default.deserialize(json.elemData);
216
+ const result = new EditorImage.AddElementCommand(elem);
217
+ result.serializedElem = json.elemData;
218
+ return result;
219
+ });
220
+ })(),
221
+ _b);
222
+ // Handles resizing the background import/export region of the image.
223
+ EditorImage.SetImportExportRectCommand = (_c = class extends SerializableCommand_1.default {
224
+ constructor(originalSize, originalTransform, finalRect) {
225
+ super(EditorImage.SetImportExportRectCommand.commandId);
226
+ this.originalSize = originalSize;
227
+ this.originalTransform = originalTransform;
228
+ this.finalRect = finalRect;
229
+ }
230
+ apply(editor) {
231
+ const viewport = editor.image.getImportExportViewport();
232
+ viewport.updateScreenSize(this.finalRect.size);
233
+ viewport.resetTransform(math_1.Mat33.translation(this.finalRect.topLeft.times(-1)));
234
+ editor.queueRerender();
235
+ }
236
+ unapply(editor) {
237
+ const viewport = editor.image.getImportExportViewport();
238
+ viewport.updateScreenSize(this.originalSize);
239
+ viewport.resetTransform(this.originalTransform);
240
+ editor.queueRerender();
241
+ }
242
+ description(_editor, localization) {
243
+ return localization.resizeOutputCommand(this.finalRect);
244
+ }
245
+ serializeToJSON() {
246
+ return {
247
+ originalSize: this.originalSize.xy,
248
+ originalTransform: this.originalTransform.toArray(),
249
+ newRegion: {
250
+ x: this.finalRect.x,
251
+ y: this.finalRect.y,
252
+ w: this.finalRect.w,
253
+ h: this.finalRect.h,
254
+ },
283
255
  };
284
- return class_2;
285
- }(SerializableCommand_1.default)),
286
- __setFunctionName(_c, "SetImportExportRectCommand"),
287
- _c.commandId = 'set-import-export-rect',
288
- (function () {
289
- var commandId = _c.commandId;
290
- SerializableCommand_1.default.register(commandId, function (json, _editor) {
291
- (0, assertions_1.assertIsNumber)(json.originalSize.x);
292
- (0, assertions_1.assertIsNumber)(json.originalSize.y);
293
- (0, assertions_1.assertIsNumberArray)(json.originalTransform);
294
- (0, assertions_1.assertIsNumberArray)([
295
- json.newRegion.x,
296
- json.newRegion.y,
297
- json.newRegion.w,
298
- json.newRegion.h,
299
- ]);
300
- var originalSize = Vec2_1.Vec2.ofXY(json.originalSize);
301
- var originalTransform = new (Mat33_1.default.bind.apply(Mat33_1.default, __spreadArray([void 0], json.originalTransform, false)))();
302
- var finalRect = new Rect2_1.default(json.newRegion.x, json.newRegion.y, json.newRegion.w, json.newRegion.h);
303
- return new EditorImage.SetImportExportRectCommand(originalSize, originalTransform, finalRect);
304
- });
305
- })(),
306
- _c);
307
- return EditorImage;
308
- }());
256
+ }
257
+ },
258
+ __setFunctionName(_c, "SetImportExportRectCommand"),
259
+ _c.commandId = 'set-import-export-rect',
260
+ (() => {
261
+ const commandId = _c.commandId;
262
+ SerializableCommand_1.default.register(commandId, (json, _editor) => {
263
+ (0, assertions_1.assertIsNumber)(json.originalSize.x);
264
+ (0, assertions_1.assertIsNumber)(json.originalSize.y);
265
+ (0, assertions_1.assertIsNumberArray)(json.originalTransform);
266
+ (0, assertions_1.assertIsNumberArray)([
267
+ json.newRegion.x,
268
+ json.newRegion.y,
269
+ json.newRegion.w,
270
+ json.newRegion.h,
271
+ ]);
272
+ const originalSize = math_1.Vec2.ofXY(json.originalSize);
273
+ const originalTransform = new math_1.Mat33(...json.originalTransform);
274
+ const finalRect = new math_1.Rect2(json.newRegion.x, json.newRegion.y, json.newRegion.w, json.newRegion.h);
275
+ return new EditorImage.SetImportExportRectCommand(originalSize, originalTransform, finalRect);
276
+ });
277
+ })(),
278
+ _c);
309
279
  exports.default = EditorImage;
310
280
  /** Part of the Editor's image. @internal */
311
- var ImageNode = exports.ImageNode = /** @class */ (function () {
312
- function ImageNode(parent) {
313
- if (parent === void 0) { parent = null; }
281
+ class ImageNode {
282
+ constructor(parent = null) {
314
283
  this.parent = parent;
315
284
  this.targetChildCount = 30;
316
285
  this.children = [];
317
- this.bbox = Rect2_1.default.empty;
286
+ this.bbox = math_1.Rect2.empty;
318
287
  this.content = null;
319
288
  this.id = ImageNode.idCounter++;
320
289
  }
321
- ImageNode.prototype.getId = function () {
290
+ getId() {
322
291
  return this.id;
323
- };
324
- ImageNode.prototype.onContentChange = function () {
292
+ }
293
+ onContentChange() {
325
294
  this.id = ImageNode.idCounter++;
326
- };
327
- ImageNode.prototype.getContent = function () {
295
+ }
296
+ getContent() {
328
297
  return this.content;
329
- };
330
- ImageNode.prototype.getParent = function () {
298
+ }
299
+ getParent() {
331
300
  return this.parent;
332
- };
333
- ImageNode.prototype.getChildrenIntersectingRegion = function (region) {
334
- return this.children.filter(function (child) {
301
+ }
302
+ getChildrenIntersectingRegion(region) {
303
+ return this.children.filter(child => {
335
304
  return child.getBBox().intersects(region);
336
305
  });
337
- };
338
- ImageNode.prototype.getChildrenOrSelfIntersectingRegion = function (region) {
306
+ }
307
+ getChildrenOrSelfIntersectingRegion(region) {
339
308
  if (this.content) {
340
309
  return [this];
341
310
  }
342
311
  return this.getChildrenIntersectingRegion(region);
343
- };
312
+ }
344
313
  // Returns a list of `ImageNode`s with content (and thus no children).
345
- ImageNode.prototype.getLeavesIntersectingRegion = function (region, isTooSmall) {
346
- var result = [];
347
- var current;
348
- var workList = [];
314
+ getLeavesIntersectingRegion(region, isTooSmall) {
315
+ const result = [];
316
+ let current;
317
+ const workList = [];
349
318
  workList.push(this);
350
- var toNext = function () {
319
+ const toNext = () => {
351
320
  current = undefined;
352
- var next = workList.pop();
353
- if (next && !(isTooSmall === null || isTooSmall === void 0 ? void 0 : isTooSmall(next.bbox))) {
321
+ const next = workList.pop();
322
+ if (next && !isTooSmall?.(next.bbox)) {
354
323
  current = next;
355
324
  if (current.content !== null && current.getBBox().intersection(region)) {
356
325
  result.push(current);
357
326
  }
358
- workList.push.apply(workList, current.getChildrenIntersectingRegion(region));
327
+ workList.push(...current.getChildrenIntersectingRegion(region));
359
328
  }
360
329
  };
361
330
  while (workList.length > 0) {
362
331
  toNext();
363
332
  }
364
333
  return result;
365
- };
334
+ }
366
335
  // Returns the child of this with the target content or `null` if no
367
336
  // such child exists.
368
- ImageNode.prototype.getChildWithContent = function (target) {
369
- var candidates = this.getLeavesIntersectingRegion(target.getBBox());
370
- for (var _i = 0, candidates_1 = candidates; _i < candidates_1.length; _i++) {
371
- var candidate = candidates_1[_i];
337
+ getChildWithContent(target) {
338
+ const candidates = this.getLeavesIntersectingRegion(target.getBBox());
339
+ for (const candidate of candidates) {
372
340
  if (candidate.getContent() === target) {
373
341
  return candidate;
374
342
  }
375
343
  }
376
344
  return null;
377
- };
345
+ }
378
346
  // Returns a list of leaves with this as an ancestor.
379
347
  // Like getLeavesInRegion, but does not check whether ancestors are in a given rectangle
380
- ImageNode.prototype.getLeaves = function () {
348
+ getLeaves() {
381
349
  if (this.content) {
382
350
  return [this];
383
351
  }
384
- var result = [];
385
- for (var _i = 0, _b = this.children; _i < _b.length; _i++) {
386
- var child = _b[_i];
387
- result.push.apply(result, child.getLeaves());
352
+ const result = [];
353
+ for (const child of this.children) {
354
+ result.push(...child.getLeaves());
388
355
  }
389
356
  return result;
390
- };
391
- ImageNode.prototype.addLeaf = function (leaf) {
357
+ }
358
+ addLeaf(leaf) {
392
359
  this.onContentChange();
393
360
  if (this.content === null && this.children.length === 0) {
394
361
  this.content = leaf;
@@ -397,7 +364,7 @@ var ImageNode = exports.ImageNode = /** @class */ (function () {
397
364
  }
398
365
  if (this.content !== null) {
399
366
  console.assert(this.children.length === 0);
400
- var contentNode = new ImageNode(this);
367
+ const contentNode = new ImageNode(this);
401
368
  contentNode.content = this.content;
402
369
  this.content = null;
403
370
  this.children.push(contentNode);
@@ -405,14 +372,14 @@ var ImageNode = exports.ImageNode = /** @class */ (function () {
405
372
  }
406
373
  // If this node is contained within the leaf, make this and the leaf
407
374
  // share a parent.
408
- var leafBBox = leaf.getBBox();
375
+ const leafBBox = leaf.getBBox();
409
376
  if (leafBBox.containsRect(this.getBBox())) {
410
- var nodeForNewLeaf = new ImageNode(this);
377
+ const nodeForNewLeaf = new ImageNode(this);
411
378
  if (this.children.length < this.targetChildCount) {
412
379
  this.children.push(nodeForNewLeaf);
413
380
  }
414
381
  else {
415
- var nodeForChildren = new ImageNode(this);
382
+ const nodeForChildren = new ImageNode(this);
416
383
  nodeForChildren.children = this.children;
417
384
  this.children = [nodeForNewLeaf, nodeForChildren];
418
385
  nodeForChildren.recomputeBBox(true);
@@ -420,58 +387,55 @@ var ImageNode = exports.ImageNode = /** @class */ (function () {
420
387
  }
421
388
  return nodeForNewLeaf.addLeaf(leaf);
422
389
  }
423
- var containingNodes = this.children.filter(function (child) { return child.getBBox().containsRect(leafBBox); });
390
+ const containingNodes = this.children.filter(child => child.getBBox().containsRect(leafBBox));
424
391
  // Does the leaf already fit within one of the children?
425
392
  if (containingNodes.length > 0 && this.children.length >= this.targetChildCount) {
426
393
  // Sort the containers in ascending order by area
427
- containingNodes.sort(function (a, b) { return a.getBBox().area - b.getBBox().area; });
394
+ containingNodes.sort((a, b) => a.getBBox().area - b.getBBox().area);
428
395
  // Choose the smallest child that contains the new element.
429
- var result = containingNodes[0].addLeaf(leaf);
396
+ const result = containingNodes[0].addLeaf(leaf);
430
397
  result.rebalance();
431
398
  return result;
432
399
  }
433
- var newNode = new ImageNode(this);
400
+ const newNode = new ImageNode(this);
434
401
  this.children.push(newNode);
435
402
  newNode.content = leaf;
436
403
  newNode.recomputeBBox(true);
437
404
  return newNode;
438
- };
439
- ImageNode.prototype.getBBox = function () {
405
+ }
406
+ getBBox() {
440
407
  return this.bbox;
441
- };
408
+ }
442
409
  // Recomputes this' bounding box. If [bubbleUp], also recompute
443
410
  // this' ancestors bounding boxes. This also re-computes this' bounding box
444
411
  // in the z-direction (z-indicies).
445
- ImageNode.prototype.recomputeBBox = function (bubbleUp) {
446
- var _b;
447
- var oldBBox = this.bbox;
412
+ recomputeBBox(bubbleUp) {
413
+ const oldBBox = this.bbox;
448
414
  if (this.content !== null) {
449
415
  this.bbox = this.content.getBBox();
450
416
  }
451
417
  else {
452
- this.bbox = Rect2_1.default.union.apply(Rect2_1.default, this.children.map(function (child) { return child.getBBox(); }));
418
+ this.bbox = math_1.Rect2.union(...this.children.map(child => child.getBBox()));
453
419
  }
454
420
  if (bubbleUp && !oldBBox.eq(this.bbox)) {
455
- (_b = this.parent) === null || _b === void 0 ? void 0 : _b.recomputeBBox(true);
421
+ this.parent?.recomputeBBox(true);
456
422
  }
457
- };
458
- ImageNode.prototype.updateParents = function (recursive) {
459
- if (recursive === void 0) { recursive = false; }
460
- for (var _i = 0, _b = this.children; _i < _b.length; _i++) {
461
- var child = _b[_i];
423
+ }
424
+ updateParents(recursive = false) {
425
+ for (const child of this.children) {
462
426
  child.parent = this;
463
427
  if (recursive) {
464
428
  child.updateParents(recursive);
465
429
  }
466
430
  }
467
- };
468
- ImageNode.prototype.rebalance = function () {
431
+ }
432
+ rebalance() {
469
433
  // If the current node is its parent's only child,
470
434
  if (this.parent && this.parent.children.length === 1) {
471
435
  console.assert(this.parent.content === null);
472
436
  console.assert(this.parent.children[0] === this);
473
437
  // Remove this' parent, if this' parent isn't the root.
474
- var oldParent = this.parent;
438
+ const oldParent = this.parent;
475
439
  if (oldParent.parent !== null) {
476
440
  oldParent.children = [];
477
441
  this.parent = oldParent.parent;
@@ -486,23 +450,21 @@ var ImageNode = exports.ImageNode = /** @class */ (function () {
486
450
  this.parent = null;
487
451
  }
488
452
  }
489
- };
453
+ }
490
454
  // Remove this node and all of its children
491
- ImageNode.prototype.remove = function () {
492
- var _this = this;
493
- var _b;
494
- (_b = this.content) === null || _b === void 0 ? void 0 : _b.onRemoveFromImage();
455
+ remove() {
456
+ this.content?.onRemoveFromImage();
495
457
  if (!this.parent) {
496
458
  this.content = null;
497
459
  this.children = [];
498
460
  return;
499
461
  }
500
- var oldChildCount = this.parent.children.length;
501
- this.parent.children = this.parent.children.filter(function (node) {
502
- return node !== _this;
462
+ const oldChildCount = this.parent.children.length;
463
+ this.parent.children = this.parent.children.filter(node => {
464
+ return node !== this;
503
465
  });
504
- console.assert(this.parent.children.length === oldChildCount - 1, "".concat(oldChildCount - 1, " \u2260 ").concat(this.parent.children.length, " after removing all nodes equal to ").concat(this, ". Nodes should only be removed once."));
505
- this.parent.children.forEach(function (child) {
466
+ console.assert(this.parent.children.length === oldChildCount - 1, `${oldChildCount - 1} ${this.parent.children.length} after removing all nodes equal to ${this}. Nodes should only be removed once.`);
467
+ this.parent.children.forEach(child => {
506
468
  child.rebalance();
507
469
  });
508
470
  this.parent.recomputeBBox(true);
@@ -510,22 +472,21 @@ var ImageNode = exports.ImageNode = /** @class */ (function () {
510
472
  this.content = null;
511
473
  this.parent = null;
512
474
  this.children = [];
513
- };
514
- ImageNode.prototype.render = function (renderer, visibleRect) {
515
- var leaves;
475
+ }
476
+ render(renderer, visibleRect) {
477
+ let leaves;
516
478
  if (visibleRect) {
517
- leaves = this.getLeavesIntersectingRegion(visibleRect, function (rect) { return renderer.isTooSmallToRender(rect); });
479
+ leaves = this.getLeavesIntersectingRegion(visibleRect, rect => renderer.isTooSmallToRender(rect));
518
480
  }
519
481
  else {
520
482
  leaves = this.getLeaves();
521
483
  }
522
484
  (0, exports.sortLeavesByZIndex)(leaves);
523
- for (var _i = 0, leaves_2 = leaves; _i < leaves_2.length; _i++) {
524
- var leaf = leaves_2[_i];
485
+ for (const leaf of leaves) {
525
486
  // Leaves by definition have content
526
487
  leaf.getContent().render(renderer, visibleRect);
527
488
  }
528
- };
529
- ImageNode.idCounter = 0;
530
- return ImageNode;
531
- }());
489
+ }
490
+ }
491
+ exports.ImageNode = ImageNode;
492
+ ImageNode.idCounter = 0;