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
@@ -2,71 +2,9 @@
2
2
  * @internal
3
3
  * @packageDocumentation
4
4
  */
5
- var __extends = (this && this.__extends) || (function () {
6
- var extendStatics = function (d, b) {
7
- extendStatics = Object.setPrototypeOf ||
8
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
9
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
10
- return extendStatics(d, b);
11
- };
12
- return function (d, b) {
13
- if (typeof b !== "function" && b !== null)
14
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
15
- extendStatics(d, b);
16
- function __() { this.constructor = d; }
17
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
18
- };
19
- })();
20
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
21
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22
- return new (P || (P = Promise))(function (resolve, reject) {
23
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
24
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
25
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
26
- step((generator = generator.apply(thisArg, _arguments || [])).next());
27
- });
28
- };
29
- var __generator = (this && this.__generator) || function (thisArg, body) {
30
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
31
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
32
- function verb(n) { return function (v) { return step([n, v]); }; }
33
- function step(op) {
34
- if (f) throw new TypeError("Generator is already executing.");
35
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
36
- 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;
37
- if (y = 0, t) op = [op[0] & 2, t.value];
38
- switch (op[0]) {
39
- case 0: case 1: t = op; break;
40
- case 4: _.label++; return { value: op[1], done: false };
41
- case 5: _.label++; y = op[1]; op = [0]; continue;
42
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
43
- default:
44
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
45
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
46
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
47
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
48
- if (t[2]) _.ops.pop();
49
- _.trys.pop(); continue;
50
- }
51
- op = body.call(thisArg, _);
52
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
53
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
54
- }
55
- };
56
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
57
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
58
- if (ar || !(i in from)) {
59
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
60
- ar[i] = from[i];
61
- }
62
- }
63
- return to.concat(ar || Array.prototype.slice.call(from));
64
- };
65
- var _this = this;
5
+ var _a;
66
6
  import SerializableCommand from '../../commands/SerializableCommand.mjs';
67
- import Mat33 from '../../math/Mat33.mjs';
68
- import Rect2 from '../../math/shapes/Rect2.mjs';
69
- import { Vec2 } from '../../math/Vec2.mjs';
7
+ import { Mat33, Rect2, Vec2 } from '@js-draw/math';
70
8
  import SelectionHandle, { HandleShape, handleSize } from './SelectionHandle.mjs';
71
9
  import { cssPrefix } from './SelectionTool.mjs';
72
10
  import Viewport from '../../Viewport.mjs';
@@ -75,12 +13,11 @@ import Duplicate from '../../commands/Duplicate.mjs';
75
13
  import { DragTransformer, ResizeTransformer, RotateTransformer } from './TransformMode.mjs';
76
14
  import { ResizeMode } from './types.mjs';
77
15
  import EditorImage from '../../EditorImage.mjs';
78
- var updateChunkSize = 100;
79
- var maxPreviewElemCount = 500;
16
+ const updateChunkSize = 100;
17
+ const maxPreviewElemCount = 500;
80
18
  // @internal
