js-draw 0.25.0 → 1.0.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 (810) hide show
  1. package/README.md +60 -20
  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 +44 -45
  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 +43 -45
  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/package.json +11 -22
  462. package/src/Coloris.css +8 -8
  463. package/src/Editor.scss +148 -0
  464. package/src/dialogs/dialogs.scss +36 -0
  465. package/src/dialogs/makeAboutDialog.scss +41 -0
  466. package/src/styles.js +1 -1
  467. package/src/toolbar/{toolbar.css → AbstractToolbar.scss} +47 -85
  468. package/src/toolbar/DropdownToolbar.scss +46 -0
  469. package/src/toolbar/EdgeToolbar.scss +511 -0
  470. package/src/toolbar/toolbar.scss +11 -0
  471. package/src/toolbar/widgets/DocumentPropertiesWidget.scss +7 -0
  472. package/src/toolbar/widgets/HandToolWidget.scss +14 -0
  473. package/src/toolbar/widgets/InsertImageWidget.scss +41 -0
  474. package/src/toolbar/widgets/PenToolWidget.css +0 -51
  475. package/src/toolbar/widgets/SelectionToolWidget.scss +6 -0
  476. package/src/toolbar/widgets/components/components.scss +5 -0
  477. package/src/toolbar/widgets/components/makeColorInput.scss +82 -0
  478. package/src/toolbar/widgets/components/makeFileInput.scss +77 -0
  479. package/src/toolbar/widgets/components/makeGridSelector.scss +60 -0
  480. package/src/toolbar/widgets/components/makeSeparator.scss +14 -0
  481. package/src/toolbar/widgets/components/makeThicknessSlider.scss +9 -0
  482. package/src/tools/FindTool.css +3 -3
  483. package/src/tools/SelectionTool/SelectionTool.css +23 -11
  484. package/src/tools/tools.scss +4 -0
  485. package/tsconfig.json +1 -1
  486. package/typedoc.json +4 -0
  487. package/dist/cjs/Color4.d.ts +0 -69
  488. package/dist/cjs/Color4.js +0 -263
  489. package/dist/cjs/Editor.loadFrom.test.d.ts +0 -1
  490. package/dist/cjs/Editor.toSVG.test.d.ts +0 -1
  491. package/dist/cjs/EditorImage.test.d.ts +0 -1
  492. package/dist/cjs/EventDispatcher.test.d.ts +0 -1
  493. package/dist/cjs/SVGLoader.test.d.ts +0 -1
  494. package/dist/cjs/UndoRedoHistory.test.d.ts +0 -1
  495. package/dist/cjs/commands/uniteCommands.test.d.ts +0 -1
  496. package/dist/cjs/components/AbstractComponent.transformBy.test.d.ts +0 -1
  497. package/dist/cjs/components/BackgroundComponent.test.d.ts +0 -1
  498. package/dist/cjs/components/Stroke.test.d.ts +0 -1
  499. package/dist/cjs/components/TextComponent.test.d.ts +0 -1
  500. package/dist/cjs/components/UnknownSVGObject.test.d.ts +0 -1
  501. package/dist/cjs/components/builders/FreehandLineBuilder.test.d.ts +0 -1
  502. package/dist/cjs/localizations/getLocalizationTable.test.d.ts +0 -1
  503. package/dist/cjs/math/Mat33.d.ts +0 -123
  504. package/dist/cjs/math/Mat33.js +0 -340
  505. package/dist/cjs/math/Mat33.test.d.ts +0 -1
  506. package/dist/cjs/math/Vec2.d.ts +0 -33
  507. package/dist/cjs/math/Vec2.js +0 -37
  508. package/dist/cjs/math/Vec2.test.d.ts +0 -1
  509. package/dist/cjs/math/Vec3.d.ts +0 -106
  510. package/dist/cjs/math/Vec3.js +0 -183
  511. package/dist/cjs/math/Vec3.test.d.ts +0 -1
  512. package/dist/cjs/math/lib.d.ts +0 -7
  513. package/dist/cjs/math/lib.js +0 -15
  514. package/dist/cjs/math/polynomial/solveQuadratic.d.ts +0 -9
  515. package/dist/cjs/math/polynomial/solveQuadratic.js +0 -39
  516. package/dist/cjs/math/polynomial/solveQuadratic.test.d.ts +0 -1
  517. package/dist/cjs/math/rounding.d.ts +0 -4
  518. package/dist/cjs/math/rounding.js +0 -140
  519. package/dist/cjs/math/rounding.test.d.ts +0 -1
  520. package/dist/cjs/math/shapes/Abstract2DShape.d.ts +0 -49
  521. package/dist/cjs/math/shapes/Abstract2DShape.js +0 -42
  522. package/dist/cjs/math/shapes/BezierJSWrapper.d.ts +0 -36
  523. package/dist/cjs/math/shapes/BezierJSWrapper.js +0 -109
  524. package/dist/cjs/math/shapes/CubicBezier.d.ts +0 -17
  525. package/dist/cjs/math/shapes/CubicBezier.js +0 -50
  526. package/dist/cjs/math/shapes/LineSegment2.d.ts +0 -70
  527. package/dist/cjs/math/shapes/LineSegment2.js +0 -204
  528. package/dist/cjs/math/shapes/LineSegment2.test.d.ts +0 -1
  529. package/dist/cjs/math/shapes/Path.d.ts +0 -93
  530. package/dist/cjs/math/shapes/Path.fromString.test.d.ts +0 -1
  531. package/dist/cjs/math/shapes/Path.js +0 -865
  532. package/dist/cjs/math/shapes/Path.test.d.ts +0 -1
  533. package/dist/cjs/math/shapes/Path.toString.test.d.ts +0 -1
  534. package/dist/cjs/math/shapes/PointShape2D.d.ts +0 -18
  535. package/dist/cjs/math/shapes/PointShape2D.js +0 -46
  536. package/dist/cjs/math/shapes/QuadraticBezier.d.ts +0 -34
  537. package/dist/cjs/math/shapes/QuadraticBezier.js +0 -133
  538. package/dist/cjs/math/shapes/QuadraticBezier.test.d.ts +0 -1
  539. package/dist/cjs/math/shapes/Rect2.d.ts +0 -57
  540. package/dist/cjs/math/shapes/Rect2.js +0 -311
  541. package/dist/cjs/math/shapes/Rect2.test.d.ts +0 -1
  542. package/dist/cjs/math/shapes/Triangle.d.ts +0 -46
  543. package/dist/cjs/math/shapes/Triangle.js +0 -148
  544. package/dist/cjs/math/shapes/Triangle.test.d.ts +0 -1
  545. package/dist/cjs/rendering/RenderingStyle.test.d.ts +0 -1
  546. package/dist/cjs/rendering/caching/CacheRecord.test.d.ts +0 -1
  547. package/dist/cjs/rendering/caching/RenderingCache.test.d.ts +0 -1
  548. package/dist/cjs/rendering/renderers/DummyRenderer.test.d.ts +0 -1
  549. package/dist/cjs/rendering/renderers/TextOnlyRenderer.test.d.ts +0 -1
  550. package/dist/cjs/shortcuts/KeyBinding.test.d.ts +0 -1
  551. package/dist/cjs/shortcuts/KeyboardShortcutManager.test.d.ts +0 -1
  552. package/dist/cjs/toolbar/HTMLToolbar.d.ts +0 -105
  553. package/dist/cjs/toolbar/HTMLToolbar.js +0 -465
  554. package/dist/cjs/toolbar/makeColorInput.d.ts +0 -6
  555. package/dist/cjs/tools/Eraser.test.d.ts +0 -1
  556. package/dist/cjs/tools/PanZoom.test.d.ts +0 -1
  557. package/dist/cjs/tools/Pen.test.d.ts +0 -1
  558. package/dist/cjs/tools/SelectionTool/SelectionTool.test.d.ts +0 -1
  559. package/dist/cjs/tools/UndoRedoShortcut.test.d.ts +0 -1
  560. package/dist/mjs/Color4.d.ts +0 -69
  561. package/dist/mjs/Color4.mjs +0 -260
  562. package/dist/mjs/Color4.test.d.ts +0 -1
  563. package/dist/mjs/Editor.loadFrom.test.d.ts +0 -1
  564. package/dist/mjs/Editor.toSVG.test.d.ts +0 -1
  565. package/dist/mjs/EditorImage.test.d.ts +0 -1
  566. package/dist/mjs/EventDispatcher.test.d.ts +0 -1
  567. package/dist/mjs/SVGLoader.test.d.ts +0 -1
  568. package/dist/mjs/UndoRedoHistory.test.d.ts +0 -1
  569. package/dist/mjs/commands/uniteCommands.test.d.ts +0 -1
  570. package/dist/mjs/components/AbstractComponent.transformBy.test.d.ts +0 -1
  571. package/dist/mjs/components/BackgroundComponent.test.d.ts +0 -1
  572. package/dist/mjs/components/Stroke.test.d.ts +0 -1
  573. package/dist/mjs/components/TextComponent.test.d.ts +0 -1
  574. package/dist/mjs/components/UnknownSVGObject.test.d.ts +0 -1
  575. package/dist/mjs/components/builders/FreehandLineBuilder.test.d.ts +0 -1
  576. package/dist/mjs/localizations/getLocalizationTable.test.d.ts +0 -1
  577. package/dist/mjs/math/Mat33.d.ts +0 -123
  578. package/dist/mjs/math/Mat33.mjs +0 -338
  579. package/dist/mjs/math/Mat33.test.d.ts +0 -1
  580. package/dist/mjs/math/Vec2.d.ts +0 -33
  581. package/dist/mjs/math/Vec2.mjs +0 -34
  582. package/dist/mjs/math/Vec2.test.d.ts +0 -1
  583. package/dist/mjs/math/Vec3.d.ts +0 -106
  584. package/dist/mjs/math/Vec3.mjs +0 -181
  585. package/dist/mjs/math/Vec3.test.d.ts +0 -1
  586. package/dist/mjs/math/lib.d.ts +0 -7
  587. package/dist/mjs/math/lib.mjs +0 -7
  588. package/dist/mjs/math/polynomial/solveQuadratic.d.ts +0 -9
  589. package/dist/mjs/math/polynomial/solveQuadratic.mjs +0 -37
  590. package/dist/mjs/math/polynomial/solveQuadratic.test.d.ts +0 -1
  591. package/dist/mjs/math/rounding.d.ts +0 -4
  592. package/dist/mjs/math/rounding.mjs +0 -133
  593. package/dist/mjs/math/rounding.test.d.ts +0 -1
  594. package/dist/mjs/math/shapes/Abstract2DShape.d.ts +0 -49
  595. package/dist/mjs/math/shapes/Abstract2DShape.mjs +0 -40
  596. package/dist/mjs/math/shapes/BezierJSWrapper.d.ts +0 -36
  597. package/dist/mjs/math/shapes/BezierJSWrapper.mjs +0 -107
  598. package/dist/mjs/math/shapes/CubicBezier.d.ts +0 -17
  599. package/dist/mjs/math/shapes/CubicBezier.mjs +0 -48
  600. package/dist/mjs/math/shapes/LineSegment2.d.ts +0 -70
  601. package/dist/mjs/math/shapes/LineSegment2.mjs +0 -202
  602. package/dist/mjs/math/shapes/LineSegment2.test.d.ts +0 -1
  603. package/dist/mjs/math/shapes/Path.d.ts +0 -93
  604. package/dist/mjs/math/shapes/Path.fromString.test.d.ts +0 -1
  605. package/dist/mjs/math/shapes/Path.mjs +0 -862
  606. package/dist/mjs/math/shapes/Path.test.d.ts +0 -1
  607. package/dist/mjs/math/shapes/Path.toString.test.d.ts +0 -1
  608. package/dist/mjs/math/shapes/PointShape2D.d.ts +0 -18
  609. package/dist/mjs/math/shapes/PointShape2D.mjs +0 -44
  610. package/dist/mjs/math/shapes/QuadraticBezier.d.ts +0 -34
  611. package/dist/mjs/math/shapes/QuadraticBezier.mjs +0 -131
  612. package/dist/mjs/math/shapes/QuadraticBezier.test.d.ts +0 -1
  613. package/dist/mjs/math/shapes/Rect2.d.ts +0 -57
  614. package/dist/mjs/math/shapes/Rect2.mjs +0 -309
  615. package/dist/mjs/math/shapes/Rect2.test.d.ts +0 -1
  616. package/dist/mjs/math/shapes/Triangle.d.ts +0 -46
  617. package/dist/mjs/math/shapes/Triangle.mjs +0 -146
  618. package/dist/mjs/math/shapes/Triangle.test.d.ts +0 -1
  619. package/dist/mjs/rendering/RenderingStyle.test.d.ts +0 -1
  620. package/dist/mjs/rendering/caching/CacheRecord.test.d.ts +0 -1
  621. package/dist/mjs/rendering/caching/RenderingCache.test.d.ts +0 -1
  622. package/dist/mjs/rendering/renderers/DummyRenderer.test.d.ts +0 -1
  623. package/dist/mjs/rendering/renderers/TextOnlyRenderer.test.d.ts +0 -1
  624. package/dist/mjs/shortcuts/KeyBinding.test.d.ts +0 -1
  625. package/dist/mjs/shortcuts/KeyboardShortcutManager.test.d.ts +0 -1
  626. package/dist/mjs/toolbar/HTMLToolbar.d.ts +0 -105
  627. package/dist/mjs/toolbar/HTMLToolbar.mjs +0 -462
  628. package/dist/mjs/toolbar/makeColorInput.d.ts +0 -6
  629. package/dist/mjs/tools/Eraser.test.d.ts +0 -1
  630. package/dist/mjs/tools/PanZoom.test.d.ts +0 -1
  631. package/dist/mjs/tools/Pen.test.d.ts +0 -1
  632. package/dist/mjs/tools/SelectionTool/SelectionTool.test.d.ts +0 -1
  633. package/dist/mjs/tools/UndoRedoShortcut.test.d.ts +0 -1
  634. package/dist-test/test_imports/package-lock.json +0 -13
  635. package/dist-test/test_imports/package.json +0 -12
  636. package/dist-test/test_imports/test-imports.js +0 -17
  637. package/dist-test/test_imports/test-require.cjs +0 -19
  638. package/src/Color4.test.ts +0 -47
  639. package/src/Color4.ts +0 -304
  640. package/src/Editor.css +0 -98
  641. package/src/Editor.loadFrom.test.ts +0 -24
  642. package/src/Editor.toSVG.test.ts +0 -111
  643. package/src/Editor.ts +0 -1171
  644. package/src/EditorImage.test.ts +0 -120
  645. package/src/EditorImage.ts +0 -603
  646. package/src/EventDispatcher.test.ts +0 -123
  647. package/src/EventDispatcher.ts +0 -72
  648. package/src/Pointer.ts +0 -167
  649. package/src/SVGLoader.test.ts +0 -114
  650. package/src/SVGLoader.ts +0 -610
  651. package/src/UndoRedoHistory.test.ts +0 -33
  652. package/src/UndoRedoHistory.ts +0 -102
  653. package/src/Viewport.ts +0 -325
  654. package/src/bundle/bundled.ts +0 -7
  655. package/src/commands/Command.ts +0 -45
  656. package/src/commands/Duplicate.ts +0 -75
  657. package/src/commands/Erase.ts +0 -94
  658. package/src/commands/SerializableCommand.ts +0 -49
  659. package/src/commands/UnresolvedCommand.ts +0 -37
  660. package/src/commands/invertCommand.ts +0 -58
  661. package/src/commands/lib.ts +0 -16
  662. package/src/commands/localization.ts +0 -47
  663. package/src/commands/uniteCommands.test.ts +0 -23
  664. package/src/commands/uniteCommands.ts +0 -140
  665. package/src/components/AbstractComponent.transformBy.test.ts +0 -22
  666. package/src/components/AbstractComponent.ts +0 -374
  667. package/src/components/BackgroundComponent.test.ts +0 -45
  668. package/src/components/BackgroundComponent.ts +0 -353
  669. package/src/components/ImageComponent.ts +0 -178
  670. package/src/components/RestylableComponent.ts +0 -161
  671. package/src/components/SVGGlobalAttributesObject.ts +0 -81
  672. package/src/components/Stroke.test.ts +0 -139
  673. package/src/components/Stroke.ts +0 -296
  674. package/src/components/TextComponent.test.ts +0 -204
  675. package/src/components/TextComponent.ts +0 -432
  676. package/src/components/UnknownSVGObject.test.ts +0 -10
  677. package/src/components/UnknownSVGObject.ts +0 -60
  678. package/src/components/builders/ArrowBuilder.ts +0 -107
  679. package/src/components/builders/CircleBuilder.ts +0 -102
  680. package/src/components/builders/FreehandLineBuilder.test.ts +0 -25
  681. package/src/components/builders/FreehandLineBuilder.ts +0 -212
  682. package/src/components/builders/LineBuilder.ts +0 -77
  683. package/src/components/builders/PressureSensitiveFreehandLineBuilder.ts +0 -454
  684. package/src/components/builders/RectangleBuilder.ts +0 -74
  685. package/src/components/builders/types.ts +0 -15
  686. package/src/components/lib.ts +0 -31
  687. package/src/components/localization.ts +0 -24
  688. package/src/components/util/StrokeSmoother.ts +0 -302
  689. package/src/components/util/describeComponentList.ts +0 -18
  690. package/src/lib.ts +0 -69
  691. package/src/localization.ts +0 -34
  692. package/src/localizations/de.ts +0 -146
  693. package/src/localizations/en.ts +0 -8
  694. package/src/localizations/es.ts +0 -74
  695. package/src/localizations/getLocalizationTable.test.ts +0 -27
  696. package/src/localizations/getLocalizationTable.ts +0 -74
  697. package/src/math/Mat33.test.ts +0 -244
  698. package/src/math/Mat33.ts +0 -442
  699. package/src/math/Vec2.test.ts +0 -30
  700. package/src/math/Vec2.ts +0 -40
  701. package/src/math/Vec3.test.ts +0 -44
  702. package/src/math/Vec3.ts +0 -218
  703. package/src/math/lib.ts +0 -15
  704. package/src/math/polynomial/solveQuadratic.test.ts +0 -39
  705. package/src/math/polynomial/solveQuadratic.ts +0 -43
  706. package/src/math/rounding.test.ts +0 -65
  707. package/src/math/rounding.ts +0 -156
  708. package/src/math/shapes/Abstract2DShape.ts +0 -63
  709. package/src/math/shapes/BezierJSWrapper.ts +0 -93
  710. package/src/math/shapes/CubicBezier.ts +0 -35
  711. package/src/math/shapes/LineSegment2.test.ts +0 -99
  712. package/src/math/shapes/LineSegment2.ts +0 -231
  713. package/src/math/shapes/Path.fromString.test.ts +0 -223
  714. package/src/math/shapes/Path.test.ts +0 -309
  715. package/src/math/shapes/Path.toString.test.ts +0 -77
  716. package/src/math/shapes/Path.ts +0 -1027
  717. package/src/math/shapes/PointShape2D.ts +0 -33
  718. package/src/math/shapes/QuadraticBezier.test.ts +0 -31
  719. package/src/math/shapes/QuadraticBezier.ts +0 -141
  720. package/src/math/shapes/Rect2.test.ts +0 -209
  721. package/src/math/shapes/Rect2.ts +0 -344
  722. package/src/math/shapes/Triangle.test.ts +0 -61
  723. package/src/math/shapes/Triangle.ts +0 -139
  724. package/src/rendering/Display.ts +0 -248
  725. package/src/rendering/RenderingStyle.test.ts +0 -68
  726. package/src/rendering/RenderingStyle.ts +0 -55
  727. package/src/rendering/TextRenderingStyle.ts +0 -55
  728. package/src/rendering/caching/CacheRecord.test.ts +0 -49
  729. package/src/rendering/caching/CacheRecord.ts +0 -77
  730. package/src/rendering/caching/CacheRecordManager.ts +0 -71
  731. package/src/rendering/caching/RenderingCache.test.ts +0 -44
  732. package/src/rendering/caching/RenderingCache.ts +0 -66
  733. package/src/rendering/caching/RenderingCacheNode.ts +0 -405
  734. package/src/rendering/caching/testUtils.ts +0 -35
  735. package/src/rendering/caching/types.ts +0 -34
  736. package/src/rendering/lib.ts +0 -8
  737. package/src/rendering/localization.ts +0 -20
  738. package/src/rendering/renderers/AbstractRenderer.ts +0 -242
  739. package/src/rendering/renderers/CanvasRenderer.ts +0 -307
  740. package/src/rendering/renderers/DummyRenderer.test.ts +0 -42
  741. package/src/rendering/renderers/DummyRenderer.ts +0 -145
  742. package/src/rendering/renderers/SVGRenderer.ts +0 -377
  743. package/src/rendering/renderers/TextOnlyRenderer.test.ts +0 -34
  744. package/src/rendering/renderers/TextOnlyRenderer.ts +0 -71
  745. package/src/shortcuts/KeyBinding.test.ts +0 -51
  746. package/src/shortcuts/KeyBinding.ts +0 -218
  747. package/src/shortcuts/KeyboardShortcutManager.test.ts +0 -95
  748. package/src/shortcuts/KeyboardShortcutManager.ts +0 -163
  749. package/src/shortcuts/lib.ts +0 -3
  750. package/src/testing/createEditor.ts +0 -11
  751. package/src/testing/getUniquePointerId.ts +0 -18
  752. package/src/testing/lib.ts +0 -3
  753. package/src/testing/sendPenEvent.ts +0 -36
  754. package/src/testing/sendTouchEvent.ts +0 -71
  755. package/src/toolbar/HTMLToolbar.ts +0 -567
  756. package/src/toolbar/IconProvider.ts +0 -805
  757. package/src/toolbar/lib.ts +0 -4
  758. package/src/toolbar/localization.ts +0 -114
  759. package/src/toolbar/makeColorInput.ts +0 -159
  760. package/src/toolbar/types.ts +0 -5
  761. package/src/toolbar/widgets/ActionButtonWidget.ts +0 -39
  762. package/src/toolbar/widgets/BaseToolWidget.ts +0 -65
  763. package/src/toolbar/widgets/BaseWidget.ts +0 -428
  764. package/src/toolbar/widgets/DocumentPropertiesWidget.ts +0 -234
  765. package/src/toolbar/widgets/EraserToolWidget.ts +0 -85
  766. package/src/toolbar/widgets/HandToolWidget.ts +0 -250
  767. package/src/toolbar/widgets/InsertImageWidget.css +0 -44
  768. package/src/toolbar/widgets/InsertImageWidget.ts +0 -223
  769. package/src/toolbar/widgets/OverflowWidget.ts +0 -92
  770. package/src/toolbar/widgets/PenToolWidget.ts +0 -409
  771. package/src/toolbar/widgets/SelectionToolWidget.ts +0 -197
  772. package/src/toolbar/widgets/TextToolWidget.ts +0 -145
  773. package/src/toolbar/widgets/keybindings.ts +0 -21
  774. package/src/toolbar/widgets/lib.ts +0 -13
  775. package/src/tools/BaseTool.ts +0 -97
  776. package/src/tools/Eraser.test.ts +0 -103
  777. package/src/tools/Eraser.ts +0 -160
  778. package/src/tools/FindTool.ts +0 -153
  779. package/src/tools/PanZoom.test.ts +0 -349
  780. package/src/tools/PanZoom.ts +0 -502
  781. package/src/tools/PasteHandler.ts +0 -95
  782. package/src/tools/Pen.test.ts +0 -262
  783. package/src/tools/Pen.ts +0 -300
  784. package/src/tools/PipetteTool.ts +0 -55
  785. package/src/tools/SelectionTool/SelectAllShortcutHandler.ts +0 -29
  786. package/src/tools/SelectionTool/Selection.ts +0 -611
  787. package/src/tools/SelectionTool/SelectionHandle.ts +0 -108
  788. package/src/tools/SelectionTool/SelectionTool.test.ts +0 -261
  789. package/src/tools/SelectionTool/SelectionTool.ts +0 -496
  790. package/src/tools/SelectionTool/TransformMode.ts +0 -114
  791. package/src/tools/SelectionTool/types.ts +0 -11
  792. package/src/tools/SoundUITool.ts +0 -212
  793. package/src/tools/TextTool.ts +0 -340
  794. package/src/tools/ToolController.ts +0 -200
  795. package/src/tools/ToolEnabledGroup.ts +0 -14
  796. package/src/tools/ToolSwitcherShortcut.ts +0 -39
  797. package/src/tools/ToolbarShortcutHandler.ts +0 -39
  798. package/src/tools/UndoRedoShortcut.test.ts +0 -56
  799. package/src/tools/UndoRedoShortcut.ts +0 -24
  800. package/src/tools/keybindings.ts +0 -85
  801. package/src/tools/lib.ts +0 -22
  802. package/src/tools/localization.ts +0 -74
  803. package/src/tools/tools.css +0 -4
  804. package/src/types.ts +0 -239
  805. package/src/util/assertions.ts +0 -55
  806. package/src/util/fileToBase64.ts +0 -18
  807. package/src/util/untilNextAnimationFrame.ts +0 -9
  808. package/src/util/waitForAll.ts +0 -18
  809. package/src/util/waitForTimeout.ts +0 -9
  810. /package/dist/{cjs/Color4.test.d.ts → mjs/toolbar/widgets/layout/types.mjs} +0 -0
