js-draw 1.21.3 → 1.23.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (331) hide show
  1. package/README.md +104 -76
  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.d.ts +1 -3
  7. package/dist/cjs/Editor.js +38 -26
  8. package/dist/cjs/EventDispatcher.js +1 -1
  9. package/dist/cjs/Pointer.js +3 -3
  10. package/dist/cjs/SVGLoader/SVGLoader.js +15 -6
  11. package/dist/cjs/UndoRedoHistory.js +1 -1
  12. package/dist/cjs/Viewport.d.ts +1 -1
  13. package/dist/cjs/Viewport.js +5 -3
  14. package/dist/cjs/commands/Command.js +7 -5
  15. package/dist/cjs/commands/Duplicate.js +2 -2
  16. package/dist/cjs/commands/Erase.js +3 -4
  17. package/dist/cjs/commands/invertCommand.js +4 -4
  18. package/dist/cjs/commands/lib.d.ts +1 -1
  19. package/dist/cjs/commands/uniteCommands.js +4 -4
  20. package/dist/cjs/components/AbstractComponent.d.ts +2 -2
  21. package/dist/cjs/components/AbstractComponent.js +4 -4
  22. package/dist/cjs/components/BackgroundComponent.js +8 -6
  23. package/dist/cjs/components/ImageComponent.js +12 -5
  24. package/dist/cjs/components/RestylableComponent.js +1 -1
  25. package/dist/cjs/components/SVGGlobalAttributesObject.js +1 -2
  26. package/dist/cjs/components/Stroke.js +37 -24
  27. package/dist/cjs/components/TextComponent.js +13 -10
  28. package/dist/cjs/components/UnknownSVGObject.js +2 -3
  29. package/dist/cjs/components/builders/ArrowBuilder.d.ts +6 -0
  30. package/dist/cjs/components/builders/ArrowBuilder.js +9 -3
  31. package/dist/cjs/components/builders/CircleBuilder.d.ts +6 -0
  32. package/dist/cjs/components/builders/CircleBuilder.js +11 -4
  33. package/dist/cjs/components/builders/FreehandLineBuilder.d.ts +6 -0
  34. package/dist/cjs/components/builders/FreehandLineBuilder.js +10 -4
  35. package/dist/cjs/components/builders/LineBuilder.d.ts +6 -0
  36. package/dist/cjs/components/builders/LineBuilder.js +8 -4
  37. package/dist/cjs/components/builders/PolylineBuilder.d.ts +4 -1
  38. package/dist/cjs/components/builders/PolylineBuilder.js +9 -5
  39. package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.js +16 -10
  40. package/dist/cjs/components/builders/RectangleBuilder.d.ts +12 -0
  41. package/dist/cjs/components/builders/RectangleBuilder.js +17 -3
  42. package/dist/cjs/components/builders/autocorrect/makeShapeFitAutocorrect.js +5 -8
  43. package/dist/cjs/components/builders/autocorrect/makeSnapToGridAutocorrect.js +1 -1
  44. package/dist/cjs/components/builders/lib.d.ts +7 -0
  45. package/dist/cjs/components/builders/lib.js +18 -0
  46. package/dist/cjs/components/lib.d.ts +1 -4
  47. package/dist/cjs/components/lib.js +2 -9
  48. package/dist/cjs/components/util/StrokeSmoother.js +5 -6
  49. package/dist/cjs/dialogs/makeAboutDialog.js +1 -1
  50. package/dist/cjs/dialogs/makeMessageDialog.js +2 -2
  51. package/dist/cjs/image/EditorImage.d.ts +30 -7
  52. package/dist/cjs/image/EditorImage.js +43 -22
  53. package/dist/cjs/image/export/editorImageToSVG.js +1 -1
  54. package/dist/cjs/inputEvents.js +3 -3
  55. package/dist/cjs/lib.d.ts +2 -2
  56. package/dist/cjs/localizations/de.js +2 -2
  57. package/dist/cjs/localizations/es.js +7 -3
  58. package/dist/cjs/rendering/Display.js +7 -3
  59. package/dist/cjs/rendering/RenderablePathSpec.js +26 -11
  60. package/dist/cjs/rendering/RenderingStyle.js +22 -15
  61. package/dist/cjs/rendering/TextRenderingStyle.js +1 -1
  62. package/dist/cjs/rendering/caching/CacheRecord.js +1 -1
  63. package/dist/cjs/rendering/caching/CacheRecordManager.js +1 -1
  64. package/dist/cjs/rendering/caching/RenderingCache.js +1 -1
  65. package/dist/cjs/rendering/caching/RenderingCacheNode.js +26 -15
  66. package/dist/cjs/rendering/caching/testUtils.js +2 -2
  67. package/dist/cjs/rendering/renderers/AbstractRenderer.js +3 -1
  68. package/dist/cjs/rendering/renderers/CanvasRenderer.d.ts +2 -25
  69. package/dist/cjs/rendering/renderers/CanvasRenderer.js +6 -28
  70. package/dist/cjs/rendering/renderers/DummyRenderer.js +1 -1
  71. package/dist/cjs/rendering/renderers/SVGRenderer.js +39 -21
  72. package/dist/cjs/rendering/renderers/TextOnlyRenderer.js +13 -15
  73. package/dist/cjs/shortcuts/KeyBinding.js +6 -12
  74. package/dist/cjs/shortcuts/KeyboardShortcutManager.js +2 -2
  75. package/dist/cjs/testing/createEditor.js +6 -1
  76. package/dist/cjs/testing/findNodeWithText.d.ts +4 -1
  77. package/dist/cjs/testing/findNodeWithText.js +12 -3
  78. package/dist/cjs/testing/getUniquePointerId.js +1 -1
  79. package/dist/cjs/testing/sendHtmlSwipe.js +7 -3
  80. package/dist/cjs/testing/sendPenEvent.js +1 -3
  81. package/dist/cjs/testing/sendTouchEvent.js +1 -4
  82. package/dist/cjs/testing/startPinchGesture.js +3 -1
  83. package/dist/cjs/toolbar/AbstractToolbar.d.ts +19 -0
  84. package/dist/cjs/toolbar/AbstractToolbar.js +26 -11
  85. package/dist/cjs/toolbar/EdgeToolbar.js +11 -15
  86. package/dist/cjs/toolbar/IconProvider.d.ts +5 -1
  87. package/dist/cjs/toolbar/IconProvider.js +117 -149
  88. package/dist/cjs/toolbar/localization.js +5 -5
  89. package/dist/cjs/toolbar/utils/HelpDisplay.js +8 -6
  90. package/dist/cjs/toolbar/utils/makeDraggable.js +4 -7
  91. package/dist/cjs/toolbar/widgets/BaseToolWidget.js +3 -2
  92. package/dist/cjs/toolbar/widgets/BaseWidget.d.ts +1 -1
  93. package/dist/cjs/toolbar/widgets/BaseWidget.js +8 -8
  94. package/dist/cjs/toolbar/widgets/DocumentPropertiesWidget.js +2 -2
  95. package/dist/cjs/toolbar/widgets/EraserToolWidget.js +5 -3
  96. package/dist/cjs/toolbar/widgets/HandToolWidget.js +8 -6
  97. package/dist/cjs/toolbar/widgets/InsertImageWidget/InsertImageWidget.js +9 -10
  98. package/dist/cjs/toolbar/widgets/PenToolWidget.js +22 -13
  99. package/dist/cjs/toolbar/widgets/SelectionToolWidget.js +2 -2
  100. package/dist/cjs/toolbar/widgets/TextToolWidget.js +5 -5
  101. package/dist/cjs/toolbar/widgets/components/makeFileInput.js +7 -7
  102. package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +5 -5
  103. package/dist/cjs/toolbar/widgets/components/makeSnappedList.js +9 -5
  104. package/dist/cjs/toolbar/widgets/keybindings.js +2 -2
  105. package/dist/cjs/toolbar/widgets/layout/DropdownLayoutManager.js +6 -6
  106. package/dist/cjs/tools/BaseTool.js +5 -3
  107. package/dist/cjs/tools/Eraser.js +25 -20
  108. package/dist/cjs/tools/FindTool.js +2 -2
  109. package/dist/cjs/tools/InputFilter/ContextMenuRecognizer.js +1 -3
  110. package/dist/cjs/tools/InputFilter/InputMapper.js +1 -1
  111. package/dist/cjs/tools/InputFilter/InputPipeline.js +1 -1
  112. package/dist/cjs/tools/InputFilter/InputStabilizer.js +12 -5
  113. package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.js +7 -4
  114. package/dist/cjs/tools/PanZoom.d.ts +1 -1
  115. package/dist/cjs/tools/PanZoom.js +18 -13
  116. package/dist/cjs/tools/PasteHandler.js +8 -2
  117. package/dist/cjs/tools/Pen.d.ts +13 -0
  118. package/dist/cjs/tools/Pen.js +30 -9
  119. package/dist/cjs/tools/ScrollbarTool.js +8 -7
  120. package/dist/cjs/tools/SelectionTool/Selection.js +16 -12
  121. package/dist/cjs/tools/SelectionTool/SelectionHandle.js +5 -2
  122. package/dist/cjs/tools/SelectionTool/SelectionMenuShortcut.js +3 -1
  123. package/dist/cjs/tools/SelectionTool/SelectionTool.js +25 -16
  124. package/dist/cjs/tools/SelectionTool/ToPointerAutoscroller.js +1 -1
  125. package/dist/cjs/tools/SelectionTool/TransformMode.js +6 -7
  126. package/dist/cjs/tools/SelectionTool/util/makeClipboardErrorHandlers.js +23 -2
  127. package/dist/cjs/tools/SelectionTool/util/showSelectionContextMenu.js +29 -20
  128. package/dist/cjs/tools/SoundUITool.js +5 -3
  129. package/dist/cjs/tools/TextTool.js +8 -6
  130. package/dist/cjs/tools/ToolController.js +16 -10
  131. package/dist/cjs/tools/lib.d.ts +1 -0
  132. package/dist/cjs/tools/lib.js +3 -1
  133. package/dist/cjs/tools/localization.d.ts +2 -0
  134. package/dist/cjs/tools/localization.js +3 -1
  135. package/dist/cjs/tools/util/StationaryPenDetector.js +3 -3
  136. package/dist/cjs/tools/util/createMenuOverlay.js +2 -2
  137. package/dist/cjs/util/ClipboardHandler.d.ts +1 -1
  138. package/dist/cjs/util/ClipboardHandler.js +19 -18
  139. package/dist/cjs/util/ReactiveValue.js +16 -12
  140. package/dist/cjs/util/adjustEditorThemeForContrast.js +6 -2
  141. package/dist/cjs/util/cloneElementWithStyles.js +1 -1
  142. package/dist/cjs/util/createElement.d.ts +62 -0
  143. package/dist/cjs/util/createElement.js +53 -0
  144. package/dist/cjs/util/guessKeyCodeFromKey.js +1 -1
  145. package/dist/cjs/util/listenForKeyboardEventsFrom.js +8 -6
  146. package/dist/cjs/util/waitForAll.js +3 -3
  147. package/dist/cjs/util/waitForImageLoaded.js +3 -3
  148. package/dist/cjs/util/waitForTimeout.js +1 -1
  149. package/dist/cjs/version.js +1 -1
  150. package/dist/mjs/Editor.d.ts +1 -3
  151. package/dist/mjs/Editor.mjs +39 -27
  152. package/dist/mjs/EventDispatcher.mjs +1 -1
  153. package/dist/mjs/Pointer.mjs +3 -3
  154. package/dist/mjs/SVGLoader/SVGLoader.mjs +16 -7
  155. package/dist/mjs/UndoRedoHistory.mjs +1 -1
  156. package/dist/mjs/Viewport.d.ts +1 -1
  157. package/dist/mjs/Viewport.mjs +5 -3
  158. package/dist/mjs/commands/Command.mjs +7 -5
  159. package/dist/mjs/commands/Duplicate.mjs +2 -2
  160. package/dist/mjs/commands/Erase.mjs +3 -4
  161. package/dist/mjs/commands/invertCommand.mjs +4 -4
  162. package/dist/mjs/commands/lib.d.ts +1 -1
  163. package/dist/mjs/commands/lib.mjs +1 -1
  164. package/dist/mjs/commands/uniteCommands.mjs +4 -4
  165. package/dist/mjs/components/AbstractComponent.d.ts +2 -2
  166. package/dist/mjs/components/AbstractComponent.mjs +4 -4
  167. package/dist/mjs/components/BackgroundComponent.mjs +10 -8
  168. package/dist/mjs/components/ImageComponent.mjs +12 -5
  169. package/dist/mjs/components/RestylableComponent.mjs +2 -2
  170. package/dist/mjs/components/SVGGlobalAttributesObject.mjs +1 -2
  171. package/dist/mjs/components/Stroke.mjs +40 -27
  172. package/dist/mjs/components/TextComponent.mjs +15 -12
  173. package/dist/mjs/components/UnknownSVGObject.mjs +2 -3
  174. package/dist/mjs/components/builders/ArrowBuilder.d.ts +6 -0
  175. package/dist/mjs/components/builders/ArrowBuilder.mjs +9 -3
  176. package/dist/mjs/components/builders/CircleBuilder.d.ts +6 -0
  177. package/dist/mjs/components/builders/CircleBuilder.mjs +11 -4
  178. package/dist/mjs/components/builders/FreehandLineBuilder.d.ts +6 -0
  179. package/dist/mjs/components/builders/FreehandLineBuilder.mjs +10 -4
  180. package/dist/mjs/components/builders/LineBuilder.d.ts +6 -0
  181. package/dist/mjs/components/builders/LineBuilder.mjs +8 -4
  182. package/dist/mjs/components/builders/PolylineBuilder.d.ts +4 -1
  183. package/dist/mjs/components/builders/PolylineBuilder.mjs +10 -6
  184. package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.mjs +17 -11
  185. package/dist/mjs/components/builders/RectangleBuilder.d.ts +12 -0
  186. package/dist/mjs/components/builders/RectangleBuilder.mjs +17 -3
  187. package/dist/mjs/components/builders/autocorrect/makeShapeFitAutocorrect.mjs +5 -8
  188. package/dist/mjs/components/builders/autocorrect/makeSnapToGridAutocorrect.mjs +1 -1
  189. package/dist/mjs/components/builders/lib.d.ts +7 -0
  190. package/dist/mjs/components/builders/lib.mjs +7 -0
  191. package/dist/mjs/components/lib.d.ts +1 -4
  192. package/dist/mjs/components/lib.mjs +2 -5
  193. package/dist/mjs/components/util/StrokeSmoother.mjs +5 -6
  194. package/dist/mjs/dialogs/makeAboutDialog.mjs +1 -1
  195. package/dist/mjs/dialogs/makeMessageDialog.mjs +2 -2
  196. package/dist/mjs/image/EditorImage.d.ts +30 -7
  197. package/dist/mjs/image/EditorImage.mjs +43 -22
  198. package/dist/mjs/image/export/editorImageToSVG.mjs +1 -1
  199. package/dist/mjs/inputEvents.mjs +3 -3
  200. package/dist/mjs/lib.d.ts +2 -2
  201. package/dist/mjs/lib.mjs +2 -2
  202. package/dist/mjs/localization.mjs +2 -2
  203. package/dist/mjs/localizations/de.mjs +2 -2
  204. package/dist/mjs/localizations/es.mjs +7 -3
  205. package/dist/mjs/rendering/Display.mjs +7 -3
  206. package/dist/mjs/rendering/RenderablePathSpec.mjs +26 -11
  207. package/dist/mjs/rendering/RenderingStyle.mjs +22 -15
  208. package/dist/mjs/rendering/TextRenderingStyle.mjs +1 -1
  209. package/dist/mjs/rendering/caching/CacheRecord.mjs +1 -1
  210. package/dist/mjs/rendering/caching/CacheRecordManager.mjs +1 -1
  211. package/dist/mjs/rendering/caching/RenderingCache.mjs +1 -1
  212. package/dist/mjs/rendering/caching/RenderingCacheNode.mjs +26 -15
  213. package/dist/mjs/rendering/caching/testUtils.mjs +2 -2
  214. package/dist/mjs/rendering/renderers/AbstractRenderer.mjs +3 -1
  215. package/dist/mjs/rendering/renderers/CanvasRenderer.d.ts +2 -25
  216. package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +6 -28
  217. package/dist/mjs/rendering/renderers/DummyRenderer.mjs +1 -1
  218. package/dist/mjs/rendering/renderers/SVGRenderer.mjs +40 -22
  219. package/dist/mjs/rendering/renderers/TextOnlyRenderer.mjs +13 -15
  220. package/dist/mjs/shortcuts/KeyBinding.mjs +6 -12
  221. package/dist/mjs/shortcuts/KeyboardShortcutManager.mjs +2 -2
  222. package/dist/mjs/testing/createEditor.mjs +6 -1
  223. package/dist/mjs/testing/findNodeWithText.d.ts +4 -1
  224. package/dist/mjs/testing/findNodeWithText.mjs +12 -3
  225. package/dist/mjs/testing/getUniquePointerId.mjs +1 -1
  226. package/dist/mjs/testing/sendHtmlSwipe.mjs +7 -3
  227. package/dist/mjs/testing/sendPenEvent.mjs +1 -3
  228. package/dist/mjs/testing/sendTouchEvent.mjs +1 -4
  229. package/dist/mjs/testing/startPinchGesture.mjs +3 -1
  230. package/dist/mjs/toolbar/AbstractToolbar.d.ts +19 -0
  231. package/dist/mjs/toolbar/AbstractToolbar.mjs +26 -11
  232. package/dist/mjs/toolbar/EdgeToolbar.mjs +11 -15
  233. package/dist/mjs/toolbar/IconProvider.d.ts +5 -1
  234. package/dist/mjs/toolbar/IconProvider.mjs +117 -149
  235. package/dist/mjs/toolbar/localization.mjs +5 -5
  236. package/dist/mjs/toolbar/utils/HelpDisplay.mjs +8 -6
  237. package/dist/mjs/toolbar/utils/makeDraggable.mjs +4 -7
  238. package/dist/mjs/toolbar/widgets/BaseToolWidget.mjs +3 -2
  239. package/dist/mjs/toolbar/widgets/BaseWidget.d.ts +1 -1
  240. package/dist/mjs/toolbar/widgets/BaseWidget.mjs +9 -9
  241. package/dist/mjs/toolbar/widgets/DocumentPropertiesWidget.mjs +2 -2
  242. package/dist/mjs/toolbar/widgets/EraserToolWidget.mjs +5 -3
  243. package/dist/mjs/toolbar/widgets/HandToolWidget.mjs +8 -6
  244. package/dist/mjs/toolbar/widgets/InsertImageWidget/InsertImageWidget.mjs +9 -10
  245. package/dist/mjs/toolbar/widgets/PenToolWidget.mjs +23 -14
  246. package/dist/mjs/toolbar/widgets/SelectionToolWidget.mjs +2 -2
  247. package/dist/mjs/toolbar/widgets/TextToolWidget.mjs +5 -5
  248. package/dist/mjs/toolbar/widgets/components/makeFileInput.mjs +7 -7
  249. package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +5 -5
  250. package/dist/mjs/toolbar/widgets/components/makeSnappedList.mjs +9 -5
  251. package/dist/mjs/toolbar/widgets/keybindings.mjs +2 -2
  252. package/dist/mjs/toolbar/widgets/layout/DropdownLayoutManager.mjs +6 -6
  253. package/dist/mjs/tools/BaseTool.mjs +6 -4
  254. package/dist/mjs/tools/Eraser.mjs +25 -20
  255. package/dist/mjs/tools/FindTool.mjs +2 -2
  256. package/dist/mjs/tools/InputFilter/ContextMenuRecognizer.mjs +2 -4
  257. package/dist/mjs/tools/InputFilter/InputMapper.mjs +1 -1
  258. package/dist/mjs/tools/InputFilter/InputPipeline.mjs +1 -1
  259. package/dist/mjs/tools/InputFilter/InputStabilizer.mjs +13 -6
  260. package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.mjs +7 -4
  261. package/dist/mjs/tools/PanZoom.d.ts +1 -1
  262. package/dist/mjs/tools/PanZoom.mjs +19 -14
  263. package/dist/mjs/tools/PasteHandler.mjs +8 -2
  264. package/dist/mjs/tools/Pen.d.ts +13 -0
  265. package/dist/mjs/tools/Pen.mjs +31 -10
  266. package/dist/mjs/tools/ScrollbarTool.mjs +8 -7
  267. package/dist/mjs/tools/SelectionTool/Selection.mjs +16 -12
  268. package/dist/mjs/tools/SelectionTool/SelectionHandle.mjs +5 -2
  269. package/dist/mjs/tools/SelectionTool/SelectionMenuShortcut.mjs +3 -1
  270. package/dist/mjs/tools/SelectionTool/SelectionTool.mjs +26 -17
  271. package/dist/mjs/tools/SelectionTool/ToPointerAutoscroller.mjs +1 -1
  272. package/dist/mjs/tools/SelectionTool/TransformMode.mjs +6 -7
  273. package/dist/mjs/tools/SelectionTool/util/makeClipboardErrorHandlers.mjs +23 -2
  274. package/dist/mjs/tools/SelectionTool/util/showSelectionContextMenu.mjs +29 -20
  275. package/dist/mjs/tools/SoundUITool.mjs +5 -3
  276. package/dist/mjs/tools/TextTool.mjs +8 -6
  277. package/dist/mjs/tools/ToolController.mjs +16 -10
  278. package/dist/mjs/tools/lib.d.ts +1 -0
  279. package/dist/mjs/tools/lib.mjs +1 -0
  280. package/dist/mjs/tools/localization.d.ts +2 -0
  281. package/dist/mjs/tools/localization.mjs +3 -1
  282. package/dist/mjs/tools/util/StationaryPenDetector.mjs +3 -3
  283. package/dist/mjs/tools/util/createMenuOverlay.mjs +2 -2
  284. package/dist/mjs/util/ClipboardHandler.d.ts +1 -1
  285. package/dist/mjs/util/ClipboardHandler.mjs +19 -18
  286. package/dist/mjs/util/ReactiveValue.mjs +16 -12
  287. package/dist/mjs/util/adjustEditorThemeForContrast.mjs +6 -2
  288. package/dist/mjs/util/cloneElementWithStyles.mjs +1 -1
  289. package/dist/mjs/util/createElement.d.ts +62 -0
  290. package/dist/mjs/util/createElement.mjs +47 -0
  291. package/dist/mjs/util/guessKeyCodeFromKey.mjs +1 -1
  292. package/dist/mjs/util/listenForKeyboardEventsFrom.mjs +8 -6
  293. package/dist/mjs/util/waitForAll.mjs +3 -3
  294. package/dist/mjs/util/waitForImageLoaded.mjs +3 -3
  295. package/dist/mjs/util/waitForTimeout.mjs +1 -1
  296. package/dist/mjs/version.mjs +1 -1
  297. package/package.json +88 -88
  298. package/src/Coloris.css +6 -6
  299. package/src/Editor.scss +7 -5
  300. package/src/dialogs/dialogs.scss +3 -4
  301. package/src/dialogs/makeAboutDialog.scss +2 -2
  302. package/src/dialogs/makeMessageDialog.scss +11 -7
  303. package/src/styles.js +1 -1
  304. package/src/toolbar/AbstractToolbar.scss +20 -12
  305. package/src/toolbar/DropdownToolbar.scss +5 -4
  306. package/src/toolbar/EdgeToolbar.scss +65 -31
  307. package/src/toolbar/toolbar.scss +5 -5
  308. package/src/toolbar/utils/HelpDisplay.scss +48 -25
  309. package/src/toolbar/utils/labelVisibleOnHover.scss +39 -16
  310. package/src/toolbar/widgets/DocumentPropertiesWidget.scss +0 -1
  311. package/src/toolbar/widgets/HandToolWidget.scss +0 -1
  312. package/src/toolbar/widgets/InsertImageWidget/InsertImageWidget.scss +2 -3
  313. package/src/toolbar/widgets/OverflowWidget.css +1 -2
  314. package/src/toolbar/widgets/PenToolWidget.scss +0 -2
  315. package/src/toolbar/widgets/SelectionToolWidget.scss +1 -2
  316. package/src/toolbar/widgets/components/components.scss +6 -6
  317. package/src/toolbar/widgets/components/makeColorInput.scss +0 -2
  318. package/src/toolbar/widgets/components/makeFileInput.scss +5 -7
  319. package/src/toolbar/widgets/components/makeGridSelector.scss +6 -9
  320. package/src/toolbar/widgets/components/makeSnappedList.scss +3 -4
  321. package/src/toolbar/widgets/components/makeThicknessSlider.scss +1 -2
  322. package/src/toolbar/widgets/widgets.scss +7 -7
  323. package/src/tools/FindTool.css +1 -2
  324. package/src/tools/ScrollbarTool.scss +9 -5
  325. package/src/tools/SelectionTool/SelectionTool.scss +15 -7
  326. package/src/tools/SelectionTool/util/makeClipboardErrorHandlers.scss +1 -2
  327. package/src/tools/SoundUITool.scss +4 -4
  328. package/src/tools/tools.scss +5 -6
  329. package/src/tools/util/createMenuOverlay.scss +10 -4
  330. package/tsconfig.json +1 -3
  331. package/typedoc.json +1 -1
