js-draw 0.17.3 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/.github/workflows/firebase-hosting-merge.yml +2 -0
  2. package/.github/workflows/firebase-hosting-pull-request.yml +2 -0
  3. package/.github/workflows/github-pages.yml +2 -0
  4. package/CHANGELOG.md +10 -1
  5. package/README.md +17 -8
  6. package/build_tools/postDist.ts +71 -0
  7. package/dist/bundle.js +9 -1
  8. package/dist/cjs/build_tools/BundledFile.js +163 -0
  9. package/dist/cjs/build_tools/buildTranslationTemplate.js +119 -0
  10. package/dist/cjs/build_tools/bundle.js +10 -0
  11. package/dist/cjs/build_tools/postDist.js +72 -0
  12. package/dist/{src → cjs/src}/Color4.d.ts +1 -0
  13. package/dist/cjs/src/Color4.js +197 -0
  14. package/dist/{src → cjs/src}/Editor.d.ts +57 -1
  15. package/dist/cjs/src/Editor.js +904 -0
  16. package/dist/{src → cjs/src}/EditorImage.d.ts +4 -2
  17. package/dist/cjs/src/EditorImage.js +486 -0
  18. package/dist/cjs/src/EventDispatcher.js +57 -0
  19. package/dist/cjs/src/Pointer.js +84 -0
  20. package/dist/{src → cjs/src}/SVGLoader.d.ts +4 -0
  21. package/dist/cjs/src/SVGLoader.js +472 -0
  22. package/dist/cjs/src/UndoRedoHistory.js +93 -0
  23. package/dist/cjs/src/Viewport.js +264 -0
  24. package/dist/cjs/src/bundle/bundled.js +24 -0
  25. package/dist/cjs/src/commands/Command.js +34 -0
  26. package/dist/cjs/src/commands/Duplicate.js +39 -0
  27. package/dist/cjs/src/commands/Erase.js +63 -0
  28. package/dist/cjs/src/commands/SerializableCommand.js +42 -0
  29. package/dist/cjs/src/commands/UnresolvedCommand.js +28 -0
  30. package/dist/cjs/src/commands/invertCommand.js +49 -0
  31. package/dist/cjs/src/commands/lib.js +18 -0
  32. package/dist/cjs/src/commands/localization.js +24 -0
  33. package/dist/cjs/src/commands/uniteCommands.js +121 -0
  34. package/dist/cjs/src/components/AbstractComponent.js +258 -0
  35. package/dist/cjs/src/components/ImageBackground.js +146 -0
  36. package/dist/cjs/src/components/ImageComponent.js +152 -0
  37. package/dist/cjs/src/components/RestylableComponent.js +88 -0
  38. package/dist/cjs/src/components/SVGGlobalAttributesObject.js +65 -0
  39. package/dist/cjs/src/components/Stroke.js +191 -0
  40. package/dist/cjs/src/components/TextComponent.js +258 -0
  41. package/dist/cjs/src/components/UnknownSVGObject.js +50 -0
  42. package/dist/cjs/src/components/builders/ArrowBuilder.js +117 -0
  43. package/dist/cjs/src/components/builders/FreehandLineBuilder.js +173 -0
  44. package/dist/cjs/src/components/builders/LineBuilder.js +89 -0
  45. package/dist/cjs/src/components/builders/PressureSensitiveFreehandLineBuilder.js +347 -0
  46. package/dist/cjs/src/components/builders/RectangleBuilder.js +59 -0
  47. package/dist/cjs/src/components/builders/types.js +2 -0
  48. package/dist/cjs/src/components/lib.js +43 -0
  49. package/dist/cjs/src/components/localization.js +13 -0
  50. package/dist/cjs/src/components/util/StrokeSmoother.js +217 -0
  51. package/dist/cjs/src/components/util/describeComponentList.js +16 -0
  52. package/dist/{src → cjs/src}/lib.d.ts +2 -1
  53. package/dist/cjs/src/lib.js +63 -0
  54. package/dist/cjs/src/localization.js +13 -0
  55. package/dist/cjs/src/localizations/de.js +6 -0
  56. package/dist/cjs/src/localizations/en.js +6 -0
  57. package/dist/cjs/src/localizations/es.js +20 -0
  58. package/dist/cjs/src/localizations/getLocalizationTable.js +50 -0
  59. package/dist/cjs/src/math/LineSegment2.js +131 -0
  60. package/dist/cjs/src/math/Mat33.js +332 -0
  61. package/dist/cjs/src/math/Path.js +655 -0
  62. package/dist/cjs/src/math/Rect2.js +234 -0
  63. package/dist/cjs/src/math/Triangle.js +22 -0
  64. package/dist/cjs/src/math/Vec2.js +19 -0
  65. package/dist/cjs/src/math/Vec3.js +177 -0
  66. package/dist/cjs/src/math/lib.js +18 -0
  67. package/dist/cjs/src/math/rounding.js +135 -0
  68. package/dist/cjs/src/rendering/Display.js +214 -0
  69. package/dist/cjs/src/rendering/RenderingStyle.js +48 -0
  70. package/dist/cjs/src/rendering/TextRenderingStyle.js +29 -0
  71. package/dist/cjs/src/rendering/caching/CacheRecord.js +61 -0
  72. package/dist/cjs/src/rendering/caching/CacheRecordManager.js +50 -0
  73. package/dist/cjs/src/rendering/caching/RenderingCache.js +51 -0
  74. package/dist/cjs/src/rendering/caching/RenderingCacheNode.js +326 -0
  75. package/dist/cjs/src/rendering/caching/testUtils.js +27 -0
  76. package/dist/cjs/src/rendering/caching/types.js +2 -0
  77. package/dist/{src → cjs/src}/rendering/lib.d.ts +2 -0
  78. package/dist/cjs/src/rendering/lib.js +16 -0
  79. package/dist/cjs/src/rendering/localization.js +12 -0
  80. package/dist/cjs/src/rendering/renderers/AbstractRenderer.js +170 -0
  81. package/dist/{src → cjs/src}/rendering/renderers/CanvasRenderer.d.ts +25 -0
  82. package/dist/cjs/src/rendering/renderers/CanvasRenderer.js +236 -0
  83. package/dist/cjs/src/rendering/renderers/DummyRenderer.js +112 -0
  84. package/dist/{src → cjs/src}/rendering/renderers/SVGRenderer.d.ts +15 -0
  85. package/dist/cjs/src/rendering/renderers/SVGRenderer.js +311 -0
  86. package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.js +63 -0
  87. package/dist/cjs/src/testing/beforeEachFile.js +12 -0
  88. package/dist/cjs/src/testing/createEditor.js +14 -0
  89. package/dist/cjs/src/testing/lib.d.ts +2 -0
  90. package/dist/cjs/src/testing/lib.js +10 -0
  91. package/dist/cjs/src/testing/loadExpectExtensions.js +28 -0
  92. package/dist/cjs/src/testing/sendPenEvent.d.ts +12 -0
  93. package/dist/cjs/src/testing/sendPenEvent.js +24 -0
  94. package/dist/cjs/src/testing/sendTouchEvent.d.ts +42 -0
  95. package/dist/cjs/src/testing/sendTouchEvent.js +87 -0
  96. package/dist/cjs/src/toolbar/HTMLToolbar.js +383 -0
  97. package/dist/cjs/src/toolbar/IconProvider.js +660 -0
  98. package/dist/cjs/src/toolbar/lib.js +24 -0
  99. package/dist/cjs/src/toolbar/localization.js +51 -0
  100. package/dist/cjs/src/toolbar/makeColorInput.js +120 -0
  101. package/dist/cjs/src/toolbar/types.js +2 -0
  102. package/dist/cjs/src/toolbar/widgets/ActionButtonWidget.js +31 -0
  103. package/dist/cjs/src/toolbar/widgets/BaseToolWidget.js +50 -0
  104. package/dist/cjs/src/toolbar/widgets/BaseWidget.js +313 -0
  105. package/dist/cjs/src/toolbar/widgets/DocumentPropertiesWidget.js +126 -0
  106. package/dist/cjs/src/toolbar/widgets/EraserToolWidget.js +63 -0
  107. package/dist/cjs/src/toolbar/widgets/HandToolWidget.js +201 -0
  108. package/dist/cjs/src/toolbar/widgets/InsertImageWidget.js +176 -0
  109. package/dist/cjs/src/toolbar/widgets/OverflowWidget.js +77 -0
  110. package/dist/cjs/src/toolbar/widgets/PenToolWidget.js +226 -0
  111. package/dist/cjs/src/toolbar/widgets/SelectionToolWidget.js +153 -0
  112. package/dist/cjs/src/toolbar/widgets/TextToolWidget.js +115 -0
  113. package/dist/cjs/src/toolbar/widgets/lib.js +26 -0
  114. package/dist/cjs/src/tools/BaseTool.js +66 -0
  115. package/dist/cjs/src/tools/Eraser.js +112 -0
  116. package/dist/cjs/src/tools/FindTool.js +121 -0
  117. package/dist/cjs/src/tools/PanZoom.js +421 -0
  118. package/dist/cjs/src/tools/PasteHandler.js +99 -0
  119. package/dist/cjs/src/tools/Pen.js +179 -0
  120. package/dist/cjs/src/tools/PipetteTool.js +45 -0
  121. package/dist/cjs/src/tools/SelectionTool/SelectAllShortcutHandler.js +28 -0
  122. package/dist/cjs/src/tools/SelectionTool/Selection.js +488 -0
  123. package/dist/cjs/src/tools/SelectionTool/SelectionHandle.js +85 -0
  124. package/dist/cjs/src/tools/SelectionTool/SelectionTool.js +405 -0
  125. package/dist/cjs/src/tools/SelectionTool/TransformMode.js +107 -0
  126. package/dist/cjs/src/tools/SelectionTool/types.js +14 -0
  127. package/dist/cjs/src/tools/TextTool.js +262 -0
  128. package/dist/cjs/src/tools/ToolController.js +187 -0
  129. package/dist/cjs/src/tools/ToolEnabledGroup.js +14 -0
  130. package/dist/cjs/src/tools/ToolSwitcherShortcut.js +38 -0
  131. package/dist/cjs/src/tools/ToolbarShortcutHandler.js +29 -0
  132. package/dist/cjs/src/tools/UndoRedoShortcut.js +28 -0
  133. package/dist/cjs/src/tools/lib.js +36 -0
  134. package/dist/cjs/src/tools/localization.js +30 -0
  135. package/dist/cjs/src/types.js +38 -0
  136. package/dist/cjs/src/util/assertions.js +51 -0
  137. package/dist/cjs/src/util/fileToBase64.js +15 -0
  138. package/dist/cjs/src/util/untilNextAnimationFrame.js +9 -0
  139. package/dist/cjs/src/util/waitForTimeout.js +9 -0
  140. package/dist/mjs/build_tools/BundledFile.d.ts +13 -0
  141. package/dist/{build_tools/buildTranslationTemplate.js → mjs/build_tools/buildTranslationTemplate.mjs} +1 -1
  142. package/dist/{build_tools/bundle.js → mjs/build_tools/bundle.mjs} +1 -1
  143. package/dist/mjs/build_tools/postDist.d.ts +1 -0
  144. package/dist/mjs/build_tools/postDist.mjs +67 -0
  145. package/dist/mjs/src/Color4.d.ts +61 -0
  146. package/dist/{src/Color4.js → mjs/src/Color4.mjs} +1 -0
  147. package/dist/mjs/src/Editor.d.ts +308 -0
  148. package/dist/{src/Editor.js → mjs/src/Editor.mjs} +86 -49
  149. package/dist/mjs/src/EditorImage.d.ts +97 -0
  150. package/dist/{src/EditorImage.js → mjs/src/EditorImage.mjs} +12 -10
  151. package/dist/mjs/src/EventDispatcher.d.ts +30 -0
  152. package/dist/mjs/src/Pointer.d.ts +24 -0
  153. package/dist/{src/Pointer.js → mjs/src/Pointer.mjs} +1 -1
  154. package/dist/mjs/src/SVGLoader.d.ts +48 -0
  155. package/dist/{src/SVGLoader.js → mjs/src/SVGLoader.mjs} +15 -11
  156. package/dist/mjs/src/UndoRedoHistory.d.ts +19 -0
  157. package/dist/{src/UndoRedoHistory.js → mjs/src/UndoRedoHistory.mjs} +1 -1
  158. package/dist/mjs/src/Viewport.d.ts +71 -0
  159. package/dist/{src/Viewport.js → mjs/src/Viewport.mjs} +5 -5
  160. package/dist/mjs/src/bundle/bundled.d.ts +4 -0
  161. package/dist/{src/bundle/bundled.js → mjs/src/bundle/bundled.mjs} +2 -2
  162. package/dist/mjs/src/commands/Command.d.ts +16 -0
  163. package/dist/mjs/src/commands/Duplicate.d.ts +14 -0
  164. package/dist/{src/commands/Duplicate.js → mjs/src/commands/Duplicate.mjs} +3 -3
  165. package/dist/mjs/src/commands/Erase.d.ts +14 -0
  166. package/dist/{src/commands/Erase.js → mjs/src/commands/Erase.mjs} +3 -3
  167. package/dist/mjs/src/commands/SerializableCommand.d.ts +12 -0
  168. package/dist/{src/commands/SerializableCommand.js → mjs/src/commands/SerializableCommand.mjs} +1 -1
  169. package/dist/mjs/src/commands/UnresolvedCommand.d.ts +14 -0
  170. package/dist/{src/commands/UnresolvedCommand.js → mjs/src/commands/UnresolvedCommand.mjs} +1 -1
  171. package/dist/mjs/src/commands/invertCommand.d.ts +4 -0
  172. package/dist/{src/commands/invertCommand.js → mjs/src/commands/invertCommand.mjs} +2 -2
  173. package/dist/mjs/src/commands/lib.mjs +7 -0
  174. package/dist/mjs/src/commands/localization.d.ts +23 -0
  175. package/dist/mjs/src/commands/uniteCommands.d.ts +4 -0
  176. package/dist/{src/commands/uniteCommands.js → mjs/src/commands/uniteCommands.mjs} +2 -2
  177. package/dist/mjs/src/components/AbstractComponent.d.ts +73 -0
  178. package/dist/{src/components/AbstractComponent.js → mjs/src/components/AbstractComponent.mjs} +4 -4
  179. package/dist/mjs/src/components/ImageBackground.d.ts +42 -0
  180. package/dist/{src/components/ImageBackground.js → mjs/src/components/ImageBackground.mjs} +5 -5
  181. package/dist/mjs/src/components/ImageComponent.d.ts +31 -0
  182. package/dist/{src/components/ImageComponent.js → mjs/src/components/ImageComponent.mjs} +3 -3
  183. package/dist/mjs/src/components/RestylableComponent.d.ts +24 -0
  184. package/dist/{src/components/RestylableComponent.js → mjs/src/components/RestylableComponent.mjs} +4 -4
  185. package/dist/mjs/src/components/SVGGlobalAttributesObject.d.ts +21 -0
  186. package/dist/{src/components/SVGGlobalAttributesObject.js → mjs/src/components/SVGGlobalAttributesObject.mjs} +3 -3
  187. package/dist/mjs/src/components/Stroke.d.ts +40 -0
  188. package/dist/{src/components/Stroke.js → mjs/src/components/Stroke.mjs} +5 -5
  189. package/dist/mjs/src/components/TextComponent.d.ts +53 -0
  190. package/dist/{src/components/TextComponent.js → mjs/src/components/TextComponent.mjs} +7 -7
  191. package/dist/mjs/src/components/UnknownSVGObject.d.ts +18 -0
  192. package/dist/{src/components/UnknownSVGObject.js → mjs/src/components/UnknownSVGObject.mjs} +3 -3
  193. package/dist/mjs/src/components/builders/ArrowBuilder.d.ts +19 -0
  194. package/dist/{src/components/builders/ArrowBuilder.js → mjs/src/components/builders/ArrowBuilder.mjs} +2 -2
  195. package/dist/mjs/src/components/builders/FreehandLineBuilder.d.ts +33 -0
  196. package/dist/{src/components/builders/FreehandLineBuilder.js → mjs/src/components/builders/FreehandLineBuilder.mjs} +7 -7
  197. package/dist/mjs/src/components/builders/LineBuilder.d.ts +18 -0
  198. package/dist/{src/components/builders/LineBuilder.js → mjs/src/components/builders/LineBuilder.mjs} +2 -2
  199. package/dist/mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +36 -0
  200. package/dist/{src/components/builders/PressureSensitiveFreehandLineBuilder.js → mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.mjs} +6 -6
  201. package/dist/mjs/src/components/builders/RectangleBuilder.d.ts +20 -0
  202. package/dist/{src/components/builders/RectangleBuilder.js → mjs/src/components/builders/RectangleBuilder.mjs} +4 -4
  203. package/dist/mjs/src/components/builders/types.d.ts +12 -0
  204. package/dist/mjs/src/components/builders/types.mjs +1 -0
  205. package/dist/{src/components/lib.js → mjs/src/components/lib.d.ts} +3 -3
  206. package/dist/mjs/src/components/lib.mjs +12 -0
  207. package/dist/mjs/src/components/localization.d.ts +11 -0
  208. package/dist/mjs/src/components/util/StrokeSmoother.d.ts +35 -0
  209. package/dist/{src/components/util/StrokeSmoother.js → mjs/src/components/util/StrokeSmoother.mjs} +3 -3
  210. package/dist/mjs/src/components/util/describeComponentList.d.ts +4 -0
  211. package/dist/{src/lib.js → mjs/src/lib.d.ts} +4 -3
  212. package/dist/mjs/src/lib.mjs +34 -0
  213. package/dist/mjs/src/localization.d.ts +14 -0
  214. package/dist/{src/localization.js → mjs/src/localization.mjs} +5 -5
  215. package/dist/mjs/src/localizations/de.d.ts +3 -0
  216. package/dist/{src/localizations/de.js → mjs/src/localizations/de.mjs} +1 -1
  217. package/dist/mjs/src/localizations/en.d.ts +3 -0
  218. package/dist/{src/localizations/en.js → mjs/src/localizations/en.mjs} +1 -1
  219. package/dist/mjs/src/localizations/es.d.ts +3 -0
  220. package/dist/{src/localizations/es.js → mjs/src/localizations/es.mjs} +1 -1
  221. package/dist/mjs/src/localizations/getLocalizationTable.d.ts +3 -0
  222. package/dist/{src/localizations/getLocalizationTable.js → mjs/src/localizations/getLocalizationTable.mjs} +4 -4
  223. package/dist/mjs/src/math/LineSegment2.d.ts +24 -0
  224. package/dist/{src/math/LineSegment2.js → mjs/src/math/LineSegment2.mjs} +2 -2
  225. package/dist/mjs/src/math/Mat33.d.ts +118 -0
  226. package/dist/{src/math/Mat33.js → mjs/src/math/Mat33.mjs} +2 -2
  227. package/dist/mjs/src/math/Path.d.ts +71 -0
  228. package/dist/{src/math/Path.js → mjs/src/math/Path.mjs} +5 -5
  229. package/dist/mjs/src/math/Rect2.d.ts +52 -0
  230. package/dist/{src/math/Rect2.js → mjs/src/math/Rect2.mjs} +2 -2
  231. package/dist/mjs/src/math/Triangle.d.ts +11 -0
  232. package/dist/mjs/src/math/Vec2.d.ts +13 -0
  233. package/dist/{src/math/Vec2.js → mjs/src/math/Vec2.mjs} +1 -1
  234. package/dist/mjs/src/math/Vec3.d.ts +106 -0
  235. package/dist/mjs/src/math/lib.mjs +7 -0
  236. package/dist/mjs/src/math/rounding.d.ts +4 -0
  237. package/dist/mjs/src/rendering/Display.d.ts +75 -0
  238. package/dist/{src/rendering/Display.js → mjs/src/rendering/Display.mjs} +7 -7
  239. package/dist/mjs/src/rendering/RenderingStyle.d.ts +31 -0
  240. package/dist/{src/rendering/RenderingStyle.js → mjs/src/rendering/RenderingStyle.mjs} +1 -1
  241. package/dist/mjs/src/rendering/TextRenderingStyle.d.ts +36 -0
  242. package/dist/{src/rendering/TextRenderingStyle.js → mjs/src/rendering/TextRenderingStyle.mjs} +1 -1
  243. package/dist/mjs/src/rendering/caching/CacheRecord.d.ts +20 -0
  244. package/dist/{src/rendering/caching/CacheRecord.js → mjs/src/rendering/caching/CacheRecord.mjs} +1 -1
  245. package/dist/mjs/src/rendering/caching/CacheRecordManager.d.ts +12 -0
  246. package/dist/{src/rendering/caching/CacheRecordManager.js → mjs/src/rendering/caching/CacheRecordManager.mjs} +1 -1
  247. package/dist/mjs/src/rendering/caching/RenderingCache.d.ts +11 -0
  248. package/dist/{src/rendering/caching/RenderingCache.js → mjs/src/rendering/caching/RenderingCache.mjs} +3 -3
  249. package/dist/mjs/src/rendering/caching/RenderingCacheNode.d.ts +29 -0
  250. package/dist/{src/rendering/caching/RenderingCacheNode.js → mjs/src/rendering/caching/RenderingCacheNode.mjs} +3 -3
  251. package/dist/mjs/src/rendering/caching/testUtils.d.ts +9 -0
  252. package/dist/{src/rendering/caching/testUtils.js → mjs/src/rendering/caching/testUtils.mjs} +4 -4
  253. package/dist/mjs/src/rendering/caching/types.d.ts +19 -0
  254. package/dist/mjs/src/rendering/caching/types.mjs +1 -0
  255. package/dist/{src/rendering/lib.js → mjs/src/rendering/lib.d.ts} +2 -0
  256. package/dist/mjs/src/rendering/lib.mjs +5 -0
  257. package/dist/mjs/src/rendering/localization.d.ts +10 -0
  258. package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +68 -0
  259. package/dist/{src/rendering/renderers/AbstractRenderer.js → mjs/src/rendering/renderers/AbstractRenderer.mjs} +3 -3
  260. package/dist/mjs/src/rendering/renderers/CanvasRenderer.d.ts +63 -0
  261. package/dist/{src/rendering/renderers/CanvasRenderer.js → mjs/src/rendering/renderers/CanvasRenderer.mjs} +32 -5
  262. package/dist/mjs/src/rendering/renderers/DummyRenderer.d.ts +35 -0
  263. package/dist/{src/rendering/renderers/DummyRenderer.js → mjs/src/rendering/renderers/DummyRenderer.mjs} +2 -2
  264. package/dist/mjs/src/rendering/renderers/SVGRenderer.d.ts +57 -0
  265. package/dist/{src/rendering/renderers/SVGRenderer.js → mjs/src/rendering/renderers/SVGRenderer.mjs} +33 -7
  266. package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.d.ts +29 -0
  267. package/dist/{src/rendering/renderers/TextOnlyRenderer.js → mjs/src/rendering/renderers/TextOnlyRenderer.mjs} +2 -2
  268. package/dist/mjs/src/testing/beforeEachFile.d.ts +1 -0
  269. package/dist/{src/testing/beforeEachFile.js → mjs/src/testing/beforeEachFile.mjs} +1 -1
  270. package/dist/mjs/src/testing/createEditor.d.ts +4 -0
  271. package/dist/{src/testing/createEditor.js → mjs/src/testing/createEditor.mjs} +2 -2
  272. package/dist/mjs/src/testing/lib.d.ts +2 -0
  273. package/dist/mjs/src/testing/lib.mjs +2 -0
  274. package/dist/mjs/src/testing/loadExpectExtensions.d.ts +2 -0
  275. package/dist/mjs/src/testing/sendPenEvent.d.ts +12 -0
  276. package/dist/mjs/src/testing/sendPenEvent.mjs +19 -0
  277. package/dist/mjs/src/testing/sendTouchEvent.d.ts +42 -0
  278. package/dist/mjs/src/testing/sendTouchEvent.mjs +62 -0
  279. package/dist/mjs/src/toolbar/HTMLToolbar.d.ts +103 -0
  280. package/dist/{src/toolbar/HTMLToolbar.js → mjs/src/toolbar/HTMLToolbar.mjs} +17 -17
  281. package/dist/mjs/src/toolbar/IconProvider.d.ts +62 -0
  282. package/dist/{src/toolbar/IconProvider.js → mjs/src/toolbar/IconProvider.mjs} +4 -4
  283. package/dist/mjs/src/toolbar/lib.mjs +3 -0
  284. package/dist/mjs/src/toolbar/localization.d.ts +49 -0
  285. package/dist/mjs/src/toolbar/makeColorInput.d.ts +6 -0
  286. package/dist/{src/toolbar/makeColorInput.js → mjs/src/toolbar/makeColorInput.mjs} +3 -3
  287. package/dist/mjs/src/toolbar/types.d.ts +4 -0
  288. package/dist/mjs/src/toolbar/types.mjs +1 -0
  289. package/dist/mjs/src/toolbar/widgets/ActionButtonWidget.d.ts +15 -0
  290. package/dist/{src/toolbar/widgets/ActionButtonWidget.js → mjs/src/toolbar/widgets/ActionButtonWidget.mjs} +1 -1
  291. package/dist/mjs/src/toolbar/widgets/BaseToolWidget.d.ts +11 -0
  292. package/dist/{src/toolbar/widgets/BaseToolWidget.js → mjs/src/toolbar/widgets/BaseToolWidget.mjs} +2 -2
  293. package/dist/mjs/src/toolbar/widgets/BaseWidget.d.ts +72 -0
  294. package/dist/{src/toolbar/widgets/BaseWidget.js → mjs/src/toolbar/widgets/BaseWidget.mjs} +3 -3
  295. package/dist/mjs/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +18 -0
  296. package/dist/{src/toolbar/widgets/DocumentPropertiesWidget.js → mjs/src/toolbar/widgets/DocumentPropertiesWidget.mjs} +9 -7
  297. package/dist/mjs/src/toolbar/widgets/EraserToolWidget.d.ts +17 -0
  298. package/dist/{src/toolbar/widgets/EraserToolWidget.js → mjs/src/toolbar/widgets/EraserToolWidget.mjs} +3 -3
  299. package/dist/mjs/src/toolbar/widgets/HandToolWidget.d.ts +17 -0
  300. package/dist/{src/toolbar/widgets/HandToolWidget.js → mjs/src/toolbar/widgets/HandToolWidget.mjs} +7 -7
  301. package/dist/mjs/src/toolbar/widgets/InsertImageWidget.d.ts +19 -0
  302. package/dist/{src/toolbar/widgets/InsertImageWidget.js → mjs/src/toolbar/widgets/InsertImageWidget.mjs} +8 -8
  303. package/dist/mjs/src/toolbar/widgets/OverflowWidget.d.ts +25 -0
  304. package/dist/{src/toolbar/widgets/OverflowWidget.js → mjs/src/toolbar/widgets/OverflowWidget.mjs} +1 -1
  305. package/dist/mjs/src/toolbar/widgets/PenToolWidget.d.ts +27 -0
  306. package/dist/{src/toolbar/widgets/PenToolWidget.js → mjs/src/toolbar/widgets/PenToolWidget.mjs} +11 -10
  307. package/dist/mjs/src/toolbar/widgets/SelectionToolWidget.d.ts +13 -0
  308. package/dist/{src/toolbar/widgets/SelectionToolWidget.js → mjs/src/toolbar/widgets/SelectionToolWidget.mjs} +8 -8
  309. package/dist/mjs/src/toolbar/widgets/TextToolWidget.d.ts +16 -0
  310. package/dist/{src/toolbar/widgets/TextToolWidget.js → mjs/src/toolbar/widgets/TextToolWidget.mjs} +9 -6
  311. package/dist/mjs/src/toolbar/widgets/lib.mjs +10 -0
  312. package/dist/mjs/src/tools/BaseTool.d.ts +22 -0
  313. package/dist/{src/tools/BaseTool.js → mjs/src/tools/BaseTool.mjs} +1 -1
  314. package/dist/mjs/src/tools/Eraser.d.ts +23 -0
  315. package/dist/{src/tools/Eraser.js → mjs/src/tools/Eraser.mjs} +8 -8
  316. package/dist/mjs/src/tools/FindTool.d.ts +21 -0
  317. package/dist/{src/tools/FindTool.js → mjs/src/tools/FindTool.mjs} +2 -2
  318. package/dist/mjs/src/tools/PanZoom.d.ts +52 -0
  319. package/dist/{src/tools/PanZoom.js → mjs/src/tools/PanZoom.mjs} +8 -8
  320. package/dist/mjs/src/tools/PasteHandler.d.ts +23 -0
  321. package/dist/{src/tools/PasteHandler.js → mjs/src/tools/PasteHandler.mjs} +7 -7
  322. package/dist/mjs/src/tools/Pen.d.ts +39 -0
  323. package/dist/{src/tools/Pen.js → mjs/src/tools/Pen.mjs} +5 -5
  324. package/dist/mjs/src/tools/PipetteTool.d.ts +18 -0
  325. package/dist/{src/tools/PipetteTool.js → mjs/src/tools/PipetteTool.mjs} +1 -1
  326. package/dist/mjs/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +8 -0
  327. package/dist/{src/tools/SelectionTool/SelectAllShortcutHandler.js → mjs/src/tools/SelectionTool/SelectAllShortcutHandler.mjs} +2 -2
  328. package/dist/mjs/src/tools/SelectionTool/Selection.d.ts +64 -0
  329. package/dist/{src/tools/SelectionTool/Selection.js → mjs/src/tools/SelectionTool/Selection.mjs} +12 -12
  330. package/dist/mjs/src/tools/SelectionTool/SelectionHandle.d.ts +38 -0
  331. package/dist/{src/tools/SelectionTool/SelectionHandle.js → mjs/src/tools/SelectionTool/SelectionHandle.mjs} +3 -3
  332. package/dist/mjs/src/tools/SelectionTool/SelectionTool.d.ts +36 -0
  333. package/dist/{src/tools/SelectionTool/SelectionTool.js → mjs/src/tools/SelectionTool/SelectionTool.mjs} +13 -14
  334. package/dist/mjs/src/tools/SelectionTool/TransformMode.d.ts +34 -0
  335. package/dist/{src/tools/SelectionTool/TransformMode.js → mjs/src/tools/SelectionTool/TransformMode.mjs} +4 -4
  336. package/dist/mjs/src/tools/SelectionTool/types.d.ts +9 -0
  337. package/dist/mjs/src/tools/TextTool.d.ts +33 -0
  338. package/dist/{src/tools/TextTool.js → mjs/src/tools/TextTool.mjs} +11 -11
  339. package/dist/mjs/src/tools/ToolController.d.ts +18 -0
  340. package/dist/{src/tools/ToolController.js → mjs/src/tools/ToolController.mjs} +16 -16
  341. package/dist/mjs/src/tools/ToolEnabledGroup.d.ts +6 -0
  342. package/dist/mjs/src/tools/ToolSwitcherShortcut.d.ts +16 -0
  343. package/dist/{src/tools/ToolSwitcherShortcut.js → mjs/src/tools/ToolSwitcherShortcut.mjs} +1 -1
  344. package/dist/mjs/src/tools/ToolbarShortcutHandler.d.ts +12 -0
  345. package/dist/{src/tools/ToolbarShortcutHandler.js → mjs/src/tools/ToolbarShortcutHandler.mjs} +1 -1
  346. package/dist/mjs/src/tools/UndoRedoShortcut.d.ts +8 -0
  347. package/dist/{src/tools/UndoRedoShortcut.js → mjs/src/tools/UndoRedoShortcut.mjs} +1 -1
  348. package/dist/{src/tools/lib.js → mjs/src/tools/lib.d.ts} +1 -1
  349. package/dist/mjs/src/tools/lib.mjs +16 -0
  350. package/dist/mjs/src/tools/localization.d.ts +28 -0
  351. package/dist/mjs/src/types.d.ts +151 -0
  352. package/dist/mjs/src/util/assertions.d.ts +23 -0
  353. package/dist/mjs/src/util/fileToBase64.d.ts +3 -0
  354. package/dist/mjs/src/util/untilNextAnimationFrame.d.ts +3 -0
  355. package/dist/mjs/src/util/waitForTimeout.d.ts +2 -0
  356. package/package.json +34 -33
  357. package/src/Color4.ts +2 -0
  358. package/src/Editor.ts +62 -28
  359. package/src/EditorImage.ts +4 -2
  360. package/src/SVGLoader.ts +4 -0
  361. package/src/lib.ts +2 -1
  362. package/src/rendering/lib.ts +2 -0
  363. package/src/rendering/renderers/CanvasRenderer.ts +27 -0
  364. package/src/rendering/renderers/SVGRenderer.ts +32 -1
  365. package/src/testing/lib.ts +3 -0
  366. package/src/testing/sendPenEvent.ts +31 -0
  367. package/src/testing/sendTouchEvent.ts +36 -1
  368. package/src/toolbar/toolbar.css +5 -0
  369. package/src/toolbar/widgets/DocumentPropertiesWidget.ts +4 -2
  370. package/src/toolbar/widgets/PenToolWidget.ts +1 -0
  371. package/src/toolbar/widgets/TextToolWidget.ts +4 -1
  372. package/src/tools/Eraser.test.ts +11 -10
  373. package/src/tools/PanZoom.test.ts +1 -1
  374. package/src/tools/Pen.test.ts +63 -62
  375. package/src/tools/SelectionTool/SelectionTool.test.ts +15 -14
  376. package/src/tools/SelectionTool/SelectionTool.ts +5 -7
  377. package/tsconfig.json +3 -2
  378. package/tsconfig.mjs.json +9 -0
  379. package/dist/src/testing/sendTouchEvent.d.ts +0 -6
  380. package/dist/src/testing/sendTouchEvent.js +0 -26
  381. /package/dist/{build_tools → cjs/build_tools}/BundledFile.d.ts +0 -0
  382. /package/dist/{build_tools → cjs/build_tools}/buildTranslationTemplate.d.ts +0 -0
  383. /package/dist/{build_tools → cjs/build_tools}/bundle.d.ts +0 -0
  384. /package/dist/{src/components/builders/types.js → cjs/build_tools/postDist.d.ts} +0 -0
  385. /package/dist/{src → cjs/src}/EventDispatcher.d.ts +0 -0
  386. /package/dist/{src → cjs/src}/Pointer.d.ts +0 -0
  387. /package/dist/{src → cjs/src}/UndoRedoHistory.d.ts +0 -0
  388. /package/dist/{src → cjs/src}/Viewport.d.ts +0 -0
  389. /package/dist/{src → cjs/src}/bundle/bundled.d.ts +0 -0
  390. /package/dist/{src → cjs/src}/commands/Command.d.ts +0 -0
  391. /package/dist/{src → cjs/src}/commands/Duplicate.d.ts +0 -0
  392. /package/dist/{src → cjs/src}/commands/Erase.d.ts +0 -0
  393. /package/dist/{src → cjs/src}/commands/SerializableCommand.d.ts +0 -0
  394. /package/dist/{src → cjs/src}/commands/UnresolvedCommand.d.ts +0 -0
  395. /package/dist/{src → cjs/src}/commands/invertCommand.d.ts +0 -0
  396. /package/dist/{src → cjs/src}/commands/lib.d.ts +0 -0
  397. /package/dist/{src → cjs/src}/commands/localization.d.ts +0 -0
  398. /package/dist/{src → cjs/src}/commands/uniteCommands.d.ts +0 -0
  399. /package/dist/{src → cjs/src}/components/AbstractComponent.d.ts +0 -0
  400. /package/dist/{src → cjs/src}/components/ImageBackground.d.ts +0 -0
  401. /package/dist/{src → cjs/src}/components/ImageComponent.d.ts +0 -0
  402. /package/dist/{src → cjs/src}/components/RestylableComponent.d.ts +0 -0
  403. /package/dist/{src → cjs/src}/components/SVGGlobalAttributesObject.d.ts +0 -0
  404. /package/dist/{src → cjs/src}/components/Stroke.d.ts +0 -0
  405. /package/dist/{src → cjs/src}/components/TextComponent.d.ts +0 -0
  406. /package/dist/{src → cjs/src}/components/UnknownSVGObject.d.ts +0 -0
  407. /package/dist/{src → cjs/src}/components/builders/ArrowBuilder.d.ts +0 -0
  408. /package/dist/{src → cjs/src}/components/builders/FreehandLineBuilder.d.ts +0 -0
  409. /package/dist/{src → cjs/src}/components/builders/LineBuilder.d.ts +0 -0
  410. /package/dist/{src → cjs/src}/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +0 -0
  411. /package/dist/{src → cjs/src}/components/builders/RectangleBuilder.d.ts +0 -0
  412. /package/dist/{src → cjs/src}/components/builders/types.d.ts +0 -0
  413. /package/dist/{src → cjs/src}/components/lib.d.ts +0 -0
  414. /package/dist/{src → cjs/src}/components/localization.d.ts +0 -0
  415. /package/dist/{src → cjs/src}/components/util/StrokeSmoother.d.ts +0 -0
  416. /package/dist/{src → cjs/src}/components/util/describeComponentList.d.ts +0 -0
  417. /package/dist/{src → cjs/src}/localization.d.ts +0 -0
  418. /package/dist/{src → cjs/src}/localizations/de.d.ts +0 -0
  419. /package/dist/{src → cjs/src}/localizations/en.d.ts +0 -0
  420. /package/dist/{src → cjs/src}/localizations/es.d.ts +0 -0
  421. /package/dist/{src → cjs/src}/localizations/getLocalizationTable.d.ts +0 -0
  422. /package/dist/{src → cjs/src}/math/LineSegment2.d.ts +0 -0
  423. /package/dist/{src → cjs/src}/math/Mat33.d.ts +0 -0
  424. /package/dist/{src → cjs/src}/math/Path.d.ts +0 -0
  425. /package/dist/{src → cjs/src}/math/Rect2.d.ts +0 -0
  426. /package/dist/{src → cjs/src}/math/Triangle.d.ts +0 -0
  427. /package/dist/{src → cjs/src}/math/Vec2.d.ts +0 -0
  428. /package/dist/{src → cjs/src}/math/Vec3.d.ts +0 -0
  429. /package/dist/{src → cjs/src}/math/lib.d.ts +0 -0
  430. /package/dist/{src → cjs/src}/math/rounding.d.ts +0 -0
  431. /package/dist/{src → cjs/src}/rendering/Display.d.ts +0 -0
  432. /package/dist/{src → cjs/src}/rendering/RenderingStyle.d.ts +0 -0
  433. /package/dist/{src → cjs/src}/rendering/TextRenderingStyle.d.ts +0 -0
  434. /package/dist/{src → cjs/src}/rendering/caching/CacheRecord.d.ts +0 -0
  435. /package/dist/{src → cjs/src}/rendering/caching/CacheRecordManager.d.ts +0 -0
  436. /package/dist/{src → cjs/src}/rendering/caching/RenderingCache.d.ts +0 -0
  437. /package/dist/{src → cjs/src}/rendering/caching/RenderingCacheNode.d.ts +0 -0
  438. /package/dist/{src → cjs/src}/rendering/caching/testUtils.d.ts +0 -0
  439. /package/dist/{src → cjs/src}/rendering/caching/types.d.ts +0 -0
  440. /package/dist/{src → cjs/src}/rendering/localization.d.ts +0 -0
  441. /package/dist/{src → cjs/src}/rendering/renderers/AbstractRenderer.d.ts +0 -0
  442. /package/dist/{src → cjs/src}/rendering/renderers/DummyRenderer.d.ts +0 -0
  443. /package/dist/{src → cjs/src}/rendering/renderers/TextOnlyRenderer.d.ts +0 -0
  444. /package/dist/{src → cjs/src}/testing/beforeEachFile.d.ts +0 -0
  445. /package/dist/{src → cjs/src}/testing/createEditor.d.ts +0 -0
  446. /package/dist/{src → cjs/src}/testing/loadExpectExtensions.d.ts +0 -0
  447. /package/dist/{src → cjs/src}/toolbar/HTMLToolbar.d.ts +0 -0
  448. /package/dist/{src → cjs/src}/toolbar/IconProvider.d.ts +0 -0
  449. /package/dist/{src → cjs/src}/toolbar/lib.d.ts +0 -0
  450. /package/dist/{src → cjs/src}/toolbar/localization.d.ts +0 -0
  451. /package/dist/{src → cjs/src}/toolbar/makeColorInput.d.ts +0 -0
  452. /package/dist/{src → cjs/src}/toolbar/types.d.ts +0 -0
  453. /package/dist/{src → cjs/src}/toolbar/widgets/ActionButtonWidget.d.ts +0 -0
  454. /package/dist/{src → cjs/src}/toolbar/widgets/BaseToolWidget.d.ts +0 -0
  455. /package/dist/{src → cjs/src}/toolbar/widgets/BaseWidget.d.ts +0 -0
  456. /package/dist/{src → cjs/src}/toolbar/widgets/DocumentPropertiesWidget.d.ts +0 -0
  457. /package/dist/{src → cjs/src}/toolbar/widgets/EraserToolWidget.d.ts +0 -0
  458. /package/dist/{src → cjs/src}/toolbar/widgets/HandToolWidget.d.ts +0 -0
  459. /package/dist/{src → cjs/src}/toolbar/widgets/InsertImageWidget.d.ts +0 -0
  460. /package/dist/{src → cjs/src}/toolbar/widgets/OverflowWidget.d.ts +0 -0
  461. /package/dist/{src → cjs/src}/toolbar/widgets/PenToolWidget.d.ts +0 -0
  462. /package/dist/{src → cjs/src}/toolbar/widgets/SelectionToolWidget.d.ts +0 -0
  463. /package/dist/{src → cjs/src}/toolbar/widgets/TextToolWidget.d.ts +0 -0
  464. /package/dist/{src → cjs/src}/toolbar/widgets/lib.d.ts +0 -0
  465. /package/dist/{src → cjs/src}/tools/BaseTool.d.ts +0 -0
  466. /package/dist/{src → cjs/src}/tools/Eraser.d.ts +0 -0
  467. /package/dist/{src → cjs/src}/tools/FindTool.d.ts +0 -0
  468. /package/dist/{src → cjs/src}/tools/PanZoom.d.ts +0 -0
  469. /package/dist/{src → cjs/src}/tools/PasteHandler.d.ts +0 -0
  470. /package/dist/{src → cjs/src}/tools/Pen.d.ts +0 -0
  471. /package/dist/{src → cjs/src}/tools/PipetteTool.d.ts +0 -0
  472. /package/dist/{src → cjs/src}/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -0
  473. /package/dist/{src → cjs/src}/tools/SelectionTool/Selection.d.ts +0 -0
  474. /package/dist/{src → cjs/src}/tools/SelectionTool/SelectionHandle.d.ts +0 -0
  475. /package/dist/{src → cjs/src}/tools/SelectionTool/SelectionTool.d.ts +0 -0
  476. /package/dist/{src → cjs/src}/tools/SelectionTool/TransformMode.d.ts +0 -0
  477. /package/dist/{src → cjs/src}/tools/SelectionTool/types.d.ts +0 -0
  478. /package/dist/{src → cjs/src}/tools/TextTool.d.ts +0 -0
  479. /package/dist/{src → cjs/src}/tools/ToolController.d.ts +0 -0
  480. /package/dist/{src → cjs/src}/tools/ToolEnabledGroup.d.ts +0 -0
  481. /package/dist/{src → cjs/src}/tools/ToolSwitcherShortcut.d.ts +0 -0
  482. /package/dist/{src → cjs/src}/tools/ToolbarShortcutHandler.d.ts +0 -0
  483. /package/dist/{src → cjs/src}/tools/UndoRedoShortcut.d.ts +0 -0
  484. /package/dist/{src → cjs/src}/tools/lib.d.ts +0 -0
  485. /package/dist/{src → cjs/src}/tools/localization.d.ts +0 -0
  486. /package/dist/{src → cjs/src}/types.d.ts +0 -0
  487. /package/dist/{src → cjs/src}/util/assertions.d.ts +0 -0
  488. /package/dist/{src → cjs/src}/util/fileToBase64.d.ts +0 -0
  489. /package/dist/{src → cjs/src}/util/untilNextAnimationFrame.d.ts +0 -0
  490. /package/dist/{src → cjs/src}/util/waitForTimeout.d.ts +0 -0
  491. /package/dist/{build_tools/BundledFile.js → mjs/build_tools/BundledFile.mjs} +0 -0
  492. /package/dist/{src/rendering/caching/types.js → mjs/build_tools/buildTranslationTemplate.d.ts} +0 -0
  493. /package/dist/{src/toolbar/types.js → mjs/build_tools/bundle.d.ts} +0 -0
  494. /package/dist/{src/EventDispatcher.js → mjs/src/EventDispatcher.mjs} +0 -0
  495. /package/dist/{src/commands/Command.js → mjs/src/commands/Command.mjs} +0 -0
  496. /package/dist/{src/commands/lib.js → mjs/src/commands/lib.d.ts} +0 -0
  497. /package/dist/{src/commands/localization.js → mjs/src/commands/localization.mjs} +0 -0
  498. /package/dist/{src/components/localization.js → mjs/src/components/localization.mjs} +0 -0
  499. /package/dist/{src/components/util/describeComponentList.js → mjs/src/components/util/describeComponentList.mjs} +0 -0
  500. /package/dist/{src/math/Triangle.js → mjs/src/math/Triangle.mjs} +0 -0
  501. /package/dist/{src/math/Vec3.js → mjs/src/math/Vec3.mjs} +0 -0
  502. /package/dist/{src/math/lib.js → mjs/src/math/lib.d.ts} +0 -0
  503. /package/dist/{src/math/rounding.js → mjs/src/math/rounding.mjs} +0 -0
  504. /package/dist/{src/rendering/localization.js → mjs/src/rendering/localization.mjs} +0 -0
  505. /package/dist/{src/testing/loadExpectExtensions.js → mjs/src/testing/loadExpectExtensions.mjs} +0 -0
  506. /package/dist/{src/toolbar/lib.js → mjs/src/toolbar/lib.d.ts} +0 -0
  507. /package/dist/{src/toolbar/localization.js → mjs/src/toolbar/localization.mjs} +0 -0
  508. /package/dist/{src/toolbar/widgets/lib.js → mjs/src/toolbar/widgets/lib.d.ts} +0 -0
  509. /package/dist/{src/tools/SelectionTool/types.js → mjs/src/tools/SelectionTool/types.mjs} +0 -0
  510. /package/dist/{src/tools/ToolEnabledGroup.js → mjs/src/tools/ToolEnabledGroup.mjs} +0 -0
  511. /package/dist/{src/tools/localization.js → mjs/src/tools/localization.mjs} +0 -0
  512. /package/dist/{src/types.js → mjs/src/types.mjs} +0 -0
  513. /package/dist/{src/util/assertions.js → mjs/src/util/assertions.mjs} +0 -0
  514. /package/dist/{src/util/fileToBase64.js → mjs/src/util/fileToBase64.mjs} +0 -0
  515. /package/dist/{src/util/untilNextAnimationFrame.js → mjs/src/util/untilNextAnimationFrame.mjs} +0 -0
  516. /package/dist/{src/util/waitForTimeout.js → mjs/src/util/waitForTimeout.mjs} +0 -0