@@ -3,95 +3,59 @@
3
3
  * @internal
4
4
  * @packageDocumentation
5
5
  */
6
- var __extends = (this && this.__extends) || (function () {
7
- var extendStatics = function (d, b) {
8
- extendStatics = Object.setPrototypeOf ||
9
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
10
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
11
- return extendStatics(d, b);
12
- };
13
- return function (d, b) {
14
- if (typeof b !== "function" && b !== null)
15
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
16
- extendStatics(d, b);
17
- function __() { this.constructor = d; }
18
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
19
- };
20
- })();
21
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
- return new (P || (P = Promise))(function (resolve, reject) {
24
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
- step((generator = generator.apply(thisArg, _arguments || [])).next());
28
- });
29
- };
30
- var __generator = (this && this.__generator) || function (thisArg, body) {
31
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
32
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
33
- function verb(n) { return function (v) { return step([n, v]); }; }
34
- function step(op) {
35
- if (f) throw new TypeError("Generator is already executing.");
36
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
37
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
38
- if (y = 0, t) op = [op[0] & 2, t.value];
39
- switch (op[0]) {
40
- case 0: case 1: t = op; break;
41
- case 4: _.label++; return { value: op[1], done: false };
42
- case 5: _.label++; y = op[1]; op = [0]; continue;
43
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
44
- default:
45
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
46
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
47
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
48
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
49
- if (t[2]) _.ops.pop();
50
- _.trys.pop(); continue;
51
- }
52
- op = body.call(thisArg, _);
53
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
54
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
55
11
  }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
56
28
  };
