js-draw 0.17.4 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/bundle.js +9 -1
  3. package/package.json +35 -33
  4. package/tsconfig.json +3 -2
  5. package/tsconfig.mjs.json +9 -0
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -34
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  8. package/.github/ISSUE_TEMPLATE/translation.yml +0 -902
  9. package/.github/pull_request_template.md +0 -15
  10. package/.github/workflows/firebase-hosting-merge.yml +0 -32
  11. package/.github/workflows/firebase-hosting-pull-request.yml +0 -32
  12. package/.github/workflows/github-pages.yml +0 -56
  13. package/.husky/pre-commit +0 -4
  14. package/build_tools/BundledFile.ts +0 -167
  15. package/build_tools/buildTranslationTemplate.ts +0 -121
  16. package/build_tools/bundle.ts +0 -11
  17. package/dist/build_tools/BundledFile.d.ts +0 -13
  18. package/dist/build_tools/BundledFile.js +0 -157
  19. package/dist/build_tools/buildTranslationTemplate.d.ts +0 -1
  20. package/dist/build_tools/buildTranslationTemplate.js +0 -94
  21. package/dist/build_tools/bundle.d.ts +0 -1
  22. package/dist/build_tools/bundle.js +0 -5
  23. package/dist/src/Color4.d.ts +0 -60
  24. package/dist/src/Color4.js +0 -192
  25. package/dist/src/Editor.d.ts +0 -308
  26. package/dist/src/Editor.js +0 -874
  27. package/dist/src/EditorImage.d.ts +0 -97
  28. package/dist/src/EditorImage.js +0 -477
  29. package/dist/src/EventDispatcher.d.ts +0 -30
  30. package/dist/src/EventDispatcher.js +0 -54
  31. package/dist/src/Pointer.d.ts +0 -24
  32. package/dist/src/Pointer.js +0 -80
  33. package/dist/src/SVGLoader.d.ts +0 -48
  34. package/dist/src/SVGLoader.js +0 -442
  35. package/dist/src/UndoRedoHistory.d.ts +0 -19
  36. package/dist/src/UndoRedoHistory.js +0 -91
  37. package/dist/src/Viewport.d.ts +0 -71
  38. package/dist/src/Viewport.js +0 -256
  39. package/dist/src/bundle/bundled.d.ts +0 -4
  40. package/dist/src/bundle/bundled.js +0 -5
  41. package/dist/src/commands/Command.d.ts +0 -16
  42. package/dist/src/commands/Command.js +0 -30
  43. package/dist/src/commands/Duplicate.d.ts +0 -14
  44. package/dist/src/commands/Duplicate.js +0 -33
  45. package/dist/src/commands/Erase.d.ts +0 -14
  46. package/dist/src/commands/Erase.js +0 -57
  47. package/dist/src/commands/SerializableCommand.d.ts +0 -12
  48. package/dist/src/commands/SerializableCommand.js +0 -36
  49. package/dist/src/commands/UnresolvedCommand.d.ts +0 -14
  50. package/dist/src/commands/UnresolvedCommand.js +0 -22
  51. package/dist/src/commands/invertCommand.d.ts +0 -4
  52. package/dist/src/commands/invertCommand.js +0 -44
  53. package/dist/src/commands/lib.d.ts +0 -7
  54. package/dist/src/commands/lib.js +0 -7
  55. package/dist/src/commands/localization.d.ts +0 -23
  56. package/dist/src/commands/localization.js +0 -21
  57. package/dist/src/commands/uniteCommands.d.ts +0 -4
  58. package/dist/src/commands/uniteCommands.js +0 -116
  59. package/dist/src/components/AbstractComponent.d.ts +0 -73
  60. package/dist/src/components/AbstractComponent.js +0 -252
  61. package/dist/src/components/ImageBackground.d.ts +0 -42
  62. package/dist/src/components/ImageBackground.js +0 -139
  63. package/dist/src/components/ImageComponent.d.ts +0 -31
  64. package/dist/src/components/ImageComponent.js +0 -146
  65. package/dist/src/components/RestylableComponent.d.ts +0 -24
  66. package/dist/src/components/RestylableComponent.js +0 -80
  67. package/dist/src/components/SVGGlobalAttributesObject.d.ts +0 -21
  68. package/dist/src/components/SVGGlobalAttributesObject.js +0 -59
  69. package/dist/src/components/Stroke.d.ts +0 -40
  70. package/dist/src/components/Stroke.js +0 -185
  71. package/dist/src/components/TextComponent.d.ts +0 -53
  72. package/dist/src/components/TextComponent.js +0 -252
  73. package/dist/src/components/UnknownSVGObject.d.ts +0 -18
  74. package/dist/src/components/UnknownSVGObject.js +0 -44
  75. package/dist/src/components/builders/ArrowBuilder.d.ts +0 -19
  76. package/dist/src/components/builders/ArrowBuilder.js +0 -86
  77. package/dist/src/components/builders/FreehandLineBuilder.d.ts +0 -33
  78. package/dist/src/components/builders/FreehandLineBuilder.js +0 -165
  79. package/dist/src/components/builders/LineBuilder.d.ts +0 -18
  80. package/dist/src/components/builders/LineBuilder.js +0 -58
  81. package/dist/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +0 -36
  82. package/dist/src/components/builders/PressureSensitiveFreehandLineBuilder.js +0 -339
  83. package/dist/src/components/builders/RectangleBuilder.d.ts +0 -20
  84. package/dist/src/components/builders/RectangleBuilder.js +0 -50
  85. package/dist/src/components/builders/types.d.ts +0 -12
  86. package/dist/src/components/builders/types.js +0 -1
  87. package/dist/src/components/lib.d.ts +0 -12
  88. package/dist/src/components/lib.js +0 -12
  89. package/dist/src/components/localization.d.ts +0 -11
  90. package/dist/src/components/localization.js +0 -10
  91. package/dist/src/components/util/StrokeSmoother.d.ts +0 -35
  92. package/dist/src/components/util/StrokeSmoother.js +0 -210
  93. package/dist/src/components/util/describeComponentList.d.ts +0 -4
  94. package/dist/src/components/util/describeComponentList.js +0 -14
  95. package/dist/src/lib.d.ts +0 -34
  96. package/dist/src/lib.js +0 -34
  97. package/dist/src/localization.d.ts +0 -14
  98. package/dist/src/localization.js +0 -10
  99. package/dist/src/localizations/de.d.ts +0 -3
  100. package/dist/src/localizations/de.js +0 -4
  101. package/dist/src/localizations/en.d.ts +0 -3
  102. package/dist/src/localizations/en.js +0 -4
  103. package/dist/src/localizations/es.d.ts +0 -3
  104. package/dist/src/localizations/es.js +0 -18
  105. package/dist/src/localizations/getLocalizationTable.d.ts +0 -3
  106. package/dist/src/localizations/getLocalizationTable.js +0 -45
  107. package/dist/src/math/LineSegment2.d.ts +0 -24
  108. package/dist/src/math/LineSegment2.js +0 -125
  109. package/dist/src/math/Mat33.d.ts +0 -118
  110. package/dist/src/math/Mat33.js +0 -326
  111. package/dist/src/math/Path.d.ts +0 -71
  112. package/dist/src/math/Path.js +0 -648
  113. package/dist/src/math/Rect2.d.ts +0 -52
  114. package/dist/src/math/Rect2.js +0 -228
  115. package/dist/src/math/Triangle.d.ts +0 -11
  116. package/dist/src/math/Triangle.js +0 -19
  117. package/dist/src/math/Vec2.d.ts +0 -13
  118. package/dist/src/math/Vec2.js +0 -13
  119. package/dist/src/math/Vec3.d.ts +0 -106
  120. package/dist/src/math/Vec3.js +0 -174
  121. package/dist/src/math/lib.d.ts +0 -7
  122. package/dist/src/math/lib.js +0 -7
  123. package/dist/src/math/rounding.d.ts +0 -4
  124. package/dist/src/math/rounding.js +0 -128
  125. package/dist/src/rendering/Display.d.ts +0 -75
  126. package/dist/src/rendering/Display.js +0 -207
  127. package/dist/src/rendering/RenderingStyle.d.ts +0 -31
  128. package/dist/src/rendering/RenderingStyle.js +0 -38
  129. package/dist/src/rendering/TextRenderingStyle.d.ts +0 -36
  130. package/dist/src/rendering/TextRenderingStyle.js +0 -23
  131. package/dist/src/rendering/caching/CacheRecord.d.ts +0 -20
  132. package/dist/src/rendering/caching/CacheRecord.js +0 -55
  133. package/dist/src/rendering/caching/CacheRecordManager.d.ts +0 -12
  134. package/dist/src/rendering/caching/CacheRecordManager.js +0 -43
  135. package/dist/src/rendering/caching/RenderingCache.d.ts +0 -11
  136. package/dist/src/rendering/caching/RenderingCache.js +0 -45
  137. package/dist/src/rendering/caching/RenderingCacheNode.d.ts +0 -29
  138. package/dist/src/rendering/caching/RenderingCacheNode.js +0 -320
  139. package/dist/src/rendering/caching/testUtils.d.ts +0 -9
  140. package/dist/src/rendering/caching/testUtils.js +0 -20
  141. package/dist/src/rendering/caching/types.d.ts +0 -19
  142. package/dist/src/rendering/caching/types.js +0 -1
  143. package/dist/src/rendering/lib.d.ts +0 -5
  144. package/dist/src/rendering/lib.js +0 -5
  145. package/dist/src/rendering/localization.d.ts +0 -10
  146. package/dist/src/rendering/localization.js +0 -9
  147. package/dist/src/rendering/renderers/AbstractRenderer.d.ts +0 -68
  148. package/dist/src/rendering/renderers/AbstractRenderer.js +0 -144
  149. package/dist/src/rendering/renderers/CanvasRenderer.d.ts +0 -63
  150. package/dist/src/rendering/renderers/CanvasRenderer.js +0 -230
  151. package/dist/src/rendering/renderers/DummyRenderer.d.ts +0 -35
  152. package/dist/src/rendering/renderers/DummyRenderer.js +0 -106
  153. package/dist/src/rendering/renderers/SVGRenderer.d.ts +0 -57
  154. package/dist/src/rendering/renderers/SVGRenderer.js +0 -304
  155. package/dist/src/rendering/renderers/TextOnlyRenderer.d.ts +0 -29
  156. package/dist/src/rendering/renderers/TextOnlyRenderer.js +0 -57
  157. package/dist/src/testing/beforeEachFile.d.ts +0 -1
  158. package/dist/src/testing/beforeEachFile.js +0 -7
  159. package/dist/src/testing/createEditor.d.ts +0 -4
  160. package/dist/src/testing/createEditor.js +0 -9
  161. package/dist/src/testing/lib.d.ts +0 -2
  162. package/dist/src/testing/lib.js +0 -2
  163. package/dist/src/testing/loadExpectExtensions.d.ts +0 -2
  164. package/dist/src/testing/loadExpectExtensions.js +0 -24
  165. package/dist/src/testing/sendPenEvent.d.ts +0 -12
  166. package/dist/src/testing/sendPenEvent.js +0 -19
  167. package/dist/src/testing/sendTouchEvent.d.ts +0 -42
  168. package/dist/src/testing/sendTouchEvent.js +0 -62
  169. package/dist/src/toolbar/HTMLToolbar.d.ts +0 -103
  170. package/dist/src/toolbar/HTMLToolbar.js +0 -376
  171. package/dist/src/toolbar/IconProvider.d.ts +0 -62
  172. package/dist/src/toolbar/IconProvider.js +0 -654
  173. package/dist/src/toolbar/lib.d.ts +0 -3
  174. package/dist/src/toolbar/lib.js +0 -3
  175. package/dist/src/toolbar/localization.d.ts +0 -49
  176. package/dist/src/toolbar/localization.js +0 -48
  177. package/dist/src/toolbar/makeColorInput.d.ts +0 -6
  178. package/dist/src/toolbar/makeColorInput.js +0 -113
  179. package/dist/src/toolbar/types.d.ts +0 -4
  180. package/dist/src/toolbar/types.js +0 -1
  181. package/dist/src/toolbar/widgets/ActionButtonWidget.d.ts +0 -15
  182. package/dist/src/toolbar/widgets/ActionButtonWidget.js +0 -25
  183. package/dist/src/toolbar/widgets/BaseToolWidget.d.ts +0 -11
  184. package/dist/src/toolbar/widgets/BaseToolWidget.js +0 -44
  185. package/dist/src/toolbar/widgets/BaseWidget.d.ts +0 -72
  186. package/dist/src/toolbar/widgets/BaseWidget.js +0 -307
  187. package/dist/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +0 -18
  188. package/dist/src/toolbar/widgets/DocumentPropertiesWidget.js +0 -120
  189. package/dist/src/toolbar/widgets/EraserToolWidget.d.ts +0 -17
  190. package/dist/src/toolbar/widgets/EraserToolWidget.js +0 -57
  191. package/dist/src/toolbar/widgets/HandToolWidget.d.ts +0 -17
  192. package/dist/src/toolbar/widgets/HandToolWidget.js +0 -172
  193. package/dist/src/toolbar/widgets/InsertImageWidget.d.ts +0 -19
  194. package/dist/src/toolbar/widgets/InsertImageWidget.js +0 -170
  195. package/dist/src/toolbar/widgets/OverflowWidget.d.ts +0 -25
  196. package/dist/src/toolbar/widgets/OverflowWidget.js +0 -71
  197. package/dist/src/toolbar/widgets/PenToolWidget.d.ts +0 -27
  198. package/dist/src/toolbar/widgets/PenToolWidget.js +0 -220
  199. package/dist/src/toolbar/widgets/SelectionToolWidget.d.ts +0 -13
  200. package/dist/src/toolbar/widgets/SelectionToolWidget.js +0 -147
  201. package/dist/src/toolbar/widgets/TextToolWidget.d.ts +0 -16
  202. package/dist/src/toolbar/widgets/TextToolWidget.js +0 -109
  203. package/dist/src/toolbar/widgets/lib.d.ts +0 -10
  204. package/dist/src/toolbar/widgets/lib.js +0 -10
  205. package/dist/src/tools/BaseTool.d.ts +0 -22
  206. package/dist/src/tools/BaseTool.js +0 -63
  207. package/dist/src/tools/Eraser.d.ts +0 -23
  208. package/dist/src/tools/Eraser.js +0 -106
  209. package/dist/src/tools/FindTool.d.ts +0 -21
  210. package/dist/src/tools/FindTool.js +0 -114
  211. package/dist/src/tools/PanZoom.d.ts +0 -52
  212. package/dist/src/tools/PanZoom.js +0 -414
  213. package/dist/src/tools/PasteHandler.d.ts +0 -23
  214. package/dist/src/tools/PasteHandler.js +0 -93
  215. package/dist/src/tools/Pen.d.ts +0 -39
  216. package/dist/src/tools/Pen.js +0 -173
  217. package/dist/src/tools/PipetteTool.d.ts +0 -18
  218. package/dist/src/tools/PipetteTool.js +0 -39
  219. package/dist/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -8
  220. package/dist/src/tools/SelectionTool/SelectAllShortcutHandler.js +0 -22
  221. package/dist/src/tools/SelectionTool/Selection.d.ts +0 -64
  222. package/dist/src/tools/SelectionTool/Selection.js +0 -459
  223. package/dist/src/tools/SelectionTool/SelectionHandle.d.ts +0 -38
  224. package/dist/src/tools/SelectionTool/SelectionHandle.js +0 -81
  225. package/dist/src/tools/SelectionTool/SelectionTool.d.ts +0 -36
  226. package/dist/src/tools/SelectionTool/SelectionTool.js +0 -398
  227. package/dist/src/tools/SelectionTool/TransformMode.d.ts +0 -34
  228. package/dist/src/tools/SelectionTool/TransformMode.js +0 -98
  229. package/dist/src/tools/SelectionTool/types.d.ts +0 -9
  230. package/dist/src/tools/SelectionTool/types.js +0 -11
  231. package/dist/src/tools/TextTool.d.ts +0 -33
  232. package/dist/src/tools/TextTool.js +0 -256
  233. package/dist/src/tools/ToolController.d.ts +0 -18
  234. package/dist/src/tools/ToolController.js +0 -158
  235. package/dist/src/tools/ToolEnabledGroup.d.ts +0 -6
  236. package/dist/src/tools/ToolEnabledGroup.js +0 -11
  237. package/dist/src/tools/ToolSwitcherShortcut.d.ts +0 -16
  238. package/dist/src/tools/ToolSwitcherShortcut.js +0 -32
  239. package/dist/src/tools/ToolbarShortcutHandler.d.ts +0 -12
  240. package/dist/src/tools/ToolbarShortcutHandler.js +0 -23
  241. package/dist/src/tools/UndoRedoShortcut.d.ts +0 -8
  242. package/dist/src/tools/UndoRedoShortcut.js +0 -22
  243. package/dist/src/tools/lib.d.ts +0 -16
  244. package/dist/src/tools/lib.js +0 -16
  245. package/dist/src/tools/localization.d.ts +0 -28
  246. package/dist/src/tools/localization.js +0 -27
  247. package/dist/src/types.d.ts +0 -151
  248. package/dist/src/types.js +0 -35
  249. package/dist/src/util/assertions.d.ts +0 -23
  250. package/dist/src/util/assertions.js +0 -45
  251. package/dist/src/util/fileToBase64.d.ts +0 -3
  252. package/dist/src/util/fileToBase64.js +0 -13
  253. package/dist/src/util/untilNextAnimationFrame.d.ts +0 -3
  254. package/dist/src/util/untilNextAnimationFrame.js +0 -7
  255. package/dist/src/util/waitForTimeout.d.ts +0 -2
  256. package/dist/src/util/waitForTimeout.js +0 -7
  257. package/src/Color4.test.ts +0 -40
  258. package/src/Color4.ts +0 -234
  259. package/src/Editor.css +0 -86
  260. package/src/Editor.loadFrom.test.ts +0 -24
  261. package/src/Editor.toSVG.test.ts +0 -111
  262. package/src/Editor.ts +0 -1122
  263. package/src/EditorImage.test.ts +0 -120
  264. package/src/EditorImage.ts +0 -603
  265. package/src/EventDispatcher.test.ts +0 -123
  266. package/src/EventDispatcher.ts +0 -71
  267. package/src/Pointer.ts +0 -127
  268. package/src/SVGLoader.test.ts +0 -114
  269. package/src/SVGLoader.ts +0 -511
  270. package/src/UndoRedoHistory.test.ts +0 -33
  271. package/src/UndoRedoHistory.ts +0 -102
  272. package/src/Viewport.ts +0 -319
  273. package/src/bundle/bundled.ts +0 -7
  274. package/src/commands/Command.ts +0 -45
  275. package/src/commands/Duplicate.ts +0 -48
  276. package/src/commands/Erase.ts +0 -74
  277. package/src/commands/SerializableCommand.ts +0 -49
  278. package/src/commands/UnresolvedCommand.ts +0 -37
  279. package/src/commands/invertCommand.ts +0 -51
  280. package/src/commands/lib.ts +0 -16
  281. package/src/commands/localization.ts +0 -47
  282. package/src/commands/uniteCommands.test.ts +0 -23
  283. package/src/commands/uniteCommands.ts +0 -135
  284. package/src/components/AbstractComponent.transformBy.test.ts +0 -22
  285. package/src/components/AbstractComponent.ts +0 -364
  286. package/src/components/ImageBackground.test.ts +0 -35
  287. package/src/components/ImageBackground.ts +0 -176
  288. package/src/components/ImageComponent.ts +0 -171
  289. package/src/components/RestylableComponent.ts +0 -142
  290. package/src/components/SVGGlobalAttributesObject.ts +0 -81
  291. package/src/components/Stroke.test.ts +0 -139
  292. package/src/components/Stroke.ts +0 -245
  293. package/src/components/TextComponent.test.ts +0 -99
  294. package/src/components/TextComponent.ts +0 -315
  295. package/src/components/UnknownSVGObject.test.ts +0 -10
  296. package/src/components/UnknownSVGObject.ts +0 -60
  297. package/src/components/builders/ArrowBuilder.ts +0 -107
  298. package/src/components/builders/FreehandLineBuilder.ts +0 -212
  299. package/src/components/builders/LineBuilder.ts +0 -77
  300. package/src/components/builders/PressureSensitiveFreehandLineBuilder.ts +0 -454
  301. package/src/components/builders/RectangleBuilder.ts +0 -74
  302. package/src/components/builders/types.ts +0 -15
  303. package/src/components/lib.ts +0 -25
  304. package/src/components/localization.ts +0 -22
  305. package/src/components/util/StrokeSmoother.ts +0 -293
  306. package/src/components/util/describeComponentList.ts +0 -18
  307. package/src/lib.ts +0 -37
  308. package/src/localization.ts +0 -34
  309. package/src/localizations/de.ts +0 -98
  310. package/src/localizations/en.ts +0 -8
  311. package/src/localizations/es.ts +0 -74
  312. package/src/localizations/getLocalizationTable.test.ts +0 -27
  313. package/src/localizations/getLocalizationTable.ts +0 -55
  314. package/src/math/LineSegment2.test.ts +0 -99
  315. package/src/math/LineSegment2.ts +0 -160
  316. package/src/math/Mat33.test.ts +0 -244
  317. package/src/math/Mat33.ts +0 -437
  318. package/src/math/Path.fromString.test.ts +0 -223
  319. package/src/math/Path.test.ts +0 -198
  320. package/src/math/Path.toString.test.ts +0 -77
  321. package/src/math/Path.ts +0 -790
  322. package/src/math/Rect2.test.ts +0 -204
  323. package/src/math/Rect2.ts +0 -315
  324. package/src/math/Triangle.ts +0 -29
  325. package/src/math/Vec2.test.ts +0 -30
  326. package/src/math/Vec2.ts +0 -18
  327. package/src/math/Vec3.test.ts +0 -44
  328. package/src/math/Vec3.ts +0 -218
  329. package/src/math/lib.ts +0 -15
  330. package/src/math/rounding.test.ts +0 -65
  331. package/src/math/rounding.ts +0 -156
  332. package/src/rendering/Display.ts +0 -249
  333. package/src/rendering/RenderingStyle.test.ts +0 -68
  334. package/src/rendering/RenderingStyle.ts +0 -55
  335. package/src/rendering/TextRenderingStyle.ts +0 -45
  336. package/src/rendering/caching/CacheRecord.test.ts +0 -49
  337. package/src/rendering/caching/CacheRecord.ts +0 -77
  338. package/src/rendering/caching/CacheRecordManager.ts +0 -71
  339. package/src/rendering/caching/RenderingCache.test.ts +0 -44
  340. package/src/rendering/caching/RenderingCache.ts +0 -66
  341. package/src/rendering/caching/RenderingCacheNode.ts +0 -405
  342. package/src/rendering/caching/testUtils.ts +0 -35
  343. package/src/rendering/caching/types.ts +0 -34
  344. package/src/rendering/lib.ts +0 -6
  345. package/src/rendering/localization.ts +0 -20
  346. package/src/rendering/renderers/AbstractRenderer.ts +0 -222
  347. package/src/rendering/renderers/CanvasRenderer.ts +0 -296
  348. package/src/rendering/renderers/DummyRenderer.test.ts +0 -42
  349. package/src/rendering/renderers/DummyRenderer.ts +0 -136
  350. package/src/rendering/renderers/SVGRenderer.ts +0 -354
  351. package/src/rendering/renderers/TextOnlyRenderer.ts +0 -70
  352. package/src/styles.js +0 -7
  353. package/src/testing/beforeEachFile.ts +0 -8
  354. package/src/testing/createEditor.ts +0 -11
  355. package/src/testing/global.d.ts +0 -17
  356. package/src/testing/lib.ts +0 -3
  357. package/src/testing/loadExpectExtensions.ts +0 -25
  358. package/src/testing/sendPenEvent.ts +0 -31
  359. package/src/testing/sendTouchEvent.ts +0 -78
  360. package/src/toolbar/HTMLToolbar.ts +0 -492
  361. package/src/toolbar/IconProvider.ts +0 -736
  362. package/src/toolbar/lib.ts +0 -4
  363. package/src/toolbar/localization.ts +0 -106
  364. package/src/toolbar/makeColorInput.ts +0 -145
  365. package/src/toolbar/toolbar.css +0 -213
  366. package/src/toolbar/types.ts +0 -5
  367. package/src/toolbar/widgets/ActionButtonWidget.ts +0 -39
  368. package/src/toolbar/widgets/BaseToolWidget.ts +0 -56
  369. package/src/toolbar/widgets/BaseWidget.ts +0 -377
  370. package/src/toolbar/widgets/DocumentPropertiesWidget.ts +0 -167
  371. package/src/toolbar/widgets/EraserToolWidget.ts +0 -85
  372. package/src/toolbar/widgets/HandToolWidget.ts +0 -250
  373. package/src/toolbar/widgets/InsertImageWidget.css +0 -44
  374. package/src/toolbar/widgets/InsertImageWidget.ts +0 -223
  375. package/src/toolbar/widgets/OverflowWidget.css +0 -27
  376. package/src/toolbar/widgets/OverflowWidget.ts +0 -92
  377. package/src/toolbar/widgets/PenToolWidget.ts +0 -288
  378. package/src/toolbar/widgets/SelectionToolWidget.ts +0 -190
  379. package/src/toolbar/widgets/TextToolWidget.ts +0 -145
  380. package/src/toolbar/widgets/lib.ts +0 -13
  381. package/src/tools/BaseTool.ts +0 -76
  382. package/src/tools/Eraser.test.ts +0 -103
  383. package/src/tools/Eraser.ts +0 -139
  384. package/src/tools/FindTool.css +0 -7
  385. package/src/tools/FindTool.ts +0 -152
  386. package/src/tools/PanZoom.test.ts +0 -310
  387. package/src/tools/PanZoom.ts +0 -520
  388. package/src/tools/PasteHandler.ts +0 -95
  389. package/src/tools/Pen.test.ts +0 -194
  390. package/src/tools/Pen.ts +0 -226
  391. package/src/tools/PipetteTool.ts +0 -55
  392. package/src/tools/SelectionTool/SelectAllShortcutHandler.ts +0 -28
  393. package/src/tools/SelectionTool/Selection.ts +0 -607
  394. package/src/tools/SelectionTool/SelectionHandle.ts +0 -108
  395. package/src/tools/SelectionTool/SelectionTool.css +0 -23
  396. package/src/tools/SelectionTool/SelectionTool.test.ts +0 -261
  397. package/src/tools/SelectionTool/SelectionTool.ts +0 -480
  398. package/src/tools/SelectionTool/TransformMode.ts +0 -114
  399. package/src/tools/SelectionTool/types.ts +0 -11
  400. package/src/tools/TextTool.ts +0 -326
  401. package/src/tools/ToolController.ts +0 -178
  402. package/src/tools/ToolEnabledGroup.ts +0 -14
  403. package/src/tools/ToolSwitcherShortcut.ts +0 -39
  404. package/src/tools/ToolbarShortcutHandler.ts +0 -34
  405. package/src/tools/UndoRedoShortcut.test.ts +0 -56
  406. package/src/tools/UndoRedoShortcut.ts +0 -25
  407. package/src/tools/lib.ts +0 -21
  408. package/src/tools/localization.ts +0 -66
  409. package/src/types.ts +0 -234
  410. package/src/util/assertions.ts +0 -55
  411. package/src/util/fileToBase64.ts +0 -18
  412. package/src/util/untilNextAnimationFrame.ts +0 -9
  413. package/src/util/waitForTimeout.ts +0 -9
