js-draw 0.18.1 → 0.19.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 (485) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/bundle.js +2 -2
  3. package/dist/bundledStyles.js +1 -0
  4. package/dist/cjs/src/Color4.d.ts +69 -0
  5. package/dist/cjs/src/Color4.js +264 -0
  6. package/dist/cjs/src/Editor.d.ts +308 -0
  7. package/dist/cjs/src/Editor.js +904 -0
  8. package/dist/cjs/src/EditorImage.d.ts +97 -0
  9. package/dist/cjs/src/EditorImage.js +486 -0
  10. package/dist/cjs/src/EventDispatcher.d.ts +30 -0
  11. package/dist/cjs/src/EventDispatcher.js +57 -0
  12. package/dist/cjs/src/Pointer.d.ts +24 -0
  13. package/dist/cjs/src/Pointer.js +84 -0
  14. package/dist/cjs/src/SVGLoader.d.ts +48 -0
  15. package/dist/cjs/src/SVGLoader.js +475 -0
  16. package/dist/cjs/src/UndoRedoHistory.d.ts +19 -0
  17. package/dist/cjs/src/UndoRedoHistory.js +93 -0
  18. package/dist/cjs/src/Viewport.d.ts +71 -0
  19. package/dist/cjs/src/Viewport.js +264 -0
  20. package/dist/cjs/src/bundle/bundled.d.ts +4 -0
  21. package/dist/cjs/src/bundle/bundled.js +24 -0
  22. package/dist/cjs/src/commands/Command.d.ts +16 -0
  23. package/dist/cjs/src/commands/Command.js +34 -0
  24. package/dist/cjs/src/commands/Duplicate.d.ts +14 -0
  25. package/dist/cjs/src/commands/Duplicate.js +39 -0
  26. package/dist/cjs/src/commands/Erase.d.ts +14 -0
  27. package/dist/cjs/src/commands/Erase.js +63 -0
  28. package/dist/cjs/src/commands/SerializableCommand.d.ts +12 -0
  29. package/dist/cjs/src/commands/SerializableCommand.js +42 -0
  30. package/dist/cjs/src/commands/UnresolvedCommand.d.ts +14 -0
  31. package/dist/cjs/src/commands/UnresolvedCommand.js +28 -0
  32. package/dist/cjs/src/commands/invertCommand.d.ts +4 -0
  33. package/dist/cjs/src/commands/invertCommand.js +49 -0
  34. package/dist/cjs/src/commands/lib.d.ts +7 -0
  35. package/dist/cjs/src/commands/lib.js +18 -0
  36. package/dist/cjs/src/commands/localization.d.ts +23 -0
  37. package/dist/cjs/src/commands/localization.js +24 -0
  38. package/dist/cjs/src/commands/uniteCommands.d.ts +4 -0
  39. package/dist/cjs/src/commands/uniteCommands.js +121 -0
  40. package/dist/cjs/src/components/AbstractComponent.d.ts +73 -0
  41. package/dist/cjs/src/components/AbstractComponent.js +258 -0
  42. package/dist/cjs/src/components/ImageBackground.d.ts +42 -0
  43. package/dist/cjs/src/components/ImageBackground.js +146 -0
  44. package/dist/cjs/src/components/ImageComponent.d.ts +31 -0
  45. package/dist/cjs/src/components/ImageComponent.js +152 -0
  46. package/dist/cjs/src/components/RestylableComponent.d.ts +43 -0
  47. package/dist/cjs/src/components/RestylableComponent.js +88 -0
  48. package/dist/cjs/src/components/SVGGlobalAttributesObject.d.ts +21 -0
  49. package/dist/cjs/src/components/SVGGlobalAttributesObject.js +65 -0
  50. package/dist/cjs/src/components/Stroke.d.ts +75 -0
  51. package/dist/cjs/src/components/Stroke.js +225 -0
  52. package/dist/cjs/src/components/TextComponent.d.ts +75 -0
  53. package/dist/cjs/src/components/TextComponent.js +280 -0
  54. package/dist/cjs/src/components/UnknownSVGObject.d.ts +18 -0
  55. package/dist/cjs/src/components/UnknownSVGObject.js +50 -0
  56. package/dist/cjs/src/components/builders/ArrowBuilder.d.ts +19 -0
  57. package/dist/cjs/src/components/builders/ArrowBuilder.js +117 -0
  58. package/dist/cjs/src/components/builders/FreehandLineBuilder.d.ts +33 -0
  59. package/dist/cjs/src/components/builders/FreehandLineBuilder.js +173 -0
  60. package/dist/cjs/src/components/builders/LineBuilder.d.ts +18 -0
  61. package/dist/cjs/src/components/builders/LineBuilder.js +89 -0
  62. package/dist/cjs/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +36 -0
  63. package/dist/cjs/src/components/builders/PressureSensitiveFreehandLineBuilder.js +347 -0
  64. package/dist/cjs/src/components/builders/RectangleBuilder.d.ts +20 -0
  65. package/dist/cjs/src/components/builders/RectangleBuilder.js +59 -0
  66. package/dist/cjs/src/components/builders/types.d.ts +12 -0
  67. package/dist/cjs/src/components/builders/types.js +2 -0
  68. package/dist/cjs/src/components/lib.d.ts +13 -0
  69. package/dist/cjs/src/components/lib.js +43 -0
  70. package/dist/cjs/src/components/localization.d.ts +11 -0
  71. package/dist/cjs/src/components/localization.js +13 -0
  72. package/dist/cjs/src/components/util/StrokeSmoother.d.ts +35 -0
  73. package/dist/cjs/src/components/util/StrokeSmoother.js +217 -0
  74. package/dist/cjs/src/components/util/describeComponentList.d.ts +4 -0
  75. package/dist/cjs/src/components/util/describeComponentList.js +16 -0
  76. package/dist/cjs/src/lib.d.ts +64 -0
  77. package/dist/cjs/src/lib.js +93 -0
  78. package/dist/cjs/src/localization.d.ts +14 -0
  79. package/dist/cjs/src/localization.js +13 -0
  80. package/dist/cjs/src/localizations/de.d.ts +3 -0
  81. package/dist/cjs/src/localizations/de.js +6 -0
  82. package/dist/cjs/src/localizations/en.d.ts +3 -0
  83. package/dist/cjs/src/localizations/en.js +6 -0
  84. package/dist/cjs/src/localizations/es.d.ts +3 -0
  85. package/dist/cjs/src/localizations/es.js +20 -0
  86. package/dist/cjs/src/localizations/getLocalizationTable.d.ts +3 -0
  87. package/dist/cjs/src/localizations/getLocalizationTable.js +50 -0
  88. package/dist/cjs/src/math/LineSegment2.d.ts +24 -0
  89. package/dist/cjs/src/math/LineSegment2.js +131 -0
  90. package/dist/cjs/src/math/Mat33.d.ts +118 -0
  91. package/dist/cjs/src/math/Mat33.js +332 -0
  92. package/dist/cjs/src/math/Path.d.ts +71 -0
  93. package/dist/cjs/src/math/Path.js +655 -0
  94. package/dist/cjs/src/math/Rect2.d.ts +52 -0
  95. package/dist/cjs/src/math/Rect2.js +234 -0
  96. package/dist/cjs/src/math/Triangle.d.ts +11 -0
  97. package/dist/cjs/src/math/Triangle.js +22 -0
  98. package/dist/cjs/src/math/Vec2.d.ts +13 -0
  99. package/dist/cjs/src/math/Vec2.js +19 -0
  100. package/dist/cjs/src/math/Vec3.d.ts +106 -0
  101. package/dist/cjs/src/math/Vec3.js +177 -0
  102. package/dist/cjs/src/math/lib.d.ts +7 -0
  103. package/dist/cjs/src/math/lib.js +18 -0
  104. package/dist/cjs/src/math/rounding.d.ts +4 -0
  105. package/dist/cjs/src/math/rounding.js +135 -0
  106. package/dist/cjs/src/rendering/Display.d.ts +75 -0
  107. package/dist/cjs/src/rendering/Display.js +214 -0
  108. package/dist/cjs/src/rendering/RenderingStyle.d.ts +31 -0
  109. package/dist/cjs/src/rendering/RenderingStyle.js +48 -0
  110. package/dist/cjs/src/rendering/TextRenderingStyle.d.ts +36 -0
  111. package/dist/cjs/src/rendering/TextRenderingStyle.js +29 -0
  112. package/dist/cjs/src/rendering/caching/CacheRecord.d.ts +20 -0
  113. package/dist/cjs/src/rendering/caching/CacheRecord.js +61 -0
  114. package/dist/cjs/src/rendering/caching/CacheRecordManager.d.ts +12 -0
  115. package/dist/cjs/src/rendering/caching/CacheRecordManager.js +50 -0
  116. package/dist/cjs/src/rendering/caching/RenderingCache.d.ts +11 -0
  117. package/dist/cjs/src/rendering/caching/RenderingCache.js +51 -0
  118. package/dist/cjs/src/rendering/caching/RenderingCacheNode.d.ts +29 -0
  119. package/dist/cjs/src/rendering/caching/RenderingCacheNode.js +326 -0
  120. package/dist/cjs/src/rendering/caching/testUtils.d.ts +9 -0
  121. package/dist/cjs/src/rendering/caching/testUtils.js +27 -0
  122. package/dist/cjs/src/rendering/caching/types.d.ts +19 -0
  123. package/dist/cjs/src/rendering/caching/types.js +2 -0
  124. package/dist/cjs/src/rendering/lib.d.ts +7 -0
  125. package/dist/cjs/src/rendering/lib.js +17 -0
  126. package/dist/cjs/src/rendering/localization.d.ts +10 -0
  127. package/dist/cjs/src/rendering/localization.js +12 -0
  128. package/dist/cjs/src/rendering/renderers/AbstractRenderer.d.ts +68 -0
  129. package/dist/cjs/src/rendering/renderers/AbstractRenderer.js +170 -0
  130. package/dist/cjs/src/rendering/renderers/CanvasRenderer.d.ts +63 -0
  131. package/dist/cjs/src/rendering/renderers/CanvasRenderer.js +236 -0
  132. package/dist/cjs/src/rendering/renderers/DummyRenderer.d.ts +35 -0
  133. package/dist/cjs/src/rendering/renderers/DummyRenderer.js +112 -0
  134. package/dist/cjs/src/rendering/renderers/SVGRenderer.d.ts +57 -0
  135. package/dist/cjs/src/rendering/renderers/SVGRenderer.js +311 -0
  136. package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.d.ts +29 -0
  137. package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.js +63 -0
  138. package/dist/cjs/src/testing/beforeEachFile.d.ts +1 -0
  139. package/dist/cjs/src/testing/beforeEachFile.js +12 -0
  140. package/dist/cjs/src/testing/createEditor.d.ts +4 -0
  141. package/dist/cjs/src/testing/createEditor.js +14 -0
  142. package/dist/cjs/src/testing/lib.d.ts +2 -0
  143. package/dist/cjs/src/testing/lib.js +10 -0
  144. package/dist/cjs/src/testing/loadExpectExtensions.d.ts +2 -0
  145. package/dist/cjs/src/testing/loadExpectExtensions.js +28 -0
  146. package/dist/cjs/src/testing/sendPenEvent.d.ts +12 -0
  147. package/dist/cjs/src/testing/sendPenEvent.js +24 -0
  148. package/dist/cjs/src/testing/sendTouchEvent.d.ts +42 -0
  149. package/dist/cjs/src/testing/sendTouchEvent.js +87 -0
  150. package/dist/cjs/src/toolbar/HTMLToolbar.d.ts +103 -0
  151. package/dist/cjs/src/toolbar/HTMLToolbar.js +383 -0
  152. package/dist/cjs/src/toolbar/IconProvider.d.ts +62 -0
  153. package/dist/cjs/src/toolbar/IconProvider.js +660 -0
  154. package/dist/cjs/src/toolbar/lib.d.ts +3 -0
  155. package/dist/cjs/src/toolbar/lib.js +24 -0
  156. package/dist/cjs/src/toolbar/localization.d.ts +49 -0
  157. package/dist/cjs/src/toolbar/localization.js +51 -0
  158. package/dist/cjs/src/toolbar/makeColorInput.d.ts +6 -0
  159. package/dist/cjs/src/toolbar/makeColorInput.js +120 -0
  160. package/dist/cjs/src/toolbar/types.d.ts +4 -0
  161. package/dist/cjs/src/toolbar/types.js +2 -0
  162. package/dist/cjs/src/toolbar/widgets/ActionButtonWidget.d.ts +15 -0
  163. package/dist/cjs/src/toolbar/widgets/ActionButtonWidget.js +31 -0
  164. package/dist/cjs/src/toolbar/widgets/BaseToolWidget.d.ts +11 -0
  165. package/dist/cjs/src/toolbar/widgets/BaseToolWidget.js +50 -0
  166. package/dist/cjs/src/toolbar/widgets/BaseWidget.d.ts +72 -0
  167. package/dist/cjs/src/toolbar/widgets/BaseWidget.js +313 -0
  168. package/dist/cjs/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +18 -0
  169. package/dist/cjs/src/toolbar/widgets/DocumentPropertiesWidget.js +126 -0
  170. package/dist/cjs/src/toolbar/widgets/EraserToolWidget.d.ts +17 -0
  171. package/dist/cjs/src/toolbar/widgets/EraserToolWidget.js +63 -0
  172. package/dist/cjs/src/toolbar/widgets/HandToolWidget.d.ts +17 -0
  173. package/dist/cjs/src/toolbar/widgets/HandToolWidget.js +201 -0
  174. package/dist/cjs/src/toolbar/widgets/InsertImageWidget.d.ts +19 -0
  175. package/dist/cjs/src/toolbar/widgets/InsertImageWidget.js +176 -0
  176. package/dist/cjs/src/toolbar/widgets/OverflowWidget.d.ts +25 -0
  177. package/dist/cjs/src/toolbar/widgets/OverflowWidget.js +77 -0
  178. package/dist/cjs/src/toolbar/widgets/PenToolWidget.d.ts +27 -0
  179. package/dist/cjs/src/toolbar/widgets/PenToolWidget.js +226 -0
  180. package/dist/cjs/src/toolbar/widgets/SelectionToolWidget.d.ts +13 -0
  181. package/dist/cjs/src/toolbar/widgets/SelectionToolWidget.js +153 -0
  182. package/dist/cjs/src/toolbar/widgets/TextToolWidget.d.ts +16 -0
  183. package/dist/cjs/src/toolbar/widgets/TextToolWidget.js +115 -0
  184. package/dist/cjs/src/toolbar/widgets/lib.d.ts +10 -0
  185. package/dist/cjs/src/toolbar/widgets/lib.js +26 -0
  186. package/dist/cjs/src/tools/BaseTool.d.ts +22 -0
  187. package/dist/cjs/src/tools/BaseTool.js +66 -0
  188. package/dist/cjs/src/tools/Eraser.d.ts +23 -0
  189. package/dist/cjs/src/tools/Eraser.js +112 -0
  190. package/dist/cjs/src/tools/FindTool.d.ts +21 -0
  191. package/dist/cjs/src/tools/FindTool.js +121 -0
  192. package/dist/cjs/src/tools/PanZoom.d.ts +52 -0
  193. package/dist/cjs/src/tools/PanZoom.js +421 -0
  194. package/dist/cjs/src/tools/PasteHandler.d.ts +23 -0
  195. package/dist/cjs/src/tools/PasteHandler.js +99 -0
  196. package/dist/cjs/src/tools/Pen.d.ts +39 -0
  197. package/dist/cjs/src/tools/Pen.js +179 -0
  198. package/dist/cjs/src/tools/PipetteTool.d.ts +18 -0
  199. package/dist/cjs/src/tools/PipetteTool.js +45 -0
  200. package/dist/cjs/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +8 -0
  201. package/dist/cjs/src/tools/SelectionTool/SelectAllShortcutHandler.js +28 -0
  202. package/dist/cjs/src/tools/SelectionTool/Selection.d.ts +64 -0
  203. package/dist/cjs/src/tools/SelectionTool/Selection.js +488 -0
  204. package/dist/cjs/src/tools/SelectionTool/SelectionHandle.d.ts +38 -0
  205. package/dist/cjs/src/tools/SelectionTool/SelectionHandle.js +85 -0
  206. package/dist/cjs/src/tools/SelectionTool/SelectionTool.d.ts +36 -0
  207. package/dist/cjs/src/tools/SelectionTool/SelectionTool.js +405 -0
  208. package/dist/cjs/src/tools/SelectionTool/TransformMode.d.ts +34 -0
  209. package/dist/cjs/src/tools/SelectionTool/TransformMode.js +107 -0
  210. package/dist/cjs/src/tools/SelectionTool/types.d.ts +9 -0
  211. package/dist/cjs/src/tools/SelectionTool/types.js +14 -0
  212. package/dist/cjs/src/tools/SoundUITool.d.ts +24 -0
  213. package/dist/cjs/src/tools/SoundUITool.js +164 -0
  214. package/dist/cjs/src/tools/TextTool.d.ts +33 -0
  215. package/dist/cjs/src/tools/TextTool.js +262 -0
  216. package/dist/cjs/src/tools/ToolController.d.ts +18 -0
  217. package/dist/cjs/src/tools/ToolController.js +192 -0
  218. package/dist/cjs/src/tools/ToolEnabledGroup.d.ts +6 -0
  219. package/dist/cjs/src/tools/ToolEnabledGroup.js +14 -0
  220. package/dist/cjs/src/tools/ToolSwitcherShortcut.d.ts +16 -0
  221. package/dist/cjs/src/tools/ToolSwitcherShortcut.js +38 -0
  222. package/dist/cjs/src/tools/ToolbarShortcutHandler.d.ts +12 -0
  223. package/dist/cjs/src/tools/ToolbarShortcutHandler.js +29 -0
  224. package/dist/cjs/src/tools/UndoRedoShortcut.d.ts +8 -0
  225. package/dist/cjs/src/tools/UndoRedoShortcut.js +28 -0
  226. package/dist/cjs/src/tools/lib.d.ts +17 -0
  227. package/dist/cjs/src/tools/lib.js +38 -0
  228. package/dist/cjs/src/tools/localization.d.ts +31 -0
  229. package/dist/cjs/src/tools/localization.js +33 -0
  230. package/dist/cjs/src/types.d.ts +151 -0
  231. package/dist/cjs/src/types.js +38 -0
  232. package/dist/cjs/src/util/assertions.d.ts +23 -0
  233. package/dist/cjs/src/util/assertions.js +51 -0
  234. package/dist/cjs/src/util/fileToBase64.d.ts +3 -0
  235. package/dist/cjs/src/util/fileToBase64.js +15 -0
  236. package/dist/cjs/src/util/untilNextAnimationFrame.d.ts +3 -0
  237. package/dist/cjs/src/util/untilNextAnimationFrame.js +9 -0
  238. package/dist/cjs/src/util/waitForTimeout.d.ts +2 -0
  239. package/dist/cjs/src/util/waitForTimeout.js +9 -0
  240. package/dist/mjs/src/Color4.d.ts +69 -0
  241. package/dist/mjs/src/Color4.mjs +257 -0
  242. package/dist/mjs/src/Editor.d.ts +308 -0
  243. package/dist/mjs/src/Editor.mjs +874 -0
  244. package/dist/mjs/src/EditorImage.d.ts +97 -0
  245. package/dist/mjs/src/EditorImage.mjs +477 -0
  246. package/dist/mjs/src/EventDispatcher.d.ts +30 -0
  247. package/dist/mjs/src/EventDispatcher.mjs +54 -0
  248. package/dist/mjs/src/Pointer.d.ts +24 -0
  249. package/dist/mjs/src/Pointer.mjs +80 -0
  250. package/dist/mjs/src/SVGLoader.d.ts +48 -0
  251. package/dist/mjs/src/SVGLoader.mjs +445 -0
  252. package/dist/mjs/src/UndoRedoHistory.d.ts +19 -0
  253. package/dist/mjs/src/UndoRedoHistory.mjs +91 -0
  254. package/dist/mjs/src/Viewport.d.ts +71 -0
  255. package/dist/mjs/src/Viewport.mjs +256 -0
  256. package/dist/mjs/src/bundle/bundled.d.ts +4 -0
  257. package/dist/mjs/src/bundle/bundled.mjs +5 -0
  258. package/dist/mjs/src/commands/Command.d.ts +16 -0
  259. package/dist/mjs/src/commands/Command.mjs +30 -0
  260. package/dist/mjs/src/commands/Duplicate.d.ts +14 -0
  261. package/dist/mjs/src/commands/Duplicate.mjs +33 -0
  262. package/dist/mjs/src/commands/Erase.d.ts +14 -0
  263. package/dist/mjs/src/commands/Erase.mjs +57 -0
  264. package/dist/mjs/src/commands/SerializableCommand.d.ts +12 -0
  265. package/dist/mjs/src/commands/SerializableCommand.mjs +36 -0
  266. package/dist/mjs/src/commands/UnresolvedCommand.d.ts +14 -0
  267. package/dist/mjs/src/commands/UnresolvedCommand.mjs +22 -0
  268. package/dist/mjs/src/commands/invertCommand.d.ts +4 -0
  269. package/dist/mjs/src/commands/invertCommand.mjs +44 -0
  270. package/dist/mjs/src/commands/lib.d.ts +7 -0
  271. package/dist/mjs/src/commands/lib.mjs +7 -0
  272. package/dist/mjs/src/commands/localization.d.ts +23 -0
  273. package/dist/mjs/src/commands/localization.mjs +21 -0
  274. package/dist/mjs/src/commands/uniteCommands.d.ts +4 -0
  275. package/dist/mjs/src/commands/uniteCommands.mjs +116 -0
  276. package/dist/mjs/src/components/AbstractComponent.d.ts +73 -0
  277. package/dist/mjs/src/components/AbstractComponent.mjs +252 -0
  278. package/dist/mjs/src/components/ImageBackground.d.ts +42 -0
  279. package/dist/mjs/src/components/ImageBackground.mjs +139 -0
  280. package/dist/mjs/src/components/ImageComponent.d.ts +31 -0
  281. package/dist/mjs/src/components/ImageComponent.mjs +146 -0
  282. package/dist/mjs/src/components/RestylableComponent.d.ts +43 -0
  283. package/dist/mjs/src/components/RestylableComponent.mjs +80 -0
  284. package/dist/mjs/src/components/SVGGlobalAttributesObject.d.ts +21 -0
  285. package/dist/mjs/src/components/SVGGlobalAttributesObject.mjs +59 -0
  286. package/dist/mjs/src/components/Stroke.d.ts +75 -0
  287. package/dist/mjs/src/components/Stroke.mjs +219 -0
  288. package/dist/mjs/src/components/TextComponent.d.ts +75 -0
  289. package/dist/mjs/src/components/TextComponent.mjs +274 -0
  290. package/dist/mjs/src/components/UnknownSVGObject.d.ts +18 -0
  291. package/dist/mjs/src/components/UnknownSVGObject.mjs +44 -0
  292. package/dist/mjs/src/components/builders/ArrowBuilder.d.ts +19 -0
  293. package/dist/mjs/src/components/builders/ArrowBuilder.mjs +86 -0
  294. package/dist/mjs/src/components/builders/FreehandLineBuilder.d.ts +33 -0
  295. package/dist/mjs/src/components/builders/FreehandLineBuilder.mjs +165 -0
  296. package/dist/mjs/src/components/builders/LineBuilder.d.ts +18 -0
  297. package/dist/mjs/src/components/builders/LineBuilder.mjs +58 -0
  298. package/dist/mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +36 -0
  299. package/dist/mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.mjs +339 -0
  300. package/dist/mjs/src/components/builders/RectangleBuilder.d.ts +20 -0
  301. package/dist/mjs/src/components/builders/RectangleBuilder.mjs +50 -0
  302. package/dist/mjs/src/components/builders/types.d.ts +12 -0
  303. package/dist/mjs/src/components/builders/types.mjs +1 -0
  304. package/dist/mjs/src/components/lib.d.ts +13 -0
  305. package/dist/mjs/src/components/lib.mjs +12 -0
  306. package/dist/mjs/src/components/localization.d.ts +11 -0
  307. package/dist/mjs/src/components/localization.mjs +10 -0
  308. package/dist/mjs/src/components/util/StrokeSmoother.d.ts +35 -0
  309. package/dist/mjs/src/components/util/StrokeSmoother.mjs +210 -0
  310. package/dist/mjs/src/components/util/describeComponentList.d.ts +4 -0
  311. package/dist/mjs/src/components/util/describeComponentList.mjs +14 -0
  312. package/dist/mjs/src/lib.d.ts +64 -0
  313. package/dist/mjs/src/lib.mjs +64 -0
  314. package/dist/mjs/src/localization.d.ts +14 -0
  315. package/dist/mjs/src/localization.mjs +10 -0
  316. package/dist/mjs/src/localizations/de.d.ts +3 -0
  317. package/dist/mjs/src/localizations/de.mjs +4 -0
  318. package/dist/mjs/src/localizations/en.d.ts +3 -0
  319. package/dist/mjs/src/localizations/en.mjs +4 -0
  320. package/dist/mjs/src/localizations/es.d.ts +3 -0
  321. package/dist/mjs/src/localizations/es.mjs +18 -0
  322. package/dist/mjs/src/localizations/getLocalizationTable.d.ts +3 -0
  323. package/dist/mjs/src/localizations/getLocalizationTable.mjs +45 -0
  324. package/dist/mjs/src/math/LineSegment2.d.ts +24 -0
  325. package/dist/mjs/src/math/LineSegment2.mjs +125 -0
  326. package/dist/mjs/src/math/Mat33.d.ts +118 -0
  327. package/dist/mjs/src/math/Mat33.mjs +326 -0
  328. package/dist/mjs/src/math/Path.d.ts +71 -0
  329. package/dist/mjs/src/math/Path.mjs +648 -0
  330. package/dist/mjs/src/math/Rect2.d.ts +52 -0
  331. package/dist/mjs/src/math/Rect2.mjs +228 -0
  332. package/dist/mjs/src/math/Triangle.d.ts +11 -0
  333. package/dist/mjs/src/math/Triangle.mjs +19 -0
  334. package/dist/mjs/src/math/Vec2.d.ts +13 -0
  335. package/dist/mjs/src/math/Vec2.mjs +13 -0
  336. package/dist/mjs/src/math/Vec3.d.ts +106 -0
  337. package/dist/mjs/src/math/Vec3.mjs +174 -0
  338. package/dist/mjs/src/math/lib.d.ts +7 -0
  339. package/dist/mjs/src/math/lib.mjs +7 -0
  340. package/dist/mjs/src/math/rounding.d.ts +4 -0
  341. package/dist/mjs/src/math/rounding.mjs +128 -0
  342. package/dist/mjs/src/rendering/Display.d.ts +75 -0
  343. package/dist/mjs/src/rendering/Display.mjs +207 -0
  344. package/dist/mjs/src/rendering/RenderingStyle.d.ts +31 -0
  345. package/dist/mjs/src/rendering/RenderingStyle.mjs +38 -0
  346. package/dist/mjs/src/rendering/TextRenderingStyle.d.ts +36 -0
  347. package/dist/mjs/src/rendering/TextRenderingStyle.mjs +23 -0
  348. package/dist/mjs/src/rendering/caching/CacheRecord.d.ts +20 -0
  349. package/dist/mjs/src/rendering/caching/CacheRecord.mjs +55 -0
  350. package/dist/mjs/src/rendering/caching/CacheRecordManager.d.ts +12 -0
  351. package/dist/mjs/src/rendering/caching/CacheRecordManager.mjs +43 -0
  352. package/dist/mjs/src/rendering/caching/RenderingCache.d.ts +11 -0
  353. package/dist/mjs/src/rendering/caching/RenderingCache.mjs +45 -0
  354. package/dist/mjs/src/rendering/caching/RenderingCacheNode.d.ts +29 -0
  355. package/dist/mjs/src/rendering/caching/RenderingCacheNode.mjs +320 -0
  356. package/dist/mjs/src/rendering/caching/testUtils.d.ts +9 -0
  357. package/dist/mjs/src/rendering/caching/testUtils.mjs +20 -0
  358. package/dist/mjs/src/rendering/caching/types.d.ts +19 -0
  359. package/dist/mjs/src/rendering/caching/types.mjs +1 -0
  360. package/dist/mjs/src/rendering/lib.d.ts +7 -0
  361. package/dist/mjs/src/rendering/lib.mjs +5 -0
  362. package/dist/mjs/src/rendering/localization.d.ts +10 -0
  363. package/dist/mjs/src/rendering/localization.mjs +9 -0
  364. package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +68 -0
  365. package/dist/mjs/src/rendering/renderers/AbstractRenderer.mjs +144 -0
  366. package/dist/mjs/src/rendering/renderers/CanvasRenderer.d.ts +63 -0
  367. package/dist/mjs/src/rendering/renderers/CanvasRenderer.mjs +230 -0
  368. package/dist/mjs/src/rendering/renderers/DummyRenderer.d.ts +35 -0
  369. package/dist/mjs/src/rendering/renderers/DummyRenderer.mjs +106 -0
  370. package/dist/mjs/src/rendering/renderers/SVGRenderer.d.ts +57 -0
  371. package/dist/mjs/src/rendering/renderers/SVGRenderer.mjs +304 -0
  372. package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.d.ts +29 -0
  373. package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.mjs +57 -0
  374. package/dist/mjs/src/testing/beforeEachFile.d.ts +1 -0
  375. package/dist/mjs/src/testing/beforeEachFile.mjs +7 -0
  376. package/dist/mjs/src/testing/createEditor.d.ts +4 -0
  377. package/dist/mjs/src/testing/createEditor.mjs +9 -0
  378. package/dist/mjs/src/testing/lib.d.ts +2 -0
  379. package/dist/mjs/src/testing/lib.mjs +2 -0
  380. package/dist/mjs/src/testing/loadExpectExtensions.d.ts +2 -0
  381. package/dist/mjs/src/testing/loadExpectExtensions.mjs +24 -0
  382. package/dist/mjs/src/testing/sendPenEvent.d.ts +12 -0
  383. package/dist/mjs/src/testing/sendPenEvent.mjs +19 -0
  384. package/dist/mjs/src/testing/sendTouchEvent.d.ts +42 -0
  385. package/dist/mjs/src/testing/sendTouchEvent.mjs +62 -0
  386. package/dist/mjs/src/toolbar/HTMLToolbar.d.ts +103 -0
  387. package/dist/mjs/src/toolbar/HTMLToolbar.mjs +376 -0
  388. package/dist/mjs/src/toolbar/IconProvider.d.ts +62 -0
  389. package/dist/mjs/src/toolbar/IconProvider.mjs +654 -0
  390. package/dist/mjs/src/toolbar/lib.d.ts +3 -0
  391. package/dist/mjs/src/toolbar/lib.mjs +3 -0
  392. package/dist/mjs/src/toolbar/localization.d.ts +49 -0
  393. package/dist/mjs/src/toolbar/localization.mjs +48 -0
  394. package/dist/mjs/src/toolbar/makeColorInput.d.ts +6 -0
  395. package/dist/mjs/src/toolbar/makeColorInput.mjs +113 -0
  396. package/dist/mjs/src/toolbar/types.d.ts +4 -0
  397. package/dist/mjs/src/toolbar/types.mjs +1 -0
  398. package/dist/mjs/src/toolbar/widgets/ActionButtonWidget.d.ts +15 -0
  399. package/dist/mjs/src/toolbar/widgets/ActionButtonWidget.mjs +25 -0
  400. package/dist/mjs/src/toolbar/widgets/BaseToolWidget.d.ts +11 -0
  401. package/dist/mjs/src/toolbar/widgets/BaseToolWidget.mjs +44 -0
  402. package/dist/mjs/src/toolbar/widgets/BaseWidget.d.ts +72 -0
  403. package/dist/mjs/src/toolbar/widgets/BaseWidget.mjs +307 -0
  404. package/dist/mjs/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +18 -0
  405. package/dist/mjs/src/toolbar/widgets/DocumentPropertiesWidget.mjs +120 -0
  406. package/dist/mjs/src/toolbar/widgets/EraserToolWidget.d.ts +17 -0
  407. package/dist/mjs/src/toolbar/widgets/EraserToolWidget.mjs +57 -0
  408. package/dist/mjs/src/toolbar/widgets/HandToolWidget.d.ts +17 -0
  409. package/dist/mjs/src/toolbar/widgets/HandToolWidget.mjs +172 -0
  410. package/dist/mjs/src/toolbar/widgets/InsertImageWidget.d.ts +19 -0
  411. package/dist/mjs/src/toolbar/widgets/InsertImageWidget.mjs +170 -0
  412. package/dist/mjs/src/toolbar/widgets/OverflowWidget.d.ts +25 -0
  413. package/dist/mjs/src/toolbar/widgets/OverflowWidget.mjs +71 -0
  414. package/dist/mjs/src/toolbar/widgets/PenToolWidget.d.ts +27 -0
  415. package/dist/mjs/src/toolbar/widgets/PenToolWidget.mjs +220 -0
  416. package/dist/mjs/src/toolbar/widgets/SelectionToolWidget.d.ts +13 -0
  417. package/dist/mjs/src/toolbar/widgets/SelectionToolWidget.mjs +147 -0
  418. package/dist/mjs/src/toolbar/widgets/TextToolWidget.d.ts +16 -0
  419. package/dist/mjs/src/toolbar/widgets/TextToolWidget.mjs +109 -0
  420. package/dist/mjs/src/toolbar/widgets/lib.d.ts +10 -0
  421. package/dist/mjs/src/toolbar/widgets/lib.mjs +10 -0
  422. package/dist/mjs/src/tools/BaseTool.d.ts +22 -0
  423. package/dist/mjs/src/tools/BaseTool.mjs +63 -0
  424. package/dist/mjs/src/tools/Eraser.d.ts +23 -0
  425. package/dist/mjs/src/tools/Eraser.mjs +106 -0
  426. package/dist/mjs/src/tools/FindTool.d.ts +21 -0
  427. package/dist/mjs/src/tools/FindTool.mjs +114 -0
  428. package/dist/mjs/src/tools/PanZoom.d.ts +52 -0
  429. package/dist/mjs/src/tools/PanZoom.mjs +414 -0
  430. package/dist/mjs/src/tools/PasteHandler.d.ts +23 -0
  431. package/dist/mjs/src/tools/PasteHandler.mjs +93 -0
  432. package/dist/mjs/src/tools/Pen.d.ts +39 -0
  433. package/dist/mjs/src/tools/Pen.mjs +173 -0
  434. package/dist/mjs/src/tools/PipetteTool.d.ts +18 -0
  435. package/dist/mjs/src/tools/PipetteTool.mjs +39 -0
  436. package/dist/mjs/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +8 -0
  437. package/dist/mjs/src/tools/SelectionTool/SelectAllShortcutHandler.mjs +22 -0
  438. package/dist/mjs/src/tools/SelectionTool/Selection.d.ts +64 -0
  439. package/dist/mjs/src/tools/SelectionTool/Selection.mjs +459 -0
  440. package/dist/mjs/src/tools/SelectionTool/SelectionHandle.d.ts +38 -0
  441. package/dist/mjs/src/tools/SelectionTool/SelectionHandle.mjs +81 -0
  442. package/dist/mjs/src/tools/SelectionTool/SelectionTool.d.ts +36 -0
  443. package/dist/mjs/src/tools/SelectionTool/SelectionTool.mjs +398 -0
  444. package/dist/mjs/src/tools/SelectionTool/TransformMode.d.ts +34 -0
  445. package/dist/mjs/src/tools/SelectionTool/TransformMode.mjs +98 -0
  446. package/dist/mjs/src/tools/SelectionTool/types.d.ts +9 -0
  447. package/dist/mjs/src/tools/SelectionTool/types.mjs +11 -0
  448. package/dist/mjs/src/tools/SoundUITool.d.ts +24 -0
  449. package/dist/mjs/src/tools/SoundUITool.mjs +158 -0
  450. package/dist/mjs/src/tools/TextTool.d.ts +33 -0
  451. package/dist/mjs/src/tools/TextTool.mjs +256 -0
  452. package/dist/mjs/src/tools/ToolController.d.ts +18 -0
  453. package/dist/mjs/src/tools/ToolController.mjs +163 -0
  454. package/dist/mjs/src/tools/ToolEnabledGroup.d.ts +6 -0
  455. package/dist/mjs/src/tools/ToolEnabledGroup.mjs +11 -0
  456. package/dist/mjs/src/tools/ToolSwitcherShortcut.d.ts +16 -0
  457. package/dist/mjs/src/tools/ToolSwitcherShortcut.mjs +32 -0
  458. package/dist/mjs/src/tools/ToolbarShortcutHandler.d.ts +12 -0
  459. package/dist/mjs/src/tools/ToolbarShortcutHandler.mjs +23 -0
  460. package/dist/mjs/src/tools/UndoRedoShortcut.d.ts +8 -0
  461. package/dist/mjs/src/tools/UndoRedoShortcut.mjs +22 -0
  462. package/dist/mjs/src/tools/lib.d.ts +17 -0
  463. package/dist/mjs/src/tools/lib.mjs +17 -0
  464. package/dist/mjs/src/tools/localization.d.ts +31 -0
  465. package/dist/mjs/src/tools/localization.mjs +30 -0
  466. package/dist/mjs/src/types.d.ts +151 -0
  467. package/dist/mjs/src/types.mjs +35 -0
  468. package/dist/mjs/src/util/assertions.d.ts +23 -0
  469. package/dist/mjs/src/util/assertions.mjs +45 -0
  470. package/dist/mjs/src/util/fileToBase64.d.ts +3 -0
  471. package/dist/mjs/src/util/fileToBase64.mjs +13 -0
  472. package/dist/mjs/src/util/untilNextAnimationFrame.d.ts +3 -0
  473. package/dist/mjs/src/util/untilNextAnimationFrame.mjs +7 -0
  474. package/dist/mjs/src/util/waitForTimeout.d.ts +2 -0
  475. package/dist/mjs/src/util/waitForTimeout.mjs +7 -0
  476. package/package.json +6 -4
  477. package/src/Editor.css +86 -0
  478. package/src/styles.js +7 -0
  479. package/src/toolbar/toolbar.css +213 -0
  480. package/src/toolbar/widgets/InsertImageWidget.css +44 -0
  481. package/src/toolbar/widgets/OverflowWidget.css +27 -0
  482. package/src/tools/FindTool.css +7 -0
  483. package/src/tools/SelectionTool/SelectionTool.css +23 -0
  484. package/src/tools/SoundUITool.css +15 -0
  485. package/src/tools/tools.css +4 -0
