js-draw 1.21.3 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (305) hide show
  1. package/README.md +103 -75
  2. package/build-config.json +2 -2
  3. package/dist/Editor.css +29 -16
  4. package/dist/bundle.js +2 -2
  5. package/dist/bundledStyles.js +1 -1
  6. package/dist/cjs/Editor.js +36 -22
  7. package/dist/cjs/EventDispatcher.js +1 -1
  8. package/dist/cjs/Pointer.js +3 -3
  9. package/dist/cjs/SVGLoader/SVGLoader.js +13 -6
  10. package/dist/cjs/UndoRedoHistory.js +1 -1
  11. package/dist/cjs/Viewport.js +4 -2
  12. package/dist/cjs/commands/Command.js +7 -5
  13. package/dist/cjs/commands/Duplicate.js +2 -2
  14. package/dist/cjs/commands/Erase.js +3 -4
  15. package/dist/cjs/commands/invertCommand.js +4 -4
  16. package/dist/cjs/commands/lib.d.ts +1 -1
  17. package/dist/cjs/commands/uniteCommands.js +4 -4
  18. package/dist/cjs/components/AbstractComponent.d.ts +1 -1
  19. package/dist/cjs/components/AbstractComponent.js +3 -3
  20. package/dist/cjs/components/BackgroundComponent.js +8 -6
  21. package/dist/cjs/components/ImageComponent.js +12 -5
  22. package/dist/cjs/components/RestylableComponent.js +1 -1
  23. package/dist/cjs/components/SVGGlobalAttributesObject.js +1 -2
  24. package/dist/cjs/components/Stroke.js +37 -24
  25. package/dist/cjs/components/TextComponent.js +13 -10
  26. package/dist/cjs/components/UnknownSVGObject.js +2 -3
  27. package/dist/cjs/components/builders/ArrowBuilder.d.ts +6 -0
  28. package/dist/cjs/components/builders/ArrowBuilder.js +9 -3
  29. package/dist/cjs/components/builders/CircleBuilder.d.ts +6 -0
  30. package/dist/cjs/components/builders/CircleBuilder.js +11 -4
  31. package/dist/cjs/components/builders/FreehandLineBuilder.d.ts +6 -0
  32. package/dist/cjs/components/builders/FreehandLineBuilder.js +10 -4
  33. package/dist/cjs/components/builders/LineBuilder.d.ts +6 -0
  34. package/dist/cjs/components/builders/LineBuilder.js +8 -4
  35. package/dist/cjs/components/builders/PolylineBuilder.d.ts +4 -1
  36. package/dist/cjs/components/builders/PolylineBuilder.js +9 -5
  37. package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.js +16 -10
  38. package/dist/cjs/components/builders/RectangleBuilder.d.ts +12 -0
  39. package/dist/cjs/components/builders/RectangleBuilder.js +17 -3
  40. package/dist/cjs/components/builders/autocorrect/makeShapeFitAutocorrect.js +5 -8
  41. package/dist/cjs/components/builders/autocorrect/makeSnapToGridAutocorrect.js +1 -1
  42. package/dist/cjs/components/builders/lib.d.ts +7 -0
  43. package/dist/cjs/components/builders/lib.js +18 -0
  44. package/dist/cjs/components/lib.d.ts +1 -4
  45. package/dist/cjs/components/lib.js +2 -9
  46. package/dist/cjs/components/util/StrokeSmoother.js +5 -6
  47. package/dist/cjs/dialogs/makeAboutDialog.js +1 -1
  48. package/dist/cjs/dialogs/makeMessageDialog.js +2 -2
  49. package/dist/cjs/image/EditorImage.js +13 -15
  50. package/dist/cjs/image/export/editorImageToSVG.js +1 -1
  51. package/dist/cjs/inputEvents.js +3 -3
  52. package/dist/cjs/lib.d.ts +2 -2
  53. package/dist/cjs/localizations/de.js +2 -2
  54. package/dist/cjs/localizations/es.js +7 -3
  55. package/dist/cjs/rendering/Display.js +7 -3
  56. package/dist/cjs/rendering/RenderablePathSpec.js +26 -11
  57. package/dist/cjs/rendering/RenderingStyle.js +22 -15
  58. package/dist/cjs/rendering/TextRenderingStyle.js +1 -1
  59. package/dist/cjs/rendering/caching/CacheRecord.js +1 -1
  60. package/dist/cjs/rendering/caching/CacheRecordManager.js +1 -1
  61. package/dist/cjs/rendering/caching/RenderingCache.js +1 -1
  62. package/dist/cjs/rendering/caching/RenderingCacheNode.js +26 -15
  63. package/dist/cjs/rendering/caching/testUtils.js +2 -2
  64. package/dist/cjs/rendering/renderers/AbstractRenderer.js +3 -1
  65. package/dist/cjs/rendering/renderers/CanvasRenderer.js +4 -3
  66. package/dist/cjs/rendering/renderers/DummyRenderer.js +1 -1
  67. package/dist/cjs/rendering/renderers/SVGRenderer.js +37 -19
  68. package/dist/cjs/rendering/renderers/TextOnlyRenderer.js +13 -15
  69. package/dist/cjs/shortcuts/KeyBinding.js +6 -12
  70. package/dist/cjs/shortcuts/KeyboardShortcutManager.js +2 -2
  71. package/dist/cjs/testing/createEditor.js +6 -1
  72. package/dist/cjs/testing/findNodeWithText.d.ts +4 -1
  73. package/dist/cjs/testing/findNodeWithText.js +12 -3
  74. package/dist/cjs/testing/getUniquePointerId.js +1 -1
  75. package/dist/cjs/testing/sendHtmlSwipe.js +7 -3
  76. package/dist/cjs/testing/sendPenEvent.js +1 -3
  77. package/dist/cjs/testing/sendTouchEvent.js +1 -4
  78. package/dist/cjs/testing/startPinchGesture.js +3 -1
  79. package/dist/cjs/toolbar/AbstractToolbar.js +7 -11
  80. package/dist/cjs/toolbar/EdgeToolbar.js +11 -15
  81. package/dist/cjs/toolbar/IconProvider.js +5 -3
  82. package/dist/cjs/toolbar/localization.js +3 -3
  83. package/dist/cjs/toolbar/utils/HelpDisplay.js +8 -6
  84. package/dist/cjs/toolbar/utils/makeDraggable.js +4 -7
  85. package/dist/cjs/toolbar/widgets/BaseToolWidget.js +3 -2
  86. package/dist/cjs/toolbar/widgets/BaseWidget.js +7 -7
  87. package/dist/cjs/toolbar/widgets/DocumentPropertiesWidget.js +2 -2
  88. package/dist/cjs/toolbar/widgets/EraserToolWidget.js +5 -3
  89. package/dist/cjs/toolbar/widgets/HandToolWidget.js +8 -6
  90. package/dist/cjs/toolbar/widgets/InsertImageWidget/InsertImageWidget.js +9 -10
  91. package/dist/cjs/toolbar/widgets/PenToolWidget.js +22 -13
  92. package/dist/cjs/toolbar/widgets/SelectionToolWidget.js +2 -2
  93. package/dist/cjs/toolbar/widgets/TextToolWidget.js +5 -5
  94. package/dist/cjs/toolbar/widgets/components/makeFileInput.js +7 -7
  95. package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +5 -5
  96. package/dist/cjs/toolbar/widgets/components/makeSnappedList.js +9 -5
  97. package/dist/cjs/toolbar/widgets/keybindings.js +2 -2
  98. package/dist/cjs/toolbar/widgets/layout/DropdownLayoutManager.js +6 -6
  99. package/dist/cjs/tools/BaseTool.js +5 -3
  100. package/dist/cjs/tools/Eraser.js +25 -20
  101. package/dist/cjs/tools/FindTool.js +2 -2
  102. package/dist/cjs/tools/InputFilter/ContextMenuRecognizer.js +1 -3
  103. package/dist/cjs/tools/InputFilter/InputMapper.js +1 -1
  104. package/dist/cjs/tools/InputFilter/InputPipeline.js +1 -1
  105. package/dist/cjs/tools/InputFilter/InputStabilizer.js +12 -5
  106. package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.js +7 -4
  107. package/dist/cjs/tools/PanZoom.d.ts +1 -1
  108. package/dist/cjs/tools/PanZoom.js +17 -12
  109. package/dist/cjs/tools/PasteHandler.js +8 -2
  110. package/dist/cjs/tools/Pen.js +17 -9
  111. package/dist/cjs/tools/ScrollbarTool.js +8 -7
  112. package/dist/cjs/tools/SelectionTool/Selection.js +16 -12
  113. package/dist/cjs/tools/SelectionTool/SelectionHandle.js +5 -2
  114. package/dist/cjs/tools/SelectionTool/SelectionMenuShortcut.js +3 -1
  115. package/dist/cjs/tools/SelectionTool/SelectionTool.js +25 -16
  116. package/dist/cjs/tools/SelectionTool/ToPointerAutoscroller.js +1 -1
  117. package/dist/cjs/tools/SelectionTool/TransformMode.js +6 -7
  118. package/dist/cjs/tools/SelectionTool/util/makeClipboardErrorHandlers.js +23 -2
  119. package/dist/cjs/tools/SelectionTool/util/showSelectionContextMenu.js +29 -20
  120. package/dist/cjs/tools/SoundUITool.js +5 -3
  121. package/dist/cjs/tools/TextTool.js +8 -6
  122. package/dist/cjs/tools/ToolController.js +16 -10
  123. package/dist/cjs/tools/localization.d.ts +2 -0
  124. package/dist/cjs/tools/localization.js +3 -1
  125. package/dist/cjs/tools/util/StationaryPenDetector.js +3 -3
  126. package/dist/cjs/tools/util/createMenuOverlay.js +2 -2
  127. package/dist/cjs/util/ClipboardHandler.d.ts +1 -1
  128. package/dist/cjs/util/ClipboardHandler.js +19 -18
  129. package/dist/cjs/util/ReactiveValue.js +16 -12
  130. package/dist/cjs/util/adjustEditorThemeForContrast.js +6 -2
  131. package/dist/cjs/util/guessKeyCodeFromKey.js +1 -1
  132. package/dist/cjs/util/listenForKeyboardEventsFrom.js +8 -6
  133. package/dist/cjs/util/waitForAll.js +3 -3
  134. package/dist/cjs/util/waitForImageLoaded.js +3 -3
  135. package/dist/cjs/util/waitForTimeout.js +1 -1
  136. package/dist/cjs/version.js +1 -1
  137. package/dist/mjs/Editor.mjs +37 -23
  138. package/dist/mjs/EventDispatcher.mjs +1 -1
  139. package/dist/mjs/Pointer.mjs +3 -3
  140. package/dist/mjs/SVGLoader/SVGLoader.mjs +14 -7
  141. package/dist/mjs/UndoRedoHistory.mjs +1 -1
  142. package/dist/mjs/Viewport.mjs +4 -2
  143. package/dist/mjs/commands/Command.mjs +7 -5
  144. package/dist/mjs/commands/Duplicate.mjs +2 -2
  145. package/dist/mjs/commands/Erase.mjs +3 -4
  146. package/dist/mjs/commands/invertCommand.mjs +4 -4
  147. package/dist/mjs/commands/lib.d.ts +1 -1
  148. package/dist/mjs/commands/lib.mjs +1 -1
  149. package/dist/mjs/commands/uniteCommands.mjs +4 -4
  150. package/dist/mjs/components/AbstractComponent.d.ts +1 -1
  151. package/dist/mjs/components/AbstractComponent.mjs +3 -3
  152. package/dist/mjs/components/BackgroundComponent.mjs +10 -8
  153. package/dist/mjs/components/ImageComponent.mjs +12 -5
  154. package/dist/mjs/components/RestylableComponent.mjs +2 -2
  155. package/dist/mjs/components/SVGGlobalAttributesObject.mjs +1 -2
  156. package/dist/mjs/components/Stroke.mjs +40 -27
  157. package/dist/mjs/components/TextComponent.mjs +15 -12
  158. package/dist/mjs/components/UnknownSVGObject.mjs +2 -3
  159. package/dist/mjs/components/builders/ArrowBuilder.d.ts +6 -0
  160. package/dist/mjs/components/builders/ArrowBuilder.mjs +9 -3
  161. package/dist/mjs/components/builders/CircleBuilder.d.ts +6 -0
  162. package/dist/mjs/components/builders/CircleBuilder.mjs +11 -4
  163. package/dist/mjs/components/builders/FreehandLineBuilder.d.ts +6 -0
  164. package/dist/mjs/components/builders/FreehandLineBuilder.mjs +10 -4
  165. package/dist/mjs/components/builders/LineBuilder.d.ts +6 -0
  166. package/dist/mjs/components/builders/LineBuilder.mjs +8 -4
  167. package/dist/mjs/components/builders/PolylineBuilder.d.ts +4 -1
  168. package/dist/mjs/components/builders/PolylineBuilder.mjs +10 -6
  169. package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.mjs +17 -11
  170. package/dist/mjs/components/builders/RectangleBuilder.d.ts +12 -0
  171. package/dist/mjs/components/builders/RectangleBuilder.mjs +17 -3
  172. package/dist/mjs/components/builders/autocorrect/makeShapeFitAutocorrect.mjs +5 -8
  173. package/dist/mjs/components/builders/autocorrect/makeSnapToGridAutocorrect.mjs +1 -1
  174. package/dist/mjs/components/builders/lib.d.ts +7 -0
  175. package/dist/mjs/components/builders/lib.mjs +7 -0
  176. package/dist/mjs/components/lib.d.ts +1 -4
  177. package/dist/mjs/components/lib.mjs +2 -5
  178. package/dist/mjs/components/util/StrokeSmoother.mjs +5 -6
  179. package/dist/mjs/dialogs/makeAboutDialog.mjs +1 -1
  180. package/dist/mjs/dialogs/makeMessageDialog.mjs +2 -2
  181. package/dist/mjs/image/EditorImage.mjs +13 -15
  182. package/dist/mjs/image/export/editorImageToSVG.mjs +1 -1
  183. package/dist/mjs/inputEvents.mjs +3 -3
  184. package/dist/mjs/lib.d.ts +2 -2
  185. package/dist/mjs/lib.mjs +2 -2
  186. package/dist/mjs/localization.mjs +2 -2
  187. package/dist/mjs/localizations/de.mjs +2 -2
  188. package/dist/mjs/localizations/es.mjs +7 -3
  189. package/dist/mjs/rendering/Display.mjs +7 -3
  190. package/dist/mjs/rendering/RenderablePathSpec.mjs +26 -11
  191. package/dist/mjs/rendering/RenderingStyle.mjs +22 -15
  192. package/dist/mjs/rendering/TextRenderingStyle.mjs +1 -1
  193. package/dist/mjs/rendering/caching/CacheRecord.mjs +1 -1
  194. package/dist/mjs/rendering/caching/CacheRecordManager.mjs +1 -1
  195. package/dist/mjs/rendering/caching/RenderingCache.mjs +1 -1
  196. package/dist/mjs/rendering/caching/RenderingCacheNode.mjs +26 -15
  197. package/dist/mjs/rendering/caching/testUtils.mjs +2 -2
  198. package/dist/mjs/rendering/renderers/AbstractRenderer.mjs +3 -1
  199. package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +4 -3
  200. package/dist/mjs/rendering/renderers/DummyRenderer.mjs +1 -1
  201. package/dist/mjs/rendering/renderers/SVGRenderer.mjs +38 -20
  202. package/dist/mjs/rendering/renderers/TextOnlyRenderer.mjs +13 -15
  203. package/dist/mjs/shortcuts/KeyBinding.mjs +6 -12
  204. package/dist/mjs/shortcuts/KeyboardShortcutManager.mjs +2 -2
  205. package/dist/mjs/testing/createEditor.mjs +6 -1
  206. package/dist/mjs/testing/findNodeWithText.d.ts +4 -1
  207. package/dist/mjs/testing/findNodeWithText.mjs +12 -3
  208. package/dist/mjs/testing/getUniquePointerId.mjs +1 -1
  209. package/dist/mjs/testing/sendHtmlSwipe.mjs +7 -3
  210. package/dist/mjs/testing/sendPenEvent.mjs +1 -3
  211. package/dist/mjs/testing/sendTouchEvent.mjs +1 -4
  212. package/dist/mjs/testing/startPinchGesture.mjs +3 -1
  213. package/dist/mjs/toolbar/AbstractToolbar.mjs +7 -11
  214. package/dist/mjs/toolbar/EdgeToolbar.mjs +11 -15
  215. package/dist/mjs/toolbar/IconProvider.mjs +5 -3
  216. package/dist/mjs/toolbar/localization.mjs +3 -3
  217. package/dist/mjs/toolbar/utils/HelpDisplay.mjs +8 -6
  218. package/dist/mjs/toolbar/utils/makeDraggable.mjs +4 -7
  219. package/dist/mjs/toolbar/widgets/BaseToolWidget.mjs +3 -2
  220. package/dist/mjs/toolbar/widgets/BaseWidget.mjs +8 -8
  221. package/dist/mjs/toolbar/widgets/DocumentPropertiesWidget.mjs +2 -2
  222. package/dist/mjs/toolbar/widgets/EraserToolWidget.mjs +5 -3
  223. package/dist/mjs/toolbar/widgets/HandToolWidget.mjs +8 -6
  224. package/dist/mjs/toolbar/widgets/InsertImageWidget/InsertImageWidget.mjs +9 -10
  225. package/dist/mjs/toolbar/widgets/PenToolWidget.mjs +23 -14
  226. package/dist/mjs/toolbar/widgets/SelectionToolWidget.mjs +2 -2
  227. package/dist/mjs/toolbar/widgets/TextToolWidget.mjs +5 -5
  228. package/dist/mjs/toolbar/widgets/components/makeFileInput.mjs +7 -7
  229. package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +5 -5
  230. package/dist/mjs/toolbar/widgets/components/makeSnappedList.mjs +9 -5
  231. package/dist/mjs/toolbar/widgets/keybindings.mjs +2 -2
  232. package/dist/mjs/toolbar/widgets/layout/DropdownLayoutManager.mjs +6 -6
  233. package/dist/mjs/tools/BaseTool.mjs +6 -4
  234. package/dist/mjs/tools/Eraser.mjs +25 -20
  235. package/dist/mjs/tools/FindTool.mjs +2 -2
  236. package/dist/mjs/tools/InputFilter/ContextMenuRecognizer.mjs +2 -4
  237. package/dist/mjs/tools/InputFilter/InputMapper.mjs +1 -1
  238. package/dist/mjs/tools/InputFilter/InputPipeline.mjs +1 -1
  239. package/dist/mjs/tools/InputFilter/InputStabilizer.mjs +13 -6
  240. package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.mjs +7 -4
  241. package/dist/mjs/tools/PanZoom.d.ts +1 -1
  242. package/dist/mjs/tools/PanZoom.mjs +18 -13
  243. package/dist/mjs/tools/PasteHandler.mjs +8 -2
  244. package/dist/mjs/tools/Pen.mjs +18 -10
  245. package/dist/mjs/tools/ScrollbarTool.mjs +8 -7
  246. package/dist/mjs/tools/SelectionTool/Selection.mjs +16 -12
  247. package/dist/mjs/tools/SelectionTool/SelectionHandle.mjs +5 -2
  248. package/dist/mjs/tools/SelectionTool/SelectionMenuShortcut.mjs +3 -1
  249. package/dist/mjs/tools/SelectionTool/SelectionTool.mjs +26 -17
  250. package/dist/mjs/tools/SelectionTool/ToPointerAutoscroller.mjs +1 -1
  251. package/dist/mjs/tools/SelectionTool/TransformMode.mjs +6 -7
  252. package/dist/mjs/tools/SelectionTool/util/makeClipboardErrorHandlers.mjs +23 -2
  253. package/dist/mjs/tools/SelectionTool/util/showSelectionContextMenu.mjs +29 -20
  254. package/dist/mjs/tools/SoundUITool.mjs +5 -3
  255. package/dist/mjs/tools/TextTool.mjs +8 -6
  256. package/dist/mjs/tools/ToolController.mjs +16 -10
  257. package/dist/mjs/tools/localization.d.ts +2 -0
  258. package/dist/mjs/tools/localization.mjs +3 -1
  259. package/dist/mjs/tools/util/StationaryPenDetector.mjs +3 -3
  260. package/dist/mjs/tools/util/createMenuOverlay.mjs +2 -2
  261. package/dist/mjs/util/ClipboardHandler.d.ts +1 -1
  262. package/dist/mjs/util/ClipboardHandler.mjs +19 -18
  263. package/dist/mjs/util/ReactiveValue.mjs +16 -12
  264. package/dist/mjs/util/adjustEditorThemeForContrast.mjs +6 -2
  265. package/dist/mjs/util/guessKeyCodeFromKey.mjs +1 -1
  266. package/dist/mjs/util/listenForKeyboardEventsFrom.mjs +8 -6
  267. package/dist/mjs/util/waitForAll.mjs +3 -3
  268. package/dist/mjs/util/waitForImageLoaded.mjs +3 -3
  269. package/dist/mjs/util/waitForTimeout.mjs +1 -1
  270. package/dist/mjs/version.mjs +1 -1
  271. package/package.json +88 -88
  272. package/src/Coloris.css +6 -6
  273. package/src/Editor.scss +7 -5
  274. package/src/dialogs/dialogs.scss +3 -4
  275. package/src/dialogs/makeAboutDialog.scss +2 -2
  276. package/src/dialogs/makeMessageDialog.scss +11 -7
  277. package/src/styles.js +1 -1
  278. package/src/toolbar/AbstractToolbar.scss +20 -12
  279. package/src/toolbar/DropdownToolbar.scss +5 -4
  280. package/src/toolbar/EdgeToolbar.scss +65 -31
  281. package/src/toolbar/toolbar.scss +5 -5
  282. package/src/toolbar/utils/HelpDisplay.scss +48 -25
  283. package/src/toolbar/utils/labelVisibleOnHover.scss +39 -16
  284. package/src/toolbar/widgets/DocumentPropertiesWidget.scss +0 -1
  285. package/src/toolbar/widgets/HandToolWidget.scss +0 -1
  286. package/src/toolbar/widgets/InsertImageWidget/InsertImageWidget.scss +2 -3
  287. package/src/toolbar/widgets/OverflowWidget.css +1 -2
  288. package/src/toolbar/widgets/PenToolWidget.scss +0 -2
  289. package/src/toolbar/widgets/SelectionToolWidget.scss +1 -2
  290. package/src/toolbar/widgets/components/components.scss +6 -6
  291. package/src/toolbar/widgets/components/makeColorInput.scss +0 -2
  292. package/src/toolbar/widgets/components/makeFileInput.scss +5 -7
  293. package/src/toolbar/widgets/components/makeGridSelector.scss +6 -9
  294. package/src/toolbar/widgets/components/makeSnappedList.scss +3 -4
  295. package/src/toolbar/widgets/components/makeThicknessSlider.scss +1 -2
  296. package/src/toolbar/widgets/widgets.scss +7 -7
  297. package/src/tools/FindTool.css +1 -2
  298. package/src/tools/ScrollbarTool.scss +9 -5
  299. package/src/tools/SelectionTool/SelectionTool.scss +15 -7
  300. package/src/tools/SelectionTool/util/makeClipboardErrorHandlers.scss +1 -2
  301. package/src/tools/SoundUITool.scss +4 -4
  302. package/src/tools/tools.scss +5 -6
  303. package/src/tools/util/createMenuOverlay.scss +10 -4
  304. package/tsconfig.json +1 -3
  305. package/typedoc.json +1 -1