@@ -1,459 +0,0 @@
1
- /**
2
- * @internal
3
- * @packageDocumentation
4
- */
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
- var _a;
15
- import SerializableCommand from '../../commands/SerializableCommand';
16
- import Mat33 from '../../math/Mat33';
17
- import Rect2 from '../../math/Rect2';
18
- import { Vec2 } from '../../math/Vec2';
19
- import SelectionHandle, { HandleShape, handleSize } from './SelectionHandle';
20
- import { cssPrefix } from './SelectionTool';
21
- import Viewport from '../../Viewport';
22
- import Erase from '../../commands/Erase';
23
- import Duplicate from '../../commands/Duplicate';
24
- import { DragTransformer, ResizeTransformer, RotateTransformer } from './TransformMode';
25
- import { ResizeMode } from './types';
26
- import EditorImage from '../../EditorImage';
27
- const updateChunkSize = 100;
28
- const maxPreviewElemCount = 500;
29
- // @internal
30
- export default class Selection {
31
- constructor(startPoint, editor) {
32
- this.editor = editor;
33
- this.transform = Mat33.identity;
34
- this.selectedElems = [];
35
- this.hasParent = true;
36
- // Maps IDs to whether we removed the component from the image
37
- this.removedFromImage = {};
38
- this.targetHandle = null;
39
- this.backgroundDragging = false;
40
- this.originalRegion = new Rect2(startPoint.x, startPoint.y, 0, 0);
41
- this.transformers = {
42
- drag: new DragTransformer(editor, this),
43
- resize: new ResizeTransformer(editor, this),
44
- rotate: new RotateTransformer(editor, this),
45
- };
46
- this.container = document.createElement('div');
47
- this.backgroundElem = document.createElement('div');
48
- this.backgroundElem.classList.add(`${cssPrefix}selection-background`);
49
- this.container.appendChild(this.backgroundElem);
50
- const resizeHorizontalHandle = new SelectionHandle(HandleShape.Square, Vec2.of(1, 0.5), this, (startPoint) => this.transformers.resize.onDragStart(startPoint, ResizeMode.HorizontalOnly), (currentPoint) => this.transformers.resize.onDragUpdate(currentPoint), () => this.transformers.resize.onDragEnd());
51
- const resizeVerticalHandle = new SelectionHandle(HandleShape.Square, Vec2.of(0.5, 1), this, (startPoint) => this.transformers.resize.onDragStart(startPoint, ResizeMode.VerticalOnly), (currentPoint) => this.transformers.resize.onDragUpdate(currentPoint), () => this.transformers.resize.onDragEnd());
52
- const resizeBothHandle = new SelectionHandle(HandleShape.Square, Vec2.of(1, 1), this, (startPoint) => this.transformers.resize.onDragStart(startPoint, ResizeMode.Both), (currentPoint) => this.transformers.resize.onDragUpdate(currentPoint), () => this.transformers.resize.onDragEnd());
53
- const rotationHandle = new SelectionHandle(HandleShape.Circle, Vec2.of(0.5, 0), this, (startPoint) => this.transformers.rotate.onDragStart(startPoint), (currentPoint) => this.transformers.rotate.onDragUpdate(currentPoint), () => this.transformers.rotate.onDragEnd());
54
- this.handles = [
55
- resizeBothHandle,
56
- resizeHorizontalHandle,
57
- resizeVerticalHandle,
58
- rotationHandle,
59
- ];
60
- for (const handle of this.handles) {
61
- handle.addTo(this.backgroundElem);
62
- }
63
- }
64
- // @internal Intended for unit tests
65
- getBackgroundElem() {
66
- return this.backgroundElem;
67
- }
68
- getTransform() {
69
- return this.transform;
70
- }
71
- get preTransformRegion() {
72
- return this.originalRegion;
73
- }
74
- get region() {
75
- // TODO: This currently assumes that the region rotates about its center.
76
- // This may not be true.
77
- const rotationMatrix = Mat33.zRotation(this.regionRotation, this.originalRegion.center);
78
- const scaleAndTranslateMat = this.transform.rightMul(rotationMatrix.inverse());
79
- return this.originalRegion.transformedBoundingBox(scaleAndTranslateMat);
80
- }
81
- /**
82
- * Computes and returns the bounding box of the selection without
83
- * any additional padding. Computes directly from the elements that are selected.
84
- * @internal
85
- */
86
- computeTightBoundingBox() {
87
- const bbox = this.selectedElems.reduce((accumulator, elem) => {
88
- return (accumulator !== null && accumulator !== void 0 ? accumulator : elem.getBBox()).union(elem.getBBox());
89
- }, null);
90
- return bbox !== null && bbox !== void 0 ? bbox : Rect2.empty;
91
- }
92
- get regionRotation() {
93
- return this.transform.transformVec3(Vec2.unitX).angle();
94
- }
95
- get preTransformedScreenRegion() {
96
- const toScreen = (vec) => this.editor.viewport.canvasToScreen(vec);
97
- return Rect2.fromCorners(toScreen(this.preTransformRegion.topLeft), toScreen(this.preTransformRegion.bottomRight));
98
- }
99
- get preTransformedScreenRegionRotation() {
100
- return this.editor.viewport.getRotationAngle();
101
- }
102
- get screenRegion() {
103
- const toScreen = this.editor.viewport.canvasToScreenTransform;
104
- const scaleFactor = this.editor.viewport.getScaleFactor();
105
- const screenCenter = toScreen.transformVec2(this.region.center);
106
- return new Rect2(screenCenter.x, screenCenter.y, scaleFactor * this.region.width, scaleFactor * this.region.height).translatedBy(this.region.size.times(-scaleFactor / 2));
107
- }
108
- get screenRegionRotation() {
109
- return this.regionRotation + this.editor.viewport.getRotationAngle();
110
- }
111
- // Applies, previews, but doesn't finalize the given transformation.
112
- setTransform(transform, preview = true) {
113
- this.transform = transform;
114
- if (preview && this.hasParent) {
115
- this.scrollTo();
116
- this.previewTransformCmds();
117
- }
118
- }
119
- // Applies the current transformation to the selection
120
- finalizeTransform() {
121
- const fullTransform = this.transform;
122
- const selectedElems = this.selectedElems;
123
- // Reset for the next drag
124
- this.originalRegion = this.originalRegion.transformedBoundingBox(this.transform);
125
- this.transform = Mat33.identity;
126
- // Make the commands undo-able
127
- this.editor.dispatch(new Selection.ApplyTransformationCommand(this, selectedElems, fullTransform));
128
- }
129
- // Preview the effects of the current transformation on the selection
130
- previewTransformCmds() {
131
- // Don't render what we're moving if it's likely to be slow.
132
- if (this.selectedElems.length > maxPreviewElemCount) {
133
- this.updateUI();
134
- return;
135
- }
136
- const wetInkRenderer = this.editor.display.getWetInkRenderer();
137
- wetInkRenderer.clear();
138
- wetInkRenderer.pushTransform(this.transform);
139
- const viewportVisibleRect = this.editor.viewport.visibleRect;
140
- const visibleRect = viewportVisibleRect.transformedBoundingBox(this.transform.inverse());
141
- for (const elem of this.selectedElems) {
142
- elem.render(wetInkRenderer, visibleRect);
143
- }
144
- wetInkRenderer.popTransform();
145
- this.updateUI();
146
- }
147
- // Find the objects corresponding to this in the document,
148
- // select them.
149
- // Returns false iff nothing was selected.
150
- resolveToObjects() {
151
- let singleItemSelectionMode = false;
152
- this.transform = Mat33.identity;
153
- // Grow the rectangle, if necessary
154
- if (this.region.w === 0 || this.region.h === 0) {
155
- const padding = this.editor.viewport.visibleRect.maxDimension / 200;
156
- this.originalRegion = Rect2.bboxOf(this.region.corners, padding);
157
- // Only select one item if the rectangle was very small.
158
- singleItemSelectionMode = true;
159
- }
160
- this.selectedElems = this.editor.image.getElementsIntersectingRegion(this.region).filter(elem => {
161
- return elem.intersectsRect(this.region) && elem.isSelectable();
162
- });
163
- if (singleItemSelectionMode && this.selectedElems.length > 0) {
164
- this.selectedElems = [this.selectedElems[this.selectedElems.length - 1]];
165
- }
166
- // Find the bounding box of all selected elements.
167
- if (!this.recomputeRegion()) {
168
- return false;
169
- }
170
- this.updateUI();
171
- return true;
172
- }
173
- // Recompute this' region from the selected elements.
174
- // Returns false if the selection is empty.
175
- recomputeRegion() {
176
- const newRegion = this.computeTightBoundingBox();
177
- if (!newRegion) {
178
- this.cancelSelection();
179
- return false;
180
- }
181
- this.originalRegion = newRegion;
182
- const minSize = this.getMinCanvasSize();
183
- if (this.originalRegion.w < minSize || this.originalRegion.h < minSize) {
184
- // Add padding
185
- const padding = minSize / 2;
186
- this.originalRegion = Rect2.bboxOf(this.originalRegion.corners, padding);
187
- }
188
- return true;
189
- }
190
- getMinCanvasSize() {
191
- const canvasHandleSize = handleSize / this.editor.viewport.getScaleFactor();
192
- return canvasHandleSize * 2;
193
- }
194
- getSelectedItemCount() {
195
- return this.selectedElems.length;
196
- }
197
- // @internal
198
- updateUI() {
199
- // Don't update old selections.
200
- if (!this.hasParent) {
201
- return;
202
- }
203
- // marginLeft, marginTop: Display relative to the top left of the selection overlay.
204
- // left, top don't work for this.
205
- this.backgroundElem.style.marginLeft = `${this.screenRegion.topLeft.x}px`;
206
- this.backgroundElem.style.marginTop = `${this.screenRegion.topLeft.y}px`;
207
- this.backgroundElem.style.width = `${this.screenRegion.width}px`;
208
- this.backgroundElem.style.height = `${this.screenRegion.height}px`;
209
- const rotationDeg = this.screenRegionRotation * 180 / Math.PI;
210
- this.backgroundElem.style.transform = `rotate(${rotationDeg}deg)`;
211
- this.backgroundElem.style.transformOrigin = 'center';
212
- for (const handle of this.handles) {
213
- handle.updatePosition();
214
- }
215
- }
216
- // Add/remove the contents of this' seleciton from the editor.
217
- // Used to prevent previewed content from looking like duplicate content
218
- // while dragging.
219
- //
220
- // Does nothing if a large number of elements are selected (and so modifying
221
- // the editor image is likely to be slow.)
222
- //
223
- // If removed from the image, selected elements are drawn as wet ink.
224
- addRemoveSelectionFromImage(inImage) {
225
- // Don't hide elements if doing so will be slow.
226
- if (!inImage && this.selectedElems.length > maxPreviewElemCount) {
227
- return;
228
- }
229
- for (const elem of this.selectedElems) {
230
- const parent = this.editor.image.findParent(elem);
231
- if (!inImage && parent) {
232
- this.removedFromImage[elem.getId()] = true;
233
- parent.remove();
234
- }
235
- // If we're making things visible and the selected object wasn't previously
236
- // visible,
237
- else if (!parent && this.removedFromImage[elem.getId()]) {
238
- EditorImage.addElement(elem).apply(this.editor);
239
- this.removedFromImage[elem.getId()] = false;
240
- delete this.removedFromImage[elem.getId()];
241
- }
242
- }
243
- // Don't await queueRerender. If we're running in a test, the re-render might never
244
- // happen.
245
- this.editor.queueRerender().then(() => {
246
- if (!inImage) {
247
- this.previewTransformCmds();
248
- }
249
- });
250
- }
251
- removeDeletedElemsFromSelection() {
252
- // Remove any deleted elements from the selection.
253
- this.selectedElems = this.selectedElems.filter(elem => {
254
- const hasParent = !!this.editor.image.findParent(elem);
255
- // If we removed the element and haven't added it back yet, don't remove it
256
- // from the selection.
257
- const weRemoved = this.removedFromImage[elem.getId()];
258
- return hasParent || weRemoved;
259
- });
260
- }
261
- onDragStart(pointer, target) {
262
- this.removeDeletedElemsFromSelection();
263
- this.addRemoveSelectionFromImage(false);
264
- for (const handle of this.handles) {
265
- if (handle.isTarget(target)) {
266
- handle.handleDragStart(pointer);
267
- this.targetHandle = handle;
268
- return true;
269
- }
270
- }
271
- if (this.backgroundElem === target) {
272
- this.backgroundDragging = true;
273
- this.transformers.drag.onDragStart(pointer.canvasPos);
274
- return true;
275
- }
276
- return false;
277
- }
278
- onDragUpdate(pointer) {
279
- if (this.backgroundDragging) {
280
- this.transformers.drag.onDragUpdate(pointer.canvasPos);
281
- }
282
- if (this.targetHandle) {
283
- this.targetHandle.handleDragUpdate(pointer);
284
- }
285
- }
286
- onDragEnd() {
287
- if (this.backgroundDragging) {
288
- this.transformers.drag.onDragEnd();
289
- }
290
- else if (this.targetHandle) {
291
- this.targetHandle.handleDragEnd();
292
- }
293
- this.addRemoveSelectionFromImage(true);
294
- this.backgroundDragging = false;
295
- this.targetHandle = null;
296
- this.updateUI();
297
- }
298
- onDragCancel() {
299
- this.backgroundDragging = false;
300
- this.targetHandle = null;
301
- this.setTransform(Mat33.identity);
302
- this.addRemoveSelectionFromImage(true);
303
- }
304
- // Scroll the viewport to this. Does not zoom
305
- scrollTo() {
306
- return __awaiter(this, void 0, void 0, function* () {
307
- if (this.selectedElems.length === 0) {
308
- return;
309
- }
310
- const screenRect = new Rect2(0, 0, this.editor.display.width, this.editor.display.height);
311
- if (!screenRect.containsPoint(this.screenRegion.center)) {
312
- const closestPoint = screenRect.getClosestPointOnBoundaryTo(this.screenRegion.center);
313
- const screenDelta = this.screenRegion.center.minus(closestPoint);
314
- const delta = this.editor.viewport.screenToCanvasTransform.transformVec3(screenDelta);
315
- yield this.editor.dispatchNoAnnounce(Viewport.transformBy(Mat33.translation(delta.times(-1))), false);
316
- // Re-renders clear wet ink, so we need to re-draw the preview
317
- // after the full re-render.
318
- yield this.editor.queueRerender();
319
- this.previewTransformCmds();
320
- }
321
- });
322
- }
323
- deleteSelectedObjects() {
324
- if (this.backgroundDragging || this.targetHandle) {
325
- this.onDragEnd();
326
- }
327
- return new Erase(this.selectedElems);
328
- }
329
- duplicateSelectedObjects() {
330
- return __awaiter(this, void 0, void 0, function* () {
331
- const wasTransforming = this.backgroundDragging || this.targetHandle;
332
- let tmpApplyCommand = null;
333
- if (wasTransforming) {
334
- // Don't update the selection's focus when redoing/undoing
335
- const selectionToUpdate = null;
336
- tmpApplyCommand = new Selection.ApplyTransformationCommand(selectionToUpdate, this.selectedElems, this.transform);
337
- // Transform to ensure that the duplicates are in the correct location
338
- yield tmpApplyCommand.apply(this.editor);
339
- // Show items again
340
- this.addRemoveSelectionFromImage(true);
341
- }
342
- const duplicateCommand = new Duplicate(this.selectedElems);
343
- if (wasTransforming) {
344
- // Move the selected objects back to the correct location.
345
- yield (tmpApplyCommand === null || tmpApplyCommand === void 0 ? void 0 : tmpApplyCommand.unapply(this.editor));
346
- this.addRemoveSelectionFromImage(false);
347
- this.previewTransformCmds();
348
- this.updateUI();
349
- }
350
- return duplicateCommand;
351
- });
352
- }
353
- addTo(elem) {
354
- if (this.container.parentElement) {
355
- this.container.remove();
356
- }
357
- elem.appendChild(this.container);
358
- this.hasParent = true;
359
- }
360
- setToPoint(point) {
361
- this.originalRegion = this.originalRegion.grownToPoint(point);
362
- this.updateUI();
363
- }
364
- cancelSelection() {
365
- if (this.container.parentElement) {
366
- this.container.remove();
367
- }
368
- this.originalRegion = Rect2.empty;
369
- this.hasParent = false;
370
- }
371
- setSelectedObjects(objects, bbox) {
372
- this.addRemoveSelectionFromImage(true);
373
- this.originalRegion = bbox;
374
- this.selectedElems = objects.filter(object => object.isSelectable());
375
- this.updateUI();
376
- }
377
- getSelectedObjects() {
378
- return this.selectedElems;
379
- }
380
- }
381
- _a = Selection;
382
- (() => {
383
- SerializableCommand.register('selection-tool-transform', (json, _editor) => {
384
- var _b;
385
- // The selection box is lost when serializing/deserializing. No need to store box rotation
386
- const fullTransform = new Mat33(...json.transform);
387
- const elemIds = ((_b = json.elems) !== null && _b !== void 0 ? _b : []);
388
- return new _a.ApplyTransformationCommand(null, elemIds, fullTransform);
389
- });
390
- })();
391
- Selection.ApplyTransformationCommand = class extends SerializableCommand {
392
- constructor(selection,
393
- // If a `string[]`, selectedElems is a list of element IDs.
394
- selectedElems,
395
- // Full transformation used to transform elements.
396
- fullTransform) {
397
- super('selection-tool-transform');
398
- this.selection = selection;
399
- this.fullTransform = fullTransform;
400
- const isIDList = (arr) => {
401
- return typeof arr[0] === 'string';
402
- };
403
- // If a list of element IDs,
404
- if (isIDList(selectedElems)) {
405
- this.selectedElemIds = selectedElems;
406
- }
407
- else {
408
- this.selectedElemIds = selectedElems.map(elem => elem.getId());
409
- this.transformCommands = selectedElems.map(elem => {
410
- return elem.transformBy(this.fullTransform);
411
- });
412
- }
413
- }
414
- resolveToElems(editor) {
415
- if (this.transformCommands) {
416
- return;
417
- }
418
- this.transformCommands = this.selectedElemIds.map(id => {
419
- const elem = editor.image.lookupElement(id);
420
- if (!elem) {
421
- throw new Error(`Unable to find element with ID, ${id}.`);
422
- }
423
- return elem.transformBy(this.fullTransform);
424
- });
425
- }
426
- apply(editor) {
427
- var _b, _c, _d, _e, _f;
428
- return __awaiter(this, void 0, void 0, function* () {
429
- this.resolveToElems(editor);
430
- (_b = this.selection) === null || _b === void 0 ? void 0 : _b.setTransform(this.fullTransform, false);
431
- (_c = this.selection) === null || _c === void 0 ? void 0 : _c.updateUI();
432
- yield editor.asyncApplyCommands(this.transformCommands, updateChunkSize);
433
- (_d = this.selection) === null || _d === void 0 ? void 0 : _d.setTransform(Mat33.identity, false);
434
- (_e = this.selection) === null || _e === void 0 ? void 0 : _e.recomputeRegion();
435
- (_f = this.selection) === null || _f === void 0 ? void 0 : _f.updateUI();
436
- });
437
- }
438
- unapply(editor) {
439
- var _b, _c, _d, _e, _f;
440
- return __awaiter(this, void 0, void 0, function* () {
441
- this.resolveToElems(editor);
442
- (_b = this.selection) === null || _b === void 0 ? void 0 : _b.setTransform(this.fullTransform.inverse(), false);
443
- (_c = this.selection) === null || _c === void 0 ? void 0 : _c.updateUI();
444
- yield editor.asyncUnapplyCommands(this.transformCommands, updateChunkSize, true);
445
- (_d = this.selection) === null || _d === void 0 ? void 0 : _d.setTransform(Mat33.identity);
446
- (_e = this.selection) === null || _e === void 0 ? void 0 : _e.recomputeRegion();
447
- (_f = this.selection) === null || _f === void 0 ? void 0 : _f.updateUI();
448
- });
449
- }
450
- serializeToJSON() {
451
- return {
452
- elems: this.selectedElemIds,
453
- transform: this.fullTransform.toArray(),
454
- };
455
- }
456
- description(_editor, localizationTable) {
457
- return localizationTable.transformedElements(this.selectedElemIds.length);
458
- }
459
- };
@@ -1,38 +0,0 @@
1
- import { Point2, Vec2 } from '../../math/Vec2';
2
- import Selection from './Selection';
3
- import Pointer from '../../Pointer';
4
- export declare enum HandleShape {
5
- Circle = 0,
6
- Square = 1
7
- }
8
- export declare const handleSize = 30;
9
- export type DragStartCallback = (startPoint: Point2) => void;
10
- export type DragUpdateCallback = (canvasPoint: Point2) => void;
11
- export type DragEndCallback = () => void;
12
- export default class SelectionHandle {
13
- readonly shape: HandleShape;
14
- private readonly parentSide;
15
- private readonly parent;
16
- private readonly onDragStart;
17
- private readonly onDragUpdate;
18
- private readonly onDragEnd;
19
- private element;
20
- private snapToGrid;
21
- constructor(shape: HandleShape, parentSide: Vec2, parent: Selection, onDragStart: DragStartCallback, onDragUpdate: DragUpdateCallback, onDragEnd: DragEndCallback);
22
- /**
23
- * Adds this to `container`, where `conatiner` should be the background/selection
24
- * element visible on the screen.
25
- */
26
- addTo(container: HTMLElement): void;
27
- updatePosition(): void;
28
- /**
29
- * @returns `true` if the given `EventTarget` matches this.
30
- */
31
- isTarget(target: EventTarget): boolean;
32
- private dragLastPos;
33
- handleDragStart(pointer: Pointer): void;
34
- handleDragUpdate(pointer: Pointer): void;
35
- handleDragEnd(): void;
36
- setSnapToGrid(snap: boolean): void;
37
- isSnappingToGrid(): boolean;
38
- }
@@ -1,81 +0,0 @@
1
- import { assertUnreachable } from '../../util/assertions';
2
- import { Vec2 } from '../../math/Vec2';
3
- import { cssPrefix } from './SelectionTool';
4
- export var HandleShape;
5
- (function (HandleShape) {
6
- HandleShape[HandleShape["Circle"] = 0] = "Circle";
7
- HandleShape[HandleShape["Square"] = 1] = "Square";
8
- })(HandleShape || (HandleShape = {}));
9
- export const handleSize = 30;
10
- export default class SelectionHandle {
11
- // Bounding box in screen coordinates.
12
- constructor(shape, parentSide, parent, onDragStart, onDragUpdate, onDragEnd) {
13
- this.shape = shape;
14
- this.parentSide = parentSide;
15
- this.parent = parent;
16
- this.onDragStart = onDragStart;
17
- this.onDragUpdate = onDragUpdate;
18
- this.onDragEnd = onDragEnd;
19
- this.dragLastPos = null;
20
- this.element = document.createElement('div');
21
- this.element.classList.add(`${cssPrefix}handle`);
22
- switch (shape) {
23
- case HandleShape.Circle:
24
- this.element.classList.add(`${cssPrefix}circle`);
25
- break;
26
- case HandleShape.Square:
27
- this.element.classList.add(`${cssPrefix}square`);
28
- break;
29
- default:
30
- assertUnreachable(shape);
31
- }
32
- this.updatePosition();
33
- }
34
- /**
35
- * Adds this to `container`, where `conatiner` should be the background/selection
36
- * element visible on the screen.
37
- */
38
- addTo(container) {
39
- container.appendChild(this.element);
40
- }
41
- updatePosition() {
42
- const parentRect = this.parent.screenRegion;
43
- const size = Vec2.of(handleSize, handleSize);
44
- const topLeft = parentRect.size.scale(this.parentSide)
45
- // Center
46
- .minus(size.times(1 / 2));
47
- // Position within the selection box.
48
- this.element.style.marginLeft = `${topLeft.x}px`;
49
- this.element.style.marginTop = `${topLeft.y}px`;
50
- this.element.style.width = `${size.x}px`;
51
- this.element.style.height = `${size.y}px`;
52
- }
53
- /**
54
- * @returns `true` if the given `EventTarget` matches this.
55
- */
56
- isTarget(target) {
57
- return target === this.element;
58
- }
59
- handleDragStart(pointer) {
60
- this.onDragStart(pointer.canvasPos);
61
- this.dragLastPos = pointer.canvasPos;
62
- }
63
- handleDragUpdate(pointer) {
64
- if (!this.dragLastPos) {
65
- return;
66
- }
67
- this.onDragUpdate(pointer.canvasPos);
68
- }
69
- handleDragEnd() {
70
- if (!this.dragLastPos) {
71
- return;
72
- }
73
- this.onDragEnd();
74
- }
75
- setSnapToGrid(snap) {
76
- this.snapToGrid = snap;
77
- }
78
- isSnappingToGrid() {
79
- return this.snapToGrid;
80
- }
81
- }
@@ -1,36 +0,0 @@
1
- import AbstractComponent from '../../components/AbstractComponent';
2
- import Editor from '../../Editor';
3
- import { CopyEvent, KeyPressEvent, KeyUpEvent, PointerEvt } from '../../types';
4
- import BaseTool from '../BaseTool';
5
- import Selection from './Selection';
6
- export declare const cssPrefix = "selection-tool-";
7
- export default class SelectionTool extends BaseTool {
8
- private editor;
9
- private handleOverlay;
10
- private prevSelectionBox;
11
- private selectionBox;
12
- private lastEvtTarget;
13
- private expandingSelectionBox;
14
- private shiftKeyPressed;
15
- private ctrlKeyPressed;
16
- constructor(editor: Editor, description: string);
17
- private makeSelectionBox;
18
- private snapSelectionToGrid;
19
- private selectionBoxHandlingEvt;
20
- onPointerDown({ allPointers, current }: PointerEvt): boolean;
21
- onPointerMove(event: PointerEvt): void;
22
- private onSelectionUpdated;
23
- private onGestureEnd;
24
- private zoomToSelection;
25
- onPointerUp(event: PointerEvt): void;
26
- onGestureCancel(): void;
27
- private static handleableKeys;
28
- onKeyPress(event: KeyPressEvent): boolean;
29
- onKeyUp(evt: KeyUpEvent): boolean;
30
- onCopy(event: CopyEvent): boolean;
31
- setEnabled(enabled: boolean): void;
32
- getSelection(): Selection | null;
33
- getSelectedObjects(): AbstractComponent[];
34
- setSelection(objects: AbstractComponent[]): void;
35
- clearSelection(): void;
36
- }