package/package.json CHANGED
@@ -1,59 +1,58 @@
1
1
  {
2
2
  "name": "js-draw",
3
- "version": "0.17.3",
3
+ "version": "0.18.0",
4
4
  "description": "Draw pictures using a pen, touchscreen, or mouse! JS-draw is a drawing library for JavaScript and TypeScript. ",
5
- "main": "./dist/src/lib.d.ts",
6
- "types": "./dist/src/lib.js",
5
+ "types": "./dist/cjs/src/lib.d.ts",
6
+ "main": "./dist/cjs/src/lib.mjs",
7
7
  "exports": {
8
8
  ".": {
9
- "types": "./dist/src/lib.d.ts",
10
- "default": "./dist/src/lib.js"
11
- },
12
- "./getLocalizationTable": {
13
- "types": "./dist/src/localizations/getLocalizationTable.d.ts",
14
- "default": "./dist/src/localizations/getLocalizationTable.js"
9
+ "types": "./dist/cjs/src/lib.d.ts",
10
+ "import": "./dist/mjs/src/lib.mjs",
11
+ "require": "./dist/cjs/src/lib.js"
15
12
  },
16
13
  "./styles": {
17
14
  "default": "./src/styles.js"
18
15
  },
16
+ "./Editor.css": {
17
+ "default": "./src/Editor.css"
18
+ },
19
+ "./bundle": {
20
+ "types": "./dist/mjs/src/bundle/bundled.d.ts",
21
+ "default": "./dist/bundle.js"
22
+ },
19
23
  "./Editor": {
20
- "types": "./dist/src/Editor.d.ts",
21
- "default": "./dist/src/Editor.js"
24
+ "types": "./dist/mjs/src/Editor.d.ts",
25
+ "default": "./dist/mjs/src/Editor.mjs"
22
26
  },
23
27
  "./types": {
24
- "types": "./dist/src/types.d.ts",
25
- "default": "./dist/src/types.js"
28
+ "types": "./dist/mjs/src/types.d.ts",
29
+ "default": "./dist/mjs/src/types.mjs"
26
30
  },
27
31
  "./localization": {
28
- "types": "./dist/src/localization.d.ts",
29
- "default": "./dist/src/localization.js"
32
+ "types": "./dist/mjs/src/localization.d.ts",
33
+ "default": "./dist/mjs/src/localization.mjs"
30
34
  },
31
35
  "./toolbar/HTMLToolbar": {
32
- "types": "./dist/src/toolbar/HTMLToolbar.d.ts",
33
- "default": "./dist/src/toolbar/HTMLToolbar.js"
34
- },
35
- "./Editor.css": {
36
- "default": "./src/Editor.css"
36
+ "types": "./dist/mjs/src/toolbar/HTMLToolbar.d.ts",
37
+ "default": "./dist/mjs/src/toolbar/HTMLToolbar.mjs"
37
38
  },
38
39
  "./math": {
39
- "types": "./dist/src/math/lib.d.ts",
40
- "default": "./dist/src/math/lib.js"
40
+ "types": "./dist/mjs/src/math/lib.d.ts",
41
+ "import": "./dist/mjs/src/math/lib.mjs",
42
+ "require": "./dist/cjs/src/math/lib.js"
41
43
  },
42
44
  "./Color4": {
43
- "types": "./dist/src/Color4.d.ts",
44
- "default": "./dist/src/Color4.js"
45
+ "types": "./dist/mjs/src/Color4.d.ts",
46
+ "import": "./dist/mjs/src/Color4.mjs",
47
+ "require": "./dist/cjs/src/Color4.js"
45
48
  },
46
49
  "./components": {
47
- "types": "./dist/src/components/lib.d.ts",
48
- "default": "./dist/src/components/lib.js"
50
+ "types": "./dist/mjs/src/components/lib.d.ts",
51
+ "default": "./dist/mjs/src/components/lib.mjs"
49
52
  },
50
53
  "./commands": {
51
- "types": "./dist/src/commands/lib.d.ts",
52
- "default": "./dist/src/commands/lib.js"
53
- },
54
- "./bundle": {
55
- "types": "./dist/src/bundle/bundled.d.ts",
56
- "default": "./dist/bundle.js"
54
+ "types": "./dist/mjs/src/commands/lib.d.ts",
55
+ "default": "./dist/mjs/src/commands/lib.mjs"
57
56
  }
58
57
  },
59
58
  "repository": {
@@ -65,7 +64,9 @@
65
64
  "private": false,
66
65
  "scripts": {
67
66
  "test": "jest",
68
- "build": "rm -rf ./dist; mkdir dist && yarn tsc && ts-node ./build_tools/bundle.ts",
67
+ "dist-test": "cd dist-test/test_imports && yarn install && yarn test",
68
+ "dist": "yarn build && yarn dist-test",
69
+ "build": "rm -rf ./dist; mkdir dist && tsc -p tsconfig.mjs.json && tsc && ts-node ./build_tools/postDist.ts && ts-node ./build_tools/bundle.ts",
69
70
  "doc": "typedoc --options typedoc.json",
70
71
  "watch-docs": "typedoc --watch --options typedoc.json",
71
72
  "lint": "eslint .",
package/src/Color4.ts CHANGED
@@ -232,3 +232,5 @@ export default class Color4 {
232
232
  public static gray = Color4.ofRGB(0.5, 0.5, 0.5);
233
233
  public static white = Color4.ofRGB(1, 1, 1);
234
234
  }
235
+
236
+ export { Color4 };
package/src/Editor.ts CHANGED
@@ -28,6 +28,7 @@ import SelectionTool from './tools/SelectionTool/SelectionTool';
28
28
  import AbstractComponent from './components/AbstractComponent';
29
29
  import Erase from './commands/Erase';
30
30
  import ImageBackground, { BackgroundType } from './components/ImageBackground';
31
+ import sendPenEvent from './testing/sendPenEvent';
31
32
 
32
33
  type HTMLPointerEventType = 'pointerdown'|'pointermove'|'pointerup'|'pointercancel';
33
34
  type HTMLPointerEventFilter = (eventName: HTMLPointerEventType, event: PointerEvent)=>boolean;
@@ -67,6 +68,9 @@ export interface EditorSettings {
67
68
  * // Do something with saveData...
68
69
  * });
69
70
  * ```
71
+ *
72
+ * See also
73
+ * [`docs/example/example.ts`](https://github.com/personalizedrefrigerator/js-draw/blob/main/docs/example/example.ts#L15).
70
74
  */
71
75
  export class Editor {
72
76
  // Wrapper around the viewport and toolbar
@@ -156,6 +160,8 @@ export class Editor {
156
160
  *
157
161
  * // Add the default toolbar
158
162
  * const toolbar = editor.addToolbar();
163
+ *
164
+ * // Add a save button
159
165
  * toolbar.addActionButton({
160
166
  * label: 'Save'
161
167
  * icon: createSaveIcon(),
@@ -260,6 +266,7 @@ export class Editor {
260
266
  *
261
267
  * @example
262
268
  * ```
269
+ * // Set the editor's height to 500px
263
270
  * editor.getRootElement().style.height = '500px';
264
271
  * ```
265
272
  */
@@ -282,8 +289,10 @@ export class Editor {
282
289
 
283
290
  private previousAccessibilityAnnouncement: string = '';
284
291
 
285
- // Announce `message` for screen readers. If `message` is the same as the previous
286
- // message, it is re-announced.
292
+ /**
293
+ * Announce `message` for screen readers. If `message` is the same as the previous
294
+ * message, it is re-announced.
295
+ */
287
296
  public announceForAccessibility(message: string) {
288
297
  // Force re-announcing an announcement if announced again.
289
298
  if (message === this.previousAccessibilityAnnouncement) {
@@ -576,6 +585,25 @@ export class Editor {
576
585
  }
577
586
  }
578
587
 
588
+ /**
589
+ * Forward pointer events from `elem` to this editor. Such that right-click/right-click drag
590
+ * events are also forwarded, `elem`'s contextmenu is disabled.
591
+ *
592
+ * @example
593
+ * ```ts
594
+ * const overlay = document.createElement('div');
595
+ * editor.createHTMLOverlay(overlay);
596
+ *
597
+ * // Send all pointer events that don't have the control key pressed
598
+ * // to the editor.
599
+ * editor.handlePointerEventsFrom(overlay, (event) => {
600
+ * if (event.ctrlKey) {
601
+ * return false;
602
+ * }
603
+ * return true;
604
+ * });
605
+ * ```
606
+ */
579
607
  public handlePointerEventsFrom(elem: HTMLElement, filter?: HTMLPointerEventFilter) {
580
608
  // May be required to prevent text selection on iOS/Safari:
581
609
  // See https://stackoverflow.com/a/70992717/17055750
@@ -741,7 +769,7 @@ export class Editor {
741
769
  * Schedule a re-render for some time in the near future. Does not schedule an additional
742
770
  * re-render if a re-render is already queued.
743
771
  *
744
- * @returns a promise that resolves when
772
+ * @returns a promise that resolves when re-rendering has completed.
745
773
  */
746
774
  public queueRerender(): Promise<void> {
747
775
  if (!this.rerenderQueued) {
@@ -766,6 +794,11 @@ export class Editor {
766
794
  return this.rerenderQueued;
767
795
  }
768
796
 
797
+ /**
798
+ * Re-renders the entire image.
799
+ *
800
+ * @see {@link Editor.queueRerender}
801
+ */
769
802
  public rerender(showImageBounds: boolean = true) {
770
803
  this.display.startRerender();
771
804
 
@@ -795,6 +828,9 @@ export class Editor {
795
828
  }
796
829
 
797
830
  /**
831
+ * Draws the given path onto the wet ink renderer. The given path will
832
+ * be displayed on top of the main image.
833
+ *
798
834
  * @see {@link Display.getWetInkRenderer} {@link Display.flatten}
799
835
  */
800
836
  public drawWetInk(...path: RenderablePathSpec[]) {
@@ -804,19 +840,28 @@ export class Editor {
804
840
  }
805
841
 
806
842
  /**
843
+ * Clears the wet ink display.
844
+ *
807
845
  * @see {@link Display.getWetInkRenderer}
808
846
  */
809
847
  public clearWetInk() {
810
848
  this.display.getWetInkRenderer().clear();
811
849
  }
812
850
 
813
- // Focuses the region used for text input/key commands.
851
+ /**
852
+ * Focuses the region used for text input/key commands.
853
+ */
814
854
  public focus() {
815
855
  this.renderingRegion.focus();
816
856
  }
817
857
 
818
- // Creates an element that will be positioned on top of the dry/wet ink
819
- // renderers.
858
+ /**
859
+ * Creates an element that will be positioned on top of the dry/wet ink
860
+ * renderers.
861
+ *
862
+ * This is useful for displaying content on top of the rendered content
863
+ * (e.g. a selection box).
864
+ */
820
865
  public createHTMLOverlay(overlay: HTMLElement) {
821
866
  overlay.classList.add('overlay');
822
867
  this.container.appendChild(overlay);
@@ -850,8 +895,13 @@ export class Editor {
850
895
  });
851
896
  }
852
897
 
853
- // Dispatch a pen event to the currently selected tool.
854
- // Intended primarially for unit tests.
898
+ /**
899
+ * Dispatch a pen event to the currently selected tool.
900
+ * Intended primarially for unit tests.
901
+ *
902
+ * @deprecated
903
+ * @see {@link sendPenEvent} {@link sendTouchEvent}
904
+ */
855
905
  public sendPenEvent(
856
906
  eventType: InputEvtType.PointerDownEvt|InputEvtType.PointerMoveEvt|InputEvtType.PointerUpEvt,
857
907
  point: Point2,
@@ -859,16 +909,7 @@ export class Editor {
859
909
  // @deprecated
860
910
  allPointers?: Pointer[]
861
911
  ) {
862
- const mainPointer = Pointer.ofCanvasPoint(
863
- point, eventType !== InputEvtType.PointerUpEvt, this.viewport
864
- );
865
- this.toolController.dispatchInputEvent({
866
- kind: eventType,
867
- allPointers: allPointers ?? [
868
- mainPointer,
869
- ],
870
- current: mainPointer,
871
- });
912
+ sendPenEvent(this, eventType, point, allPointers);
872
913
  }
873
914
 
874
915
  public async addAndCenterComponents(components: AbstractComponent[], selectComponents: boolean = true) {
@@ -947,9 +988,9 @@ export class Editor {
947
988
 
948
989
  public toSVG(): SVGElement {
949
990
  const importExportViewport = this.image.getImportExportViewport().getTemporaryClone();
950
- const svgNameSpace = 'http://www.w3.org/2000/svg';
951
- const result = document.createElementNS(svgNameSpace, 'svg');
952
- const renderer = new SVGRenderer(result, importExportViewport);
991
+
992
+ const sanitize = false;
993
+ const { element: result, renderer } = SVGRenderer.fromViewport(importExportViewport, sanitize);
953
994
 
954
995
  const origTransform = importExportViewport.canvasToScreenTransform;
955
996
  // Render with (0,0) at (0,0) — we'll handle translation with
@@ -967,13 +1008,6 @@ export class Editor {
967
1008
  result.setAttribute('width', toRoundedString(rect.w));
968
1009
  result.setAttribute('height', toRoundedString(rect.h));
969
1010
 
970
- // Ensure the image can be identified as an SVG if downloaded.
971
- // See https://jwatt.org/svg/authoring/
972
- result.setAttribute('version', '1.1');
973
- result.setAttribute('baseProfile', 'full');
974
- result.setAttribute('xmlns', svgNameSpace);
975
-
976
-
977
1011
  return result;
978
1012
  }
979
1013
 
@@ -94,8 +94,10 @@ export default class EditorImage {
94
94
  }
95
95
 
96
96
  /**
97
- * Renders all nodes visible from `viewport` (or all nodes if `viewport = null`)
98
- * @internal
97
+ * Renders all nodes visible from `viewport` (or all nodes if `viewport = null`).
98
+ *
99
+ * `viewport` is used to improve rendering performance. If given, it must match
100
+ * the viewport used by the `renderer` (if any).
99
101
  */
100
102
  public render(renderer: AbstractRenderer, viewport: Viewport|null) {
101
103
  this.background.render(renderer, viewport?.visibleRect);
package/src/SVGLoader.ts CHANGED
@@ -450,6 +450,10 @@ export default class SVGLoader implements ImageLoader {
450
450
  }
451
451
 
452
452
  /**
453
+ * Create an `SVGLoader` from the content of an SVG image. SVGs are loaded within a sandboxed
454
+ * iframe with `sandbox="allow-same-origin"`
455
+ * [thereby disabling JavaScript](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#sandbox).
456
+ *
453
457
  * @see {@link Editor.loadFrom}
454
458
  * @param text - Textual representation of the SVG (e.g. `<svg viewbox='...'>...</svg>`).
455
459
  * @param sanitize - if `true`, don't store unknown attributes.
package/src/lib.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The main entrypoint for the NPM package. Everything exported by this file
3
- * is available through the `js-draw` package.
3
+ * is available through the [`js-draw` package](https://www.npmjs.com/package/js-draw).
4
4
  *
5
5
  * @example
6
6
  * ```
@@ -28,6 +28,7 @@ export * from './commands/lib';
28
28
  export * from './tools/lib';
29
29
  export * from './toolbar/lib';
30
30
  export * from './rendering/lib';
31
+ export * from './testing/lib';
31
32
  export { default as Pointer, PointerDevice } from './Pointer';
32
33
  export { default as HTMLToolbar } from './toolbar/HTMLToolbar';
33
34
  export { default as UndoRedoHistory } from './UndoRedoHistory';
@@ -1,4 +1,6 @@
1
1
 
2
2
  export { default as AbstractRenderer } from './renderers/AbstractRenderer';
3
3
  export { default as DummyRenderer } from './renderers/DummyRenderer';
4
+ export { default as SVGRenderer } from './renderers/SVGRenderer';
5
+ export { default as CanvasRenderer } from './renderers/CanvasRenderer';
4
6
  export { default as Display } from './Display';
@@ -10,6 +10,26 @@ import RenderingStyle from '../RenderingStyle';
10
10
  import TextStyle from '../TextRenderingStyle';
11
11
  import AbstractRenderer, { RenderableImage, RenderablePathSpec } from './AbstractRenderer';
12
12
 
13
+ /**
14
+ * Renders onto a `CanvasRenderingContext2D`.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const editor = new Editor(document.body);
19
+ *
20
+ * const canvas = document.createElement('canvas');
21
+ * const ctx = canvas.getContext('2d');
22
+ *
23
+ * // Ensure that the canvas can fit the entire rendering
24
+ * const viewport = editor.image.getImportExportViewport();
25
+ * canvas.width = viewport.getScreenRectSize().x;
26
+ * canvas.height = viewport.getScreenRectSize().y;
27
+ *
28
+ * // Render editor.image onto the renderer
29
+ * const renderer = new CanvasRenderer(ctx, viewport);
30
+ * editor.image.render(renderer, viewport);
31
+ * ```
32
+ */
13
33
  export default class CanvasRenderer extends AbstractRenderer {
14
34
  private ignoreObjectsAboveLevel: number|null = null;
15
35
  private ignoringObject: boolean = false;
@@ -26,6 +46,11 @@ export default class CanvasRenderer extends AbstractRenderer {
26
46
  private minRenderSizeAnyDimen: number;
27
47
  private minRenderSizeBothDimens: number;
28
48
 
49
+ /**
50
+ * Creates a new `CanvasRenderer` that renders to the given rendering context.
51
+ * The `viewport` is used to determine the translation/rotation/scaling of the content
52
+ * to draw.
53
+ */
29
54
  public constructor(private ctx: CanvasRenderingContext2D, viewport: Viewport) {
30
55
  super(viewport);
31
56
  this.setDraftMode(false);
@@ -231,6 +256,7 @@ export default class CanvasRenderer extends AbstractRenderer {
231
256
  }
232
257
  }
233
258
 
259
+ // @internal
234
260
  public drawPoints(...points: Point2[]) {
235
261
  const pointRadius = 10;
236
262
 
@@ -255,6 +281,7 @@ export default class CanvasRenderer extends AbstractRenderer {
255
281
  }
256
282
  }
257
283
 
284
+ // @internal
258
285
  public isTooSmallToRender(rect: Rect2): boolean {
259
286
  // Should we ignore all objects within this object's bbox?
260
287
  const diagonal = this.getCanvasToScreenTransform().transformVec3(rect.size);
@@ -14,6 +14,12 @@ import AbstractRenderer, { RenderableImage, RenderablePathSpec } from './Abstrac
14
14
  export const renderedStylesheetId = 'js-draw-style-sheet';
15
15
 
16
16
  const svgNameSpace = 'http://www.w3.org/2000/svg';
17
+
18
+ /**
19
+ * Renders onto an `SVGElement`.
20
+ *
21
+ * @see {@link Editor.toSVG}
22
+ */
17
23
  export default class SVGRenderer extends AbstractRenderer {
18
24
  private lastPathStyle: RenderingStyle|null = null;
19
25
  private lastPathString: string[] = [];
@@ -21,7 +27,12 @@ export default class SVGRenderer extends AbstractRenderer {
21
27
 
22
28
  private overwrittenAttrs: Record<string, string|null> = {};
23
29
 
24
- // Renders onto `elem`. If `sanitize`, don't render potentially untrusted data.
30
+ /**
31
+ * Creates a renderer that renders onto `elem`. If `sanitize`, don't render potentially untrusted data.
32
+ *
33
+ * `viewport` is used to determine the translation/rotation/scaling/output size of the rendered
34
+ * data.
35
+ */
25
36
  public constructor(private elem: SVGSVGElement, viewport: Viewport, private sanitize: boolean = false) {
26
37
  super(viewport);
27
38
  this.clear();
@@ -320,4 +331,24 @@ export default class SVGRenderer extends AbstractRenderer {
320
331
  public isTooSmallToRender(_rect: Rect2): boolean {
321
332
  return false;
322
333
  }
334
+
335
+ // Creates a new SVG element and SVGRenerer with attributes set for the given Viewport.
336
+ public static fromViewport(viewport: Viewport, sanitize: boolean = true) {
337
+ const svgNameSpace = 'http://www.w3.org/2000/svg';
338
+ const result = document.createElementNS(svgNameSpace, 'svg');
339
+
340
+ const rect = viewport.getScreenRectSize();
341
+ // rect.x -> size of rect in x direction, rect.y -> size of rect in y direction.
342
+ result.setAttribute('viewBox', [0, 0, rect.x, rect.y].map(part => toRoundedString(part)).join(' '));
343
+ result.setAttribute('width', toRoundedString(rect.x));
344
+ result.setAttribute('height', toRoundedString(rect.y));
345
+
346
+ // Ensure the image can be identified as an SVG if downloaded.
347
+ // See https://jwatt.org/svg/authoring/
348
+ result.setAttribute('version', '1.1');
349
+ result.setAttribute('baseProfile', 'full');
350
+ result.setAttribute('xmlns', svgNameSpace);
351
+
352
+ return { element: result, renderer: new SVGRenderer(result, viewport, sanitize) };
353
+ }
323
354
  }
@@ -0,0 +1,3 @@
1
+
2
+ export { default as sendPenEvent } from './sendPenEvent';
3
+ export { default as sendTouchEvent } from './sendTouchEvent';
@@ -0,0 +1,31 @@
1
+ import Editor from '../Editor';
2
+ import { Point2 } from '../math/Vec2';
3
+ import Pointer from '../Pointer';
4
+ import { InputEvtType } from '../types';
5
+
6
+ /**
7
+ * Dispatch a pen event to the currently selected tool.
8
+ * Intended for unit tests.
9
+ *
10
+ * @see {@link sendTouchEvent}
11
+ */
12
+ const sendPenEvent = (
13
+ editor: Editor,
14
+ eventType: InputEvtType.PointerDownEvt|InputEvtType.PointerMoveEvt|InputEvtType.PointerUpEvt,
15
+ point: Point2,
16
+
17
+ allPointers?: Pointer[]
18
+ ) => {
19
+ const mainPointer = Pointer.ofCanvasPoint(
20
+ point, eventType !== InputEvtType.PointerUpEvt, editor.viewport
21
+ );
22
+
23
+ editor.toolController.dispatchInputEvent({
24
+ kind: eventType,
25
+ allPointers: allPointers ?? [
26
+ mainPointer,
27
+ ],
28
+ current: mainPointer,
29
+ });
30
+ };
31
+ export default sendPenEvent;
@@ -3,7 +3,42 @@ import { Vec2 } from '../math/Vec2';
3
3
  import Pointer, { PointerDevice } from '../Pointer';
4
4
  import { InputEvtType } from '../types';
5
5
 
6
-
6
+ /**
7
+ * Dispatch a touch event to the currently selected tool. Intended for unit tests.
8
+ *
9
+ * @see {@link sendPenEvent}
10
+ *
11
+ * @example
12
+ * **Simulating a horizontal swipe gesture:**
13
+ * ```ts
14
+ * sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
15
+ * for (let i = 1; i <= 10; i++) {
16
+ * jest.advanceTimersByTime(10);
17
+ * sendTouchEvent(editor, InputEvtType.PointerMoveEvt, Vec2.of(i * 10, 0));
18
+ * }
19
+ * ```
20
+ *
21
+ * @example
22
+ * **Simulating a pinch gesture.** This example assumes that you're using [Jest with timer mocks enabled](https://jestjs.io/docs/timer-mocks).
23
+ * ```ts
24
+ * let firstPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
25
+ * let secondPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(100, 0), [ firstPointer ]);
26
+ *
27
+ * // Simulate a pinch
28
+ * const maxIterations = 10;
29
+ * for (let i = 0; i < maxIterations; i++) {
30
+ * // Use the unit testing framework's tool for increasing the current time
31
+ * // returned by (new Date()).getTime(), etc.
32
+ * jest.advanceTimersByTime(100);
33
+ *
34
+ * const point1 = Vec2.of(-i * 5, 0);
35
+ * const point2 = Vec2.of(i * 5 + 100, 0);
36
+ *
37
+ * firstPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point1, [ secondPointer ]);
38
+ * secondPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point2, [ firstPointer ]);
39
+ * }
40
+ * ```
41
+ */
7
42
  const sendTouchEvent = (
8
43
  editor: Editor,
9
44
  eventType: InputEvtType.PointerDownEvt|InputEvtType.PointerMoveEvt|InputEvtType.PointerUpEvt,
@@ -206,3 +206,8 @@
206
206
  background-color: var(--secondary-background-color);
207
207
  --icon-color: var(--secondary-foreground-color);
208
208
  }
209
+
210
+ .toolbar-spacedList > * {
211
+ padding-bottom: 5px;
212
+ padding-top: 5px;
213
+ }
@@ -3,6 +3,7 @@ import Editor from '../../Editor';
3
3
  import { EditorImageEventType } from '../../EditorImage';
4
4
  import Rect2 from '../../math/Rect2';
5
5
  import { EditorEventType } from '../../types';
6
+ import { toolbarCSSPrefix } from '../HTMLToolbar';
6
7
  import { ToolbarLocalization } from '../localization';
7
8
  import makeColorInput from '../makeColorInput';
8
9
  import BaseWidget from './BaseWidget';
@@ -89,6 +90,7 @@ export default class DocumentPropertiesWidget extends BaseWidget {
89
90
 
90
91
  protected fillDropdown(dropdown: HTMLElement): boolean {
91
92
  const container = document.createElement('div');
93
+ container.classList.add(`${toolbarCSSPrefix}spacedList`);
92
94
 
93
95
  const backgroundColorRow = document.createElement('div');
94
96
  const backgroundColorLabel = document.createElement('label');
@@ -101,7 +103,7 @@ export default class DocumentPropertiesWidget extends BaseWidget {
101
103
  }
102
104
  });
103
105
 
104
- colorInput.id = `document-properties-color-input-${DocumentPropertiesWidget.idCounter++}`;
106
+ colorInput.id = `${toolbarCSSPrefix}docPropertiesColorInput-${DocumentPropertiesWidget.idCounter++}`;
105
107
  backgroundColorLabel.htmlFor = colorInput.id;
106
108
 
107
109
  backgroundColorRow.replaceChildren(backgroundColorLabel, backgroundColorInputContainer);
@@ -115,7 +117,7 @@ export default class DocumentPropertiesWidget extends BaseWidget {
115
117
  label.innerText = labelContent;
116
118
  input.type = 'number';
117
119
  input.min = '0';
118
- input.id = `document-properties-dimension-row-${DocumentPropertiesWidget.idCounter++}`;
120
+ input.id = `${toolbarCSSPrefix}docPropertiesDimensionRow-${DocumentPropertiesWidget.idCounter++}`;
119
121
  label.htmlFor = input.id;
120
122
 
121
123
  spacer.style.flexGrow = '1';
@@ -134,6 +134,7 @@ export default class PenToolWidget extends BaseToolWidget {
134
134
  private static idCounter: number = 0;
135
135
  protected fillDropdown(dropdown: HTMLElement): boolean {
136
136
  const container = document.createElement('div');
137
+ container.classList.add(`${toolbarCSSPrefix}spacedList`);
137
138
 
138
139
  const thicknessRow = document.createElement('div');
139
140
  const objectTypeRow = document.createElement('div');
@@ -32,6 +32,8 @@ export default class TextToolWidget extends BaseToolWidget {
32
32
 
33
33
  private static idCounter: number = 0;
34
34
  protected fillDropdown(dropdown: HTMLElement): boolean {
35
+ const container = document.createElement('div');
36
+ container.classList.add(`${toolbarCSSPrefix}spacedList`);
35
37
  const fontRow = document.createElement('div');
36
38
  const colorRow = document.createElement('div');
37
39
  const sizeRow = document.createElement('div');
@@ -108,7 +110,8 @@ export default class TextToolWidget extends BaseToolWidget {
108
110
  };
109
111
  this.updateDropdownInputs();
110
112
 
111
- dropdown.replaceChildren(colorRow, sizeRow, fontRow);
113
+ container.replaceChildren(colorRow, sizeRow, fontRow);
114
+ dropdown.appendChild(container);
112
115
  return true;
113
116
  }
114
117