js-draw 0.25.1 → 1.0.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 (750) hide show
  1. package/README.md +80 -26
  2. package/build-config.json +22 -21
  3. package/dist/Editor.css +1281 -0
  4. package/dist/bundle.js +3 -3
  5. package/dist/bundledStyles.js +1 -1
  6. package/dist/cjs/Editor.d.ts +91 -12
  7. package/dist/cjs/Editor.js +619 -590
  8. package/dist/cjs/EditorImage.d.ts +5 -2
  9. package/dist/cjs/EditorImage.js +258 -297
  10. package/dist/cjs/EventDispatcher.js +17 -19
  11. package/dist/cjs/Pointer.d.ts +3 -1
  12. package/dist/cjs/Pointer.js +41 -44
  13. package/dist/cjs/SVGLoader.d.ts +7 -1
  14. package/dist/cjs/SVGLoader.js +373 -474
  15. package/dist/cjs/UndoRedoHistory.js +28 -40
  16. package/dist/cjs/Viewport.d.ts +1 -4
  17. package/dist/cjs/Viewport.js +150 -193
  18. package/dist/cjs/bundle/bundled.js +4 -1
  19. package/dist/cjs/commands/Command.js +22 -49
  20. package/dist/cjs/commands/Duplicate.js +28 -44
  21. package/dist/cjs/commands/Erase.js +36 -54
  22. package/dist/cjs/commands/SerializableCommand.js +20 -35
  23. package/dist/cjs/commands/UnresolvedCommand.js +14 -29
  24. package/dist/cjs/commands/invertCommand.js +29 -51
  25. package/dist/cjs/commands/lib.js +9 -6
  26. package/dist/cjs/commands/localization.d.ts +1 -1
  27. package/dist/cjs/commands/localization.js +9 -9
  28. package/dist/cjs/commands/uniteCommands.js +57 -87
  29. package/dist/cjs/components/AbstractComponent.d.ts +11 -3
  30. package/dist/cjs/components/AbstractComponent.js +141 -169
  31. package/dist/cjs/components/BackgroundComponent.d.ts +3 -6
  32. package/dist/cjs/components/BackgroundComponent.js +124 -149
  33. package/dist/cjs/components/ImageComponent.d.ts +3 -5
  34. package/dist/cjs/components/ImageComponent.js +95 -175
  35. package/dist/cjs/components/RestylableComponent.d.ts +1 -1
  36. package/dist/cjs/components/RestylableComponent.js +41 -56
  37. package/dist/cjs/components/SVGGlobalAttributesObject.d.ts +1 -3
  38. package/dist/cjs/components/SVGGlobalAttributesObject.js +34 -51
  39. package/dist/cjs/components/Stroke.d.ts +4 -6
  40. package/dist/cjs/components/Stroke.js +95 -121
  41. package/dist/cjs/components/TextComponent.d.ts +2 -4
  42. package/dist/cjs/components/TextComponent.js +189 -234
  43. package/dist/cjs/components/UnknownSVGObject.d.ts +1 -3
  44. package/dist/cjs/components/UnknownSVGObject.js +30 -43
  45. package/dist/cjs/components/builders/ArrowBuilder.d.ts +1 -1
  46. package/dist/cjs/components/builders/ArrowBuilder.js +43 -42
  47. package/dist/cjs/components/builders/CircleBuilder.js +43 -43
  48. package/dist/cjs/components/builders/FreehandLineBuilder.d.ts +3 -2
  49. package/dist/cjs/components/builders/FreehandLineBuilder.js +73 -86
  50. package/dist/cjs/components/builders/LineBuilder.d.ts +1 -1
  51. package/dist/cjs/components/builders/LineBuilder.js +38 -36
  52. package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +1 -1
  53. package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.js +131 -139
  54. package/dist/cjs/components/builders/RectangleBuilder.d.ts +1 -1
  55. package/dist/cjs/components/builders/RectangleBuilder.js +31 -31
  56. package/dist/cjs/components/builders/types.d.ts +1 -1
  57. package/dist/cjs/components/lib.d.ts +3 -1
  58. package/dist/cjs/components/lib.js +10 -7
  59. package/dist/cjs/components/localization.js +4 -4
  60. package/dist/cjs/components/util/StrokeSmoother.d.ts +1 -2
  61. package/dist/cjs/components/util/StrokeSmoother.js +67 -72
  62. package/dist/cjs/components/util/describeComponentList.d.ts +1 -1
  63. package/dist/cjs/components/util/describeComponentList.js +4 -5
  64. package/dist/cjs/dialogs/makeAboutDialog.d.ts +15 -0
  65. package/dist/cjs/dialogs/makeAboutDialog.js +54 -0
  66. package/dist/cjs/inputEvents.d.ts +84 -0
  67. package/dist/cjs/inputEvents.js +40 -0
  68. package/dist/cjs/lib.d.ts +29 -13
  69. package/dist/cjs/lib.js +38 -23
  70. package/dist/cjs/localization.js +19 -18
  71. package/dist/cjs/localizations/de.js +117 -13
  72. package/dist/cjs/localizations/en.js +4 -13
  73. package/dist/cjs/localizations/es.js +62 -23
  74. package/dist/cjs/localizations/getLocalizationTable.js +15 -13
  75. package/dist/cjs/rendering/Display.d.ts +1 -2
  76. package/dist/cjs/rendering/Display.js +70 -83
  77. package/dist/cjs/rendering/RenderablePathSpec.d.ts +15 -0
  78. package/dist/cjs/rendering/RenderablePathSpec.js +70 -0
  79. package/dist/cjs/rendering/RenderingStyle.d.ts +4 -4
  80. package/dist/cjs/rendering/RenderingStyle.js +18 -28
  81. package/dist/cjs/rendering/TextRenderingStyle.d.ts +10 -10
  82. package/dist/cjs/rendering/TextRenderingStyle.js +13 -18
  83. package/dist/cjs/rendering/caching/CacheRecord.d.ts +1 -2
  84. package/dist/cjs/rendering/caching/CacheRecord.js +20 -22
  85. package/dist/cjs/rendering/caching/CacheRecordManager.d.ts +1 -1
  86. package/dist/cjs/rendering/caching/CacheRecordManager.js +17 -15
  87. package/dist/cjs/rendering/caching/RenderingCache.js +19 -19
  88. package/dist/cjs/rendering/caching/RenderingCacheNode.d.ts +1 -1
  89. package/dist/cjs/rendering/caching/RenderingCacheNode.js +98 -118
  90. package/dist/cjs/rendering/caching/testUtils.js +24 -23
  91. package/dist/cjs/rendering/caching/types.d.ts +3 -3
  92. package/dist/cjs/rendering/lib.js +8 -5
  93. package/dist/cjs/rendering/localization.js +5 -5
  94. package/dist/cjs/rendering/renderers/AbstractRenderer.d.ts +2 -11
  95. package/dist/cjs/rendering/renderers/AbstractRenderer.js +53 -57
  96. package/dist/cjs/rendering/renderers/CanvasRenderer.d.ts +3 -5
  97. package/dist/cjs/rendering/renderers/CanvasRenderer.js +91 -106
  98. package/dist/cjs/rendering/renderers/DummyRenderer.d.ts +1 -4
  99. package/dist/cjs/rendering/renderers/DummyRenderer.js +56 -76
  100. package/dist/cjs/rendering/renderers/SVGRenderer.d.ts +5 -5
  101. package/dist/cjs/rendering/renderers/SVGRenderer.js +194 -176
  102. package/dist/cjs/rendering/renderers/TextOnlyRenderer.d.ts +1 -3
  103. package/dist/cjs/rendering/renderers/TextOnlyRenderer.js +47 -72
  104. package/dist/cjs/shortcuts/KeyBinding.d.ts +5 -0
  105. package/dist/cjs/shortcuts/KeyBinding.js +94 -70
  106. package/dist/cjs/shortcuts/KeyboardShortcutManager.d.ts +1 -1
  107. package/dist/cjs/shortcuts/KeyboardShortcutManager.js +36 -45
  108. package/dist/cjs/shortcuts/lib.js +5 -2
  109. package/dist/cjs/testing/createEditor.js +7 -4
  110. package/dist/cjs/testing/getUniquePointerId.js +4 -5
  111. package/dist/cjs/testing/lib.js +5 -2
  112. package/dist/cjs/testing/sendPenEvent.d.ts +2 -2
  113. package/dist/cjs/testing/sendPenEvent.js +10 -7
  114. package/dist/cjs/testing/sendTouchEvent.d.ts +2 -2
  115. package/dist/cjs/testing/sendTouchEvent.js +34 -16
  116. package/dist/cjs/toolbar/AbstractToolbar.d.ts +166 -0
  117. package/dist/cjs/toolbar/AbstractToolbar.js +410 -0
  118. package/dist/cjs/toolbar/DropdownToolbar.d.ts +43 -0
  119. package/dist/cjs/toolbar/DropdownToolbar.js +176 -0
  120. package/dist/cjs/toolbar/EdgeToolbar.d.ts +47 -0
  121. package/dist/cjs/toolbar/EdgeToolbar.js +422 -0
  122. package/dist/cjs/toolbar/IconProvider.d.ts +54 -30
  123. package/dist/cjs/toolbar/IconProvider.js +652 -224
  124. package/dist/cjs/toolbar/constants.d.ts +1 -0
  125. package/dist/cjs/toolbar/constants.js +4 -0
  126. package/dist/cjs/toolbar/lib.d.ts +4 -2
  127. package/dist/cjs/toolbar/lib.js +10 -3
  128. package/dist/cjs/toolbar/localization.d.ts +9 -2
  129. package/dist/cjs/toolbar/localization.js +26 -19
  130. package/dist/cjs/toolbar/types.d.ts +7 -0
  131. package/dist/cjs/toolbar/widgets/ActionButtonWidget.d.ts +1 -1
  132. package/dist/cjs/toolbar/widgets/ActionButtonWidget.js +23 -39
  133. package/dist/cjs/toolbar/widgets/BaseToolWidget.d.ts +1 -1
  134. package/dist/cjs/toolbar/widgets/BaseToolWidget.js +35 -37
  135. package/dist/cjs/toolbar/widgets/BaseWidget.d.ts +60 -5
  136. package/dist/cjs/toolbar/widgets/BaseWidget.js +232 -177
  137. package/dist/cjs/toolbar/widgets/DocumentPropertiesWidget.js +130 -117
  138. package/dist/cjs/toolbar/widgets/EraserToolWidget.d.ts +1 -3
  139. package/dist/cjs/toolbar/widgets/EraserToolWidget.js +45 -73
  140. package/dist/cjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
  141. package/dist/cjs/toolbar/widgets/HandToolWidget.js +126 -141
  142. package/dist/cjs/toolbar/widgets/InsertImageWidget.d.ts +9 -7
  143. package/dist/cjs/toolbar/widgets/InsertImageWidget.js +147 -212
  144. package/dist/cjs/toolbar/widgets/OverflowWidget.js +33 -61
  145. package/dist/cjs/toolbar/widgets/PenToolWidget.d.ts +8 -1
  146. package/dist/cjs/toolbar/widgets/PenToolWidget.js +162 -234
  147. package/dist/cjs/toolbar/widgets/SelectionToolWidget.d.ts +3 -1
  148. package/dist/cjs/toolbar/widgets/SelectionToolWidget.js +105 -177
  149. package/dist/cjs/toolbar/widgets/TextToolWidget.js +64 -87
  150. package/dist/cjs/toolbar/widgets/components/makeColorInput.d.ts +10 -0
  151. package/dist/cjs/toolbar/{makeColorInput.js → widgets/components/makeColorInput.js} +57 -34
  152. package/dist/cjs/toolbar/widgets/components/makeFileInput.d.ts +12 -0
  153. package/dist/cjs/toolbar/widgets/components/makeFileInput.js +111 -0
  154. package/dist/cjs/toolbar/widgets/components/makeGridSelector.d.ts +24 -0
  155. package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +127 -0
  156. package/dist/cjs/toolbar/widgets/components/makeSeparator.d.ts +7 -0
  157. package/dist/cjs/toolbar/widgets/components/makeSeparator.js +16 -0
  158. package/dist/cjs/toolbar/widgets/components/makeThicknessSlider.d.ts +8 -0
  159. package/dist/cjs/toolbar/widgets/components/makeThicknessSlider.js +47 -0
  160. package/dist/cjs/toolbar/widgets/keybindings.js +8 -5
  161. package/dist/cjs/toolbar/widgets/layout/DropdownLayoutManager.d.ts +21 -0
  162. package/dist/cjs/toolbar/widgets/layout/DropdownLayoutManager.js +199 -0
  163. package/dist/cjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.d.ts +14 -0
  164. package/dist/cjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.js +60 -0
  165. package/dist/cjs/toolbar/widgets/layout/types.d.ts +63 -0
  166. package/dist/cjs/toolbar/widgets/layout/types.js +2 -0
  167. package/dist/cjs/toolbar/widgets/lib.d.ts +1 -1
  168. package/dist/cjs/toolbar/widgets/lib.js +15 -11
  169. package/dist/cjs/tools/BaseTool.d.ts +28 -9
  170. package/dist/cjs/tools/BaseTool.js +128 -51
  171. package/dist/cjs/tools/Eraser.d.ts +8 -1
  172. package/dist/cjs/tools/Eraser.js +82 -92
  173. package/dist/cjs/tools/FindTool.d.ts +1 -1
  174. package/dist/cjs/tools/FindTool.js +61 -77
  175. package/dist/cjs/tools/InputFilter/FunctionMapper.d.ts +12 -0
  176. package/dist/cjs/tools/InputFilter/FunctionMapper.js +21 -0
  177. package/dist/cjs/tools/InputFilter/InputMapper.d.ts +23 -0
  178. package/dist/cjs/tools/InputFilter/InputMapper.js +38 -0
  179. package/dist/cjs/tools/InputFilter/InputPipeline.d.ts +15 -0
  180. package/dist/cjs/tools/InputFilter/InputPipeline.js +54 -0
  181. package/dist/cjs/tools/InputFilter/InputStabilizer.d.ts +29 -0
  182. package/dist/cjs/tools/InputFilter/InputStabilizer.js +181 -0
  183. package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.d.ts +21 -0
  184. package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.js +84 -0
  185. package/dist/cjs/tools/PanZoom.d.ts +4 -2
  186. package/dist/cjs/tools/PanZoom.js +186 -248
  187. package/dist/cjs/tools/PasteHandler.d.ts +1 -1
  188. package/dist/cjs/tools/PasteHandler.js +49 -148
  189. package/dist/cjs/tools/Pen.d.ts +12 -11
  190. package/dist/cjs/tools/Pen.js +123 -158
  191. package/dist/cjs/tools/PipetteTool.d.ts +11 -2
  192. package/dist/cjs/tools/PipetteTool.js +51 -48
  193. package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +1 -1
  194. package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.js +15 -30
  195. package/dist/cjs/tools/SelectionTool/Selection.d.ts +5 -5
  196. package/dist/cjs/tools/SelectionTool/Selection.js +308 -415
  197. package/dist/cjs/tools/SelectionTool/SelectionHandle.d.ts +15 -5
  198. package/dist/cjs/tools/SelectionTool/SelectionHandle.js +63 -37
  199. package/dist/cjs/tools/SelectionTool/SelectionTool.d.ts +4 -4
  200. package/dist/cjs/tools/SelectionTool/SelectionTool.js +164 -187
  201. package/dist/cjs/tools/SelectionTool/TransformMode.d.ts +1 -1
  202. package/dist/cjs/tools/SelectionTool/TransformMode.js +65 -66
  203. package/dist/cjs/tools/SoundUITool.d.ts +2 -1
  204. package/dist/cjs/tools/SoundUITool.js +70 -84
  205. package/dist/cjs/tools/TextTool.d.ts +5 -3
  206. package/dist/cjs/tools/TextTool.js +169 -173
  207. package/dist/cjs/tools/ToolController.d.ts +16 -2
  208. package/dist/cjs/tools/ToolController.js +124 -100
  209. package/dist/cjs/tools/ToolEnabledGroup.js +6 -9
  210. package/dist/cjs/tools/ToolSwitcherShortcut.d.ts +1 -1
  211. package/dist/cjs/tools/ToolSwitcherShortcut.js +16 -32
  212. package/dist/cjs/tools/ToolbarShortcutHandler.d.ts +1 -1
  213. package/dist/cjs/tools/ToolbarShortcutHandler.js +17 -33
  214. package/dist/cjs/tools/UndoRedoShortcut.d.ts +1 -1
  215. package/dist/cjs/tools/UndoRedoShortcut.js +12 -27
  216. package/dist/cjs/tools/keybindings.js +21 -18
  217. package/dist/cjs/tools/lib.js +17 -14
  218. package/dist/cjs/tools/localization.d.ts +2 -1
  219. package/dist/cjs/tools/localization.js +8 -7
  220. package/dist/cjs/types.d.ts +22 -80
  221. package/dist/cjs/types.js +8 -16
  222. package/dist/cjs/util/ReactiveValue.d.ts +65 -0
  223. package/dist/cjs/util/ReactiveValue.js +166 -0
  224. package/dist/cjs/util/assertions.js +5 -8
  225. package/dist/cjs/util/fileToBase64.js +6 -6
  226. package/dist/cjs/util/guessKeyCodeFromKey.d.ts +9 -0
  227. package/dist/cjs/util/guessKeyCodeFromKey.js +32 -0
  228. package/dist/cjs/util/listPrefixMatch.d.ts +6 -0
  229. package/dist/cjs/util/listPrefixMatch.js +17 -0
  230. package/dist/cjs/util/stopPropagationOfScrollingWheelEvents.d.ts +2 -0
  231. package/dist/cjs/util/stopPropagationOfScrollingWheelEvents.js +17 -0
  232. package/dist/cjs/util/untilNextAnimationFrame.js +3 -3
  233. package/dist/cjs/util/waitForAll.js +3 -3
  234. package/dist/cjs/util/waitForTimeout.js +3 -3
  235. package/dist/cjs/version.d.ts +4 -0
  236. package/dist/cjs/version.js +5 -0
  237. package/dist/mjs/Editor.d.ts +91 -12
  238. package/dist/mjs/Editor.mjs +565 -563
  239. package/dist/mjs/EditorImage.d.ts +5 -2
  240. package/dist/mjs/EditorImage.mjs +248 -291
  241. package/dist/mjs/EventDispatcher.mjs +17 -20
  242. package/dist/mjs/Pointer.d.ts +3 -1
  243. package/dist/mjs/Pointer.mjs +40 -44
  244. package/dist/mjs/SVGLoader.d.ts +7 -1
  245. package/dist/mjs/SVGLoader.mjs +338 -466
  246. package/dist/mjs/UndoRedoHistory.mjs +27 -39
  247. package/dist/mjs/Viewport.d.ts +1 -4
  248. package/dist/mjs/Viewport.mjs +139 -187
  249. package/dist/mjs/commands/Command.mjs +21 -49
  250. package/dist/mjs/commands/Duplicate.mjs +22 -41
  251. package/dist/mjs/commands/Erase.mjs +30 -51
  252. package/dist/mjs/commands/SerializableCommand.mjs +16 -34
  253. package/dist/mjs/commands/UnresolvedCommand.mjs +10 -29
  254. package/dist/mjs/commands/invertCommand.mjs +24 -49
  255. package/dist/mjs/commands/localization.d.ts +1 -1
  256. package/dist/mjs/commands/localization.mjs +10 -10
  257. package/dist/mjs/commands/uniteCommands.mjs +52 -85
  258. package/dist/mjs/components/AbstractComponent.d.ts +11 -3
  259. package/dist/mjs/components/AbstractComponent.mjs +135 -166
  260. package/dist/mjs/components/BackgroundComponent.d.ts +3 -6
  261. package/dist/mjs/components/BackgroundComponent.mjs +107 -136
  262. package/dist/mjs/components/ImageComponent.d.ts +3 -5
  263. package/dist/mjs/components/ImageComponent.mjs +90 -174
  264. package/dist/mjs/components/RestylableComponent.d.ts +1 -1
  265. package/dist/mjs/components/RestylableComponent.mjs +35 -53
  266. package/dist/mjs/components/SVGGlobalAttributesObject.d.ts +1 -3
  267. package/dist/mjs/components/SVGGlobalAttributesObject.mjs +29 -50
  268. package/dist/mjs/components/Stroke.d.ts +4 -6
  269. package/dist/mjs/components/Stroke.mjs +89 -119
  270. package/dist/mjs/components/TextComponent.d.ts +2 -4
  271. package/dist/mjs/components/TextComponent.mjs +180 -228
  272. package/dist/mjs/components/UnknownSVGObject.d.ts +1 -3
  273. package/dist/mjs/components/UnknownSVGObject.mjs +26 -43
  274. package/dist/mjs/components/builders/ArrowBuilder.d.ts +1 -1
  275. package/dist/mjs/components/builders/ArrowBuilder.mjs +32 -35
  276. package/dist/mjs/components/builders/CircleBuilder.mjs +35 -38
  277. package/dist/mjs/components/builders/FreehandLineBuilder.d.ts +3 -2
  278. package/dist/mjs/components/builders/FreehandLineBuilder.mjs +52 -69
  279. package/dist/mjs/components/builders/LineBuilder.d.ts +1 -1
  280. package/dist/mjs/components/builders/LineBuilder.mjs +30 -32
  281. package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +1 -1
  282. package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.mjs +103 -115
  283. package/dist/mjs/components/builders/RectangleBuilder.d.ts +1 -1
  284. package/dist/mjs/components/builders/RectangleBuilder.mjs +27 -31
  285. package/dist/mjs/components/builders/types.d.ts +1 -1
  286. package/dist/mjs/components/lib.d.ts +3 -1
  287. package/dist/mjs/components/lib.mjs +1 -1
  288. package/dist/mjs/components/localization.mjs +5 -5
  289. package/dist/mjs/components/util/StrokeSmoother.d.ts +1 -2
  290. package/dist/mjs/components/util/StrokeSmoother.mjs +63 -69
  291. package/dist/mjs/components/util/describeComponentList.d.ts +1 -1
  292. package/dist/mjs/components/util/describeComponentList.mjs +4 -5
  293. package/dist/mjs/dialogs/makeAboutDialog.d.ts +15 -0
  294. package/dist/mjs/dialogs/makeAboutDialog.mjs +52 -0
  295. package/dist/mjs/inputEvents.d.ts +84 -0
  296. package/dist/mjs/inputEvents.mjs +34 -0
  297. package/dist/mjs/lib.d.ts +29 -13
  298. package/dist/mjs/lib.mjs +30 -13
  299. package/dist/mjs/localization.mjs +14 -13
  300. package/dist/mjs/localizations/de.mjs +116 -12
  301. package/dist/mjs/localizations/en.mjs +3 -12
  302. package/dist/mjs/localizations/es.mjs +61 -22
  303. package/dist/mjs/localizations/getLocalizationTable.mjs +12 -13
  304. package/dist/mjs/rendering/Display.d.ts +1 -2
  305. package/dist/mjs/rendering/Display.mjs +62 -79
  306. package/dist/mjs/rendering/RenderablePathSpec.d.ts +15 -0
  307. package/dist/mjs/rendering/RenderablePathSpec.mjs +64 -0
  308. package/dist/mjs/rendering/RenderingStyle.d.ts +4 -4
  309. package/dist/mjs/rendering/RenderingStyle.mjs +16 -26
  310. package/dist/mjs/rendering/TextRenderingStyle.d.ts +10 -10
  311. package/dist/mjs/rendering/TextRenderingStyle.mjs +12 -17
  312. package/dist/mjs/rendering/caching/CacheRecord.d.ts +1 -2
  313. package/dist/mjs/rendering/caching/CacheRecord.mjs +20 -23
  314. package/dist/mjs/rendering/caching/CacheRecordManager.d.ts +1 -1
  315. package/dist/mjs/rendering/caching/CacheRecordManager.mjs +13 -15
  316. package/dist/mjs/rendering/caching/RenderingCache.mjs +13 -17
  317. package/dist/mjs/rendering/caching/RenderingCacheNode.d.ts +1 -1
  318. package/dist/mjs/rendering/caching/RenderingCacheNode.mjs +94 -115
  319. package/dist/mjs/rendering/caching/testUtils.mjs +19 -21
  320. package/dist/mjs/rendering/caching/types.d.ts +3 -3
  321. package/dist/mjs/rendering/localization.mjs +6 -6
  322. package/dist/mjs/rendering/renderers/AbstractRenderer.d.ts +2 -11
  323. package/dist/mjs/rendering/renderers/AbstractRenderer.mjs +47 -52
  324. package/dist/mjs/rendering/renderers/CanvasRenderer.d.ts +3 -5
  325. package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +84 -103
  326. package/dist/mjs/rendering/renderers/DummyRenderer.d.ts +1 -4
  327. package/dist/mjs/rendering/renderers/DummyRenderer.mjs +51 -75
  328. package/dist/mjs/rendering/renderers/SVGRenderer.d.ts +5 -5
  329. package/dist/mjs/rendering/renderers/SVGRenderer.mjs +185 -171
  330. package/dist/mjs/rendering/renderers/TextOnlyRenderer.d.ts +1 -3
  331. package/dist/mjs/rendering/renderers/TextOnlyRenderer.mjs +43 -72
  332. package/dist/mjs/shortcuts/KeyBinding.d.ts +5 -0
  333. package/dist/mjs/shortcuts/KeyBinding.mjs +94 -71
  334. package/dist/mjs/shortcuts/KeyboardShortcutManager.d.ts +1 -1
  335. package/dist/mjs/shortcuts/KeyboardShortcutManager.mjs +32 -44
  336. package/dist/mjs/testing/createEditor.mjs +2 -2
  337. package/dist/mjs/testing/getUniquePointerId.mjs +4 -5
  338. package/dist/mjs/testing/sendPenEvent.d.ts +2 -2
  339. package/dist/mjs/testing/sendPenEvent.mjs +5 -5
  340. package/dist/mjs/testing/sendTouchEvent.d.ts +2 -2
  341. package/dist/mjs/testing/sendTouchEvent.mjs +8 -16
  342. package/dist/mjs/toolbar/AbstractToolbar.d.ts +166 -0
  343. package/dist/mjs/toolbar/AbstractToolbar.mjs +405 -0
  344. package/dist/mjs/toolbar/DropdownToolbar.d.ts +43 -0
  345. package/dist/mjs/toolbar/DropdownToolbar.mjs +168 -0
  346. package/dist/mjs/toolbar/EdgeToolbar.d.ts +47 -0
  347. package/dist/mjs/toolbar/EdgeToolbar.mjs +414 -0
  348. package/dist/mjs/toolbar/IconProvider.d.ts +54 -30
  349. package/dist/mjs/toolbar/IconProvider.mjs +644 -219
  350. package/dist/mjs/toolbar/constants.d.ts +1 -0
  351. package/dist/mjs/toolbar/constants.mjs +1 -0
  352. package/dist/mjs/toolbar/lib.d.ts +4 -2
  353. package/dist/mjs/toolbar/lib.mjs +3 -1
  354. package/dist/mjs/toolbar/localization.d.ts +9 -2
  355. package/dist/mjs/toolbar/localization.mjs +27 -20
  356. package/dist/mjs/toolbar/types.d.ts +7 -0
  357. package/dist/mjs/toolbar/widgets/ActionButtonWidget.d.ts +1 -1
  358. package/dist/mjs/toolbar/widgets/ActionButtonWidget.mjs +19 -39
  359. package/dist/mjs/toolbar/widgets/BaseToolWidget.d.ts +1 -1
  360. package/dist/mjs/toolbar/widgets/BaseToolWidget.mjs +30 -36
  361. package/dist/mjs/toolbar/widgets/BaseWidget.d.ts +60 -5
  362. package/dist/mjs/toolbar/widgets/BaseWidget.mjs +227 -176
  363. package/dist/mjs/toolbar/widgets/DocumentPropertiesWidget.mjs +98 -111
  364. package/dist/mjs/toolbar/widgets/EraserToolWidget.d.ts +1 -3
  365. package/dist/mjs/toolbar/widgets/EraserToolWidget.mjs +41 -73
  366. package/dist/mjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
  367. package/dist/mjs/toolbar/widgets/HandToolWidget.mjs +94 -136
  368. package/dist/mjs/toolbar/widgets/InsertImageWidget.d.ts +9 -7
  369. package/dist/mjs/toolbar/widgets/InsertImageWidget.mjs +140 -208
  370. package/dist/mjs/toolbar/widgets/OverflowWidget.mjs +30 -62
  371. package/dist/mjs/toolbar/widgets/PenToolWidget.d.ts +8 -1
  372. package/dist/mjs/toolbar/widgets/PenToolWidget.mjs +150 -225
  373. package/dist/mjs/toolbar/widgets/SelectionToolWidget.d.ts +3 -1
  374. package/dist/mjs/toolbar/widgets/SelectionToolWidget.mjs +97 -173
  375. package/dist/mjs/toolbar/widgets/TextToolWidget.mjs +59 -85
  376. package/dist/mjs/toolbar/widgets/components/makeColorInput.d.ts +10 -0
  377. package/dist/mjs/toolbar/{makeColorInput.mjs → widgets/components/makeColorInput.mjs} +53 -33
  378. package/dist/mjs/toolbar/widgets/components/makeFileInput.d.ts +12 -0
  379. package/dist/mjs/toolbar/widgets/components/makeFileInput.mjs +106 -0
  380. package/dist/mjs/toolbar/widgets/components/makeGridSelector.d.ts +24 -0
  381. package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +122 -0
  382. package/dist/mjs/toolbar/widgets/components/makeSeparator.d.ts +7 -0
  383. package/dist/mjs/toolbar/widgets/components/makeSeparator.mjs +14 -0
  384. package/dist/mjs/toolbar/widgets/components/makeThicknessSlider.d.ts +8 -0
  385. package/dist/mjs/toolbar/widgets/components/makeThicknessSlider.mjs +45 -0
  386. package/dist/mjs/toolbar/widgets/keybindings.mjs +5 -5
  387. package/dist/mjs/toolbar/widgets/layout/DropdownLayoutManager.d.ts +21 -0
  388. package/dist/mjs/toolbar/widgets/layout/DropdownLayoutManager.mjs +193 -0
  389. package/dist/mjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.d.ts +14 -0
  390. package/dist/mjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.mjs +57 -0
  391. package/dist/mjs/toolbar/widgets/layout/types.d.ts +63 -0
  392. package/dist/mjs/toolbar/widgets/lib.d.ts +1 -1
  393. package/dist/mjs/toolbar/widgets/lib.mjs +1 -1
  394. package/dist/mjs/tools/BaseTool.d.ts +28 -9
  395. package/dist/mjs/tools/BaseTool.mjs +127 -50
  396. package/dist/mjs/tools/Eraser.d.ts +8 -1
  397. package/dist/mjs/tools/Eraser.mjs +72 -86
  398. package/dist/mjs/tools/FindTool.d.ts +1 -1
  399. package/dist/mjs/tools/FindTool.mjs +55 -75
  400. package/dist/mjs/tools/InputFilter/FunctionMapper.d.ts +12 -0
  401. package/dist/mjs/tools/InputFilter/FunctionMapper.mjs +15 -0
  402. package/dist/mjs/tools/InputFilter/InputMapper.d.ts +23 -0
  403. package/dist/mjs/tools/InputFilter/InputMapper.mjs +36 -0
  404. package/dist/mjs/tools/InputFilter/InputPipeline.d.ts +15 -0
  405. package/dist/mjs/tools/InputFilter/InputPipeline.mjs +49 -0
  406. package/dist/mjs/tools/InputFilter/InputStabilizer.d.ts +29 -0
  407. package/dist/mjs/tools/InputFilter/InputStabilizer.mjs +175 -0
  408. package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.d.ts +21 -0
  409. package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.mjs +78 -0
  410. package/dist/mjs/tools/PanZoom.d.ts +4 -2
  411. package/dist/mjs/tools/PanZoom.mjs +169 -235
  412. package/dist/mjs/tools/PasteHandler.d.ts +1 -1
  413. package/dist/mjs/tools/PasteHandler.mjs +42 -145
  414. package/dist/mjs/tools/Pen.d.ts +12 -11
  415. package/dist/mjs/tools/Pen.mjs +115 -154
  416. package/dist/mjs/tools/PipetteTool.d.ts +11 -2
  417. package/dist/mjs/tools/PipetteTool.mjs +47 -48
  418. package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +1 -1
  419. package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.mjs +9 -28
  420. package/dist/mjs/tools/SelectionTool/Selection.d.ts +5 -5
  421. package/dist/mjs/tools/SelectionTool/Selection.mjs +268 -401
  422. package/dist/mjs/tools/SelectionTool/SelectionHandle.d.ts +15 -5
  423. package/dist/mjs/tools/SelectionTool/SelectionHandle.mjs +62 -37
  424. package/dist/mjs/tools/SelectionTool/SelectionTool.d.ts +4 -4
  425. package/dist/mjs/tools/SelectionTool/SelectionTool.mjs +153 -179
  426. package/dist/mjs/tools/SelectionTool/TransformMode.d.ts +1 -1
  427. package/dist/mjs/tools/SelectionTool/TransformMode.mjs +52 -59
  428. package/dist/mjs/tools/SoundUITool.d.ts +2 -1
  429. package/dist/mjs/tools/SoundUITool.mjs +66 -84
  430. package/dist/mjs/tools/TextTool.d.ts +5 -3
  431. package/dist/mjs/tools/TextTool.mjs +155 -163
  432. package/dist/mjs/tools/ToolController.d.ts +16 -2
  433. package/dist/mjs/tools/ToolController.mjs +81 -84
  434. package/dist/mjs/tools/ToolEnabledGroup.mjs +6 -10
  435. package/dist/mjs/tools/ToolSwitcherShortcut.d.ts +1 -1
  436. package/dist/mjs/tools/ToolSwitcherShortcut.mjs +12 -32
  437. package/dist/mjs/tools/ToolbarShortcutHandler.d.ts +1 -1
  438. package/dist/mjs/tools/ToolbarShortcutHandler.mjs +13 -33
  439. package/dist/mjs/tools/UndoRedoShortcut.d.ts +1 -1
  440. package/dist/mjs/tools/UndoRedoShortcut.mjs +7 -26
  441. package/dist/mjs/tools/keybindings.mjs +34 -34
  442. package/dist/mjs/tools/localization.d.ts +2 -1
  443. package/dist/mjs/tools/localization.mjs +9 -8
  444. package/dist/mjs/types.d.ts +22 -80
  445. package/dist/mjs/types.mjs +7 -15
  446. package/dist/mjs/util/ReactiveValue.d.ts +65 -0
  447. package/dist/mjs/util/ReactiveValue.mjs +161 -0
  448. package/dist/mjs/util/assertions.mjs +5 -8
  449. package/dist/mjs/util/fileToBase64.mjs +6 -6
  450. package/dist/mjs/util/guessKeyCodeFromKey.d.ts +9 -0
  451. package/dist/mjs/util/guessKeyCodeFromKey.mjs +30 -0
  452. package/dist/mjs/util/listPrefixMatch.d.ts +6 -0
  453. package/dist/mjs/util/listPrefixMatch.mjs +15 -0
  454. package/dist/mjs/util/stopPropagationOfScrollingWheelEvents.d.ts +2 -0
  455. package/dist/mjs/util/stopPropagationOfScrollingWheelEvents.mjs +15 -0
  456. package/dist/mjs/util/untilNextAnimationFrame.mjs +3 -3
  457. package/dist/mjs/util/waitForAll.mjs +3 -3
  458. package/dist/mjs/util/waitForTimeout.mjs +3 -3
  459. package/dist/mjs/version.d.ts +4 -0
  460. package/dist/mjs/version.mjs +3 -0
  461. package/dist-test/test_imports/package.json +1 -1
  462. package/dist-test/test_imports/test-imports.js +5 -11
  463. package/dist-test/test_imports/test-require.cjs +6 -11
  464. package/package.json +11 -22
  465. package/src/Coloris.css +8 -8
  466. package/src/Editor.loadFrom.test.ts +1 -1
  467. package/src/Editor.scss +148 -0
  468. package/src/Editor.test.ts +107 -0
  469. package/src/Editor.toSVG.test.ts +184 -1
  470. package/src/Editor.ts +325 -53
  471. package/src/EditorImage.test.ts +4 -7
  472. package/src/EditorImage.ts +10 -4
  473. package/src/Pointer.ts +18 -5
  474. package/src/SVGLoader.ts +77 -15
  475. package/src/UndoRedoHistory.test.ts +2 -1
  476. package/src/Viewport.ts +1 -4
  477. package/src/commands/Erase.ts +1 -0
  478. package/src/commands/localization.ts +1 -1
  479. package/src/commands/uniteCommands.test.ts +3 -3
  480. package/src/components/AbstractComponent.transformBy.test.ts +2 -1
  481. package/src/components/AbstractComponent.ts +12 -3
  482. package/src/components/BackgroundComponent.test.ts +1 -2
  483. package/src/components/BackgroundComponent.ts +3 -8
  484. package/src/components/ImageComponent.ts +1 -3
  485. package/src/components/RestylableComponent.ts +1 -1
  486. package/src/components/SVGGlobalAttributesObject.ts +1 -3
  487. package/src/components/Stroke.test.ts +4 -6
  488. package/src/components/Stroke.ts +5 -7
  489. package/src/components/TextComponent.test.ts +1 -3
  490. package/src/components/TextComponent.ts +1 -4
  491. package/src/components/UnknownSVGObject.ts +3 -3
  492. package/src/components/builders/ArrowBuilder.ts +1 -2
  493. package/src/components/builders/CircleBuilder.ts +3 -5
  494. package/src/components/builders/FreehandLineBuilder.test.ts +2 -3
  495. package/src/components/builders/FreehandLineBuilder.ts +3 -5
  496. package/src/components/builders/LineBuilder.ts +3 -3
  497. package/src/components/builders/PressureSensitiveFreehandLineBuilder.ts +3 -4
  498. package/src/components/builders/RectangleBuilder.ts +3 -4
  499. package/src/components/builders/types.ts +1 -1
  500. package/src/components/lib.ts +1 -1
  501. package/src/components/util/StrokeSmoother.ts +7 -7
  502. package/src/dialogs/dialogs.scss +36 -0
  503. package/src/dialogs/makeAboutDialog.scss +41 -0
  504. package/src/dialogs/makeAboutDialog.ts +82 -0
  505. package/src/inputEvents.ts +143 -0
  506. package/src/lib.ts +35 -13
  507. package/src/localizations/de.ts +2 -2
  508. package/src/localizations/es.ts +5 -5
  509. package/src/rendering/Display.ts +1 -2
  510. package/src/rendering/RenderablePathSpec.ts +88 -0
  511. package/src/rendering/RenderingStyle.test.ts +1 -1
  512. package/src/rendering/RenderingStyle.ts +1 -1
  513. package/src/rendering/caching/CacheRecord.test.ts +1 -2
  514. package/src/rendering/caching/CacheRecord.ts +1 -2
  515. package/src/rendering/caching/CacheRecordManager.ts +1 -1
  516. package/src/rendering/caching/RenderingCache.test.ts +3 -4
  517. package/src/rendering/caching/RenderingCache.ts +1 -1
  518. package/src/rendering/caching/RenderingCacheNode.ts +1 -2
  519. package/src/rendering/caching/testUtils.ts +1 -1
  520. package/src/rendering/caching/types.ts +3 -3
  521. package/src/rendering/renderers/AbstractRenderer.ts +4 -14
  522. package/src/rendering/renderers/CanvasRenderer.ts +17 -12
  523. package/src/rendering/renderers/DummyRenderer.test.ts +1 -2
  524. package/src/rendering/renderers/DummyRenderer.ts +1 -4
  525. package/src/rendering/renderers/SVGRenderer.ts +68 -11
  526. package/src/rendering/renderers/TextOnlyRenderer.ts +1 -4
  527. package/src/shortcuts/KeyBinding.test.ts +10 -0
  528. package/src/shortcuts/KeyBinding.ts +74 -35
  529. package/src/shortcuts/KeyboardShortcutManager.test.ts +1 -1
  530. package/src/styles.js +1 -1
  531. package/src/testing/sendPenEvent.ts +2 -2
  532. package/src/testing/sendTouchEvent.ts +2 -2
  533. package/src/toolbar/{toolbar.css → AbstractToolbar.scss} +47 -85
  534. package/src/toolbar/AbstractToolbar.ts +542 -0
  535. package/src/toolbar/DropdownToolbar.scss +46 -0
  536. package/src/toolbar/DropdownToolbar.ts +220 -0
  537. package/src/toolbar/EdgeToolbar.scss +511 -0
  538. package/src/toolbar/EdgeToolbar.test.ts +54 -0
  539. package/src/toolbar/EdgeToolbar.ts +543 -0
  540. package/src/toolbar/IconProvider.ts +189 -133
  541. package/src/toolbar/constants.ts +1 -0
  542. package/src/toolbar/lib.ts +4 -2
  543. package/src/toolbar/localization.ts +39 -17
  544. package/src/toolbar/toolbar.scss +11 -0
  545. package/src/toolbar/types.ts +8 -0
  546. package/src/toolbar/widgets/ActionButtonWidget.ts +2 -2
  547. package/src/toolbar/widgets/BaseToolWidget.ts +17 -1
  548. package/src/toolbar/widgets/BaseWidget.ts +179 -112
  549. package/src/toolbar/widgets/DocumentPropertiesWidget.scss +7 -0
  550. package/src/toolbar/widgets/DocumentPropertiesWidget.ts +26 -10
  551. package/src/toolbar/widgets/EraserToolWidget.ts +21 -22
  552. package/src/toolbar/widgets/HandToolWidget.scss +14 -0
  553. package/src/toolbar/widgets/HandToolWidget.ts +21 -32
  554. package/src/toolbar/widgets/InsertImageWidget.scss +41 -0
  555. package/src/toolbar/widgets/InsertImageWidget.ts +90 -65
  556. package/src/toolbar/widgets/PenToolWidget.css +0 -51
  557. package/src/toolbar/widgets/PenToolWidget.ts +106 -146
  558. package/src/toolbar/widgets/SelectionToolWidget.scss +6 -0
  559. package/src/toolbar/widgets/SelectionToolWidget.ts +83 -85
  560. package/src/toolbar/widgets/TextToolWidget.ts +9 -5
  561. package/src/toolbar/widgets/components/components.scss +5 -0
  562. package/src/toolbar/widgets/components/makeColorInput.scss +82 -0
  563. package/src/toolbar/{makeColorInput.ts → widgets/components/makeColorInput.ts} +39 -14
  564. package/src/toolbar/widgets/components/makeFileInput.scss +77 -0
  565. package/src/toolbar/widgets/components/makeFileInput.ts +128 -0
  566. package/src/toolbar/widgets/components/makeGridSelector.scss +60 -0
  567. package/src/toolbar/widgets/components/makeGridSelector.ts +179 -0
  568. package/src/toolbar/widgets/components/makeSeparator.scss +14 -0
  569. package/src/toolbar/widgets/components/makeSeparator.ts +17 -0
  570. package/src/toolbar/widgets/components/makeThicknessSlider.scss +9 -0
  571. package/src/toolbar/widgets/components/makeThicknessSlider.ts +62 -0
  572. package/src/toolbar/widgets/keybindings.ts +1 -3
  573. package/src/toolbar/widgets/layout/DropdownLayoutManager.ts +262 -0
  574. package/src/toolbar/widgets/layout/EdgeToolbarLayoutManager.ts +71 -0
  575. package/src/toolbar/widgets/layout/types.ts +74 -0
  576. package/src/toolbar/widgets/lib.ts +2 -2
  577. package/src/tools/BaseTool.ts +102 -30
  578. package/src/tools/Eraser.test.ts +2 -2
  579. package/src/tools/Eraser.ts +24 -11
  580. package/src/tools/FindTool.css +3 -3
  581. package/src/tools/FindTool.test.ts +67 -0
  582. package/src/tools/FindTool.ts +3 -3
  583. package/src/tools/InputFilter/FunctionMapper.ts +17 -0
  584. package/src/tools/InputFilter/InputMapper.ts +41 -0
  585. package/src/tools/InputFilter/InputPipeline.test.ts +41 -0
  586. package/src/tools/InputFilter/InputPipeline.ts +34 -0
  587. package/src/tools/InputFilter/InputStabilizer.ts +254 -0
  588. package/src/tools/InputFilter/StrokeKeyboardControl.ts +104 -0
  589. package/src/tools/PanZoom.test.ts +3 -13
  590. package/src/tools/PanZoom.ts +33 -10
  591. package/src/tools/PasteHandler.ts +2 -3
  592. package/src/tools/Pen.test.ts +2 -4
  593. package/src/tools/Pen.ts +54 -70
  594. package/src/tools/PipetteTool.ts +31 -2
  595. package/src/tools/SelectionTool/SelectAllShortcutHandler.ts +1 -1
  596. package/src/tools/SelectionTool/Selection.ts +52 -16
  597. package/src/tools/SelectionTool/SelectionHandle.ts +46 -12
  598. package/src/tools/SelectionTool/SelectionTool.css +23 -11
  599. package/src/tools/SelectionTool/SelectionTool.test.ts +130 -21
  600. package/src/tools/SelectionTool/SelectionTool.ts +62 -48
  601. package/src/tools/SelectionTool/TransformMode.ts +1 -3
  602. package/src/tools/SoundUITool.ts +13 -4
  603. package/src/tools/TextTool.ts +29 -30
  604. package/src/tools/ToolController.ts +60 -36
  605. package/src/tools/ToolSwitcherShortcut.ts +1 -1
  606. package/src/tools/ToolbarShortcutHandler.ts +1 -1
  607. package/src/tools/UndoRedoShortcut.test.ts +10 -4
  608. package/src/tools/UndoRedoShortcut.ts +1 -1
  609. package/src/tools/keybindings.ts +17 -17
  610. package/src/tools/localization.ts +4 -2
  611. package/src/tools/tools.scss +4 -0
  612. package/src/types.ts +25 -113
  613. package/src/util/ReactiveValue.test.ts +168 -0
  614. package/src/util/ReactiveValue.ts +241 -0
  615. package/src/util/guessKeyCodeFromKey.ts +36 -0
  616. package/src/util/listPrefixMatch.ts +19 -0
  617. package/src/util/stopPropagationOfScrollingWheelEvents.ts +20 -0
  618. package/src/version.test.ts +12 -0
  619. package/src/version.ts +3 -0
  620. package/tsconfig.json +1 -1
  621. package/typedoc.json +4 -0
  622. package/dist/cjs/Color4.d.ts +0 -69
  623. package/dist/cjs/Color4.js +0 -263
  624. package/dist/cjs/math/Mat33.d.ts +0 -123
  625. package/dist/cjs/math/Mat33.js +0 -340
  626. package/dist/cjs/math/Vec2.d.ts +0 -33
  627. package/dist/cjs/math/Vec2.js +0 -37
  628. package/dist/cjs/math/Vec3.d.ts +0 -106
  629. package/dist/cjs/math/Vec3.js +0 -183
  630. package/dist/cjs/math/lib.d.ts +0 -7
  631. package/dist/cjs/math/lib.js +0 -15
  632. package/dist/cjs/math/polynomial/solveQuadratic.d.ts +0 -9
  633. package/dist/cjs/math/polynomial/solveQuadratic.js +0 -39
  634. package/dist/cjs/math/rounding.d.ts +0 -4
  635. package/dist/cjs/math/rounding.js +0 -140
  636. package/dist/cjs/math/shapes/Abstract2DShape.d.ts +0 -49
  637. package/dist/cjs/math/shapes/Abstract2DShape.js +0 -42
  638. package/dist/cjs/math/shapes/BezierJSWrapper.d.ts +0 -36
  639. package/dist/cjs/math/shapes/BezierJSWrapper.js +0 -109
  640. package/dist/cjs/math/shapes/CubicBezier.d.ts +0 -17
  641. package/dist/cjs/math/shapes/CubicBezier.js +0 -50
  642. package/dist/cjs/math/shapes/LineSegment2.d.ts +0 -70
  643. package/dist/cjs/math/shapes/LineSegment2.js +0 -204
  644. package/dist/cjs/math/shapes/Path.d.ts +0 -93
  645. package/dist/cjs/math/shapes/Path.js +0 -865
  646. package/dist/cjs/math/shapes/PointShape2D.d.ts +0 -18
  647. package/dist/cjs/math/shapes/PointShape2D.js +0 -46
  648. package/dist/cjs/math/shapes/QuadraticBezier.d.ts +0 -34
  649. package/dist/cjs/math/shapes/QuadraticBezier.js +0 -133
  650. package/dist/cjs/math/shapes/Rect2.d.ts +0 -57
  651. package/dist/cjs/math/shapes/Rect2.js +0 -311
  652. package/dist/cjs/math/shapes/Triangle.d.ts +0 -46
  653. package/dist/cjs/math/shapes/Triangle.js +0 -148
  654. package/dist/cjs/toolbar/HTMLToolbar.d.ts +0 -105
  655. package/dist/cjs/toolbar/HTMLToolbar.js +0 -465
  656. package/dist/cjs/toolbar/makeColorInput.d.ts +0 -6
  657. package/dist/mjs/Color4.d.ts +0 -69
  658. package/dist/mjs/Color4.mjs +0 -260
  659. package/dist/mjs/Color4.test.d.ts +0 -1
  660. package/dist/mjs/math/Mat33.d.ts +0 -123
  661. package/dist/mjs/math/Mat33.mjs +0 -338
  662. package/dist/mjs/math/Mat33.test.d.ts +0 -1
  663. package/dist/mjs/math/Vec2.d.ts +0 -33
  664. package/dist/mjs/math/Vec2.mjs +0 -34
  665. package/dist/mjs/math/Vec2.test.d.ts +0 -1
  666. package/dist/mjs/math/Vec3.d.ts +0 -106
  667. package/dist/mjs/math/Vec3.mjs +0 -181
  668. package/dist/mjs/math/Vec3.test.d.ts +0 -1
  669. package/dist/mjs/math/lib.d.ts +0 -7
  670. package/dist/mjs/math/lib.mjs +0 -7
  671. package/dist/mjs/math/polynomial/solveQuadratic.d.ts +0 -9
  672. package/dist/mjs/math/polynomial/solveQuadratic.mjs +0 -37
  673. package/dist/mjs/math/polynomial/solveQuadratic.test.d.ts +0 -1
  674. package/dist/mjs/math/rounding.d.ts +0 -4
  675. package/dist/mjs/math/rounding.mjs +0 -133
  676. package/dist/mjs/math/rounding.test.d.ts +0 -1
  677. package/dist/mjs/math/shapes/Abstract2DShape.d.ts +0 -49
  678. package/dist/mjs/math/shapes/Abstract2DShape.mjs +0 -40
  679. package/dist/mjs/math/shapes/BezierJSWrapper.d.ts +0 -36
  680. package/dist/mjs/math/shapes/BezierJSWrapper.mjs +0 -107
  681. package/dist/mjs/math/shapes/CubicBezier.d.ts +0 -17
  682. package/dist/mjs/math/shapes/CubicBezier.mjs +0 -48
  683. package/dist/mjs/math/shapes/LineSegment2.d.ts +0 -70
  684. package/dist/mjs/math/shapes/LineSegment2.mjs +0 -202
  685. package/dist/mjs/math/shapes/LineSegment2.test.d.ts +0 -1
  686. package/dist/mjs/math/shapes/Path.d.ts +0 -93
  687. package/dist/mjs/math/shapes/Path.fromString.test.d.ts +0 -1
  688. package/dist/mjs/math/shapes/Path.mjs +0 -862
  689. package/dist/mjs/math/shapes/Path.test.d.ts +0 -1
  690. package/dist/mjs/math/shapes/Path.toString.test.d.ts +0 -1
  691. package/dist/mjs/math/shapes/PointShape2D.d.ts +0 -18
  692. package/dist/mjs/math/shapes/PointShape2D.mjs +0 -44
  693. package/dist/mjs/math/shapes/QuadraticBezier.d.ts +0 -34
  694. package/dist/mjs/math/shapes/QuadraticBezier.mjs +0 -131
  695. package/dist/mjs/math/shapes/QuadraticBezier.test.d.ts +0 -1
  696. package/dist/mjs/math/shapes/Rect2.d.ts +0 -57
  697. package/dist/mjs/math/shapes/Rect2.mjs +0 -309
  698. package/dist/mjs/math/shapes/Rect2.test.d.ts +0 -1
  699. package/dist/mjs/math/shapes/Triangle.d.ts +0 -46
  700. package/dist/mjs/math/shapes/Triangle.mjs +0 -146
  701. package/dist/mjs/math/shapes/Triangle.test.d.ts +0 -1
  702. package/dist/mjs/toolbar/HTMLToolbar.d.ts +0 -105
  703. package/dist/mjs/toolbar/HTMLToolbar.mjs +0 -462
  704. package/dist/mjs/toolbar/makeColorInput.d.ts +0 -6
  705. package/src/Color4.test.ts +0 -47
  706. package/src/Color4.ts +0 -304
  707. package/src/Editor.css +0 -98
  708. package/src/math/Mat33.test.ts +0 -244
  709. package/src/math/Mat33.ts +0 -442
  710. package/src/math/Vec2.test.ts +0 -30
  711. package/src/math/Vec2.ts +0 -40
  712. package/src/math/Vec3.test.ts +0 -44
  713. package/src/math/Vec3.ts +0 -218
  714. package/src/math/lib.ts +0 -15
  715. package/src/math/polynomial/solveQuadratic.test.ts +0 -39
  716. package/src/math/polynomial/solveQuadratic.ts +0 -43
  717. package/src/math/rounding.test.ts +0 -65
  718. package/src/math/rounding.ts +0 -156
  719. package/src/math/shapes/Abstract2DShape.ts +0 -63
  720. package/src/math/shapes/BezierJSWrapper.ts +0 -93
  721. package/src/math/shapes/CubicBezier.ts +0 -35
  722. package/src/math/shapes/LineSegment2.test.ts +0 -99
  723. package/src/math/shapes/LineSegment2.ts +0 -231
  724. package/src/math/shapes/Path.fromString.test.ts +0 -223
  725. package/src/math/shapes/Path.test.ts +0 -309
  726. package/src/math/shapes/Path.toString.test.ts +0 -77
  727. package/src/math/shapes/Path.ts +0 -1027
  728. package/src/math/shapes/PointShape2D.ts +0 -33
  729. package/src/math/shapes/QuadraticBezier.test.ts +0 -31
  730. package/src/math/shapes/QuadraticBezier.ts +0 -141
  731. package/src/math/shapes/Rect2.test.ts +0 -209
  732. package/src/math/shapes/Rect2.ts +0 -344
  733. package/src/math/shapes/Triangle.test.ts +0 -61
  734. package/src/math/shapes/Triangle.ts +0 -139
  735. package/src/toolbar/HTMLToolbar.ts +0 -567
  736. package/src/toolbar/widgets/InsertImageWidget.css +0 -44
  737. package/src/tools/tools.css +0 -4
  738. /package/dist/cjs/{Color4.test.d.ts → Editor.test.d.ts} +0 -0
  739. /package/dist/cjs/{math/Mat33.test.d.ts → toolbar/EdgeToolbar.test.d.ts} +0 -0
  740. /package/dist/cjs/{math/Vec2.test.d.ts → tools/FindTool.test.d.ts} +0 -0
  741. /package/dist/cjs/{math/Vec3.test.d.ts → tools/InputFilter/InputPipeline.test.d.ts} +0 -0
  742. /package/dist/cjs/{math/polynomial/solveQuadratic.test.d.ts → util/ReactiveValue.test.d.ts} +0 -0
  743. /package/dist/cjs/{math/rounding.test.d.ts → version.test.d.ts} +0 -0
  744. /package/dist/{cjs/math/shapes/LineSegment2.test.d.ts → mjs/Editor.test.d.ts} +0 -0
  745. /package/dist/{cjs/math/shapes/Path.fromString.test.d.ts → mjs/toolbar/EdgeToolbar.test.d.ts} +0 -0
  746. /package/dist/{cjs/math/shapes/Path.test.d.ts → mjs/toolbar/widgets/layout/types.mjs} +0 -0
  747. /package/dist/{cjs/math/shapes/Path.toString.test.d.ts → mjs/tools/FindTool.test.d.ts} +0 -0
  748. /package/dist/{cjs/math/shapes/QuadraticBezier.test.d.ts → mjs/tools/InputFilter/InputPipeline.test.d.ts} +0 -0
  749. /package/dist/{cjs/math/shapes/Rect2.test.d.ts → mjs/util/ReactiveValue.test.d.ts} +0 -0
  750. /package/dist/{cjs/math/shapes/Triangle.test.d.ts → mjs/version.test.d.ts} +0 -0