@@ -1,2 +1,8 @@
1
1
  import { ComponentBuilderFactory } from './types';
2
+ /**
3
+ * Creates a stroke builder that generates outlined circles.
4
+ *
5
+ * Example:
6
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
7
+ */
2
8
  export declare const makeOutlinedCircleBuilder: ComponentBuilderFactory;
@@ -9,6 +9,12 @@ const RenderablePathSpec_1 = require("../../rendering/RenderablePathSpec");
9
9
  const Viewport_1 = __importDefault(require("../../Viewport"));
10
10
  const Stroke_1 = __importDefault(require("../Stroke"));
11
11
  const makeSnapToGridAutocorrect_1 = __importDefault(require("./autocorrect/makeSnapToGridAutocorrect"));
12
+ /**
13
+ * Creates a stroke builder that generates outlined circles.
14
+ *
15
+ * Example:
16
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
17
+ */
12
18
  exports.makeOutlinedCircleBuilder = (0, makeSnapToGridAutocorrect_1.default)((initialPoint, viewport) => {
13
19
  return new CircleBuilder(initialPoint, viewport);
14
20
  });
@@ -26,7 +32,7 @@ class CircleBuilder {
26
32
  buildPreview() {
27
33
  const pathCommands = [];
28
34
  const numDivisions = 6;
29
- const stepSize = Math.PI * 2 / numDivisions;
35
+ const stepSize = (Math.PI * 2) / numDivisions;
30
36
  // Round the stroke width so that when exported it doesn't have unnecessary trailing decimals.
31
37
  const strokeWidth = Viewport_1.default.roundPoint(this.endPoint.width, 5 / this.viewport.getScaleFactor());
32
38
  const center = this.startPoint.pos.lerp(this.endPoint.pos, 0.5);
@@ -38,7 +44,9 @@ class CircleBuilder {
38
44
  // controlPointRadiusScale is selected to make the circles appear circular and
39
45
  // **does** depend on stepSize.
40
46
  const controlPointRadiusScale = 1.141;
41
- const controlPoint = math_1.Vec2.of(Math.cos(t - stepSize / 2), -Math.sin(t - stepSize / 2)).times(radius * controlPointRadiusScale).plus(center);
47
+ const controlPoint = math_1.Vec2.of(Math.cos(t - stepSize / 2), -Math.sin(t - stepSize / 2))
48
+ .times(radius * controlPointRadiusScale)
49
+ .plus(center);
42
50
  pathCommands.push({
43
51
  kind: math_1.PathCommandType.QuadraticBezierTo,
44
52
  controlPoint,
@@ -49,8 +57,7 @@ class CircleBuilder {
49
57
  kind: math_1.PathCommandType.LineTo,
50
58
  point: startPoint,
51
59
  });
52
- const path = new math_1.Path(startPoint, pathCommands)
53
- .mapPoints(point => this.viewport.roundPoint(point));
60
+ const path = new math_1.Path(startPoint, pathCommands).mapPoints((point) => this.viewport.roundPoint(point));
54
61
  const preview = new Stroke_1.default([
55
62
  (0, RenderablePathSpec_1.pathToRenderable)(path, {
56
63
  fill: math_1.Color4.transparent,
@@ -6,6 +6,12 @@ import Viewport from '../../Viewport';
6
6
  import { StrokeDataPoint } from '../../types';
7
7
  import { ComponentBuilder, ComponentBuilderFactory } from './types';
8
8
  import RenderingStyle from '../../rendering/RenderingStyle';
9
+ /**
10
+ * Creates a stroke builder that draws freehand lines.
11
+ *
12
+ * Example:
13
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
14
+ */
9
15
  export declare const makeFreehandLineBuilder: ComponentBuilderFactory;
10
16
  export default class FreehandLineBuilder implements ComponentBuilder {
11
17
  private startPoint;
@@ -9,6 +9,12 @@ const Stroke_1 = __importDefault(require("../Stroke"));
9
9
  const Viewport_1 = __importDefault(require("../../Viewport"));
10
10
  const StrokeSmoother_1 = require("../util/StrokeSmoother");
11
11
  const makeShapeFitAutocorrect_1 = __importDefault(require("./autocorrect/makeShapeFitAutocorrect"));
12
+ /**
13
+ * Creates a stroke builder that draws freehand lines.
14
+ *
15
+ * Example:
16
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
17
+ */
12
18
  exports.makeFreehandLineBuilder = (0, makeShapeFitAutocorrect_1.default)((initialPoint, viewport) => {
13
19
  // Don't smooth if input is more than ± 3 pixels from the true curve, do smooth if
14
20
  // less than ±1 px from the curve.
@@ -38,7 +44,7 @@ class FreehandLineBuilder {
38
44
  stroke: {
39
45
  color: this.startPoint.color,
40
46
  width: this.roundDistance(this.averageWidth),
41
- }
47
+ },
42
48
  };
43
49
  }
44
50
  previewCurrentPath() {
@@ -135,7 +141,7 @@ class FreehandLineBuilder {
135
141
  kind: math_1.PathCommandType.QuadraticBezierTo,
136
142
  controlPoint: center.plus(math_1.Vec2.of(width, -width)),
137
143
  endPoint: center.plus(math_1.Vec2.of(width, 0)),
138
- }
144
+ },
139
145
  ];
140
146
  }
141
147
  const result = [];
@@ -163,8 +169,8 @@ class FreehandLineBuilder {
163
169
  this.curveFitter.addPoint(newPoint);
164
170
  this.widthAverageNumSamples++;
165
171
  this.averageWidth =
166
- this.averageWidth * (this.widthAverageNumSamples - 1) / this.widthAverageNumSamples
167
- + newPoint.width / this.widthAverageNumSamples;
172
+ (this.averageWidth * (this.widthAverageNumSamples - 1)) / this.widthAverageNumSamples +
173
+ newPoint.width / this.widthAverageNumSamples;
168
174
  }
169
175
  }
170
176
  exports.default = FreehandLineBuilder;
@@ -4,6 +4,12 @@ import { StrokeDataPoint } from '../../types';
4
4
  import Viewport from '../../Viewport';
5
5
  import AbstractComponent from '../AbstractComponent';
6
6
  import { ComponentBuilder, ComponentBuilderFactory } from './types';
7
+ /**
8
+ * Creates a stroke builder that generates filled lines.
9
+ *
10
+ * Example:
11
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
12
+ */
7
13
  export declare const makeLineBuilder: ComponentBuilderFactory;
8
14
  export default class LineBuilder implements ComponentBuilder {
9
15
  private readonly startPoint;
@@ -8,6 +8,12 @@ const math_1 = require("@js-draw/math");
8
8
  const RenderablePathSpec_1 = require("../../rendering/RenderablePathSpec");
9
9
  const Stroke_1 = __importDefault(require("../Stroke"));
10
10
  const makeSnapToGridAutocorrect_1 = __importDefault(require("./autocorrect/makeSnapToGridAutocorrect"));
11
+ /**
12
+ * Creates a stroke builder that generates filled lines.
13
+ *
14
+ * Example:
15
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
16
+ */
11
17
  exports.makeLineBuilder = (0, makeSnapToGridAutocorrect_1.default)((initialPoint, viewport) => {
12
18
  return new LineBuilder(initialPoint, viewport);
13
19
  });
@@ -48,10 +54,8 @@ class LineBuilder {
48
54
  kind: math_1.PathCommandType.LineTo,
49
55
  point: startPoint.minus(scaledStartNormal),
50
56
  },
51
- ]).mapPoints(point => this.viewport.roundPoint(point));
52
- const preview = new Stroke_1.default([
53
- (0, RenderablePathSpec_1.pathToRenderable)(path, { fill: this.startPoint.color })
54
- ]);
57
+ ]).mapPoints((point) => this.viewport.roundPoint(point));
58
+ const preview = new Stroke_1.default([(0, RenderablePathSpec_1.pathToRenderable)(path, { fill: this.startPoint.color })]);
55
59
  return preview;
56
60
  }
57
61
  build() {
@@ -7,8 +7,11 @@ import { StrokeDataPoint } from '../../types';
7
7
  import { ComponentBuilder, ComponentBuilderFactory } from './types';
8
8
  import RenderingStyle from '../../rendering/RenderingStyle';
9
9
  /**
10
- * Creates strokes from line segments rather than Bézier curves.
10
+ * Creates a freehand line builder that creates strokes from line segments
11
+ * rather than Bézier curves.
11
12
  *
13
+ * Example:
14
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
12
15
  */
13
16
  export declare const makePolylineBuilder: ComponentBuilderFactory;
14
17
  export default class PolylineBuilder implements ComponentBuilder {
@@ -9,8 +9,11 @@ const Stroke_1 = __importDefault(require("../Stroke"));
9
9
  const Viewport_1 = __importDefault(require("../../Viewport"));
10
10
  const makeShapeFitAutocorrect_1 = __importDefault(require("./autocorrect/makeShapeFitAutocorrect"));
11
11
  /**
12
- * Creates strokes from line segments rather than Bézier curves.
12
+ * Creates a freehand line builder that creates strokes from line segments
13
+ * rather than Bézier curves.
13
14
  *
15
+ * Example:
16
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
14
17
  */
15
18
  exports.makePolylineBuilder = (0, makeShapeFitAutocorrect_1.default)((initialPoint, viewport) => {
16
19
  // Fit to a value slightly smaller than the pixel size. A larger value can
@@ -48,7 +51,7 @@ class PolylineBuilder {
48
51
  stroke: {
49
52
  color: this.startPoint.color,
50
53
  width: this.roundDistance(this.averageWidth),
51
- }
54
+ },
52
55
  };
53
56
  }
54
57
  previewCurrentPath() {
@@ -102,12 +105,13 @@ class PolylineBuilder {
102
105
  addPoint(newPoint) {
103
106
  this.widthAverageNumSamples++;
104
107
  this.averageWidth =
105
- this.averageWidth * (this.widthAverageNumSamples - 1) / this.widthAverageNumSamples
106
- + newPoint.width / this.widthAverageNumSamples;
108
+ (this.averageWidth * (this.widthAverageNumSamples - 1)) / this.widthAverageNumSamples +
109
+ newPoint.width / this.widthAverageNumSamples;
107
110
  const roundedPoint = this.roundPoint(newPoint.pos);
108
111
  if (!roundedPoint.eq(this.lastPoint)) {
109
112
  // If almost exactly in the same line as the previous
110
- if (this.lastLineSegment && this.lastLineSegment.direction.dot(roundedPoint.minus(this.lastPoint).normalized()) > 0.997) {
113
+ if (this.lastLineSegment &&
114
+ this.lastLineSegment.direction.dot(roundedPoint.minus(this.lastPoint).normalized()) > 0.997) {
111
115
  this.parts.pop();
112
116
  this.lastPoint = this.lastLineSegment.p1;
113
117
  }
@@ -36,7 +36,7 @@ class PressureSensitiveFreehandLineBuilder {
36
36
  this.parts = [];
37
37
  this.upperSegments = [];
38
38
  this.lowerSegments = [];
39
- this.curveFitter = new StrokeSmoother_1.StrokeSmoother(startPoint, minFitAllowed, maxFitAllowed, curve => this.addCurve(curve));
39
+ this.curveFitter = new StrokeSmoother_1.StrokeSmoother(startPoint, minFitAllowed, maxFitAllowed, (curve) => this.addCurve(curve));
40
40
  this.curveStartWidth = startPoint.width;
41
41
  this.bbox = new math_1.Rect2(this.startPoint.pos.x, this.startPoint.pos.y, 0, 0);
42
42
  }
@@ -70,7 +70,8 @@ class PressureSensitiveFreehandLineBuilder {
70
70
  }
71
71
  let startPoint;
72
72
  const lastLowerSegment = lowerPath[lowerPath.length - 1];
73
- if (lastLowerSegment.kind === math_1.PathCommandType.LineTo || lastLowerSegment.kind === math_1.PathCommandType.MoveTo) {
73
+ if (lastLowerSegment.kind === math_1.PathCommandType.LineTo ||
74
+ lastLowerSegment.kind === math_1.PathCommandType.MoveTo) {
74
75
  startPoint = lastLowerSegment.point;
75
76
  }
76
77
  else {
@@ -169,11 +170,11 @@ class PressureSensitiveFreehandLineBuilder {
169
170
  // where the next stroke and the previous stroke are in different directions.
170
171
  //
171
172
  // Are the exit/enter directions of the previous and current curves in different enough directions?
172
- if (getEnterDirection(upperCurve).dot(getExitDirection(this.lastUpperBezier)) < 0.35
173
- || getEnterDirection(lowerCurve).dot(getExitDirection(this.lastLowerBezier)) < 0.35
173
+ if (getEnterDirection(upperCurve).dot(getExitDirection(this.lastUpperBezier)) < 0.35 ||
174
+ getEnterDirection(lowerCurve).dot(getExitDirection(this.lastLowerBezier)) < 0.35 ||
174
175
  // Also handle if the curves exit/enter directions differ
175
- || getEnterDirection(upperCurve).dot(getExitDirection(upperCurve)) < 0
176
- || getEnterDirection(lowerCurve).dot(getExitDirection(lowerCurve)) < 0) {
176
+ getEnterDirection(upperCurve).dot(getExitDirection(upperCurve)) < 0 ||
177
+ getEnterDirection(lowerCurve).dot(getExitDirection(lowerCurve)) < 0) {
177
178
  return true;
178
179
  }
179
180
  // Check whether the lower curve intersects the other wall:
@@ -280,8 +281,9 @@ class PressureSensitiveFreehandLineBuilder {
280
281
  // Approximate the normal at the location of the control point
281
282
  const projectionT = bezier.nearestPointTo(controlPoint).parameterValue;
282
283
  const halfVecT = projectionT;
283
- const halfVec = bezier.normal(halfVecT).times(curve.startWidth / 2 * halfVecT
284
- + curve.endWidth / 2 * (1 - halfVecT));
284
+ const halfVec = bezier
285
+ .normal(halfVecT)
286
+ .times((curve.startWidth / 2) * halfVecT + (curve.endWidth / 2) * (1 - halfVecT));
285
287
  // Each starts at startPt ± startVec
286
288
  const lowerCurveStartPoint = this.roundPoint(startPt.plus(startVec));
287
289
  const lowerCurveControlPoint = this.roundPoint(controlPoint.plus(halfVec));
@@ -324,8 +326,12 @@ class PressureSensitiveFreehandLineBuilder {
324
326
  const upperCurve = new math_1.QuadraticBezier(upperCurveStartPoint, upperCurveControlPoint, upperCurveEndPoint);
325
327
  const lowerCurve = new math_1.QuadraticBezier(lowerCurveStartPoint, lowerCurveControlPoint, lowerCurveEndPoint);
326
328
  return {
327
- upperCurveCommand, upperToLowerConnector, lowerToUpperConnector, lowerCurveCommand,
328
- upperCurve, lowerCurve,
329
+ upperCurveCommand,
330
+ upperToLowerConnector,
331
+ lowerToUpperConnector,
332
+ lowerCurveCommand,
333
+ upperCurve,
334
+ lowerCurve,
329
335
  nextCurveStartConnector,
330
336
  };
331
337
  }
@@ -4,7 +4,19 @@ import { StrokeDataPoint } from '../../types';
4
4
  import Viewport from '../../Viewport';
5
5
  import AbstractComponent from '../AbstractComponent';
6
6
  import { ComponentBuilder, ComponentBuilderFactory } from './types';
7
+ /**
8
+ * Creates filled rectangles with sharp corners.
9
+ *
10
+ * Example:
11
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
12
+ */
7
13
  export declare const makeFilledRectangleBuilder: ComponentBuilderFactory;
14
+ /**
15
+ * Creates outlined rectangles with sharp corners.
16
+ *
17
+ * Example:
18
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
19
+ */
8
20
  export declare const makeOutlinedRectangleBuilder: ComponentBuilderFactory;
9
21
  export default class RectangleBuilder implements ComponentBuilder {
10
22
  private readonly startPoint;
@@ -8,9 +8,21 @@ const math_1 = require("@js-draw/math");
8
8
  const RenderablePathSpec_1 = require("../../rendering/RenderablePathSpec");
9
9
  const Stroke_1 = __importDefault(require("../Stroke"));
10
10
  const makeSnapToGridAutocorrect_1 = __importDefault(require("./autocorrect/makeSnapToGridAutocorrect"));
11
+ /**
12
+ * Creates filled rectangles with sharp corners.
13
+ *
14
+ * Example:
15
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
16
+ */
11
17
  exports.makeFilledRectangleBuilder = (0, makeSnapToGridAutocorrect_1.default)((initialPoint, viewport) => {
12
18
  return new RectangleBuilder(initialPoint, true, viewport);
13
19
  });
20
+ /**
21
+ * Creates outlined rectangles with sharp corners.
22
+ *
23
+ * Example:
24
+ * [[include:doc-pages/inline-examples/changing-pen-types.md]]
25
+ */
14
26
  exports.makeOutlinedRectangleBuilder = (0, makeSnapToGridAutocorrect_1.default)((initialPoint, viewport) => {
15
27
  return new RectangleBuilder(initialPoint, false, viewport);
16
28
  });
@@ -34,12 +46,14 @@ class RectangleBuilder {
34
46
  const startPoint = rotationMat.inverse().transformVec2(this.startPoint.pos);
35
47
  const endPoint = rotationMat.inverse().transformVec2(this.endPoint.pos);
36
48
  const rect = math_1.Rect2.fromCorners(startPoint, endPoint);
37
- const path = math_1.Path.fromRect(rect, this.filled ? null : this.endPoint.width).transformedBy(
49
+ const path = math_1.Path.fromRect(rect, this.filled ? null : this.endPoint.width)
50
+ .transformedBy(
38
51
  // Rotate the canvas rectangle so that its rotation matches the screen
39
- rotationMat).mapPoints(point => this.viewport.roundPoint(point));
52
+ rotationMat)
53
+ .mapPoints((point) => this.viewport.roundPoint(point));
40
54
  const preview = new Stroke_1.default([
41
55
  (0, RenderablePathSpec_1.pathToRenderable)(path, {
42
- fill: this.endPoint.color
56
+ fill: this.endPoint.color,
43
57
  }),
44
58
  ]);
45
59
  return preview;
@@ -8,14 +8,11 @@ const makeShapeFitAutocorrect = (sourceFactory) => {
8
8
  };
9
9
  exports.default = makeShapeFitAutocorrect;
10
10
  const makeLineTemplate = (startPoint, points, _bbox) => {
11
- const templatePoints = [
12
- startPoint,
13
- points[points.length - 1],
14
- ];
15
- return { points: templatePoints, };
11
+ const templatePoints = [startPoint, points[points.length - 1]];
12
+ return { points: templatePoints };
16
13
  };
17
14
  const makeRectangleTemplate = (_startPoint, _points, bbox) => {
18
- return { points: [...bbox.corners, bbox.corners[0]], };
15
+ return { points: [...bbox.corners, bbox.corners[0]] };
19
16
  };
20
17
  class ShapeFitBuilder {
21
18
  constructor(sourceFactory, startPoint, viewport) {
@@ -41,10 +38,10 @@ class ShapeFitBuilder {
41
38
  async autocorrectShape() {
42
39
  // Use screen points so that autocorrected shapes rotate with the screen.
43
40
  const startPoint = this.viewport.canvasToScreen(this.startPoint.pos);
44
- const points = this.points.map(point => this.viewport.canvasToScreen(point.pos));
41
+ const points = this.points.map((point) => this.viewport.canvasToScreen(point.pos));
45
42
  const bbox = math_1.Rect2.bboxOf(points);
46
43
  const snappedStartPoint = this.viewport.canvasToScreen(this.viewport.snapToGrid(this.startPoint.pos));
47
- const snappedPoints = this.points.map(point => this.viewport.canvasToScreen(this.viewport.snapToGrid(point.pos)));
44
+ const snappedPoints = this.points.map((point) => this.viewport.canvasToScreen(this.viewport.snapToGrid(point.pos)));
48
45
  const snappedBBox = math_1.Rect2.bboxOf(snappedPoints);
49
46
  // Only fit larger shapes
50
47
  if (bbox.maxDimension < 32) {
@@ -37,7 +37,7 @@ class SnapToGridAutocompleteBuilder {
37
37
  // Use screen points so that snapped shapes rotate with the screen.
38
38
  const startPoint = snapToGrid(this.startPoint);
39
39
  const builder = this.sourceFactory(startPoint, this.viewport);
40
- const points = this.points.map(point => snapToGrid(point));
40
+ const points = this.points.map((point) => snapToGrid(point));
41
41
  for (const point of points) {
42
42
  builder.addPoint(point);
43
43
  }
@@ -0,0 +1,7 @@
1
+ export { makeFreehandLineBuilder } from './FreehandLineBuilder';
2
+ export { makePolylineBuilder } from './PolylineBuilder';
3
+ export { makePressureSensitiveFreehandLineBuilder } from './PressureSensitiveFreehandLineBuilder';
4
+ export { makeOutlinedCircleBuilder } from './CircleBuilder';
5
+ export { makeArrowBuilder } from './ArrowBuilder';
6
+ export { makeLineBuilder } from './LineBuilder';
7
+ export { makeFilledRectangleBuilder, makeOutlinedRectangleBuilder } from './RectangleBuilder';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeOutlinedRectangleBuilder = exports.makeFilledRectangleBuilder = exports.makeLineBuilder = exports.makeArrowBuilder = exports.makeOutlinedCircleBuilder = exports.makePressureSensitiveFreehandLineBuilder = exports.makePolylineBuilder = exports.makeFreehandLineBuilder = void 0;
4
+ var FreehandLineBuilder_1 = require("./FreehandLineBuilder");
5
+ Object.defineProperty(exports, "makeFreehandLineBuilder", { enumerable: true, get: function () { return FreehandLineBuilder_1.makeFreehandLineBuilder; } });
6
+ var PolylineBuilder_1 = require("./PolylineBuilder");
7
+ Object.defineProperty(exports, "makePolylineBuilder", { enumerable: true, get: function () { return PolylineBuilder_1.makePolylineBuilder; } });
8
+ var PressureSensitiveFreehandLineBuilder_1 = require("./PressureSensitiveFreehandLineBuilder");
9
+ Object.defineProperty(exports, "makePressureSensitiveFreehandLineBuilder", { enumerable: true, get: function () { return PressureSensitiveFreehandLineBuilder_1.makePressureSensitiveFreehandLineBuilder; } });
10
+ var CircleBuilder_1 = require("./CircleBuilder");
11
+ Object.defineProperty(exports, "makeOutlinedCircleBuilder", { enumerable: true, get: function () { return CircleBuilder_1.makeOutlinedCircleBuilder; } });
12
+ var ArrowBuilder_1 = require("./ArrowBuilder");
13
+ Object.defineProperty(exports, "makeArrowBuilder", { enumerable: true, get: function () { return ArrowBuilder_1.makeArrowBuilder; } });
14
+ var LineBuilder_1 = require("./LineBuilder");
15
+ Object.defineProperty(exports, "makeLineBuilder", { enumerable: true, get: function () { return LineBuilder_1.makeLineBuilder; } });
16
+ var RectangleBuilder_1 = require("./RectangleBuilder");
17
+ Object.defineProperty(exports, "makeFilledRectangleBuilder", { enumerable: true, get: function () { return RectangleBuilder_1.makeFilledRectangleBuilder; } });
18
+ Object.defineProperty(exports, "makeOutlinedRectangleBuilder", { enumerable: true, get: function () { return RectangleBuilder_1.makeOutlinedRectangleBuilder; } });
@@ -1,8 +1,5 @@
1
1
  export * from './builders/types';
2
- export { makeFreehandLineBuilder } from './builders/FreehandLineBuilder';
3
- export { makePolylineBuilder } from './builders/PolylineBuilder';
4
- export { makePressureSensitiveFreehandLineBuilder } from './builders/PressureSensitiveFreehandLineBuilder';
5
- export { makeOutlinedCircleBuilder } from './builders/CircleBuilder';
2
+ export * from './builders/lib';
6
3
  export { default as StrokeSmoother, Curve as StrokeSmootherCurve } from './util/StrokeSmoother';
7
4
  export * from './AbstractComponent';
8
5
  export { default as AbstractComponent } from './AbstractComponent';
@@ -29,16 +29,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
29
29
  return (mod && mod.__esModule) ? mod : { "default": mod };
30
30
  };
31
31
  Object.defineProperty(exports, "__esModule", { value: true });
32
- exports.ImageComponent = exports.BackgroundComponentBackgroundType = exports.BackgroundComponent = exports.StrokeComponent = exports.Text = exports.TextComponent = exports.isRestylableComponent = exports.createRestyleComponentCommand = exports.Stroke = exports.AbstractComponent = exports.StrokeSmoother = exports.makeOutlinedCircleBuilder = exports.makePressureSensitiveFreehandLineBuilder = exports.makePolylineBuilder = exports.makeFreehandLineBuilder = void 0;
32
+ exports.ImageComponent = exports.BackgroundComponentBackgroundType = exports.BackgroundComponent = exports.StrokeComponent = exports.Text = exports.TextComponent = exports.isRestylableComponent = exports.createRestyleComponentCommand = exports.Stroke = exports.AbstractComponent = exports.StrokeSmoother = void 0;
33
33
  __exportStar(require("./builders/types"), exports);
34
- var FreehandLineBuilder_1 = require("./builders/FreehandLineBuilder");
35
- Object.defineProperty(exports, "makeFreehandLineBuilder", { enumerable: true, get: function () { return FreehandLineBuilder_1.makeFreehandLineBuilder; } });
36
- var PolylineBuilder_1 = require("./builders/PolylineBuilder");
37
- Object.defineProperty(exports, "makePolylineBuilder", { enumerable: true, get: function () { return PolylineBuilder_1.makePolylineBuilder; } });
38
- var PressureSensitiveFreehandLineBuilder_1 = require("./builders/PressureSensitiveFreehandLineBuilder");
39
- Object.defineProperty(exports, "makePressureSensitiveFreehandLineBuilder", { enumerable: true, get: function () { return PressureSensitiveFreehandLineBuilder_1.makePressureSensitiveFreehandLineBuilder; } });
40
- var CircleBuilder_1 = require("./builders/CircleBuilder");
41
- Object.defineProperty(exports, "makeOutlinedCircleBuilder", { enumerable: true, get: function () { return CircleBuilder_1.makeOutlinedCircleBuilder; } });
34
+ __exportStar(require("./builders/lib"), exports);
42
35
  var StrokeSmoother_1 = require("./util/StrokeSmoother");
43
36
  Object.defineProperty(exports, "StrokeSmoother", { enumerable: true, get: function () { return __importDefault(StrokeSmoother_1).default; } });
44
37
  __exportStar(require("./AbstractComponent"), exports);
@@ -56,9 +56,7 @@ class StrokeSmoother {
56
56
  console.assert(this.lastExitingVec.magnitude() !== 0, 'lastExitingVec has zero length!');
57
57
  // Use the last two points to start a new curve (the last point isn't used
58
58
  // in the current curve and we want connected curves to share end points)
59
- this.buffer = [
60
- this.buffer[this.buffer.length - 2], lastPoint,
61
- ];
59
+ this.buffer = [this.buffer[this.buffer.length - 2], lastPoint];
62
60
  this.currentCurve = null;
63
61
  this.isFirstSegment = false;
64
62
  }
@@ -99,8 +97,7 @@ class StrokeSmoother {
99
97
  return;
100
98
  }
101
99
  const threshold = Math.min(this.lastPoint.width, newPoint.width) / 3;
102
- const shouldSnapToInitial = this.startPoint.pos.distanceTo(newPoint.pos) < threshold
103
- && this.isFirstSegment;
100
+ const shouldSnapToInitial = this.startPoint.pos.distanceTo(newPoint.pos) < threshold && this.isFirstSegment;
104
101
  // Snap to the starting point if the stroke is contained within a small ball centered
105
102
  // at the starting point.
106
103
  // This allows us to create a circle/dot at the start of the stroke.
@@ -153,7 +150,9 @@ class StrokeSmoother {
153
150
  const startEndDist = segmentEnd.distanceTo(segmentStart);
154
151
  const maxControlPointDist = maxRelativeLength * startEndDist;
155
152
  // Exit in cases where we would divide by zero
156
- if (maxControlPointDist === 0 || exitingVec.magnitude() === 0 || !isFinite(exitingVec.magnitude())) {
153
+ if (maxControlPointDist === 0 ||
154
+ exitingVec.magnitude() === 0 ||
155
+ !isFinite(exitingVec.magnitude())) {
157
156
  return;
158
157
  }
159
158
  console.assert(isFinite(enteringVec.magnitude()), 'Pre-normalized enteringVec has NaN or ∞ magnitude!');
@@ -13,7 +13,7 @@ const makeAboutDialog = (editor, entries) => {
13
13
  const container = document.createElement(entry.minimized ? 'details' : 'div');
14
14
  container.classList.add('about-entry');
15
15
  const header = document.createElement(entry.minimized ? 'summary' : 'h2');
16
- if (typeof (entry.heading) === 'string') {
16
+ if (typeof entry.heading === 'string') {
17
17
  header.innerText = entry.heading;
18
18
  }
19
19
  else {
@@ -20,7 +20,7 @@ const makeAboutDialog = (editor, options) => {
20
20
  const scrollRegion = document.createElement('div');
21
21
  scrollRegion.classList.add('scroll');
22
22
  // Allow scrolling in the scrollable container -- don't forward wheel events.
23
- scrollRegion.onwheel = evt => evt.stopPropagation();
23
+ scrollRegion.onwheel = (evt) => evt.stopPropagation();
24
24
  contentWrapper.replaceChildren(heading, scrollRegion, closeButton);
25
25
  dialog.replaceChildren(contentWrapper);
26
26
  overlay.replaceChildren(dialog);
@@ -32,7 +32,7 @@ const makeAboutDialog = (editor, options) => {
32
32
  dialog.close();
33
33
  };
34
34
  const addCloseListeners = () => {
35
- dialog.addEventListener('pointerdown', event => {
35
+ dialog.addEventListener('pointerdown', (event) => {
36
36
  if (event.target === dialog) {
37
37
  void closeDialog();
38
38
  }
@@ -22,7 +22,20 @@ export type EditorImageNotifier = EventDispatcher<EditorImageEventType, {
22
22
  */
23
23
  export type PreRenderComponentCallback = (component: AbstractComponent, componentsProcessed: number, totalComponents: number) => Promise<boolean>;
24
24
  /**
25
- * Handles lookup/storage of elements in the image.
25
+ * @summary Handles lookup/storage of elements in the image.
26
+ *
27
+ * `js-draw` images are made up of a collection of {@link AbstractComponent}s (which
28
+ * includes {@link Stroke}s, {@link TextComponent}s, etc.). An `EditorImage`
29
+ * is the data structure that stores these components.
30
+ *
31
+ * Here's how to do a few common operations:
32
+ * - **Get all components in a {@link @js-draw/math!Rect2 | Rect2}**:
33
+ * {@link EditorImage.getElementsIntersectingRegion}.
34
+ * - **Draw an `EditorImage` onto a canvas/SVG**: {@link EditorImage.render}.
35
+ * - **Adding a new component**: {@link EditorImage.addElement}.
36
+ *
37
+ * **Example**:
38
+ * [[include:doc-pages/inline-examples/image-add-and-lookup.md]]
26
39
  */
27
40
  export default class EditorImage {
28
41
  private root;
@@ -40,10 +53,13 @@ export default class EditorImage {
40
53
  /** @internal */
41
54
  renderWithCache(screenRenderer: AbstractRenderer, cache: RenderingCache, viewport: Viewport): void;
42
55
  /**
43
- * Renders all nodes visible from `viewport` (or all nodes if `viewport = null`).
56
+ * Renders this image to the given `renderer`.
44
57
  *
45
- * `viewport` is used to improve rendering performance. If given, it must match
46
- * the viewport used by the `renderer` (if any).
58
+ * If `viewport` is non-null, only components that can be seen from that viewport
59
+ * will be rendered. If `viewport` is `null`, **all** components are rendered.
60
+ *
61
+ * **Example**:
62
+ * [[include:doc-pages/inline-examples/canvas-renderer.md]]
47
63
  */
48
64
  render(renderer: AbstractRenderer, viewport: Viewport | null): void;
49
65
  /**
@@ -63,14 +79,21 @@ export default class EditorImage {
63
79
  */
64
80
  renderAll(renderer: AbstractRenderer): void;
65
81
  /**
66
- * @returns all elements in the image, sorted by z-index. This can be slow for large images.
82
+ * @returns all elements in the image, sorted by z-index (low to high).
67
83
  *
68
- * Does not include background elements. See {@link getBackgroundComponents}.
84
+ * This can be slow for large images. If you only need all elemenst in part of the image,
85
+ * consider using {@link getElementsIntersectingRegion} instead.
86
+ *
87
+ * **Note**: The result does not include background elements. See {@link getBackgroundComponents}.
69
88
  */
70
89
  getAllElements(): AbstractComponent[];
71
90
  /** Returns the number of elements added to this image. @internal */
72
91
  estimateNumElements(): number;
73
- /** @returns a list of `AbstractComponent`s intersecting `region`, sorted by z-index. */
92
+ /**
93
+ * @returns a list of `AbstractComponent`s intersecting `region`, sorted by increasing z-index.
94
+ *
95
+ * Components in the background layer are only included if `includeBackground` is `true`.
96
+ */
74
97
  getElementsIntersectingRegion(region: Rect2, includeBackground?: boolean): AbstractComponent[];
75
98
  /** Called whenever (just after) an element is completely removed. @internal */
76
99
  onDestroyElement(elem: AbstractComponent): void;