js-draw 0.25.1 → 1.0.1
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/README.md +80 -26
- package/build-config.json +22 -21
- package/dist/Editor.css +1281 -0
- package/dist/bundle.js +3 -3
- package/dist/bundledStyles.js +1 -1
- package/dist/cjs/Editor.d.ts +91 -12
- package/dist/cjs/Editor.js +619 -590
- package/dist/cjs/EditorImage.d.ts +5 -2
- package/dist/cjs/EditorImage.js +258 -297
- package/dist/cjs/EventDispatcher.js +17 -19
- package/dist/cjs/Pointer.d.ts +3 -1
- package/dist/cjs/Pointer.js +41 -44
- package/dist/cjs/SVGLoader.d.ts +7 -1
- package/dist/cjs/SVGLoader.js +373 -474
- package/dist/cjs/UndoRedoHistory.js +28 -40
- package/dist/cjs/Viewport.d.ts +1 -4
- package/dist/cjs/Viewport.js +150 -193
- package/dist/cjs/bundle/bundled.js +4 -1
- package/dist/cjs/commands/Command.js +22 -49
- package/dist/cjs/commands/Duplicate.js +28 -44
- package/dist/cjs/commands/Erase.js +36 -54
- package/dist/cjs/commands/SerializableCommand.js +20 -35
- package/dist/cjs/commands/UnresolvedCommand.js +14 -29
- package/dist/cjs/commands/invertCommand.js +29 -51
- package/dist/cjs/commands/lib.js +9 -6
- package/dist/cjs/commands/localization.d.ts +1 -1
- package/dist/cjs/commands/localization.js +9 -9
- package/dist/cjs/commands/uniteCommands.js +57 -87
- package/dist/cjs/components/AbstractComponent.d.ts +11 -3
- package/dist/cjs/components/AbstractComponent.js +141 -169
- package/dist/cjs/components/BackgroundComponent.d.ts +3 -6
- package/dist/cjs/components/BackgroundComponent.js +124 -149
- package/dist/cjs/components/ImageComponent.d.ts +3 -5
- package/dist/cjs/components/ImageComponent.js +95 -175
- package/dist/cjs/components/RestylableComponent.d.ts +1 -1
- package/dist/cjs/components/RestylableComponent.js +41 -56
- package/dist/cjs/components/SVGGlobalAttributesObject.d.ts +1 -3
- package/dist/cjs/components/SVGGlobalAttributesObject.js +34 -51
- package/dist/cjs/components/Stroke.d.ts +4 -6
- package/dist/cjs/components/Stroke.js +95 -121
- package/dist/cjs/components/TextComponent.d.ts +2 -4
- package/dist/cjs/components/TextComponent.js +189 -234
- package/dist/cjs/components/UnknownSVGObject.d.ts +1 -3
- package/dist/cjs/components/UnknownSVGObject.js +30 -43
- package/dist/cjs/components/builders/ArrowBuilder.d.ts +1 -1
- package/dist/cjs/components/builders/ArrowBuilder.js +43 -42
- package/dist/cjs/components/builders/CircleBuilder.js +43 -43
- package/dist/cjs/components/builders/FreehandLineBuilder.d.ts +3 -2
- package/dist/cjs/components/builders/FreehandLineBuilder.js +73 -86
- package/dist/cjs/components/builders/LineBuilder.d.ts +1 -1
- package/dist/cjs/components/builders/LineBuilder.js +38 -36
- package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +1 -1
- package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.js +131 -139
- package/dist/cjs/components/builders/RectangleBuilder.d.ts +1 -1
- package/dist/cjs/components/builders/RectangleBuilder.js +31 -31
- package/dist/cjs/components/builders/types.d.ts +1 -1
- package/dist/cjs/components/lib.d.ts +3 -1
- package/dist/cjs/components/lib.js +10 -7
- package/dist/cjs/components/localization.js +4 -4
- package/dist/cjs/components/util/StrokeSmoother.d.ts +1 -2
- package/dist/cjs/components/util/StrokeSmoother.js +67 -72
- package/dist/cjs/components/util/describeComponentList.d.ts +1 -1
- package/dist/cjs/components/util/describeComponentList.js +4 -5
- package/dist/cjs/dialogs/makeAboutDialog.d.ts +15 -0
- package/dist/cjs/dialogs/makeAboutDialog.js +54 -0
- package/dist/cjs/inputEvents.d.ts +84 -0
- package/dist/cjs/inputEvents.js +40 -0
- package/dist/cjs/lib.d.ts +29 -13
- package/dist/cjs/lib.js +38 -23
- package/dist/cjs/localization.js +19 -18
- package/dist/cjs/localizations/de.js +117 -13
- package/dist/cjs/localizations/en.js +4 -13
- package/dist/cjs/localizations/es.js +62 -23
- package/dist/cjs/localizations/getLocalizationTable.js +15 -13
- package/dist/cjs/rendering/Display.d.ts +1 -2
- package/dist/cjs/rendering/Display.js +70 -83
- package/dist/cjs/rendering/RenderablePathSpec.d.ts +15 -0
- package/dist/cjs/rendering/RenderablePathSpec.js +70 -0
- package/dist/cjs/rendering/RenderingStyle.d.ts +4 -4
- package/dist/cjs/rendering/RenderingStyle.js +18 -28
- package/dist/cjs/rendering/TextRenderingStyle.d.ts +10 -10
- package/dist/cjs/rendering/TextRenderingStyle.js +13 -18
- package/dist/cjs/rendering/caching/CacheRecord.d.ts +1 -2
- package/dist/cjs/rendering/caching/CacheRecord.js +20 -22
- package/dist/cjs/rendering/caching/CacheRecordManager.d.ts +1 -1
- package/dist/cjs/rendering/caching/CacheRecordManager.js +17 -15
- package/dist/cjs/rendering/caching/RenderingCache.js +19 -19
- package/dist/cjs/rendering/caching/RenderingCacheNode.d.ts +1 -1
- package/dist/cjs/rendering/caching/RenderingCacheNode.js +98 -118
- package/dist/cjs/rendering/caching/testUtils.js +24 -23
- package/dist/cjs/rendering/caching/types.d.ts +3 -3
- package/dist/cjs/rendering/lib.js +8 -5
- package/dist/cjs/rendering/localization.js +5 -5
- package/dist/cjs/rendering/renderers/AbstractRenderer.d.ts +2 -11
- package/dist/cjs/rendering/renderers/AbstractRenderer.js +53 -57
- package/dist/cjs/rendering/renderers/CanvasRenderer.d.ts +3 -5
- package/dist/cjs/rendering/renderers/CanvasRenderer.js +91 -106
- package/dist/cjs/rendering/renderers/DummyRenderer.d.ts +1 -4
- package/dist/cjs/rendering/renderers/DummyRenderer.js +56 -76
- package/dist/cjs/rendering/renderers/SVGRenderer.d.ts +5 -5
- package/dist/cjs/rendering/renderers/SVGRenderer.js +194 -176
- package/dist/cjs/rendering/renderers/TextOnlyRenderer.d.ts +1 -3
- package/dist/cjs/rendering/renderers/TextOnlyRenderer.js +47 -72
- package/dist/cjs/shortcuts/KeyBinding.d.ts +5 -0
- package/dist/cjs/shortcuts/KeyBinding.js +94 -70
- package/dist/cjs/shortcuts/KeyboardShortcutManager.d.ts +1 -1
- package/dist/cjs/shortcuts/KeyboardShortcutManager.js +36 -45
- package/dist/cjs/shortcuts/lib.js +5 -2
- package/dist/cjs/testing/createEditor.js +7 -4
- package/dist/cjs/testing/getUniquePointerId.js +4 -5
- package/dist/cjs/testing/lib.js +5 -2
- package/dist/cjs/testing/sendPenEvent.d.ts +2 -2
- package/dist/cjs/testing/sendPenEvent.js +10 -7
- package/dist/cjs/testing/sendTouchEvent.d.ts +2 -2
- package/dist/cjs/testing/sendTouchEvent.js +34 -16
- package/dist/cjs/toolbar/AbstractToolbar.d.ts +166 -0
- package/dist/cjs/toolbar/AbstractToolbar.js +410 -0
- package/dist/cjs/toolbar/DropdownToolbar.d.ts +43 -0
- package/dist/cjs/toolbar/DropdownToolbar.js +176 -0
- package/dist/cjs/toolbar/EdgeToolbar.d.ts +47 -0
- package/dist/cjs/toolbar/EdgeToolbar.js +422 -0
- package/dist/cjs/toolbar/IconProvider.d.ts +54 -30
- package/dist/cjs/toolbar/IconProvider.js +652 -224
- package/dist/cjs/toolbar/constants.d.ts +1 -0
- package/dist/cjs/toolbar/constants.js +4 -0
- package/dist/cjs/toolbar/lib.d.ts +4 -2
- package/dist/cjs/toolbar/lib.js +10 -3
- package/dist/cjs/toolbar/localization.d.ts +9 -2
- package/dist/cjs/toolbar/localization.js +26 -19
- package/dist/cjs/toolbar/types.d.ts +7 -0
- package/dist/cjs/toolbar/widgets/ActionButtonWidget.d.ts +1 -1
- package/dist/cjs/toolbar/widgets/ActionButtonWidget.js +23 -39
- package/dist/cjs/toolbar/widgets/BaseToolWidget.d.ts +1 -1
- package/dist/cjs/toolbar/widgets/BaseToolWidget.js +35 -37
- package/dist/cjs/toolbar/widgets/BaseWidget.d.ts +60 -5
- package/dist/cjs/toolbar/widgets/BaseWidget.js +232 -177
- package/dist/cjs/toolbar/widgets/DocumentPropertiesWidget.js +130 -117
- package/dist/cjs/toolbar/widgets/EraserToolWidget.d.ts +1 -3
- package/dist/cjs/toolbar/widgets/EraserToolWidget.js +45 -73
- package/dist/cjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
- package/dist/cjs/toolbar/widgets/HandToolWidget.js +126 -141
- package/dist/cjs/toolbar/widgets/InsertImageWidget.d.ts +9 -7
- package/dist/cjs/toolbar/widgets/InsertImageWidget.js +147 -212
- package/dist/cjs/toolbar/widgets/OverflowWidget.js +33 -61
- package/dist/cjs/toolbar/widgets/PenToolWidget.d.ts +8 -1
- package/dist/cjs/toolbar/widgets/PenToolWidget.js +162 -234
- package/dist/cjs/toolbar/widgets/SelectionToolWidget.d.ts +3 -1
- package/dist/cjs/toolbar/widgets/SelectionToolWidget.js +105 -177
- package/dist/cjs/toolbar/widgets/TextToolWidget.js +64 -87
- package/dist/cjs/toolbar/widgets/components/makeColorInput.d.ts +10 -0
- package/dist/cjs/toolbar/{makeColorInput.js → widgets/components/makeColorInput.js} +57 -34
- package/dist/cjs/toolbar/widgets/components/makeFileInput.d.ts +12 -0
- package/dist/cjs/toolbar/widgets/components/makeFileInput.js +111 -0
- package/dist/cjs/toolbar/widgets/components/makeGridSelector.d.ts +24 -0
- package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +127 -0
- package/dist/cjs/toolbar/widgets/components/makeSeparator.d.ts +7 -0
- package/dist/cjs/toolbar/widgets/components/makeSeparator.js +16 -0
- package/dist/cjs/toolbar/widgets/components/makeThicknessSlider.d.ts +8 -0
- package/dist/cjs/toolbar/widgets/components/makeThicknessSlider.js +47 -0
- package/dist/cjs/toolbar/widgets/keybindings.js +8 -5
- package/dist/cjs/toolbar/widgets/layout/DropdownLayoutManager.d.ts +21 -0
- package/dist/cjs/toolbar/widgets/layout/DropdownLayoutManager.js +199 -0
- package/dist/cjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.d.ts +14 -0
- package/dist/cjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.js +60 -0
- package/dist/cjs/toolbar/widgets/layout/types.d.ts +63 -0
- package/dist/cjs/toolbar/widgets/layout/types.js +2 -0
- package/dist/cjs/toolbar/widgets/lib.d.ts +1 -1
- package/dist/cjs/toolbar/widgets/lib.js +15 -11
- package/dist/cjs/tools/BaseTool.d.ts +28 -9
- package/dist/cjs/tools/BaseTool.js +128 -51
- package/dist/cjs/tools/Eraser.d.ts +8 -1
- package/dist/cjs/tools/Eraser.js +82 -92
- package/dist/cjs/tools/FindTool.d.ts +1 -1
- package/dist/cjs/tools/FindTool.js +61 -77
- package/dist/cjs/tools/InputFilter/FunctionMapper.d.ts +12 -0
- package/dist/cjs/tools/InputFilter/FunctionMapper.js +21 -0
- package/dist/cjs/tools/InputFilter/InputMapper.d.ts +23 -0
- package/dist/cjs/tools/InputFilter/InputMapper.js +38 -0
- package/dist/cjs/tools/InputFilter/InputPipeline.d.ts +15 -0
- package/dist/cjs/tools/InputFilter/InputPipeline.js +54 -0
- package/dist/cjs/tools/InputFilter/InputStabilizer.d.ts +29 -0
- package/dist/cjs/tools/InputFilter/InputStabilizer.js +181 -0
- package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.d.ts +21 -0
- package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.js +84 -0
- package/dist/cjs/tools/PanZoom.d.ts +4 -2
- package/dist/cjs/tools/PanZoom.js +186 -248
- package/dist/cjs/tools/PasteHandler.d.ts +1 -1
- package/dist/cjs/tools/PasteHandler.js +49 -148
- package/dist/cjs/tools/Pen.d.ts +12 -11
- package/dist/cjs/tools/Pen.js +123 -158
- package/dist/cjs/tools/PipetteTool.d.ts +11 -2
- package/dist/cjs/tools/PipetteTool.js +51 -48
- package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +1 -1
- package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.js +15 -30
- package/dist/cjs/tools/SelectionTool/Selection.d.ts +5 -5
- package/dist/cjs/tools/SelectionTool/Selection.js +308 -415
- package/dist/cjs/tools/SelectionTool/SelectionHandle.d.ts +15 -5
- package/dist/cjs/tools/SelectionTool/SelectionHandle.js +63 -37
- package/dist/cjs/tools/SelectionTool/SelectionTool.d.ts +4 -4
- package/dist/cjs/tools/SelectionTool/SelectionTool.js +164 -187
- package/dist/cjs/tools/SelectionTool/TransformMode.d.ts +1 -1
- package/dist/cjs/tools/SelectionTool/TransformMode.js +65 -66
- package/dist/cjs/tools/SoundUITool.d.ts +2 -1
- package/dist/cjs/tools/SoundUITool.js +70 -84
- package/dist/cjs/tools/TextTool.d.ts +5 -3
- package/dist/cjs/tools/TextTool.js +169 -173
- package/dist/cjs/tools/ToolController.d.ts +16 -2
- package/dist/cjs/tools/ToolController.js +124 -100
- package/dist/cjs/tools/ToolEnabledGroup.js +6 -9
- package/dist/cjs/tools/ToolSwitcherShortcut.d.ts +1 -1
- package/dist/cjs/tools/ToolSwitcherShortcut.js +16 -32
- package/dist/cjs/tools/ToolbarShortcutHandler.d.ts +1 -1
- package/dist/cjs/tools/ToolbarShortcutHandler.js +17 -33
- package/dist/cjs/tools/UndoRedoShortcut.d.ts +1 -1
- package/dist/cjs/tools/UndoRedoShortcut.js +12 -27
- package/dist/cjs/tools/keybindings.js +21 -18
- package/dist/cjs/tools/lib.js +17 -14
- package/dist/cjs/tools/localization.d.ts +2 -1
- package/dist/cjs/tools/localization.js +8 -7
- package/dist/cjs/types.d.ts +22 -80
- package/dist/cjs/types.js +8 -16
- package/dist/cjs/util/ReactiveValue.d.ts +65 -0
- package/dist/cjs/util/ReactiveValue.js +166 -0
- package/dist/cjs/util/assertions.js +5 -8
- package/dist/cjs/util/fileToBase64.js +6 -6
- package/dist/cjs/util/guessKeyCodeFromKey.d.ts +9 -0
- package/dist/cjs/util/guessKeyCodeFromKey.js +32 -0
- package/dist/cjs/util/listPrefixMatch.d.ts +6 -0
- package/dist/cjs/util/listPrefixMatch.js +17 -0
- package/dist/cjs/util/stopPropagationOfScrollingWheelEvents.d.ts +2 -0
- package/dist/cjs/util/stopPropagationOfScrollingWheelEvents.js +17 -0
- package/dist/cjs/util/untilNextAnimationFrame.js +3 -3
- package/dist/cjs/util/waitForAll.js +3 -3
- package/dist/cjs/util/waitForTimeout.js +3 -3
- package/dist/cjs/version.d.ts +4 -0
- package/dist/cjs/version.js +5 -0
- package/dist/mjs/Editor.d.ts +91 -12
- package/dist/mjs/Editor.mjs +565 -563
- package/dist/mjs/EditorImage.d.ts +5 -2
- package/dist/mjs/EditorImage.mjs +248 -291
- package/dist/mjs/EventDispatcher.mjs +17 -20
- package/dist/mjs/Pointer.d.ts +3 -1
- package/dist/mjs/Pointer.mjs +40 -44
- package/dist/mjs/SVGLoader.d.ts +7 -1
- package/dist/mjs/SVGLoader.mjs +338 -466
- package/dist/mjs/UndoRedoHistory.mjs +27 -39
- package/dist/mjs/Viewport.d.ts +1 -4
- package/dist/mjs/Viewport.mjs +139 -187
- package/dist/mjs/commands/Command.mjs +21 -49
- package/dist/mjs/commands/Duplicate.mjs +22 -41
- package/dist/mjs/commands/Erase.mjs +30 -51
- package/dist/mjs/commands/SerializableCommand.mjs +16 -34
- package/dist/mjs/commands/UnresolvedCommand.mjs +10 -29
- package/dist/mjs/commands/invertCommand.mjs +24 -49
- package/dist/mjs/commands/localization.d.ts +1 -1
- package/dist/mjs/commands/localization.mjs +10 -10
- package/dist/mjs/commands/uniteCommands.mjs +52 -85
- package/dist/mjs/components/AbstractComponent.d.ts +11 -3
- package/dist/mjs/components/AbstractComponent.mjs +135 -166
- package/dist/mjs/components/BackgroundComponent.d.ts +3 -6
- package/dist/mjs/components/BackgroundComponent.mjs +107 -136
- package/dist/mjs/components/ImageComponent.d.ts +3 -5
- package/dist/mjs/components/ImageComponent.mjs +90 -174
- package/dist/mjs/components/RestylableComponent.d.ts +1 -1
- package/dist/mjs/components/RestylableComponent.mjs +35 -53
- package/dist/mjs/components/SVGGlobalAttributesObject.d.ts +1 -3
- package/dist/mjs/components/SVGGlobalAttributesObject.mjs +29 -50
- package/dist/mjs/components/Stroke.d.ts +4 -6
- package/dist/mjs/components/Stroke.mjs +89 -119
- package/dist/mjs/components/TextComponent.d.ts +2 -4
- package/dist/mjs/components/TextComponent.mjs +180 -228
- package/dist/mjs/components/UnknownSVGObject.d.ts +1 -3
- package/dist/mjs/components/UnknownSVGObject.mjs +26 -43
- package/dist/mjs/components/builders/ArrowBuilder.d.ts +1 -1
- package/dist/mjs/components/builders/ArrowBuilder.mjs +32 -35
- package/dist/mjs/components/builders/CircleBuilder.mjs +35 -38
- package/dist/mjs/components/builders/FreehandLineBuilder.d.ts +3 -2
- package/dist/mjs/components/builders/FreehandLineBuilder.mjs +52 -69
- package/dist/mjs/components/builders/LineBuilder.d.ts +1 -1
- package/dist/mjs/components/builders/LineBuilder.mjs +30 -32
- package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +1 -1
- package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.mjs +103 -115
- package/dist/mjs/components/builders/RectangleBuilder.d.ts +1 -1
- package/dist/mjs/components/builders/RectangleBuilder.mjs +27 -31
- package/dist/mjs/components/builders/types.d.ts +1 -1
- package/dist/mjs/components/lib.d.ts +3 -1
- package/dist/mjs/components/lib.mjs +1 -1
- package/dist/mjs/components/localization.mjs +5 -5
- package/dist/mjs/components/util/StrokeSmoother.d.ts +1 -2
- package/dist/mjs/components/util/StrokeSmoother.mjs +63 -69
- package/dist/mjs/components/util/describeComponentList.d.ts +1 -1
- package/dist/mjs/components/util/describeComponentList.mjs +4 -5
- package/dist/mjs/dialogs/makeAboutDialog.d.ts +15 -0
- package/dist/mjs/dialogs/makeAboutDialog.mjs +52 -0
- package/dist/mjs/inputEvents.d.ts +84 -0
- package/dist/mjs/inputEvents.mjs +34 -0
- package/dist/mjs/lib.d.ts +29 -13
- package/dist/mjs/lib.mjs +30 -13
- package/dist/mjs/localization.mjs +14 -13
- package/dist/mjs/localizations/de.mjs +116 -12
- package/dist/mjs/localizations/en.mjs +3 -12
- package/dist/mjs/localizations/es.mjs +61 -22
- package/dist/mjs/localizations/getLocalizationTable.mjs +12 -13
- package/dist/mjs/rendering/Display.d.ts +1 -2
- package/dist/mjs/rendering/Display.mjs +62 -79
- package/dist/mjs/rendering/RenderablePathSpec.d.ts +15 -0
- package/dist/mjs/rendering/RenderablePathSpec.mjs +64 -0
- package/dist/mjs/rendering/RenderingStyle.d.ts +4 -4
- package/dist/mjs/rendering/RenderingStyle.mjs +16 -26
- package/dist/mjs/rendering/TextRenderingStyle.d.ts +10 -10
- package/dist/mjs/rendering/TextRenderingStyle.mjs +12 -17
- package/dist/mjs/rendering/caching/CacheRecord.d.ts +1 -2
- package/dist/mjs/rendering/caching/CacheRecord.mjs +20 -23
- package/dist/mjs/rendering/caching/CacheRecordManager.d.ts +1 -1
- package/dist/mjs/rendering/caching/CacheRecordManager.mjs +13 -15
- package/dist/mjs/rendering/caching/RenderingCache.mjs +13 -17
- package/dist/mjs/rendering/caching/RenderingCacheNode.d.ts +1 -1
- package/dist/mjs/rendering/caching/RenderingCacheNode.mjs +94 -115
- package/dist/mjs/rendering/caching/testUtils.mjs +19 -21
- package/dist/mjs/rendering/caching/types.d.ts +3 -3
- package/dist/mjs/rendering/localization.mjs +6 -6
- package/dist/mjs/rendering/renderers/AbstractRenderer.d.ts +2 -11
- package/dist/mjs/rendering/renderers/AbstractRenderer.mjs +47 -52
- package/dist/mjs/rendering/renderers/CanvasRenderer.d.ts +3 -5
- package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +84 -103
- package/dist/mjs/rendering/renderers/DummyRenderer.d.ts +1 -4
- package/dist/mjs/rendering/renderers/DummyRenderer.mjs +51 -75
- package/dist/mjs/rendering/renderers/SVGRenderer.d.ts +5 -5
- package/dist/mjs/rendering/renderers/SVGRenderer.mjs +185 -171
- package/dist/mjs/rendering/renderers/TextOnlyRenderer.d.ts +1 -3
- package/dist/mjs/rendering/renderers/TextOnlyRenderer.mjs +43 -72
- package/dist/mjs/shortcuts/KeyBinding.d.ts +5 -0
- package/dist/mjs/shortcuts/KeyBinding.mjs +94 -71
- package/dist/mjs/shortcuts/KeyboardShortcutManager.d.ts +1 -1
- package/dist/mjs/shortcuts/KeyboardShortcutManager.mjs +32 -44
- package/dist/mjs/testing/createEditor.mjs +2 -2
- package/dist/mjs/testing/getUniquePointerId.mjs +4 -5
- package/dist/mjs/testing/sendPenEvent.d.ts +2 -2
- package/dist/mjs/testing/sendPenEvent.mjs +5 -5
- package/dist/mjs/testing/sendTouchEvent.d.ts +2 -2
- package/dist/mjs/testing/sendTouchEvent.mjs +8 -16
- package/dist/mjs/toolbar/AbstractToolbar.d.ts +166 -0
- package/dist/mjs/toolbar/AbstractToolbar.mjs +405 -0
- package/dist/mjs/toolbar/DropdownToolbar.d.ts +43 -0
- package/dist/mjs/toolbar/DropdownToolbar.mjs +168 -0
- package/dist/mjs/toolbar/EdgeToolbar.d.ts +47 -0
- package/dist/mjs/toolbar/EdgeToolbar.mjs +414 -0
- package/dist/mjs/toolbar/IconProvider.d.ts +54 -30
- package/dist/mjs/toolbar/IconProvider.mjs +644 -219
- package/dist/mjs/toolbar/constants.d.ts +1 -0
- package/dist/mjs/toolbar/constants.mjs +1 -0
- package/dist/mjs/toolbar/lib.d.ts +4 -2
- package/dist/mjs/toolbar/lib.mjs +3 -1
- package/dist/mjs/toolbar/localization.d.ts +9 -2
- package/dist/mjs/toolbar/localization.mjs +27 -20
- package/dist/mjs/toolbar/types.d.ts +7 -0
- package/dist/mjs/toolbar/widgets/ActionButtonWidget.d.ts +1 -1
- package/dist/mjs/toolbar/widgets/ActionButtonWidget.mjs +19 -39
- package/dist/mjs/toolbar/widgets/BaseToolWidget.d.ts +1 -1
- package/dist/mjs/toolbar/widgets/BaseToolWidget.mjs +30 -36
- package/dist/mjs/toolbar/widgets/BaseWidget.d.ts +60 -5
- package/dist/mjs/toolbar/widgets/BaseWidget.mjs +227 -176
- package/dist/mjs/toolbar/widgets/DocumentPropertiesWidget.mjs +98 -111
- package/dist/mjs/toolbar/widgets/EraserToolWidget.d.ts +1 -3
- package/dist/mjs/toolbar/widgets/EraserToolWidget.mjs +41 -73
- package/dist/mjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
- package/dist/mjs/toolbar/widgets/HandToolWidget.mjs +94 -136
- package/dist/mjs/toolbar/widgets/InsertImageWidget.d.ts +9 -7
- package/dist/mjs/toolbar/widgets/InsertImageWidget.mjs +140 -208
- package/dist/mjs/toolbar/widgets/OverflowWidget.mjs +30 -62
- package/dist/mjs/toolbar/widgets/PenToolWidget.d.ts +8 -1
- package/dist/mjs/toolbar/widgets/PenToolWidget.mjs +150 -225
- package/dist/mjs/toolbar/widgets/SelectionToolWidget.d.ts +3 -1
- package/dist/mjs/toolbar/widgets/SelectionToolWidget.mjs +97 -173
- package/dist/mjs/toolbar/widgets/TextToolWidget.mjs +59 -85
- package/dist/mjs/toolbar/widgets/components/makeColorInput.d.ts +10 -0
- package/dist/mjs/toolbar/{makeColorInput.mjs → widgets/components/makeColorInput.mjs} +53 -33
- package/dist/mjs/toolbar/widgets/components/makeFileInput.d.ts +12 -0
- package/dist/mjs/toolbar/widgets/components/makeFileInput.mjs +106 -0
- package/dist/mjs/toolbar/widgets/components/makeGridSelector.d.ts +24 -0
- package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +122 -0
- package/dist/mjs/toolbar/widgets/components/makeSeparator.d.ts +7 -0
- package/dist/mjs/toolbar/widgets/components/makeSeparator.mjs +14 -0
- package/dist/mjs/toolbar/widgets/components/makeThicknessSlider.d.ts +8 -0
- package/dist/mjs/toolbar/widgets/components/makeThicknessSlider.mjs +45 -0
- package/dist/mjs/toolbar/widgets/keybindings.mjs +5 -5
- package/dist/mjs/toolbar/widgets/layout/DropdownLayoutManager.d.ts +21 -0
- package/dist/mjs/toolbar/widgets/layout/DropdownLayoutManager.mjs +193 -0
- package/dist/mjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.d.ts +14 -0
- package/dist/mjs/toolbar/widgets/layout/EdgeToolbarLayoutManager.mjs +57 -0
- package/dist/mjs/toolbar/widgets/layout/types.d.ts +63 -0
- package/dist/mjs/toolbar/widgets/lib.d.ts +1 -1
- package/dist/mjs/toolbar/widgets/lib.mjs +1 -1
- package/dist/mjs/tools/BaseTool.d.ts +28 -9
- package/dist/mjs/tools/BaseTool.mjs +127 -50
- package/dist/mjs/tools/Eraser.d.ts +8 -1
- package/dist/mjs/tools/Eraser.mjs +72 -86
- package/dist/mjs/tools/FindTool.d.ts +1 -1
- package/dist/mjs/tools/FindTool.mjs +55 -75
- package/dist/mjs/tools/InputFilter/FunctionMapper.d.ts +12 -0
- package/dist/mjs/tools/InputFilter/FunctionMapper.mjs +15 -0
- package/dist/mjs/tools/InputFilter/InputMapper.d.ts +23 -0
- package/dist/mjs/tools/InputFilter/InputMapper.mjs +36 -0
- package/dist/mjs/tools/InputFilter/InputPipeline.d.ts +15 -0
- package/dist/mjs/tools/InputFilter/InputPipeline.mjs +49 -0
- package/dist/mjs/tools/InputFilter/InputStabilizer.d.ts +29 -0
- package/dist/mjs/tools/InputFilter/InputStabilizer.mjs +175 -0
- package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.d.ts +21 -0
- package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.mjs +78 -0
- package/dist/mjs/tools/PanZoom.d.ts +4 -2
- package/dist/mjs/tools/PanZoom.mjs +169 -235
- package/dist/mjs/tools/PasteHandler.d.ts +1 -1
- package/dist/mjs/tools/PasteHandler.mjs +42 -145
- package/dist/mjs/tools/Pen.d.ts +12 -11
- package/dist/mjs/tools/Pen.mjs +115 -154
- package/dist/mjs/tools/PipetteTool.d.ts +11 -2
- package/dist/mjs/tools/PipetteTool.mjs +47 -48
- package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +1 -1
- package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.mjs +9 -28
- package/dist/mjs/tools/SelectionTool/Selection.d.ts +5 -5
- package/dist/mjs/tools/SelectionTool/Selection.mjs +268 -401
- package/dist/mjs/tools/SelectionTool/SelectionHandle.d.ts +15 -5
- package/dist/mjs/tools/SelectionTool/SelectionHandle.mjs +62 -37
- package/dist/mjs/tools/SelectionTool/SelectionTool.d.ts +4 -4
- package/dist/mjs/tools/SelectionTool/SelectionTool.mjs +153 -179
- package/dist/mjs/tools/SelectionTool/TransformMode.d.ts +1 -1
- package/dist/mjs/tools/SelectionTool/TransformMode.mjs +52 -59
- package/dist/mjs/tools/SoundUITool.d.ts +2 -1
- package/dist/mjs/tools/SoundUITool.mjs +66 -84
- package/dist/mjs/tools/TextTool.d.ts +5 -3
- package/dist/mjs/tools/TextTool.mjs +155 -163
- package/dist/mjs/tools/ToolController.d.ts +16 -2
- package/dist/mjs/tools/ToolController.mjs +81 -84
- package/dist/mjs/tools/ToolEnabledGroup.mjs +6 -10
- package/dist/mjs/tools/ToolSwitcherShortcut.d.ts +1 -1
- package/dist/mjs/tools/ToolSwitcherShortcut.mjs +12 -32
- package/dist/mjs/tools/ToolbarShortcutHandler.d.ts +1 -1
- package/dist/mjs/tools/ToolbarShortcutHandler.mjs +13 -33
- package/dist/mjs/tools/UndoRedoShortcut.d.ts +1 -1
- package/dist/mjs/tools/UndoRedoShortcut.mjs +7 -26
- package/dist/mjs/tools/keybindings.mjs +34 -34
- package/dist/mjs/tools/localization.d.ts +2 -1
- package/dist/mjs/tools/localization.mjs +9 -8
- package/dist/mjs/types.d.ts +22 -80
- package/dist/mjs/types.mjs +7 -15
- package/dist/mjs/util/ReactiveValue.d.ts +65 -0
- package/dist/mjs/util/ReactiveValue.mjs +161 -0
- package/dist/mjs/util/assertions.mjs +5 -8
- package/dist/mjs/util/fileToBase64.mjs +6 -6
- package/dist/mjs/util/guessKeyCodeFromKey.d.ts +9 -0
- package/dist/mjs/util/guessKeyCodeFromKey.mjs +30 -0
- package/dist/mjs/util/listPrefixMatch.d.ts +6 -0
- package/dist/mjs/util/listPrefixMatch.mjs +15 -0
- package/dist/mjs/util/stopPropagationOfScrollingWheelEvents.d.ts +2 -0
- package/dist/mjs/util/stopPropagationOfScrollingWheelEvents.mjs +15 -0
- package/dist/mjs/util/untilNextAnimationFrame.mjs +3 -3
- package/dist/mjs/util/waitForAll.mjs +3 -3
- package/dist/mjs/util/waitForTimeout.mjs +3 -3
- package/dist/mjs/version.d.ts +4 -0
- package/dist/mjs/version.mjs +3 -0
- package/dist-test/test_imports/package.json +1 -1
- package/dist-test/test_imports/test-imports.js +5 -11
- package/dist-test/test_imports/test-require.cjs +6 -11
- package/package.json +11 -22
- package/src/Coloris.css +8 -8
- package/src/Editor.loadFrom.test.ts +1 -1
- package/src/Editor.scss +148 -0
- package/src/Editor.test.ts +107 -0
- package/src/Editor.toSVG.test.ts +184 -1
- package/src/Editor.ts +325 -53
- package/src/EditorImage.test.ts +4 -7
- package/src/EditorImage.ts +10 -4
- package/src/Pointer.ts +18 -5
- package/src/SVGLoader.ts +77 -15
- package/src/UndoRedoHistory.test.ts +2 -1
- package/src/Viewport.ts +1 -4
- package/src/commands/Erase.ts +1 -0
- package/src/commands/localization.ts +1 -1
- package/src/commands/uniteCommands.test.ts +3 -3
- package/src/components/AbstractComponent.transformBy.test.ts +2 -1
- package/src/components/AbstractComponent.ts +12 -3
- package/src/components/BackgroundComponent.test.ts +1 -2
- package/src/components/BackgroundComponent.ts +3 -8
- package/src/components/ImageComponent.ts +1 -3
- package/src/components/RestylableComponent.ts +1 -1
- package/src/components/SVGGlobalAttributesObject.ts +1 -3
- package/src/components/Stroke.test.ts +4 -6
- package/src/components/Stroke.ts +5 -7
- package/src/components/TextComponent.test.ts +1 -3
- package/src/components/TextComponent.ts +1 -4
- package/src/components/UnknownSVGObject.ts +3 -3
- package/src/components/builders/ArrowBuilder.ts +1 -2
- package/src/components/builders/CircleBuilder.ts +3 -5
- package/src/components/builders/FreehandLineBuilder.test.ts +2 -3
- package/src/components/builders/FreehandLineBuilder.ts +3 -5
- package/src/components/builders/LineBuilder.ts +3 -3
- package/src/components/builders/PressureSensitiveFreehandLineBuilder.ts +3 -4
- package/src/components/builders/RectangleBuilder.ts +3 -4
- package/src/components/builders/types.ts +1 -1
- package/src/components/lib.ts +1 -1
- package/src/components/util/StrokeSmoother.ts +7 -7
- package/src/dialogs/dialogs.scss +36 -0
- package/src/dialogs/makeAboutDialog.scss +41 -0
- package/src/dialogs/makeAboutDialog.ts +82 -0
- package/src/inputEvents.ts +143 -0
- package/src/lib.ts +35 -13
- package/src/localizations/de.ts +2 -2
- package/src/localizations/es.ts +5 -5
- package/src/rendering/Display.ts +1 -2
- package/src/rendering/RenderablePathSpec.ts +88 -0
- package/src/rendering/RenderingStyle.test.ts +1 -1
- package/src/rendering/RenderingStyle.ts +1 -1
- package/src/rendering/caching/CacheRecord.test.ts +1 -2
- package/src/rendering/caching/CacheRecord.ts +1 -2
- package/src/rendering/caching/CacheRecordManager.ts +1 -1
- package/src/rendering/caching/RenderingCache.test.ts +3 -4
- package/src/rendering/caching/RenderingCache.ts +1 -1
- package/src/rendering/caching/RenderingCacheNode.ts +1 -2
- package/src/rendering/caching/testUtils.ts +1 -1
- package/src/rendering/caching/types.ts +3 -3
- package/src/rendering/renderers/AbstractRenderer.ts +4 -14
- package/src/rendering/renderers/CanvasRenderer.ts +17 -12
- package/src/rendering/renderers/DummyRenderer.test.ts +1 -2
- package/src/rendering/renderers/DummyRenderer.ts +1 -4
- package/src/rendering/renderers/SVGRenderer.ts +68 -11
- package/src/rendering/renderers/TextOnlyRenderer.ts +1 -4
- package/src/shortcuts/KeyBinding.test.ts +10 -0
- package/src/shortcuts/KeyBinding.ts +74 -35
- package/src/shortcuts/KeyboardShortcutManager.test.ts +1 -1
- package/src/styles.js +1 -1
- package/src/testing/sendPenEvent.ts +2 -2
- package/src/testing/sendTouchEvent.ts +2 -2
- package/src/toolbar/{toolbar.css → AbstractToolbar.scss} +47 -85
- package/src/toolbar/AbstractToolbar.ts +542 -0
- package/src/toolbar/DropdownToolbar.scss +46 -0
- package/src/toolbar/DropdownToolbar.ts +220 -0
- package/src/toolbar/EdgeToolbar.scss +511 -0
- package/src/toolbar/EdgeToolbar.test.ts +54 -0
- package/src/toolbar/EdgeToolbar.ts +543 -0
- package/src/toolbar/IconProvider.ts +189 -133
- package/src/toolbar/constants.ts +1 -0
- package/src/toolbar/lib.ts +4 -2
- package/src/toolbar/localization.ts +39 -17
- package/src/toolbar/toolbar.scss +11 -0
- package/src/toolbar/types.ts +8 -0
- package/src/toolbar/widgets/ActionButtonWidget.ts +2 -2
- package/src/toolbar/widgets/BaseToolWidget.ts +17 -1
- package/src/toolbar/widgets/BaseWidget.ts +179 -112
- package/src/toolbar/widgets/DocumentPropertiesWidget.scss +7 -0
- package/src/toolbar/widgets/DocumentPropertiesWidget.ts +26 -10
- package/src/toolbar/widgets/EraserToolWidget.ts +21 -22
- package/src/toolbar/widgets/HandToolWidget.scss +14 -0
- package/src/toolbar/widgets/HandToolWidget.ts +21 -32
- package/src/toolbar/widgets/InsertImageWidget.scss +41 -0
- package/src/toolbar/widgets/InsertImageWidget.ts +90 -65
- package/src/toolbar/widgets/PenToolWidget.css +0 -51
- package/src/toolbar/widgets/PenToolWidget.ts +106 -146
- package/src/toolbar/widgets/SelectionToolWidget.scss +6 -0
- package/src/toolbar/widgets/SelectionToolWidget.ts +83 -85
- package/src/toolbar/widgets/TextToolWidget.ts +9 -5
- package/src/toolbar/widgets/components/components.scss +5 -0
- package/src/toolbar/widgets/components/makeColorInput.scss +82 -0
- package/src/toolbar/{makeColorInput.ts → widgets/components/makeColorInput.ts} +39 -14
- package/src/toolbar/widgets/components/makeFileInput.scss +77 -0
- package/src/toolbar/widgets/components/makeFileInput.ts +128 -0
- package/src/toolbar/widgets/components/makeGridSelector.scss +60 -0
- package/src/toolbar/widgets/components/makeGridSelector.ts +179 -0
- package/src/toolbar/widgets/components/makeSeparator.scss +14 -0
- package/src/toolbar/widgets/components/makeSeparator.ts +17 -0
- package/src/toolbar/widgets/components/makeThicknessSlider.scss +9 -0
- package/src/toolbar/widgets/components/makeThicknessSlider.ts +62 -0
- package/src/toolbar/widgets/keybindings.ts +1 -3
- package/src/toolbar/widgets/layout/DropdownLayoutManager.ts +262 -0
- package/src/toolbar/widgets/layout/EdgeToolbarLayoutManager.ts +71 -0
- package/src/toolbar/widgets/layout/types.ts +74 -0
- package/src/toolbar/widgets/lib.ts +2 -2
- package/src/tools/BaseTool.ts +102 -30
- package/src/tools/Eraser.test.ts +2 -2
- package/src/tools/Eraser.ts +24 -11
- package/src/tools/FindTool.css +3 -3
- package/src/tools/FindTool.test.ts +67 -0
- package/src/tools/FindTool.ts +3 -3
- package/src/tools/InputFilter/FunctionMapper.ts +17 -0
- package/src/tools/InputFilter/InputMapper.ts +41 -0
- package/src/tools/InputFilter/InputPipeline.test.ts +41 -0
- package/src/tools/InputFilter/InputPipeline.ts +34 -0
- package/src/tools/InputFilter/InputStabilizer.ts +254 -0
- package/src/tools/InputFilter/StrokeKeyboardControl.ts +104 -0
- package/src/tools/PanZoom.test.ts +3 -13
- package/src/tools/PanZoom.ts +33 -10
- package/src/tools/PasteHandler.ts +2 -3
- package/src/tools/Pen.test.ts +2 -4
- package/src/tools/Pen.ts +54 -70
- package/src/tools/PipetteTool.ts +31 -2
- package/src/tools/SelectionTool/SelectAllShortcutHandler.ts +1 -1
- package/src/tools/SelectionTool/Selection.ts +52 -16
- package/src/tools/SelectionTool/SelectionHandle.ts +46 -12
- package/src/tools/SelectionTool/SelectionTool.css +23 -11
- package/src/tools/SelectionTool/SelectionTool.test.ts +130 -21
- package/src/tools/SelectionTool/SelectionTool.ts +62 -48
- package/src/tools/SelectionTool/TransformMode.ts +1 -3
- package/src/tools/SoundUITool.ts +13 -4
- package/src/tools/TextTool.ts +29 -30
- package/src/tools/ToolController.ts +60 -36
- package/src/tools/ToolSwitcherShortcut.ts +1 -1
- package/src/tools/ToolbarShortcutHandler.ts +1 -1
- package/src/tools/UndoRedoShortcut.test.ts +10 -4
- package/src/tools/UndoRedoShortcut.ts +1 -1
- package/src/tools/keybindings.ts +17 -17
- package/src/tools/localization.ts +4 -2
- package/src/tools/tools.scss +4 -0
- package/src/types.ts +25 -113
- package/src/util/ReactiveValue.test.ts +168 -0
- package/src/util/ReactiveValue.ts +241 -0
- package/src/util/guessKeyCodeFromKey.ts +36 -0
- package/src/util/listPrefixMatch.ts +19 -0
- package/src/util/stopPropagationOfScrollingWheelEvents.ts +20 -0
- package/src/version.test.ts +12 -0
- package/src/version.ts +3 -0
- package/tsconfig.json +1 -1
- package/typedoc.json +4 -0
- package/dist/cjs/Color4.d.ts +0 -69
- package/dist/cjs/Color4.js +0 -263
- package/dist/cjs/math/Mat33.d.ts +0 -123
- package/dist/cjs/math/Mat33.js +0 -340
- package/dist/cjs/math/Vec2.d.ts +0 -33
- package/dist/cjs/math/Vec2.js +0 -37
- package/dist/cjs/math/Vec3.d.ts +0 -106
- package/dist/cjs/math/Vec3.js +0 -183
- package/dist/cjs/math/lib.d.ts +0 -7
- package/dist/cjs/math/lib.js +0 -15
- package/dist/cjs/math/polynomial/solveQuadratic.d.ts +0 -9
- package/dist/cjs/math/polynomial/solveQuadratic.js +0 -39
- package/dist/cjs/math/rounding.d.ts +0 -4
- package/dist/cjs/math/rounding.js +0 -140
- package/dist/cjs/math/shapes/Abstract2DShape.d.ts +0 -49
- package/dist/cjs/math/shapes/Abstract2DShape.js +0 -42
- package/dist/cjs/math/shapes/BezierJSWrapper.d.ts +0 -36
- package/dist/cjs/math/shapes/BezierJSWrapper.js +0 -109
- package/dist/cjs/math/shapes/CubicBezier.d.ts +0 -17
- package/dist/cjs/math/shapes/CubicBezier.js +0 -50
- package/dist/cjs/math/shapes/LineSegment2.d.ts +0 -70
- package/dist/cjs/math/shapes/LineSegment2.js +0 -204
- package/dist/cjs/math/shapes/Path.d.ts +0 -93
- package/dist/cjs/math/shapes/Path.js +0 -865
- package/dist/cjs/math/shapes/PointShape2D.d.ts +0 -18
- package/dist/cjs/math/shapes/PointShape2D.js +0 -46
- package/dist/cjs/math/shapes/QuadraticBezier.d.ts +0 -34
- package/dist/cjs/math/shapes/QuadraticBezier.js +0 -133
- package/dist/cjs/math/shapes/Rect2.d.ts +0 -57
- package/dist/cjs/math/shapes/Rect2.js +0 -311
- package/dist/cjs/math/shapes/Triangle.d.ts +0 -46
- package/dist/cjs/math/shapes/Triangle.js +0 -148
- package/dist/cjs/toolbar/HTMLToolbar.d.ts +0 -105
- package/dist/cjs/toolbar/HTMLToolbar.js +0 -465
- package/dist/cjs/toolbar/makeColorInput.d.ts +0 -6
- package/dist/mjs/Color4.d.ts +0 -69
- package/dist/mjs/Color4.mjs +0 -260
- package/dist/mjs/Color4.test.d.ts +0 -1
- package/dist/mjs/math/Mat33.d.ts +0 -123
- package/dist/mjs/math/Mat33.mjs +0 -338
- package/dist/mjs/math/Mat33.test.d.ts +0 -1
- package/dist/mjs/math/Vec2.d.ts +0 -33
- package/dist/mjs/math/Vec2.mjs +0 -34
- package/dist/mjs/math/Vec2.test.d.ts +0 -1
- package/dist/mjs/math/Vec3.d.ts +0 -106
- package/dist/mjs/math/Vec3.mjs +0 -181
- package/dist/mjs/math/Vec3.test.d.ts +0 -1
- package/dist/mjs/math/lib.d.ts +0 -7
- package/dist/mjs/math/lib.mjs +0 -7
- package/dist/mjs/math/polynomial/solveQuadratic.d.ts +0 -9
- package/dist/mjs/math/polynomial/solveQuadratic.mjs +0 -37
- package/dist/mjs/math/polynomial/solveQuadratic.test.d.ts +0 -1
- package/dist/mjs/math/rounding.d.ts +0 -4
- package/dist/mjs/math/rounding.mjs +0 -133
- package/dist/mjs/math/rounding.test.d.ts +0 -1
- package/dist/mjs/math/shapes/Abstract2DShape.d.ts +0 -49
- package/dist/mjs/math/shapes/Abstract2DShape.mjs +0 -40
- package/dist/mjs/math/shapes/BezierJSWrapper.d.ts +0 -36
- package/dist/mjs/math/shapes/BezierJSWrapper.mjs +0 -107
- package/dist/mjs/math/shapes/CubicBezier.d.ts +0 -17
- package/dist/mjs/math/shapes/CubicBezier.mjs +0 -48
- package/dist/mjs/math/shapes/LineSegment2.d.ts +0 -70
- package/dist/mjs/math/shapes/LineSegment2.mjs +0 -202
- package/dist/mjs/math/shapes/LineSegment2.test.d.ts +0 -1
- package/dist/mjs/math/shapes/Path.d.ts +0 -93
- package/dist/mjs/math/shapes/Path.fromString.test.d.ts +0 -1
- package/dist/mjs/math/shapes/Path.mjs +0 -862
- package/dist/mjs/math/shapes/Path.test.d.ts +0 -1
- package/dist/mjs/math/shapes/Path.toString.test.d.ts +0 -1
- package/dist/mjs/math/shapes/PointShape2D.d.ts +0 -18
- package/dist/mjs/math/shapes/PointShape2D.mjs +0 -44
- package/dist/mjs/math/shapes/QuadraticBezier.d.ts +0 -34
- package/dist/mjs/math/shapes/QuadraticBezier.mjs +0 -131
- package/dist/mjs/math/shapes/QuadraticBezier.test.d.ts +0 -1
- package/dist/mjs/math/shapes/Rect2.d.ts +0 -57
- package/dist/mjs/math/shapes/Rect2.mjs +0 -309
- package/dist/mjs/math/shapes/Rect2.test.d.ts +0 -1
- package/dist/mjs/math/shapes/Triangle.d.ts +0 -46
- package/dist/mjs/math/shapes/Triangle.mjs +0 -146
- package/dist/mjs/math/shapes/Triangle.test.d.ts +0 -1
- package/dist/mjs/toolbar/HTMLToolbar.d.ts +0 -105
- package/dist/mjs/toolbar/HTMLToolbar.mjs +0 -462
- package/dist/mjs/toolbar/makeColorInput.d.ts +0 -6
- package/src/Color4.test.ts +0 -47
- package/src/Color4.ts +0 -304
- package/src/Editor.css +0 -98
- package/src/math/Mat33.test.ts +0 -244
- package/src/math/Mat33.ts +0 -442
- package/src/math/Vec2.test.ts +0 -30
- package/src/math/Vec2.ts +0 -40
- package/src/math/Vec3.test.ts +0 -44
- package/src/math/Vec3.ts +0 -218
- package/src/math/lib.ts +0 -15
- package/src/math/polynomial/solveQuadratic.test.ts +0 -39
- package/src/math/polynomial/solveQuadratic.ts +0 -43
- package/src/math/rounding.test.ts +0 -65
- package/src/math/rounding.ts +0 -156
- package/src/math/shapes/Abstract2DShape.ts +0 -63
- package/src/math/shapes/BezierJSWrapper.ts +0 -93
- package/src/math/shapes/CubicBezier.ts +0 -35
- package/src/math/shapes/LineSegment2.test.ts +0 -99
- package/src/math/shapes/LineSegment2.ts +0 -231
- package/src/math/shapes/Path.fromString.test.ts +0 -223
- package/src/math/shapes/Path.test.ts +0 -309
- package/src/math/shapes/Path.toString.test.ts +0 -77
- package/src/math/shapes/Path.ts +0 -1027
- package/src/math/shapes/PointShape2D.ts +0 -33
- package/src/math/shapes/QuadraticBezier.test.ts +0 -31
- package/src/math/shapes/QuadraticBezier.ts +0 -141
- package/src/math/shapes/Rect2.test.ts +0 -209
- package/src/math/shapes/Rect2.ts +0 -344
- package/src/math/shapes/Triangle.test.ts +0 -61
- package/src/math/shapes/Triangle.ts +0 -139
- package/src/toolbar/HTMLToolbar.ts +0 -567
- package/src/toolbar/widgets/InsertImageWidget.css +0 -44
- package/src/tools/tools.css +0 -4
- /package/dist/cjs/{Color4.test.d.ts → Editor.test.d.ts} +0 -0
- /package/dist/cjs/{math/Mat33.test.d.ts → toolbar/EdgeToolbar.test.d.ts} +0 -0
- /package/dist/cjs/{math/Vec2.test.d.ts → tools/FindTool.test.d.ts} +0 -0
- /package/dist/cjs/{math/Vec3.test.d.ts → tools/InputFilter/InputPipeline.test.d.ts} +0 -0
- /package/dist/cjs/{math/polynomial/solveQuadratic.test.d.ts → util/ReactiveValue.test.d.ts} +0 -0
- /package/dist/cjs/{math/rounding.test.d.ts → version.test.d.ts} +0 -0
- /package/dist/{cjs/math/shapes/LineSegment2.test.d.ts → mjs/Editor.test.d.ts} +0 -0
- /package/dist/{cjs/math/shapes/Path.fromString.test.d.ts → mjs/toolbar/EdgeToolbar.test.d.ts} +0 -0
- /package/dist/{cjs/math/shapes/Path.test.d.ts → mjs/toolbar/widgets/layout/types.mjs} +0 -0
- /package/dist/{cjs/math/shapes/Path.toString.test.d.ts → mjs/tools/FindTool.test.d.ts} +0 -0
- /package/dist/{cjs/math/shapes/QuadraticBezier.test.d.ts → mjs/tools/InputFilter/InputPipeline.test.d.ts} +0 -0
- /package/dist/{cjs/math/shapes/Rect2.test.d.ts → mjs/util/ReactiveValue.test.d.ts} +0 -0
- /package/dist/{cjs/math/shapes/Triangle.test.d.ts → mjs/version.test.d.ts} +0 -0
package/src/tools/PanZoom.ts
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
|
2
2
|
import { Editor } from '../Editor';
|
3
|
-
import Mat33 from '
|
4
|
-
import { Point2, Vec2 } from '../math/Vec2';
|
5
|
-
import Vec3 from '../math/Vec3';
|
3
|
+
import { Mat33, Vec3, Point2, Vec2 } from '@js-draw/math';
|
6
4
|
import Pointer, { PointerDevice } from '../Pointer';
|
7
|
-
import { EditorEventType
|
5
|
+
import { EditorEventType } from '../types';
|
6
|
+
import { KeyPressEvent, PointerEvt, WheelEvt } from '../inputEvents';
|
8
7
|
import untilNextAnimationFrame from '../util/untilNextAnimationFrame';
|
9
8
|
import { Viewport, ViewportTransform } from '../Viewport';
|
10
9
|
import BaseTool from './BaseTool';
|
@@ -47,7 +46,7 @@ class InertialScroller {
|
|
47
46
|
}
|
48
47
|
|
49
48
|
this.currentVelocity = this.initialVelocity;
|
50
|
-
let lastTime =
|
49
|
+
let lastTime = performance.now();
|
51
50
|
this.running = true;
|
52
51
|
|
53
52
|
const maxSpeed = 5000; // units/s
|
@@ -57,7 +56,7 @@ class InertialScroller {
|
|
57
56
|
}
|
58
57
|
|
59
58
|
while (this.running && this.currentVelocity.magnitude() > minSpeed) {
|
60
|
-
const nowTime =
|
59
|
+
const nowTime = performance.now();
|
61
60
|
const dt = (nowTime - lastTime) / 1000;
|
62
61
|
|
63
62
|
this.currentVelocity = this.currentVelocity.times(Math.pow(1/8, dt));
|
@@ -91,6 +90,10 @@ class InertialScroller {
|
|
91
90
|
export default class PanZoom extends BaseTool {
|
92
91
|
private transform: ViewportTransform|null = null;
|
93
92
|
|
93
|
+
// Distance between two touch points at the **start** of a gesture.
|
94
|
+
private startDist: number;
|
95
|
+
|
96
|
+
// Distance between two touch points the last time input data was received.
|
94
97
|
private lastDist: number;
|
95
98
|
private lastScreenCenter: Point2;
|
96
99
|
private lastTimestamp: number;
|
@@ -98,6 +101,10 @@ export default class PanZoom extends BaseTool {
|
|
98
101
|
private initialTouchAngle: number = 0;
|
99
102
|
private initialViewportRotation: number = 0;
|
100
103
|
|
104
|
+
// Set to `true` only when scaling has started (if two fingers are down and have moved
|
105
|
+
// far enough).
|
106
|
+
private isScaling: boolean = false;
|
107
|
+
|
101
108
|
private inertialScroller: InertialScroller|null = null;
|
102
109
|
private velocity: Vec2|null = null;
|
103
110
|
|
@@ -142,9 +149,11 @@ export default class PanZoom extends BaseTool {
|
|
142
149
|
if (allAreTouch && pointers.length === 2 && this.mode & PanZoomMode.TwoFingerTouchGestures) {
|
143
150
|
const { screenCenter, angle, dist } = this.computePinchData(pointers[0], pointers[1]);
|
144
151
|
this.lastDist = dist;
|
152
|
+
this.startDist = dist;
|
145
153
|
this.lastScreenCenter = screenCenter;
|
146
154
|
this.initialTouchAngle = angle;
|
147
155
|
this.initialViewportRotation = this.editor.viewport.getRotationAngle();
|
156
|
+
this.isScaling = false;
|
148
157
|
|
149
158
|
handlingGesture = true;
|
150
159
|
} else if (pointers.length === 1 && (
|
@@ -153,11 +162,12 @@ export default class PanZoom extends BaseTool {
|
|
153
162
|
|| (this.mode & PanZoomMode.SinglePointerGestures)
|
154
163
|
)) {
|
155
164
|
this.lastScreenCenter = pointers[0].screenPos;
|
165
|
+
this.isScaling = false;
|
156
166
|
handlingGesture = true;
|
157
167
|
}
|
158
168
|
|
159
169
|
if (handlingGesture) {
|
160
|
-
this.lastTimestamp =
|
170
|
+
this.lastTimestamp = performance.now();
|
161
171
|
this.transform ??= Viewport.transformBy(Mat33.identity);
|
162
172
|
this.editor.display.setDraftMode(true);
|
163
173
|
}
|
@@ -167,7 +177,7 @@ export default class PanZoom extends BaseTool {
|
|
167
177
|
|
168
178
|
private updateVelocity(currentCenter: Point2) {
|
169
179
|
const deltaPos = currentCenter.minus(this.lastScreenCenter);
|
170
|
-
let deltaTime = (
|
180
|
+
let deltaTime = (performance.now() - this.lastTimestamp) / 1000;
|
171
181
|
|
172
182
|
// Ignore duplicate events, unless there has been enough time between them.
|
173
183
|
if (deltaPos.magnitude() === 0 && deltaTime < 0.1) {
|
@@ -245,8 +255,21 @@ export default class PanZoom extends BaseTool {
|
|
245
255
|
|
246
256
|
this.updateVelocity(screenCenter);
|
247
257
|
|
258
|
+
let scaleFactor = 1;
|
259
|
+
if (this.isScaling) {
|
260
|
+
scaleFactor = dist / this.lastDist;
|
261
|
+
} else {
|
262
|
+
const initialScaleFactor = dist / this.startDist;
|
263
|
+
|
264
|
+
// Only start scaling if scaling done so far exceeds some threshold.
|
265
|
+
if (initialScaleFactor > 1.05 || initialScaleFactor < 0.95) {
|
266
|
+
scaleFactor = initialScaleFactor;
|
267
|
+
this.isScaling = true;
|
268
|
+
}
|
269
|
+
}
|
270
|
+
|
248
271
|
const transformUpdate = Mat33.translation(delta)
|
249
|
-
.rightMul(Mat33.scaling2D(
|
272
|
+
.rightMul(Mat33.scaling2D(scaleFactor, canvasCenter))
|
250
273
|
.rightMul(Mat33.zRotation(deltaRotation, canvasCenter));
|
251
274
|
|
252
275
|
this.lastScreenCenter = screenCenter;
|
@@ -279,7 +302,7 @@ export default class PanZoom extends BaseTool {
|
|
279
302
|
lastTransform.unapply(this.editor);
|
280
303
|
this.transform.apply(this.editor);
|
281
304
|
|
282
|
-
this.lastTimestamp =
|
305
|
+
this.lastTimestamp = performance.now();
|
283
306
|
}
|
284
307
|
|
285
308
|
public override onPointerUp(event: PointerEvt): void {
|
@@ -2,11 +2,10 @@ import Editor from '../Editor';
|
|
2
2
|
import AbstractComponent from '../components/AbstractComponent';
|
3
3
|
import TextComponent from '../components/TextComponent';
|
4
4
|
import SVGLoader from '../SVGLoader';
|
5
|
-
import { PasteEvent } from '../
|
6
|
-
import Mat33 from '
|
5
|
+
import { PasteEvent } from '../inputEvents';
|
6
|
+
import { Mat33, Color4 } from '@js-draw/math';
|
7
7
|
import BaseTool from './BaseTool';
|
8
8
|
import TextTool from './TextTool';
|
9
|
-
import Color4 from '../Color4';
|
10
9
|
import ImageComponent from '../components/ImageComponent';
|
11
10
|
import TextRenderingStyle from '../rendering/TextRenderingStyle';
|
12
11
|
|
package/src/tools/Pen.test.ts
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
|
2
2
|
import PenTool from './Pen';
|
3
|
-
import { Vec2 } from '
|
3
|
+
import { Mat33, Rect2, Vec2 } from '@js-draw/math';
|
4
4
|
import createEditor from '../testing/createEditor';
|
5
|
-
import { InputEvtType } from '../
|
6
|
-
import Rect2 from '../math/shapes/Rect2';
|
5
|
+
import { InputEvtType } from '../inputEvents';
|
7
6
|
import StrokeComponent from '../components/Stroke';
|
8
|
-
import Mat33 from '../math/Mat33';
|
9
7
|
import { makeFreehandLineBuilder } from '../components/builders/FreehandLineBuilder';
|
10
8
|
import sendPenEvent from '../testing/sendPenEvent';
|
11
9
|
import sendTouchEvent from '../testing/sendTouchEvent';
|
package/src/tools/Pen.ts
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
-
import Color4 from '
|
1
|
+
import { Color4 } from '@js-draw/math';
|
2
2
|
import Editor from '../Editor';
|
3
3
|
import EditorImage from '../EditorImage';
|
4
4
|
import Pointer, { PointerDevice } from '../Pointer';
|
5
5
|
import { makeFreehandLineBuilder } from '../components/builders/FreehandLineBuilder';
|
6
|
-
import { EditorEventType,
|
6
|
+
import { EditorEventType, StrokeDataPoint } from '../types';
|
7
|
+
import { KeyPressEvent, PointerEvt } from '../inputEvents';
|
7
8
|
import BaseTool from './BaseTool';
|
8
9
|
import { ComponentBuilder, ComponentBuilderFactory } from '../components/builders/types';
|
9
10
|
import { undoKeyboardShortcutId } from './keybindings';
|
10
|
-
import { decreaseSizeKeyboardShortcutId, increaseSizeKeyboardShortcutId
|
11
|
-
|
12
|
-
|
11
|
+
import { decreaseSizeKeyboardShortcutId, increaseSizeKeyboardShortcutId } from './keybindings';
|
12
|
+
import InputStabilizer from './InputFilter/InputStabilizer';
|
13
|
+
import { MutableReactiveValue, ReactiveValue } from '../util/ReactiveValue';
|
13
14
|
|
14
15
|
export interface PenStyle {
|
15
|
-
color: Color4;
|
16
|
-
thickness: number;
|
16
|
+
readonly color: Color4;
|
17
|
+
readonly thickness: number;
|
18
|
+
readonly factory: ComponentBuilderFactory;
|
17
19
|
}
|
18
20
|
|
19
21
|
export default class Pen extends BaseTool {
|
@@ -21,43 +23,36 @@ export default class Pen extends BaseTool {
|
|
21
23
|
private lastPoint: StrokeDataPoint|null = null;
|
22
24
|
private startPoint: StrokeDataPoint|null = null;
|
23
25
|
private currentDeviceType: PointerDevice|null = null;
|
24
|
-
|
25
|
-
private
|
26
|
-
private angleLockEnabled: boolean = false;
|
26
|
+
private styleValue: MutableReactiveValue<PenStyle>;
|
27
|
+
private style: PenStyle;
|
27
28
|
|
28
29
|
public constructor(
|
29
30
|
private editor: Editor,
|
30
31
|
description: string,
|
31
|
-
|
32
|
-
private builderFactory: ComponentBuilderFactory = makeFreehandLineBuilder,
|
32
|
+
style: Partial<PenStyle>,
|
33
33
|
) {
|
34
34
|
super(editor.notifier, description);
|
35
|
-
}
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
this.styleValue = ReactiveValue.fromInitialValue<PenStyle>({
|
37
|
+
factory: makeFreehandLineBuilder,
|
38
|
+
color: Color4.blue,
|
39
|
+
thickness: 4,
|
40
|
+
...style,
|
41
|
+
});
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
this.styleValue.onUpdateAndNow(newValue => {
|
44
|
+
this.style = newValue;
|
45
|
+
this.noteUpdated();
|
46
|
+
});
|
47
|
+
}
|
46
48
|
|
47
|
-
|
48
|
-
|
49
|
+
private getPressureMultiplier() {
|
50
|
+
const thickness = this.style.thickness;
|
51
|
+
return 1 / this.editor.viewport.getScaleFactor() * thickness;
|
49
52
|
}
|
50
53
|
|
51
54
|
// Converts a `pointer` to a `StrokeDataPoint`.
|
52
55
|
protected toStrokePoint(pointer: Pointer): StrokeDataPoint {
|
53
|
-
if (this.angleLockEnabled && this.lastPoint) {
|
54
|
-
pointer = this.xyAxesSnap(pointer);
|
55
|
-
}
|
56
|
-
|
57
|
-
if (this.snapToGridEnabled) {
|
58
|
-
pointer = pointer.snappedToGrid(this.editor.viewport);
|
59
|
-
}
|
60
|
-
|
61
56
|
const minPressure = 0.3;
|
62
57
|
let pressure = Math.max(pointer.pressure ?? 1.0, minPressure);
|
63
58
|
|
@@ -114,7 +109,7 @@ export default class Pen extends BaseTool {
|
|
114
109
|
|
115
110
|
if ((allPointers.length === 1 && !isEraser) || anyDeviceIsStylus) {
|
116
111
|
this.startPoint = this.toStrokePoint(current);
|
117
|
-
this.builder = this.
|
112
|
+
this.builder = this.style.factory(this.startPoint, this.editor.viewport);
|
118
113
|
this.currentDeviceType = current.device;
|
119
114
|
return true;
|
120
115
|
}
|
@@ -208,39 +203,54 @@ export default class Pen extends BaseTool {
|
|
208
203
|
|
209
204
|
public setColor(color: Color4): void {
|
210
205
|
if (color.toHexString() !== this.style.color.toHexString()) {
|
211
|
-
this.
|
206
|
+
this.styleValue.set({
|
212
207
|
...this.style,
|
213
208
|
color,
|
214
|
-
};
|
215
|
-
this.noteUpdated();
|
209
|
+
});
|
216
210
|
}
|
217
211
|
}
|
218
212
|
|
219
213
|
public setThickness(thickness: number) {
|
220
214
|
if (thickness !== this.style.thickness) {
|
221
|
-
this.
|
215
|
+
this.styleValue.set({
|
222
216
|
...this.style,
|
223
217
|
thickness,
|
224
|
-
};
|
225
|
-
this.noteUpdated();
|
218
|
+
});
|
226
219
|
}
|
227
220
|
}
|
228
221
|
|
229
222
|
public setStrokeFactory(factory: ComponentBuilderFactory) {
|
230
|
-
if (factory !== this.
|
231
|
-
this.
|
232
|
-
|
223
|
+
if (factory !== this.style.factory) {
|
224
|
+
this.styleValue.set({
|
225
|
+
...this.style,
|
226
|
+
factory,
|
227
|
+
});
|
228
|
+
}
|
229
|
+
}
|
230
|
+
|
231
|
+
public setHasStabilization(hasStabilization: boolean) {
|
232
|
+
const hasInputMapper = !!this.getInputMapper();
|
233
|
+
|
234
|
+
// TODO: Currently, this assumes that there is no other input mapper.
|
235
|
+
if (hasStabilization === hasInputMapper) {
|
236
|
+
return;
|
237
|
+
}
|
238
|
+
|
239
|
+
if (hasInputMapper) {
|
240
|
+
this.setInputMapper(null);
|
241
|
+
} else {
|
242
|
+
this.setInputMapper(new InputStabilizer(this.editor.viewport));
|
233
243
|
}
|
244
|
+
this.noteUpdated();
|
234
245
|
}
|
235
246
|
|
236
247
|
public getThickness() { return this.style.thickness; }
|
237
248
|
public getColor() { return this.style.color; }
|
238
|
-
public getStrokeFactory() { return this.
|
249
|
+
public getStrokeFactory() { return this.style.factory; }
|
250
|
+
public getStyleValue() { return this.styleValue; }
|
239
251
|
|
240
252
|
public override setEnabled(enabled: boolean): void {
|
241
253
|
super.setEnabled(enabled);
|
242
|
-
|
243
|
-
this.snapToGridEnabled = false;
|
244
254
|
}
|
245
255
|
|
246
256
|
public override onKeyPress(event: KeyPressEvent): boolean {
|
@@ -269,32 +279,6 @@ export default class Pen extends BaseTool {
|
|
269
279
|
return true;
|
270
280
|
}
|
271
281
|
|
272
|
-
if (shortcuts.matchesShortcut(snapToGridKeyboardShortcutId, event)) {
|
273
|
-
this.snapToGridEnabled = true;
|
274
|
-
return true;
|
275
|
-
}
|
276
|
-
|
277
|
-
if (shortcuts.matchesShortcut(lineLockKeyboardShortcutId, event)) {
|
278
|
-
this.angleLockEnabled = true;
|
279
|
-
return true;
|
280
|
-
}
|
281
|
-
|
282
|
-
return false;
|
283
|
-
}
|
284
|
-
|
285
|
-
public override onKeyUp(event: KeyUpEvent): boolean {
|
286
|
-
const shortcuts = this.editor.shortcuts;
|
287
|
-
|
288
|
-
if (shortcuts.matchesShortcut(snapToGridKeyboardShortcutId, event)) {
|
289
|
-
this.snapToGridEnabled = false;
|
290
|
-
return true;
|
291
|
-
}
|
292
|
-
|
293
|
-
if (shortcuts.matchesShortcut(lineLockKeyboardShortcutId, event)) {
|
294
|
-
this.angleLockEnabled = false;
|
295
|
-
return true;
|
296
|
-
}
|
297
|
-
|
298
282
|
return false;
|
299
283
|
}
|
300
284
|
}
|
package/src/tools/PipetteTool.ts
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
// @internal @packageDocumentation
|
2
2
|
|
3
|
-
import Color4 from '
|
3
|
+
import { Color4 } from '@js-draw/math';
|
4
4
|
import Editor from '../Editor';
|
5
|
-
import { PointerEvt } from '../
|
5
|
+
import { PointerEvt } from '../inputEvents';
|
6
6
|
import BaseTool from './BaseTool';
|
7
7
|
|
8
8
|
type ColorListener = (color: Color4|null)=>void;
|
9
9
|
|
10
|
+
/**
|
11
|
+
* A tool used internally to pick colors from the canvas.
|
12
|
+
*
|
13
|
+
* When color selection is in progress, the `pipette--color-selection-in-progress` class
|
14
|
+
* is added to the root element. This can be used by themes.
|
15
|
+
*
|
16
|
+
* @internal
|
17
|
+
*/
|
10
18
|
export default class PipetteTool extends BaseTool {
|
11
19
|
private colorPreviewListener: ColorListener|null = null;
|
12
20
|
private colorSelectListener: ColorListener|null = null;
|
@@ -16,6 +24,23 @@ export default class PipetteTool extends BaseTool {
|
|
16
24
|
description: string,
|
17
25
|
) {
|
18
26
|
super(editor.notifier, description);
|
27
|
+
|
28
|
+
this.enabledValue().onUpdateAndNow(() => {
|
29
|
+
this.updateSelectingStatus();
|
30
|
+
});
|
31
|
+
}
|
32
|
+
|
33
|
+
// Ensures that the root editor element correctly reflects whether color selection
|
34
|
+
// is in progress.
|
35
|
+
private updateSelectingStatus() {
|
36
|
+
const className = 'pipette--color-selection-in-progress';
|
37
|
+
|
38
|
+
if (this.isEnabled() && this.colorSelectListener && this.colorPreviewListener) {
|
39
|
+
this.editor.getRootElement().classList.add(className);
|
40
|
+
}
|
41
|
+
else {
|
42
|
+
this.editor.getRootElement().classList.remove(className);
|
43
|
+
}
|
19
44
|
}
|
20
45
|
|
21
46
|
public setColorListener(
|
@@ -26,11 +51,15 @@ export default class PipetteTool extends BaseTool {
|
|
26
51
|
) {
|
27
52
|
this.colorPreviewListener = colorPreviewListener;
|
28
53
|
this.colorSelectListener = colorSelectListener;
|
54
|
+
|
55
|
+
this.updateSelectingStatus();
|
29
56
|
}
|
30
57
|
|
31
58
|
public clearColorListener() {
|
32
59
|
this.colorPreviewListener = null;
|
33
60
|
this.colorSelectListener = null;
|
61
|
+
|
62
|
+
this.updateSelectingStatus();
|
34
63
|
}
|
35
64
|
|
36
65
|
public override onPointerDown({ current, allPointers }: PointerEvt): boolean {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import Editor from '../../Editor';
|
2
|
-
import { KeyPressEvent } from '../../
|
2
|
+
import { KeyPressEvent } from '../../inputEvents';
|
3
3
|
import BaseTool from '../BaseTool';
|
4
4
|
import { selectAllKeyboardShortcut } from '../keybindings';
|
5
5
|
import SelectionTool from './SelectionTool';
|
@@ -5,14 +5,11 @@
|
|
5
5
|
|
6
6
|
import SerializableCommand from '../../commands/SerializableCommand';
|
7
7
|
import Editor from '../../Editor';
|
8
|
-
import Mat33 from '
|
9
|
-
import Rect2 from '../../math/shapes/Rect2';
|
10
|
-
import { Point2, Vec2 } from '../../math/Vec2';
|
8
|
+
import { Mat33, Rect2, Point2, Vec2, Mat33Array } from '@js-draw/math';
|
11
9
|
import Pointer from '../../Pointer';
|
12
10
|
import SelectionHandle, { HandleShape, handleSize } from './SelectionHandle';
|
13
11
|
import { cssPrefix } from './SelectionTool';
|
14
12
|
import AbstractComponent from '../../components/AbstractComponent';
|
15
|
-
import { Mat33Array } from '../../math/Mat33';
|
16
13
|
import { EditorLocalization } from '../../localization';
|
17
14
|
import Viewport from '../../Viewport';
|
18
15
|
import Erase from '../../commands/Erase';
|
@@ -57,6 +54,7 @@ export default class Selection {
|
|
57
54
|
HandleShape.Square,
|
58
55
|
Vec2.of(1, 0.5),
|
59
56
|
this,
|
57
|
+
this.editor.viewport,
|
60
58
|
(startPoint) => this.transformers.resize.onDragStart(startPoint, ResizeMode.HorizontalOnly),
|
61
59
|
(currentPoint) => this.transformers.resize.onDragUpdate(currentPoint),
|
62
60
|
() => this.transformers.resize.onDragEnd(),
|
@@ -66,6 +64,7 @@ export default class Selection {
|
|
66
64
|
HandleShape.Square,
|
67
65
|
Vec2.of(0.5, 1),
|
68
66
|
this,
|
67
|
+
this.editor.viewport,
|
69
68
|
(startPoint) => this.transformers.resize.onDragStart(startPoint, ResizeMode.VerticalOnly),
|
70
69
|
(currentPoint) => this.transformers.resize.onDragUpdate(currentPoint),
|
71
70
|
() => this.transformers.resize.onDragEnd(),
|
@@ -75,6 +74,7 @@ export default class Selection {
|
|
75
74
|
HandleShape.Square,
|
76
75
|
Vec2.of(1, 1),
|
77
76
|
this,
|
77
|
+
this.editor.viewport,
|
78
78
|
(startPoint) => this.transformers.resize.onDragStart(startPoint, ResizeMode.Both),
|
79
79
|
(currentPoint) => this.transformers.resize.onDragUpdate(currentPoint),
|
80
80
|
() => this.transformers.resize.onDragEnd(),
|
@@ -84,6 +84,7 @@ export default class Selection {
|
|
84
84
|
HandleShape.Circle,
|
85
85
|
Vec2.of(0.5, 0),
|
86
86
|
this,
|
87
|
+
this.editor.viewport,
|
87
88
|
(startPoint) => this.transformers.rotate.onDragStart(startPoint),
|
88
89
|
(currentPoint) => this.transformers.rotate.onDragUpdate(currentPoint),
|
89
90
|
() => this.transformers.rotate.onDragEnd(),
|
@@ -179,7 +180,7 @@ export default class Selection {
|
|
179
180
|
}
|
180
181
|
|
181
182
|
// Applies the current transformation to the selection
|
182
|
-
public finalizeTransform() {
|
183
|
+
public async finalizeTransform() {
|
183
184
|
const fullTransform = this.transform;
|
184
185
|
const selectedElems = this.selectedElems;
|
185
186
|
|
@@ -188,7 +189,7 @@ export default class Selection {
|
|
188
189
|
this.transform = Mat33.identity;
|
189
190
|
|
190
191
|
// Make the commands undo-able
|
191
|
-
this.editor.dispatch(new Selection.ApplyTransformationCommand(
|
192
|
+
await this.editor.dispatch(new Selection.ApplyTransformationCommand(
|
192
193
|
this, selectedElems, fullTransform
|
193
194
|
));
|
194
195
|
|
@@ -459,25 +460,41 @@ export default class Selection {
|
|
459
460
|
|
460
461
|
private targetHandle: SelectionHandle|null = null;
|
461
462
|
private backgroundDragging: boolean = false;
|
462
|
-
public onDragStart(pointer: Pointer
|
463
|
-
this
|
464
|
-
|
463
|
+
public onDragStart(pointer: Pointer): boolean {
|
464
|
+
// Clear the HTML selection (prevent HTML drag and drop being triggered by this drag)
|
465
|
+
document.getSelection()?.removeAllRanges();
|
466
|
+
|
467
|
+
this.targetHandle = null;
|
468
|
+
|
469
|
+
let result = false;
|
465
470
|
|
466
471
|
for (const handle of this.handles) {
|
467
|
-
if (handle.
|
468
|
-
handle.handleDragStart(pointer);
|
472
|
+
if (handle.containsPoint(pointer.canvasPos)) {
|
469
473
|
this.targetHandle = handle;
|
470
|
-
|
474
|
+
result = true;
|
471
475
|
}
|
472
476
|
}
|
473
477
|
|
474
|
-
|
478
|
+
this.backgroundDragging = false;
|
479
|
+
if (this.region.containsPoint(pointer.canvasPos)) {
|
475
480
|
this.backgroundDragging = true;
|
481
|
+
result = true;
|
482
|
+
}
|
483
|
+
|
484
|
+
if (result) {
|
485
|
+
this.removeDeletedElemsFromSelection();
|
486
|
+
this.addRemoveSelectionFromImage(false);
|
487
|
+
}
|
488
|
+
|
489
|
+
if (this.targetHandle) {
|
490
|
+
this.targetHandle.handleDragStart(pointer);
|
491
|
+
}
|
492
|
+
|
493
|
+
if (this.backgroundDragging) {
|
476
494
|
this.transformers.drag.onDragStart(pointer.canvasPos);
|
477
|
-
return true;
|
478
495
|
}
|
479
496
|
|
480
|
-
return
|
497
|
+
return result;
|
481
498
|
}
|
482
499
|
|
483
500
|
public onDragUpdate(pointer: Pointer) {
|
@@ -543,10 +560,29 @@ export default class Selection {
|
|
543
560
|
return new Erase(this.selectedElems);
|
544
561
|
}
|
545
562
|
|
563
|
+
private selectionDuplicatedAnimationTimeout: ReturnType<typeof setTimeout>|null = null;
|
564
|
+
private runSelectionDuplicatedAnimation() {
|
565
|
+
if (this.selectionDuplicatedAnimationTimeout) {
|
566
|
+
clearTimeout(this.selectionDuplicatedAnimationTimeout);
|
567
|
+
}
|
568
|
+
|
569
|
+
const animationDuration = 400; // ms
|
570
|
+
this.backgroundElem.style.animation = `${animationDuration}ms ease selection-duplicated-animation`;
|
571
|
+
|
572
|
+
this.selectionDuplicatedAnimationTimeout = setTimeout(() => {
|
573
|
+
this.backgroundElem.style.animation = '';
|
574
|
+
this.selectionDuplicatedAnimationTimeout = null;
|
575
|
+
}, animationDuration);
|
576
|
+
}
|
577
|
+
|
546
578
|
public async duplicateSelectedObjects(): Promise<Command> {
|
547
579
|
const wasTransforming = this.backgroundDragging || this.targetHandle;
|
548
580
|
let tmpApplyCommand: Command|null = null;
|
549
581
|
|
582
|
+
if (!wasTransforming) {
|
583
|
+
this.runSelectionDuplicatedAnimation();
|
584
|
+
}
|
585
|
+
|
550
586
|
if (wasTransforming) {
|
551
587
|
// Don't update the selection's focus when redoing/undoing
|
552
588
|
const selectionToUpdate: Selection|null = null;
|
@@ -605,7 +641,7 @@ export default class Selection {
|
|
605
641
|
}
|
606
642
|
|
607
643
|
public getSelectedObjects(): AbstractComponent[] {
|
608
|
-
return this.selectedElems;
|
644
|
+
return [...this.selectedElems];
|
609
645
|
}
|
610
646
|
}
|
611
647
|
|
@@ -1,8 +1,9 @@
|
|
1
1
|
import { assertUnreachable } from '../../util/assertions';
|
2
|
-
import { Point2, Vec2 } from '
|
2
|
+
import { Point2, Rect2, Vec2 } from '@js-draw/math';
|
3
3
|
import { cssPrefix } from './SelectionTool';
|
4
4
|
import Selection from './Selection';
|
5
5
|
import Pointer from '../../Pointer';
|
6
|
+
import Viewport from '../../Viewport';
|
6
7
|
|
7
8
|
export enum HandleShape {
|
8
9
|
Circle,
|
@@ -20,12 +21,11 @@ export default class SelectionHandle {
|
|
20
21
|
private element: HTMLElement;
|
21
22
|
private snapToGrid: boolean;
|
22
23
|
|
23
|
-
// Bounding box in screen coordinates.
|
24
|
-
|
25
24
|
public constructor(
|
26
25
|
readonly shape: HandleShape,
|
27
26
|
private readonly parentSide: Vec2,
|
28
27
|
private readonly parent: Selection,
|
28
|
+
private readonly viewport: Viewport,
|
29
29
|
|
30
30
|
private readonly onDragStart: DragStartCallback,
|
31
31
|
private readonly onDragUpdate: DragUpdateCallback,
|
@@ -56,25 +56,59 @@ export default class SelectionHandle {
|
|
56
56
|
container.appendChild(this.element);
|
57
57
|
}
|
58
58
|
|
59
|
-
|
59
|
+
/**
|
60
|
+
* Returns this handle's bounding box relative to the top left of the
|
61
|
+
* selection box.
|
62
|
+
*/
|
63
|
+
private getBBoxParentCoords() {
|
60
64
|
const parentRect = this.parent.screenRegion;
|
61
65
|
const size = Vec2.of(handleSize, handleSize);
|
62
66
|
const topLeft = parentRect.size.scale(this.parentSide)
|
63
67
|
// Center
|
64
68
|
.minus(size.times(1/2));
|
65
69
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
70
|
+
return new Rect2(topLeft.x, topLeft.y, size.x, size.y);
|
71
|
+
}
|
72
|
+
|
73
|
+
/** @returns this handle's bounding box relative to the canvas. */
|
74
|
+
private getBBoxCanvasCoords() {
|
75
|
+
const parentRect = this.parent.region;
|
76
|
+
const size = Vec2.of(handleSize, handleSize).times(1/this.viewport.getScaleFactor());
|
77
|
+
|
78
|
+
const topLeftFromParent = parentRect.size.scale(this.parentSide).minus(size.times(0.5));
|
79
|
+
|
80
|
+
return new Rect2(topLeftFromParent.x, topLeftFromParent.y, size.x, size.y).translatedBy(parentRect.topLeft);
|
71
81
|
}
|
72
82
|
|
73
83
|
/**
|
74
|
-
*
|
84
|
+
* Moves the HTML representation of this to the location matching its internal representation.
|
75
85
|
*/
|
76
|
-
public
|
77
|
-
|
86
|
+
public updatePosition() {
|
87
|
+
const bbox = this.getBBoxParentCoords();
|
88
|
+
|
89
|
+
// Position within the selection box.
|
90
|
+
this.element.style.marginLeft = `${bbox.topLeft.x}px`;
|
91
|
+
this.element.style.marginTop = `${bbox.topLeft.y}px`;
|
92
|
+
this.element.style.width = `${bbox.w}px`;
|
93
|
+
this.element.style.height = `${bbox.h}px`;
|
94
|
+
}
|
95
|
+
|
96
|
+
/** @returns true iff `point` (in editor **canvas** coordinates) is in this. */
|
97
|
+
public containsPoint(point: Point2) {
|
98
|
+
const bbox = this.getBBoxCanvasCoords();
|
99
|
+
const delta = point.minus(bbox.center);
|
100
|
+
|
101
|
+
// Should have same x and y radius
|
102
|
+
const radius = bbox.size.x / 2;
|
103
|
+
|
104
|
+
let result;
|
105
|
+
if (this.shape === HandleShape.Circle) {
|
106
|
+
result = delta.magnitude() <= radius;
|
107
|
+
} else {
|
108
|
+
result = Math.abs(delta.x) <= radius && Math.abs(delta.y) <= radius;
|
109
|
+
}
|
110
|
+
|
111
|
+
return result;
|
78
112
|
}
|
79
113
|
|
80
114
|
private dragLastPos: Vec2|null = null;
|