@@ -30,7 +30,7 @@ export default class RenderingCacheNode {
30
30
  const middleChildIdx = (parent.instantiatedChildren.length - 1) / 2;
31
31
  if (!parent.instantiatedChildren[middleChildIdx].region.eq(this.region, checkTolerance)) {
32
32
  console.error(parent.instantiatedChildren[middleChildIdx].region, '≠', this.region);
33
- throw new Error('Logic error: [this] is not contained within its parent\'s center child');
33
+ throw new Error("Logic error: [this] is not contained within its parent's center child");
34
34
  }
35
35
  // Replace the middle child
36
36
  parent.instantiatedChildren[middleChildIdx] = this;
@@ -40,7 +40,8 @@ export default class RenderingCacheNode {
40
40
  // Generates children, if missing.
41
41
  generateChildren() {
42
42
  if (this.instantiatedChildren.length === 0) {
43
- if (this.region.size.x / cacheDivisionSize === 0 || this.region.size.y / cacheDivisionSize === 0) {
43
+ if (this.region.size.x / cacheDivisionSize === 0 ||
44
+ this.region.size.y / cacheDivisionSize === 0) {
44
45
  console.warn('Cache element has zero size! Not generating children.');
45
46
  return;
46
47
  }
@@ -135,8 +136,7 @@ export default class RenderingCacheNode {
135
136
  }
136
137
  // Render all [items] within [viewport]
137
138
  renderItems(screenRenderer, items, viewport) {
138
- if (!viewport.visibleRect.intersects(this.region)
139
- || items.length === 0) {
139
+ if (!viewport.visibleRect.intersects(this.region) || items.length === 0) {
140
140
  return;
141
141
  }
142
142
  // Divide [items] until nodes are smaller than this, or are leaves.
@@ -165,13 +165,15 @@ export default class RenderingCacheNode {
165
165
  return;
166
166
  }
167
167
  if (this.cacheState.debugMode) {
168
- screenRenderer.drawRect(this.region, viewport.getSizeOfPixelOnCanvas(), { fill: Color4.yellow });
168
+ screenRenderer.drawRect(this.region, viewport.getSizeOfPixelOnCanvas(), {
169
+ fill: Color4.yellow,
170
+ });
169
171
  }
170
172
  // Could we render direclty from [this] or do we need to recurse?
171
173
  const couldRender = this.renderingWouldBeHighEnoughResolution(viewport);
172
174
  if (!couldRender) {
173
175
  for (const child of this.getChildren()) {
174
- child.renderItems(screenRenderer, items.filter(item => {
176
+ child.renderItems(screenRenderer, items.filter((item) => {
175
177
  return item.getBBox().intersects(child.region);
176
178
  }), viewport);
177
179
  }
@@ -189,7 +191,7 @@ export default class RenderingCacheNode {
189
191
  if (leavesByIds.length === 0) {
190
192
  return;
191
193
  }
192
- const leafIds = leavesByIds.map(leaf => leaf.getId());
194
+ const leafIds = leavesByIds.map((leaf) => leaf.getId());
193
195
  let thisRenderer;
194
196
  if (!this.renderingIsUpToDate(leafIds)) {
195
197
  if (this.allChildrenCanRender(viewport, leavesByIds)) {
@@ -210,7 +212,9 @@ export default class RenderingCacheNode {
210
212
  if (!this.cachedRenderer) {
211
213
  this.cachedRenderer = this.cacheState.recordManager.allocCanvas(this.region, () => this.onRegionDealloc());
212
214
  }
213
- else if (leavesByIds.length > this.renderedIds.length && this.allRenderedIdsIn(leafIds) && this.renderedMaxZIndex !== null) {
215
+ else if (leavesByIds.length > this.renderedIds.length &&
216
+ this.allRenderedIdsIn(leafIds) &&
217
+ this.renderedMaxZIndex !== null) {
214
218
  // We often don't need to do a full re-render even if something's changed.
215
219
  // Check whether we can just draw on top of the existing cache.
216
220
  const newLeaves = [];
@@ -240,7 +244,9 @@ export default class RenderingCacheNode {
240
244
  }
241
245
  if (this.cacheState.debugMode) {
242
246
  // Clay for adding new elements
243
- screenRenderer.drawRect(this.region, 2 * viewport.getSizeOfPixelOnCanvas(), { fill: Color4.clay });
247
+ screenRenderer.drawRect(this.region, 2 * viewport.getSizeOfPixelOnCanvas(), {
248
+ fill: Color4.clay,
249
+ });
244
250
  }
245
251
  }
246
252
  }
@@ -261,7 +267,9 @@ export default class RenderingCacheNode {
261
267
  }
262
268
  if (this.cacheState.debugMode) {
263
269
  // Red for full rerender
264
- screenRenderer.drawRect(this.region, 3 * viewport.getSizeOfPixelOnCanvas(), { fill: Color4.red });
270
+ screenRenderer.drawRect(this.region, 3 * viewport.getSizeOfPixelOnCanvas(), {
271
+ fill: Color4.red,
272
+ });
265
273
  }
266
274
  }
267
275
  this.renderedIds = leafIds;
@@ -280,7 +288,9 @@ export default class RenderingCacheNode {
280
288
  screenRenderer.endObject();
281
289
  if (this.cacheState.debugMode) {
282
290
  // Green for no cache needed render
283
- screenRenderer.drawRect(this.region, 2 * viewport.getSizeOfPixelOnCanvas(), { fill: Color4.green });
291
+ screenRenderer.drawRect(this.region, 2 * viewport.getSizeOfPixelOnCanvas(), {
292
+ fill: Color4.green,
293
+ });
284
294
  }
285
295
  }
286
296
  }
@@ -292,7 +302,7 @@ export default class RenderingCacheNode {
292
302
  screenRenderer.renderFromOtherOfSameType(transformMat, thisRenderer);
293
303
  }
294
304
  // Can we clean up this' children? (Are they unused?)
295
- if (this.instantiatedChildren.every(child => child.isEmpty())) {
305
+ if (this.instantiatedChildren.every((child) => child.isEmpty())) {
296
306
  this.instantiatedChildren = [];
297
307
  }
298
308
  }
@@ -303,7 +313,7 @@ export default class RenderingCacheNode {
303
313
  if (this.cachedRenderer !== null) {
304
314
  return false;
305
315
  }
306
- return this.instantiatedChildren.every(child => child.isEmpty());
316
+ return this.instantiatedChildren.every((child) => child.isEmpty());
307
317
  }
308
318
  onRegionDealloc() {
309
319
  this.cachedRenderer = null;
@@ -312,7 +322,8 @@ export default class RenderingCacheNode {
312
322
  }
313
323
  }
314
324
  checkRep() {
315
- if (this.instantiatedChildren.length !== cacheDivisionSize * cacheDivisionSize && this.instantiatedChildren.length !== 0) {
325
+ if (this.instantiatedChildren.length !== cacheDivisionSize * cacheDivisionSize &&
326
+ this.instantiatedChildren.length !== 0) {
316
327
  throw new Error(`Repcheck: Wrong number of children. Got ${this.instantiatedChildren.length}`);
317
328
  }
318
329
  if (this.renderedIds[1] !== undefined && this.renderedIds[0] >= this.renderedIds[1]) {
@@ -325,7 +336,7 @@ export default class RenderingCacheNode {
325
336
  }
326
337
  }
327
338
  if (this.cachedRenderer && !this.cachedRenderer.isAllocd()) {
328
- throw new Error('this\' cachedRenderer != null, but is dealloc\'d');
339
+ throw new Error("this' cachedRenderer != null, but is dealloc'd");
329
340
  }
330
341
  }
331
342
  }
@@ -19,10 +19,10 @@ export const createCache = (onRenderAlloc, cacheOptions) => {
19
19
  maxScale: 2,
20
20
  minProportionalRenderTimePerCache: 0,
21
21
  minProportionalRenderTimeToUseCache: 0,
22
- ...cacheOptions
22
+ ...cacheOptions,
23
23
  });
24
24
  return {
25
25
  cache,
26
- editor
26
+ editor,
27
27
  };
28
28
  };
@@ -20,7 +20,9 @@ export default class AbstractRenderer {
20
20
  * methods on `Viewport`, because the viewport may not accurately reflect
21
21
  * what is rendered.
22
22
  */
23
- getViewport() { return this.viewport; }
23
+ getViewport() {
24
+ return this.viewport;
25
+ }
24
26
  setDraftMode(_draftMode) { }
25
27
  flushPath() {
26
28
  if (!this.currentPaths) {
@@ -131,8 +131,8 @@ export default class CanvasRenderer extends AbstractRenderer {
131
131
  // Approximate the curve if small enough.
132
132
  const delta1 = p2.minus(p1);
133
133
  const delta2 = p3.minus(p2);
134
- if (delta1.magnitudeSquared() < this.minSquareCurveApproxDist
135
- && delta2.magnitudeSquared() < this.minSquareCurveApproxDist) {
134
+ if (delta1.magnitudeSquared() < this.minSquareCurveApproxDist &&
135
+ delta2.magnitudeSquared() < this.minSquareCurveApproxDist) {
136
136
  this.ctx.lineTo(p3.x, p3.y);
137
137
  }
138
138
  else {
@@ -225,7 +225,8 @@ export default class CanvasRenderer extends AbstractRenderer {
225
225
  }
226
226
  }
227
227
  // If exiting an object with a too-small-to-draw bounding box,
228
- if (this.ignoreObjectsAboveLevel !== null && this.getNestingLevel() <= this.ignoreObjectsAboveLevel) {
228
+ if (this.ignoreObjectsAboveLevel !== null &&
229
+ this.getNestingLevel() <= this.ignoreObjectsAboveLevel) {
229
230
  this.ignoreObjectsAboveLevel = null;
230
231
  this.ignoringObject = false;
231
232
  }
@@ -99,7 +99,7 @@ export default class DummyRenderer extends AbstractRenderer {
99
99
  this.renderedPathCount += other.renderedPathCount;
100
100
  this.lastFillStyle = other.lastFillStyle;
101
101
  this.lastPoint = other.lastPoint;
102
- this.pointBuffer.push(...other.pointBuffer.map(point => {
102
+ this.pointBuffer.push(...other.pointBuffer.map((point) => {
103
103
  return transform.transformVec2(point);
104
104
  }));
105
105
  }
@@ -1,5 +1,5 @@
1
1
  import { Mat33, Vec2, toRoundedString } from '@js-draw/math';
2
- import { svgAttributesDataKey, svgLoaderAttributeContainerID, svgStyleAttributesDataKey } from '../../SVGLoader/SVGLoader.mjs';
2
+ import { svgAttributesDataKey, svgLoaderAttributeContainerID, svgStyleAttributesDataKey, } from '../../SVGLoader/SVGLoader.mjs';
3
3
  import { stylesEqual } from '../RenderingStyle.mjs';
4
4
  import AbstractRenderer from './AbstractRenderer.mjs';
5
5
  import { pathFromRenderable } from '../RenderablePathSpec.mjs';
@@ -120,7 +120,9 @@ export default class SVGRenderer extends AbstractRenderer {
120
120
  const style = pathSpec.style;
121
121
  const path = pathFromRenderable(pathSpec).transformedBy(this.getCanvasToScreenTransform());
122
122
  // Try to extend the previous path, if possible
123
- if (this.lastPathString.length === 0 || !this.lastPathStyle || !stylesEqual(this.lastPathStyle, style)) {
123
+ if (this.lastPathString.length === 0 ||
124
+ !this.lastPathStyle ||
125
+ !stylesEqual(this.lastPathStyle, style)) {
124
126
  this.addPathToSVG();
125
127
  this.lastPathStyle = style;
126
128
  this.lastPathString = [];
@@ -130,7 +132,9 @@ export default class SVGRenderer extends AbstractRenderer {
130
132
  // Apply [elemTransform] to [elem]. Uses both a `matrix` and `.x`, `.y` properties if `setXY` is true.
131
133
  // Otherwise, just uses a `matrix`.
132
134
  transformFrom(elemTransform, elem, inCanvasSpace = false) {
133
- const transform = !inCanvasSpace ? this.getCanvasToScreenTransform().rightMul(elemTransform) : elemTransform;
135
+ const transform = !inCanvasSpace
136
+ ? this.getCanvasToScreenTransform().rightMul(elemTransform)
137
+ : elemTransform;
134
138
  if (!transform.eq(Mat33.identity)) {
135
139
  const matrixString = transform.toCSSMatrix();
136
140
  elem.style.transform = matrixString;
@@ -255,15 +259,15 @@ export default class SVGRenderer extends AbstractRenderer {
255
259
  containerIDList = containerIDData[0];
256
260
  }
257
261
  }
258
- if (containerIDList.length > 0
262
+ if (containerIDList.length > 0 &&
259
263
  // containerIDList must share a prefix with the last ID list
260
264
  // otherwise, the z order of elements may have been changed from
261
265
  // the original image.
262
266
  // In the case that the z order has been changed, keep the current
263
267
  // element as a child of the root to preserve z order.
264
- && listPrefixMatch(this.lastContainerIDList, containerIDList)
268
+ listPrefixMatch(this.lastContainerIDList, containerIDList) &&
265
269
  // The component can add at most one more parent than the previous item.
266
- && this.lastContainerIDList.length >= containerIDList.length - 1) {
270
+ this.lastContainerIDList.length >= containerIDList.length - 1) {
267
271
  // Select the last
268
272
  const containerID = containerIDList[containerIDList.length - 1];
269
273
  const containerCandidates = this.elem.querySelectorAll(`g#${containerID}`);
@@ -272,7 +276,8 @@ export default class SVGRenderer extends AbstractRenderer {
272
276
  // If this is the first time we're entering the group, the
273
277
  // group should be empty.
274
278
  // Otherwise, this may be a case that would break z-ordering.
275
- if (container.children.length === 0 || this.lastContainerIDList.length >= containerIDList.length) {
279
+ if (container.children.length === 0 ||
280
+ this.lastContainerIDList.length >= containerIDList.length) {
276
281
  // Move all objectElems to the found container
277
282
  for (const elem of this.objectElems) {
278
283
  elem.remove();
@@ -306,15 +311,29 @@ export default class SVGRenderer extends AbstractRenderer {
306
311
  }
307
312
  }
308
313
  // Not implemented -- use drawPath instead.
309
- unimplementedMessage() { throw new Error('Not implemenented!'); }
310
- beginPath(_startPoint) { this.unimplementedMessage(); }
311
- endPath(_style) { this.unimplementedMessage(); }
312
- lineTo(_point) { this.unimplementedMessage(); }
313
- moveTo(_point) { this.unimplementedMessage(); }
314
- traceCubicBezierCurve(_controlPoint1, _controlPoint2, _endPoint) { this.unimplementedMessage(); }
315
- traceQuadraticBezierCurve(_controlPoint, _endPoint) { this.unimplementedMessage(); }
314
+ unimplementedMessage() {
315
+ throw new Error('Not implemenented!');
316
+ }
317
+ beginPath(_startPoint) {
318
+ this.unimplementedMessage();
319
+ }
320
+ endPath(_style) {
321
+ this.unimplementedMessage();
322
+ }
323
+ lineTo(_point) {
324
+ this.unimplementedMessage();
325
+ }
326
+ moveTo(_point) {
327
+ this.unimplementedMessage();
328
+ }
329
+ traceCubicBezierCurve(_controlPoint1, _controlPoint2, _endPoint) {
330
+ this.unimplementedMessage();
331
+ }
332
+ traceQuadraticBezierCurve(_controlPoint, _endPoint) {
333
+ this.unimplementedMessage();
334
+ }
316
335
  drawPoints(...points) {
317
- points.map(point => {
336
+ points.map((point) => {
318
337
  const elem = document.createElementNS(svgNameSpace, 'circle');
319
338
  elem.setAttribute('cx', `${point.x}`);
320
339
  elem.setAttribute('cy', `${point.y}`);
@@ -328,7 +347,8 @@ export default class SVGRenderer extends AbstractRenderer {
328
347
  return;
329
348
  }
330
349
  // Don't add multiple copies of the default stylesheet.
331
- if (elem.tagName.toLowerCase() === 'style' && elem.getAttribute('id') === renderedStylesheetId) {
350
+ if (elem.tagName.toLowerCase() === 'style' &&
351
+ elem.getAttribute('id') === renderedStylesheetId) {
332
352
  return;
333
353
  }
334
354
  const elemToDraw = elem.cloneNode(true);
@@ -363,9 +383,7 @@ export default class SVGRenderer extends AbstractRenderer {
363
383
  let viewBoxComponents;
364
384
  if (useViewBoxForPositioning) {
365
385
  const exportRect = viewport.visibleRect;
366
- viewBoxComponents = [
367
- exportRect.x, exportRect.y, exportRect.w, exportRect.h,
368
- ];
386
+ viewBoxComponents = [exportRect.x, exportRect.y, exportRect.w, exportRect.h];
369
387
  // Replace the viewport with a copy that has a modified transform.
370
388
  // (Avoids modifying the original viewport).
371
389
  viewport = viewport.getTemporaryClone();
@@ -377,7 +395,7 @@ export default class SVGRenderer extends AbstractRenderer {
377
395
  viewBoxComponents = [0, 0, screenRectSize.x, screenRectSize.y];
378
396
  }
379
397
  // rect.x -> size of rect in x direction, rect.y -> size of rect in y direction.
380
- result.setAttribute('viewBox', viewBoxComponents.map(part => toRoundedString(part)).join(' '));
398
+ result.setAttribute('viewBox', viewBoxComponents.map((part) => toRoundedString(part)).join(' '));
381
399
  result.setAttribute('width', toRoundedString(screenRectSize.x));
382
400
  result.setAttribute('height', toRoundedString(screenRectSize.y));
383
401
  // Ensure the image can be identified as an SVG if downloaded.
@@ -24,35 +24,33 @@ export default class TextOnlyRenderer extends AbstractRenderer {
24
24
  return [
25
25
  this.localizationTable.pathNodeCount(this.pathCount),
26
26
  ...(this.textNodeCount > 0 ? [this.localizationTable.textNodeCount(this.textNodeCount)] : []),
27
- ...(this.imageNodeCount > 0 ? [this.localizationTable.imageNodeCount(this.imageNodeCount)] : []),
28
- ...this.descriptionBuilder
27
+ ...(this.imageNodeCount > 0
28
+ ? [this.localizationTable.imageNodeCount(this.imageNodeCount)]
29
+ : []),
30
+ ...this.descriptionBuilder,
29
31
  ].join('\n');
30
32
  }
31
- beginPath(_startPoint) {
32
- }
33
+ beginPath(_startPoint) { }
33
34
  endPath(_style) {
34
35
  this.pathCount++;
35
36
  }
36
- lineTo(_point) {
37
- }
38
- moveTo(_point) {
39
- }
40
- traceCubicBezierCurve(_p1, _p2, _p3) {
41
- }
42
- traceQuadraticBezierCurve(_controlPoint, _endPoint) {
43
- }
37
+ lineTo(_point) { }
38
+ moveTo(_point) { }
39
+ traceCubicBezierCurve(_p1, _p2, _p3) { }
40
+ traceQuadraticBezierCurve(_controlPoint, _endPoint) { }
44
41
  drawText(text, _transform, _style) {
45
42
  this.descriptionBuilder.push(this.localizationTable.textNode(text));
46
43
  this.textNodeCount++;
47
44
  }
48
45
  drawImage(image) {
49
- const label = image.label ? this.localizationTable.imageNode(image.label) : this.localizationTable.unlabeledImageNode;
46
+ const label = image.label
47
+ ? this.localizationTable.imageNode(image.label)
48
+ : this.localizationTable.unlabeledImageNode;
50
49
  this.descriptionBuilder.push(label);
51
50
  this.imageNodeCount++;
52
51
  }
53
52
  isTooSmallToRender(rect) {
54
53
  return rect.maxDimension < 15 / this.getSizeOfCanvasPixelOnScreen();
55
54
  }
56
- drawPoints(..._points) {
57
- }
55
+ drawPoints(..._points) { }
58
56
  }
@@ -1,12 +1,8 @@
1
1
  const isUppercaseLetter = (text) => {
2
- return text.toUpperCase() === text
3
- && text.toLowerCase() !== text
4
- && text.length === 1;
2
+ return text.toUpperCase() === text && text.toLowerCase() !== text && text.length === 1;
5
3
  };
6
4
  const isLowercaseLetter = (text) => {
7
- return text.toLowerCase() === text
8
- && text.toUpperCase() !== text
9
- && text.length === 1;
5
+ return text.toLowerCase() === text && text.toUpperCase() !== text && text.length === 1;
10
6
  };
11
7
  /** Represents a key combination that can trigger a keyboard shortcut. */
12
8
  export default class KeyBinding {
@@ -49,12 +45,10 @@ export default class KeyBinding {
49
45
  const shortcutControlOrMeta = this.controlOrMeta;
50
46
  // Match ctrl/meta if the shortcut doesn't have controlOrMeta specified
51
47
  // (controlOrMeta should match either).
52
- const ctrlAndMetaMatches = ctrlKey === this.ctrlKey
53
- && metaKey === this.metaKey
54
- && !shortcutControlOrMeta;
55
- const matches = (ctrlAndMetaMatches || (shortcutControlOrMeta && keyEventHasCtrlOrMeta))
56
- && altKey === this.altKey
57
- && (shiftKey === this.shiftKey || this.shiftKey === undefined);
48
+ const ctrlAndMetaMatches = ctrlKey === this.ctrlKey && metaKey === this.metaKey && !shortcutControlOrMeta;
49
+ const matches = (ctrlAndMetaMatches || (shortcutControlOrMeta && keyEventHasCtrlOrMeta)) &&
50
+ altKey === this.altKey &&
51
+ (shiftKey === this.shiftKey || this.shiftKey === undefined);
58
52
  return matches;
59
53
  }
60
54
  /**
@@ -77,8 +77,8 @@ class KeyboardShortcutManager {
77
77
  return false;
78
78
  }
79
79
  // Convert the strings to shortcut maps.
80
- const shortcutsAsShortcuts = shortcuts.map(shortcut => {
81
- if (typeof (shortcut) === 'string') {
80
+ const shortcutsAsShortcuts = shortcuts.map((shortcut) => {
81
+ if (typeof shortcut === 'string') {
82
82
  return KeyBinding.fromString(shortcut);
83
83
  }
84
84
  return shortcut;
@@ -1,9 +1,14 @@
1
1
  import { RenderingMode } from '../rendering/Display.mjs';
2
2
  import Editor from '../Editor.mjs';
3
+ import getLocalizationTable from '../localizations/getLocalizationTable.mjs';
3
4
  /** Creates an editor. Should only be used in test files. */
4
5
  export default (settings) => {
5
6
  if (jest === undefined) {
6
7
  throw new Error('Files in the testing/ folder should only be used in tests!');
7
8
  }
8
- return new Editor(document.body, { renderingMode: RenderingMode.DummyRenderer, ...settings });
9
+ return new Editor(document.body, {
10
+ renderingMode: RenderingMode.DummyRenderer,
11
+ localization: getLocalizationTable(['en']),
12
+ ...settings,
13
+ });
9
14
  };
@@ -1,3 +1,6 @@
1
+ interface Options {
2
+ tag?: string;
3
+ }
1
4
  /** Returns the first node or element with `textContent` matching `expectedText`. */
2
- declare const findNodeWithText: (expectedText: string, parent: Node) => Node | null;
5
+ declare const findNodeWithText: (expectedText: string, parent: Node, options?: Options) => Node | null;
3
6
  export default findNodeWithText;
@@ -1,10 +1,19 @@
1
1
  /** Returns the first node or element with `textContent` matching `expectedText`. */
2
- const findNodeWithText = (expectedText, parent) => {
2
+ const findNodeWithText = (expectedText, parent, options = {}) => {
3
+ const { tag } = options;
3
4
  if (parent.textContent === expectedText) {
4
- return parent;
5
+ const matchesTag = (() => {
6
+ // No tag check necessary?
7
+ if (!tag)
8
+ return true;
9
+ return parent instanceof Element && tag.toUpperCase() === parent.tagName;
10
+ })();
11
+ if (matchesTag) {
12
+ return parent;
13
+ }
5
14
  }
6
15
  for (const child of parent.childNodes) {
7
- const results = findNodeWithText(expectedText, child);
16
+ const results = findNodeWithText(expectedText, child, options);
8
17
  if (results) {
9
18
  return results;
10
19
  }
@@ -1,7 +1,7 @@
1
1
  /** Returns the smallest ID not used by the pointers in the given list. */
2
2
  const getUniquePointerId = (pointers) => {
3
3
  let ptrId = 0;
4
- const pointerIds = pointers.map(ptr => ptr.id);
4
+ const pointerIds = pointers.map((ptr) => ptr.id);
5
5
  pointerIds.sort();
6
6
  for (const pointerId of pointerIds) {
7
7
  if (ptrId === pointerId) {
@@ -1,12 +1,16 @@
1
1
  /** Swipes `element` using HTML pointer events. */
2
2
  const sendHtmlSwipe = async (element, start, end, timeMs = 300) => {
3
- element.dispatchEvent(new PointerEvent('pointerdown', { isPrimary: true, clientX: start.x, clientY: start.y, }));
3
+ element.dispatchEvent(new PointerEvent('pointerdown', { isPrimary: true, clientX: start.x, clientY: start.y }));
4
4
  const step = 0.1;
5
5
  for (let i = 0; i < 1; i += step) {
6
6
  await jest.advanceTimersByTimeAsync(timeMs * step);
7
7
  const currentPoint = start.lerp(end, i);
8
- element.dispatchEvent(new PointerEvent('pointermove', { isPrimary: true, clientX: currentPoint.x, clientY: currentPoint.y, }));
8
+ element.dispatchEvent(new PointerEvent('pointermove', {
9
+ isPrimary: true,
10
+ clientX: currentPoint.x,
11
+ clientY: currentPoint.y,
12
+ }));
9
13
  }
10
- element.dispatchEvent(new PointerEvent('pointerup', { isPrimary: true, clientX: end.x, clientY: end.y, }));
14
+ element.dispatchEvent(new PointerEvent('pointerup', { isPrimary: true, clientX: end.x, clientY: end.y }));
11
15
  };
12
16
  export default sendHtmlSwipe;
@@ -12,9 +12,7 @@ const sendPenEvent = (editor, eventType, point, allPointers, deviceType = Pointe
12
12
  const mainPointer = Pointer.ofCanvasPoint(point, eventType !== InputEvtType.PointerUpEvt, editor.viewport, id, deviceType);
13
13
  editor.toolController.dispatchInputEvent({
14
14
  kind: eventType,
15
- allPointers: allPointers ?? [
16
- mainPointer,
17
- ],
15
+ allPointers: allPointers ?? [mainPointer],
18
16
  current: mainPointer,
19
17
  });
20
18
  return mainPointer;
@@ -45,10 +45,7 @@ const sendTouchEvent = (editor, eventType, screenPos, allOtherPointers) => {
45
45
  const mainPointer = Pointer.ofCanvasPoint(canvasPos, eventType !== InputEvtType.PointerUpEvt, editor.viewport, ptrId, PointerDevice.Touch);
46
46
  editor.toolController.dispatchInputEvent({
47
47
  kind: eventType,
48
- allPointers: [
49
- ...(allOtherPointers ?? []),
50
- mainPointer,
51
- ],
48
+ allPointers: [...(allOtherPointers ?? []), mainPointer],
52
49
  current: mainPointer,
53
50
  });
54
51
  return mainPointer;
@@ -17,7 +17,9 @@ const startPinchGesture = (editor, center, initialDistance, initialRotation) =>
17
17
  };
18
18
  let [touchPoint1, touchPoint2] = computeTouchPoints(center, initialDistance, initialRotation);
19
19
  let firstPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, touchPoint1);
20
- let secondPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, touchPoint2, [firstPointer]);
20
+ let secondPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, touchPoint2, [
21
+ firstPointer,
22
+ ]);
21
23
  return {
22
24
  update(center, distance, rotation) {
23
25
  const eventType = InputEvtType.PointerMoveEvt;
@@ -133,7 +133,7 @@ class AbstractToolbar {
133
133
  initColoris();
134
134
  }
135
135
  };
136
- __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.notifier.on(EditorEventType.ColorPickerToggled, event => {
136
+ __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.notifier.on(EditorEventType.ColorPickerToggled, (event) => {
137
137
  if (event.kind !== EditorEventType.ColorPickerToggled) {
138
138
  return;
139
139
  }
@@ -144,7 +144,7 @@ class AbstractToolbar {
144
144
  }
145
145
  }));
146
146
  // Add newly-selected colors to the swatch.
147
- __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.notifier.on(EditorEventType.ColorPickerColorSelected, event => {
147
+ __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.notifier.on(EditorEventType.ColorPickerColorSelected, (event) => {
148
148
  if (event.kind === EditorEventType.ColorPickerColorSelected) {
149
149
  addColorToSwatch(event.color.toHexString());
150
150
  }
@@ -188,7 +188,7 @@ class AbstractToolbar {
188
188
  const id = widget.getUniqueIdIn(__classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f"));
189
189
  this.removeWidgetInternal(widget);
190
190
  delete __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[id];
191
- __classPrivateFieldSet(this, _AbstractToolbar_widgetList, __classPrivateFieldGet(this, _AbstractToolbar_widgetList, "f").filter(otherWidget => otherWidget !== widget), "f");
191
+ __classPrivateFieldSet(this, _AbstractToolbar_widgetList, __classPrivateFieldGet(this, _AbstractToolbar_widgetList, "f").filter((otherWidget) => otherWidget !== widget), "f");
192
192
  }
193
193
  /** Returns a snapshot of the state of widgets in the toolbar. */
194
194
  serializeState() {
@@ -331,19 +331,15 @@ class AbstractToolbar {
331
331
  */
332
332
  addUndoRedoButtons(undoFirst = true) {
333
333
  const makeUndo = () => {
334
- return this.addTaggedActionButton([
335
- ToolbarWidgetTag.Undo,
336
- ], {
334
+ return this.addTaggedActionButton([ToolbarWidgetTag.Undo], {
337
335
  label: this.localizationTable.undo,
338
- icon: this.editor.icons.makeUndoIcon()
336
+ icon: this.editor.icons.makeUndoIcon(),
339
337
  }, () => {
340
338
  this.editor.history.undo();
341
339
  });
342
340
  };
343
341
  const makeRedo = () => {
344
- return this.addTaggedActionButton([
345
- ToolbarWidgetTag.Redo,
346
- ], {
342
+ return this.addTaggedActionButton([ToolbarWidgetTag.Redo], {
347
343
  label: this.localizationTable.redo,
348
344
  icon: this.editor.icons.makeRedoIcon(),
349
345
  }, () => {
@@ -362,7 +358,7 @@ class AbstractToolbar {
362
358
  }
363
359
  undoButton.setDisabled(true);
364
360
  redoButton.setDisabled(true);
365
- this.editor.notifier.on(EditorEventType.UndoRedoStackUpdated, event => {
361
+ this.editor.notifier.on(EditorEventType.UndoRedoStackUpdated, (event) => {
366
362
  if (event.kind !== EditorEventType.UndoRedoStackUpdated) {
367
363
  throw new Error('Wrong event type!');
368
364
  }