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,42 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const Command_1 = __importDefault(require("./Command"));
|
7
|
+
class SerializableCommand extends Command_1.default {
|
8
|
+
constructor(commandTypeId) {
|
9
|
+
super();
|
10
|
+
this.commandTypeId = commandTypeId;
|
11
|
+
if (!(commandTypeId in SerializableCommand.deserializationCallbacks)) {
|
12
|
+
throw new Error(`Command ${commandTypeId} must have a registered deserialization callback. To do this, call SerializableCommand.register.`);
|
13
|
+
}
|
14
|
+
}
|
15
|
+
// Convert this command to an object that can be passed to `JSON.stringify`.
|
16
|
+
//
|
17
|
+
// Do not rely on the stability of the optupt of this function — it can change
|
18
|
+
// form without a major version increase.
|
19
|
+
serialize() {
|
20
|
+
return {
|
21
|
+
data: this.serializeToJSON(),
|
22
|
+
commandType: this.commandTypeId,
|
23
|
+
};
|
24
|
+
}
|
25
|
+
// Convert a `string` containing JSON data (or the output of `JSON.parse`) into a
|
26
|
+
// `Command`.
|
27
|
+
static deserialize(data, editor) {
|
28
|
+
const json = typeof data === 'string' ? JSON.parse(data) : data;
|
29
|
+
const commandType = json.commandType;
|
30
|
+
if (!(commandType in SerializableCommand.deserializationCallbacks)) {
|
31
|
+
throw new Error(`Unrecognised command type ${commandType}!`);
|
32
|
+
}
|
33
|
+
return SerializableCommand.deserializationCallbacks[commandType](json.data, editor);
|
34
|
+
}
|
35
|
+
// Register a deserialization callback. This must be called at least once for every subclass of
|
36
|
+
// `SerializableCommand`.
|
37
|
+
static register(commandTypeId, deserialize) {
|
38
|
+
SerializableCommand.deserializationCallbacks[commandTypeId] = deserialize;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
exports.default = SerializableCommand;
|
42
|
+
SerializableCommand.deserializationCallbacks = {};
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import EditorImage from '../EditorImage';
|
2
|
+
import AbstractComponent from '../components/AbstractComponent';
|
3
|
+
import SerializableCommand from './SerializableCommand';
|
4
|
+
export type ResolveFromComponentCallback = () => SerializableCommand;
|
5
|
+
/**
|
6
|
+
* A command that requires a component that may or may not be present in the editor when
|
7
|
+
* the command is created.
|
8
|
+
*/
|
9
|
+
export default abstract class UnresolvedSerializableCommand extends SerializableCommand {
|
10
|
+
protected component: AbstractComponent | null;
|
11
|
+
protected readonly componentID: string;
|
12
|
+
protected constructor(commandId: string, componentID: string, component?: AbstractComponent);
|
13
|
+
protected resolveComponent(image: EditorImage): void;
|
14
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const SerializableCommand_1 = __importDefault(require("./SerializableCommand"));
|
7
|
+
/**
|
8
|
+
* A command that requires a component that may or may not be present in the editor when
|
9
|
+
* the command is created.
|
10
|
+
*/
|
11
|
+
class UnresolvedSerializableCommand extends SerializableCommand_1.default {
|
12
|
+
constructor(commandId, componentID, component) {
|
13
|
+
super(commandId);
|
14
|
+
this.component = component !== null && component !== void 0 ? component : null;
|
15
|
+
this.componentID = componentID;
|
16
|
+
}
|
17
|
+
resolveComponent(image) {
|
18
|
+
if (this.component) {
|
19
|
+
return;
|
20
|
+
}
|
21
|
+
const component = image.lookupElement(this.componentID);
|
22
|
+
if (!component) {
|
23
|
+
throw new Error(`Unable to resolve component with ID ${this.componentID}`);
|
24
|
+
}
|
25
|
+
this.component = component;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
exports.default = UnresolvedSerializableCommand;
|
@@ -0,0 +1,49 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const Command_1 = __importDefault(require("./Command"));
|
7
|
+
const SerializableCommand_1 = __importDefault(require("./SerializableCommand"));
|
8
|
+
// Returns a command that does the opposite of the given command --- `result.apply()` calls
|
9
|
+
// `command.unapply()` and `result.unapply()` calls `command.apply()`.
|
10
|
+
const invertCommand = (command) => {
|
11
|
+
if (command instanceof SerializableCommand_1.default) {
|
12
|
+
// SerializableCommand that does the inverse of [command]
|
13
|
+
return new class extends SerializableCommand_1.default {
|
14
|
+
serializeToJSON() {
|
15
|
+
return command.serialize();
|
16
|
+
}
|
17
|
+
apply(editor) {
|
18
|
+
command.unapply(editor);
|
19
|
+
}
|
20
|
+
unapply(editor) {
|
21
|
+
command.unapply(editor);
|
22
|
+
}
|
23
|
+
description(editor, localizationTable) {
|
24
|
+
return localizationTable.inverseOf(command.description(editor, localizationTable));
|
25
|
+
}
|
26
|
+
}('inverse');
|
27
|
+
}
|
28
|
+
else {
|
29
|
+
// Command that does the inverse of [command].
|
30
|
+
const result = new class extends Command_1.default {
|
31
|
+
apply(editor) {
|
32
|
+
command.unapply(editor);
|
33
|
+
}
|
34
|
+
unapply(editor) {
|
35
|
+
command.apply(editor);
|
36
|
+
}
|
37
|
+
description(editor, localizationTable) {
|
38
|
+
return localizationTable.inverseOf(command.description(editor, localizationTable));
|
39
|
+
}
|
40
|
+
};
|
41
|
+
// We know that T does not extend SerializableCommand, and thus returning a Command
|
42
|
+
// is appropriate.
|
43
|
+
return result;
|
44
|
+
}
|
45
|
+
};
|
46
|
+
SerializableCommand_1.default.register('inverse', (data, editor) => {
|
47
|
+
return invertCommand(SerializableCommand_1.default.deserialize(data, editor));
|
48
|
+
});
|
49
|
+
exports.default = invertCommand;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import Command from './Command';
|
2
|
+
import Duplicate from './Duplicate';
|
3
|
+
import Erase from './Erase';
|
4
|
+
import invertCommand from './invertCommand';
|
5
|
+
import SerializableCommand from './SerializableCommand';
|
6
|
+
import uniteCommands from './uniteCommands';
|
7
|
+
export { Command, Duplicate, Erase, SerializableCommand, invertCommand, uniteCommands, };
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.uniteCommands = exports.invertCommand = exports.SerializableCommand = exports.Erase = exports.Duplicate = exports.Command = void 0;
|
7
|
+
const Command_1 = __importDefault(require("./Command"));
|
8
|
+
exports.Command = Command_1.default;
|
9
|
+
const Duplicate_1 = __importDefault(require("./Duplicate"));
|
10
|
+
exports.Duplicate = Duplicate_1.default;
|
11
|
+
const Erase_1 = __importDefault(require("./Erase"));
|
12
|
+
exports.Erase = Erase_1.default;
|
13
|
+
const invertCommand_1 = __importDefault(require("./invertCommand"));
|
14
|
+
exports.invertCommand = invertCommand_1.default;
|
15
|
+
const SerializableCommand_1 = __importDefault(require("./SerializableCommand"));
|
16
|
+
exports.SerializableCommand = SerializableCommand_1.default;
|
17
|
+
const uniteCommands_1 = __importDefault(require("./uniteCommands"));
|
18
|
+
exports.uniteCommands = uniteCommands_1.default;
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import Rect2 from '../math/Rect2';
|
2
|
+
export interface CommandLocalization {
|
3
|
+
movedLeft: string;
|
4
|
+
movedUp: string;
|
5
|
+
movedDown: string;
|
6
|
+
movedRight: string;
|
7
|
+
rotatedBy: (degrees: number) => string;
|
8
|
+
zoomedOut: string;
|
9
|
+
zoomedIn: string;
|
10
|
+
erasedNoElements: string;
|
11
|
+
duplicatedNoElements: string;
|
12
|
+
elements: string;
|
13
|
+
updatedViewport: string;
|
14
|
+
transformedElements: (elemCount: number) => string;
|
15
|
+
resizeOutputCommand: (newSize: Rect2) => string;
|
16
|
+
addElementAction: (elemDescription: string) => string;
|
17
|
+
eraseAction: (elemDescription: string, numElems: number) => string;
|
18
|
+
duplicateAction: (elemDescription: string, count: number) => string;
|
19
|
+
inverseOf: (actionDescription: string) => string;
|
20
|
+
unionOf: (actionDescription: string, actionCount: number) => string;
|
21
|
+
selectedElements: (count: number) => string;
|
22
|
+
}
|
23
|
+
export declare const defaultCommandLocalization: CommandLocalization;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.defaultCommandLocalization = void 0;
|
4
|
+
exports.defaultCommandLocalization = {
|
5
|
+
updatedViewport: 'Transformed Viewport',
|
6
|
+
transformedElements: (elemCount) => `Transformed ${elemCount} element${elemCount === 1 ? '' : 's'}`,
|
7
|
+
resizeOutputCommand: (newSize) => `Resized image to ${newSize.w}x${newSize.h}`,
|
8
|
+
addElementAction: (componentDescription) => `Added ${componentDescription}`,
|
9
|
+
eraseAction: (componentDescription, numElems) => `Erased ${numElems} ${componentDescription}`,
|
10
|
+
duplicateAction: (componentDescription, numElems) => `Duplicated ${numElems} ${componentDescription}`,
|
11
|
+
unionOf: (actionDescription, actionCount) => `Union: ${actionCount} ${actionDescription}`,
|
12
|
+
inverseOf: (actionDescription) => `Inverse of ${actionDescription}`,
|
13
|
+
elements: 'Elements',
|
14
|
+
erasedNoElements: 'Erased nothing',
|
15
|
+
duplicatedNoElements: 'Duplicated nothing',
|
16
|
+
rotatedBy: (degrees) => `Rotated by ${Math.abs(degrees)} degrees ${degrees < 0 ? 'clockwise' : 'counter-clockwise'}`,
|
17
|
+
movedLeft: 'Moved left',
|
18
|
+
movedUp: 'Moved up',
|
19
|
+
movedDown: 'Moved down',
|
20
|
+
movedRight: 'Moved right',
|
21
|
+
zoomedOut: 'Zoomed out',
|
22
|
+
zoomedIn: 'Zoomed in',
|
23
|
+
selectedElements: (count) => `Selected ${count} element${count === 1 ? '' : 's'}`,
|
24
|
+
};
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import Command from './Command';
|
2
|
+
import SerializableCommand from './SerializableCommand';
|
3
|
+
declare const uniteCommands: <T extends Command>(commands: T[], applyChunkSize?: number) => T extends SerializableCommand ? SerializableCommand : Command;
|
4
|
+
export default uniteCommands;
|
@@ -0,0 +1,121 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const Command_1 = __importDefault(require("./Command"));
|
7
|
+
const SerializableCommand_1 = __importDefault(require("./SerializableCommand"));
|
8
|
+
class NonSerializableUnion extends Command_1.default {
|
9
|
+
constructor(commands, applyChunkSize) {
|
10
|
+
super();
|
11
|
+
this.commands = commands;
|
12
|
+
this.applyChunkSize = applyChunkSize;
|
13
|
+
}
|
14
|
+
static waitForAll(commands) {
|
15
|
+
// If any are Promises...
|
16
|
+
if (commands.some(command => command && command['then'])) {
|
17
|
+
console.log('waiting...');
|
18
|
+
// Wait for all commands to finish.
|
19
|
+
return Promise.all(commands)
|
20
|
+
// Ensure we return a Promise<void> and not a Promise<void[]>
|
21
|
+
.then(() => { });
|
22
|
+
}
|
23
|
+
return;
|
24
|
+
}
|
25
|
+
apply(editor) {
|
26
|
+
if (this.applyChunkSize === undefined) {
|
27
|
+
const results = this.commands.map(cmd => cmd.apply(editor));
|
28
|
+
return NonSerializableUnion.waitForAll(results);
|
29
|
+
}
|
30
|
+
else {
|
31
|
+
return editor.asyncApplyCommands(this.commands, this.applyChunkSize);
|
32
|
+
}
|
33
|
+
}
|
34
|
+
unapply(editor) {
|
35
|
+
const commands = [...this.commands];
|
36
|
+
commands.reverse();
|
37
|
+
if (this.applyChunkSize === undefined) {
|
38
|
+
const results = commands.map(cmd => cmd.unapply(editor));
|
39
|
+
return NonSerializableUnion.waitForAll(results);
|
40
|
+
}
|
41
|
+
else {
|
42
|
+
return editor.asyncUnapplyCommands(commands, this.applyChunkSize, false);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
description(editor, localizationTable) {
|
46
|
+
const descriptions = [];
|
47
|
+
let lastDescription = null;
|
48
|
+
let duplicateDescriptionCount = 0;
|
49
|
+
for (const part of this.commands) {
|
50
|
+
const description = part.description(editor, localizationTable);
|
51
|
+
if (description !== lastDescription && lastDescription !== null) {
|
52
|
+
descriptions.push(localizationTable.unionOf(lastDescription, duplicateDescriptionCount));
|
53
|
+
lastDescription = null;
|
54
|
+
duplicateDescriptionCount = 0;
|
55
|
+
}
|
56
|
+
duplicateDescriptionCount++;
|
57
|
+
lastDescription !== null && lastDescription !== void 0 ? lastDescription : (lastDescription = description);
|
58
|
+
}
|
59
|
+
if (duplicateDescriptionCount > 1) {
|
60
|
+
descriptions.push(localizationTable.unionOf(lastDescription, duplicateDescriptionCount));
|
61
|
+
}
|
62
|
+
else if (duplicateDescriptionCount === 1) {
|
63
|
+
descriptions.push(lastDescription);
|
64
|
+
}
|
65
|
+
return descriptions.join(', ');
|
66
|
+
}
|
67
|
+
}
|
68
|
+
class SerializableUnion extends SerializableCommand_1.default {
|
69
|
+
constructor(commands, applyChunkSize) {
|
70
|
+
super('union');
|
71
|
+
this.commands = commands;
|
72
|
+
this.applyChunkSize = applyChunkSize;
|
73
|
+
this.nonserializableCommand = new NonSerializableUnion(commands, applyChunkSize);
|
74
|
+
}
|
75
|
+
serializeToJSON() {
|
76
|
+
return {
|
77
|
+
applyChunkSize: this.applyChunkSize,
|
78
|
+
data: this.commands.map(command => command.serialize()),
|
79
|
+
};
|
80
|
+
}
|
81
|
+
apply(editor) {
|
82
|
+
return this.nonserializableCommand.apply(editor);
|
83
|
+
}
|
84
|
+
unapply(editor) {
|
85
|
+
return this.nonserializableCommand.unapply(editor);
|
86
|
+
}
|
87
|
+
description(editor, localizationTable) {
|
88
|
+
return this.nonserializableCommand.description(editor, localizationTable);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
const uniteCommands = (commands, applyChunkSize) => {
|
92
|
+
let allSerializable = true;
|
93
|
+
for (const command of commands) {
|
94
|
+
if (!(command instanceof SerializableCommand_1.default)) {
|
95
|
+
allSerializable = false;
|
96
|
+
break;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
if (!allSerializable) {
|
100
|
+
return new NonSerializableUnion(commands, applyChunkSize);
|
101
|
+
}
|
102
|
+
else {
|
103
|
+
const castedCommands = commands;
|
104
|
+
return new SerializableUnion(castedCommands, applyChunkSize);
|
105
|
+
}
|
106
|
+
};
|
107
|
+
SerializableCommand_1.default.register('union', (data, editor) => {
|
108
|
+
if (typeof data.data.length !== 'number') {
|
109
|
+
throw new Error('Unions of commands must serialize to lists of serialization data.');
|
110
|
+
}
|
111
|
+
const applyChunkSize = data.applyChunkSize;
|
112
|
+
if (typeof applyChunkSize !== 'number' && applyChunkSize !== undefined) {
|
113
|
+
throw new Error('serialized applyChunkSize is neither undefined nor a number.');
|
114
|
+
}
|
115
|
+
const commands = [];
|
116
|
+
for (const part of data.data) {
|
117
|
+
commands.push(SerializableCommand_1.default.deserialize(part, editor));
|
118
|
+
}
|
119
|
+
return uniteCommands(commands, applyChunkSize);
|
120
|
+
});
|
121
|
+
exports.default = uniteCommands;
|
@@ -0,0 +1,73 @@
|
|
1
|
+
import SerializableCommand from '../commands/SerializableCommand';
|
2
|
+
import EditorImage from '../EditorImage';
|
3
|
+
import LineSegment2 from '../math/LineSegment2';
|
4
|
+
import Mat33 from '../math/Mat33';
|
5
|
+
import Rect2 from '../math/Rect2';
|
6
|
+
import AbstractRenderer from '../rendering/renderers/AbstractRenderer';
|
7
|
+
import { ImageComponentLocalization } from './localization';
|
8
|
+
export type LoadSaveData = (string[] | Record<symbol, string | number>);
|
9
|
+
export type LoadSaveDataTable = Record<string, Array<LoadSaveData>>;
|
10
|
+
export type DeserializeCallback = (data: string) => AbstractComponent;
|
11
|
+
/**
|
12
|
+
* A base class for everything that can be added to an {@link EditorImage}.
|
13
|
+
*/
|
14
|
+
export default abstract class AbstractComponent {
|
15
|
+
private readonly componentKind;
|
16
|
+
protected lastChangedTime: number;
|
17
|
+
protected abstract contentBBox: Rect2;
|
18
|
+
private zIndex;
|
19
|
+
private id;
|
20
|
+
private static zIndexCounter;
|
21
|
+
protected constructor(componentKind: string, initialZIndex?: number);
|
22
|
+
getId(): string;
|
23
|
+
private static deserializationCallbacks;
|
24
|
+
static registerComponent(componentKind: string, deserialize: DeserializeCallback | null): void;
|
25
|
+
private loadSaveData;
|
26
|
+
/**
|
27
|
+
* Attach data that can be used while exporting the component (e.g. to SVG).
|
28
|
+
*
|
29
|
+
* This is intended for use by an {@link ImageLoader}.
|
30
|
+
*/
|
31
|
+
attachLoadSaveData(key: string, data: LoadSaveData): void;
|
32
|
+
/** See {@link attachLoadSaveData} */
|
33
|
+
getLoadSaveData(): LoadSaveDataTable;
|
34
|
+
getZIndex(): number;
|
35
|
+
/** @returns the bounding box of this. */
|
36
|
+
getBBox(): Rect2;
|
37
|
+
/** Called when this component is added to the given image. */
|
38
|
+
onAddToImage(_image: EditorImage): void;
|
39
|
+
onRemoveFromImage(): void;
|
40
|
+
abstract render(canvas: AbstractRenderer, visibleRect?: Rect2): void;
|
41
|
+
/** @return true if `lineSegment` intersects this component. */
|
42
|
+
abstract intersects(lineSegment: LineSegment2): boolean;
|
43
|
+
/**
|
44
|
+
* @returns true if this component intersects `rect` -- it is entirely contained
|
45
|
+
* within the rectangle or one of the rectangle's edges intersects this component.
|
46
|
+
*/
|
47
|
+
intersectsRect(rect: Rect2): boolean;
|
48
|
+
protected abstract serializeToJSON(): any[] | Record<string, any> | number | string | null;
|
49
|
+
protected abstract applyTransformation(affineTransfm: Mat33): void;
|
50
|
+
transformBy(affineTransfm: Mat33): SerializableCommand;
|
51
|
+
setZIndex(newZIndex: number): SerializableCommand;
|
52
|
+
isSelectable(): boolean;
|
53
|
+
isBackground(): boolean;
|
54
|
+
getProportionalRenderingTime(): number;
|
55
|
+
private static transformElementCommandId;
|
56
|
+
private static TransformElementCommand;
|
57
|
+
/**
|
58
|
+
* @return a description that could be read by a screen reader
|
59
|
+
* (e.g. when adding/erasing the component)
|
60
|
+
*/
|
61
|
+
abstract description(localizationTable: ImageComponentLocalization): string;
|
62
|
+
protected abstract createClone(): AbstractComponent;
|
63
|
+
clone(): AbstractComponent;
|
64
|
+
serialize(): {
|
65
|
+
name: string;
|
66
|
+
zIndex: number;
|
67
|
+
id: string;
|
68
|
+
loadSaveData: LoadSaveDataTable;
|
69
|
+
data: string | number | any[] | Record<string, any>;
|
70
|
+
};
|
71
|
+
private static isNotDeserializable;
|
72
|
+
static deserialize(json: string | any): AbstractComponent;
|
73
|
+
}
|