57
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
58
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
59
- if (ar || !(i in from)) {
60
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
61
- ar[i] = from[i];
62
- }
63
- }
64
- return to.concat(ar || Array.prototype.slice.call(from));
29
+ var __importDefault = (this && this.__importDefault) || function (mod) {
30
+ return (mod && mod.__esModule) ? mod : { "default": mod };
65
31
  };
66
- var _this = this;
32
+ var _a;
67
33
  Object.defineProperty(exports, "__esModule", { value: true });
68
- var SerializableCommand_1 = require("../../commands/SerializableCommand");
69
- var Mat33_1 = require("../../math/Mat33");
70
- var Rect2_1 = require("../../math/shapes/Rect2");
71
- var Vec2_1 = require("../../math/Vec2");
72
- var SelectionHandle_1 = require("./SelectionHandle");
73
- var SelectionTool_1 = require("./SelectionTool");
74
- var Viewport_1 = require("../../Viewport");
75
- var Erase_1 = require("../../commands/Erase");
76
- var Duplicate_1 = require("../../commands/Duplicate");
77
- var TransformMode_1 = require("./TransformMode");
78
- var types_1 = require("./types");
79
- var EditorImage_1 = require("../../EditorImage");
80
- var updateChunkSize = 100;
81
- var maxPreviewElemCount = 500;
34
+ const SerializableCommand_1 = __importDefault(require("../../commands/SerializableCommand"));
35
+ const math_1 = require("@js-draw/math");
36
+ const SelectionHandle_1 = __importStar(require("./SelectionHandle"));
37
+ const SelectionTool_1 = require("./SelectionTool");
38
+ const Viewport_1 = __importDefault(require("../../Viewport"));
39
+ const Erase_1 = __importDefault(require("../../commands/Erase"));
40
+ const Duplicate_1 = __importDefault(require("../../commands/Duplicate"));
41
+ const TransformMode_1 = require("./TransformMode");
42
+ const types_1 = require("./types");
43
+ const EditorImage_1 = __importDefault(require("../../EditorImage"));
44
+ const updateChunkSize = 100;
45
+ const maxPreviewElemCount = 500;
82
46
  // @internal