@@ -0,0 +1,228 @@
1
+ import LineSegment2 from './LineSegment2.mjs';
2
+ import { Vec2 } from './Vec2.mjs';
3
+ // invariant: w ≥ 0, h ≥ 0.
4
+ export default class Rect2 {
5
+ constructor(x, y, w, h) {
6
+ this.x = x;
7
+ this.y = y;
8
+ this.w = w;
9
+ this.h = h;
10
+ if (w < 0) {
11
+ this.x += w;
12
+ this.w = Math.abs(w);
13
+ }
14
+ if (h < 0) {
15
+ this.y += h;
16
+ this.h = Math.abs(h);
17
+ }
18
+ // Precompute/store vector forms.
19
+ this.topLeft = Vec2.of(this.x, this.y);
20
+ this.size = Vec2.of(this.w, this.h);
21
+ this.bottomRight = this.topLeft.plus(this.size);
22
+ this.center = this.topLeft.plus(this.size.times(0.5));
23
+ this.area = this.w * this.h;
24
+ }
25
+ translatedBy(vec) {
26
+ return new Rect2(vec.x + this.x, vec.y + this.y, this.w, this.h);
27
+ }
28
+ // Returns a copy of this with the given size (but same top-left).
29
+ resizedTo(size) {
30
+ return new Rect2(this.x, this.y, size.x, size.y);
31
+ }
32
+ containsPoint(other) {
33
+ return this.x <= other.x && this.y <= other.y
34
+ && this.x + this.w >= other.x && this.y + this.h >= other.y;
35
+ }
36
+ containsRect(other) {
37
+ return this.x <= other.x && this.y <= other.y
38
+ && this.bottomRight.x >= other.bottomRight.x
39
+ && this.bottomRight.y >= other.bottomRight.y;
40
+ }
41
+ intersects(other) {
42
+ // Project along x/y axes.
43
+ const thisMinX = this.x;
44
+ const thisMaxX = thisMinX + this.w;
45
+ const otherMinX = other.x;
46
+ const otherMaxX = other.x + other.w;
47
+ if (thisMaxX < otherMinX || thisMinX > otherMaxX) {
48
+ return false;
49
+ }
50
+ const thisMinY = this.y;
51
+ const thisMaxY = thisMinY + this.h;
52
+ const otherMinY = other.y;
53
+ const otherMaxY = other.y + other.h;
54
+ if (thisMaxY < otherMinY || thisMinY > otherMaxY) {
55
+ return false;
56
+ }
57
+ return true;
58
+ }
59
+ // Returns the overlap of this and [other], or null, if no such
60
+ // overlap exists
61
+ intersection(other) {
62
+ if (!this.intersects(other)) {
63
+ return null;
64
+ }
65
+ const topLeft = this.topLeft.zip(other.topLeft, Math.max);
66
+ const bottomRight = this.bottomRight.zip(other.bottomRight, Math.min);
67
+ return Rect2.fromCorners(topLeft, bottomRight);
68
+ }
69
+ // Returns a new rectangle containing both [this] and [other].
70
+ union(other) {
71
+ const topLeft = this.topLeft.zip(other.topLeft, Math.min);
72
+ const bottomRight = this.bottomRight.zip(other.bottomRight, Math.max);
73
+ return Rect2.fromCorners(topLeft, bottomRight);
74
+ }
75
+ // Returns a the subdivision of this into [columns] columns
76
+ // and [rows] rows. For example,
77
+ // Rect2.unitSquare.divideIntoGrid(2, 2)
78
+ // -> [ Rect2(0, 0, 0.5, 0.5), Rect2(0.5, 0, 0.5, 0.5), Rect2(0, 0.5, 0.5, 0.5), Rect2(0.5, 0.5, 0.5, 0.5) ]
79
+ // The rectangles are ordered in row-major order.
80
+ divideIntoGrid(columns, rows) {
81
+ const result = [];
82
+ if (columns <= 0 || rows <= 0) {
83
+ return result;
84
+ }
85
+ const eachRectWidth = this.w / columns;
86
+ const eachRectHeight = this.h / rows;
87
+ if (eachRectWidth === 0) {
88
+ columns = 1;
89
+ }
90
+ if (eachRectHeight === 0) {
91
+ rows = 1;
92
+ }
93
+ for (let j = 0; j < rows; j++) {
94
+ for (let i = 0; i < columns; i++) {
95
+ const x = eachRectWidth * i + this.x;
96
+ const y = eachRectHeight * j + this.y;
97
+ result.push(new Rect2(x, y, eachRectWidth, eachRectHeight));
98
+ }
99
+ }
100
+ return result;
101
+ }
102
+ // Returns a rectangle containing this and [point].
103
+ // [margin] is the minimum distance between the new point and the edge
104
+ // of the resultant rectangle.
105
+ grownToPoint(point, margin = 0) {
106
+ const otherRect = new Rect2(point.x - margin, point.y - margin, margin * 2, margin * 2);
107
+ return this.union(otherRect);
108
+ }
109
+ // Returns this grown by [margin] in both the x and y directions.
110
+ grownBy(margin) {
111
+ return new Rect2(this.x - margin, this.y - margin, this.w + margin * 2, this.h + margin * 2);
112
+ }
113
+ getClosestPointOnBoundaryTo(target) {
114
+ const closestEdgePoints = this.getEdges().map(edge => {
115
+ return edge.closestPointTo(target);
116
+ });
117
+ let closest = null;
118
+ let closestDist = null;
119
+ for (const point of closestEdgePoints) {
120
+ const dist = point.minus(target).length();
121
+ if (closestDist === null || dist < closestDist) {
122
+ closest = point;
123
+ closestDist = dist;
124
+ }
125
+ }
126
+ return closest;
127
+ }
128
+ get corners() {
129
+ return [
130
+ this.bottomRight,
131
+ this.topRight,
132
+ this.topLeft,
133
+ this.bottomLeft,
134
+ ];
135
+ }
136
+ get maxDimension() {
137
+ return Math.max(this.w, this.h);
138
+ }
139
+ get topRight() {
140
+ return this.bottomRight.plus(Vec2.of(0, -this.h));
141
+ }
142
+ get bottomLeft() {
143
+ return this.topLeft.plus(Vec2.of(0, this.h));
144
+ }
145
+ get width() {
146
+ return this.w;
147
+ }
148
+ get height() {
149
+ return this.h;
150
+ }
151
+ // Returns edges in the order
152
+ // [ rightEdge, topEdge, leftEdge, bottomEdge ]
153
+ getEdges() {
154
+ const corners = this.corners;
155
+ return [
156
+ new LineSegment2(corners[0], corners[1]),
157
+ new LineSegment2(corners[1], corners[2]),
158
+ new LineSegment2(corners[2], corners[3]),
159
+ new LineSegment2(corners[3], corners[0]),
160
+ ];
161
+ }
162
+ // [affineTransform] is a transformation matrix that both scales and **translates**.
163
+ // the bounding box of this' four corners after transformed by the given affine transformation.
164
+ transformedBoundingBox(affineTransform) {
165
+ return Rect2.bboxOf(this.corners.map(corner => affineTransform.transformVec2(corner)));
166
+ }
167
+ /** @return true iff this is equal to [other] ± fuzz */
168
+ eq(other, fuzz = 0) {
169
+ return this.topLeft.eq(other.topLeft, fuzz) && this.size.eq(other.size, fuzz);
170
+ }
171
+ toString() {
172
+ return `Rect(point(${this.x}, ${this.y}), size(${this.w}, ${this.h}))`;
173
+ }
174
+ static fromCorners(corner1, corner2) {
175
+ return new Rect2(Math.min(corner1.x, corner2.x), Math.min(corner1.y, corner2.y), Math.abs(corner1.x - corner2.x), Math.abs(corner1.y - corner2.y));
176
+ }
177
+ // Returns a box that contains all points in [points] with at least [margin]
178
+ // between each point and the edge of the box.
179
+ static bboxOf(points, margin = 0) {
180
+ let minX = 0;
181
+ let minY = 0;
182
+ let maxX = 0;
183
+ let maxY = 0;
184
+ let isFirst = true;
185
+ for (const point of points) {
186
+ if (isFirst) {
187
+ minX = point.x;
188
+ minY = point.y;
189
+ maxX = point.x;
190
+ maxY = point.y;
191
+ isFirst = false;
192
+ }
193
+ minX = Math.min(minX, point.x);
194
+ minY = Math.min(minY, point.y);
195
+ maxX = Math.max(maxX, point.x);
196
+ maxY = Math.max(maxY, point.y);
197
+ }
198
+ return Rect2.fromCorners(Vec2.of(minX - margin, minY - margin), Vec2.of(maxX + margin, maxY + margin));
199
+ }
200
+ // @returns a rectangle that contains all of the given rectangles, the bounding box
201
+ // of the given rectangles.
202
+ static union(...rects) {
203
+ if (rects.length === 0) {
204
+ return Rect2.empty;
205
+ }
206
+ const firstRect = rects[0];
207
+ let minX = firstRect.topLeft.x;
208
+ let minY = firstRect.topLeft.y;
209
+ let maxX = firstRect.bottomRight.x;
210
+ let maxY = firstRect.bottomRight.y;
211
+ for (let i = 1; i < rects.length; i++) {
212
+ const rect = rects[i];
213
+ minX = Math.min(minX, rect.topLeft.x);
214
+ minY = Math.min(minY, rect.topLeft.y);
215
+ maxX = Math.max(maxX, rect.bottomRight.x);
216
+ maxY = Math.max(maxY, rect.bottomRight.y);
217
+ }
218
+ return new Rect2(minX, minY, maxX - minX, maxY - minY);
219
+ }
220
+ static of(template) {
221
+ var _a, _b, _c, _d;
222
+ const width = (_b = (_a = template.width) !== null && _a !== void 0 ? _a : template.w) !== null && _b !== void 0 ? _b : 0;
223
+ const height = (_d = (_c = template.height) !== null && _c !== void 0 ? _c : template.h) !== null && _d !== void 0 ? _d : 0;
224
+ return new Rect2(template.x, template.y, width, height);
225
+ }
226
+ }
227
+ Rect2.empty = new Rect2(0, 0, 0, 0);
228
+ Rect2.unitSquare = new Rect2(0, 0, 1, 1);
@@ -0,0 +1,11 @@
1
+ import Mat33 from './Mat33';
2
+ import Vec3 from './Vec3';
3
+ export default class Triangle {
4
+ readonly vertex1: Vec3;
5
+ readonly vertex2: Vec3;
6
+ readonly vertex3: Vec3;
7
+ constructor(vertex1: Vec3, vertex2: Vec3, vertex3: Vec3);
8
+ map(mapping: (vertex: Vec3) => Vec3): Triangle;
9
+ transformed2DBy(affineTransform: Mat33): Triangle;
10
+ transformedBy(linearTransform: Mat33): Triangle;
11
+ }
@@ -0,0 +1,19 @@
1
+ export default class Triangle {
2
+ constructor(vertex1, vertex2, vertex3) {
3
+ this.vertex1 = vertex1;
4
+ this.vertex2 = vertex2;
5
+ this.vertex3 = vertex3;
6
+ }
7
+ map(mapping) {
8
+ return new Triangle(mapping(this.vertex1), mapping(this.vertex2), mapping(this.vertex3));
9
+ }
10
+ // Transform, treating this as composed of 2D points.
11
+ transformed2DBy(affineTransform) {
12
+ return this.map(affineTransform.transformVec2);
13
+ }
14
+ // Transforms this by a linear transform --- verticies are treated as
15
+ // 3D points.
16
+ transformedBy(linearTransform) {
17
+ return this.map(linearTransform.transformVec3);
18
+ }
19
+ }
@@ -0,0 +1,13 @@
1
+ import Vec3 from './Vec3';
2
+ export declare namespace Vec2 {
3
+ const of: (x: number, y: number) => Vec2;
4
+ const ofXY: ({ x, y }: {
5
+ x: number;
6
+ y: number;
7
+ }) => Vec2;
8
+ const unitX: Vec3;
9
+ const unitY: Vec3;
10
+ const zero: Vec3;
11
+ }
12
+ export type Point2 = Vec3;
13
+ export type Vec2 = Vec3;
@@ -0,0 +1,13 @@
1
+ import Vec3 from './Vec3.mjs';
2
+ export var Vec2;
3
+ (function (Vec2) {
4
+ Vec2.of = (x, y) => {
5
+ return Vec3.of(x, y, 0);
6
+ };
7
+ Vec2.ofXY = ({ x, y }) => {
8
+ return Vec3.of(x, y, 0);
9
+ };
10
+ Vec2.unitX = Vec2.of(1, 0);
11
+ Vec2.unitY = Vec2.of(0, 1);
12
+ Vec2.zero = Vec2.of(0, 0);
13
+ })(Vec2 || (Vec2 = {}));
@@ -0,0 +1,106 @@
1
+ /**
2
+ * A vector with three components. Can also be used to represent a two-component vector.
3
+ *
4
+ * A `Vec3` is immutable.
5
+ */
6
+ export default class Vec3 {
7
+ readonly x: number;
8
+ readonly y: number;
9
+ readonly z: number;
10
+ private constructor();
11
+ /** Returns the x, y components of this. */
12
+ get xy(): {
13
+ x: number;
14
+ y: number;
15
+ };
16
+ static of(x: number, y: number, z: number): Vec3;
17
+ /** Returns this' `idx`th component. For example, `Vec3.of(1, 2, 3).at(1) → 2`. */
18
+ at(idx: number): number;
19
+ /** Alias for this.magnitude. */
20
+ length(): number;
21
+ magnitude(): number;
22
+ magnitudeSquared(): number;
23
+ /**
24
+ * Return this' angle in the XY plane (treats this as a Vec2).
25
+ *
26
+ * This is equivalent to `Math.atan2(vec.y, vec.x)`.
27
+ */
28
+ angle(): number;
29
+ /**
30
+ * Returns a unit vector in the same direction as this.
31
+ *
32
+ * If `this` has zero length, the resultant vector has `NaN` components.
33
+ */
34
+ normalized(): Vec3;
35
+ /** @returns A copy of `this` multiplied by a scalar. */
36
+ times(c: number): Vec3;
37
+ plus(v: Vec3): Vec3;
38
+ minus(v: Vec3): Vec3;
39
+ dot(other: Vec3): number;
40
+ cross(other: Vec3): Vec3;
41
+ /**
42
+ * If `other` is a `Vec3`, multiplies `this` component-wise by `other`. Otherwise,
43
+ * if `other is a `number`, returns the result of scalar multiplication.
44
+ *
45
+ * @example
46
+ * ```
47
+ * Vec3.of(1, 2, 3).scale(Vec3.of(2, 4, 6)); // → Vec3(2, 8, 18)
48
+ * ```
49
+ */
50
+ scale(other: Vec3 | number): Vec3;
51
+ /**
52
+ * Returns a vector orthogonal to this. If this is a Vec2, returns `this` rotated
53
+ * 90 degrees counter-clockwise.
54
+ */
55
+ orthog(): Vec3;
56
+ /** Returns this plus a vector of length `distance` in `direction`. */
57
+ extend(distance: number, direction: Vec3): Vec3;
58
+ /** Returns a vector `fractionTo` of the way to target from this. */
59
+ lerp(target: Vec3, fractionTo: number): Vec3;
60
+ /**
61
+ * `zip` Maps a component of this and a corresponding component of
62
+ * `other` to a component of the output vector.
63
+ *
64
+ * @example
65
+ * ```
66
+ * const a = Vec3.of(1, 2, 3);
67
+ * const b = Vec3.of(0.5, 2.1, 2.9);
68
+ *
69
+ * const zipped = a.zip(b, (aComponent, bComponent) => {
70
+ * return Math.min(aComponent, bComponent);
71
+ * });
72
+ *
73
+ * console.log(zipped.toString()); // → Vec(0.5, 2, 2.9)
74
+ * ```
75
+ */
76
+ zip(other: Vec3, zip: (componentInThis: number, componentInOther: number) => number): Vec3;
77
+ /**
78
+ * Returns a vector with each component acted on by `fn`.
79
+ *
80
+ * @example
81
+ * ```
82
+ * console.log(Vec3.of(1, 2, 3).map(val => val + 1)); // → Vec(2, 3, 4)
83
+ * ```
84
+ */
85
+ map(fn: (component: number, index: number) => number): Vec3;
86
+ asArray(): [number, number, number];
87
+ /**
88
+ * [fuzz] The maximum difference between two components for this and [other]
89
+ * to be considered equal.
90
+ *
91
+ * @example
92
+ * ```
93
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 100); // → true
94
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 0.1); // → false
95
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 3); // → true
96
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 3.01); // → true
97
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 2.99); // → false
98
+ * ```
99
+ */
100
+ eq(other: Vec3, fuzz?: number): boolean;
101
+ toString(): string;
102
+ static unitX: Vec3;
103
+ static unitY: Vec3;
104
+ static unitZ: Vec3;
105
+ static zero: Vec3;
106
+ }
@@ -0,0 +1,174 @@
1
+ /**
2
+ * A vector with three components. Can also be used to represent a two-component vector.
3
+ *
4
+ * A `Vec3` is immutable.
5
+ */
6
+ export default class Vec3 {
7
+ constructor(x, y, z) {
8
+ this.x = x;
9
+ this.y = y;
10
+ this.z = z;
11
+ }
12
+ /** Returns the x, y components of this. */
13
+ get xy() {
14
+ // Useful for APIs that behave differently if .z is present.
15
+ return {
16
+ x: this.x,
17
+ y: this.y,
18
+ };
19
+ }
20
+ static of(x, y, z) {
21
+ return new Vec3(x, y, z);
22
+ }
23
+ /** Returns this' `idx`th component. For example, `Vec3.of(1, 2, 3).at(1) → 2`. */
24
+ at(idx) {
25
+ if (idx === 0)
26
+ return this.x;
27
+ if (idx === 1)
28
+ return this.y;
29
+ if (idx === 2)
30
+ return this.z;
31
+ throw new Error(`${idx} out of bounds!`);
32
+ }
33
+ /** Alias for this.magnitude. */
34
+ length() {
35
+ return this.magnitude();
36
+ }
37
+ magnitude() {
38
+ return Math.sqrt(this.dot(this));
39
+ }
40
+ magnitudeSquared() {
41
+ return this.dot(this);
42
+ }
43
+ /**
44
+ * Return this' angle in the XY plane (treats this as a Vec2).
45
+ *
46
+ * This is equivalent to `Math.atan2(vec.y, vec.x)`.
47
+ */
48
+ angle() {
49
+ return Math.atan2(this.y, this.x);
50
+ }
51
+ /**
52
+ * Returns a unit vector in the same direction as this.
53
+ *
54
+ * If `this` has zero length, the resultant vector has `NaN` components.
55
+ */
56
+ normalized() {
57
+ const norm = this.magnitude();
58
+ return Vec3.of(this.x / norm, this.y / norm, this.z / norm);
59
+ }
60
+ /** @returns A copy of `this` multiplied by a scalar. */
61
+ times(c) {
62
+ return Vec3.of(this.x * c, this.y * c, this.z * c);
63
+ }
64
+ plus(v) {
65
+ return Vec3.of(this.x + v.x, this.y + v.y, this.z + v.z);
66
+ }
67
+ minus(v) {
68
+ return Vec3.of(this.x - v.x, this.y - v.y, this.z - v.z);
69
+ }
70
+ dot(other) {
71
+ return this.x * other.x + this.y * other.y + this.z * other.z;
72
+ }
73
+ cross(other) {
74
+ // | i j k |
75
+ // | x1 y1 z1| = (i)(y1z2 - y2z1) - (j)(x1z2 - x2z1) + (k)(x1y2 - x2y1)
76
+ // | x2 y2 z2|
77
+ return Vec3.of(this.y * other.z - other.y * this.z, other.x * this.z - this.x * other.z, this.x * other.y - other.x * this.y);
78
+ }
79
+ /**
80
+ * If `other` is a `Vec3`, multiplies `this` component-wise by `other`. Otherwise,
81
+ * if `other is a `number`, returns the result of scalar multiplication.
82
+ *
83
+ * @example
84
+ * ```
85
+ * Vec3.of(1, 2, 3).scale(Vec3.of(2, 4, 6)); // → Vec3(2, 8, 18)
86
+ * ```
87
+ */
88
+ scale(other) {
89
+ if (typeof other === 'number') {
90
+ return this.times(other);
91
+ }
92
+ return Vec3.of(this.x * other.x, this.y * other.y, this.z * other.z);
93
+ }
94
+ /**
95
+ * Returns a vector orthogonal to this. If this is a Vec2, returns `this` rotated
96
+ * 90 degrees counter-clockwise.
97
+ */
98
+ orthog() {
99
+ // If parallel to the z-axis
100
+ if (this.dot(Vec3.unitX) === 0 && this.dot(Vec3.unitY) === 0) {
101
+ return this.dot(Vec3.unitX) === 0 ? Vec3.unitX : this.cross(Vec3.unitX).normalized();
102
+ }
103
+ return this.cross(Vec3.unitZ.times(-1)).normalized();
104
+ }
105
+ /** Returns this plus a vector of length `distance` in `direction`. */
106
+ extend(distance, direction) {
107
+ return this.plus(direction.normalized().times(distance));
108
+ }
109
+ /** Returns a vector `fractionTo` of the way to target from this. */
110
+ lerp(target, fractionTo) {
111
+ return this.times(1 - fractionTo).plus(target.times(fractionTo));
112
+ }
113
+ /**
114
+ * `zip` Maps a component of this and a corresponding component of
115
+ * `other` to a component of the output vector.
116
+ *
117
+ * @example
118
+ * ```
119
+ * const a = Vec3.of(1, 2, 3);
120
+ * const b = Vec3.of(0.5, 2.1, 2.9);
121
+ *
122
+ * const zipped = a.zip(b, (aComponent, bComponent) => {
123
+ * return Math.min(aComponent, bComponent);
124
+ * });
125
+ *
126
+ * console.log(zipped.toString()); // → Vec(0.5, 2, 2.9)
127
+ * ```
128
+ */
129
+ zip(other, zip) {
130
+ return Vec3.of(zip(other.x, this.x), zip(other.y, this.y), zip(other.z, this.z));
131
+ }
132
+ /**
133
+ * Returns a vector with each component acted on by `fn`.
134
+ *
135
+ * @example
136
+ * ```
137
+ * console.log(Vec3.of(1, 2, 3).map(val => val + 1)); // → Vec(2, 3, 4)
138
+ * ```
139
+ */
140
+ map(fn) {
141
+ return Vec3.of(fn(this.x, 0), fn(this.y, 1), fn(this.z, 2));
142
+ }
143
+ asArray() {
144
+ return [this.x, this.y, this.z];
145
+ }
146
+ /**
147
+ * [fuzz] The maximum difference between two components for this and [other]
148
+ * to be considered equal.
149
+ *
150
+ * @example
151
+ * ```
152
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 100); // → true
153
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 0.1); // → false
154
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 3); // → true
155
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 3.01); // → true
156
+ * Vec3.of(1, 2, 3).eq(Vec3.of(4, 5, 6), 2.99); // → false
157
+ * ```
158
+ */
159
+ eq(other, fuzz = 1e-10) {
160
+ for (let i = 0; i < 3; i++) {
161
+ if (Math.abs(other.at(i) - this.at(i)) > fuzz) {
162
+ return false;
163
+ }
164
+ }
165
+ return true;
166
+ }
167
+ toString() {
168
+ return `Vec(${this.x}, ${this.y}, ${this.z})`;
169
+ }
170
+ }
171
+ Vec3.unitX = Vec3.of(1, 0, 0);
172
+ Vec3.unitY = Vec3.of(0, 1, 0);
173
+ Vec3.unitZ = Vec3.of(0, 0, 1);
174
+ Vec3.zero = Vec3.of(0, 0, 0);
@@ -0,0 +1,7 @@
1
+ import LineSegment2 from './LineSegment2';
2
+ import Mat33 from './Mat33';
3
+ import Path from './Path';
4
+ import Rect2 from './Rect2';
5
+ import { Vec2 } from './Vec2';
6
+ import Vec3 from './Vec3';
7
+ export { LineSegment2, Mat33, Path, Rect2, Vec3, Vec2, };
@@ -0,0 +1,7 @@
1
+ import LineSegment2 from './LineSegment2.mjs';
2
+ import Mat33 from './Mat33.mjs';
3
+ import Path from './Path.mjs';
4
+ import Rect2 from './Rect2.mjs';
5
+ import { Vec2 } from './Vec2.mjs';
6
+ import Vec3 from './Vec3.mjs';
7
+ export { LineSegment2, Mat33, Path, Rect2, Vec3, Vec2, };
@@ -0,0 +1,4 @@
1
+ export declare const cleanUpNumber: (text: string) => string;
2
+ export declare const toRoundedString: (num: number) => string;
3
+ export declare const getLenAfterDecimal: (numberAsString: string) => number;
4
+ export declare const toStringOfSamePrecision: (num: number, ...references: string[]) => string;