js-draw 0.17.4 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/.github/workflows/firebase-hosting-merge.yml +2 -0
  2. package/.github/workflows/firebase-hosting-pull-request.yml +2 -0
  3. package/.github/workflows/github-pages.yml +2 -0
  4. package/CHANGELOG.md +4 -0
  5. package/build_tools/postDist.ts +71 -0
  6. package/dist/bundle.js +9 -1
  7. package/dist/cjs/build_tools/BundledFile.js +163 -0
  8. package/dist/cjs/build_tools/buildTranslationTemplate.js +119 -0
  9. package/dist/cjs/build_tools/bundle.js +10 -0
  10. package/dist/cjs/build_tools/postDist.js +72 -0
  11. package/dist/{src → cjs/src}/Color4.d.ts +1 -0
  12. package/dist/cjs/src/Color4.js +197 -0
  13. package/dist/cjs/src/Editor.js +904 -0
  14. package/dist/cjs/src/EditorImage.js +486 -0
  15. package/dist/cjs/src/EventDispatcher.js +57 -0
  16. package/dist/cjs/src/Pointer.js +84 -0
  17. package/dist/cjs/src/SVGLoader.js +472 -0
  18. package/dist/cjs/src/UndoRedoHistory.js +93 -0
  19. package/dist/cjs/src/Viewport.js +264 -0
  20. package/dist/cjs/src/bundle/bundled.js +24 -0
  21. package/dist/cjs/src/commands/Command.js +34 -0
  22. package/dist/cjs/src/commands/Duplicate.js +39 -0
  23. package/dist/cjs/src/commands/Erase.js +63 -0
  24. package/dist/cjs/src/commands/SerializableCommand.js +42 -0
  25. package/dist/cjs/src/commands/UnresolvedCommand.js +28 -0
  26. package/dist/cjs/src/commands/invertCommand.js +49 -0
  27. package/dist/cjs/src/commands/lib.js +18 -0
  28. package/dist/cjs/src/commands/localization.js +24 -0
  29. package/dist/cjs/src/commands/uniteCommands.js +121 -0
  30. package/dist/cjs/src/components/AbstractComponent.js +258 -0
  31. package/dist/cjs/src/components/ImageBackground.js +146 -0
  32. package/dist/cjs/src/components/ImageComponent.js +152 -0
  33. package/dist/cjs/src/components/RestylableComponent.js +88 -0
  34. package/dist/cjs/src/components/SVGGlobalAttributesObject.js +65 -0
  35. package/dist/cjs/src/components/Stroke.js +191 -0
  36. package/dist/cjs/src/components/TextComponent.js +258 -0
  37. package/dist/cjs/src/components/UnknownSVGObject.js +50 -0
  38. package/dist/cjs/src/components/builders/ArrowBuilder.js +117 -0
  39. package/dist/cjs/src/components/builders/FreehandLineBuilder.js +173 -0
  40. package/dist/cjs/src/components/builders/LineBuilder.js +89 -0
  41. package/dist/cjs/src/components/builders/PressureSensitiveFreehandLineBuilder.js +347 -0
  42. package/dist/cjs/src/components/builders/RectangleBuilder.js +59 -0
  43. package/dist/cjs/src/components/builders/types.js +2 -0
  44. package/dist/cjs/src/components/lib.js +43 -0
  45. package/dist/cjs/src/components/localization.js +13 -0
  46. package/dist/cjs/src/components/util/StrokeSmoother.js +217 -0
  47. package/dist/cjs/src/components/util/describeComponentList.js +16 -0
  48. package/dist/cjs/src/lib.js +63 -0
  49. package/dist/cjs/src/localization.js +13 -0
  50. package/dist/cjs/src/localizations/de.js +6 -0
  51. package/dist/cjs/src/localizations/en.js +6 -0
  52. package/dist/cjs/src/localizations/es.js +20 -0
  53. package/dist/cjs/src/localizations/getLocalizationTable.js +50 -0
  54. package/dist/cjs/src/math/LineSegment2.js +131 -0
  55. package/dist/cjs/src/math/Mat33.js +332 -0
  56. package/dist/cjs/src/math/Path.js +655 -0
  57. package/dist/cjs/src/math/Rect2.js +234 -0
  58. package/dist/cjs/src/math/Triangle.js +22 -0
  59. package/dist/cjs/src/math/Vec2.js +19 -0
  60. package/dist/cjs/src/math/Vec3.js +177 -0
  61. package/dist/cjs/src/math/lib.js +18 -0
  62. package/dist/cjs/src/math/rounding.js +135 -0
  63. package/dist/cjs/src/rendering/Display.js +214 -0
  64. package/dist/cjs/src/rendering/RenderingStyle.js +48 -0
  65. package/dist/cjs/src/rendering/TextRenderingStyle.js +29 -0
  66. package/dist/cjs/src/rendering/caching/CacheRecord.js +61 -0
  67. package/dist/cjs/src/rendering/caching/CacheRecordManager.js +50 -0
  68. package/dist/cjs/src/rendering/caching/RenderingCache.js +51 -0
  69. package/dist/cjs/src/rendering/caching/RenderingCacheNode.js +326 -0
  70. package/dist/cjs/src/rendering/caching/testUtils.js +27 -0
  71. package/dist/cjs/src/rendering/caching/types.js +2 -0
  72. package/dist/cjs/src/rendering/lib.js +16 -0
  73. package/dist/cjs/src/rendering/localization.js +12 -0
  74. package/dist/cjs/src/rendering/renderers/AbstractRenderer.js +170 -0
  75. package/dist/cjs/src/rendering/renderers/CanvasRenderer.js +236 -0
  76. package/dist/cjs/src/rendering/renderers/DummyRenderer.js +112 -0
  77. package/dist/cjs/src/rendering/renderers/SVGRenderer.js +311 -0
  78. package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.js +63 -0
  79. package/dist/cjs/src/testing/beforeEachFile.js +12 -0
  80. package/dist/cjs/src/testing/createEditor.js +14 -0
  81. package/dist/cjs/src/testing/lib.js +10 -0
  82. package/dist/cjs/src/testing/loadExpectExtensions.js +28 -0
  83. package/dist/cjs/src/testing/sendPenEvent.js +24 -0
  84. package/dist/cjs/src/testing/sendTouchEvent.js +87 -0
  85. package/dist/cjs/src/toolbar/HTMLToolbar.js +383 -0
  86. package/dist/cjs/src/toolbar/IconProvider.js +660 -0
  87. package/dist/cjs/src/toolbar/lib.js +24 -0
  88. package/dist/cjs/src/toolbar/localization.js +51 -0
  89. package/dist/cjs/src/toolbar/makeColorInput.js +120 -0
  90. package/dist/cjs/src/toolbar/types.js +2 -0
  91. package/dist/cjs/src/toolbar/widgets/ActionButtonWidget.js +31 -0
  92. package/dist/cjs/src/toolbar/widgets/BaseToolWidget.js +50 -0
  93. package/dist/cjs/src/toolbar/widgets/BaseWidget.js +313 -0
  94. package/dist/cjs/src/toolbar/widgets/DocumentPropertiesWidget.js +126 -0
  95. package/dist/cjs/src/toolbar/widgets/EraserToolWidget.js +63 -0
  96. package/dist/cjs/src/toolbar/widgets/HandToolWidget.js +201 -0
  97. package/dist/cjs/src/toolbar/widgets/InsertImageWidget.js +176 -0
  98. package/dist/cjs/src/toolbar/widgets/OverflowWidget.js +77 -0
  99. package/dist/cjs/src/toolbar/widgets/PenToolWidget.js +226 -0
  100. package/dist/cjs/src/toolbar/widgets/SelectionToolWidget.js +153 -0
  101. package/dist/cjs/src/toolbar/widgets/TextToolWidget.js +115 -0
  102. package/dist/cjs/src/toolbar/widgets/lib.js +26 -0
  103. package/dist/cjs/src/tools/BaseTool.js +66 -0
  104. package/dist/cjs/src/tools/Eraser.js +112 -0
  105. package/dist/cjs/src/tools/FindTool.js +121 -0
  106. package/dist/cjs/src/tools/PanZoom.js +421 -0
  107. package/dist/cjs/src/tools/PasteHandler.js +99 -0
  108. package/dist/cjs/src/tools/Pen.js +179 -0
  109. package/dist/cjs/src/tools/PipetteTool.js +45 -0
  110. package/dist/cjs/src/tools/SelectionTool/SelectAllShortcutHandler.js +28 -0
  111. package/dist/cjs/src/tools/SelectionTool/Selection.js +488 -0
  112. package/dist/cjs/src/tools/SelectionTool/SelectionHandle.js +85 -0
  113. package/dist/cjs/src/tools/SelectionTool/SelectionTool.js +405 -0
  114. package/dist/cjs/src/tools/SelectionTool/TransformMode.js +107 -0
  115. package/dist/cjs/src/tools/SelectionTool/types.js +14 -0
  116. package/dist/cjs/src/tools/TextTool.js +262 -0
  117. package/dist/cjs/src/tools/ToolController.js +187 -0
  118. package/dist/cjs/src/tools/ToolEnabledGroup.js +14 -0
  119. package/dist/cjs/src/tools/ToolSwitcherShortcut.js +38 -0
  120. package/dist/cjs/src/tools/ToolbarShortcutHandler.js +29 -0
  121. package/dist/cjs/src/tools/UndoRedoShortcut.js +28 -0
  122. package/dist/cjs/src/tools/lib.js +36 -0
  123. package/dist/cjs/src/tools/localization.js +30 -0
  124. package/dist/cjs/src/types.js +38 -0
  125. package/dist/cjs/src/util/assertions.js +51 -0
  126. package/dist/cjs/src/util/fileToBase64.js +15 -0
  127. package/dist/cjs/src/util/untilNextAnimationFrame.js +9 -0
  128. package/dist/cjs/src/util/waitForTimeout.js +9 -0
  129. package/dist/mjs/build_tools/BundledFile.d.ts +13 -0
  130. package/dist/{build_tools/buildTranslationTemplate.js → mjs/build_tools/buildTranslationTemplate.mjs} +1 -1
  131. package/dist/{build_tools/bundle.js → mjs/build_tools/bundle.mjs} +1 -1
  132. package/dist/mjs/build_tools/postDist.d.ts +1 -0
  133. package/dist/mjs/build_tools/postDist.mjs +67 -0
  134. package/dist/mjs/src/Color4.d.ts +61 -0
  135. package/dist/{src/Color4.js → mjs/src/Color4.mjs} +1 -0
  136. package/dist/mjs/src/Editor.d.ts +308 -0
  137. package/dist/{src/Editor.js → mjs/src/Editor.mjs} +26 -26
  138. package/dist/mjs/src/EditorImage.d.ts +97 -0
  139. package/dist/{src/EditorImage.js → mjs/src/EditorImage.mjs} +8 -8
  140. package/dist/mjs/src/EventDispatcher.d.ts +30 -0
  141. package/dist/mjs/src/Pointer.d.ts +24 -0
  142. package/dist/{src/Pointer.js → mjs/src/Pointer.mjs} +1 -1
  143. package/dist/mjs/src/SVGLoader.d.ts +48 -0
  144. package/dist/{src/SVGLoader.js → mjs/src/SVGLoader.mjs} +11 -11
  145. package/dist/mjs/src/UndoRedoHistory.d.ts +19 -0
  146. package/dist/{src/UndoRedoHistory.js → mjs/src/UndoRedoHistory.mjs} +1 -1
  147. package/dist/mjs/src/Viewport.d.ts +71 -0
  148. package/dist/{src/Viewport.js → mjs/src/Viewport.mjs} +5 -5
  149. package/dist/mjs/src/bundle/bundled.d.ts +4 -0
  150. package/dist/{src/bundle/bundled.js → mjs/src/bundle/bundled.mjs} +2 -2
  151. package/dist/mjs/src/commands/Command.d.ts +16 -0
  152. package/dist/mjs/src/commands/Duplicate.d.ts +14 -0
  153. package/dist/{src/commands/Duplicate.js → mjs/src/commands/Duplicate.mjs} +3 -3
  154. package/dist/mjs/src/commands/Erase.d.ts +14 -0
  155. package/dist/{src/commands/Erase.js → mjs/src/commands/Erase.mjs} +3 -3
  156. package/dist/mjs/src/commands/SerializableCommand.d.ts +12 -0
  157. package/dist/{src/commands/SerializableCommand.js → mjs/src/commands/SerializableCommand.mjs} +1 -1
  158. package/dist/mjs/src/commands/UnresolvedCommand.d.ts +14 -0
  159. package/dist/{src/commands/UnresolvedCommand.js → mjs/src/commands/UnresolvedCommand.mjs} +1 -1
  160. package/dist/mjs/src/commands/invertCommand.d.ts +4 -0
  161. package/dist/{src/commands/invertCommand.js → mjs/src/commands/invertCommand.mjs} +2 -2
  162. package/dist/mjs/src/commands/lib.mjs +7 -0
  163. package/dist/mjs/src/commands/localization.d.ts +23 -0
  164. package/dist/mjs/src/commands/uniteCommands.d.ts +4 -0
  165. package/dist/{src/commands/uniteCommands.js → mjs/src/commands/uniteCommands.mjs} +2 -2
  166. package/dist/mjs/src/components/AbstractComponent.d.ts +73 -0
  167. package/dist/{src/components/AbstractComponent.js → mjs/src/components/AbstractComponent.mjs} +4 -4
  168. package/dist/mjs/src/components/ImageBackground.d.ts +42 -0
  169. package/dist/{src/components/ImageBackground.js → mjs/src/components/ImageBackground.mjs} +5 -5
  170. package/dist/mjs/src/components/ImageComponent.d.ts +31 -0
  171. package/dist/{src/components/ImageComponent.js → mjs/src/components/ImageComponent.mjs} +3 -3
  172. package/dist/mjs/src/components/RestylableComponent.d.ts +24 -0
  173. package/dist/{src/components/RestylableComponent.js → mjs/src/components/RestylableComponent.mjs} +4 -4
  174. package/dist/mjs/src/components/SVGGlobalAttributesObject.d.ts +21 -0
  175. package/dist/{src/components/SVGGlobalAttributesObject.js → mjs/src/components/SVGGlobalAttributesObject.mjs} +3 -3
  176. package/dist/mjs/src/components/Stroke.d.ts +40 -0
  177. package/dist/{src/components/Stroke.js → mjs/src/components/Stroke.mjs} +5 -5
  178. package/dist/mjs/src/components/TextComponent.d.ts +53 -0
  179. package/dist/{src/components/TextComponent.js → mjs/src/components/TextComponent.mjs} +7 -7
  180. package/dist/mjs/src/components/UnknownSVGObject.d.ts +18 -0
  181. package/dist/{src/components/UnknownSVGObject.js → mjs/src/components/UnknownSVGObject.mjs} +3 -3
  182. package/dist/mjs/src/components/builders/ArrowBuilder.d.ts +19 -0
  183. package/dist/{src/components/builders/ArrowBuilder.js → mjs/src/components/builders/ArrowBuilder.mjs} +2 -2
  184. package/dist/mjs/src/components/builders/FreehandLineBuilder.d.ts +33 -0
  185. package/dist/{src/components/builders/FreehandLineBuilder.js → mjs/src/components/builders/FreehandLineBuilder.mjs} +7 -7
  186. package/dist/mjs/src/components/builders/LineBuilder.d.ts +18 -0
  187. package/dist/{src/components/builders/LineBuilder.js → mjs/src/components/builders/LineBuilder.mjs} +2 -2
  188. package/dist/mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +36 -0
  189. package/dist/{src/components/builders/PressureSensitiveFreehandLineBuilder.js → mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.mjs} +6 -6
  190. package/dist/mjs/src/components/builders/RectangleBuilder.d.ts +20 -0
  191. package/dist/{src/components/builders/RectangleBuilder.js → mjs/src/components/builders/RectangleBuilder.mjs} +4 -4
  192. package/dist/mjs/src/components/builders/types.d.ts +12 -0
  193. package/dist/mjs/src/components/builders/types.mjs +1 -0
  194. package/dist/{src/components/lib.js → mjs/src/components/lib.d.ts} +3 -3
  195. package/dist/mjs/src/components/lib.mjs +12 -0
  196. package/dist/mjs/src/components/localization.d.ts +11 -0
  197. package/dist/mjs/src/components/util/StrokeSmoother.d.ts +35 -0
  198. package/dist/{src/components/util/StrokeSmoother.js → mjs/src/components/util/StrokeSmoother.mjs} +3 -3
  199. package/dist/mjs/src/components/util/describeComponentList.d.ts +4 -0
  200. package/dist/{src/lib.js → mjs/src/lib.d.ts} +2 -2
  201. package/dist/mjs/src/lib.mjs +34 -0
  202. package/dist/mjs/src/localization.d.ts +14 -0
  203. package/dist/{src/localization.js → mjs/src/localization.mjs} +5 -5
  204. package/dist/mjs/src/localizations/de.d.ts +3 -0
  205. package/dist/{src/localizations/de.js → mjs/src/localizations/de.mjs} +1 -1
  206. package/dist/mjs/src/localizations/en.d.ts +3 -0
  207. package/dist/{src/localizations/en.js → mjs/src/localizations/en.mjs} +1 -1
  208. package/dist/mjs/src/localizations/es.d.ts +3 -0
  209. package/dist/{src/localizations/es.js → mjs/src/localizations/es.mjs} +1 -1
  210. package/dist/mjs/src/localizations/getLocalizationTable.d.ts +3 -0
  211. package/dist/{src/localizations/getLocalizationTable.js → mjs/src/localizations/getLocalizationTable.mjs} +4 -4
  212. package/dist/mjs/src/math/LineSegment2.d.ts +24 -0
  213. package/dist/{src/math/LineSegment2.js → mjs/src/math/LineSegment2.mjs} +2 -2
  214. package/dist/mjs/src/math/Mat33.d.ts +118 -0
  215. package/dist/{src/math/Mat33.js → mjs/src/math/Mat33.mjs} +2 -2
  216. package/dist/mjs/src/math/Path.d.ts +71 -0
  217. package/dist/{src/math/Path.js → mjs/src/math/Path.mjs} +5 -5
  218. package/dist/mjs/src/math/Rect2.d.ts +52 -0
  219. package/dist/{src/math/Rect2.js → mjs/src/math/Rect2.mjs} +2 -2
  220. package/dist/mjs/src/math/Triangle.d.ts +11 -0
  221. package/dist/mjs/src/math/Vec2.d.ts +13 -0
  222. package/dist/{src/math/Vec2.js → mjs/src/math/Vec2.mjs} +1 -1
  223. package/dist/mjs/src/math/Vec3.d.ts +106 -0
  224. package/dist/mjs/src/math/lib.mjs +7 -0
  225. package/dist/mjs/src/math/rounding.d.ts +4 -0
  226. package/dist/mjs/src/rendering/Display.d.ts +75 -0
  227. package/dist/{src/rendering/Display.js → mjs/src/rendering/Display.mjs} +7 -7
  228. package/dist/mjs/src/rendering/RenderingStyle.d.ts +31 -0
  229. package/dist/{src/rendering/RenderingStyle.js → mjs/src/rendering/RenderingStyle.mjs} +1 -1
  230. package/dist/mjs/src/rendering/TextRenderingStyle.d.ts +36 -0
  231. package/dist/{src/rendering/TextRenderingStyle.js → mjs/src/rendering/TextRenderingStyle.mjs} +1 -1
  232. package/dist/mjs/src/rendering/caching/CacheRecord.d.ts +20 -0
  233. package/dist/{src/rendering/caching/CacheRecord.js → mjs/src/rendering/caching/CacheRecord.mjs} +1 -1
  234. package/dist/mjs/src/rendering/caching/CacheRecordManager.d.ts +12 -0
  235. package/dist/{src/rendering/caching/CacheRecordManager.js → mjs/src/rendering/caching/CacheRecordManager.mjs} +1 -1
  236. package/dist/mjs/src/rendering/caching/RenderingCache.d.ts +11 -0
  237. package/dist/{src/rendering/caching/RenderingCache.js → mjs/src/rendering/caching/RenderingCache.mjs} +3 -3
  238. package/dist/mjs/src/rendering/caching/RenderingCacheNode.d.ts +29 -0
  239. package/dist/{src/rendering/caching/RenderingCacheNode.js → mjs/src/rendering/caching/RenderingCacheNode.mjs} +3 -3
  240. package/dist/mjs/src/rendering/caching/testUtils.d.ts +9 -0
  241. package/dist/{src/rendering/caching/testUtils.js → mjs/src/rendering/caching/testUtils.mjs} +4 -4
  242. package/dist/mjs/src/rendering/caching/types.d.ts +19 -0
  243. package/dist/mjs/src/rendering/caching/types.mjs +1 -0
  244. package/dist/mjs/src/rendering/lib.mjs +5 -0
  245. package/dist/mjs/src/rendering/localization.d.ts +10 -0
  246. package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +68 -0
  247. package/dist/{src/rendering/renderers/AbstractRenderer.js → mjs/src/rendering/renderers/AbstractRenderer.mjs} +3 -3
  248. package/dist/mjs/src/rendering/renderers/CanvasRenderer.d.ts +63 -0
  249. package/dist/{src/rendering/renderers/CanvasRenderer.js → mjs/src/rendering/renderers/CanvasRenderer.mjs} +5 -5
  250. package/dist/mjs/src/rendering/renderers/DummyRenderer.d.ts +35 -0
  251. package/dist/{src/rendering/renderers/DummyRenderer.js → mjs/src/rendering/renderers/DummyRenderer.mjs} +2 -2
  252. package/dist/mjs/src/rendering/renderers/SVGRenderer.d.ts +57 -0
  253. package/dist/{src/rendering/renderers/SVGRenderer.js → mjs/src/rendering/renderers/SVGRenderer.mjs} +6 -6
  254. package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.d.ts +29 -0
  255. package/dist/{src/rendering/renderers/TextOnlyRenderer.js → mjs/src/rendering/renderers/TextOnlyRenderer.mjs} +2 -2
  256. package/dist/mjs/src/testing/beforeEachFile.d.ts +1 -0
  257. package/dist/{src/testing/beforeEachFile.js → mjs/src/testing/beforeEachFile.mjs} +1 -1
  258. package/dist/mjs/src/testing/createEditor.d.ts +4 -0
  259. package/dist/{src/testing/createEditor.js → mjs/src/testing/createEditor.mjs} +2 -2
  260. package/dist/mjs/src/testing/lib.mjs +2 -0
  261. package/dist/mjs/src/testing/loadExpectExtensions.d.ts +2 -0
  262. package/dist/mjs/src/testing/sendPenEvent.d.ts +12 -0
  263. package/dist/{src/testing/sendPenEvent.js → mjs/src/testing/sendPenEvent.mjs} +2 -2
  264. package/dist/mjs/src/testing/sendTouchEvent.d.ts +42 -0
  265. package/dist/{src/testing/sendTouchEvent.js → mjs/src/testing/sendTouchEvent.mjs} +2 -2
  266. package/dist/mjs/src/toolbar/HTMLToolbar.d.ts +103 -0
  267. package/dist/{src/toolbar/HTMLToolbar.js → mjs/src/toolbar/HTMLToolbar.mjs} +17 -17
  268. package/dist/mjs/src/toolbar/IconProvider.d.ts +62 -0
  269. package/dist/{src/toolbar/IconProvider.js → mjs/src/toolbar/IconProvider.mjs} +4 -4
  270. package/dist/mjs/src/toolbar/lib.mjs +3 -0
  271. package/dist/mjs/src/toolbar/localization.d.ts +49 -0
  272. package/dist/mjs/src/toolbar/makeColorInput.d.ts +6 -0
  273. package/dist/{src/toolbar/makeColorInput.js → mjs/src/toolbar/makeColorInput.mjs} +3 -3
  274. package/dist/mjs/src/toolbar/types.d.ts +4 -0
  275. package/dist/mjs/src/toolbar/types.mjs +1 -0
  276. package/dist/mjs/src/toolbar/widgets/ActionButtonWidget.d.ts +15 -0
  277. package/dist/{src/toolbar/widgets/ActionButtonWidget.js → mjs/src/toolbar/widgets/ActionButtonWidget.mjs} +1 -1
  278. package/dist/mjs/src/toolbar/widgets/BaseToolWidget.d.ts +11 -0
  279. package/dist/{src/toolbar/widgets/BaseToolWidget.js → mjs/src/toolbar/widgets/BaseToolWidget.mjs} +2 -2
  280. package/dist/mjs/src/toolbar/widgets/BaseWidget.d.ts +72 -0
  281. package/dist/{src/toolbar/widgets/BaseWidget.js → mjs/src/toolbar/widgets/BaseWidget.mjs} +3 -3
  282. package/dist/mjs/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +18 -0
  283. package/dist/{src/toolbar/widgets/DocumentPropertiesWidget.js → mjs/src/toolbar/widgets/DocumentPropertiesWidget.mjs} +6 -6
  284. package/dist/mjs/src/toolbar/widgets/EraserToolWidget.d.ts +17 -0
  285. package/dist/{src/toolbar/widgets/EraserToolWidget.js → mjs/src/toolbar/widgets/EraserToolWidget.mjs} +3 -3
  286. package/dist/mjs/src/toolbar/widgets/HandToolWidget.d.ts +17 -0
  287. package/dist/{src/toolbar/widgets/HandToolWidget.js → mjs/src/toolbar/widgets/HandToolWidget.mjs} +7 -7
  288. package/dist/mjs/src/toolbar/widgets/InsertImageWidget.d.ts +19 -0
  289. package/dist/{src/toolbar/widgets/InsertImageWidget.js → mjs/src/toolbar/widgets/InsertImageWidget.mjs} +8 -8
  290. package/dist/mjs/src/toolbar/widgets/OverflowWidget.d.ts +25 -0
  291. package/dist/{src/toolbar/widgets/OverflowWidget.js → mjs/src/toolbar/widgets/OverflowWidget.mjs} +1 -1
  292. package/dist/mjs/src/toolbar/widgets/PenToolWidget.d.ts +27 -0
  293. package/dist/{src/toolbar/widgets/PenToolWidget.js → mjs/src/toolbar/widgets/PenToolWidget.mjs} +10 -10
  294. package/dist/mjs/src/toolbar/widgets/SelectionToolWidget.d.ts +13 -0
  295. package/dist/{src/toolbar/widgets/SelectionToolWidget.js → mjs/src/toolbar/widgets/SelectionToolWidget.mjs} +8 -8
  296. package/dist/mjs/src/toolbar/widgets/TextToolWidget.d.ts +16 -0
  297. package/dist/{src/toolbar/widgets/TextToolWidget.js → mjs/src/toolbar/widgets/TextToolWidget.mjs} +5 -5
  298. package/dist/mjs/src/toolbar/widgets/lib.mjs +10 -0
  299. package/dist/mjs/src/tools/BaseTool.d.ts +22 -0
  300. package/dist/{src/tools/BaseTool.js → mjs/src/tools/BaseTool.mjs} +1 -1
  301. package/dist/mjs/src/tools/Eraser.d.ts +23 -0
  302. package/dist/{src/tools/Eraser.js → mjs/src/tools/Eraser.mjs} +8 -8
  303. package/dist/mjs/src/tools/FindTool.d.ts +21 -0
  304. package/dist/{src/tools/FindTool.js → mjs/src/tools/FindTool.mjs} +2 -2
  305. package/dist/mjs/src/tools/PanZoom.d.ts +52 -0
  306. package/dist/{src/tools/PanZoom.js → mjs/src/tools/PanZoom.mjs} +8 -8
  307. package/dist/mjs/src/tools/PasteHandler.d.ts +23 -0
  308. package/dist/{src/tools/PasteHandler.js → mjs/src/tools/PasteHandler.mjs} +7 -7
  309. package/dist/mjs/src/tools/Pen.d.ts +39 -0
  310. package/dist/{src/tools/Pen.js → mjs/src/tools/Pen.mjs} +5 -5
  311. package/dist/mjs/src/tools/PipetteTool.d.ts +18 -0
  312. package/dist/{src/tools/PipetteTool.js → mjs/src/tools/PipetteTool.mjs} +1 -1
  313. package/dist/mjs/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +8 -0
  314. package/dist/{src/tools/SelectionTool/SelectAllShortcutHandler.js → mjs/src/tools/SelectionTool/SelectAllShortcutHandler.mjs} +2 -2
  315. package/dist/mjs/src/tools/SelectionTool/Selection.d.ts +64 -0
  316. package/dist/{src/tools/SelectionTool/Selection.js → mjs/src/tools/SelectionTool/Selection.mjs} +12 -12
  317. package/dist/mjs/src/tools/SelectionTool/SelectionHandle.d.ts +38 -0
  318. package/dist/{src/tools/SelectionTool/SelectionHandle.js → mjs/src/tools/SelectionTool/SelectionHandle.mjs} +3 -3
  319. package/dist/mjs/src/tools/SelectionTool/SelectionTool.d.ts +36 -0
  320. package/dist/{src/tools/SelectionTool/SelectionTool.js → mjs/src/tools/SelectionTool/SelectionTool.mjs} +8 -8
  321. package/dist/mjs/src/tools/SelectionTool/TransformMode.d.ts +34 -0
  322. package/dist/{src/tools/SelectionTool/TransformMode.js → mjs/src/tools/SelectionTool/TransformMode.mjs} +4 -4
  323. package/dist/mjs/src/tools/SelectionTool/types.d.ts +9 -0
  324. package/dist/mjs/src/tools/TextTool.d.ts +33 -0
  325. package/dist/{src/tools/TextTool.js → mjs/src/tools/TextTool.mjs} +11 -11
  326. package/dist/mjs/src/tools/ToolController.d.ts +18 -0
  327. package/dist/{src/tools/ToolController.js → mjs/src/tools/ToolController.mjs} +16 -16
  328. package/dist/mjs/src/tools/ToolEnabledGroup.d.ts +6 -0
  329. package/dist/mjs/src/tools/ToolSwitcherShortcut.d.ts +16 -0
  330. package/dist/{src/tools/ToolSwitcherShortcut.js → mjs/src/tools/ToolSwitcherShortcut.mjs} +1 -1
  331. package/dist/mjs/src/tools/ToolbarShortcutHandler.d.ts +12 -0
  332. package/dist/{src/tools/ToolbarShortcutHandler.js → mjs/src/tools/ToolbarShortcutHandler.mjs} +1 -1
  333. package/dist/mjs/src/tools/UndoRedoShortcut.d.ts +8 -0
  334. package/dist/{src/tools/UndoRedoShortcut.js → mjs/src/tools/UndoRedoShortcut.mjs} +1 -1
  335. package/dist/{src/tools/lib.js → mjs/src/tools/lib.d.ts} +1 -1
  336. package/dist/mjs/src/tools/lib.mjs +16 -0
  337. package/dist/mjs/src/tools/localization.d.ts +28 -0
  338. package/dist/mjs/src/types.d.ts +151 -0
  339. package/dist/mjs/src/util/assertions.d.ts +23 -0
  340. package/dist/mjs/src/util/fileToBase64.d.ts +3 -0
  341. package/dist/mjs/src/util/untilNextAnimationFrame.d.ts +3 -0
  342. package/dist/mjs/src/util/waitForTimeout.d.ts +2 -0
  343. package/package.json +34 -33
  344. package/src/Color4.ts +2 -0
  345. package/tsconfig.json +3 -2
  346. package/tsconfig.mjs.json +9 -0
  347. /package/dist/{build_tools → cjs/build_tools}/BundledFile.d.ts +0 -0
  348. /package/dist/{build_tools → cjs/build_tools}/buildTranslationTemplate.d.ts +0 -0
  349. /package/dist/{build_tools → cjs/build_tools}/bundle.d.ts +0 -0
  350. /package/dist/{src/components/builders/types.js → cjs/build_tools/postDist.d.ts} +0 -0
  351. /package/dist/{src → cjs/src}/Editor.d.ts +0 -0
  352. /package/dist/{src → cjs/src}/EditorImage.d.ts +0 -0
  353. /package/dist/{src → cjs/src}/EventDispatcher.d.ts +0 -0
  354. /package/dist/{src → cjs/src}/Pointer.d.ts +0 -0
  355. /package/dist/{src → cjs/src}/SVGLoader.d.ts +0 -0
  356. /package/dist/{src → cjs/src}/UndoRedoHistory.d.ts +0 -0
  357. /package/dist/{src → cjs/src}/Viewport.d.ts +0 -0
  358. /package/dist/{src → cjs/src}/bundle/bundled.d.ts +0 -0
  359. /package/dist/{src → cjs/src}/commands/Command.d.ts +0 -0
  360. /package/dist/{src → cjs/src}/commands/Duplicate.d.ts +0 -0
  361. /package/dist/{src → cjs/src}/commands/Erase.d.ts +0 -0
  362. /package/dist/{src → cjs/src}/commands/SerializableCommand.d.ts +0 -0
  363. /package/dist/{src → cjs/src}/commands/UnresolvedCommand.d.ts +0 -0
  364. /package/dist/{src → cjs/src}/commands/invertCommand.d.ts +0 -0
  365. /package/dist/{src → cjs/src}/commands/lib.d.ts +0 -0
  366. /package/dist/{src → cjs/src}/commands/localization.d.ts +0 -0
  367. /package/dist/{src → cjs/src}/commands/uniteCommands.d.ts +0 -0
  368. /package/dist/{src → cjs/src}/components/AbstractComponent.d.ts +0 -0
  369. /package/dist/{src → cjs/src}/components/ImageBackground.d.ts +0 -0
  370. /package/dist/{src → cjs/src}/components/ImageComponent.d.ts +0 -0
  371. /package/dist/{src → cjs/src}/components/RestylableComponent.d.ts +0 -0
  372. /package/dist/{src → cjs/src}/components/SVGGlobalAttributesObject.d.ts +0 -0
  373. /package/dist/{src → cjs/src}/components/Stroke.d.ts +0 -0
  374. /package/dist/{src → cjs/src}/components/TextComponent.d.ts +0 -0
  375. /package/dist/{src → cjs/src}/components/UnknownSVGObject.d.ts +0 -0
  376. /package/dist/{src → cjs/src}/components/builders/ArrowBuilder.d.ts +0 -0
  377. /package/dist/{src → cjs/src}/components/builders/FreehandLineBuilder.d.ts +0 -0
  378. /package/dist/{src → cjs/src}/components/builders/LineBuilder.d.ts +0 -0
  379. /package/dist/{src → cjs/src}/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +0 -0
  380. /package/dist/{src → cjs/src}/components/builders/RectangleBuilder.d.ts +0 -0
  381. /package/dist/{src → cjs/src}/components/builders/types.d.ts +0 -0
  382. /package/dist/{src → cjs/src}/components/lib.d.ts +0 -0
  383. /package/dist/{src → cjs/src}/components/localization.d.ts +0 -0
  384. /package/dist/{src → cjs/src}/components/util/StrokeSmoother.d.ts +0 -0
  385. /package/dist/{src → cjs/src}/components/util/describeComponentList.d.ts +0 -0
  386. /package/dist/{src → cjs/src}/lib.d.ts +0 -0
  387. /package/dist/{src → cjs/src}/localization.d.ts +0 -0
  388. /package/dist/{src → cjs/src}/localizations/de.d.ts +0 -0
  389. /package/dist/{src → cjs/src}/localizations/en.d.ts +0 -0
  390. /package/dist/{src → cjs/src}/localizations/es.d.ts +0 -0
  391. /package/dist/{src → cjs/src}/localizations/getLocalizationTable.d.ts +0 -0
  392. /package/dist/{src → cjs/src}/math/LineSegment2.d.ts +0 -0
  393. /package/dist/{src → cjs/src}/math/Mat33.d.ts +0 -0
  394. /package/dist/{src → cjs/src}/math/Path.d.ts +0 -0
  395. /package/dist/{src → cjs/src}/math/Rect2.d.ts +0 -0
  396. /package/dist/{src → cjs/src}/math/Triangle.d.ts +0 -0
  397. /package/dist/{src → cjs/src}/math/Vec2.d.ts +0 -0
  398. /package/dist/{src → cjs/src}/math/Vec3.d.ts +0 -0
  399. /package/dist/{src → cjs/src}/math/lib.d.ts +0 -0
  400. /package/dist/{src → cjs/src}/math/rounding.d.ts +0 -0
  401. /package/dist/{src → cjs/src}/rendering/Display.d.ts +0 -0
  402. /package/dist/{src → cjs/src}/rendering/RenderingStyle.d.ts +0 -0
  403. /package/dist/{src → cjs/src}/rendering/TextRenderingStyle.d.ts +0 -0
  404. /package/dist/{src → cjs/src}/rendering/caching/CacheRecord.d.ts +0 -0
  405. /package/dist/{src → cjs/src}/rendering/caching/CacheRecordManager.d.ts +0 -0
  406. /package/dist/{src → cjs/src}/rendering/caching/RenderingCache.d.ts +0 -0
  407. /package/dist/{src → cjs/src}/rendering/caching/RenderingCacheNode.d.ts +0 -0
  408. /package/dist/{src → cjs/src}/rendering/caching/testUtils.d.ts +0 -0
  409. /package/dist/{src → cjs/src}/rendering/caching/types.d.ts +0 -0
  410. /package/dist/{src → cjs/src}/rendering/lib.d.ts +0 -0
  411. /package/dist/{src → cjs/src}/rendering/localization.d.ts +0 -0
  412. /package/dist/{src → cjs/src}/rendering/renderers/AbstractRenderer.d.ts +0 -0
  413. /package/dist/{src → cjs/src}/rendering/renderers/CanvasRenderer.d.ts +0 -0
  414. /package/dist/{src → cjs/src}/rendering/renderers/DummyRenderer.d.ts +0 -0
  415. /package/dist/{src → cjs/src}/rendering/renderers/SVGRenderer.d.ts +0 -0
  416. /package/dist/{src → cjs/src}/rendering/renderers/TextOnlyRenderer.d.ts +0 -0
  417. /package/dist/{src → cjs/src}/testing/beforeEachFile.d.ts +0 -0
  418. /package/dist/{src → cjs/src}/testing/createEditor.d.ts +0 -0
  419. /package/dist/{src → cjs/src}/testing/lib.d.ts +0 -0
  420. /package/dist/{src → cjs/src}/testing/loadExpectExtensions.d.ts +0 -0
  421. /package/dist/{src → cjs/src}/testing/sendPenEvent.d.ts +0 -0
  422. /package/dist/{src → cjs/src}/testing/sendTouchEvent.d.ts +0 -0
  423. /package/dist/{src → cjs/src}/toolbar/HTMLToolbar.d.ts +0 -0
  424. /package/dist/{src → cjs/src}/toolbar/IconProvider.d.ts +0 -0
  425. /package/dist/{src → cjs/src}/toolbar/lib.d.ts +0 -0
  426. /package/dist/{src → cjs/src}/toolbar/localization.d.ts +0 -0
  427. /package/dist/{src → cjs/src}/toolbar/makeColorInput.d.ts +0 -0
  428. /package/dist/{src → cjs/src}/toolbar/types.d.ts +0 -0
  429. /package/dist/{src → cjs/src}/toolbar/widgets/ActionButtonWidget.d.ts +0 -0
  430. /package/dist/{src → cjs/src}/toolbar/widgets/BaseToolWidget.d.ts +0 -0
  431. /package/dist/{src → cjs/src}/toolbar/widgets/BaseWidget.d.ts +0 -0
  432. /package/dist/{src → cjs/src}/toolbar/widgets/DocumentPropertiesWidget.d.ts +0 -0
  433. /package/dist/{src → cjs/src}/toolbar/widgets/EraserToolWidget.d.ts +0 -0
  434. /package/dist/{src → cjs/src}/toolbar/widgets/HandToolWidget.d.ts +0 -0
  435. /package/dist/{src → cjs/src}/toolbar/widgets/InsertImageWidget.d.ts +0 -0
  436. /package/dist/{src → cjs/src}/toolbar/widgets/OverflowWidget.d.ts +0 -0
  437. /package/dist/{src → cjs/src}/toolbar/widgets/PenToolWidget.d.ts +0 -0
  438. /package/dist/{src → cjs/src}/toolbar/widgets/SelectionToolWidget.d.ts +0 -0
  439. /package/dist/{src → cjs/src}/toolbar/widgets/TextToolWidget.d.ts +0 -0
  440. /package/dist/{src → cjs/src}/toolbar/widgets/lib.d.ts +0 -0
  441. /package/dist/{src → cjs/src}/tools/BaseTool.d.ts +0 -0
  442. /package/dist/{src → cjs/src}/tools/Eraser.d.ts +0 -0
  443. /package/dist/{src → cjs/src}/tools/FindTool.d.ts +0 -0
  444. /package/dist/{src → cjs/src}/tools/PanZoom.d.ts +0 -0
  445. /package/dist/{src → cjs/src}/tools/PasteHandler.d.ts +0 -0
  446. /package/dist/{src → cjs/src}/tools/Pen.d.ts +0 -0
  447. /package/dist/{src → cjs/src}/tools/PipetteTool.d.ts +0 -0
  448. /package/dist/{src → cjs/src}/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -0
  449. /package/dist/{src → cjs/src}/tools/SelectionTool/Selection.d.ts +0 -0
  450. /package/dist/{src → cjs/src}/tools/SelectionTool/SelectionHandle.d.ts +0 -0
  451. /package/dist/{src → cjs/src}/tools/SelectionTool/SelectionTool.d.ts +0 -0
  452. /package/dist/{src → cjs/src}/tools/SelectionTool/TransformMode.d.ts +0 -0
  453. /package/dist/{src → cjs/src}/tools/SelectionTool/types.d.ts +0 -0
  454. /package/dist/{src → cjs/src}/tools/TextTool.d.ts +0 -0
  455. /package/dist/{src → cjs/src}/tools/ToolController.d.ts +0 -0
  456. /package/dist/{src → cjs/src}/tools/ToolEnabledGroup.d.ts +0 -0
  457. /package/dist/{src → cjs/src}/tools/ToolSwitcherShortcut.d.ts +0 -0
  458. /package/dist/{src → cjs/src}/tools/ToolbarShortcutHandler.d.ts +0 -0
  459. /package/dist/{src → cjs/src}/tools/UndoRedoShortcut.d.ts +0 -0
  460. /package/dist/{src → cjs/src}/tools/lib.d.ts +0 -0
  461. /package/dist/{src → cjs/src}/tools/localization.d.ts +0 -0
  462. /package/dist/{src → cjs/src}/types.d.ts +0 -0
  463. /package/dist/{src → cjs/src}/util/assertions.d.ts +0 -0
  464. /package/dist/{src → cjs/src}/util/fileToBase64.d.ts +0 -0
  465. /package/dist/{src → cjs/src}/util/untilNextAnimationFrame.d.ts +0 -0
  466. /package/dist/{src → cjs/src}/util/waitForTimeout.d.ts +0 -0
  467. /package/dist/{build_tools/BundledFile.js → mjs/build_tools/BundledFile.mjs} +0 -0
  468. /package/dist/{src/rendering/caching/types.js → mjs/build_tools/buildTranslationTemplate.d.ts} +0 -0
  469. /package/dist/{src/toolbar/types.js → mjs/build_tools/bundle.d.ts} +0 -0
  470. /package/dist/{src/EventDispatcher.js → mjs/src/EventDispatcher.mjs} +0 -0
  471. /package/dist/{src/commands/Command.js → mjs/src/commands/Command.mjs} +0 -0
  472. /package/dist/{src/commands/lib.js → mjs/src/commands/lib.d.ts} +0 -0
  473. /package/dist/{src/commands/localization.js → mjs/src/commands/localization.mjs} +0 -0
  474. /package/dist/{src/components/localization.js → mjs/src/components/localization.mjs} +0 -0
  475. /package/dist/{src/components/util/describeComponentList.js → mjs/src/components/util/describeComponentList.mjs} +0 -0
  476. /package/dist/{src/math/Triangle.js → mjs/src/math/Triangle.mjs} +0 -0
  477. /package/dist/{src/math/Vec3.js → mjs/src/math/Vec3.mjs} +0 -0
  478. /package/dist/{src/math/lib.js → mjs/src/math/lib.d.ts} +0 -0
  479. /package/dist/{src/math/rounding.js → mjs/src/math/rounding.mjs} +0 -0
  480. /package/dist/{src/rendering/lib.js → mjs/src/rendering/lib.d.ts} +0 -0
  481. /package/dist/{src/rendering/localization.js → mjs/src/rendering/localization.mjs} +0 -0
  482. /package/dist/{src/testing/lib.js → mjs/src/testing/lib.d.ts} +0 -0
  483. /package/dist/{src/testing/loadExpectExtensions.js → mjs/src/testing/loadExpectExtensions.mjs} +0 -0
  484. /package/dist/{src/toolbar/lib.js → mjs/src/toolbar/lib.d.ts} +0 -0
  485. /package/dist/{src/toolbar/localization.js → mjs/src/toolbar/localization.mjs} +0 -0
  486. /package/dist/{src/toolbar/widgets/lib.js → mjs/src/toolbar/widgets/lib.d.ts} +0 -0
  487. /package/dist/{src/tools/SelectionTool/types.js → mjs/src/tools/SelectionTool/types.mjs} +0 -0
  488. /package/dist/{src/tools/ToolEnabledGroup.js → mjs/src/tools/ToolEnabledGroup.mjs} +0 -0
  489. /package/dist/{src/tools/localization.js → mjs/src/tools/localization.mjs} +0 -0
  490. /package/dist/{src/types.js → mjs/src/types.mjs} +0 -0
  491. /package/dist/{src/util/assertions.js → mjs/src/util/assertions.mjs} +0 -0
  492. /package/dist/{src/util/fileToBase64.js → mjs/src/util/fileToBase64.mjs} +0 -0
  493. /package/dist/{src/util/untilNextAnimationFrame.js → mjs/src/util/untilNextAnimationFrame.mjs} +0 -0
  494. /package/dist/{src/util/waitForTimeout.js → mjs/src/util/waitForTimeout.mjs} +0 -0
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StrokeSmoother = void 0;
7
+ const bezier_js_1 = require("bezier-js");
8
+ const Vec2_1 = require("../../math/Vec2");
9
+ const Rect2_1 = __importDefault(require("../../math/Rect2"));
10
+ const LineSegment2_1 = __importDefault(require("../../math/LineSegment2"));
11
+ // Handles stroke smoothing
12
+ class StrokeSmoother {
13
+ constructor(startPoint,
14
+ // Maximum distance from the actual curve (irrespective of stroke width)
15
+ // for which a point is considered 'part of the curve'.
16
+ // Note that the maximum will be smaller if the stroke width is less than
17
+ // [maxFitAllowed].
18
+ minFitAllowed, maxFitAllowed, onCurveAdded) {
19
+ this.startPoint = startPoint;
20
+ this.minFitAllowed = minFitAllowed;
21
+ this.maxFitAllowed = maxFitAllowed;
22
+ this.onCurveAdded = onCurveAdded;
23
+ this.isFirstSegment = true;
24
+ this.lastExitingVec = null;
25
+ this.currentCurve = null;
26
+ this.lastPoint = this.startPoint;
27
+ this.buffer = [this.startPoint.pos];
28
+ this.momentum = Vec2_1.Vec2.zero;
29
+ this.currentCurve = null;
30
+ this.curveStartWidth = startPoint.width;
31
+ this.bbox = new Rect2_1.default(this.startPoint.pos.x, this.startPoint.pos.y, 0, 0);
32
+ }
33
+ getBBox() {
34
+ return this.bbox;
35
+ }
36
+ preview() {
37
+ if (!this.currentCurve) {
38
+ return null;
39
+ }
40
+ return this.currentSegmentToPath();
41
+ }
42
+ // Returns the distance between the start, control, and end points of the curve.
43
+ approxCurrentCurveLength() {
44
+ if (!this.currentCurve) {
45
+ return 0;
46
+ }
47
+ const startPt = Vec2_1.Vec2.ofXY(this.currentCurve.points[0]);
48
+ const controlPt = Vec2_1.Vec2.ofXY(this.currentCurve.points[1]);
49
+ const endPt = Vec2_1.Vec2.ofXY(this.currentCurve.points[2]);
50
+ const toControlDist = startPt.minus(controlPt).length();
51
+ const toEndDist = endPt.minus(controlPt).length();
52
+ return toControlDist + toEndDist;
53
+ }
54
+ finalizeCurrentCurve() {
55
+ // Case where no points have been added
56
+ if (!this.currentCurve) {
57
+ return;
58
+ }
59
+ this.onCurveAdded(this.currentSegmentToPath());
60
+ const lastPoint = this.buffer[this.buffer.length - 1];
61
+ this.lastExitingVec = Vec2_1.Vec2.ofXY(this.currentCurve.points[2]).minus(Vec2_1.Vec2.ofXY(this.currentCurve.points[1]));
62
+ console.assert(this.lastExitingVec.magnitude() !== 0, 'lastExitingVec has zero length!');
63
+ // Use the last two points to start a new curve (the last point isn't used
64
+ // in the current curve and we want connected curves to share end points)
65
+ this.buffer = [
66
+ this.buffer[this.buffer.length - 2], lastPoint,
67
+ ];
68
+ this.currentCurve = null;
69
+ this.isFirstSegment = false;
70
+ }
71
+ // Returns [upper curve, connector, lower curve]
72
+ currentSegmentToPath() {
73
+ if (this.currentCurve == null) {
74
+ throw new Error('Invalid State: currentCurve is null!');
75
+ }
76
+ const startVec = Vec2_1.Vec2.ofXY(this.currentCurve.normal(0)).normalized();
77
+ if (!isFinite(startVec.magnitude())) {
78
+ throw new Error(`startVec(${startVec}) is NaN or ∞`);
79
+ }
80
+ const startPt = Vec2_1.Vec2.ofXY(this.currentCurve.get(0));
81
+ const endPt = Vec2_1.Vec2.ofXY(this.currentCurve.get(1));
82
+ const controlPoint = Vec2_1.Vec2.ofXY(this.currentCurve.points[1]);
83
+ return {
84
+ startPoint: startPt,
85
+ controlPoint,
86
+ endPoint: endPt,
87
+ startWidth: this.curveStartWidth,
88
+ endWidth: this.curveEndWidth,
89
+ };
90
+ }
91
+ // Compute the direction of the velocity at the end of this.buffer
92
+ computeExitingVec() {
93
+ return this.momentum.normalized().times(this.lastPoint.width / 2);
94
+ }
95
+ addPoint(newPoint) {
96
+ var _a, _b;
97
+ if (this.lastPoint) {
98
+ // Ignore points that are identical
99
+ const fuzzEq = 1e-10;
100
+ const deltaTime = newPoint.time - this.lastPoint.time;
101
+ if (newPoint.pos.eq(this.lastPoint.pos, fuzzEq) || deltaTime === 0) {
102
+ return;
103
+ }
104
+ else if (isNaN(newPoint.pos.magnitude())) {
105
+ console.warn('Discarding NaN point.', newPoint);
106
+ return;
107
+ }
108
+ const threshold = Math.min(this.lastPoint.width, newPoint.width) / 3;
109
+ const shouldSnapToInitial = this.startPoint.pos.minus(newPoint.pos).magnitude() < threshold
110
+ && this.isFirstSegment;
111
+ // Snap to the starting point if the stroke is contained within a small ball centered
112
+ // at the starting point.
113
+ // This allows us to create a circle/dot at the start of the stroke.
114
+ if (shouldSnapToInitial) {
115
+ return;
116
+ }
117
+ const velocity = newPoint.pos.minus(this.lastPoint.pos).times(1 / (deltaTime) * 1000);
118
+ this.momentum = this.momentum.lerp(velocity, 0.9);
119
+ }
120
+ const lastPoint = (_a = this.lastPoint) !== null && _a !== void 0 ? _a : newPoint;
121
+ this.lastPoint = newPoint;
122
+ this.buffer.push(newPoint.pos);
123
+ const pointRadius = newPoint.width;
124
+ const prevEndWidth = this.curveEndWidth;
125
+ this.curveEndWidth = pointRadius;
126
+ // recompute bbox
127
+ this.bbox = this.bbox.grownToPoint(newPoint.pos, pointRadius);
128
+ // If the last curve just ended or it's the first curve,
129
+ if (this.currentCurve === null) {
130
+ const p1 = lastPoint.pos;
131
+ const p2 = lastPoint.pos.plus((_b = this.lastExitingVec) !== null && _b !== void 0 ? _b : Vec2_1.Vec2.unitX);
132
+ const p3 = newPoint.pos;
133
+ // Quadratic Bézier curve
134
+ this.currentCurve = new bezier_js_1.Bezier(p1.xy, p2.xy, p3.xy);
135
+ console.assert(!isNaN(p1.magnitude()) && !isNaN(p2.magnitude()) && !isNaN(p3.magnitude()), 'Expected !NaN');
136
+ if (this.isFirstSegment) {
137
+ // The start of a curve often lacks accurate pressure information. Update it.
138
+ this.curveStartWidth = (this.curveStartWidth + pointRadius) / 2;
139
+ }
140
+ else {
141
+ this.curveStartWidth = prevEndWidth;
142
+ }
143
+ }
144
+ // If there isn't an entering vector (e.g. because this.isFirstCurve), approximate it.
145
+ let enteringVec = this.lastExitingVec;
146
+ if (!enteringVec) {
147
+ let sampleIdx = Math.ceil(this.buffer.length / 2);
148
+ if (sampleIdx === 0 || sampleIdx >= this.buffer.length) {
149
+ sampleIdx = this.buffer.length - 1;
150
+ }
151
+ enteringVec = this.buffer[sampleIdx].minus(this.buffer[0]);
152
+ }
153
+ let exitingVec = this.computeExitingVec();
154
+ // Find the intersection between the entering vector and the exiting vector
155
+ const maxRelativeLength = 2.2;
156
+ const segmentStart = this.buffer[0];
157
+ const segmentEnd = newPoint.pos;
158
+ const startEndDist = segmentEnd.minus(segmentStart).magnitude();
159
+ const maxControlPointDist = maxRelativeLength * startEndDist;
160
+ // Exit in cases where we would divide by zero
161
+ if (maxControlPointDist === 0 || exitingVec.magnitude() === 0 || !isFinite(exitingVec.magnitude())) {
162
+ return;
163
+ }
164
+ console.assert(isFinite(enteringVec.magnitude()), 'Pre-normalized enteringVec has NaN or ∞ magnitude!');
165
+ enteringVec = enteringVec.normalized();
166
+ exitingVec = exitingVec.normalized();
167
+ console.assert(isFinite(enteringVec.magnitude()), 'Normalized enteringVec has NaN or ∞ magnitude!');
168
+ const lineFromStart = new LineSegment2_1.default(segmentStart, segmentStart.plus(enteringVec.times(maxControlPointDist)));
169
+ const lineFromEnd = new LineSegment2_1.default(segmentEnd.minus(exitingVec.times(maxControlPointDist)), segmentEnd);
170
+ const intersection = lineFromEnd.intersection(lineFromStart);
171
+ // Position the control point at this intersection
172
+ let controlPoint = null;
173
+ if (intersection) {
174
+ controlPoint = intersection.point;
175
+ }
176
+ // No intersection or the intersection is one of the end points?
177
+ if (!controlPoint || segmentStart.eq(controlPoint) || segmentEnd.eq(controlPoint)) {
178
+ // Position the control point closer to the first -- the connecting
179
+ // segment will be roughly a line.
180
+ controlPoint = segmentStart.plus(enteringVec.times(startEndDist / 4));
181
+ }
182
+ console.assert(!segmentStart.eq(controlPoint, 1e-11), 'Start and control points are equal!');
183
+ console.assert(!controlPoint.eq(segmentEnd, 1e-11), 'Control and end points are equal!');
184
+ const prevCurve = this.currentCurve;
185
+ this.currentCurve = new bezier_js_1.Bezier(segmentStart.xy, controlPoint.xy, segmentEnd.xy);
186
+ if (isNaN(Vec2_1.Vec2.ofXY(this.currentCurve.normal(0)).magnitude())) {
187
+ console.error('NaN normal at 0. Curve:', this.currentCurve);
188
+ this.currentCurve = prevCurve;
189
+ }
190
+ // Should we start making a new curve? Check whether all buffer points are within
191
+ // ±strokeWidth of the curve.
192
+ const curveMatchesPoints = (curve) => {
193
+ for (const point of this.buffer) {
194
+ const proj = Vec2_1.Vec2.ofXY(curve.project(point.xy));
195
+ const dist = proj.minus(point).magnitude();
196
+ const minFit = Math.max(Math.min(this.curveStartWidth, this.curveEndWidth) / 3, this.minFitAllowed);
197
+ if (dist > minFit || dist > this.maxFitAllowed) {
198
+ return false;
199
+ }
200
+ }
201
+ return true;
202
+ };
203
+ if (this.buffer.length > 3 && this.approxCurrentCurveLength() > this.curveStartWidth / 2) {
204
+ if (!curveMatchesPoints(this.currentCurve)) {
205
+ // Use a curve that better fits the points
206
+ this.currentCurve = prevCurve;
207
+ this.curveEndWidth = prevEndWidth;
208
+ // Reset the last point -- the current point was not added to the curve.
209
+ this.lastPoint = lastPoint;
210
+ this.finalizeCurrentCurve();
211
+ return;
212
+ }
213
+ }
214
+ }
215
+ }
216
+ exports.StrokeSmoother = StrokeSmoother;
217
+ exports.default = StrokeSmoother;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // Returns the description of all given elements, if identical, otherwise,
4
+ // returns null.
5
+ exports.default = (localizationTable, elems) => {
6
+ if (elems.length === 0) {
7
+ return null;
8
+ }
9
+ const description = elems[0].description(localizationTable);
10
+ for (const elem of elems) {
11
+ if (elem.description(localizationTable) !== description) {
12
+ return null;
13
+ }
14
+ }
15
+ return description;
16
+ };
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * The main entrypoint for the NPM package. Everything exported by this file
4
+ * is available through the [`js-draw` package](https://www.npmjs.com/package/js-draw).
5
+ *
6
+ * @example
7
+ * ```
8
+ * import { Editor, Vec3, Mat33 } from 'js-draw';
9
+ * ```
10
+ *
11
+ * @see
12
+ * {@link Editor}
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
28
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
29
+ };
30
+ var __importDefault = (this && this.__importDefault) || function (mod) {
31
+ return (mod && mod.__esModule) ? mod : { "default": mod };
32
+ };
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ exports.Editor = exports.UndoRedoHistory = exports.HTMLToolbar = exports.PointerDevice = exports.Pointer = exports.Viewport = exports.SVGLoader = exports.Color4 = exports.getLocalizationTable = exports.EditorImage = void 0;
35
+ const Editor_1 = __importDefault(require("./Editor"));
36
+ exports.Editor = Editor_1.default;
37
+ var EditorImage_1 = require("./EditorImage");
38
+ Object.defineProperty(exports, "EditorImage", { enumerable: true, get: function () { return __importDefault(EditorImage_1).default; } });
39
+ __exportStar(require("./types"), exports);
40
+ var getLocalizationTable_1 = require("./localizations/getLocalizationTable");
41
+ Object.defineProperty(exports, "getLocalizationTable", { enumerable: true, get: function () { return __importDefault(getLocalizationTable_1).default; } });
42
+ __exportStar(require("./localization"), exports);
43
+ var Color4_1 = require("./Color4");
44
+ Object.defineProperty(exports, "Color4", { enumerable: true, get: function () { return __importDefault(Color4_1).default; } });
45
+ var SVGLoader_1 = require("./SVGLoader");
46
+ Object.defineProperty(exports, "SVGLoader", { enumerable: true, get: function () { return __importDefault(SVGLoader_1).default; } });
47
+ var Viewport_1 = require("./Viewport");
48
+ Object.defineProperty(exports, "Viewport", { enumerable: true, get: function () { return __importDefault(Viewport_1).default; } });
49
+ __exportStar(require("./math/lib"), exports);
50
+ __exportStar(require("./components/lib"), exports);
51
+ __exportStar(require("./commands/lib"), exports);
52
+ __exportStar(require("./tools/lib"), exports);
53
+ __exportStar(require("./toolbar/lib"), exports);
54
+ __exportStar(require("./rendering/lib"), exports);
55
+ __exportStar(require("./testing/lib"), exports);
56
+ var Pointer_1 = require("./Pointer");
57
+ Object.defineProperty(exports, "Pointer", { enumerable: true, get: function () { return __importDefault(Pointer_1).default; } });
58
+ Object.defineProperty(exports, "PointerDevice", { enumerable: true, get: function () { return Pointer_1.PointerDevice; } });
59
+ var HTMLToolbar_1 = require("./toolbar/HTMLToolbar");
60
+ Object.defineProperty(exports, "HTMLToolbar", { enumerable: true, get: function () { return __importDefault(HTMLToolbar_1).default; } });
61
+ var UndoRedoHistory_1 = require("./UndoRedoHistory");
62
+ Object.defineProperty(exports, "UndoRedoHistory", { enumerable: true, get: function () { return __importDefault(UndoRedoHistory_1).default; } });
63
+ exports.default = Editor_1.default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultEditorLocalization = void 0;
4
+ const localization_1 = require("./commands/localization");
5
+ const localization_2 = require("./components/localization");
6
+ const localization_3 = require("./rendering/localization");
7
+ const localization_4 = require("./toolbar/localization");
8
+ const localization_5 = require("./tools/localization");
9
+ exports.defaultEditorLocalization = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, localization_4.defaultToolbarLocalization), localization_5.defaultToolLocalization), localization_1.defaultCommandLocalization), localization_2.defaultComponentLocalization), localization_3.defaultTextRendererLocalization), { accessibilityInputInstructions: [
10
+ 'Press "t" to read the contents of the viewport as text.',
11
+ 'Use the arrow keys to move the viewport, click and drag to draw strokes.',
12
+ 'Press "w" to zoom in and "s" to zoom out.',
13
+ ].join(' '), loading: (percentage) => `Loading ${percentage}%...`, imageEditor: 'Image Editor', doneLoading: 'Done loading', undoAnnouncement: (commandDescription) => `Undid ${commandDescription}`, redoAnnouncement: (commandDescription) => `Redid ${commandDescription}` });
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const localization_1 = require("../localization");
4
+ // German localization
5
+ const localization = Object.assign(Object.assign({}, localization_1.defaultEditorLocalization), { pen: 'Stift', eraser: 'Radierer', select: 'Auswahl', handTool: 'Verschieben', zoom: 'Vergrößerung', resetView: 'Ansicht zurücksetzen', thicknessLabel: 'Dicke: ', colorLabel: 'Farbe: ', fontLabel: 'Schriftart: ', resizeImageToSelection: 'Bildgröße an Auswahl anpassen', deleteSelection: 'Auswahl löschen', duplicateSelection: 'Auswahl duplizieren', undo: 'Rückgängig', redo: 'Wiederholen', pickColorFromScreen: 'Farbe von Bildschirm auswählen', clickToPickColorAnnouncement: 'Klicke auf den Bildschirm, um eine Farbe auszuwählen', selectionToolKeyboardShortcuts: 'Auswahl-Werkzeug: Verwende die Pfeiltasten, um ausgewählte Elemente zu verschieben und ‚i‘ und ‚o‘, um ihre Größe zu ändern.', touchPanning: 'Ansicht mit Touchscreen verschieben', anyDevicePanning: 'Ansicht mit jedem Eingabegerät verschieben', selectObjectType: 'Objekt-Typ: ', freehandPen: 'Freihand', arrowPen: 'Pfeil', linePen: 'Linie', outlinedRectanglePen: 'Umrissenes Rechteck', filledRectanglePen: 'Ausgefülltes Rechteck', dropdownShown: t => `Dropdown-Menü für ${t} angezeigt`, dropdownHidden: t => `Dropdown-Menü für ${t} versteckt`, zoomLevel: t => `Vergößerung: ${t}%`, colorChangedAnnouncement: t => `Farbe zu ${t} geändert`, penTool: t => `Stift ${t}`, selectionTool: 'Auswahl', eraserTool: 'Radiergummi', touchPanTool: 'Ansicht mit Touchscreen verschieben', twoFingerPanZoomTool: 'Ansicht verschieben und vergrößern', undoRedoTool: 'Rückgängig/Wiederholen', rightClickDragPanTool: 'Rechtsklick-Ziehen', pipetteTool: 'Farbe von Bildschirm auswählen', keyboardPanZoom: 'Tastaturkürzel zum Verschieben/Vergrößern der Ansicht', textTool: 'Text', enterTextToInsert: 'Einzufügender Text', toolEnabledAnnouncement: t => `${t} aktiviert`, toolDisabledAnnouncement: t => `${t} deaktiviert`, updatedViewport: 'Transformierte Ansicht', transformedElements: t => `${t} Element${1 === t ? '' : 'e'} transformiert`, resizeOutputCommand: t => `Bildgröße auf ${t.w}x${t.h} geändert`, addElementAction: t => `${t} hinzugefügt`, eraseAction: (t, e) => `${e} ${t} gelöscht`, duplicateAction: (t, e) => `${e} ${t} dupliziert`, inverseOf: t => `Umkehrung von ${t}`, elements: 'Elemente', erasedNoElements: 'Nichts entfernt', duplicatedNoElements: 'Nichts dupliziert', rotatedBy: t => `${Math.abs(t)} Grad ${t < 0 ? 'im Uhrzeigersinn' : 'gegen den Uhrzeigersinn'} gedreht`, movedLeft: 'Nacht links bewegt', movedUp: 'Nacht oben bewegt', movedDown: 'Nacht unten bewegt', movedRight: 'Nacht rechts bewegt', zoomedOut: 'Ansicht verkleinert', zoomedIn: 'Ansicht vergrößert', selectedElements: t => `${t} Element${1 === t ? '' : 'e'} ausgewählt`, stroke: 'Strich', svgObject: 'SVG-Objekt', text: t => `Text-Objekt: ${t}`, pathNodeCount: t => `Es gibt ${t} sichtbare Pfad-Objekte.`, textNodeCount: t => `Es gibt ${t} sichtbare Text-Knotenpunkte.`, textNode: t => `Text: ${t}`, rerenderAsText: 'Als Text darstellen', accessibilityInputInstructions: 'Drücke ‚t‘, um den Inhalt des Ansichtsfensters als Text zu lesen. Verwende die Pfeiltasten, um die Ansicht zu verschieben, und klicke und ziehe, um Striche zu zeichnen. Drücke ‚w‘ zum Vergrößern und ‚s‘ zum Verkleinern der Ansicht.', loading: t => `Laden ${t}%...`, doneLoading: 'Laden fertig', imageEditor: 'Bild-Editor', undoAnnouncement: t => `Rückgangig gemacht ${t}`, redoAnnouncement: t => `Wiederholt ${t}` });
6
+ exports.default = localization;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const localization_1 = require("../localization");
4
+ // Default localizations are already in English.
5
+ const localization = Object.assign({}, localization_1.defaultEditorLocalization);
6
+ exports.default = localization;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const localization_1 = require("../localization");
4
+ // A partial Spanish localization.
5
+ const localization = Object.assign(Object.assign({}, localization_1.defaultEditorLocalization), {
6
+ // Strings for the main editor interface
7
+ // (see src/localization.ts)
8
+ loading: (percentage) => `Cargando: ${percentage}%...`, imageEditor: 'Editor de dibujos', undoAnnouncement: (commandDescription) => `${commandDescription} fue deshecho`, redoAnnouncement: (commandDescription) => `${commandDescription} fue rehecho`, undo: 'Deshace', redo: 'Rehace',
9
+ // Strings for the toolbar
10
+ // (see src/toolbar/localization.ts)
11
+ pen: 'Lapiz', eraser: 'Borrador', select: 'Selecciona', thicknessLabel: 'Tamaño: ', colorLabel: 'Color: ', doneLoading: 'El cargado terminó', fontLabel: 'Fuente: ', anyDevicePanning: 'Mover la pantalla con todo dispotivo', touchPanning: 'Mover la pantalla con un dedo', touchPanTool: 'Instrumento de mover la pantalla con un dedo', outlinedRectanglePen: 'Rectángulo con nada más que un borde', filledRectanglePen: 'Rectángulo sin borde', linePen: 'Línea', arrowPen: 'Flecha', freehandPen: 'Dibuja sin restricción de forma', selectObjectType: 'Forma de dibuja:', handTool: 'Mover', zoom: 'Zoom', resetView: 'Reiniciar vista', resizeImageToSelection: 'Redimensionar la imagen a lo que está seleccionado', deleteSelection: 'Borra la selección', duplicateSelection: 'Duplica la selección', pickColorFromScreen: 'Selecciona un color de la pantalla', clickToPickColorAnnouncement: 'Haga un clic en la pantalla para seleccionar un color', dropdownShown(toolName) {
12
+ return `Menú por ${toolName} es visible`;
13
+ }, dropdownHidden: function (toolName) {
14
+ return `Menú por ${toolName} fue ocultado`;
15
+ }, colorChangedAnnouncement: function (color) {
16
+ return `Color fue cambiado a ${color}`;
17
+ }, keyboardPanZoom: 'Mover la pantalla con el teclado', penTool: function (penId) {
18
+ return `Lapiz ${penId}`;
19
+ }, selectionTool: 'Selecciona', eraserTool: 'Borrador', textTool: 'Texto', enterTextToInsert: 'Entra texto', textSize: 'Tamaño', rerenderAsText: 'Redibuja la pantalla al texto', lockRotation: 'Bloquea rotación', image: 'Imagen', imageSize: (size, units) => `Tamaño del imagen: ${size} ${units}`, imageLoadError: (message) => `Error cargando imagen: ${message}`, toggleOverflow: 'Más', documentProperties: 'Fondo', imageWidthOption: 'Ancho: ', imageHeightOption: 'Alto: ', backgroundColor: 'Color de fondo: ' });
20
+ exports.default = localization;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const localization_1 = require("../localization");
7
+ const de_1 = __importDefault(require("./de"));
8
+ const en_1 = __importDefault(require("./en"));
9
+ const es_1 = __importDefault(require("./es"));
10
+ const allLocales = {
11
+ de: de_1.default,
12
+ en: en_1.default,
13
+ es: es_1.default,
14
+ };
15
+ // [locale]: A string in the format languageCode_Region or just languageCode. For example, en_US.
16
+ const languageFromLocale = (locale) => {
17
+ const matches = /^(\w+)[_-](\w+)$/.exec(locale);
18
+ if (!matches) {
19
+ // If not in languageCode_region format, the locale should be the
20
+ // languageCode. Return that.
21
+ return locale;
22
+ }
23
+ return matches[1];
24
+ };
25
+ const getLocalizationTable = (userLocales) => {
26
+ userLocales !== null && userLocales !== void 0 ? userLocales : (userLocales = navigator.languages);
27
+ let prevLanguage;
28
+ for (const locale of userLocales) {
29
+ const language = languageFromLocale(locale);
30
+ // If the specific localization of the language is not available, but
31
+ // a localization for the language is,
32
+ if (prevLanguage && language !== prevLanguage) {
33
+ if (prevLanguage in allLocales) {
34
+ return allLocales[prevLanguage];
35
+ }
36
+ }
37
+ // If the full locale (e.g. en_US) is available,
38
+ if (locale in allLocales) {
39
+ return allLocales[locale];
40
+ }
41
+ prevLanguage = language;
42
+ }
43
+ if (prevLanguage && prevLanguage in allLocales) {
44
+ return allLocales[prevLanguage];
45
+ }
46
+ else {
47
+ return localization_1.defaultEditorLocalization;
48
+ }
49
+ };
50
+ exports.default = getLocalizationTable;
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const Rect2_1 = __importDefault(require("./Rect2"));
7
+ const Vec2_1 = require("./Vec2");
8
+ class LineSegment2 {
9
+ constructor(point1, point2) {
10
+ this.point1 = point1;
11
+ this.point2 = point2;
12
+ this.bbox = Rect2_1.default.bboxOf([point1, point2]);
13
+ this.direction = point2.minus(point1);
14
+ this.length = this.direction.magnitude();
15
+ // Normalize
16
+ if (this.length > 0) {
17
+ this.direction = this.direction.times(1 / this.length);
18
+ }
19
+ }
20
+ // Accessors to make LineSegment2 compatible with bezier-js's
21
+ // interface
22
+ get p1() {
23
+ return this.point1;
24
+ }
25
+ get p2() {
26
+ return this.point2;
27
+ }
28
+ get(t) {
29
+ return this.point1.plus(this.direction.times(t));
30
+ }
31
+ intersection(other) {
32
+ // We want x₁(t) = x₂(t) and y₁(t) = y₂(t)
33
+ // Observe that
34
+ // x = this.point1.x + this.direction.x · t₁
35
+ // = other.point1.x + other.direction.x · t₂
36
+ // Thus,
37
+ // t₁ = (x - this.point1.x) / this.direction.x
38
+ // = (y - this.point1.y) / this.direction.y
39
+ // and
40
+ // t₂ = (x - other.point1.x) / other.direction.x
41
+ // (and similarly for y)
42
+ //
43
+ // Letting o₁ₓ = this.point1.x, o₂ₓ = other.point1.x,
44
+ // d₁ᵧ = this.direction.y, ...
45
+ //
46
+ // We can substitute these into the equations for y:
47
+ // y = o₁ᵧ + d₁ᵧ · (x - o₁ₓ) / d₁ₓ
48
+ // = o₂ᵧ + d₂ᵧ · (x - o₂ₓ) / d₂ₓ
49
+ // ⇒ o₁ᵧ - o₂ᵧ = d₂ᵧ · (x - o₂ₓ) / d₂ₓ - d₁ᵧ · (x - o₁ₓ) / d₁ₓ
50
+ // = (d₂ᵧ/d₂ₓ)(x) - (d₂ᵧ/d₂ₓ)(o₂ₓ) - (d₁ᵧ/d₁ₓ)(x) + (d₁ᵧ/d₁ₓ)(o₁ₓ)
51
+ // = (x)(d₂ᵧ/d₂ₓ - d₁ᵧ/d₁ₓ) - (d₂ᵧ/d₂ₓ)(o₂ₓ) + (d₁ᵧ/d₁ₓ)(o₁ₓ)
52
+ // ⇒ (x)(d₂ᵧ/d₂ₓ - d₁ᵧ/d₁ₓ) = o₁ᵧ - o₂ᵧ + (d₂ᵧ/d₂ₓ)(o₂ₓ) - (d₁ᵧ/d₁ₓ)(o₁ₓ)
53
+ // ⇒ x = (o₁ᵧ - o₂ᵧ + (d₂ᵧ/d₂ₓ)(o₂ₓ) - (d₁ᵧ/d₁ₓ)(o₁ₓ))/(d₂ᵧ/d₂ₓ - d₁ᵧ/d₁ₓ)
54
+ // = (d₁ₓd₂ₓ)(o₁ᵧ - o₂ᵧ + (d₂ᵧ/d₂ₓ)(o₂ₓ) - (d₁ᵧ/d₁ₓ)(o₁ₓ))/(d₂ᵧd₁ₓ - d₁ᵧd₂ₓ)
55
+ // = ((o₁ᵧ - o₂ᵧ)((d₁ₓd₂ₓ)) + (d₂ᵧd₁ₓ)(o₂ₓ) - (d₁ᵧd₂ₓ)(o₁ₓ))/(d₂ᵧd₁ₓ - d₁ᵧd₂ₓ)
56
+ // ⇒ y = o₁ᵧ + d₁ᵧ · (x - o₁ₓ) / d₁ₓ = ...
57
+ let resultPoint, resultT;
58
+ if (this.direction.x === 0) {
59
+ // Vertical line: Where does the other have x = this.point1.x?
60
+ // x = o₁ₓ = o₂ₓ + d₂ₓ · (y - o₂ᵧ) / d₂ᵧ
61
+ // ⇒ (o₁ₓ - o₂ₓ)(d₂ᵧ/d₂ₓ) + o₂ᵧ = y
62
+ // Avoid division by zero
63
+ if (other.direction.x === 0 || this.direction.y === 0) {
64
+ return null;
65
+ }
66
+ const xIntersect = this.point1.x;
67
+ const yIntersect = (this.point1.x - other.point1.x) * other.direction.y / other.direction.x + other.point1.y;
68
+ resultPoint = Vec2_1.Vec2.of(xIntersect, yIntersect);
69
+ resultT = (yIntersect - this.point1.y) / this.direction.y;
70
+ }
71
+ else {
72
+ // From above,
73
+ // x = ((o₁ᵧ - o₂ᵧ)(d₁ₓd₂ₓ) + (d₂ᵧd₁ₓ)(o₂ₓ) - (d₁ᵧd₂ₓ)(o₁ₓ))/(d₂ᵧd₁ₓ - d₁ᵧd₂ₓ)
74
+ const numerator = ((this.point1.y - other.point1.y) * this.direction.x * other.direction.x
75
+ + this.direction.x * other.direction.y * other.point1.x
76
+ - this.direction.y * other.direction.x * this.point1.x);
77
+ const denominator = (other.direction.y * this.direction.x
78
+ - this.direction.y * other.direction.x);
79
+ // Avoid dividing by zero. It means there is no intersection
80
+ if (denominator === 0) {
81
+ return null;
82
+ }
83
+ const xIntersect = numerator / denominator;
84
+ const t1 = (xIntersect - this.point1.x) / this.direction.x;
85
+ const yIntersect = this.point1.y + this.direction.y * t1;
86
+ resultPoint = Vec2_1.Vec2.of(xIntersect, yIntersect);
87
+ resultT = (xIntersect - this.point1.x) / this.direction.x;
88
+ }
89
+ // Ensure the result is in this/the other segment.
90
+ const resultToP1 = resultPoint.minus(this.point1).magnitude();
91
+ const resultToP2 = resultPoint.minus(this.point2).magnitude();
92
+ const resultToP3 = resultPoint.minus(other.point1).magnitude();
93
+ const resultToP4 = resultPoint.minus(other.point2).magnitude();
94
+ if (resultToP1 > this.length
95
+ || resultToP2 > this.length
96
+ || resultToP3 > other.length
97
+ || resultToP4 > other.length) {
98
+ return null;
99
+ }
100
+ return {
101
+ point: resultPoint,
102
+ t: resultT,
103
+ };
104
+ }
105
+ intersects(other) {
106
+ return this.intersection(other) !== null;
107
+ }
108
+ // Returns the closest point on this to [target]
109
+ closestPointTo(target) {
110
+ // Distance from P1 along this' direction.
111
+ const projectedDistFromP1 = target.minus(this.p1).dot(this.direction);
112
+ const projectedDistFromP2 = this.length - projectedDistFromP1;
113
+ const projection = this.p1.plus(this.direction.times(projectedDistFromP1));
114
+ if (projectedDistFromP1 > 0 && projectedDistFromP1 < this.length) {
115
+ return projection;
116
+ }
117
+ if (Math.abs(projectedDistFromP2) < Math.abs(projectedDistFromP1)) {
118
+ return this.p2;
119
+ }
120
+ else {
121
+ return this.p1;
122
+ }
123
+ }
124
+ transformedBy(affineTransfm) {
125
+ return new LineSegment2(affineTransfm.transformVec2(this.p1), affineTransfm.transformVec2(this.p2));
126
+ }
127
+ toString() {
128
+ return `LineSegment(${this.p1.toString()}, ${this.p2.toString()})`;
129
+ }
130
+ }
131
+ exports.default = LineSegment2;