@@ -0,0 +1,410 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ 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");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ 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");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ var _AbstractToolbar_listeners, _AbstractToolbar_widgetsById, _AbstractToolbar_widgetList, _AbstractToolbar_updateColoris;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const types_1 = require("../types");
19
+ const coloris_1 = require("@melloware/coloris");
20
+ const localization_1 = require("./localization");
21
+ const SelectionTool_1 = __importDefault(require("../tools/SelectionTool/SelectionTool"));
22
+ const PanZoom_1 = __importDefault(require("../tools/PanZoom"));
23
+ const TextTool_1 = __importDefault(require("../tools/TextTool"));
24
+ const Eraser_1 = __importDefault(require("../tools/Eraser"));
25
+ const Pen_1 = __importDefault(require("../tools/Pen"));
26
+ const PenToolWidget_1 = __importDefault(require("./widgets/PenToolWidget"));
27
+ const EraserToolWidget_1 = __importDefault(require("./widgets/EraserToolWidget"));
28
+ const SelectionToolWidget_1 = __importDefault(require("./widgets/SelectionToolWidget"));
29
+ const TextToolWidget_1 = __importDefault(require("./widgets/TextToolWidget"));
30
+ const HandToolWidget_1 = __importDefault(require("./widgets/HandToolWidget"));
31
+ const BaseWidget_1 = require("./widgets/BaseWidget");
32
+ const ActionButtonWidget_1 = __importDefault(require("./widgets/ActionButtonWidget"));
33
+ const InsertImageWidget_1 = __importDefault(require("./widgets/InsertImageWidget"));
34
+ const DocumentPropertiesWidget_1 = __importDefault(require("./widgets/DocumentPropertiesWidget"));
35
+ const math_1 = require("@js-draw/math");
36
+ const constants_1 = require("./constants");
37
+ class AbstractToolbar {
38
+ /** @internal */
39
+ constructor(editor, localizationTable = localization_1.defaultToolbarLocalization) {
40
+ this.editor = editor;
41
+ this.localizationTable = localizationTable;
42
+ _AbstractToolbar_listeners.set(this, []);
43
+ _AbstractToolbar_widgetsById.set(this, {});
44
+ _AbstractToolbar_widgetList.set(this, []);
45
+ _AbstractToolbar_updateColoris.set(this, null);
46
+ this.closeColorPickerOverlay = null;
47
+ if (!AbstractToolbar.colorisStarted) {
48
+ (0, coloris_1.init)();
49
+ AbstractToolbar.colorisStarted = true;
50
+ }
51
+ this.setupColorPickers();
52
+ }
53
+ setupCloseColorPickerOverlay() {
54
+ if (this.closeColorPickerOverlay)
55
+ return;
56
+ this.closeColorPickerOverlay = document.createElement('div');
57
+ this.closeColorPickerOverlay.className = `${constants_1.toolbarCSSPrefix}closeColorPickerOverlay`;
58
+ this.editor.createHTMLOverlay(this.closeColorPickerOverlay);
59
+ // Hide the color picker when attempting to draw on the overlay.
60
+ __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.handlePointerEventsExceptClicksFrom(this.closeColorPickerOverlay, (eventName) => {
61
+ if (eventName === 'pointerdown') {
62
+ (0, coloris_1.close)();
63
+ }
64
+ // Transfer focus to the editor to allow keyboard events to be handled.
65
+ if (eventName === 'pointerup') {
66
+ this.editor.focus();
67
+ }
68
+ // Send the event to the editor
69
+ return true;
70
+ }));
71
+ }
72
+ // @internal
73
+ setupColorPickers() {
74
+ // Much of the setup only needs to be done once.
75
+ if (__classPrivateFieldGet(this, _AbstractToolbar_updateColoris, "f")) {
76
+ __classPrivateFieldGet(this, _AbstractToolbar_updateColoris, "f").call(this);
77
+ return;
78
+ }
79
+ this.setupCloseColorPickerOverlay();
80
+ const maxSwatchLen = 12;
81
+ const swatches = [
82
+ math_1.Color4.red.toHexString(),
83
+ math_1.Color4.purple.toHexString(),
84
+ math_1.Color4.blue.toHexString(),
85
+ math_1.Color4.clay.toHexString(),
86
+ math_1.Color4.black.toHexString(),
87
+ math_1.Color4.white.toHexString(),
88
+ ];
89
+ const presetColorEnd = swatches.length;
90
+ // Keeps track of whether a Coloris initialization is scheduled.
91
+ let colorisInitScheduled = false;
92
+ // (Re)init Coloris -- update the swatches list.
93
+ const initColoris = () => {
94
+ try {
95
+ (0, coloris_1.coloris)({
96
+ el: '.coloris_input',
97
+ format: 'hex',
98
+ selectInput: false,
99
+ focusInput: false,
100
+ themeMode: 'auto',
101
+ swatches,
102
+ });
103
+ }
104
+ catch (err) {
105
+ console.warn('Failed to initialize Coloris. Error: ', err);
106
+ // Try again --- a known issue is that Coloris fails to load if the document
107
+ // isn't ready.
108
+ if (!colorisInitScheduled) {
109
+ colorisInitScheduled = true;
110
+ // Wait to initialize after the document has loaded
111
+ document.addEventListener('load', () => {
112
+ initColoris();
113
+ }, { once: true });
114
+ }
115
+ }
116
+ };
117
+ initColoris();
118
+ __classPrivateFieldSet(this, _AbstractToolbar_updateColoris, initColoris, "f");
119
+ const addColorToSwatch = (newColor) => {
120
+ let alreadyPresent = false;
121
+ for (const color of swatches) {
122
+ if (color === newColor) {
123
+ alreadyPresent = true;
124
+ }
125
+ }
126
+ if (!alreadyPresent) {
127
+ swatches.push(newColor);
128
+ if (swatches.length > maxSwatchLen) {
129
+ swatches.splice(presetColorEnd, 1);
130
+ }
131
+ initColoris();
132
+ }
133
+ };
134
+ __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.notifier.on(types_1.EditorEventType.ColorPickerToggled, event => {
135
+ if (event.kind !== types_1.EditorEventType.ColorPickerToggled) {
136
+ return;
137
+ }
138
+ // Show/hide the overlay. Making the overlay visible gives users a surface to click
139
+ // on that shows/hides the color picker.
140
+ if (this.closeColorPickerOverlay) {
141
+ this.closeColorPickerOverlay.style.display = event.open ? 'block' : 'none';
142
+ }
143
+ }));
144
+ // Add newly-selected colors to the swatch.
145
+ __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.notifier.on(types_1.EditorEventType.ColorPickerColorSelected, event => {
146
+ if (event.kind === types_1.EditorEventType.ColorPickerColorSelected) {
147
+ addColorToSwatch(event.color.toHexString());
148
+ }
149
+ }));
150
+ }
151
+ closeColorPickers() {
152
+ (0, coloris_1.close)?.();
153
+ }
154
+ getWidgetUniqueId(widget) {
155
+ return widget.getUniqueIdIn(__classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f"));
156
+ }
157
+ getWidgetFromId(id) {
158
+ return __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[id];
159
+ }
160
+ /** Do **not** modify the return value. */
161
+ getAllWidgets() {
162
+ return __classPrivateFieldGet(this, _AbstractToolbar_widgetList, "f");
163
+ }
164
+ /**
165
+ * Adds an `ActionButtonWidget` or `BaseToolWidget`. The widget should not have already have a parent
166
+ * (i.e. its `addTo` method should not have been called).
167
+ *
168
+ * @example
169
+ * ```ts
170
+ * const toolbar = editor.addToolbar();
171
+ * const insertImageWidget = new InsertImageWidget(editor);
172
+ * toolbar.addWidget(insertImageWidget);
173
+ * ```
174
+ */
175
+ addWidget(widget) {
176
+ // Prevent name collisions
177
+ const id = widget.getUniqueIdIn(__classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f"));
178
+ // Add the widget
179
+ __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[id] = widget;
180
+ __classPrivateFieldGet(this, _AbstractToolbar_widgetList, "f").push(widget);
181
+ this.addWidgetInternal(widget);
182
+ this.setupColorPickers();
183
+ }
184
+ /** Removes the given `widget` from this toolbar. */
185
+ removeWidget(widget) {
186
+ const id = widget.getUniqueIdIn(__classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f"));
187
+ this.removeWidgetInternal(widget);
188
+ delete __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[id];
189
+ __classPrivateFieldSet(this, _AbstractToolbar_widgetList, __classPrivateFieldGet(this, _AbstractToolbar_widgetList, "f").filter(otherWidget => otherWidget !== widget), "f");
190
+ }
191
+ /** Returns a snapshot of the state of widgets in the toolbar. */
192
+ serializeState() {
193
+ const result = {};
194
+ for (const widgetId in __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")) {
195
+ result[widgetId] = __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[widgetId].serializeState();
196
+ }
197
+ result[AbstractToolbar.rootToolbarId] = this.serializeInternal();
198
+ return JSON.stringify(result);
199
+ }
200
+ /**
201
+ * Deserialize toolbar widgets from the given state.
202
+ * Assumes that toolbar widgets are in the same order as when state was serialized.
203
+ */
204
+ deserializeState(state) {
205
+ const data = JSON.parse(state);
206
+ const rootId = AbstractToolbar.rootToolbarId;
207
+ this.deserializeInternal(data[rootId]);
208
+ for (const widgetId in data) {
209
+ if (widgetId === rootId) {
210
+ continue;
211
+ }
212
+ if (!(widgetId in __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f"))) {
213
+ console.warn(`Unable to deserialize widget ${widgetId} ­— no such widget.`);
214
+ continue;
215
+ }
216
+ __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[widgetId].deserializeFrom(data[widgetId]);
217
+ }
218
+ }
219
+ /**
220
+ * Called by `serializeState` to attach any additional JSONifyable data
221
+ * to the serialized result.
222
+ *
223
+ * @reutrns an object that can be converted to JSON with `JSON.stringify`.
224
+ */
225
+ serializeInternal() { }
226
+ /**
227
+ * Called by `deserializeState` with a version of the JSON outputted
228
+ * previously by `serializeInternal`.
229
+ */
230
+ deserializeInternal(_json) { }
231
+ /**
232
+ * Creates, but does not add, an action button to this container.
233
+ *
234
+ * @see
235
+ * {@link addActionButton}
236
+ */
237
+ makeActionButton(title, command, mustBeToplevel = true) {
238
+ const titleString = typeof title === 'string' ? title : title.label;
239
+ const widgetId = 'action-button';
240
+ const makeIcon = () => {
241
+ if (typeof title === 'string') {
242
+ return null;
243
+ }
244
+ return title.icon;
245
+ };
246
+ const widget = new ActionButtonWidget_1.default(this.editor, widgetId, makeIcon, titleString, command, this.editor.localization, mustBeToplevel);
247
+ return widget;
248
+ }
249
+ /**
250
+ * Adds an action button with `title` to this toolbar (or to the given `parent` element).
251
+ *
252
+ * @return The added button.
253
+ */
254
+ addActionButton(title, command, mustBeToplevel = true) {
255
+ const widget = this.makeActionButton(title, command, mustBeToplevel);
256
+ this.addWidget(widget);
257
+ return widget;
258
+ }
259
+ /**
260
+ * Like {@link addActionButton}, except associates `tags` with the button that allow
261
+ * different toolbar styles to give the button tag-dependent styles.
262
+ */
263
+ addTaggedActionButton(tags, title, command, mustBeToplevel = true) {
264
+ const widget = this.makeActionButton(title, command, mustBeToplevel);
265
+ widget.setTags(tags);
266
+ this.addWidget(widget);
267
+ return widget;
268
+ }
269
+ /**
270
+ * Adds a save button that, when clicked, calls `saveCallback`.
271
+ *
272
+ * **Note**: This is equivalent to
273
+ * ```ts
274
+ * const tags = [
275
+ * ToolbarWidgetTag.Save,
276
+ * ];
277
+ * toolbar.addTaggedActionButton(tags, {
278
+ * label: editor.localization.save,
279
+ * icon: editor.icons.makeSaveIcon(),
280
+ * }, () => {
281
+ * saveCallback();
282
+ * });
283
+ * ```
284
+ *
285
+ * @final
286
+ */
287
+ addSaveButton(saveCallback) {
288
+ return this.addTaggedActionButton([BaseWidget_1.ToolbarWidgetTag.Save], {
289
+ label: this.editor.localization.save,
290
+ icon: this.editor.icons.makeSaveIcon(),
291
+ }, () => {
292
+ saveCallback();
293
+ });
294
+ }
295
+ /**
296
+ * Adds an "Exit" button that, when clicked, calls `exitCallback`.
297
+ *
298
+ * **Note**: This is equivalent to
299
+ * ```ts
300
+ * toolbar.addTaggedActionButton([ ToolbarWidgetTag.Exit ], {
301
+ * label: this.editor.localization.exit,
302
+ * icon: this.editor.icons.makeCloseIcon(),
303
+ * }, () => {
304
+ * exitCallback();
305
+ * });
306
+ * ```
307
+ *
308
+ * @final
309
+ */
310
+ addExitButton(exitCallback) {
311
+ return this.addTaggedActionButton([BaseWidget_1.ToolbarWidgetTag.Exit], {
312
+ label: this.editor.localization.exit,
313
+ icon: this.editor.icons.makeCloseIcon(),
314
+ }, () => {
315
+ exitCallback();
316
+ });
317
+ }
318
+ /**
319
+ * Adds undo and redo buttons that trigger the editor's built-in undo and redo
320
+ * functionality.
321
+ */
322
+ addUndoRedoButtons(undoFirst = true) {
323
+ const makeUndo = () => {
324
+ return this.addTaggedActionButton([
325
+ BaseWidget_1.ToolbarWidgetTag.Undo,
326
+ ], {
327
+ label: this.localizationTable.undo,
328
+ icon: this.editor.icons.makeUndoIcon()
329
+ }, () => {
330
+ this.editor.history.undo();
331
+ });
332
+ };
333
+ const makeRedo = () => {
334
+ return this.addTaggedActionButton([
335
+ BaseWidget_1.ToolbarWidgetTag.Redo,
336
+ ], {
337
+ label: this.localizationTable.redo,
338
+ icon: this.editor.icons.makeRedoIcon(),
339
+ }, () => {
340
+ this.editor.history.redo();
341
+ });
342
+ };
343
+ let undoButton;
344
+ let redoButton;
345
+ if (undoFirst) {
346
+ undoButton = makeUndo();
347
+ redoButton = makeRedo();
348
+ }
349
+ else {
350
+ redoButton = makeRedo();
351
+ undoButton = makeUndo();
352
+ }
353
+ undoButton.setDisabled(true);
354
+ redoButton.setDisabled(true);
355
+ this.editor.notifier.on(types_1.EditorEventType.UndoRedoStackUpdated, event => {
356
+ if (event.kind !== types_1.EditorEventType.UndoRedoStackUpdated) {
357
+ throw new Error('Wrong event type!');
358
+ }
359
+ undoButton.setDisabled(event.undoStackSize === 0);
360
+ redoButton.setDisabled(event.redoStackSize === 0);
361
+ });
362
+ }
363
+ /**
364
+ * Adds toolbar widgets based on the enabled tools.
365
+ */
366
+ addDefaultToolWidgets() {
367
+ const toolController = this.editor.toolController;
368
+ for (const tool of toolController.getMatchingTools(Pen_1.default)) {
369
+ const widget = new PenToolWidget_1.default(this.editor, tool, this.localizationTable);
370
+ this.addWidget(widget);
371
+ }
372
+ for (const tool of toolController.getMatchingTools(Eraser_1.default)) {
373
+ this.addWidget(new EraserToolWidget_1.default(this.editor, tool, this.localizationTable));
374
+ }
375
+ for (const tool of toolController.getMatchingTools(SelectionTool_1.default)) {
376
+ this.addWidget(new SelectionToolWidget_1.default(this.editor, tool, this.localizationTable));
377
+ }
378
+ for (const tool of toolController.getMatchingTools(TextTool_1.default)) {
379
+ this.addWidget(new TextToolWidget_1.default(this.editor, tool, this.localizationTable));
380
+ }
381
+ const panZoomTool = toolController.getMatchingTools(PanZoom_1.default)[0];
382
+ if (panZoomTool) {
383
+ this.addWidget(new HandToolWidget_1.default(this.editor, panZoomTool, this.localizationTable));
384
+ }
385
+ this.addWidget(new DocumentPropertiesWidget_1.default(this.editor, this.localizationTable));
386
+ this.addWidget(new InsertImageWidget_1.default(this.editor, this.localizationTable));
387
+ }
388
+ addDefaultActionButtons() {
389
+ this.addUndoRedoButtons();
390
+ }
391
+ /** Remove this toolbar from its container and clean up listeners. */
392
+ remove() {
393
+ this.closeColorPickerOverlay?.remove();
394
+ for (const listener of __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f")) {
395
+ listener.remove();
396
+ }
397
+ __classPrivateFieldSet(this, _AbstractToolbar_listeners, [], "f");
398
+ this.onRemove();
399
+ }
400
+ /**
401
+ * Removes `listener` when {@link remove} is called.
402
+ */
403
+ manageListener(listener) {
404
+ __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(listener);
405
+ }
406
+ }
407
+ _AbstractToolbar_listeners = new WeakMap(), _AbstractToolbar_widgetsById = new WeakMap(), _AbstractToolbar_widgetList = new WeakMap(), _AbstractToolbar_updateColoris = new WeakMap();
408
+ AbstractToolbar.colorisStarted = false;
409
+ AbstractToolbar.rootToolbarId = 'root-toolbar--';
410
+ exports.default = AbstractToolbar;
@@ -0,0 +1,43 @@
1
+ import Editor from '../Editor';
2
+ import { ToolbarLocalization } from './localization';
3
+ import BaseWidget from './widgets/BaseWidget';
4
+ import AbstractToolbar, { SpacerOptions } from './AbstractToolbar';
5
+ export declare const makeDropdownToolbar: (editor: Editor) => AbstractToolbar;
6
+ export default class DropdownToolbar extends AbstractToolbar {
7
+ protected container: HTMLElement;
8
+ private resizeObserver;
9
+ private widgetOrderCounter;
10
+ private overflowWidget;
11
+ /** @internal */
12
+ constructor(editor: Editor, parent: HTMLElement, localizationTable?: ToolbarLocalization);
13
+ private reLayoutQueued;
14
+ private queueReLayout;
15
+ private reLayout;
16
+ protected addWidgetInternal(widget: BaseWidget): void;
17
+ protected removeWidgetInternal(widget: BaseWidget): void;
18
+ addSpacer(options?: Partial<SpacerOptions>): void;
19
+ /**
20
+ * Adds a widget that toggles the overflow menu. Call `addOverflowWidget` to ensure
21
+ * that this widget is in the correct space (if shown).
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * toolbar.addDefaultToolWidgets();
26
+ * toolbar.addOverflowWidget();
27
+ * toolbar.addDefaultActionButtons();
28
+ * ```
29
+ * shows the overflow widget between the default tool widgets and the default action buttons,
30
+ * if shown.
31
+ */
32
+ addOverflowWidget(): void;
33
+ /**
34
+ * Adds both the default tool widgets and action buttons. Equivalent to
35
+ * ```ts
36
+ * toolbar.addDefaultToolWidgets();
37
+ * toolbar.addOverflowWidget();
38
+ * toolbar.addDefaultActionButtons();
39
+ * ```
40
+ */
41
+ addDefaults(): void;
42
+ protected onRemove(): void;
43
+ }
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.makeDropdownToolbar = void 0;
7
+ const localization_1 = require("./localization");
8
+ const OverflowWidget_1 = __importDefault(require("./widgets/OverflowWidget"));
9
+ const AbstractToolbar_1 = __importDefault(require("./AbstractToolbar"));
10
+ const constants_1 = require("./constants");
11
+ const makeDropdownToolbar = (editor) => {
12
+ return new DropdownToolbar(editor, editor.getRootElement());
13
+ };
14
+ exports.makeDropdownToolbar = makeDropdownToolbar;
15
+ class DropdownToolbar extends AbstractToolbar_1.default {
16
+ /** @internal */
17
+ constructor(editor, parent, localizationTable = localization_1.defaultToolbarLocalization) {
18
+ super(editor, localizationTable);
19
+ // Flex-order of the next widget to be added.
20
+ this.widgetOrderCounter = 0;
21
+ // Widget to toggle overflow menu.
22
+ this.overflowWidget = null;
23
+ this.reLayoutQueued = false;
24
+ this.container = document.createElement('div');
25
+ this.container.classList.add(`${constants_1.toolbarCSSPrefix}root`);
26
+ this.container.classList.add(`${constants_1.toolbarCSSPrefix}element`);
27
+ this.container.classList.add(`${constants_1.toolbarCSSPrefix}dropdown-toolbar`);
28
+ this.container.setAttribute('role', 'toolbar');
29
+ parent.appendChild(this.container);
30
+ if ('ResizeObserver' in window) {
31
+ this.resizeObserver = new ResizeObserver((_entries) => {
32
+ this.reLayout();
33
+ });
34
+ this.resizeObserver.observe(this.container);
35
+ }
36
+ else {
37
+ console.warn('ResizeObserver not supported. Toolbar will not resize.');
38
+ }
39
+ }
40
+ queueReLayout() {
41
+ if (!this.reLayoutQueued) {
42
+ this.reLayoutQueued = true;
43
+ requestAnimationFrame(() => this.reLayout());
44
+ }
45
+ }
46
+ reLayout() {
47
+ this.reLayoutQueued = false;
48
+ if (!this.overflowWidget) {
49
+ return;
50
+ }
51
+ const getTotalWidth = (widgetList) => {
52
+ let totalWidth = 0;
53
+ for (const widget of widgetList) {
54
+ if (!widget.isHidden()) {
55
+ totalWidth += widget.getButtonWidth();
56
+ }
57
+ }
58
+ return totalWidth;
59
+ };
60
+ // Returns true if there is enough empty space to move the first child
61
+ // from the overflow menu to the main menu.
62
+ const canRemoveFirstChildFromOverflow = (freeSpaceInMainMenu) => {
63
+ const overflowChildren = this.overflowWidget?.getChildWidgets() ?? [];
64
+ if (overflowChildren.length === 0) {
65
+ return false;
66
+ }
67
+ return overflowChildren[0].getButtonWidth() <= freeSpaceInMainMenu;
68
+ };
69
+ const allWidgets = this.getAllWidgets();
70
+ let overflowWidgetsWidth = getTotalWidth(this.overflowWidget.getChildWidgets());
71
+ let shownWidgetWidth = getTotalWidth(allWidgets) - overflowWidgetsWidth;
72
+ let availableWidth = this.container.clientWidth * 0.87;
73
+ // If on a device that has enough vertical space, allow
74
+ // showing two rows of buttons.
75
+ // TODO: Fix magic numbers
76
+ if (window.innerHeight > availableWidth * 1.75) {
77
+ availableWidth *= 1.75;
78
+ }
79
+ let updatedChildren = false;
80
+ // If we can remove at least one child from the overflow menu,
81
+ if (canRemoveFirstChildFromOverflow(availableWidth - shownWidgetWidth)) {
82
+ // Move widgets to the main menu.
83
+ const overflowChildren = this.overflowWidget.clearChildren();
84
+ for (const child of overflowChildren) {
85
+ child.addTo(this.container);
86
+ child.setIsToplevel(true);
87
+ if (!child.isHidden()) {
88
+ shownWidgetWidth += child.getButtonWidth();
89
+ }
90
+ }
91
+ overflowWidgetsWidth = 0;
92
+ updatedChildren = true;
93
+ }
94
+ if (shownWidgetWidth >= availableWidth) {
95
+ // Move widgets to the overflow menu.
96
+ // Start with the rightmost widget, move to the leftmost
97
+ for (let i = allWidgets.length - 1; i >= 0 && shownWidgetWidth >= availableWidth; i--) {
98
+ const child = allWidgets[i];
99
+ if (this.overflowWidget.hasAsChild(child)) {
100
+ continue;
101
+ }
102
+ if (child.canBeInOverflowMenu()) {
103
+ shownWidgetWidth -= child.getButtonWidth();
104
+ this.overflowWidget.addToOverflow(child);
105
+ }
106
+ }
107
+ updatedChildren = true;
108
+ }
109
+ // Hide/show the overflow widget.
110
+ this.overflowWidget.setHidden(this.overflowWidget.getChildWidgets().length === 0);
111
+ if (updatedChildren) {
112
+ this.setupColorPickers();
113
+ }
114
+ }
115
+ addWidgetInternal(widget) {
116
+ const container = widget.addTo(this.container);
117
+ // Ensure that the widget gets displayed in the correct
118
+ // place in the toolbar, even if it's removed and re-added.
119
+ container.style.order = `${this.widgetOrderCounter++}`;
120
+ this.queueReLayout();
121
+ }
122
+ removeWidgetInternal(widget) {
123
+ widget.remove();
124
+ this.queueReLayout();
125
+ }
126
+ addSpacer(options = {}) {
127
+ const spacer = document.createElement('div');
128
+ spacer.classList.add(`${constants_1.toolbarCSSPrefix}spacer`);
129
+ if (options.grow) {
130
+ spacer.style.flexGrow = `${options.grow}`;
131
+ }
132
+ if (options.minSize) {
133
+ spacer.style.minWidth = options.minSize;
134
+ }
135
+ if (options.maxSize) {
136
+ spacer.style.maxWidth = options.maxSize;
137
+ }
138
+ spacer.style.order = `${this.widgetOrderCounter++}`;
139
+ this.container.appendChild(spacer);
140
+ }
141
+ /**
142
+ * Adds a widget that toggles the overflow menu. Call `addOverflowWidget` to ensure
143
+ * that this widget is in the correct space (if shown).
144
+ *
145
+ * @example
146
+ * ```ts
147
+ * toolbar.addDefaultToolWidgets();
148
+ * toolbar.addOverflowWidget();
149
+ * toolbar.addDefaultActionButtons();
150
+ * ```
151
+ * shows the overflow widget between the default tool widgets and the default action buttons,
152
+ * if shown.
153
+ */
154
+ addOverflowWidget() {
155
+ this.overflowWidget = new OverflowWidget_1.default(this.editor, this.localizationTable);
156
+ this.addWidget(this.overflowWidget);
157
+ }
158
+ /**
159
+ * Adds both the default tool widgets and action buttons. Equivalent to
160
+ * ```ts
161
+ * toolbar.addDefaultToolWidgets();
162
+ * toolbar.addOverflowWidget();
163
+ * toolbar.addDefaultActionButtons();
164
+ * ```
165
+ */
166
+ addDefaults() {
167
+ this.addDefaultToolWidgets();
168
+ this.addOverflowWidget();
169
+ this.addDefaultActionButtons();
170
+ }
171
+ onRemove() {
172
+ this.container.remove();
173
+ this.resizeObserver.disconnect();
174
+ }
175
+ }
176
+ exports.default = DropdownToolbar;
@@ -0,0 +1,47 @@
1
+ import Editor from '../Editor';
2
+ import { ToolbarLocalization } from './localization';
3
+ import BaseWidget from './widgets/BaseWidget';
4
+ import AbstractToolbar, { SpacerOptions } from './AbstractToolbar';
5
+ export declare const makeEdgeToolbar: (editor: Editor) => AbstractToolbar;
6
+ export default class EdgeToolbar extends AbstractToolbar {
7
+ private toolbarContainer;
8
+ private toolbarActionRow;
9
+ private toolbarToolRow;
10
+ private toolRowResizeObserver;
11
+ private menuContainer;
12
+ private sidebarContainer;
13
+ private sidebarContent;
14
+ private closeButton;
15
+ private layoutManager;
16
+ private sidebarVisible;
17
+ private sidebarY;
18
+ private sidebarTitle;
19
+ /** @internal */
20
+ constructor(editor: Editor, parent: HTMLElement, localizationTable: ToolbarLocalization);
21
+ private listenForVisibilityChanges;
22
+ private onToolbarRowResize;
23
+ addSpacer(_options?: Partial<SpacerOptions> | undefined): void;
24
+ addUndoRedoButtons(): void;
25
+ addDefaults(): void;
26
+ private updateWidgetCSSClasses;
27
+ protected addWidgetInternal(widget: BaseWidget): void;
28
+ protected removeWidgetInternal(widget: BaseWidget): void;
29
+ protected onRemove(): void;
30
+ private initDragListeners;
31
+ /**
32
+ * Updates the position of this menu **during** a drag. After a drag ends,
33
+ * {@link finalizeDrag} should be called.
34
+ */
35
+ private handleDrag;
36
+ /** Returns `this.sidebarY` rounded to a valid value. */
37
+ private snappedSidebarY;
38
+ /**
39
+ * Moves the menu to a valid location or closes it, depending on
40
+ * the position set by the drag.
41
+ */
42
+ private finalizeDrag;
43
+ protected serializeInternal(): {
44
+ menuSizeY: number;
45
+ };
46
+ protected deserializeInternal(json: any): void;
47
+ }