83
- var Selection = /** @class */ (function () {
84
- function Selection(startPoint, editor) {
85
- var _this = this;
47
+ class Selection {
48
+ constructor(startPoint, editor) {
86
49
  this.editor = editor;
87
- this.transform = Mat33_1.default.identity;
50
+ this.transform = math_1.Mat33.identity;
88
51
  this.selectedElems = [];
89
52
  this.hasParent = true;
90
53
  // Maps IDs to whether we removed the component from the image
91
54
  this.removedFromImage = {};
92
55
  this.targetHandle = null;
93
56
  this.backgroundDragging = false;
94
- this.originalRegion = new Rect2_1.default(startPoint.x, startPoint.y, 0, 0);
57
+ this.selectionDuplicatedAnimationTimeout = null;
58
+ this.originalRegion = new math_1.Rect2(startPoint.x, startPoint.y, 0, 0);
95
59
  this.transformers = {
96
60
  drag: new TransformMode_1.DragTransformer(editor, this),
97
61
  resize: new TransformMode_1.ResizeTransformer(editor, this),
@@ -99,156 +63,123 @@ var Selection = /** @class */ (function () {
99
63
  };
100
64
  this.container = document.createElement('div');
101
65
  this.backgroundElem = document.createElement('div');
102
- this.backgroundElem.classList.add("".concat(SelectionTool_1.cssPrefix, "selection-background"));
66
+ this.backgroundElem.classList.add(`${SelectionTool_1.cssPrefix}selection-background`);
103
67
  this.container.appendChild(this.backgroundElem);
104
- var resizeHorizontalHandle = new SelectionHandle_1.default(SelectionHandle_1.HandleShape.Square, Vec2_1.Vec2.of(1, 0.5), this, function (startPoint) { return _this.transformers.resize.onDragStart(startPoint, types_1.ResizeMode.HorizontalOnly); }, function (currentPoint) { return _this.transformers.resize.onDragUpdate(currentPoint); }, function () { return _this.transformers.resize.onDragEnd(); });
105
- var resizeVerticalHandle = new SelectionHandle_1.default(SelectionHandle_1.HandleShape.Square, Vec2_1.Vec2.of(0.5, 1), this, function (startPoint) { return _this.transformers.resize.onDragStart(startPoint, types_1.ResizeMode.VerticalOnly); }, function (currentPoint) { return _this.transformers.resize.onDragUpdate(currentPoint); }, function () { return _this.transformers.resize.onDragEnd(); });
106
- var resizeBothHandle = new SelectionHandle_1.default(SelectionHandle_1.HandleShape.Square, Vec2_1.Vec2.of(1, 1), this, function (startPoint) { return _this.transformers.resize.onDragStart(startPoint, types_1.ResizeMode.Both); }, function (currentPoint) { return _this.transformers.resize.onDragUpdate(currentPoint); }, function () { return _this.transformers.resize.onDragEnd(); });
107
- var rotationHandle = new SelectionHandle_1.default(SelectionHandle_1.HandleShape.Circle, Vec2_1.Vec2.of(0.5, 0), this, function (startPoint) { return _this.transformers.rotate.onDragStart(startPoint); }, function (currentPoint) { return _this.transformers.rotate.onDragUpdate(currentPoint); }, function () { return _this.transformers.rotate.onDragEnd(); });
68
+ const resizeHorizontalHandle = new SelectionHandle_1.default(SelectionHandle_1.HandleShape.Square, math_1.Vec2.of(1, 0.5), this, this.editor.viewport, (startPoint) => this.transformers.resize.onDragStart(startPoint, types_1.ResizeMode.HorizontalOnly), (currentPoint) => this.transformers.resize.onDragUpdate(currentPoint), () => this.transformers.resize.onDragEnd());
69
+ const resizeVerticalHandle = new SelectionHandle_1.default(SelectionHandle_1.HandleShape.Square, math_1.Vec2.of(0.5, 1), this, this.editor.viewport, (startPoint) => this.transformers.resize.onDragStart(startPoint, types_1.ResizeMode.VerticalOnly), (currentPoint) => this.transformers.resize.onDragUpdate(currentPoint), () => this.transformers.resize.onDragEnd());
70
+ const resizeBothHandle = new SelectionHandle_1.default(SelectionHandle_1.HandleShape.Square, math_1.Vec2.of(1, 1), this, this.editor.viewport, (startPoint) => this.transformers.resize.onDragStart(startPoint, types_1.ResizeMode.Both), (currentPoint) => this.transformers.resize.onDragUpdate(currentPoint), () => this.transformers.resize.onDragEnd());
71
+ const rotationHandle = new SelectionHandle_1.default(SelectionHandle_1.HandleShape.Circle, math_1.Vec2.of(0.5, 0), this, this.editor.viewport, (startPoint) => this.transformers.rotate.onDragStart(startPoint), (currentPoint) => this.transformers.rotate.onDragUpdate(currentPoint), () => this.transformers.rotate.onDragEnd());
108
72
  this.handles = [
109
73
  resizeBothHandle,
110
74
  resizeHorizontalHandle,
111
75
  resizeVerticalHandle,
112
76
  rotationHandle,
113
77
  ];
114
- for (var _i = 0, _b = this.handles; _i < _b.length; _i++) {
115
- var handle = _b[_i];
78
+ for (const handle of this.handles) {
116
79
  handle.addTo(this.backgroundElem);
117
80
  }
118
81
  }
119
82
  // @internal Intended for unit tests
120
- Selection.prototype.getBackgroundElem = function () {
83
+ getBackgroundElem() {
121
84
  return this.backgroundElem;
122
- };
123
- Selection.prototype.getTransform = function () {
85
+ }
86
+ getTransform() {
124
87
  return this.transform;
125
- };
126
- Object.defineProperty(Selection.prototype, "preTransformRegion", {
127
- get: function () {
128
- return this.originalRegion;
129
- },
130
- enumerable: false,
131
- configurable: true
132
- });
133
- Object.defineProperty(Selection.prototype, "region", {
134
- get: function () {
135
- // TODO: This currently assumes that the region rotates about its center.
136
- // This may not be true.
137
- var rotationMatrix = Mat33_1.default.zRotation(this.regionRotation, this.originalRegion.center);
138
- var scaleAndTranslateMat = this.transform.rightMul(rotationMatrix.inverse());
139
- return this.originalRegion.transformedBoundingBox(scaleAndTranslateMat);
140
- },
141
- enumerable: false,
142
- configurable: true
143
- });
88
+ }
89
+ get preTransformRegion() {
90
+ return this.originalRegion;
91
+ }
92
+ get region() {
93
+ // TODO: This currently assumes that the region rotates about its center.
94
+ // This may not be true.
95
+ const rotationMatrix = math_1.Mat33.zRotation(this.regionRotation, this.originalRegion.center);
96
+ const scaleAndTranslateMat = this.transform.rightMul(rotationMatrix.inverse());
97
+ return this.originalRegion.transformedBoundingBox(scaleAndTranslateMat);
98
+ }
144
99
  /**
145
100
  * Computes and returns the bounding box of the selection without
146
101
  * any additional padding. Computes directly from the elements that are selected.
147
102
  * @internal
148
103
  */
149
- Selection.prototype.computeTightBoundingBox = function () {
150
- var bbox = this.selectedElems.reduce(function (accumulator, elem) {
151
- return (accumulator !== null && accumulator !== void 0 ? accumulator : elem.getBBox()).union(elem.getBBox());
104
+ computeTightBoundingBox() {
105
+ const bbox = this.selectedElems.reduce((accumulator, elem) => {
106
+ return (accumulator ?? elem.getBBox()).union(elem.getBBox());
152
107
  }, null);
153
- return bbox !== null && bbox !== void 0 ? bbox : Rect2_1.default.empty;
154
- };
155
- Object.defineProperty(Selection.prototype, "regionRotation", {
156
- get: function () {
157
- return this.transform.transformVec3(Vec2_1.Vec2.unitX).angle();
158
- },
159
- enumerable: false,
160
- configurable: true
161
- });
162
- Object.defineProperty(Selection.prototype, "preTransformedScreenRegion", {
163
- get: function () {
164
- var _this = this;
165
- var toScreen = function (vec) { return _this.editor.viewport.canvasToScreen(vec); };
166
- return Rect2_1.default.fromCorners(toScreen(this.preTransformRegion.topLeft), toScreen(this.preTransformRegion.bottomRight));
167
- },
168
- enumerable: false,
169
- configurable: true
170
- });
171
- Object.defineProperty(Selection.prototype, "preTransformedScreenRegionRotation", {
172
- get: function () {
173
- return this.editor.viewport.getRotationAngle();
174
- },
175
- enumerable: false,
176
- configurable: true
177
- });
178
- Object.defineProperty(Selection.prototype, "screenRegion", {
179
- get: function () {
180
- var toScreen = this.editor.viewport.canvasToScreenTransform;
181
- var scaleFactor = this.editor.viewport.getScaleFactor();
182
- var screenCenter = toScreen.transformVec2(this.region.center);
183
- return new Rect2_1.default(screenCenter.x, screenCenter.y, scaleFactor * this.region.width, scaleFactor * this.region.height).translatedBy(this.region.size.times(-scaleFactor / 2));
184
- },
185
- enumerable: false,
186
- configurable: true
187
- });
188
- Object.defineProperty(Selection.prototype, "screenRegionRotation", {
189
- get: function () {
190
- return this.regionRotation + this.editor.viewport.getRotationAngle();
191
- },
192
- enumerable: false,
193
- configurable: true
194
- });
108
+ return bbox ?? math_1.Rect2.empty;
109
+ }
110
+ get regionRotation() {
111
+ return this.transform.transformVec3(math_1.Vec2.unitX).angle();
112
+ }
113
+ get preTransformedScreenRegion() {
114
+ const toScreen = (vec) => this.editor.viewport.canvasToScreen(vec);
115
+ return math_1.Rect2.fromCorners(toScreen(this.preTransformRegion.topLeft), toScreen(this.preTransformRegion.bottomRight));
116
+ }
117
+ get preTransformedScreenRegionRotation() {
118
+ return this.editor.viewport.getRotationAngle();
119
+ }
120
+ get screenRegion() {
121
+ const toScreen = this.editor.viewport.canvasToScreenTransform;
122
+ const scaleFactor = this.editor.viewport.getScaleFactor();
123
+ const screenCenter = toScreen.transformVec2(this.region.center);
124
+ return new math_1.Rect2(screenCenter.x, screenCenter.y, scaleFactor * this.region.width, scaleFactor * this.region.height).translatedBy(this.region.size.times(-scaleFactor / 2));
125
+ }
126
+ get screenRegionRotation() {
127
+ return this.regionRotation + this.editor.viewport.getRotationAngle();
128
+ }
195
129
  // Applies, previews, but doesn't finalize the given transformation.
196
- Selection.prototype.setTransform = function (transform, preview) {
197
- if (preview === void 0) { preview = true; }
130
+ setTransform(transform, preview = true) {
198
131
  this.transform = transform;
199
132
  if (preview && this.hasParent) {
200
133
  this.scrollTo();
201
134
  this.previewTransformCmds();
202
135
  }
203
- };
136
+ }
204
137
  // Applies the current transformation to the selection
205
- Selection.prototype.finalizeTransform = function () {
206
- var fullTransform = this.transform;
207
- var selectedElems = this.selectedElems;
138
+ async finalizeTransform() {
139
+ const fullTransform = this.transform;
140
+ const selectedElems = this.selectedElems;
208
141
  // Reset for the next drag
209
142
  this.originalRegion = this.originalRegion.transformedBoundingBox(this.transform);
210
- this.transform = Mat33_1.default.identity;
143
+ this.transform = math_1.Mat33.identity;
211
144
  // Make the commands undo-able
212
- this.editor.dispatch(new Selection.ApplyTransformationCommand(this, selectedElems, fullTransform));
145
+ await this.editor.dispatch(new Selection.ApplyTransformationCommand(this, selectedElems, fullTransform));
213
146
  // Clear renderings of any in-progress transformations
214
- var wetInkRenderer = this.editor.display.getWetInkRenderer();
147
+ const wetInkRenderer = this.editor.display.getWetInkRenderer();
215
148
  wetInkRenderer.clear();
216
- };
149
+ }
217
150
  // Preview the effects of the current transformation on the selection
218
- Selection.prototype.previewTransformCmds = function () {
151
+ previewTransformCmds() {
219
152
  // Don't render what we're moving if it's likely to be slow.
220
153
  if (this.selectedElems.length > maxPreviewElemCount) {
221
154
  this.updateUI();
222
155
  return;
223
156
  }
224
- var wetInkRenderer = this.editor.display.getWetInkRenderer();
157
+ const wetInkRenderer = this.editor.display.getWetInkRenderer();
225
158
  wetInkRenderer.clear();
226
159
  wetInkRenderer.pushTransform(this.transform);
227
- var viewportVisibleRect = this.editor.viewport.visibleRect;
228
- var visibleRect = viewportVisibleRect.transformedBoundingBox(this.transform.inverse());
229
- for (var _i = 0, _b = this.selectedElems; _i < _b.length; _i++) {
230
- var elem = _b[_i];
160
+ const viewportVisibleRect = this.editor.viewport.visibleRect;
161
+ const visibleRect = viewportVisibleRect.transformedBoundingBox(this.transform.inverse());
162
+ for (const elem of this.selectedElems) {
231
163
  elem.render(wetInkRenderer, visibleRect);
232
164
  }
233
165
  wetInkRenderer.popTransform();
234
166
  this.updateUI();
235
- };
167
+ }
236
168
  // Find the objects corresponding to this in the document,
237
169
  // select them.
238
170
  // Returns false iff nothing was selected.
239
- Selection.prototype.resolveToObjects = function () {
240
- var _this = this;
241
- var singleItemSelectionMode = false;
242
- this.transform = Mat33_1.default.identity;
171
+ resolveToObjects() {
172
+ let singleItemSelectionMode = false;
173
+ this.transform = math_1.Mat33.identity;
243
174
  // Grow the rectangle, if necessary
244
175
  if (this.region.w === 0 || this.region.h === 0) {
245
- var padding = this.editor.viewport.visibleRect.maxDimension / 200;
246
- this.originalRegion = Rect2_1.default.bboxOf(this.region.corners, padding);
176
+ const padding = this.editor.viewport.visibleRect.maxDimension / 200;
177
+ this.originalRegion = math_1.Rect2.bboxOf(this.region.corners, padding);
247
178
  // Only select one item if the rectangle was very small.
248
179
  singleItemSelectionMode = true;
249
180
  }
250
- this.selectedElems = this.editor.image.getElementsIntersectingRegion(this.region).filter(function (elem) {
251
- return elem.intersectsRect(_this.region) && elem.isSelectable();
181
+ this.selectedElems = this.editor.image.getElementsIntersectingRegion(this.region).filter(elem => {
182
+ return elem.intersectsRect(this.region) && elem.isSelectable();
252
183
  });
253
184
  if (singleItemSelectionMode && this.selectedElems.length > 0) {
254
185
  this.selectedElems = [this.selectedElems[this.selectedElems.length - 1]];
@@ -259,51 +190,50 @@ var Selection = /** @class */ (function () {
259
190
  }
260
191
  this.updateUI();
261
192
  return true;
262
- };
193
+ }
263
194
  // Recompute this' region from the selected elements.
264
195
  // Returns false if the selection is empty.
265
- Selection.prototype.recomputeRegion = function () {
266
- var newRegion = this.computeTightBoundingBox();
196
+ recomputeRegion() {
197
+ const newRegion = this.computeTightBoundingBox();
267
198
  if (!newRegion) {
268
199
  this.cancelSelection();
269
200
  return false;
270
201
  }
271
202
  this.originalRegion = newRegion;
272
- var minSize = this.getMinCanvasSize();
203
+ const minSize = this.getMinCanvasSize();
273
204
  if (this.originalRegion.w < minSize || this.originalRegion.h < minSize) {
274
205
  // Add padding
275
- var padding = minSize / 2;
276
- this.originalRegion = Rect2_1.default.bboxOf(this.originalRegion.corners, padding);
206
+ const padding = minSize / 2;
207
+ this.originalRegion = math_1.Rect2.bboxOf(this.originalRegion.corners, padding);
277
208
  }
278
209
  return true;
279
- };
280
- Selection.prototype.getMinCanvasSize = function () {
281
- var canvasHandleSize = SelectionHandle_1.handleSize / this.editor.viewport.getScaleFactor();
210
+ }
211
+ getMinCanvasSize() {
212
+ const canvasHandleSize = SelectionHandle_1.handleSize / this.editor.viewport.getScaleFactor();
282
213
  return canvasHandleSize * 2;
283
- };
284
- Selection.prototype.getSelectedItemCount = function () {
214
+ }
215
+ getSelectedItemCount() {
285
216
  return this.selectedElems.length;
286
- };
217
+ }
287
218
  // @internal
288
- Selection.prototype.updateUI = function () {
219
+ updateUI() {
289
220
  // Don't update old selections.
290
221
  if (!this.hasParent) {
291
222
  return;
292
223
  }
293
224
  // marginLeft, marginTop: Display relative to the top left of the selection overlay.
294
225
  // left, top don't work for this.
295
- this.backgroundElem.style.marginLeft = "".concat(this.screenRegion.topLeft.x, "px");
296
- this.backgroundElem.style.marginTop = "".concat(this.screenRegion.topLeft.y, "px");
297
- this.backgroundElem.style.width = "".concat(this.screenRegion.width, "px");
298
- this.backgroundElem.style.height = "".concat(this.screenRegion.height, "px");
299
- var rotationDeg = this.screenRegionRotation * 180 / Math.PI;
300
- this.backgroundElem.style.transform = "rotate(".concat(rotationDeg, "deg)");
226
+ this.backgroundElem.style.marginLeft = `${this.screenRegion.topLeft.x}px`;
227
+ this.backgroundElem.style.marginTop = `${this.screenRegion.topLeft.y}px`;
228
+ this.backgroundElem.style.width = `${this.screenRegion.width}px`;
229
+ this.backgroundElem.style.height = `${this.screenRegion.height}px`;
230
+ const rotationDeg = this.screenRegionRotation * 180 / Math.PI;
231
+ this.backgroundElem.style.transform = `rotate(${rotationDeg}deg)`;
301
232
  this.backgroundElem.style.transformOrigin = 'center';
302
- for (var _i = 0, _b = this.handles; _i < _b.length; _i++) {
303
- var handle = _b[_i];
233
+ for (const handle of this.handles) {
304
234
  handle.updatePosition();
305
235
  }
306
- };
236
+ }
307
237
  // Add/remove the contents of this' seleciton from the editor.
308
238
  // Used to prevent previewed content from looking like duplicate content
309
239
  // while dragging.
@@ -312,22 +242,20 @@ var Selection = /** @class */ (function () {
312
242
  // the editor image is likely to be slow.)
313
243
  //
314
244
  // If removed from the image, selected elements are drawn as wet ink.
315
- Selection.prototype.addRemoveSelectionFromImage = function (inImage) {
316
- var _this = this;
245
+ addRemoveSelectionFromImage(inImage) {
317
246
  // Don't hide elements if doing so will be slow.
318
247
  if (!inImage && this.selectedElems.length > maxPreviewElemCount) {
319
248
  return;
320
249
  }
321
- for (var _i = 0, _b = this.selectedElems; _i < _b.length; _i++) {
322
- var elem = _b[_i];
323
- var parent_1 = this.editor.image.findParent(elem);
324
- if (!inImage && parent_1) {
250
+ for (const elem of this.selectedElems) {
251
+ const parent = this.editor.image.findParent(elem);
252
+ if (!inImage && parent) {
325
253
  this.removedFromImage[elem.getId()] = true;
326
- parent_1.remove();
254
+ parent.remove();
327
255
  }
328
256
  // If we're making things visible and the selected object wasn't previously
329
257
  // visible,
330
- else if (!parent_1 && this.removedFromImage[elem.getId()]) {
258
+ else if (!parent && this.removedFromImage[elem.getId()]) {
331
259
  EditorImage_1.default.addElement(elem).apply(this.editor);
332
260
  this.removedFromImage[elem.getId()] = false;
333
261
  delete this.removedFromImage[elem.getId()];
@@ -335,50 +263,59 @@ var Selection = /** @class */ (function () {
335
263
  }
336
264
  // Don't await queueRerender. If we're running in a test, the re-render might never
337
265
  // happen.
338
- this.editor.queueRerender().then(function () {
266
+ this.editor.queueRerender().then(() => {
339
267
  if (!inImage) {
340
- _this.previewTransformCmds();
268
+ this.previewTransformCmds();
341
269
  }
342
270
  });
343
- };
344
- Selection.prototype.removeDeletedElemsFromSelection = function () {
345
- var _this = this;
271
+ }
272
+ removeDeletedElemsFromSelection() {
346
273
  // Remove any deleted elements from the selection.
347
- this.selectedElems = this.selectedElems.filter(function (elem) {
348
- var hasParent = !!_this.editor.image.findParent(elem);
274
+ this.selectedElems = this.selectedElems.filter(elem => {
275
+ const hasParent = !!this.editor.image.findParent(elem);
349
276
  // If we removed the element and haven't added it back yet, don't remove it
350
277
  // from the selection.
351
- var weRemoved = _this.removedFromImage[elem.getId()];
278
+ const weRemoved = this.removedFromImage[elem.getId()];
352
279
  return hasParent || weRemoved;
353
280
  });
354
- };
355
- Selection.prototype.onDragStart = function (pointer, target) {
356
- this.removeDeletedElemsFromSelection();
357
- this.addRemoveSelectionFromImage(false);
358
- for (var _i = 0, _b = this.handles; _i < _b.length; _i++) {
359
- var handle = _b[_i];
360
- if (handle.isTarget(target)) {
361
- handle.handleDragStart(pointer);
281
+ }
282
+ onDragStart(pointer) {
283
+ // Clear the HTML selection (prevent HTML drag and drop being triggered by this drag)
284
+ document.getSelection()?.removeAllRanges();
285
+ this.targetHandle = null;
286
+ let result = false;
287
+ for (const handle of this.handles) {
288
+ if (handle.containsPoint(pointer.canvasPos)) {
362
289
  this.targetHandle = handle;
363
- return true;
290
+ result = true;
364
291
  }
365
292
  }
366
- if (this.backgroundElem === target) {
293
+ this.backgroundDragging = false;
294
+ if (this.region.containsPoint(pointer.canvasPos)) {
367
295
  this.backgroundDragging = true;
296
+ result = true;
297
+ }
298
+ if (result) {
299
+ this.removeDeletedElemsFromSelection();
300
+ this.addRemoveSelectionFromImage(false);
301
+ }
302
+ if (this.targetHandle) {
303
+ this.targetHandle.handleDragStart(pointer);
304
+ }
305
+ if (this.backgroundDragging) {
368
306
  this.transformers.drag.onDragStart(pointer.canvasPos);
369
- return true;
370
307
  }
371
- return false;
372
- };
373
- Selection.prototype.onDragUpdate = function (pointer) {
308
+ return result;
309
+ }
310
+ onDragUpdate(pointer) {
374
311
  if (this.backgroundDragging) {
375
312
  this.transformers.drag.onDragUpdate(pointer.canvasPos);
376
313
  }
377
314
  if (this.targetHandle) {
378
315
  this.targetHandle.handleDragUpdate(pointer);
379
316
  }
380
- };
381
- Selection.prototype.onDragEnd = function () {
317
+ }
318
+ onDragEnd() {
382
319
  if (this.backgroundDragging) {
383
320
  this.transformers.drag.onDragEnd();
384
321
  }
@@ -389,214 +326,170 @@ var Selection = /** @class */ (function () {
389
326
  this.backgroundDragging = false;
390
327
  this.targetHandle = null;
391
328
  this.updateUI();
392
- };
393
- Selection.prototype.onDragCancel = function () {
329
+ }
330
+ onDragCancel() {
394
331
  this.backgroundDragging = false;
395
332
  this.targetHandle = null;
396
- this.setTransform(Mat33_1.default.identity);
333
+ this.setTransform(math_1.Mat33.identity);
397
334
  this.addRemoveSelectionFromImage(true);
398
- };
335
+ }
399
336
  // Scroll the viewport to this. Does not zoom
400
- Selection.prototype.scrollTo = function () {
401
- return __awaiter(this, void 0, void 0, function () {
402
- var screenRect, closestPoint, screenDelta, delta;
403
- return __generator(this, function (_b) {
404
- switch (_b.label) {
405
- case 0:
406
- if (this.selectedElems.length === 0) {
407
- return [2 /*return*/];
408
- }
409
- screenRect = new Rect2_1.default(0, 0, this.editor.display.width, this.editor.display.height);
410
- if (!!screenRect.containsPoint(this.screenRegion.center)) return [3 /*break*/, 3];
411
- closestPoint = screenRect.getClosestPointOnBoundaryTo(this.screenRegion.center);
412
- screenDelta = this.screenRegion.center.minus(closestPoint);
413
- delta = this.editor.viewport.screenToCanvasTransform.transformVec3(screenDelta);
414
- return [4 /*yield*/, this.editor.dispatchNoAnnounce(Viewport_1.default.transformBy(Mat33_1.default.translation(delta.times(-1))), false)];
415
- case 1:
416
- _b.sent();
417
- // Re-renders clear wet ink, so we need to re-draw the preview
418
- // after the full re-render.
419
- return [4 /*yield*/, this.editor.queueRerender()];
420
- case 2:
421
- // Re-renders clear wet ink, so we need to re-draw the preview
422
- // after the full re-render.
423
- _b.sent();
424
- this.previewTransformCmds();
425
- _b.label = 3;
426
- case 3: return [2 /*return*/];
427
- }
428
- });
429
- });
430
- };
431
- Selection.prototype.deleteSelectedObjects = function () {
337
+ async scrollTo() {
338
+ if (this.selectedElems.length === 0) {
339
+ return;
340
+ }
341
+ const screenRect = new math_1.Rect2(0, 0, this.editor.display.width, this.editor.display.height);
342
+ if (!screenRect.containsPoint(this.screenRegion.center)) {
343
+ const closestPoint = screenRect.getClosestPointOnBoundaryTo(this.screenRegion.center);
344
+ const screenDelta = this.screenRegion.center.minus(closestPoint);
345
+ const delta = this.editor.viewport.screenToCanvasTransform.transformVec3(screenDelta);
346
+ await this.editor.dispatchNoAnnounce(Viewport_1.default.transformBy(math_1.Mat33.translation(delta.times(-1))), false);
347
+ // Re-renders clear wet ink, so we need to re-draw the preview
348
+ // after the full re-render.
349
+ await this.editor.queueRerender();
350
+ this.previewTransformCmds();
351
+ }
352
+ }
353
+ deleteSelectedObjects() {
432
354
  if (this.backgroundDragging || this.targetHandle) {
433
355
  this.onDragEnd();
434
356
  }
435
357
  return new Erase_1.default(this.selectedElems);
436
- };
437
- Selection.prototype.duplicateSelectedObjects = function () {
438
- return __awaiter(this, void 0, void 0, function () {
439
- var wasTransforming, tmpApplyCommand, selectionToUpdate, duplicateCommand;
440
- return __generator(this, function (_b) {
441
- switch (_b.label) {
442
- case 0:
443
- wasTransforming = this.backgroundDragging || this.targetHandle;
444
- tmpApplyCommand = null;
445
- if (!wasTransforming) return [3 /*break*/, 2];
446
- selectionToUpdate = null;
447
- tmpApplyCommand = new Selection.ApplyTransformationCommand(selectionToUpdate, this.selectedElems, this.transform);
448
- // Transform to ensure that the duplicates are in the correct location
449
- return [4 /*yield*/, tmpApplyCommand.apply(this.editor)];
450
- case 1:
451
- // Transform to ensure that the duplicates are in the correct location
452
- _b.sent();
453
- // Show items again
454
- this.addRemoveSelectionFromImage(true);
455
- _b.label = 2;
456
- case 2:
457
- duplicateCommand = new Duplicate_1.default(this.selectedElems);
458
- if (!wasTransforming) return [3 /*break*/, 4];
459
- // Move the selected objects back to the correct location.
460
- return [4 /*yield*/, (tmpApplyCommand === null || tmpApplyCommand === void 0 ? void 0 : tmpApplyCommand.unapply(this.editor))];
461
- case 3:
462
- // Move the selected objects back to the correct location.
463
- _b.sent();
464
- this.addRemoveSelectionFromImage(false);
465
- this.previewTransformCmds();
466
- this.updateUI();
467
- _b.label = 4;
468
- case 4: return [2 /*return*/, duplicateCommand];
469
- }
470
- });
471
- });
472
- };
473
- Selection.prototype.addTo = function (elem) {
358
+ }
359
+ runSelectionDuplicatedAnimation() {
360
+ if (this.selectionDuplicatedAnimationTimeout) {
361
+ clearTimeout(this.selectionDuplicatedAnimationTimeout);
362
+ }
363
+ const animationDuration = 400; // ms
364
+ this.backgroundElem.style.animation = `${animationDuration}ms ease selection-duplicated-animation`;
365
+ this.selectionDuplicatedAnimationTimeout = setTimeout(() => {
366
+ this.backgroundElem.style.animation = '';
367
+ this.selectionDuplicatedAnimationTimeout = null;
368
+ }, animationDuration);
369
+ }
370
+ async duplicateSelectedObjects() {
371
+ const wasTransforming = this.backgroundDragging || this.targetHandle;
372
+ let tmpApplyCommand = null;
373
+ if (!wasTransforming) {
374
+ this.runSelectionDuplicatedAnimation();
375
+ }
376
+ if (wasTransforming) {
377
+ // Don't update the selection's focus when redoing/undoing
378
+ const selectionToUpdate = null;
379
+ tmpApplyCommand = new Selection.ApplyTransformationCommand(selectionToUpdate, this.selectedElems, this.transform);
380
+ // Transform to ensure that the duplicates are in the correct location
381
+ await tmpApplyCommand.apply(this.editor);
382
+ // Show items again
383
+ this.addRemoveSelectionFromImage(true);
384
+ }
385
+ const duplicateCommand = new Duplicate_1.default(this.selectedElems);
386
+ if (wasTransforming) {
387
+ // Move the selected objects back to the correct location.
388
+ await tmpApplyCommand?.unapply(this.editor);
389
+ this.addRemoveSelectionFromImage(false);
390
+ this.previewTransformCmds();
391
+ this.updateUI();
392
+ }
393
+ return duplicateCommand;
394
+ }
395
+ addTo(elem) {
474
396
  if (this.container.parentElement) {
475
397
  this.container.remove();
476
398
  }
477
399
  elem.appendChild(this.container);
478
400
  this.hasParent = true;
479
- };
480
- Selection.prototype.setToPoint = function (point) {
401
+ }
402
+ setToPoint(point) {
481
403
  this.originalRegion = this.originalRegion.grownToPoint(point);
482
404
  this.updateUI();
483
- };
484
- Selection.prototype.cancelSelection = function () {
405
+ }
406
+ cancelSelection() {
485
407
  if (this.container.parentElement) {
486
408
  this.container.remove();
487
409
  }
488
- this.originalRegion = Rect2_1.default.empty;
410
+ this.originalRegion = math_1.Rect2.empty;
489
411
  this.hasParent = false;
490
- };
491
- Selection.prototype.setSelectedObjects = function (objects, bbox) {
412
+ }
413
+ setSelectedObjects(objects, bbox) {
492
414
  this.addRemoveSelectionFromImage(true);
493
415
  this.originalRegion = bbox;
494
- this.selectedElems = objects.filter(function (object) { return object.isSelectable(); });
416
+ this.selectedElems = objects.filter(object => object.isSelectable());
495
417
  this.updateUI();
496
- };
497
- Selection.prototype.getSelectedObjects = function () {
498
- return this.selectedElems;
499
- };
500
- var _a;
501
- _a = Selection;
502
- (function () {
503
- SerializableCommand_1.default.register('selection-tool-transform', function (json, _editor) {
504
- var _b;
505
- // The selection box is lost when serializing/deserializing. No need to store box rotation
506
- var fullTransform = new (Mat33_1.default.bind.apply(Mat33_1.default, __spreadArray([void 0], json.transform, false)))();
507
- var elemIds = ((_b = json.elems) !== null && _b !== void 0 ? _b : []);
508
- return new _a.ApplyTransformationCommand(null, elemIds, fullTransform);
509
- });
510
- })();
511
- Selection.ApplyTransformationCommand = /** @class */ (function (_super) {
512
- __extends(class_1, _super);
513
- function class_1(selection,
514
- // If a `string[]`, selectedElems is a list of element IDs.
515
- selectedElems,
516
- // Full transformation used to transform elements.
517
- fullTransform) {
518
- var _this = _super.call(this, 'selection-tool-transform') || this;
519
- _this.selection = selection;
520
- _this.fullTransform = fullTransform;
521
- var isIDList = function (arr) {
522
- return typeof arr[0] === 'string';
523
- };
524
- // If a list of element IDs,
525
- if (isIDList(selectedElems)) {
526
- _this.selectedElemIds = selectedElems;
527
- }
528
- else {
529
- _this.selectedElemIds = selectedElems.map(function (elem) { return elem.getId(); });
530
- _this.transformCommands = selectedElems.map(function (elem) {
531
- return elem.transformBy(_this.fullTransform);
532
- });
533
- }
534
- return _this;
535
- }
536
- class_1.prototype.resolveToElems = function (editor) {
537
- var _this = this;
538
- if (this.transformCommands) {
539
- return;
540
- }
541
- this.transformCommands = this.selectedElemIds.map(function (id) {
542
- var elem = editor.image.lookupElement(id);
543
- if (!elem) {
544
- throw new Error("Unable to find element with ID, ".concat(id, "."));
545
- }
546
- return elem.transformBy(_this.fullTransform);
547
- });
548
- };
549
- class_1.prototype.apply = function (editor) {
550
- var _b, _c, _d, _e, _f;
551
- return __awaiter(this, void 0, void 0, function () {
552
- return __generator(this, function (_g) {
553
- switch (_g.label) {
554
- case 0:
555
- this.resolveToElems(editor);
556
- (_b = this.selection) === null || _b === void 0 ? void 0 : _b.setTransform(this.fullTransform, false);
557
- (_c = this.selection) === null || _c === void 0 ? void 0 : _c.updateUI();
558
- return [4 /*yield*/, editor.asyncApplyCommands(this.transformCommands, updateChunkSize)];
559
- case 1:
560
- _g.sent();
561
- (_d = this.selection) === null || _d === void 0 ? void 0 : _d.setTransform(Mat33_1.default.identity, false);
562
- (_e = this.selection) === null || _e === void 0 ? void 0 : _e.recomputeRegion();
563
- (_f = this.selection) === null || _f === void 0 ? void 0 : _f.updateUI();
564
- return [2 /*return*/];
565
- }
566
- });
567
- });
418
+ }
419
+ getSelectedObjects() {
420
+ return [...this.selectedElems];
421
+ }
422
+ }
423
+ _a = Selection;
424
+ (() => {
425
+ SerializableCommand_1.default.register('selection-tool-transform', (json, _editor) => {
426
+ // The selection box is lost when serializing/deserializing. No need to store box rotation
427
+ const fullTransform = new math_1.Mat33(...json.transform);
428
+ const elemIds = (json.elems ?? []);
429
+ return new _a.ApplyTransformationCommand(null, elemIds, fullTransform);
430
+ });
431
+ })();
432
+ Selection.ApplyTransformationCommand = class extends SerializableCommand_1.default {
433
+ constructor(selection,
434
+ // If a `string[]`, selectedElems is a list of element IDs.
435
+ selectedElems,
436
+ // Full transformation used to transform elements.
437
+ fullTransform) {
438
+ super('selection-tool-transform');
439
+ this.selection = selection;
440
+ this.fullTransform = fullTransform;
441
+ const isIDList = (arr) => {
442
+ return typeof arr[0] === 'string';
568
443
  };
569
- class_1.prototype.unapply = function (editor) {
570
- var _b, _c, _d, _e, _f;
571
- return __awaiter(this, void 0, void 0, function () {
572
- return __generator(this, function (_g) {
573
- switch (_g.label) {
574
- case 0:
575
- this.resolveToElems(editor);
576
- (_b = this.selection) === null || _b === void 0 ? void 0 : _b.setTransform(this.fullTransform.inverse(), false);
577
- (_c = this.selection) === null || _c === void 0 ? void 0 : _c.updateUI();
578
- return [4 /*yield*/, editor.asyncUnapplyCommands(this.transformCommands, updateChunkSize, true)];
579
- case 1:
580
- _g.sent();
581
- (_d = this.selection) === null || _d === void 0 ? void 0 : _d.setTransform(Mat33_1.default.identity, false);
582
- (_e = this.selection) === null || _e === void 0 ? void 0 : _e.recomputeRegion();
583
- (_f = this.selection) === null || _f === void 0 ? void 0 : _f.updateUI();
584
- return [2 /*return*/];
585
- }
586
- });
444
+ // If a list of element IDs,
445
+ if (isIDList(selectedElems)) {
446
+ this.selectedElemIds = selectedElems;
447
+ }
448
+ else {
449
+ this.selectedElemIds = selectedElems.map(elem => elem.getId());
450
+ this.transformCommands = selectedElems.map(elem => {
451
+ return elem.transformBy(this.fullTransform);
587
452
  });
453
+ }
454
+ }
455
+ resolveToElems(editor) {
456
+ if (this.transformCommands) {
457
+ return;
458
+ }
459
+ this.transformCommands = this.selectedElemIds.map(id => {
460
+ const elem = editor.image.lookupElement(id);
461
+ if (!elem) {
462
+ throw new Error(`Unable to find element with ID, ${id}.`);
463
+ }
464
+ return elem.transformBy(this.fullTransform);
465
+ });
466
+ }
467
+ async apply(editor) {
468
+ this.resolveToElems(editor);
469
+ this.selection?.setTransform(this.fullTransform, false);
470
+ this.selection?.updateUI();
471
+ await editor.asyncApplyCommands(this.transformCommands, updateChunkSize);
472
+ this.selection?.setTransform(math_1.Mat33.identity, false);
473
+ this.selection?.recomputeRegion();
474
+ this.selection?.updateUI();
475
+ }
476
+ async unapply(editor) {
477
+ this.resolveToElems(editor);
478
+ this.selection?.setTransform(this.fullTransform.inverse(), false);
479
+ this.selection?.updateUI();
480
+ await editor.asyncUnapplyCommands(this.transformCommands, updateChunkSize, true);
481
+ this.selection?.setTransform(math_1.Mat33.identity, false);
482
+ this.selection?.recomputeRegion();
483
+ this.selection?.updateUI();
484
+ }
485
+ serializeToJSON() {
486
+ return {
487
+ elems: this.selectedElemIds,
488
+ transform: this.fullTransform.toArray(),
588
489
  };
589
- class_1.prototype.serializeToJSON = function () {
590
- return {
591
- elems: this.selectedElemIds,
592
- transform: this.fullTransform.toArray(),
593
- };
594
- };
595
- class_1.prototype.description = function (_editor, localizationTable) {
596
- return localizationTable.transformedElements(this.selectedElemIds.length);
597
- };
598
- return class_1;
599
- }(SerializableCommand_1.default));
600
- return Selection;
601
- }());
490
+ }
491
+ description(_editor, localizationTable) {
492
+ return localizationTable.transformedElements(this.selectedElemIds.length);
493
+ }
494
+ };
602
495
  exports.default = Selection;