81
- var Selection = /** @class */ (function () {
82
- function Selection(startPoint, editor) {
83
- var _this = this;
19
+ class Selection {
20
+ constructor(startPoint, editor) {
84
21
  this.editor = editor;
85
22
  this.transform = Mat33.identity;
86
23
  this.selectedElems = [];
@@ -89,6 +26,7 @@ var Selection = /** @class */ (function () {
89
26
  this.removedFromImage = {};
90
27
  this.targetHandle = null;
91
28
  this.backgroundDragging = false;
29
+ this.selectionDuplicatedAnimationTimeout = null;
92
30
  this.originalRegion = new Rect2(startPoint.x, startPoint.y, 0, 0);
93
31
  this.transformers = {
94
32
  drag: new DragTransformer(editor, this),
@@ -97,156 +35,123 @@ var Selection = /** @class */ (function () {
97
35
  };
98
36
  this.container = document.createElement('div');
99
37
  this.backgroundElem = document.createElement('div');
100
- this.backgroundElem.classList.add("".concat(cssPrefix, "selection-background"));
38
+ this.backgroundElem.classList.add(`${cssPrefix}selection-background`);
101
39
  this.container.appendChild(this.backgroundElem);
102
- var resizeHorizontalHandle = new SelectionHandle(HandleShape.Square, Vec2.of(1, 0.5), this, function (startPoint) { return _this.transformers.resize.onDragStart(startPoint, ResizeMode.HorizontalOnly); }, function (currentPoint) { return _this.transformers.resize.onDragUpdate(currentPoint); }, function () { return _this.transformers.resize.onDragEnd(); });
103
- var resizeVerticalHandle = new SelectionHandle(HandleShape.Square, Vec2.of(0.5, 1), this, function (startPoint) { return _this.transformers.resize.onDragStart(startPoint, ResizeMode.VerticalOnly); }, function (currentPoint) { return _this.transformers.resize.onDragUpdate(currentPoint); }, function () { return _this.transformers.resize.onDragEnd(); });
104
- var resizeBothHandle = new SelectionHandle(HandleShape.Square, Vec2.of(1, 1), this, function (startPoint) { return _this.transformers.resize.onDragStart(startPoint, ResizeMode.Both); }, function (currentPoint) { return _this.transformers.resize.onDragUpdate(currentPoint); }, function () { return _this.transformers.resize.onDragEnd(); });
105
- var rotationHandle = new SelectionHandle(HandleShape.Circle, 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(); });
40
+ const resizeHorizontalHandle = new SelectionHandle(HandleShape.Square, Vec2.of(1, 0.5), this, this.editor.viewport, (startPoint) => this.transformers.resize.onDragStart(startPoint, ResizeMode.HorizontalOnly), (currentPoint) => this.transformers.resize.onDragUpdate(currentPoint), () => this.transformers.resize.onDragEnd());
41
+ const resizeVerticalHandle = new SelectionHandle(HandleShape.Square, Vec2.of(0.5, 1), this, this.editor.viewport, (startPoint) => this.transformers.resize.onDragStart(startPoint, ResizeMode.VerticalOnly), (currentPoint) => this.transformers.resize.onDragUpdate(currentPoint), () => this.transformers.resize.onDragEnd());
42
+ const resizeBothHandle = new SelectionHandle(HandleShape.Square, Vec2.of(1, 1), this, this.editor.viewport, (startPoint) => this.transformers.resize.onDragStart(startPoint, ResizeMode.Both), (currentPoint) => this.transformers.resize.onDragUpdate(currentPoint), () => this.transformers.resize.onDragEnd());
43
+ const rotationHandle = new SelectionHandle(HandleShape.Circle, 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());
106
44
  this.handles = [
107
45
  resizeBothHandle,
108
46
  resizeHorizontalHandle,
109
47
  resizeVerticalHandle,
110
48
  rotationHandle,
111
49
  ];
112
- for (var _i = 0, _b = this.handles; _i < _b.length; _i++) {
113
- var handle = _b[_i];
50
+ for (const handle of this.handles) {
114
51
  handle.addTo(this.backgroundElem);
115
52
  }
116
53
  }
117
54
  // @internal Intended for unit tests
118
- Selection.prototype.getBackgroundElem = function () {
55
+ getBackgroundElem() {
119
56
  return this.backgroundElem;
120
- };
121
- Selection.prototype.getTransform = function () {
57
+ }
58
+ getTransform() {
122
59
  return this.transform;
123
- };
124
- Object.defineProperty(Selection.prototype, "preTransformRegion", {
125
- get: function () {
126
- return this.originalRegion;
127
- },
128
- enumerable: false,
129
- configurable: true
130
- });
131
- Object.defineProperty(Selection.prototype, "region", {
132
- get: function () {
133
- // TODO: This currently assumes that the region rotates about its center.
134
- // This may not be true.
135
- var rotationMatrix = Mat33.zRotation(this.regionRotation, this.originalRegion.center);
136
- var scaleAndTranslateMat = this.transform.rightMul(rotationMatrix.inverse());
137
- return this.originalRegion.transformedBoundingBox(scaleAndTranslateMat);
138
- },
139
- enumerable: false,
140
- configurable: true
141
- });
60
+ }
61
+ get preTransformRegion() {
62
+ return this.originalRegion;
63
+ }
64
+ get region() {
65
+ // TODO: This currently assumes that the region rotates about its center.
66
+ // This may not be true.
67
+ const rotationMatrix = Mat33.zRotation(this.regionRotation, this.originalRegion.center);
68
+ const scaleAndTranslateMat = this.transform.rightMul(rotationMatrix.inverse());
69
+ return this.originalRegion.transformedBoundingBox(scaleAndTranslateMat);
70
+ }
142
71
  /**
143
72
  * Computes and returns the bounding box of the selection without
144
73
  * any additional padding. Computes directly from the elements that are selected.
145
74
  * @internal
146
75
  */
147
- Selection.prototype.computeTightBoundingBox = function () {
148
- var bbox = this.selectedElems.reduce(function (accumulator, elem) {
149
- return (accumulator !== null && accumulator !== void 0 ? accumulator : elem.getBBox()).union(elem.getBBox());
76
+ computeTightBoundingBox() {
77
+ const bbox = this.selectedElems.reduce((accumulator, elem) => {
78
+ return (accumulator ?? elem.getBBox()).union(elem.getBBox());
150
79
  }, null);
151
- return bbox !== null && bbox !== void 0 ? bbox : Rect2.empty;
152
- };
153
- Object.defineProperty(Selection.prototype, "regionRotation", {
154
- get: function () {
155
- return this.transform.transformVec3(Vec2.unitX).angle();
156
- },
157
- enumerable: false,
158
- configurable: true
159
- });
160
- Object.defineProperty(Selection.prototype, "preTransformedScreenRegion", {
161
- get: function () {
162
- var _this = this;
163
- var toScreen = function (vec) { return _this.editor.viewport.canvasToScreen(vec); };
164
- return Rect2.fromCorners(toScreen(this.preTransformRegion.topLeft), toScreen(this.preTransformRegion.bottomRight));
165
- },
166
- enumerable: false,
167
- configurable: true
168
- });
169
- Object.defineProperty(Selection.prototype, "preTransformedScreenRegionRotation", {
170
- get: function () {
171
- return this.editor.viewport.getRotationAngle();
172
- },
173
- enumerable: false,
174
- configurable: true
175
- });
176
- Object.defineProperty(Selection.prototype, "screenRegion", {
177
- get: function () {
178
- var toScreen = this.editor.viewport.canvasToScreenTransform;
179
- var scaleFactor = this.editor.viewport.getScaleFactor();
180
- var screenCenter = toScreen.transformVec2(this.region.center);
181
- return new Rect2(screenCenter.x, screenCenter.y, scaleFactor * this.region.width, scaleFactor * this.region.height).translatedBy(this.region.size.times(-scaleFactor / 2));
182
- },
183
- enumerable: false,
184
- configurable: true
185
- });
186
- Object.defineProperty(Selection.prototype, "screenRegionRotation", {
187
- get: function () {
188
- return this.regionRotation + this.editor.viewport.getRotationAngle();
189
- },
190
- enumerable: false,
191
- configurable: true
192
- });
80
+ return bbox ?? Rect2.empty;
81
+ }
82
+ get regionRotation() {
83
+ return this.transform.transformVec3(Vec2.unitX).angle();
84
+ }
85
+ get preTransformedScreenRegion() {
86
+ const toScreen = (vec) => this.editor.viewport.canvasToScreen(vec);
87
+ return Rect2.fromCorners(toScreen(this.preTransformRegion.topLeft), toScreen(this.preTransformRegion.bottomRight));
88
+ }
89
+ get preTransformedScreenRegionRotation() {
90
+ return this.editor.viewport.getRotationAngle();
91
+ }
92
+ get screenRegion() {
93
+ const toScreen = this.editor.viewport.canvasToScreenTransform;
94
+ const scaleFactor = this.editor.viewport.getScaleFactor();
95
+ const screenCenter = toScreen.transformVec2(this.region.center);
96
+ return new Rect2(screenCenter.x, screenCenter.y, scaleFactor * this.region.width, scaleFactor * this.region.height).translatedBy(this.region.size.times(-scaleFactor / 2));
97
+ }
98
+ get screenRegionRotation() {
99
+ return this.regionRotation + this.editor.viewport.getRotationAngle();
100
+ }
193
101
  // Applies, previews, but doesn't finalize the given transformation.
194
- Selection.prototype.setTransform = function (transform, preview) {
195
- if (preview === void 0) { preview = true; }
102
+ setTransform(transform, preview = true) {
196
103
  this.transform = transform;
197
104
  if (preview && this.hasParent) {
198
105
  this.scrollTo();
199
106
  this.previewTransformCmds();
200
107
  }
201
- };
108
+ }
202
109
  // Applies the current transformation to the selection
203
- Selection.prototype.finalizeTransform = function () {
204
- var fullTransform = this.transform;
205
- var selectedElems = this.selectedElems;
110
+ async finalizeTransform() {
111
+ const fullTransform = this.transform;
112
+ const selectedElems = this.selectedElems;
206
113
  // Reset for the next drag
207
114
  this.originalRegion = this.originalRegion.transformedBoundingBox(this.transform);
208
115
  this.transform = Mat33.identity;
209
116
  // Make the commands undo-able
210
- this.editor.dispatch(new Selection.ApplyTransformationCommand(this, selectedElems, fullTransform));
117
+ await this.editor.dispatch(new Selection.ApplyTransformationCommand(this, selectedElems, fullTransform));
211
118
  // Clear renderings of any in-progress transformations
212
- var wetInkRenderer = this.editor.display.getWetInkRenderer();
119
+ const wetInkRenderer = this.editor.display.getWetInkRenderer();
213
120
  wetInkRenderer.clear();
214
- };
121
+ }
215
122
  // Preview the effects of the current transformation on the selection
216
- Selection.prototype.previewTransformCmds = function () {
123
+ previewTransformCmds() {
217
124
  // Don't render what we're moving if it's likely to be slow.
218
125
  if (this.selectedElems.length > maxPreviewElemCount) {
219
126
  this.updateUI();
220
127
  return;
221
128
  }
222
- var wetInkRenderer = this.editor.display.getWetInkRenderer();
129
+ const wetInkRenderer = this.editor.display.getWetInkRenderer();
223
130
  wetInkRenderer.clear();
224
131
  wetInkRenderer.pushTransform(this.transform);
225
- var viewportVisibleRect = this.editor.viewport.visibleRect;
226
- var visibleRect = viewportVisibleRect.transformedBoundingBox(this.transform.inverse());
227
- for (var _i = 0, _b = this.selectedElems; _i < _b.length; _i++) {
228
- var elem = _b[_i];
132
+ const viewportVisibleRect = this.editor.viewport.visibleRect;
133
+ const visibleRect = viewportVisibleRect.transformedBoundingBox(this.transform.inverse());
134
+ for (const elem of this.selectedElems) {
229
135
  elem.render(wetInkRenderer, visibleRect);
230
136
  }
231
137
  wetInkRenderer.popTransform();
232
138
  this.updateUI();
233
- };
139
+ }
234
140
  // Find the objects corresponding to this in the document,
235
141
  // select them.
236
142
  // Returns false iff nothing was selected.
237
- Selection.prototype.resolveToObjects = function () {
238
- var _this = this;
239
- var singleItemSelectionMode = false;
143
+ resolveToObjects() {
144
+ let singleItemSelectionMode = false;
240
145
  this.transform = Mat33.identity;
241
146
  // Grow the rectangle, if necessary
242
147
  if (this.region.w === 0 || this.region.h === 0) {
243
- var padding = this.editor.viewport.visibleRect.maxDimension / 200;
148
+ const padding = this.editor.viewport.visibleRect.maxDimension / 200;
244
149
  this.originalRegion = Rect2.bboxOf(this.region.corners, padding);
245
150
  // Only select one item if the rectangle was very small.
246
151
  singleItemSelectionMode = true;
247
152
  }
248
- this.selectedElems = this.editor.image.getElementsIntersectingRegion(this.region).filter(function (elem) {
249
- return elem.intersectsRect(_this.region) && elem.isSelectable();
153
+ this.selectedElems = this.editor.image.getElementsIntersectingRegion(this.region).filter(elem => {
154
+ return elem.intersectsRect(this.region) && elem.isSelectable();
250
155
  });
251
156
  if (singleItemSelectionMode && this.selectedElems.length > 0) {
252
157
  this.selectedElems = [this.selectedElems[this.selectedElems.length - 1]];
@@ -257,51 +162,50 @@ var Selection = /** @class */ (function () {
257
162
  }
258
163
  this.updateUI();
259
164
  return true;
260
- };
165
+ }
261
166
  // Recompute this' region from the selected elements.
262
167
  // Returns false if the selection is empty.
263
- Selection.prototype.recomputeRegion = function () {
264
- var newRegion = this.computeTightBoundingBox();
168
+ recomputeRegion() {
169
+ const newRegion = this.computeTightBoundingBox();
265
170
  if (!newRegion) {
266
171
  this.cancelSelection();
267
172
  return false;
268
173
  }
269
174
  this.originalRegion = newRegion;
270
- var minSize = this.getMinCanvasSize();
175
+ const minSize = this.getMinCanvasSize();
271
176
  if (this.originalRegion.w < minSize || this.originalRegion.h < minSize) {
272
177
  // Add padding
273
- var padding = minSize / 2;
178
+ const padding = minSize / 2;
274
179
  this.originalRegion = Rect2.bboxOf(this.originalRegion.corners, padding);
275
180
  }
276
181
  return true;
277
- };
278
- Selection.prototype.getMinCanvasSize = function () {
279
- var canvasHandleSize = handleSize / this.editor.viewport.getScaleFactor();
182
+ }
183
+ getMinCanvasSize() {
184
+ const canvasHandleSize = handleSize / this.editor.viewport.getScaleFactor();
280
185
  return canvasHandleSize * 2;
281
- };
282
- Selection.prototype.getSelectedItemCount = function () {
186
+ }
187
+ getSelectedItemCount() {
283
188
  return this.selectedElems.length;
284
- };
189
+ }
285
190
  // @internal
286
- Selection.prototype.updateUI = function () {
191
+ updateUI() {
287
192
  // Don't update old selections.
288
193
  if (!this.hasParent) {
289
194
  return;
290
195
  }
291
196
  // marginLeft, marginTop: Display relative to the top left of the selection overlay.
292
197
  // left, top don't work for this.
293
- this.backgroundElem.style.marginLeft = "".concat(this.screenRegion.topLeft.x, "px");
294
- this.backgroundElem.style.marginTop = "".concat(this.screenRegion.topLeft.y, "px");
295
- this.backgroundElem.style.width = "".concat(this.screenRegion.width, "px");
296
- this.backgroundElem.style.height = "".concat(this.screenRegion.height, "px");
297
- var rotationDeg = this.screenRegionRotation * 180 / Math.PI;
298
- this.backgroundElem.style.transform = "rotate(".concat(rotationDeg, "deg)");
198
+ this.backgroundElem.style.marginLeft = `${this.screenRegion.topLeft.x}px`;
199
+ this.backgroundElem.style.marginTop = `${this.screenRegion.topLeft.y}px`;
200
+ this.backgroundElem.style.width = `${this.screenRegion.width}px`;
201
+ this.backgroundElem.style.height = `${this.screenRegion.height}px`;
202
+ const rotationDeg = this.screenRegionRotation * 180 / Math.PI;
203
+ this.backgroundElem.style.transform = `rotate(${rotationDeg}deg)`;
299
204
  this.backgroundElem.style.transformOrigin = 'center';
300
- for (var _i = 0, _b = this.handles; _i < _b.length; _i++) {
301
- var handle = _b[_i];
205
+ for (const handle of this.handles) {
302
206
  handle.updatePosition();
303
207
  }
304
- };
208
+ }
305
209
  // Add/remove the contents of this' seleciton from the editor.
306
210
  // Used to prevent previewed content from looking like duplicate content
307
211
  // while dragging.
@@ -310,22 +214,20 @@ var Selection = /** @class */ (function () {
310
214
  // the editor image is likely to be slow.)
311
215
  //
312
216
  // If removed from the image, selected elements are drawn as wet ink.
313
- Selection.prototype.addRemoveSelectionFromImage = function (inImage) {
314
- var _this = this;
217
+ addRemoveSelectionFromImage(inImage) {
315
218
  // Don't hide elements if doing so will be slow.
316
219
  if (!inImage && this.selectedElems.length > maxPreviewElemCount) {
317
220
  return;
318
221
  }
319
- for (var _i = 0, _b = this.selectedElems; _i < _b.length; _i++) {
320
- var elem = _b[_i];
321
- var parent_1 = this.editor.image.findParent(elem);
322
- if (!inImage && parent_1) {
222
+ for (const elem of this.selectedElems) {
223
+ const parent = this.editor.image.findParent(elem);
224
+ if (!inImage && parent) {
323
225
  this.removedFromImage[elem.getId()] = true;
324
- parent_1.remove();
226
+ parent.remove();
325
227
  }
326
228
  // If we're making things visible and the selected object wasn't previously
327
229
  // visible,
328
- else if (!parent_1 && this.removedFromImage[elem.getId()]) {
230
+ else if (!parent && this.removedFromImage[elem.getId()]) {
329
231
  EditorImage.addElement(elem).apply(this.editor);
330
232
  this.removedFromImage[elem.getId()] = false;
331
233
  delete this.removedFromImage[elem.getId()];
@@ -333,50 +235,59 @@ var Selection = /** @class */ (function () {
333
235
  }
334
236
  // Don't await queueRerender. If we're running in a test, the re-render might never
335
237
  // happen.
336
- this.editor.queueRerender().then(function () {
238
+ this.editor.queueRerender().then(() => {
337
239
  if (!inImage) {
338
- _this.previewTransformCmds();
240
+ this.previewTransformCmds();
339
241
  }
340
242
  });
341
- };
342
- Selection.prototype.removeDeletedElemsFromSelection = function () {
343
- var _this = this;
243
+ }
244
+ removeDeletedElemsFromSelection() {
344
245
  // Remove any deleted elements from the selection.
345
- this.selectedElems = this.selectedElems.filter(function (elem) {
346
- var hasParent = !!_this.editor.image.findParent(elem);
246
+ this.selectedElems = this.selectedElems.filter(elem => {
247
+ const hasParent = !!this.editor.image.findParent(elem);
347
248
  // If we removed the element and haven't added it back yet, don't remove it
348
249
  // from the selection.
349
- var weRemoved = _this.removedFromImage[elem.getId()];
250
+ const weRemoved = this.removedFromImage[elem.getId()];
350
251
  return hasParent || weRemoved;
351
252
  });
352
- };
353
- Selection.prototype.onDragStart = function (pointer, target) {
354
- this.removeDeletedElemsFromSelection();
355
- this.addRemoveSelectionFromImage(false);
356
- for (var _i = 0, _b = this.handles; _i < _b.length; _i++) {
357
- var handle = _b[_i];
358
- if (handle.isTarget(target)) {
359
- handle.handleDragStart(pointer);
253
+ }
254
+ onDragStart(pointer) {
255
+ // Clear the HTML selection (prevent HTML drag and drop being triggered by this drag)
256
+ document.getSelection()?.removeAllRanges();
257
+ this.targetHandle = null;
258
+ let result = false;
259
+ for (const handle of this.handles) {
260
+ if (handle.containsPoint(pointer.canvasPos)) {
360
261
  this.targetHandle = handle;
361
- return true;
262
+ result = true;
362
263
  }
363
264
  }
364
- if (this.backgroundElem === target) {
265
+ this.backgroundDragging = false;
266
+ if (this.region.containsPoint(pointer.canvasPos)) {
365
267
  this.backgroundDragging = true;
268
+ result = true;
269
+ }
270
+ if (result) {
271
+ this.removeDeletedElemsFromSelection();
272
+ this.addRemoveSelectionFromImage(false);
273
+ }
274
+ if (this.targetHandle) {
275
+ this.targetHandle.handleDragStart(pointer);
276
+ }
277
+ if (this.backgroundDragging) {
366
278
  this.transformers.drag.onDragStart(pointer.canvasPos);
367
- return true;
368
279
  }
369
- return false;
370
- };
371
- Selection.prototype.onDragUpdate = function (pointer) {
280
+ return result;
281
+ }
282
+ onDragUpdate(pointer) {
372
283
  if (this.backgroundDragging) {
373
284
  this.transformers.drag.onDragUpdate(pointer.canvasPos);
374
285
  }
375
286
  if (this.targetHandle) {
376
287
  this.targetHandle.handleDragUpdate(pointer);
377
288
  }
378
- };
379
- Selection.prototype.onDragEnd = function () {
289
+ }
290
+ onDragEnd() {
380
291
  if (this.backgroundDragging) {
381
292
  this.transformers.drag.onDragEnd();
382
293
  }
@@ -387,214 +298,170 @@ var Selection = /** @class */ (function () {
387
298
  this.backgroundDragging = false;
388
299
  this.targetHandle = null;
389
300
  this.updateUI();
390
- };
391
- Selection.prototype.onDragCancel = function () {
301
+ }
302
+ onDragCancel() {
392
303
  this.backgroundDragging = false;
393
304
  this.targetHandle = null;
394
305
  this.setTransform(Mat33.identity);
395
306
  this.addRemoveSelectionFromImage(true);
396
- };
307
+ }
397
308
  // Scroll the viewport to this. Does not zoom
398
- Selection.prototype.scrollTo = function () {
399
- return __awaiter(this, void 0, void 0, function () {
400
- var screenRect, closestPoint, screenDelta, delta;
401
- return __generator(this, function (_b) {
402
- switch (_b.label) {
403
- case 0:
404
- if (this.selectedElems.length === 0) {
405
- return [2 /*return*/];
406
- }
407
- screenRect = new Rect2(0, 0, this.editor.display.width, this.editor.display.height);
408
- if (!!screenRect.containsPoint(this.screenRegion.center)) return [3 /*break*/, 3];
409
- closestPoint = screenRect.getClosestPointOnBoundaryTo(this.screenRegion.center);
410
- screenDelta = this.screenRegion.center.minus(closestPoint);
411
- delta = this.editor.viewport.screenToCanvasTransform.transformVec3(screenDelta);
412
- return [4 /*yield*/, this.editor.dispatchNoAnnounce(Viewport.transformBy(Mat33.translation(delta.times(-1))), false)];
413
- case 1:
414
- _b.sent();
415
- // Re-renders clear wet ink, so we need to re-draw the preview
416
- // after the full re-render.
417
- return [4 /*yield*/, this.editor.queueRerender()];
418
- case 2:
419
- // Re-renders clear wet ink, so we need to re-draw the preview
420
- // after the full re-render.
421
- _b.sent();
422
- this.previewTransformCmds();
423
- _b.label = 3;
424
- case 3: return [2 /*return*/];
425
- }
426
- });
427
- });
428
- };
429
- Selection.prototype.deleteSelectedObjects = function () {
309
+ async scrollTo() {
310
+ if (this.selectedElems.length === 0) {
311
+ return;
312
+ }
313
+ const screenRect = new Rect2(0, 0, this.editor.display.width, this.editor.display.height);
314
+ if (!screenRect.containsPoint(this.screenRegion.center)) {
315
+ const closestPoint = screenRect.getClosestPointOnBoundaryTo(this.screenRegion.center);
316
+ const screenDelta = this.screenRegion.center.minus(closestPoint);
317
+ const delta = this.editor.viewport.screenToCanvasTransform.transformVec3(screenDelta);
318
+ await this.editor.dispatchNoAnnounce(Viewport.transformBy(Mat33.translation(delta.times(-1))), false);
319
+ // Re-renders clear wet ink, so we need to re-draw the preview
320
+ // after the full re-render.
321
+ await this.editor.queueRerender();
322
+ this.previewTransformCmds();
323
+ }
324
+ }
325
+ deleteSelectedObjects() {
430
326
  if (this.backgroundDragging || this.targetHandle) {
431
327
  this.onDragEnd();
432
328
  }
433
329
  return new Erase(this.selectedElems);
434
- };
435
- Selection.prototype.duplicateSelectedObjects = function () {
436
- return __awaiter(this, void 0, void 0, function () {
437
- var wasTransforming, tmpApplyCommand, selectionToUpdate, duplicateCommand;
438
- return __generator(this, function (_b) {
439
- switch (_b.label) {
440
- case 0:
441
- wasTransforming = this.backgroundDragging || this.targetHandle;
442
- tmpApplyCommand = null;
443
- if (!wasTransforming) return [3 /*break*/, 2];
444
- selectionToUpdate = null;
445
- tmpApplyCommand = new Selection.ApplyTransformationCommand(selectionToUpdate, this.selectedElems, this.transform);
446
- // Transform to ensure that the duplicates are in the correct location
447
- return [4 /*yield*/, tmpApplyCommand.apply(this.editor)];
448
- case 1:
449
- // Transform to ensure that the duplicates are in the correct location
450
- _b.sent();
451
- // Show items again
452
- this.addRemoveSelectionFromImage(true);
453
- _b.label = 2;
454
- case 2:
455
- duplicateCommand = new Duplicate(this.selectedElems);
456
- if (!wasTransforming) return [3 /*break*/, 4];
457
- // Move the selected objects back to the correct location.
458
- return [4 /*yield*/, (tmpApplyCommand === null || tmpApplyCommand === void 0 ? void 0 : tmpApplyCommand.unapply(this.editor))];
459
- case 3:
460
- // Move the selected objects back to the correct location.
461
- _b.sent();
462
- this.addRemoveSelectionFromImage(false);
463
- this.previewTransformCmds();
464
- this.updateUI();
465
- _b.label = 4;
466
- case 4: return [2 /*return*/, duplicateCommand];
467
- }
468
- });
469
- });
470
- };
471
- Selection.prototype.addTo = function (elem) {
330
+ }
331
+ runSelectionDuplicatedAnimation() {
332
+ if (this.selectionDuplicatedAnimationTimeout) {
333
+ clearTimeout(this.selectionDuplicatedAnimationTimeout);
334
+ }
335
+ const animationDuration = 400; // ms
336
+ this.backgroundElem.style.animation = `${animationDuration}ms ease selection-duplicated-animation`;
337
+ this.selectionDuplicatedAnimationTimeout = setTimeout(() => {
338
+ this.backgroundElem.style.animation = '';
339
+ this.selectionDuplicatedAnimationTimeout = null;
340
+ }, animationDuration);
341
+ }
342
+ async duplicateSelectedObjects() {
343
+ const wasTransforming = this.backgroundDragging || this.targetHandle;
344
+ let tmpApplyCommand = null;
345
+ if (!wasTransforming) {
346
+ this.runSelectionDuplicatedAnimation();
347
+ }
348
+ if (wasTransforming) {
349
+ // Don't update the selection's focus when redoing/undoing
350
+ const selectionToUpdate = null;
351
+ tmpApplyCommand = new Selection.ApplyTransformationCommand(selectionToUpdate, this.selectedElems, this.transform);
352
+ // Transform to ensure that the duplicates are in the correct location
353
+ await tmpApplyCommand.apply(this.editor);
354
+ // Show items again
355
+ this.addRemoveSelectionFromImage(true);
356
+ }
357
+ const duplicateCommand = new Duplicate(this.selectedElems);
358
+ if (wasTransforming) {
359
+ // Move the selected objects back to the correct location.
360
+ await tmpApplyCommand?.unapply(this.editor);
361
+ this.addRemoveSelectionFromImage(false);
362
+ this.previewTransformCmds();
363
+ this.updateUI();
364
+ }
365
+ return duplicateCommand;
366
+ }
367
+ addTo(elem) {
472
368
  if (this.container.parentElement) {
473
369
  this.container.remove();
474
370
  }
475
371
  elem.appendChild(this.container);
476
372
  this.hasParent = true;
477
- };
478
- Selection.prototype.setToPoint = function (point) {
373
+ }
374
+ setToPoint(point) {
479
375
  this.originalRegion = this.originalRegion.grownToPoint(point);
480
376
  this.updateUI();
481
- };
482
- Selection.prototype.cancelSelection = function () {
377
+ }
378
+ cancelSelection() {
483
379
  if (this.container.parentElement) {
484
380
  this.container.remove();
485
381
  }
486
382
  this.originalRegion = Rect2.empty;
487
383
  this.hasParent = false;
488
- };
489
- Selection.prototype.setSelectedObjects = function (objects, bbox) {
384
+ }
385
+ setSelectedObjects(objects, bbox) {
490
386
  this.addRemoveSelectionFromImage(true);
491
387
  this.originalRegion = bbox;
492
- this.selectedElems = objects.filter(function (object) { return object.isSelectable(); });
388
+ this.selectedElems = objects.filter(object => object.isSelectable());
493
389
  this.updateUI();
494
- };
495
- Selection.prototype.getSelectedObjects = function () {
496
- return this.selectedElems;
497
- };
498
- var _a;
499
- _a = Selection;
500
- (function () {
501
- SerializableCommand.register('selection-tool-transform', function (json, _editor) {
502
- var _b;
503
- // The selection box is lost when serializing/deserializing. No need to store box rotation
504
- var fullTransform = new (Mat33.bind.apply(Mat33, __spreadArray([void 0], json.transform, false)))();
505
- var elemIds = ((_b = json.elems) !== null && _b !== void 0 ? _b : []);
506
- return new _a.ApplyTransformationCommand(null, elemIds, fullTransform);
507
- });
508
- })();
509
- Selection.ApplyTransformationCommand = /** @class */ (function (_super) {
510
- __extends(class_1, _super);
511
- function class_1(selection,
512
- // If a `string[]`, selectedElems is a list of element IDs.
513
- selectedElems,
514
- // Full transformation used to transform elements.
515
- fullTransform) {
516
- var _this = _super.call(this, 'selection-tool-transform') || this;
517
- _this.selection = selection;
518
- _this.fullTransform = fullTransform;
519
- var isIDList = function (arr) {
520
- return typeof arr[0] === 'string';
521
- };
522
- // If a list of element IDs,
523
- if (isIDList(selectedElems)) {
524
- _this.selectedElemIds = selectedElems;
525
- }
526
- else {
527
- _this.selectedElemIds = selectedElems.map(function (elem) { return elem.getId(); });
528
- _this.transformCommands = selectedElems.map(function (elem) {
529
- return elem.transformBy(_this.fullTransform);
530
- });
531
- }
532
- return _this;
533
- }
534
- class_1.prototype.resolveToElems = function (editor) {
535
- var _this = this;
536
- if (this.transformCommands) {
537
- return;
538
- }
539
- this.transformCommands = this.selectedElemIds.map(function (id) {
540
- var elem = editor.image.lookupElement(id);
541
- if (!elem) {
542
- throw new Error("Unable to find element with ID, ".concat(id, "."));
543
- }
544
- return elem.transformBy(_this.fullTransform);
545
- });
546
- };
547
- class_1.prototype.apply = function (editor) {
548
- var _b, _c, _d, _e, _f;
549
- return __awaiter(this, void 0, void 0, function () {
550
- return __generator(this, function (_g) {
551
- switch (_g.label) {
552
- case 0:
553
- this.resolveToElems(editor);
554
- (_b = this.selection) === null || _b === void 0 ? void 0 : _b.setTransform(this.fullTransform, false);
555
- (_c = this.selection) === null || _c === void 0 ? void 0 : _c.updateUI();
556
- return [4 /*yield*/, editor.asyncApplyCommands(this.transformCommands, updateChunkSize)];
557
- case 1:
558
- _g.sent();
559
- (_d = this.selection) === null || _d === void 0 ? void 0 : _d.setTransform(Mat33.identity, false);
560
- (_e = this.selection) === null || _e === void 0 ? void 0 : _e.recomputeRegion();
561
- (_f = this.selection) === null || _f === void 0 ? void 0 : _f.updateUI();
562
- return [2 /*return*/];
563
- }
564
- });
565
- });
390
+ }
391
+ getSelectedObjects() {
392
+ return [...this.selectedElems];
393
+ }
394
+ }
395
+ _a = Selection;
396
+ (() => {
397
+ SerializableCommand.register('selection-tool-transform', (json, _editor) => {
398
+ // The selection box is lost when serializing/deserializing. No need to store box rotation
399
+ const fullTransform = new Mat33(...json.transform);
400
+ const elemIds = (json.elems ?? []);
401
+ return new _a.ApplyTransformationCommand(null, elemIds, fullTransform);
402
+ });
403
+ })();
404
+ Selection.ApplyTransformationCommand = class extends SerializableCommand {
405
+ constructor(selection,
406
+ // If a `string[]`, selectedElems is a list of element IDs.
407
+ selectedElems,
408
+ // Full transformation used to transform elements.
409
+ fullTransform) {
410
+ super('selection-tool-transform');
411
+ this.selection = selection;
412
+ this.fullTransform = fullTransform;
413
+ const isIDList = (arr) => {
414
+ return typeof arr[0] === 'string';
566
415
  };
567
- class_1.prototype.unapply = function (editor) {
568
- var _b, _c, _d, _e, _f;
569
- return __awaiter(this, void 0, void 0, function () {
570
- return __generator(this, function (_g) {
571
- switch (_g.label) {
572
- case 0:
573
- this.resolveToElems(editor);
574
- (_b = this.selection) === null || _b === void 0 ? void 0 : _b.setTransform(this.fullTransform.inverse(), false);
575
- (_c = this.selection) === null || _c === void 0 ? void 0 : _c.updateUI();
576
- return [4 /*yield*/, editor.asyncUnapplyCommands(this.transformCommands, updateChunkSize, true)];
577
- case 1:
578
- _g.sent();
579
- (_d = this.selection) === null || _d === void 0 ? void 0 : _d.setTransform(Mat33.identity, false);
580
- (_e = this.selection) === null || _e === void 0 ? void 0 : _e.recomputeRegion();
581
- (_f = this.selection) === null || _f === void 0 ? void 0 : _f.updateUI();
582
- return [2 /*return*/];
583
- }
584
- });
416
+ // If a list of element IDs,
417
+ if (isIDList(selectedElems)) {
418
+ this.selectedElemIds = selectedElems;
419
+ }
420
+ else {
421
+ this.selectedElemIds = selectedElems.map(elem => elem.getId());
422
+ this.transformCommands = selectedElems.map(elem => {
423
+ return elem.transformBy(this.fullTransform);
585
424
  });
425
+ }
426
+ }
427
+ resolveToElems(editor) {
428
+ if (this.transformCommands) {
429
+ return;
430
+ }
431
+ this.transformCommands = this.selectedElemIds.map(id => {
432
+ const elem = editor.image.lookupElement(id);
433
+ if (!elem) {
434
+ throw new Error(`Unable to find element with ID, ${id}.`);
435
+ }
436
+ return elem.transformBy(this.fullTransform);
437
+ });
438
+ }
439
+ async apply(editor) {
440
+ this.resolveToElems(editor);
441
+ this.selection?.setTransform(this.fullTransform, false);
442
+ this.selection?.updateUI();
443
+ await editor.asyncApplyCommands(this.transformCommands, updateChunkSize);
444
+ this.selection?.setTransform(Mat33.identity, false);
445
+ this.selection?.recomputeRegion();
446
+ this.selection?.updateUI();
447
+ }
448
+ async unapply(editor) {
449
+ this.resolveToElems(editor);
450
+ this.selection?.setTransform(this.fullTransform.inverse(), false);
451
+ this.selection?.updateUI();
452
+ await editor.asyncUnapplyCommands(this.transformCommands, updateChunkSize, true);
453
+ this.selection?.setTransform(Mat33.identity, false);
454
+ this.selection?.recomputeRegion();
455
+ this.selection?.updateUI();
456
+ }
457
+ serializeToJSON() {
458
+ return {
459
+ elems: this.selectedElemIds,
460
+ transform: this.fullTransform.toArray(),
586
461
  };
587
- class_1.prototype.serializeToJSON = function () {
588
- return {
589
- elems: this.selectedElemIds,
590
- transform: this.fullTransform.toArray(),
591
- };
592
- };
593
- class_1.prototype.description = function (_editor, localizationTable) {
594
- return localizationTable.transformedElements(this.selectedElemIds.length);
595
- };
596
- return class_1;
597
- }(SerializableCommand));
598
- return Selection;
599
- }());
462
+ }
463
+ description(_editor, localizationTable) {
464
+ return localizationTable.transformedElements(this.selectedElemIds.length);
465
+ }
466
+ };
600
467
  export default Selection;