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,80 +0,0 @@
1
- import { Vec2 } from './math/Vec2';
2
- export var PointerDevice;
3
- (function (PointerDevice) {
4
- PointerDevice[PointerDevice["Pen"] = 0] = "Pen";
5
- PointerDevice[PointerDevice["Eraser"] = 1] = "Eraser";
6
- PointerDevice[PointerDevice["Touch"] = 2] = "Touch";
7
- PointerDevice[PointerDevice["PrimaryButtonMouse"] = 3] = "PrimaryButtonMouse";
8
- PointerDevice[PointerDevice["RightButtonMouse"] = 4] = "RightButtonMouse";
9
- PointerDevice[PointerDevice["Other"] = 5] = "Other";
10
- })(PointerDevice || (PointerDevice = {}));
11
- // Provides a snapshot containing information about a pointer. A Pointer
12
- // object is immutable — it will not be updated when the pointer's information changes.
13
- export default class Pointer {
14
- constructor(
15
- // The (x, y) position of the pointer relative to the top-left corner
16
- // of the visible canvas.
17
- screenPos,
18
- // Position of the pointer relative to the top left corner of the drawing
19
- // surface.
20
- canvasPos, pressure, isPrimary, down, device,
21
- // Unique ID for the pointer
22
- id,
23
- // Numeric timestamp (milliseconds, as from `(new Date).getTime()`)
24
- timeStamp) {
25
- this.screenPos = screenPos;
26
- this.canvasPos = canvasPos;
27
- this.pressure = pressure;
28
- this.isPrimary = isPrimary;
29
- this.down = down;
30
- this.device = device;
31
- this.id = id;
32
- this.timeStamp = timeStamp;
33
- }
34
- // Snaps this pointer to the nearest grid point (rounds the coordinates of this
35
- // pointer based on the current zoom). Returns a new Pointer and does not modify
36
- // this.
37
- snappedToGrid(viewport) {
38
- const snappedCanvasPos = viewport.snapToGrid(this.canvasPos);
39
- const snappedScreenPos = viewport.canvasToScreen(snappedCanvasPos);
40
- return new Pointer(snappedScreenPos, snappedCanvasPos, this.pressure, this.isPrimary, this.down, this.device, this.id, this.timeStamp);
41
- }
42
- // Creates a Pointer from a DOM event. If `relativeTo` is given, (0, 0) in screen coordinates is
43
- // considered the top left of `relativeTo`.
44
- static ofEvent(evt, isDown, viewport, relativeTo) {
45
- var _a, _b;
46
- let screenPos = Vec2.of(evt.clientX, evt.clientY);
47
- if (relativeTo) {
48
- const bbox = relativeTo.getBoundingClientRect();
49
- screenPos = screenPos.minus(Vec2.of(bbox.left, bbox.top));
50
- }
51
- const pointerTypeToDevice = {
52
- 'mouse': PointerDevice.PrimaryButtonMouse,
53
- 'pen': PointerDevice.Pen,
54
- 'touch': PointerDevice.Touch,
55
- };
56
- let device = (_a = pointerTypeToDevice[evt.pointerType]) !== null && _a !== void 0 ? _a : PointerDevice.Other;
57
- const eraserButtonMask = 0x20;
58
- if (device === PointerDevice.Pen && (evt.buttons & eraserButtonMask) !== 0) {
59
- device = PointerDevice.Eraser;
60
- }
61
- const timeStamp = (new Date()).getTime();
62
- const canvasPos = viewport.roundPoint(viewport.screenToCanvas(screenPos));
63
- if (device === PointerDevice.PrimaryButtonMouse) {
64
- if (evt.buttons & 0x2) {
65
- device = PointerDevice.RightButtonMouse;
66
- }
67
- else if (!(evt.buttons & 0x1)) {
68
- device = PointerDevice.Other;
69
- }
70
- }
71
- return new Pointer(screenPos, canvasPos, (_b = evt.pressure) !== null && _b !== void 0 ? _b : null, evt.isPrimary, isDown, device, evt.pointerId, timeStamp);
72
- }
73
- // Create a new Pointer from a point on the canvas.
74
- // Intended for unit tests.
75
- static ofCanvasPoint(canvasPos, isDown, viewport, id = 0, device = PointerDevice.Pen, isPrimary = true, pressure = null) {
76
- const screenPos = viewport.canvasToScreen(canvasPos);
77
- const timeStamp = (new Date()).getTime();
78
- return new Pointer(screenPos, canvasPos, pressure, isPrimary, isDown, device, id, timeStamp);
79
- }
80
- }
@@ -1,48 +0,0 @@
1
- import Rect2 from './math/Rect2';
2
- import { ComponentAddedListener, ImageLoader, OnDetermineExportRectListener, OnProgressListener } from './types';
3
- export declare const defaultSVGViewRect: Rect2;
4
- export declare const svgAttributesDataKey = "svgAttrs";
5
- export declare const svgStyleAttributesDataKey = "svgStyleAttrs";
6
- export type SVGLoaderUnknownAttribute = [string, string];
7
- export type SVGLoaderUnknownStyleAttribute = {
8
- key: string;
9
- value: string;
10
- priority?: string;
11
- };
12
- export default class SVGLoader implements ImageLoader {
13
- private source;
14
- private onFinish?;
15
- private readonly storeUnknown;
16
- private onAddComponent;
17
- private onProgress;
18
- private onDetermineExportRect;
19
- private processedCount;
20
- private totalToProcess;
21
- private rootViewBox;
22
- private constructor();
23
- private getStyle;
24
- private strokeDataFromElem;
25
- private attachUnrecognisedAttrs;
26
- private addPath;
27
- private addBackground;
28
- private getTransform;
29
- private makeText;
30
- private addText;
31
- private addImage;
32
- private addUnknownNode;
33
- private updateViewBox;
34
- private updateSVGAttrs;
35
- private visit;
36
- private getSourceAttrs;
37
- start(onAddComponent: ComponentAddedListener, onProgress: OnProgressListener, onDetermineExportRect?: OnDetermineExportRectListener | null): Promise<void>;
38
- /**
39
- * Create an `SVGLoader` from the content of an SVG image. SVGs are loaded within a sandboxed
40
- * iframe with `sandbox="allow-same-origin"`
41
- * [thereby disabling JavaScript](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#sandbox).
42
- *
43
- * @see {@link Editor.loadFrom}
44
- * @param text - Textual representation of the SVG (e.g. `<svg viewbox='...'>...</svg>`).
45
- * @param sanitize - if `true`, don't store unknown attributes.
46
- */
47
- static fromString(text: string, sanitize?: boolean): SVGLoader;
48
- }
@@ -1,442 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import Color4 from './Color4';
11
- import ImageBackground, { BackgroundType, imageBackgroundCSSClassName } from './components/ImageBackground';
12
- import ImageComponent from './components/ImageComponent';
13
- import Stroke from './components/Stroke';
14
- import SVGGlobalAttributesObject from './components/SVGGlobalAttributesObject';
15
- import TextComponent from './components/TextComponent';
16
- import UnknownSVGObject from './components/UnknownSVGObject';
17
- import Mat33 from './math/Mat33';
18
- import Path from './math/Path';
19
- import Rect2 from './math/Rect2';
20
- import { Vec2 } from './math/Vec2';
21
- // Size of a loaded image if no size is specified.
22
- export const defaultSVGViewRect = new Rect2(0, 0, 500, 500);
23
- // Key to retrieve unrecognised attributes from an AbstractComponent
24
- export const svgAttributesDataKey = 'svgAttrs';
25
- export const svgStyleAttributesDataKey = 'svgStyleAttrs';
26
- const supportedStrokeFillStyleAttrs = ['stroke', 'fill', 'stroke-width'];
27
- // Handles loading images from SVG.
28
- export default class SVGLoader {
29
- constructor(source, onFinish, storeUnknown = true) {
30
- this.source = source;
31
- this.onFinish = onFinish;
32
- this.storeUnknown = storeUnknown;
33
- this.onAddComponent = null;
34
- this.onProgress = null;
35
- this.onDetermineExportRect = null;
36
- this.processedCount = 0;
37
- this.totalToProcess = 0;
38
- }
39
- // If [computedStyles] is given, it is preferred to directly accessing node's style object.
40
- getStyle(node, computedStyles) {
41
- var _a, _b, _c, _d, _f, _g;
42
- const style = {
43
- fill: Color4.transparent,
44
- };
45
- // If possible, use computedStyles (allows property inheritance).
46
- const fillAttribute = (_b = (_a = node.getAttribute('fill')) !== null && _a !== void 0 ? _a : computedStyles === null || computedStyles === void 0 ? void 0 : computedStyles.fill) !== null && _b !== void 0 ? _b : node.style.fill;
47
- if (fillAttribute) {
48
- try {
49
- style.fill = Color4.fromString(fillAttribute);
50
- }
51
- catch (e) {
52
- console.error('Unknown fill color,', fillAttribute);
53
- }
54
- }
55
- const strokeAttribute = (_d = (_c = node.getAttribute('stroke')) !== null && _c !== void 0 ? _c : computedStyles === null || computedStyles === void 0 ? void 0 : computedStyles.stroke) !== null && _d !== void 0 ? _d : node.style.stroke;
56
- const strokeWidthAttr = (_g = (_f = node.getAttribute('stroke-width')) !== null && _f !== void 0 ? _f : computedStyles === null || computedStyles === void 0 ? void 0 : computedStyles.strokeWidth) !== null && _g !== void 0 ? _g : node.style.strokeWidth;
57
- if (strokeAttribute && strokeWidthAttr) {
58
- try {
59
- let width = parseFloat(strokeWidthAttr !== null && strokeWidthAttr !== void 0 ? strokeWidthAttr : '1');
60
- if (!isFinite(width)) {
61
- width = 0;
62
- }
63
- const strokeColor = Color4.fromString(strokeAttribute);
64
- if (strokeColor.a > 0) {
65
- style.stroke = {
66
- width,
67
- color: strokeColor,
68
- };
69
- }
70
- }
71
- catch (e) {
72
- console.error('Error parsing stroke data:', e);
73
- }
74
- }
75
- return style;
76
- }
77
- strokeDataFromElem(node) {
78
- var _a;
79
- const result = [];
80
- const pathData = (_a = node.getAttribute('d')) !== null && _a !== void 0 ? _a : '';
81
- const style = this.getStyle(node);
82
- // Break the path into chunks at each moveTo ('M') command:
83
- const parts = pathData.split('M');
84
- let isFirst = true;
85
- for (const part of parts) {
86
- // Skip effective no-ops -- moveTos without additional commands.
87
- const isNoOpMoveTo = /^[0-9., \t\n]+$/.exec(part);
88
- if (part !== '' && !isNoOpMoveTo) {
89
- // We split the path by moveTo commands, so add the 'M' back in
90
- // if it was present.
91
- const current = !isFirst ? `M${part}` : part;
92
- const path = Path.fromString(current);
93
- const spec = path.toRenderable(style);
94
- result.push(spec);
95
- }
96
- isFirst = false;
97
- }
98
- return result;
99
- }
100
- attachUnrecognisedAttrs(elem, node, supportedAttrs, supportedStyleAttrs) {
101
- if (!this.storeUnknown) {
102
- return;
103
- }
104
- for (const attr of node.getAttributeNames()) {
105
- if (supportedAttrs.has(attr) || (attr === 'style' && supportedStyleAttrs)) {
106
- continue;
107
- }
108
- elem.attachLoadSaveData(svgAttributesDataKey, [attr, node.getAttribute(attr)]);
109
- }
110
- if (supportedStyleAttrs && node.style) {
111
- for (const attr of node.style) {
112
- if (attr === '' || !attr) {
113
- continue;
114
- }
115
- if (supportedStyleAttrs.has(attr)) {
116
- continue;
117
- }
118
- // TODO: Do we need special logic for !important properties?
119
- elem.attachLoadSaveData(svgStyleAttributesDataKey, {
120
- key: attr,
121
- value: node.style.getPropertyValue(attr),
122
- priority: node.style.getPropertyPriority(attr)
123
- });
124
- }
125
- }
126
- }
127
- // Adds a stroke with a single path
128
- addPath(node) {
129
- var _a;
130
- return __awaiter(this, void 0, void 0, function* () {
131
- let elem;
132
- try {
133
- const strokeData = this.strokeDataFromElem(node);
134
- elem = new Stroke(strokeData);
135
- this.attachUnrecognisedAttrs(elem, node, new Set([...supportedStrokeFillStyleAttrs, 'd']), new Set(supportedStrokeFillStyleAttrs));
136
- }
137
- catch (e) {
138
- console.error('Invalid path in node', node, '\nError:', e, '\nAdding as an unknown object.');
139
- if (this.storeUnknown) {
140
- elem = new UnknownSVGObject(node);
141
- }
142
- else {
143
- return;
144
- }
145
- }
146
- yield ((_a = this.onAddComponent) === null || _a === void 0 ? void 0 : _a.call(this, elem));
147
- });
148
- }
149
- addBackground(node) {
150
- var _a, _b, _c;
151
- return __awaiter(this, void 0, void 0, function* () {
152
- const fill = Color4.fromString((_b = (_a = node.getAttribute('fill')) !== null && _a !== void 0 ? _a : node.style.fill) !== null && _b !== void 0 ? _b : 'black');
153
- const elem = new ImageBackground(BackgroundType.SolidColor, fill);
154
- yield ((_c = this.onAddComponent) === null || _c === void 0 ? void 0 : _c.call(this, elem));
155
- });
156
- }
157
- // If given, 'supportedAttrs' will have x, y, etc. attributes that were used in computing the transform added to it,
158
- // to prevent storing duplicate transform information when saving the component.
159
- getTransform(elem, supportedAttrs, computedStyles) {
160
- computedStyles !== null && computedStyles !== void 0 ? computedStyles : (computedStyles = window.getComputedStyle(elem));
161
- let transformProperty = computedStyles.transform;
162
- if (transformProperty === '' || transformProperty === 'none') {
163
- transformProperty = elem.style.transform || 'none';
164
- }
165
- // Prefer the actual .style.transform
166
- // to the computed stylesheet -- in some browsers, the computedStyles version
167
- // can have lower precision.
168
- let transform;
169
- try {
170
- transform = Mat33.fromCSSMatrix(elem.style.transform);
171
- }
172
- catch (_e) {
173
- transform = Mat33.fromCSSMatrix(transformProperty);
174
- }
175
- const elemX = elem.getAttribute('x');
176
- const elemY = elem.getAttribute('y');
177
- if (elemX || elemY) {
178
- const x = parseFloat(elemX !== null && elemX !== void 0 ? elemX : '0');
179
- const y = parseFloat(elemY !== null && elemY !== void 0 ? elemY : '0');
180
- if (!isNaN(x) && !isNaN(y)) {
181
- supportedAttrs === null || supportedAttrs === void 0 ? void 0 : supportedAttrs.push('x', 'y');
182
- transform = transform.rightMul(Mat33.translation(Vec2.of(x, y)));
183
- }
184
- }
185
- return transform;
186
- }
187
- makeText(elem) {
188
- var _a;
189
- const contentList = [];
190
- for (const child of elem.childNodes) {
191
- if (child.nodeType === Node.TEXT_NODE) {
192
- contentList.push((_a = child.nodeValue) !== null && _a !== void 0 ? _a : '');
193
- }
194
- else if (child.nodeType === Node.ELEMENT_NODE) {
195
- const subElem = child;
196
- if (subElem.tagName.toLowerCase() === 'tspan') {
197
- // FIXME: tspan's (x, y) components are absolute, not relative to the parent.
198
- contentList.push(this.makeText(subElem));
199
- }
200
- else {
201
- throw new Error(`Unrecognized text child element: ${subElem}`);
202
- }
203
- }
204
- else {
205
- throw new Error(`Unrecognized text child node: ${child}.`);
206
- }
207
- }
208
- // If no content, the content is an empty string.
209
- if (contentList.length === 0) {
210
- contentList.push('');
211
- }
212
- // Compute styles.
213
- const computedStyles = window.getComputedStyle(elem);
214
- const fontSizeExp = /^([-0-9.e]+)px/i;
215
- // In some environments, computedStyles.fontSize can be increased by the system.
216
- // Thus, to prevent text from growing on load/save, prefer .style.fontSize.
217
- let fontSizeMatch = fontSizeExp.exec(elem.style.fontSize);
218
- if (!fontSizeMatch && elem.tagName.toLowerCase() === 'tspan' && elem.parentElement) {
219
- // Try to inherit the font size of the parent text element.
220
- fontSizeMatch = fontSizeExp.exec(elem.parentElement.style.fontSize);
221
- }
222
- // If we still couldn't find a font size, try to use computedStyles (which can be
223
- // wrong).
224
- if (!fontSizeMatch) {
225
- fontSizeMatch = fontSizeExp.exec(computedStyles.fontSize);
226
- }
227
- const supportedStyleAttrs = [
228
- 'fontFamily',
229
- 'transform',
230
- ...supportedStrokeFillStyleAttrs,
231
- ];
232
- let fontSize = 12;
233
- if (fontSizeMatch) {
234
- supportedStyleAttrs.push('fontSize');
235
- fontSize = parseFloat(fontSizeMatch[1]);
236
- }
237
- const style = {
238
- size: fontSize,
239
- fontFamily: computedStyles.fontFamily || elem.style.fontFamily || 'sans-serif',
240
- renderingStyle: this.getStyle(elem, computedStyles),
241
- };
242
- const supportedAttrs = [];
243
- const transform = this.getTransform(elem, supportedAttrs, computedStyles);
244
- const result = new TextComponent(contentList, transform, style);
245
- this.attachUnrecognisedAttrs(result, elem, new Set(supportedAttrs), new Set(supportedStyleAttrs));
246
- return result;
247
- }
248
- addText(elem) {
249
- var _a;
250
- return __awaiter(this, void 0, void 0, function* () {
251
- try {
252
- const textElem = this.makeText(elem);
253
- yield ((_a = this.onAddComponent) === null || _a === void 0 ? void 0 : _a.call(this, textElem));
254
- }
255
- catch (e) {
256
- console.error('Invalid text object in node', elem, '. Continuing.... Error:', e);
257
- this.addUnknownNode(elem);
258
- }
259
- });
260
- }
261
- addImage(elem) {
262
- var _a, _b, _c;
263
- return __awaiter(this, void 0, void 0, function* () {
264
- const image = new Image();
265
- image.src = (_a = elem.getAttribute('xlink:href')) !== null && _a !== void 0 ? _a : elem.href.baseVal;
266
- image.setAttribute('alt', (_b = elem.getAttribute('aria-label')) !== null && _b !== void 0 ? _b : '');
267
- try {
268
- const supportedAttrs = [];
269
- const transform = this.getTransform(elem, supportedAttrs);
270
- const imageElem = yield ImageComponent.fromImage(image, transform);
271
- this.attachUnrecognisedAttrs(imageElem, elem, new Set(supportedAttrs), new Set(['transform']));
272
- yield ((_c = this.onAddComponent) === null || _c === void 0 ? void 0 : _c.call(this, imageElem));
273
- }
274
- catch (e) {
275
- console.error('Error loading image:', e, '. Element: ', elem, '. Continuing...');
276
- yield this.addUnknownNode(elem);
277
- }
278
- });
279
- }
280
- addUnknownNode(node) {
281
- var _a;
282
- return __awaiter(this, void 0, void 0, function* () {
283
- if (this.storeUnknown) {
284
- const component = new UnknownSVGObject(node);
285
- yield ((_a = this.onAddComponent) === null || _a === void 0 ? void 0 : _a.call(this, component));
286
- }
287
- });
288
- }
289
- updateViewBox(node) {
290
- var _a;
291
- const viewBoxAttr = node.getAttribute('viewBox');
292
- if (this.rootViewBox || !viewBoxAttr) {
293
- return;
294
- }
295
- const components = viewBoxAttr.split(/[ \t\n,]+/);
296
- const x = parseFloat(components[0]);
297
- const y = parseFloat(components[1]);
298
- const width = parseFloat(components[2]);
299
- const height = parseFloat(components[3]);
300
- if (isNaN(x) || isNaN(y) || isNaN(width) || isNaN(height)) {
301
- console.warn(`node ${node} has an unparsable viewbox. Viewbox: ${viewBoxAttr}. Match: ${components}.`);
302
- return;
303
- }
304
- this.rootViewBox = new Rect2(x, y, width, height);
305
- (_a = this.onDetermineExportRect) === null || _a === void 0 ? void 0 : _a.call(this, this.rootViewBox);
306
- }
307
- updateSVGAttrs(node) {
308
- var _a;
309
- return __awaiter(this, void 0, void 0, function* () {
310
- if (this.storeUnknown) {
311
- yield ((_a = this.onAddComponent) === null || _a === void 0 ? void 0 : _a.call(this, new SVGGlobalAttributesObject(this.getSourceAttrs(node))));
312
- }
313
- });
314
- }
315
- visit(node) {
316
- var _a;
317
- return __awaiter(this, void 0, void 0, function* () {
318
- this.totalToProcess += node.childElementCount;
319
- let visitChildren = true;
320
- switch (node.tagName.toLowerCase()) {
321
- case 'g':
322
- // Continue -- visit the node's children.
323
- break;
324
- case 'path':
325
- if (node.classList.contains(imageBackgroundCSSClassName)) {
326
- yield this.addBackground(node);
327
- }
328
- else {
329
- yield this.addPath(node);
330
- }
331
- break;
332
- case 'text':
333
- yield this.addText(node);
334
- visitChildren = false;
335
- break;
336
- case 'image':
337
- yield this.addImage(node);
338
- // Images should not have children.
339
- visitChildren = false;
340
- break;
341
- case 'svg':
342
- this.updateViewBox(node);
343
- this.updateSVGAttrs(node);
344
- break;
345
- case 'style':
346
- yield this.addUnknownNode(node);
347
- break;
348
- default:
349
- console.warn('Unknown SVG element,', node);
350
- if (!(node instanceof SVGElement)) {
351
- console.warn('Element', node, 'is not an SVGElement!', this.storeUnknown ? 'Continuing anyway.' : 'Skipping.');
352
- }
353
- yield this.addUnknownNode(node);
354
- return;
355
- }
356
- if (visitChildren) {
357
- for (const child of node.children) {
358
- yield this.visit(child);
359
- }
360
- }
361
- this.processedCount++;
362
- yield ((_a = this.onProgress) === null || _a === void 0 ? void 0 : _a.call(this, this.processedCount, this.totalToProcess));
363
- });
364
- }
365
- // Get SVG element attributes (e.g. xlink=...)
366
- getSourceAttrs(node) {
367
- return node.getAttributeNames().map(attr => {
368
- return [attr, node.getAttribute(attr)];
369
- });
370
- }
371
- start(onAddComponent, onProgress, onDetermineExportRect = null) {
372
- var _a, _b;
373
- return __awaiter(this, void 0, void 0, function* () {
374
- this.onAddComponent = onAddComponent;
375
- this.onProgress = onProgress;
376
- this.onDetermineExportRect = onDetermineExportRect;
377
- // Estimate the number of tags to process.
378
- this.totalToProcess = this.source.childElementCount;
379
- this.processedCount = 0;
380
- this.rootViewBox = null;
381
- yield this.visit(this.source);
382
- const viewBox = this.rootViewBox;
383
- if (!viewBox) {
384
- (_a = this.onDetermineExportRect) === null || _a === void 0 ? void 0 : _a.call(this, defaultSVGViewRect);
385
- }
386
- (_b = this.onFinish) === null || _b === void 0 ? void 0 : _b.call(this);
387
- });
388
- }
389
- /**
390
- * Create an `SVGLoader` from the content of an SVG image. SVGs are loaded within a sandboxed
391
- * iframe with `sandbox="allow-same-origin"`
392
- * [thereby disabling JavaScript](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#sandbox).
393
- *
394
- * @see {@link Editor.loadFrom}
395
- * @param text - Textual representation of the SVG (e.g. `<svg viewbox='...'>...</svg>`).
396
- * @param sanitize - if `true`, don't store unknown attributes.
397
- */
398
- static fromString(text, sanitize = false) {
399
- var _a, _b;
400
- const sandbox = document.createElement('iframe');
401
- sandbox.src = 'about:blank';
402
- sandbox.setAttribute('sandbox', 'allow-same-origin');
403
- sandbox.setAttribute('csp', 'default-src \'about:blank\'');
404
- sandbox.style.display = 'none';
405
- // Required to access the frame's DOM. See https://stackoverflow.com/a/17777943/17055750
406
- document.body.appendChild(sandbox);
407
- if (!sandbox.hasAttribute('sandbox')) {
408
- sandbox.remove();
409
- throw new Error('SVG loading iframe is not sandboxed.');
410
- }
411
- const sandboxDoc = (_b = (_a = sandbox.contentWindow) === null || _a === void 0 ? void 0 : _a.document) !== null && _b !== void 0 ? _b : sandbox.contentDocument;
412
- if (sandboxDoc == null)
413
- throw new Error('Unable to open a sandboxed iframe!');
414
- sandboxDoc.open();
415
- sandboxDoc.write(`
416
- <!DOCTYPE html>
417
- <html>
418
- <head>
419
- <title>SVG Loading Sandbox</title>
420
- <meta name='viewport' conent='width=device-width,initial-scale=1.0'/>
421
- <meta charset='utf-8'/>
422
- </head>
423
- <body style='font-size: 12px;'>
424
- <script>
425
- console.error('JavaScript should not be able to run here!');
426
- throw new Error(
427
- 'The SVG sandbox is broken! Please double-check the sandboxing setting.'
428
- );
429
- </script>
430
- </body>
431
- </html>
432
- `);
433
- sandboxDoc.close();
434
- const svgElem = sandboxDoc.createElementNS('http://www.w3.org/2000/svg', 'svg');
435
- svgElem.innerHTML = text;
436
- sandboxDoc.body.appendChild(svgElem);
437
- return new SVGLoader(svgElem, () => {
438
- svgElem.remove();
439
- sandbox.remove();
440
- }, !sanitize);
441
- }
442
- }
@@ -1,19 +0,0 @@
1
- import Editor from './Editor';
2
- import Command from './commands/Command';
3
- type AnnounceRedoCallback = (command: Command) => void;
4
- type AnnounceUndoCallback = (command: Command) => void;
5
- declare class UndoRedoHistory {
6
- #private;
7
- private readonly editor;
8
- private announceRedoCallback;
9
- private announceUndoCallback;
10
- private readonly maxUndoRedoStackSize;
11
- constructor(editor: Editor, announceRedoCallback: AnnounceRedoCallback, announceUndoCallback: AnnounceUndoCallback);
12
- private fireUpdateEvent;
13
- push(command: Command, apply?: boolean): void;
14
- undo(): void;
15
- redo(): void;
16
- get undoStackSize(): number;
17
- get redoStackSize(): number;
18
- }
19
- export default UndoRedoHistory;
@@ -1,91 +0,0 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _UndoRedoHistory_undoStack, _UndoRedoHistory_redoStack;
13
- import { EditorEventType, UndoEventType } from './types';
14
- class UndoRedoHistory {
15
- // @internal
16
- constructor(editor, announceRedoCallback, announceUndoCallback) {
17
- this.editor = editor;
18
- this.announceRedoCallback = announceRedoCallback;
19
- this.announceUndoCallback = announceUndoCallback;
20
- _UndoRedoHistory_undoStack.set(this, void 0);
21
- _UndoRedoHistory_redoStack.set(this, void 0);
22
- this.maxUndoRedoStackSize = 700;
23
- __classPrivateFieldSet(this, _UndoRedoHistory_undoStack, [], "f");
24
- __classPrivateFieldSet(this, _UndoRedoHistory_redoStack, [], "f");
25
- }
26
- fireUpdateEvent(stackUpdateType, triggeringCommand) {
27
- this.editor.notifier.dispatch(EditorEventType.UndoRedoStackUpdated, {
28
- kind: EditorEventType.UndoRedoStackUpdated,
29
- undoStackSize: __classPrivateFieldGet(this, _UndoRedoHistory_undoStack, "f").length,
30
- redoStackSize: __classPrivateFieldGet(this, _UndoRedoHistory_redoStack, "f").length,
31
- command: triggeringCommand,
32
- stackUpdateType,
33
- });
34
- }
35
- // Adds the given command to this and applies it to the editor.
36
- push(command, apply = true) {
37
- if (apply) {
38
- command.apply(this.editor);
39
- }
40
- __classPrivateFieldGet(this, _UndoRedoHistory_undoStack, "f").push(command);
41
- for (const elem of __classPrivateFieldGet(this, _UndoRedoHistory_redoStack, "f")) {
42
- elem.onDrop(this.editor);
43
- }
44
- __classPrivateFieldSet(this, _UndoRedoHistory_redoStack, [], "f");
45
- if (__classPrivateFieldGet(this, _UndoRedoHistory_undoStack, "f").length > this.maxUndoRedoStackSize) {
46
- const removeAtOnceCount = Math.ceil(this.maxUndoRedoStackSize / 100);
47
- const removedElements = __classPrivateFieldGet(this, _UndoRedoHistory_undoStack, "f").splice(0, removeAtOnceCount);
48
- removedElements.forEach(elem => elem.onDrop(this.editor));
49
- }
50
- this.fireUpdateEvent(UndoEventType.CommandDone, command);
51
- this.editor.notifier.dispatch(EditorEventType.CommandDone, {
52
- kind: EditorEventType.CommandDone,
53
- command,
54
- });
55
- }
56
- // Remove the last command from this' undo stack and apply it.
57
- undo() {
58
- const command = __classPrivateFieldGet(this, _UndoRedoHistory_undoStack, "f").pop();
59
- if (command) {
60
- __classPrivateFieldGet(this, _UndoRedoHistory_redoStack, "f").push(command);
61
- command.unapply(this.editor);
62
- this.announceUndoCallback(command);
63
- this.fireUpdateEvent(UndoEventType.CommandUndone, command);
64
- this.editor.notifier.dispatch(EditorEventType.CommandUndone, {
65
- kind: EditorEventType.CommandUndone,
66
- command,
67
- });
68
- }
69
- }
70
- redo() {
71
- const command = __classPrivateFieldGet(this, _UndoRedoHistory_redoStack, "f").pop();
72
- if (command) {
73
- __classPrivateFieldGet(this, _UndoRedoHistory_undoStack, "f").push(command);
74
- command.apply(this.editor);
75
- this.announceRedoCallback(command);
76
- this.fireUpdateEvent(UndoEventType.CommandRedone, command);
77
- this.editor.notifier.dispatch(EditorEventType.CommandDone, {
78
- kind: EditorEventType.CommandDone,
79
- command,
80
- });
81
- }
82
- }
83
- get undoStackSize() {
84
- return __classPrivateFieldGet(this, _UndoRedoHistory_undoStack, "f").length;
85
- }
86
- get redoStackSize() {
87
- return __classPrivateFieldGet(this, _UndoRedoHistory_redoStack, "f").length;
88
- }
89
- }
90
- _UndoRedoHistory_undoStack = new WeakMap(), _UndoRedoHistory_redoStack = new WeakMap();
91
- export default UndoRedoHistory;