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
@@ -1,6 +1,6 @@
|
|
1
|
-
import { Vec2 } from '
|
2
|
-
import AbstractRenderer from '../renderers/AbstractRenderer';
|
3
|
-
import { CacheRecordManager } from './CacheRecordManager';
|
1
|
+
import type { Vec2 } from '@js-draw/math';
|
2
|
+
import type AbstractRenderer from '../renderers/AbstractRenderer';
|
3
|
+
import type { CacheRecordManager } from './CacheRecordManager';
|
4
4
|
|
5
5
|
|
6
6
|
export type CacheAddress = number;
|
@@ -1,19 +1,9 @@
|
|
1
|
-
import Color4 from '
|
1
|
+
import { Color4, Mat33, Point2, Vec2, Rect2, Path, PathCommandType } from '@js-draw/math';
|
2
2
|
import { LoadSaveDataTable } from '../../components/AbstractComponent';
|
3
|
-
import Mat33 from '../../math/Mat33';
|
4
|
-
import Path, { PathCommand, PathCommandType } from '../../math/shapes/Path';
|
5
|
-
import Rect2 from '../../math/shapes/Rect2';
|
6
|
-
import { Point2, Vec2 } from '../../math/Vec2';
|
7
3
|
import Viewport from '../../Viewport';
|
8
4
|
import RenderingStyle, { stylesEqual } from '../RenderingStyle';
|
9
5
|
import TextRenderingStyle from '../TextRenderingStyle';
|
10
|
-
|
11
|
-
export interface RenderablePathSpec {
|
12
|
-
startPoint: Point2;
|
13
|
-
commands: PathCommand[];
|
14
|
-
style: RenderingStyle;
|
15
|
-
path?: Path;
|
16
|
-
}
|
6
|
+
import RenderablePathSpec, { pathToRenderable } from '../RenderablePathSpec';
|
17
7
|
|
18
8
|
export interface RenderableImage {
|
19
9
|
transform: Mat33;
|
@@ -138,13 +128,13 @@ export default abstract class AbstractRenderer {
|
|
138
128
|
// This is equivalent to `drawPath(Path.fromRect(...).toRenderable(...))`.
|
139
129
|
public drawRect(rect: Rect2, lineWidth: number, lineFill: RenderingStyle) {
|
140
130
|
const path = Path.fromRect(rect, lineWidth);
|
141
|
-
this.drawPath(path
|
131
|
+
this.drawPath(pathToRenderable(path, lineFill));
|
142
132
|
}
|
143
133
|
|
144
134
|
/** Draws a filled rectangle. */
|
145
135
|
public fillRect(rect: Rect2, fill: Color4) {
|
146
136
|
const path = Path.fromRect(rect);
|
147
|
-
this.drawPath(path
|
137
|
+
this.drawPath(pathToRenderable(path, { fill }));
|
148
138
|
}
|
149
139
|
|
150
140
|
/**
|
@@ -1,14 +1,10 @@
|
|
1
|
-
import Color4 from '../../Color4';
|
2
1
|
import TextComponent from '../../components/TextComponent';
|
3
|
-
import Mat33 from '
|
4
|
-
import Path from '../../math/shapes/Path';
|
5
|
-
import Rect2 from '../../math/shapes/Rect2';
|
6
|
-
import { Point2, Vec2 } from '../../math/Vec2';
|
7
|
-
import Vec3 from '../../math/Vec3';
|
2
|
+
import { Mat33, Rect2, Point2, Vec2, Vec3, Color4 } from '@js-draw/math';
|
8
3
|
import Viewport from '../../Viewport';
|
9
4
|
import RenderingStyle from '../RenderingStyle';
|
10
5
|
import TextRenderingStyle from '../TextRenderingStyle';
|
11
|
-
import AbstractRenderer, { RenderableImage
|
6
|
+
import AbstractRenderer, { RenderableImage } from './AbstractRenderer';
|
7
|
+
import RenderablePathSpec, { visualEquivalent } from '../RenderablePathSpec';
|
12
8
|
|
13
9
|
/**
|
14
10
|
* Renders onto a `CanvasRenderingContext2D`.
|
@@ -116,9 +112,15 @@ export default class CanvasRenderer extends AbstractRenderer {
|
|
116
112
|
}
|
117
113
|
|
118
114
|
protected endPath(style: RenderingStyle) {
|
119
|
-
|
120
|
-
|
121
|
-
this.ctx.
|
115
|
+
// Saving and restoring can be slow in some browsers
|
116
|
+
// (e.g. 0.50ms). Avoid.
|
117
|
+
//this.ctx.save();
|
118
|
+
|
119
|
+
// If not a transparent fill
|
120
|
+
if (style.fill.a > 0) {
|
121
|
+
this.ctx.fillStyle = style.fill.toHexString();
|
122
|
+
this.ctx.fill();
|
123
|
+
}
|
122
124
|
|
123
125
|
if (style.stroke) {
|
124
126
|
this.ctx.strokeStyle = style.stroke.color.toHexString();
|
@@ -126,10 +128,12 @@ export default class CanvasRenderer extends AbstractRenderer {
|
|
126
128
|
this.ctx.lineCap = 'round';
|
127
129
|
this.ctx.lineJoin = 'round';
|
128
130
|
this.ctx.stroke();
|
131
|
+
|
132
|
+
this.ctx.lineWidth = 1;
|
129
133
|
}
|
130
134
|
|
131
135
|
this.ctx.closePath();
|
132
|
-
this.ctx.restore();
|
136
|
+
//this.ctx.restore();
|
133
137
|
}
|
134
138
|
|
135
139
|
protected lineTo(point: Point2) {
|
@@ -181,7 +185,7 @@ export default class CanvasRenderer extends AbstractRenderer {
|
|
181
185
|
// If part of a huge object, it might be worth trimming the path
|
182
186
|
if (this.currentObjectBBox?.containsRect(this.getViewport().visibleRect)) {
|
183
187
|
// Try to trim/remove parts of the path outside of the bounding box.
|
184
|
-
path =
|
188
|
+
path = visualEquivalent(
|
185
189
|
path,
|
186
190
|
this.getViewport().visibleRect
|
187
191
|
);
|
@@ -281,6 +285,7 @@ export default class CanvasRenderer extends AbstractRenderer {
|
|
281
285
|
1.0,
|
282
286
|
0.5 + Math.cos(i * 0.2) / 4, 0.5
|
283
287
|
).toHexString();
|
288
|
+
this.ctx.lineWidth = 2;
|
284
289
|
this.ctx.fill();
|
285
290
|
this.ctx.stroke();
|
286
291
|
this.ctx.closePath();
|
@@ -1,7 +1,4 @@
|
|
1
|
-
import Mat33 from '
|
2
|
-
import Rect2 from '../../math/shapes/Rect2';
|
3
|
-
import { Point2, Vec2 } from '../../math/Vec2';
|
4
|
-
import Vec3 from '../../math/Vec3';
|
1
|
+
import { Mat33, Rect2, Point2, Vec2, Vec3 } from '@js-draw/math';
|
5
2
|
import Viewport from '../../Viewport';
|
6
3
|
import RenderingStyle from '../RenderingStyle';
|
7
4
|
import TextRenderingStyle from '../TextRenderingStyle';
|
@@ -1,15 +1,12 @@
|
|
1
|
-
|
2
1
|
import { LoadSaveDataTable } from '../../components/AbstractComponent';
|
3
|
-
import Mat33 from '
|
4
|
-
import
|
5
|
-
import Rect2 from '../../math/shapes/Rect2';
|
6
|
-
import { toRoundedString } from '../../math/rounding';
|
7
|
-
import { Point2, Vec2 } from '../../math/Vec2';
|
8
|
-
import { svgAttributesDataKey, SVGLoaderUnknownAttribute, SVGLoaderUnknownStyleAttribute, svgStyleAttributesDataKey } from '../../SVGLoader';
|
2
|
+
import { Mat33, Rect2, Point2, Vec2, toRoundedString } from '@js-draw/math';
|
3
|
+
import { svgAttributesDataKey, svgLoaderAttributeContainerID, SVGLoaderUnknownAttribute, SVGLoaderUnknownStyleAttribute, svgStyleAttributesDataKey } from '../../SVGLoader';
|
9
4
|
import Viewport from '../../Viewport';
|
10
5
|
import RenderingStyle, { stylesEqual } from '../RenderingStyle';
|
11
6
|
import TextRenderingStyle from '../TextRenderingStyle';
|
12
|
-
import AbstractRenderer, { RenderableImage
|
7
|
+
import AbstractRenderer, { RenderableImage } from './AbstractRenderer';
|
8
|
+
import RenderablePathSpec, { pathFromRenderable } from '../RenderablePathSpec';
|
9
|
+
import listPrefixMatch from '../../util/listPrefixMatch';
|
13
10
|
|
14
11
|
export const renderedStylesheetId = 'js-draw-style-sheet';
|
15
12
|
|
@@ -28,6 +25,10 @@ const defaultTextStyle: Partial<TextRenderingStyle> = {
|
|
28
25
|
export default class SVGRenderer extends AbstractRenderer {
|
29
26
|
private lastPathStyle: RenderingStyle|null = null;
|
30
27
|
private lastPathString: string[] = [];
|
28
|
+
private lastContainerIDList: string[] = [];
|
29
|
+
|
30
|
+
// Elements that make up the current object (as created by startObject)
|
31
|
+
// if any.
|
31
32
|
private objectElems: SVGElement[]|null = null;
|
32
33
|
|
33
34
|
private overwrittenAttrs: Record<string, string|null> = {};
|
@@ -88,6 +89,7 @@ export default class SVGRenderer extends AbstractRenderer {
|
|
88
89
|
|
89
90
|
public clear() {
|
90
91
|
this.lastPathString = [];
|
92
|
+
this.lastContainerIDList = [];
|
91
93
|
|
92
94
|
if (!this.sanitize) {
|
93
95
|
// Restore all all attributes
|
@@ -134,7 +136,7 @@ export default class SVGRenderer extends AbstractRenderer {
|
|
134
136
|
|
135
137
|
public override drawPath(pathSpec: RenderablePathSpec) {
|
136
138
|
const style = pathSpec.style;
|
137
|
-
const path =
|
139
|
+
const path = pathFromRenderable(pathSpec).transformedBy(this.getCanvasToScreenTransform());
|
138
140
|
|
139
141
|
// Try to extend the previous path, if possible
|
140
142
|
if (
|
@@ -278,9 +280,14 @@ export default class SVGRenderer extends AbstractRenderer {
|
|
278
280
|
// Don't extend paths across objects
|
279
281
|
this.addPathToSVG();
|
280
282
|
|
283
|
+
// If empty/not an object, stop.
|
284
|
+
if (!this.objectElems) {
|
285
|
+
return;
|
286
|
+
}
|
287
|
+
|
281
288
|
if (loaderData && !this.sanitize) {
|
282
289
|
// Restore any attributes unsupported by the app.
|
283
|
-
for (const elem of this.objectElems
|
290
|
+
for (const elem of this.objectElems) {
|
284
291
|
const attrs = loaderData[svgAttributesDataKey] as SVGLoaderUnknownAttribute[]|undefined;
|
285
292
|
const styleAttrs = loaderData[svgStyleAttributesDataKey] as SVGLoaderUnknownStyleAttribute[]|undefined;
|
286
293
|
|
@@ -296,6 +303,54 @@ export default class SVGRenderer extends AbstractRenderer {
|
|
296
303
|
}
|
297
304
|
}
|
298
305
|
}
|
306
|
+
|
307
|
+
// Update the parent
|
308
|
+
const containerIDData = loaderData[svgLoaderAttributeContainerID];
|
309
|
+
let containerIDList: string[] = [];
|
310
|
+
if (containerIDData && containerIDData[0]) {
|
311
|
+
// If a string list,
|
312
|
+
if ((containerIDData[0] as any).length) {
|
313
|
+
containerIDList = containerIDData[0] as string[];
|
314
|
+
}
|
315
|
+
}
|
316
|
+
|
317
|
+
if (
|
318
|
+
containerIDList.length > 0
|
319
|
+
// containerIDList must share a prefix with the last ID list
|
320
|
+
// otherwise, the z order of elements may have been changed from
|
321
|
+
// the original image.
|
322
|
+
// In the case that the z order has been changed, keep the current
|
323
|
+
// element as a child of the root to preserve z order.
|
324
|
+
&& listPrefixMatch(this.lastContainerIDList, containerIDList)
|
325
|
+
|
326
|
+
// The component can add at most one more parent than the previous item.
|
327
|
+
&& this.lastContainerIDList.length >= containerIDList.length - 1
|
328
|
+
) {
|
329
|
+
// Select the last
|
330
|
+
const containerID = containerIDList[containerIDList.length - 1];
|
331
|
+
|
332
|
+
const containerCandidates = this.elem.querySelectorAll(`g#${containerID}`);
|
333
|
+
if (containerCandidates.length >= 1) {
|
334
|
+
const container = containerCandidates[0];
|
335
|
+
|
336
|
+
// If this is the first time we're entering the group, the
|
337
|
+
// group should be empty.
|
338
|
+
// Otherwise, this may be a case that would break z-ordering.
|
339
|
+
if (container.children.length === 0 || this.lastContainerIDList.length >= containerIDList.length) {
|
340
|
+
// Move all objectElems to the found container
|
341
|
+
for (const elem of this.objectElems) {
|
342
|
+
elem.remove();
|
343
|
+
container.appendChild(elem);
|
344
|
+
}
|
345
|
+
} else {
|
346
|
+
containerIDList = [];
|
347
|
+
}
|
348
|
+
}
|
349
|
+
} else {
|
350
|
+
containerIDList = [];
|
351
|
+
}
|
352
|
+
|
353
|
+
this.lastContainerIDList = containerIDList;
|
299
354
|
}
|
300
355
|
|
301
356
|
// Add class names to the object, if given.
|
@@ -348,7 +403,9 @@ export default class SVGRenderer extends AbstractRenderer {
|
|
348
403
|
return;
|
349
404
|
}
|
350
405
|
|
351
|
-
|
406
|
+
const elemToDraw = elem.cloneNode(true) as SVGElement;
|
407
|
+
this.elem.appendChild(elemToDraw);
|
408
|
+
this.objectElems?.push(elemToDraw);
|
352
409
|
}
|
353
410
|
|
354
411
|
public isTooSmallToRender(_rect: Rect2): boolean {
|
@@ -1,7 +1,4 @@
|
|
1
|
-
import Mat33 from '
|
2
|
-
import Rect2 from '../../math/shapes/Rect2';
|
3
|
-
import { Vec2 } from '../../math/Vec2';
|
4
|
-
import Vec3 from '../../math/Vec3';
|
1
|
+
import { Vec2, Vec3, Rect2, Mat33 } from '@js-draw/math';
|
5
2
|
import Viewport from '../../Viewport';
|
6
3
|
import { TextRendererLocalization } from '../localization';
|
7
4
|
import RenderingStyle from '../RenderingStyle';
|
@@ -48,4 +48,14 @@ describe('KeyBinding', () => {
|
|
48
48
|
expect(ctrl1.matchesEvent({ key: '1', shiftKey: true, ctrlKey: true })).toBe(true);
|
49
49
|
expect(ctrl1.matchesEvent({ key: '1', shiftKey: true, ctrlKey: false })).toBe(false);
|
50
50
|
});
|
51
|
+
|
52
|
+
it('ctrl-KeyA should match ctrl + event with code KeyA', () => {
|
53
|
+
const ctrlA = KeyBinding.fromString('ctrl-KeyA');
|
54
|
+
|
55
|
+
expect(ctrlA.matchesEvent({ code: 'KeyA', shiftKey: false, ctrlKey: true })).toBe(true);
|
56
|
+
expect(ctrlA.matchesEvent({ key: 'a', code: 'KeyA', shiftKey: false, ctrlKey: true })).toBe(true);
|
57
|
+
expect(ctrlA.matchesEvent({ key: 'a', code: 'KeyA', shiftKey: false, ctrlKey: false })).toBe(false);
|
58
|
+
expect(ctrlA.matchesEvent({ code: 'KeyB', shiftKey: false, ctrlKey: true })).toBe(false);
|
59
|
+
expect(ctrlA.matchesEvent({ code: 'KeyA', shiftKey: true, ctrlKey: true })).toBe(false);
|
60
|
+
});
|
51
61
|
});
|
@@ -3,6 +3,12 @@ export interface KeyCombination {
|
|
3
3
|
/** A key (e.g. `a`, `b`, `control`). */
|
4
4
|
readonly key: string;
|
5
5
|
|
6
|
+
/**
|
7
|
+
* The layout-independent name of the key being pressed. For example,
|
8
|
+
* KeyA for the `a` key.
|
9
|
+
*/
|
10
|
+
readonly code?: string;
|
11
|
+
|
6
12
|
/**
|
7
13
|
* Whether the shift key must be pressed to trigger the shortcut.
|
8
14
|
*/
|
@@ -21,6 +27,18 @@ export interface KeyCombination {
|
|
21
27
|
readonly controlOrMeta: boolean;
|
22
28
|
}
|
23
29
|
|
30
|
+
const isUppercaseLetter = (text: string) => {
|
31
|
+
return text.toUpperCase() === text
|
32
|
+
&& text.toLowerCase() !== text
|
33
|
+
&& text.length === 1;
|
34
|
+
};
|
35
|
+
|
36
|
+
const isLowercaseLetter = (text: string) => {
|
37
|
+
return text.toLowerCase() === text
|
38
|
+
&& text.toUpperCase() !== text
|
39
|
+
&& text.length === 1;
|
40
|
+
};
|
41
|
+
|
24
42
|
/** Represents a key combination that can trigger a keyboard shortcut. */
|
25
43
|
export default class KeyBinding implements KeyCombination {
|
26
44
|
/** @inheritdoc */
|
@@ -57,12 +75,8 @@ export default class KeyBinding implements KeyCombination {
|
|
57
75
|
const lowercaseKey = keyEvent.key?.toLowerCase();
|
58
76
|
|
59
77
|
// Determine whether the input is an upper case letter or not.
|
60
|
-
const isUpperCaseKey = keyEvent.key
|
61
|
-
|
62
|
-
&& keyEvent.key?.length === 1;
|
63
|
-
const isLowercaseKey = keyEvent.key?.toLowerCase() === keyEvent.key
|
64
|
-
&& !isUpperCaseKey
|
65
|
-
&& keyEvent.key?.length === 1;
|
78
|
+
const isUpperCaseKey = isUppercaseLetter(keyEvent.key ?? '');
|
79
|
+
const isLowercaseKey = isLowercaseLetter(keyEvent.key ?? '');
|
66
80
|
|
67
81
|
const ctrlKey = (keyEvent.ctrlKey ?? false) || lowercaseKey === 'control';
|
68
82
|
const altKey = (keyEvent.altKey ?? false) || lowercaseKey === 'alt';
|
@@ -72,20 +86,23 @@ export default class KeyBinding implements KeyCombination {
|
|
72
86
|
const keyEventHasCtrlOrMeta =
|
73
87
|
keyEvent.controlOrMeta || keyEvent.ctrlKey || keyEvent.metaKey || false;
|
74
88
|
|
75
|
-
//
|
76
|
-
if (this.key
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
// If a case where the ASCII case of the given key might matter,
|
81
|
-
// compare.
|
82
|
-
if ((isUpperCaseKey || isLowercaseKey) && this.key !== keyEvent.key) {
|
83
|
-
// this.shiftKey may be interpreted as allowing this shortcut to be uppercased.
|
84
|
-
// If so, try making this.key uppercase and matching the shortcut.
|
85
|
-
const uppercaseKeyMatches = this.shiftKey === true && this.key.toUpperCase() === keyEvent.key;
|
86
|
-
if (!uppercaseKeyMatches) {
|
89
|
+
// If we're not working with key codes,
|
90
|
+
if (this.key !== keyEvent.code) {
|
91
|
+
// Different keys entirely? They don't match.
|
92
|
+
if (this.key.toLowerCase() !== lowercaseKey) {
|
87
93
|
return false;
|
88
94
|
}
|
95
|
+
|
96
|
+
// If a case where the ASCII case of the given key might matter,
|
97
|
+
// compare.
|
98
|
+
if ((isUpperCaseKey || isLowercaseKey) && this.key !== keyEvent.key) {
|
99
|
+
// this.shiftKey may be interpreted as allowing this shortcut to be uppercased.
|
100
|
+
// If so, try making this.key uppercase and matching the shortcut.
|
101
|
+
const uppercaseKeyMatches = this.shiftKey === true && this.key.toUpperCase() === keyEvent.key;
|
102
|
+
if (!uppercaseKeyMatches) {
|
103
|
+
return false;
|
104
|
+
}
|
105
|
+
}
|
89
106
|
}
|
90
107
|
|
91
108
|
const shortcutControlOrMeta = this.controlOrMeta;
|
@@ -135,25 +152,46 @@ export default class KeyBinding implements KeyCombination {
|
|
135
152
|
* and returns the corresponding `KeyboardShortcut`.
|
136
153
|
*/
|
137
154
|
public static fromString(shortcutStr: string): KeyBinding {
|
138
|
-
const
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
// undefined: don't require or not require shift.
|
155
|
+
const getDefaultModifiers = (key: string) => {
|
156
|
+
// Unless a letter, as long as the given key matches, it shouldn't matter whether
|
157
|
+
// the shift key is pressed.
|
143
158
|
let shiftKey: boolean|undefined = undefined;
|
144
159
|
|
160
|
+
if (isUppercaseLetter(key)) {
|
161
|
+
shiftKey = true;
|
162
|
+
}
|
163
|
+
else if (isLowercaseLetter(key)) {
|
164
|
+
shiftKey = false;
|
165
|
+
}
|
166
|
+
// If not just a single character (e.g. a key code like KeyA), shift must
|
167
|
+
// be specified manually.
|
168
|
+
else if (key.length > 1) {
|
169
|
+
shiftKey = false;
|
170
|
+
}
|
171
|
+
|
172
|
+
const lowercaseKey = key.toLowerCase();
|
173
|
+
|
145
174
|
// shiftKey should always be true if the key is 'shift'
|
146
175
|
if (lowercaseKey === 'shift') {
|
147
176
|
shiftKey = true;
|
148
177
|
}
|
149
178
|
|
150
|
-
return
|
151
|
-
|
152
|
-
shiftKey: shiftKey,
|
179
|
+
return {
|
180
|
+
shiftKey,
|
153
181
|
ctrlKey: lowercaseKey === 'control' || lowercaseKey === 'ctrl',
|
154
182
|
altKey: lowercaseKey === 'alt',
|
155
183
|
metaKey: lowercaseKey === 'meta',
|
156
184
|
controlOrMeta: lowercaseKey === 'control or meta' || lowercaseKey === 'ctrlormeta',
|
185
|
+
};
|
186
|
+
};
|
187
|
+
|
188
|
+
const hasNoModifiers = shortcutStr.search(/[-+]/) === -1 || shortcutStr.length === 1;
|
189
|
+
if (hasNoModifiers) {
|
190
|
+
const modifiers = getDefaultModifiers(shortcutStr);
|
191
|
+
|
192
|
+
return new KeyBinding({
|
193
|
+
key: shortcutStr,
|
194
|
+
...modifiers,
|
157
195
|
});
|
158
196
|
}
|
159
197
|
|
@@ -165,15 +203,16 @@ export default class KeyBinding implements KeyCombination {
|
|
165
203
|
}
|
166
204
|
|
167
205
|
const key = match[2];
|
168
|
-
const
|
206
|
+
const defaultModifiers = getDefaultModifiers(key);
|
207
|
+
const modifierStrings = (match[1] ?? '').split(/[-+]/);
|
169
208
|
|
170
|
-
let shiftKey =
|
171
|
-
let ctrlKey =
|
172
|
-
let altKey =
|
173
|
-
let metaKey =
|
174
|
-
let controlOrMeta =
|
209
|
+
let shiftKey = defaultModifiers.shiftKey;
|
210
|
+
let ctrlKey = defaultModifiers.ctrlKey;
|
211
|
+
let altKey = defaultModifiers.altKey;
|
212
|
+
let metaKey = defaultModifiers.metaKey;
|
213
|
+
let controlOrMeta = defaultModifiers.controlOrMeta;
|
175
214
|
|
176
|
-
for (const modifier of
|
215
|
+
for (const modifier of modifierStrings) {
|
177
216
|
if (modifier === '') {
|
178
217
|
continue;
|
179
218
|
}
|
@@ -182,8 +221,8 @@ export default class KeyBinding implements KeyCombination {
|
|
182
221
|
case 'shift':
|
183
222
|
shiftKey = true;
|
184
223
|
break;
|
185
|
-
case '
|
186
|
-
shiftKey =
|
224
|
+
case 'anyshift':
|
225
|
+
shiftKey = undefined;
|
187
226
|
break;
|
188
227
|
case 'ctrl':
|
189
228
|
case 'control':
|
@@ -8,7 +8,7 @@ describe('KeyboardShortcutManager', () => {
|
|
8
8
|
KeyboardShortcutManager.getShortcutDefaultKeybindings(undoKeyboardShortcutId);
|
9
9
|
expect(defaultUndoShortcutKeybinds.length).toBeGreaterThanOrEqual(1);
|
10
10
|
expect(defaultUndoShortcutKeybinds.some(shortcut => {
|
11
|
-
return shortcut.key === '
|
11
|
+
return shortcut.key === 'KeyZ' && shortcut.controlOrMeta;
|
12
12
|
})).toBe(true);
|
13
13
|
});
|
14
14
|
|
package/src/styles.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import Editor from '../Editor';
|
2
|
-
import { Point2 } from '
|
2
|
+
import { Point2 } from '@js-draw/math';
|
3
3
|
import Pointer from '../Pointer';
|
4
|
-
import { InputEvtType } from '../
|
4
|
+
import { InputEvtType } from '../inputEvents';
|
5
5
|
import getUniquePointerId from './getUniquePointerId';
|
6
6
|
|
7
7
|
/**
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import Editor from '../Editor';
|
2
|
-
import { Vec2 } from '
|
2
|
+
import { Vec2 } from '@js-draw/math';
|
3
3
|
import Pointer, { PointerDevice } from '../Pointer';
|
4
|
-
import { InputEvtType } from '../
|
4
|
+
import { InputEvtType } from '../inputEvents';
|
5
5
|
import getUniquePointerId from './getUniquePointerId';
|
6
6
|
|
7
7
|
/**
|