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.
- package/CHANGELOG.md +10 -0
- package/dist/bundle.js +2 -2
- package/dist/bundledStyles.js +1 -0
- package/dist/cjs/src/Color4.d.ts +69 -0
- package/dist/cjs/src/Color4.js +264 -0
- package/dist/cjs/src/Editor.d.ts +308 -0
- package/dist/cjs/src/Editor.js +904 -0
- package/dist/cjs/src/EditorImage.d.ts +97 -0
- package/dist/cjs/src/EditorImage.js +486 -0
- package/dist/cjs/src/EventDispatcher.d.ts +30 -0
- package/dist/cjs/src/EventDispatcher.js +57 -0
- package/dist/cjs/src/Pointer.d.ts +24 -0
- package/dist/cjs/src/Pointer.js +84 -0
- package/dist/cjs/src/SVGLoader.d.ts +48 -0
- package/dist/cjs/src/SVGLoader.js +475 -0
- package/dist/cjs/src/UndoRedoHistory.d.ts +19 -0
- package/dist/cjs/src/UndoRedoHistory.js +93 -0
- package/dist/cjs/src/Viewport.d.ts +71 -0
- package/dist/cjs/src/Viewport.js +264 -0
- package/dist/cjs/src/bundle/bundled.d.ts +4 -0
- package/dist/cjs/src/bundle/bundled.js +24 -0
- package/dist/cjs/src/commands/Command.d.ts +16 -0
- package/dist/cjs/src/commands/Command.js +34 -0
- package/dist/cjs/src/commands/Duplicate.d.ts +14 -0
- package/dist/cjs/src/commands/Duplicate.js +39 -0
- package/dist/cjs/src/commands/Erase.d.ts +14 -0
- package/dist/cjs/src/commands/Erase.js +63 -0
- package/dist/cjs/src/commands/SerializableCommand.d.ts +12 -0
- package/dist/cjs/src/commands/SerializableCommand.js +42 -0
- package/dist/cjs/src/commands/UnresolvedCommand.d.ts +14 -0
- package/dist/cjs/src/commands/UnresolvedCommand.js +28 -0
- package/dist/cjs/src/commands/invertCommand.d.ts +4 -0
- package/dist/cjs/src/commands/invertCommand.js +49 -0
- package/dist/cjs/src/commands/lib.d.ts +7 -0
- package/dist/cjs/src/commands/lib.js +18 -0
- package/dist/cjs/src/commands/localization.d.ts +23 -0
- package/dist/cjs/src/commands/localization.js +24 -0
- package/dist/cjs/src/commands/uniteCommands.d.ts +4 -0
- package/dist/cjs/src/commands/uniteCommands.js +121 -0
- package/dist/cjs/src/components/AbstractComponent.d.ts +73 -0
- package/dist/cjs/src/components/AbstractComponent.js +258 -0
- package/dist/cjs/src/components/ImageBackground.d.ts +42 -0
- package/dist/cjs/src/components/ImageBackground.js +146 -0
- package/dist/cjs/src/components/ImageComponent.d.ts +31 -0
- package/dist/cjs/src/components/ImageComponent.js +152 -0
- package/dist/cjs/src/components/RestylableComponent.d.ts +43 -0
- package/dist/cjs/src/components/RestylableComponent.js +88 -0
- package/dist/cjs/src/components/SVGGlobalAttributesObject.d.ts +21 -0
- package/dist/cjs/src/components/SVGGlobalAttributesObject.js +65 -0
- package/dist/cjs/src/components/Stroke.d.ts +75 -0
- package/dist/cjs/src/components/Stroke.js +225 -0
- package/dist/cjs/src/components/TextComponent.d.ts +75 -0
- package/dist/cjs/src/components/TextComponent.js +280 -0
- package/dist/cjs/src/components/UnknownSVGObject.d.ts +18 -0
- package/dist/cjs/src/components/UnknownSVGObject.js +50 -0
- package/dist/cjs/src/components/builders/ArrowBuilder.d.ts +19 -0
- package/dist/cjs/src/components/builders/ArrowBuilder.js +117 -0
- package/dist/cjs/src/components/builders/FreehandLineBuilder.d.ts +33 -0
- package/dist/cjs/src/components/builders/FreehandLineBuilder.js +173 -0
- package/dist/cjs/src/components/builders/LineBuilder.d.ts +18 -0
- package/dist/cjs/src/components/builders/LineBuilder.js +89 -0
- package/dist/cjs/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +36 -0
- package/dist/cjs/src/components/builders/PressureSensitiveFreehandLineBuilder.js +347 -0
- package/dist/cjs/src/components/builders/RectangleBuilder.d.ts +20 -0
- package/dist/cjs/src/components/builders/RectangleBuilder.js +59 -0
- package/dist/cjs/src/components/builders/types.d.ts +12 -0
- package/dist/cjs/src/components/builders/types.js +2 -0
- package/dist/cjs/src/components/lib.d.ts +13 -0
- package/dist/cjs/src/components/lib.js +43 -0
- package/dist/cjs/src/components/localization.d.ts +11 -0
- package/dist/cjs/src/components/localization.js +13 -0
- package/dist/cjs/src/components/util/StrokeSmoother.d.ts +35 -0
- package/dist/cjs/src/components/util/StrokeSmoother.js +217 -0
- package/dist/cjs/src/components/util/describeComponentList.d.ts +4 -0
- package/dist/cjs/src/components/util/describeComponentList.js +16 -0
- package/dist/cjs/src/lib.d.ts +64 -0
- package/dist/cjs/src/lib.js +93 -0
- package/dist/cjs/src/localization.d.ts +14 -0
- package/dist/cjs/src/localization.js +13 -0
- package/dist/cjs/src/localizations/de.d.ts +3 -0
- package/dist/cjs/src/localizations/de.js +6 -0
- package/dist/cjs/src/localizations/en.d.ts +3 -0
- package/dist/cjs/src/localizations/en.js +6 -0
- package/dist/cjs/src/localizations/es.d.ts +3 -0
- package/dist/cjs/src/localizations/es.js +20 -0
- package/dist/cjs/src/localizations/getLocalizationTable.d.ts +3 -0
- package/dist/cjs/src/localizations/getLocalizationTable.js +50 -0
- package/dist/cjs/src/math/LineSegment2.d.ts +24 -0
- package/dist/cjs/src/math/LineSegment2.js +131 -0
- package/dist/cjs/src/math/Mat33.d.ts +118 -0
- package/dist/cjs/src/math/Mat33.js +332 -0
- package/dist/cjs/src/math/Path.d.ts +71 -0
- package/dist/cjs/src/math/Path.js +655 -0
- package/dist/cjs/src/math/Rect2.d.ts +52 -0
- package/dist/cjs/src/math/Rect2.js +234 -0
- package/dist/cjs/src/math/Triangle.d.ts +11 -0
- package/dist/cjs/src/math/Triangle.js +22 -0
- package/dist/cjs/src/math/Vec2.d.ts +13 -0
- package/dist/cjs/src/math/Vec2.js +19 -0
- package/dist/cjs/src/math/Vec3.d.ts +106 -0
- package/dist/cjs/src/math/Vec3.js +177 -0
- package/dist/cjs/src/math/lib.d.ts +7 -0
- package/dist/cjs/src/math/lib.js +18 -0
- package/dist/cjs/src/math/rounding.d.ts +4 -0
- package/dist/cjs/src/math/rounding.js +135 -0
- package/dist/cjs/src/rendering/Display.d.ts +75 -0
- package/dist/cjs/src/rendering/Display.js +214 -0
- package/dist/cjs/src/rendering/RenderingStyle.d.ts +31 -0
- package/dist/cjs/src/rendering/RenderingStyle.js +48 -0
- package/dist/cjs/src/rendering/TextRenderingStyle.d.ts +36 -0
- package/dist/cjs/src/rendering/TextRenderingStyle.js +29 -0
- package/dist/cjs/src/rendering/caching/CacheRecord.d.ts +20 -0
- package/dist/cjs/src/rendering/caching/CacheRecord.js +61 -0
- package/dist/cjs/src/rendering/caching/CacheRecordManager.d.ts +12 -0
- package/dist/cjs/src/rendering/caching/CacheRecordManager.js +50 -0
- package/dist/cjs/src/rendering/caching/RenderingCache.d.ts +11 -0
- package/dist/cjs/src/rendering/caching/RenderingCache.js +51 -0
- package/dist/cjs/src/rendering/caching/RenderingCacheNode.d.ts +29 -0
- package/dist/cjs/src/rendering/caching/RenderingCacheNode.js +326 -0
- package/dist/cjs/src/rendering/caching/testUtils.d.ts +9 -0
- package/dist/cjs/src/rendering/caching/testUtils.js +27 -0
- package/dist/cjs/src/rendering/caching/types.d.ts +19 -0
- package/dist/cjs/src/rendering/caching/types.js +2 -0
- package/dist/cjs/src/rendering/lib.d.ts +7 -0
- package/dist/cjs/src/rendering/lib.js +17 -0
- package/dist/cjs/src/rendering/localization.d.ts +10 -0
- package/dist/cjs/src/rendering/localization.js +12 -0
- package/dist/cjs/src/rendering/renderers/AbstractRenderer.d.ts +68 -0
- package/dist/cjs/src/rendering/renderers/AbstractRenderer.js +170 -0
- package/dist/cjs/src/rendering/renderers/CanvasRenderer.d.ts +63 -0
- package/dist/cjs/src/rendering/renderers/CanvasRenderer.js +236 -0
- package/dist/cjs/src/rendering/renderers/DummyRenderer.d.ts +35 -0
- package/dist/cjs/src/rendering/renderers/DummyRenderer.js +112 -0
- package/dist/cjs/src/rendering/renderers/SVGRenderer.d.ts +57 -0
- package/dist/cjs/src/rendering/renderers/SVGRenderer.js +311 -0
- package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.d.ts +29 -0
- package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.js +63 -0
- package/dist/cjs/src/testing/beforeEachFile.d.ts +1 -0
- package/dist/cjs/src/testing/beforeEachFile.js +12 -0
- package/dist/cjs/src/testing/createEditor.d.ts +4 -0
- package/dist/cjs/src/testing/createEditor.js +14 -0
- package/dist/cjs/src/testing/lib.d.ts +2 -0
- package/dist/cjs/src/testing/lib.js +10 -0
- package/dist/cjs/src/testing/loadExpectExtensions.d.ts +2 -0
- package/dist/cjs/src/testing/loadExpectExtensions.js +28 -0
- package/dist/cjs/src/testing/sendPenEvent.d.ts +12 -0
- package/dist/cjs/src/testing/sendPenEvent.js +24 -0
- package/dist/cjs/src/testing/sendTouchEvent.d.ts +42 -0
- package/dist/cjs/src/testing/sendTouchEvent.js +87 -0
- package/dist/cjs/src/toolbar/HTMLToolbar.d.ts +103 -0
- package/dist/cjs/src/toolbar/HTMLToolbar.js +383 -0
- package/dist/cjs/src/toolbar/IconProvider.d.ts +62 -0
- package/dist/cjs/src/toolbar/IconProvider.js +660 -0
- package/dist/cjs/src/toolbar/lib.d.ts +3 -0
- package/dist/cjs/src/toolbar/lib.js +24 -0
- package/dist/cjs/src/toolbar/localization.d.ts +49 -0
- package/dist/cjs/src/toolbar/localization.js +51 -0
- package/dist/cjs/src/toolbar/makeColorInput.d.ts +6 -0
- package/dist/cjs/src/toolbar/makeColorInput.js +120 -0
- package/dist/cjs/src/toolbar/types.d.ts +4 -0
- package/dist/cjs/src/toolbar/types.js +2 -0
- package/dist/cjs/src/toolbar/widgets/ActionButtonWidget.d.ts +15 -0
- package/dist/cjs/src/toolbar/widgets/ActionButtonWidget.js +31 -0
- package/dist/cjs/src/toolbar/widgets/BaseToolWidget.d.ts +11 -0
- package/dist/cjs/src/toolbar/widgets/BaseToolWidget.js +50 -0
- package/dist/cjs/src/toolbar/widgets/BaseWidget.d.ts +72 -0
- package/dist/cjs/src/toolbar/widgets/BaseWidget.js +313 -0
- package/dist/cjs/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +18 -0
- package/dist/cjs/src/toolbar/widgets/DocumentPropertiesWidget.js +126 -0
- package/dist/cjs/src/toolbar/widgets/EraserToolWidget.d.ts +17 -0
- package/dist/cjs/src/toolbar/widgets/EraserToolWidget.js +63 -0
- package/dist/cjs/src/toolbar/widgets/HandToolWidget.d.ts +17 -0
- package/dist/cjs/src/toolbar/widgets/HandToolWidget.js +201 -0
- package/dist/cjs/src/toolbar/widgets/InsertImageWidget.d.ts +19 -0
- package/dist/cjs/src/toolbar/widgets/InsertImageWidget.js +176 -0
- package/dist/cjs/src/toolbar/widgets/OverflowWidget.d.ts +25 -0
- package/dist/cjs/src/toolbar/widgets/OverflowWidget.js +77 -0
- package/dist/cjs/src/toolbar/widgets/PenToolWidget.d.ts +27 -0
- package/dist/cjs/src/toolbar/widgets/PenToolWidget.js +226 -0
- package/dist/cjs/src/toolbar/widgets/SelectionToolWidget.d.ts +13 -0
- package/dist/cjs/src/toolbar/widgets/SelectionToolWidget.js +153 -0
- package/dist/cjs/src/toolbar/widgets/TextToolWidget.d.ts +16 -0
- package/dist/cjs/src/toolbar/widgets/TextToolWidget.js +115 -0
- package/dist/cjs/src/toolbar/widgets/lib.d.ts +10 -0
- package/dist/cjs/src/toolbar/widgets/lib.js +26 -0
- package/dist/cjs/src/tools/BaseTool.d.ts +22 -0
- package/dist/cjs/src/tools/BaseTool.js +66 -0
- package/dist/cjs/src/tools/Eraser.d.ts +23 -0
- package/dist/cjs/src/tools/Eraser.js +112 -0
- package/dist/cjs/src/tools/FindTool.d.ts +21 -0
- package/dist/cjs/src/tools/FindTool.js +121 -0
- package/dist/cjs/src/tools/PanZoom.d.ts +52 -0
- package/dist/cjs/src/tools/PanZoom.js +421 -0
- package/dist/cjs/src/tools/PasteHandler.d.ts +23 -0
- package/dist/cjs/src/tools/PasteHandler.js +99 -0
- package/dist/cjs/src/tools/Pen.d.ts +39 -0
- package/dist/cjs/src/tools/Pen.js +179 -0
- package/dist/cjs/src/tools/PipetteTool.d.ts +18 -0
- package/dist/cjs/src/tools/PipetteTool.js +45 -0
- package/dist/cjs/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +8 -0
- package/dist/cjs/src/tools/SelectionTool/SelectAllShortcutHandler.js +28 -0
- package/dist/cjs/src/tools/SelectionTool/Selection.d.ts +64 -0
- package/dist/cjs/src/tools/SelectionTool/Selection.js +488 -0
- package/dist/cjs/src/tools/SelectionTool/SelectionHandle.d.ts +38 -0
- package/dist/cjs/src/tools/SelectionTool/SelectionHandle.js +85 -0
- package/dist/cjs/src/tools/SelectionTool/SelectionTool.d.ts +36 -0
- package/dist/cjs/src/tools/SelectionTool/SelectionTool.js +405 -0
- package/dist/cjs/src/tools/SelectionTool/TransformMode.d.ts +34 -0
- package/dist/cjs/src/tools/SelectionTool/TransformMode.js +107 -0
- package/dist/cjs/src/tools/SelectionTool/types.d.ts +9 -0
- package/dist/cjs/src/tools/SelectionTool/types.js +14 -0
- package/dist/cjs/src/tools/SoundUITool.d.ts +24 -0
- package/dist/cjs/src/tools/SoundUITool.js +164 -0
- package/dist/cjs/src/tools/TextTool.d.ts +33 -0
- package/dist/cjs/src/tools/TextTool.js +262 -0
- package/dist/cjs/src/tools/ToolController.d.ts +18 -0
- package/dist/cjs/src/tools/ToolController.js +192 -0
- package/dist/cjs/src/tools/ToolEnabledGroup.d.ts +6 -0
- package/dist/cjs/src/tools/ToolEnabledGroup.js +14 -0
- package/dist/cjs/src/tools/ToolSwitcherShortcut.d.ts +16 -0
- package/dist/cjs/src/tools/ToolSwitcherShortcut.js +38 -0
- package/dist/cjs/src/tools/ToolbarShortcutHandler.d.ts +12 -0
- package/dist/cjs/src/tools/ToolbarShortcutHandler.js +29 -0
- package/dist/cjs/src/tools/UndoRedoShortcut.d.ts +8 -0
- package/dist/cjs/src/tools/UndoRedoShortcut.js +28 -0
- package/dist/cjs/src/tools/lib.d.ts +17 -0
- package/dist/cjs/src/tools/lib.js +38 -0
- package/dist/cjs/src/tools/localization.d.ts +31 -0
- package/dist/cjs/src/tools/localization.js +33 -0
- package/dist/cjs/src/types.d.ts +151 -0
- package/dist/cjs/src/types.js +38 -0
- package/dist/cjs/src/util/assertions.d.ts +23 -0
- package/dist/cjs/src/util/assertions.js +51 -0
- package/dist/cjs/src/util/fileToBase64.d.ts +3 -0
- package/dist/cjs/src/util/fileToBase64.js +15 -0
- package/dist/cjs/src/util/untilNextAnimationFrame.d.ts +3 -0
- package/dist/cjs/src/util/untilNextAnimationFrame.js +9 -0
- package/dist/cjs/src/util/waitForTimeout.d.ts +2 -0
- package/dist/cjs/src/util/waitForTimeout.js +9 -0
- package/dist/mjs/src/Color4.d.ts +69 -0
- package/dist/mjs/src/Color4.mjs +257 -0
- package/dist/mjs/src/Editor.d.ts +308 -0
- package/dist/mjs/src/Editor.mjs +874 -0
- package/dist/mjs/src/EditorImage.d.ts +97 -0
- package/dist/mjs/src/EditorImage.mjs +477 -0
- package/dist/mjs/src/EventDispatcher.d.ts +30 -0
- package/dist/mjs/src/EventDispatcher.mjs +54 -0
- package/dist/mjs/src/Pointer.d.ts +24 -0
- package/dist/mjs/src/Pointer.mjs +80 -0
- package/dist/mjs/src/SVGLoader.d.ts +48 -0
- package/dist/mjs/src/SVGLoader.mjs +445 -0
- package/dist/mjs/src/UndoRedoHistory.d.ts +19 -0
- package/dist/mjs/src/UndoRedoHistory.mjs +91 -0
- package/dist/mjs/src/Viewport.d.ts +71 -0
- package/dist/mjs/src/Viewport.mjs +256 -0
- package/dist/mjs/src/bundle/bundled.d.ts +4 -0
- package/dist/mjs/src/bundle/bundled.mjs +5 -0
- package/dist/mjs/src/commands/Command.d.ts +16 -0
- package/dist/mjs/src/commands/Command.mjs +30 -0
- package/dist/mjs/src/commands/Duplicate.d.ts +14 -0
- package/dist/mjs/src/commands/Duplicate.mjs +33 -0
- package/dist/mjs/src/commands/Erase.d.ts +14 -0
- package/dist/mjs/src/commands/Erase.mjs +57 -0
- package/dist/mjs/src/commands/SerializableCommand.d.ts +12 -0
- package/dist/mjs/src/commands/SerializableCommand.mjs +36 -0
- package/dist/mjs/src/commands/UnresolvedCommand.d.ts +14 -0
- package/dist/mjs/src/commands/UnresolvedCommand.mjs +22 -0
- package/dist/mjs/src/commands/invertCommand.d.ts +4 -0
- package/dist/mjs/src/commands/invertCommand.mjs +44 -0
- package/dist/mjs/src/commands/lib.d.ts +7 -0
- package/dist/mjs/src/commands/lib.mjs +7 -0
- package/dist/mjs/src/commands/localization.d.ts +23 -0
- package/dist/mjs/src/commands/localization.mjs +21 -0
- package/dist/mjs/src/commands/uniteCommands.d.ts +4 -0
- package/dist/mjs/src/commands/uniteCommands.mjs +116 -0
- package/dist/mjs/src/components/AbstractComponent.d.ts +73 -0
- package/dist/mjs/src/components/AbstractComponent.mjs +252 -0
- package/dist/mjs/src/components/ImageBackground.d.ts +42 -0
- package/dist/mjs/src/components/ImageBackground.mjs +139 -0
- package/dist/mjs/src/components/ImageComponent.d.ts +31 -0
- package/dist/mjs/src/components/ImageComponent.mjs +146 -0
- package/dist/mjs/src/components/RestylableComponent.d.ts +43 -0
- package/dist/mjs/src/components/RestylableComponent.mjs +80 -0
- package/dist/mjs/src/components/SVGGlobalAttributesObject.d.ts +21 -0
- package/dist/mjs/src/components/SVGGlobalAttributesObject.mjs +59 -0
- package/dist/mjs/src/components/Stroke.d.ts +75 -0
- package/dist/mjs/src/components/Stroke.mjs +219 -0
- package/dist/mjs/src/components/TextComponent.d.ts +75 -0
- package/dist/mjs/src/components/TextComponent.mjs +274 -0
- package/dist/mjs/src/components/UnknownSVGObject.d.ts +18 -0
- package/dist/mjs/src/components/UnknownSVGObject.mjs +44 -0
- package/dist/mjs/src/components/builders/ArrowBuilder.d.ts +19 -0
- package/dist/mjs/src/components/builders/ArrowBuilder.mjs +86 -0
- package/dist/mjs/src/components/builders/FreehandLineBuilder.d.ts +33 -0
- package/dist/mjs/src/components/builders/FreehandLineBuilder.mjs +165 -0
- package/dist/mjs/src/components/builders/LineBuilder.d.ts +18 -0
- package/dist/mjs/src/components/builders/LineBuilder.mjs +58 -0
- package/dist/mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +36 -0
- package/dist/mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.mjs +339 -0
- package/dist/mjs/src/components/builders/RectangleBuilder.d.ts +20 -0
- package/dist/mjs/src/components/builders/RectangleBuilder.mjs +50 -0
- package/dist/mjs/src/components/builders/types.d.ts +12 -0
- package/dist/mjs/src/components/builders/types.mjs +1 -0
- package/dist/mjs/src/components/lib.d.ts +13 -0
- package/dist/mjs/src/components/lib.mjs +12 -0
- package/dist/mjs/src/components/localization.d.ts +11 -0
- package/dist/mjs/src/components/localization.mjs +10 -0
- package/dist/mjs/src/components/util/StrokeSmoother.d.ts +35 -0
- package/dist/mjs/src/components/util/StrokeSmoother.mjs +210 -0
- package/dist/mjs/src/components/util/describeComponentList.d.ts +4 -0
- package/dist/mjs/src/components/util/describeComponentList.mjs +14 -0
- package/dist/mjs/src/lib.d.ts +64 -0
- package/dist/mjs/src/lib.mjs +64 -0
- package/dist/mjs/src/localization.d.ts +14 -0
- package/dist/mjs/src/localization.mjs +10 -0
- package/dist/mjs/src/localizations/de.d.ts +3 -0
- package/dist/mjs/src/localizations/de.mjs +4 -0
- package/dist/mjs/src/localizations/en.d.ts +3 -0
- package/dist/mjs/src/localizations/en.mjs +4 -0
- package/dist/mjs/src/localizations/es.d.ts +3 -0
- package/dist/mjs/src/localizations/es.mjs +18 -0
- package/dist/mjs/src/localizations/getLocalizationTable.d.ts +3 -0
- package/dist/mjs/src/localizations/getLocalizationTable.mjs +45 -0
- package/dist/mjs/src/math/LineSegment2.d.ts +24 -0
- package/dist/mjs/src/math/LineSegment2.mjs +125 -0
- package/dist/mjs/src/math/Mat33.d.ts +118 -0
- package/dist/mjs/src/math/Mat33.mjs +326 -0
- package/dist/mjs/src/math/Path.d.ts +71 -0
- package/dist/mjs/src/math/Path.mjs +648 -0
- package/dist/mjs/src/math/Rect2.d.ts +52 -0
- package/dist/mjs/src/math/Rect2.mjs +228 -0
- package/dist/mjs/src/math/Triangle.d.ts +11 -0
- package/dist/mjs/src/math/Triangle.mjs +19 -0
- package/dist/mjs/src/math/Vec2.d.ts +13 -0
- package/dist/mjs/src/math/Vec2.mjs +13 -0
- package/dist/mjs/src/math/Vec3.d.ts +106 -0
- package/dist/mjs/src/math/Vec3.mjs +174 -0
- package/dist/mjs/src/math/lib.d.ts +7 -0
- package/dist/mjs/src/math/lib.mjs +7 -0
- package/dist/mjs/src/math/rounding.d.ts +4 -0
- package/dist/mjs/src/math/rounding.mjs +128 -0
- package/dist/mjs/src/rendering/Display.d.ts +75 -0
- package/dist/mjs/src/rendering/Display.mjs +207 -0
- package/dist/mjs/src/rendering/RenderingStyle.d.ts +31 -0
- package/dist/mjs/src/rendering/RenderingStyle.mjs +38 -0
- package/dist/mjs/src/rendering/TextRenderingStyle.d.ts +36 -0
- package/dist/mjs/src/rendering/TextRenderingStyle.mjs +23 -0
- package/dist/mjs/src/rendering/caching/CacheRecord.d.ts +20 -0
- package/dist/mjs/src/rendering/caching/CacheRecord.mjs +55 -0
- package/dist/mjs/src/rendering/caching/CacheRecordManager.d.ts +12 -0
- package/dist/mjs/src/rendering/caching/CacheRecordManager.mjs +43 -0
- package/dist/mjs/src/rendering/caching/RenderingCache.d.ts +11 -0
- package/dist/mjs/src/rendering/caching/RenderingCache.mjs +45 -0
- package/dist/mjs/src/rendering/caching/RenderingCacheNode.d.ts +29 -0
- package/dist/mjs/src/rendering/caching/RenderingCacheNode.mjs +320 -0
- package/dist/mjs/src/rendering/caching/testUtils.d.ts +9 -0
- package/dist/mjs/src/rendering/caching/testUtils.mjs +20 -0
- package/dist/mjs/src/rendering/caching/types.d.ts +19 -0
- package/dist/mjs/src/rendering/caching/types.mjs +1 -0
- package/dist/mjs/src/rendering/lib.d.ts +7 -0
- package/dist/mjs/src/rendering/lib.mjs +5 -0
- package/dist/mjs/src/rendering/localization.d.ts +10 -0
- package/dist/mjs/src/rendering/localization.mjs +9 -0
- package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +68 -0
- package/dist/mjs/src/rendering/renderers/AbstractRenderer.mjs +144 -0
- package/dist/mjs/src/rendering/renderers/CanvasRenderer.d.ts +63 -0
- package/dist/mjs/src/rendering/renderers/CanvasRenderer.mjs +230 -0
- package/dist/mjs/src/rendering/renderers/DummyRenderer.d.ts +35 -0
- package/dist/mjs/src/rendering/renderers/DummyRenderer.mjs +106 -0
- package/dist/mjs/src/rendering/renderers/SVGRenderer.d.ts +57 -0
- package/dist/mjs/src/rendering/renderers/SVGRenderer.mjs +304 -0
- package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.d.ts +29 -0
- package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.mjs +57 -0
- package/dist/mjs/src/testing/beforeEachFile.d.ts +1 -0
- package/dist/mjs/src/testing/beforeEachFile.mjs +7 -0
- package/dist/mjs/src/testing/createEditor.d.ts +4 -0
- package/dist/mjs/src/testing/createEditor.mjs +9 -0
- package/dist/mjs/src/testing/lib.d.ts +2 -0
- package/dist/mjs/src/testing/lib.mjs +2 -0
- package/dist/mjs/src/testing/loadExpectExtensions.d.ts +2 -0
- package/dist/mjs/src/testing/loadExpectExtensions.mjs +24 -0
- package/dist/mjs/src/testing/sendPenEvent.d.ts +12 -0
- package/dist/mjs/src/testing/sendPenEvent.mjs +19 -0
- package/dist/mjs/src/testing/sendTouchEvent.d.ts +42 -0
- package/dist/mjs/src/testing/sendTouchEvent.mjs +62 -0
- package/dist/mjs/src/toolbar/HTMLToolbar.d.ts +103 -0
- package/dist/mjs/src/toolbar/HTMLToolbar.mjs +376 -0
- package/dist/mjs/src/toolbar/IconProvider.d.ts +62 -0
- package/dist/mjs/src/toolbar/IconProvider.mjs +654 -0
- package/dist/mjs/src/toolbar/lib.d.ts +3 -0
- package/dist/mjs/src/toolbar/lib.mjs +3 -0
- package/dist/mjs/src/toolbar/localization.d.ts +49 -0
- package/dist/mjs/src/toolbar/localization.mjs +48 -0
- package/dist/mjs/src/toolbar/makeColorInput.d.ts +6 -0
- package/dist/mjs/src/toolbar/makeColorInput.mjs +113 -0
- package/dist/mjs/src/toolbar/types.d.ts +4 -0
- package/dist/mjs/src/toolbar/types.mjs +1 -0
- package/dist/mjs/src/toolbar/widgets/ActionButtonWidget.d.ts +15 -0
- package/dist/mjs/src/toolbar/widgets/ActionButtonWidget.mjs +25 -0
- package/dist/mjs/src/toolbar/widgets/BaseToolWidget.d.ts +11 -0
- package/dist/mjs/src/toolbar/widgets/BaseToolWidget.mjs +44 -0
- package/dist/mjs/src/toolbar/widgets/BaseWidget.d.ts +72 -0
- package/dist/mjs/src/toolbar/widgets/BaseWidget.mjs +307 -0
- package/dist/mjs/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +18 -0
- package/dist/mjs/src/toolbar/widgets/DocumentPropertiesWidget.mjs +120 -0
- package/dist/mjs/src/toolbar/widgets/EraserToolWidget.d.ts +17 -0
- package/dist/mjs/src/toolbar/widgets/EraserToolWidget.mjs +57 -0
- package/dist/mjs/src/toolbar/widgets/HandToolWidget.d.ts +17 -0
- package/dist/mjs/src/toolbar/widgets/HandToolWidget.mjs +172 -0
- package/dist/mjs/src/toolbar/widgets/InsertImageWidget.d.ts +19 -0
- package/dist/mjs/src/toolbar/widgets/InsertImageWidget.mjs +170 -0
- package/dist/mjs/src/toolbar/widgets/OverflowWidget.d.ts +25 -0
- package/dist/mjs/src/toolbar/widgets/OverflowWidget.mjs +71 -0
- package/dist/mjs/src/toolbar/widgets/PenToolWidget.d.ts +27 -0
- package/dist/mjs/src/toolbar/widgets/PenToolWidget.mjs +220 -0
- package/dist/mjs/src/toolbar/widgets/SelectionToolWidget.d.ts +13 -0
- package/dist/mjs/src/toolbar/widgets/SelectionToolWidget.mjs +147 -0
- package/dist/mjs/src/toolbar/widgets/TextToolWidget.d.ts +16 -0
- package/dist/mjs/src/toolbar/widgets/TextToolWidget.mjs +109 -0
- package/dist/mjs/src/toolbar/widgets/lib.d.ts +10 -0
- package/dist/mjs/src/toolbar/widgets/lib.mjs +10 -0
- package/dist/mjs/src/tools/BaseTool.d.ts +22 -0
- package/dist/mjs/src/tools/BaseTool.mjs +63 -0
- package/dist/mjs/src/tools/Eraser.d.ts +23 -0
- package/dist/mjs/src/tools/Eraser.mjs +106 -0
- package/dist/mjs/src/tools/FindTool.d.ts +21 -0
- package/dist/mjs/src/tools/FindTool.mjs +114 -0
- package/dist/mjs/src/tools/PanZoom.d.ts +52 -0
- package/dist/mjs/src/tools/PanZoom.mjs +414 -0
- package/dist/mjs/src/tools/PasteHandler.d.ts +23 -0
- package/dist/mjs/src/tools/PasteHandler.mjs +93 -0
- package/dist/mjs/src/tools/Pen.d.ts +39 -0
- package/dist/mjs/src/tools/Pen.mjs +173 -0
- package/dist/mjs/src/tools/PipetteTool.d.ts +18 -0
- package/dist/mjs/src/tools/PipetteTool.mjs +39 -0
- package/dist/mjs/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +8 -0
- package/dist/mjs/src/tools/SelectionTool/SelectAllShortcutHandler.mjs +22 -0
- package/dist/mjs/src/tools/SelectionTool/Selection.d.ts +64 -0
- package/dist/mjs/src/tools/SelectionTool/Selection.mjs +459 -0
- package/dist/mjs/src/tools/SelectionTool/SelectionHandle.d.ts +38 -0
- package/dist/mjs/src/tools/SelectionTool/SelectionHandle.mjs +81 -0
- package/dist/mjs/src/tools/SelectionTool/SelectionTool.d.ts +36 -0
- package/dist/mjs/src/tools/SelectionTool/SelectionTool.mjs +398 -0
- package/dist/mjs/src/tools/SelectionTool/TransformMode.d.ts +34 -0
- package/dist/mjs/src/tools/SelectionTool/TransformMode.mjs +98 -0
- package/dist/mjs/src/tools/SelectionTool/types.d.ts +9 -0
- package/dist/mjs/src/tools/SelectionTool/types.mjs +11 -0
- package/dist/mjs/src/tools/SoundUITool.d.ts +24 -0
- package/dist/mjs/src/tools/SoundUITool.mjs +158 -0
- package/dist/mjs/src/tools/TextTool.d.ts +33 -0
- package/dist/mjs/src/tools/TextTool.mjs +256 -0
- package/dist/mjs/src/tools/ToolController.d.ts +18 -0
- package/dist/mjs/src/tools/ToolController.mjs +163 -0
- package/dist/mjs/src/tools/ToolEnabledGroup.d.ts +6 -0
- package/dist/mjs/src/tools/ToolEnabledGroup.mjs +11 -0
- package/dist/mjs/src/tools/ToolSwitcherShortcut.d.ts +16 -0
- package/dist/mjs/src/tools/ToolSwitcherShortcut.mjs +32 -0
- package/dist/mjs/src/tools/ToolbarShortcutHandler.d.ts +12 -0
- package/dist/mjs/src/tools/ToolbarShortcutHandler.mjs +23 -0
- package/dist/mjs/src/tools/UndoRedoShortcut.d.ts +8 -0
- package/dist/mjs/src/tools/UndoRedoShortcut.mjs +22 -0
- package/dist/mjs/src/tools/lib.d.ts +17 -0
- package/dist/mjs/src/tools/lib.mjs +17 -0
- package/dist/mjs/src/tools/localization.d.ts +31 -0
- package/dist/mjs/src/tools/localization.mjs +30 -0
- package/dist/mjs/src/types.d.ts +151 -0
- package/dist/mjs/src/types.mjs +35 -0
- package/dist/mjs/src/util/assertions.d.ts +23 -0
- package/dist/mjs/src/util/assertions.mjs +45 -0
- package/dist/mjs/src/util/fileToBase64.d.ts +3 -0
- package/dist/mjs/src/util/fileToBase64.mjs +13 -0
- package/dist/mjs/src/util/untilNextAnimationFrame.d.ts +3 -0
- package/dist/mjs/src/util/untilNextAnimationFrame.mjs +7 -0
- package/dist/mjs/src/util/waitForTimeout.d.ts +2 -0
- package/dist/mjs/src/util/waitForTimeout.mjs +7 -0
- package/package.json +6 -4
- package/src/Editor.css +86 -0
- package/src/styles.js +7 -0
- package/src/toolbar/toolbar.css +213 -0
- package/src/toolbar/widgets/InsertImageWidget.css +44 -0
- package/src/toolbar/widgets/OverflowWidget.css +27 -0
- package/src/tools/FindTool.css +7 -0
- package/src/tools/SelectionTool/SelectionTool.css +23 -0
- package/src/tools/SoundUITool.css +15 -0
- 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.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;
|