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
@@ -0,0 +1,410 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
6
|
+
};
|
7
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
8
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
11
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
var _AbstractToolbar_listeners, _AbstractToolbar_widgetsById, _AbstractToolbar_widgetList, _AbstractToolbar_updateColoris;
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
18
|
+
const types_1 = require("../types");
|
19
|
+
const coloris_1 = require("@melloware/coloris");
|
20
|
+
const localization_1 = require("./localization");
|
21
|
+
const SelectionTool_1 = __importDefault(require("../tools/SelectionTool/SelectionTool"));
|
22
|
+
const PanZoom_1 = __importDefault(require("../tools/PanZoom"));
|
23
|
+
const TextTool_1 = __importDefault(require("../tools/TextTool"));
|
24
|
+
const Eraser_1 = __importDefault(require("../tools/Eraser"));
|
25
|
+
const Pen_1 = __importDefault(require("../tools/Pen"));
|
26
|
+
const PenToolWidget_1 = __importDefault(require("./widgets/PenToolWidget"));
|
27
|
+
const EraserToolWidget_1 = __importDefault(require("./widgets/EraserToolWidget"));
|
28
|
+
const SelectionToolWidget_1 = __importDefault(require("./widgets/SelectionToolWidget"));
|
29
|
+
const TextToolWidget_1 = __importDefault(require("./widgets/TextToolWidget"));
|
30
|
+
const HandToolWidget_1 = __importDefault(require("./widgets/HandToolWidget"));
|
31
|
+
const BaseWidget_1 = require("./widgets/BaseWidget");
|
32
|
+
const ActionButtonWidget_1 = __importDefault(require("./widgets/ActionButtonWidget"));
|
33
|
+
const InsertImageWidget_1 = __importDefault(require("./widgets/InsertImageWidget"));
|
34
|
+
const DocumentPropertiesWidget_1 = __importDefault(require("./widgets/DocumentPropertiesWidget"));
|
35
|
+
const math_1 = require("@js-draw/math");
|
36
|
+
const constants_1 = require("./constants");
|
37
|
+
class AbstractToolbar {
|
38
|
+
/** @internal */
|
39
|
+
constructor(editor, localizationTable = localization_1.defaultToolbarLocalization) {
|
40
|
+
this.editor = editor;
|
41
|
+
this.localizationTable = localizationTable;
|
42
|
+
_AbstractToolbar_listeners.set(this, []);
|
43
|
+
_AbstractToolbar_widgetsById.set(this, {});
|
44
|
+
_AbstractToolbar_widgetList.set(this, []);
|
45
|
+
_AbstractToolbar_updateColoris.set(this, null);
|
46
|
+
this.closeColorPickerOverlay = null;
|
47
|
+
if (!AbstractToolbar.colorisStarted) {
|
48
|
+
(0, coloris_1.init)();
|
49
|
+
AbstractToolbar.colorisStarted = true;
|
50
|
+
}
|
51
|
+
this.setupColorPickers();
|
52
|
+
}
|
53
|
+
setupCloseColorPickerOverlay() {
|
54
|
+
if (this.closeColorPickerOverlay)
|
55
|
+
return;
|
56
|
+
this.closeColorPickerOverlay = document.createElement('div');
|
57
|
+
this.closeColorPickerOverlay.className = `${constants_1.toolbarCSSPrefix}closeColorPickerOverlay`;
|
58
|
+
this.editor.createHTMLOverlay(this.closeColorPickerOverlay);
|
59
|
+
// Hide the color picker when attempting to draw on the overlay.
|
60
|
+
__classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.handlePointerEventsExceptClicksFrom(this.closeColorPickerOverlay, (eventName) => {
|
61
|
+
if (eventName === 'pointerdown') {
|
62
|
+
(0, coloris_1.close)();
|
63
|
+
}
|
64
|
+
// Transfer focus to the editor to allow keyboard events to be handled.
|
65
|
+
if (eventName === 'pointerup') {
|
66
|
+
this.editor.focus();
|
67
|
+
}
|
68
|
+
// Send the event to the editor
|
69
|
+
return true;
|
70
|
+
}));
|
71
|
+
}
|
72
|
+
// @internal
|
73
|
+
setupColorPickers() {
|
74
|
+
// Much of the setup only needs to be done once.
|
75
|
+
if (__classPrivateFieldGet(this, _AbstractToolbar_updateColoris, "f")) {
|
76
|
+
__classPrivateFieldGet(this, _AbstractToolbar_updateColoris, "f").call(this);
|
77
|
+
return;
|
78
|
+
}
|
79
|
+
this.setupCloseColorPickerOverlay();
|
80
|
+
const maxSwatchLen = 12;
|
81
|
+
const swatches = [
|
82
|
+
math_1.Color4.red.toHexString(),
|
83
|
+
math_1.Color4.purple.toHexString(),
|
84
|
+
math_1.Color4.blue.toHexString(),
|
85
|
+
math_1.Color4.clay.toHexString(),
|
86
|
+
math_1.Color4.black.toHexString(),
|
87
|
+
math_1.Color4.white.toHexString(),
|
88
|
+
];
|
89
|
+
const presetColorEnd = swatches.length;
|
90
|
+
// Keeps track of whether a Coloris initialization is scheduled.
|
91
|
+
let colorisInitScheduled = false;
|
92
|
+
// (Re)init Coloris -- update the swatches list.
|
93
|
+
const initColoris = () => {
|
94
|
+
try {
|
95
|
+
(0, coloris_1.coloris)({
|
96
|
+
el: '.coloris_input',
|
97
|
+
format: 'hex',
|
98
|
+
selectInput: false,
|
99
|
+
focusInput: false,
|
100
|
+
themeMode: 'auto',
|
101
|
+
swatches,
|
102
|
+
});
|
103
|
+
}
|
104
|
+
catch (err) {
|
105
|
+
console.warn('Failed to initialize Coloris. Error: ', err);
|
106
|
+
// Try again --- a known issue is that Coloris fails to load if the document
|
107
|
+
// isn't ready.
|
108
|
+
if (!colorisInitScheduled) {
|
109
|
+
colorisInitScheduled = true;
|
110
|
+
// Wait to initialize after the document has loaded
|
111
|
+
document.addEventListener('load', () => {
|
112
|
+
initColoris();
|
113
|
+
}, { once: true });
|
114
|
+
}
|
115
|
+
}
|
116
|
+
};
|
117
|
+
initColoris();
|
118
|
+
__classPrivateFieldSet(this, _AbstractToolbar_updateColoris, initColoris, "f");
|
119
|
+
const addColorToSwatch = (newColor) => {
|
120
|
+
let alreadyPresent = false;
|
121
|
+
for (const color of swatches) {
|
122
|
+
if (color === newColor) {
|
123
|
+
alreadyPresent = true;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
if (!alreadyPresent) {
|
127
|
+
swatches.push(newColor);
|
128
|
+
if (swatches.length > maxSwatchLen) {
|
129
|
+
swatches.splice(presetColorEnd, 1);
|
130
|
+
}
|
131
|
+
initColoris();
|
132
|
+
}
|
133
|
+
};
|
134
|
+
__classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.notifier.on(types_1.EditorEventType.ColorPickerToggled, event => {
|
135
|
+
if (event.kind !== types_1.EditorEventType.ColorPickerToggled) {
|
136
|
+
return;
|
137
|
+
}
|
138
|
+
// Show/hide the overlay. Making the overlay visible gives users a surface to click
|
139
|
+
// on that shows/hides the color picker.
|
140
|
+
if (this.closeColorPickerOverlay) {
|
141
|
+
this.closeColorPickerOverlay.style.display = event.open ? 'block' : 'none';
|
142
|
+
}
|
143
|
+
}));
|
144
|
+
// Add newly-selected colors to the swatch.
|
145
|
+
__classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(this.editor.notifier.on(types_1.EditorEventType.ColorPickerColorSelected, event => {
|
146
|
+
if (event.kind === types_1.EditorEventType.ColorPickerColorSelected) {
|
147
|
+
addColorToSwatch(event.color.toHexString());
|
148
|
+
}
|
149
|
+
}));
|
150
|
+
}
|
151
|
+
closeColorPickers() {
|
152
|
+
(0, coloris_1.close)?.();
|
153
|
+
}
|
154
|
+
getWidgetUniqueId(widget) {
|
155
|
+
return widget.getUniqueIdIn(__classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f"));
|
156
|
+
}
|
157
|
+
getWidgetFromId(id) {
|
158
|
+
return __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[id];
|
159
|
+
}
|
160
|
+
/** Do **not** modify the return value. */
|
161
|
+
getAllWidgets() {
|
162
|
+
return __classPrivateFieldGet(this, _AbstractToolbar_widgetList, "f");
|
163
|
+
}
|
164
|
+
/**
|
165
|
+
* Adds an `ActionButtonWidget` or `BaseToolWidget`. The widget should not have already have a parent
|
166
|
+
* (i.e. its `addTo` method should not have been called).
|
167
|
+
*
|
168
|
+
* @example
|
169
|
+
* ```ts
|
170
|
+
* const toolbar = editor.addToolbar();
|
171
|
+
* const insertImageWidget = new InsertImageWidget(editor);
|
172
|
+
* toolbar.addWidget(insertImageWidget);
|
173
|
+
* ```
|
174
|
+
*/
|
175
|
+
addWidget(widget) {
|
176
|
+
// Prevent name collisions
|
177
|
+
const id = widget.getUniqueIdIn(__classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f"));
|
178
|
+
// Add the widget
|
179
|
+
__classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[id] = widget;
|
180
|
+
__classPrivateFieldGet(this, _AbstractToolbar_widgetList, "f").push(widget);
|
181
|
+
this.addWidgetInternal(widget);
|
182
|
+
this.setupColorPickers();
|
183
|
+
}
|
184
|
+
/** Removes the given `widget` from this toolbar. */
|
185
|
+
removeWidget(widget) {
|
186
|
+
const id = widget.getUniqueIdIn(__classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f"));
|
187
|
+
this.removeWidgetInternal(widget);
|
188
|
+
delete __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[id];
|
189
|
+
__classPrivateFieldSet(this, _AbstractToolbar_widgetList, __classPrivateFieldGet(this, _AbstractToolbar_widgetList, "f").filter(otherWidget => otherWidget !== widget), "f");
|
190
|
+
}
|
191
|
+
/** Returns a snapshot of the state of widgets in the toolbar. */
|
192
|
+
serializeState() {
|
193
|
+
const result = {};
|
194
|
+
for (const widgetId in __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")) {
|
195
|
+
result[widgetId] = __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[widgetId].serializeState();
|
196
|
+
}
|
197
|
+
result[AbstractToolbar.rootToolbarId] = this.serializeInternal();
|
198
|
+
return JSON.stringify(result);
|
199
|
+
}
|
200
|
+
/**
|
201
|
+
* Deserialize toolbar widgets from the given state.
|
202
|
+
* Assumes that toolbar widgets are in the same order as when state was serialized.
|
203
|
+
*/
|
204
|
+
deserializeState(state) {
|
205
|
+
const data = JSON.parse(state);
|
206
|
+
const rootId = AbstractToolbar.rootToolbarId;
|
207
|
+
this.deserializeInternal(data[rootId]);
|
208
|
+
for (const widgetId in data) {
|
209
|
+
if (widgetId === rootId) {
|
210
|
+
continue;
|
211
|
+
}
|
212
|
+
if (!(widgetId in __classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f"))) {
|
213
|
+
console.warn(`Unable to deserialize widget ${widgetId} — no such widget.`);
|
214
|
+
continue;
|
215
|
+
}
|
216
|
+
__classPrivateFieldGet(this, _AbstractToolbar_widgetsById, "f")[widgetId].deserializeFrom(data[widgetId]);
|
217
|
+
}
|
218
|
+
}
|
219
|
+
/**
|
220
|
+
* Called by `serializeState` to attach any additional JSONifyable data
|
221
|
+
* to the serialized result.
|
222
|
+
*
|
223
|
+
* @reutrns an object that can be converted to JSON with `JSON.stringify`.
|
224
|
+
*/
|
225
|
+
serializeInternal() { }
|
226
|
+
/**
|
227
|
+
* Called by `deserializeState` with a version of the JSON outputted
|
228
|
+
* previously by `serializeInternal`.
|
229
|
+
*/
|
230
|
+
deserializeInternal(_json) { }
|
231
|
+
/**
|
232
|
+
* Creates, but does not add, an action button to this container.
|
233
|
+
*
|
234
|
+
* @see
|
235
|
+
* {@link addActionButton}
|
236
|
+
*/
|
237
|
+
makeActionButton(title, command, mustBeToplevel = true) {
|
238
|
+
const titleString = typeof title === 'string' ? title : title.label;
|
239
|
+
const widgetId = 'action-button';
|
240
|
+
const makeIcon = () => {
|
241
|
+
if (typeof title === 'string') {
|
242
|
+
return null;
|
243
|
+
}
|
244
|
+
return title.icon;
|
245
|
+
};
|
246
|
+
const widget = new ActionButtonWidget_1.default(this.editor, widgetId, makeIcon, titleString, command, this.editor.localization, mustBeToplevel);
|
247
|
+
return widget;
|
248
|
+
}
|
249
|
+
/**
|
250
|
+
* Adds an action button with `title` to this toolbar (or to the given `parent` element).
|
251
|
+
*
|
252
|
+
* @return The added button.
|
253
|
+
*/
|
254
|
+
addActionButton(title, command, mustBeToplevel = true) {
|
255
|
+
const widget = this.makeActionButton(title, command, mustBeToplevel);
|
256
|
+
this.addWidget(widget);
|
257
|
+
return widget;
|
258
|
+
}
|
259
|
+
/**
|
260
|
+
* Like {@link addActionButton}, except associates `tags` with the button that allow
|
261
|
+
* different toolbar styles to give the button tag-dependent styles.
|
262
|
+
*/
|
263
|
+
addTaggedActionButton(tags, title, command, mustBeToplevel = true) {
|
264
|
+
const widget = this.makeActionButton(title, command, mustBeToplevel);
|
265
|
+
widget.setTags(tags);
|
266
|
+
this.addWidget(widget);
|
267
|
+
return widget;
|
268
|
+
}
|
269
|
+
/**
|
270
|
+
* Adds a save button that, when clicked, calls `saveCallback`.
|
271
|
+
*
|
272
|
+
* **Note**: This is equivalent to
|
273
|
+
* ```ts
|
274
|
+
* const tags = [
|
275
|
+
* ToolbarWidgetTag.Save,
|
276
|
+
* ];
|
277
|
+
* toolbar.addTaggedActionButton(tags, {
|
278
|
+
* label: editor.localization.save,
|
279
|
+
* icon: editor.icons.makeSaveIcon(),
|
280
|
+
* }, () => {
|
281
|
+
* saveCallback();
|
282
|
+
* });
|
283
|
+
* ```
|
284
|
+
*
|
285
|
+
* @final
|
286
|
+
*/
|
287
|
+
addSaveButton(saveCallback) {
|
288
|
+
return this.addTaggedActionButton([BaseWidget_1.ToolbarWidgetTag.Save], {
|
289
|
+
label: this.editor.localization.save,
|
290
|
+
icon: this.editor.icons.makeSaveIcon(),
|
291
|
+
}, () => {
|
292
|
+
saveCallback();
|
293
|
+
});
|
294
|
+
}
|
295
|
+
/**
|
296
|
+
* Adds an "Exit" button that, when clicked, calls `exitCallback`.
|
297
|
+
*
|
298
|
+
* **Note**: This is equivalent to
|
299
|
+
* ```ts
|
300
|
+
* toolbar.addTaggedActionButton([ ToolbarWidgetTag.Exit ], {
|
301
|
+
* label: this.editor.localization.exit,
|
302
|
+
* icon: this.editor.icons.makeCloseIcon(),
|
303
|
+
* }, () => {
|
304
|
+
* exitCallback();
|
305
|
+
* });
|
306
|
+
* ```
|
307
|
+
*
|
308
|
+
* @final
|
309
|
+
*/
|
310
|
+
addExitButton(exitCallback) {
|
311
|
+
return this.addTaggedActionButton([BaseWidget_1.ToolbarWidgetTag.Exit], {
|
312
|
+
label: this.editor.localization.exit,
|
313
|
+
icon: this.editor.icons.makeCloseIcon(),
|
314
|
+
}, () => {
|
315
|
+
exitCallback();
|
316
|
+
});
|
317
|
+
}
|
318
|
+
/**
|
319
|
+
* Adds undo and redo buttons that trigger the editor's built-in undo and redo
|
320
|
+
* functionality.
|
321
|
+
*/
|
322
|
+
addUndoRedoButtons(undoFirst = true) {
|
323
|
+
const makeUndo = () => {
|
324
|
+
return this.addTaggedActionButton([
|
325
|
+
BaseWidget_1.ToolbarWidgetTag.Undo,
|
326
|
+
], {
|
327
|
+
label: this.localizationTable.undo,
|
328
|
+
icon: this.editor.icons.makeUndoIcon()
|
329
|
+
}, () => {
|
330
|
+
this.editor.history.undo();
|
331
|
+
});
|
332
|
+
};
|
333
|
+
const makeRedo = () => {
|
334
|
+
return this.addTaggedActionButton([
|
335
|
+
BaseWidget_1.ToolbarWidgetTag.Redo,
|
336
|
+
], {
|
337
|
+
label: this.localizationTable.redo,
|
338
|
+
icon: this.editor.icons.makeRedoIcon(),
|
339
|
+
}, () => {
|
340
|
+
this.editor.history.redo();
|
341
|
+
});
|
342
|
+
};
|
343
|
+
let undoButton;
|
344
|
+
let redoButton;
|
345
|
+
if (undoFirst) {
|
346
|
+
undoButton = makeUndo();
|
347
|
+
redoButton = makeRedo();
|
348
|
+
}
|
349
|
+
else {
|
350
|
+
redoButton = makeRedo();
|
351
|
+
undoButton = makeUndo();
|
352
|
+
}
|
353
|
+
undoButton.setDisabled(true);
|
354
|
+
redoButton.setDisabled(true);
|
355
|
+
this.editor.notifier.on(types_1.EditorEventType.UndoRedoStackUpdated, event => {
|
356
|
+
if (event.kind !== types_1.EditorEventType.UndoRedoStackUpdated) {
|
357
|
+
throw new Error('Wrong event type!');
|
358
|
+
}
|
359
|
+
undoButton.setDisabled(event.undoStackSize === 0);
|
360
|
+
redoButton.setDisabled(event.redoStackSize === 0);
|
361
|
+
});
|
362
|
+
}
|
363
|
+
/**
|
364
|
+
* Adds toolbar widgets based on the enabled tools.
|
365
|
+
*/
|
366
|
+
addDefaultToolWidgets() {
|
367
|
+
const toolController = this.editor.toolController;
|
368
|
+
for (const tool of toolController.getMatchingTools(Pen_1.default)) {
|
369
|
+
const widget = new PenToolWidget_1.default(this.editor, tool, this.localizationTable);
|
370
|
+
this.addWidget(widget);
|
371
|
+
}
|
372
|
+
for (const tool of toolController.getMatchingTools(Eraser_1.default)) {
|
373
|
+
this.addWidget(new EraserToolWidget_1.default(this.editor, tool, this.localizationTable));
|
374
|
+
}
|
375
|
+
for (const tool of toolController.getMatchingTools(SelectionTool_1.default)) {
|
376
|
+
this.addWidget(new SelectionToolWidget_1.default(this.editor, tool, this.localizationTable));
|
377
|
+
}
|
378
|
+
for (const tool of toolController.getMatchingTools(TextTool_1.default)) {
|
379
|
+
this.addWidget(new TextToolWidget_1.default(this.editor, tool, this.localizationTable));
|
380
|
+
}
|
381
|
+
const panZoomTool = toolController.getMatchingTools(PanZoom_1.default)[0];
|
382
|
+
if (panZoomTool) {
|
383
|
+
this.addWidget(new HandToolWidget_1.default(this.editor, panZoomTool, this.localizationTable));
|
384
|
+
}
|
385
|
+
this.addWidget(new DocumentPropertiesWidget_1.default(this.editor, this.localizationTable));
|
386
|
+
this.addWidget(new InsertImageWidget_1.default(this.editor, this.localizationTable));
|
387
|
+
}
|
388
|
+
addDefaultActionButtons() {
|
389
|
+
this.addUndoRedoButtons();
|
390
|
+
}
|
391
|
+
/** Remove this toolbar from its container and clean up listeners. */
|
392
|
+
remove() {
|
393
|
+
this.closeColorPickerOverlay?.remove();
|
394
|
+
for (const listener of __classPrivateFieldGet(this, _AbstractToolbar_listeners, "f")) {
|
395
|
+
listener.remove();
|
396
|
+
}
|
397
|
+
__classPrivateFieldSet(this, _AbstractToolbar_listeners, [], "f");
|
398
|
+
this.onRemove();
|
399
|
+
}
|
400
|
+
/**
|
401
|
+
* Removes `listener` when {@link remove} is called.
|
402
|
+
*/
|
403
|
+
manageListener(listener) {
|
404
|
+
__classPrivateFieldGet(this, _AbstractToolbar_listeners, "f").push(listener);
|
405
|
+
}
|
406
|
+
}
|
407
|
+
_AbstractToolbar_listeners = new WeakMap(), _AbstractToolbar_widgetsById = new WeakMap(), _AbstractToolbar_widgetList = new WeakMap(), _AbstractToolbar_updateColoris = new WeakMap();
|
408
|
+
AbstractToolbar.colorisStarted = false;
|
409
|
+
AbstractToolbar.rootToolbarId = 'root-toolbar--';
|
410
|
+
exports.default = AbstractToolbar;
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import Editor from '../Editor';
|
2
|
+
import { ToolbarLocalization } from './localization';
|
3
|
+
import BaseWidget from './widgets/BaseWidget';
|
4
|
+
import AbstractToolbar, { SpacerOptions } from './AbstractToolbar';
|
5
|
+
export declare const makeDropdownToolbar: (editor: Editor) => AbstractToolbar;
|
6
|
+
export default class DropdownToolbar extends AbstractToolbar {
|
7
|
+
protected container: HTMLElement;
|
8
|
+
private resizeObserver;
|
9
|
+
private widgetOrderCounter;
|
10
|
+
private overflowWidget;
|
11
|
+
/** @internal */
|
12
|
+
constructor(editor: Editor, parent: HTMLElement, localizationTable?: ToolbarLocalization);
|
13
|
+
private reLayoutQueued;
|
14
|
+
private queueReLayout;
|
15
|
+
private reLayout;
|
16
|
+
protected addWidgetInternal(widget: BaseWidget): void;
|
17
|
+
protected removeWidgetInternal(widget: BaseWidget): void;
|
18
|
+
addSpacer(options?: Partial<SpacerOptions>): void;
|
19
|
+
/**
|
20
|
+
* Adds a widget that toggles the overflow menu. Call `addOverflowWidget` to ensure
|
21
|
+
* that this widget is in the correct space (if shown).
|
22
|
+
*
|
23
|
+
* @example
|
24
|
+
* ```ts
|
25
|
+
* toolbar.addDefaultToolWidgets();
|
26
|
+
* toolbar.addOverflowWidget();
|
27
|
+
* toolbar.addDefaultActionButtons();
|
28
|
+
* ```
|
29
|
+
* shows the overflow widget between the default tool widgets and the default action buttons,
|
30
|
+
* if shown.
|
31
|
+
*/
|
32
|
+
addOverflowWidget(): void;
|
33
|
+
/**
|
34
|
+
* Adds both the default tool widgets and action buttons. Equivalent to
|
35
|
+
* ```ts
|
36
|
+
* toolbar.addDefaultToolWidgets();
|
37
|
+
* toolbar.addOverflowWidget();
|
38
|
+
* toolbar.addDefaultActionButtons();
|
39
|
+
* ```
|
40
|
+
*/
|
41
|
+
addDefaults(): void;
|
42
|
+
protected onRemove(): void;
|
43
|
+
}
|
@@ -0,0 +1,176 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.makeDropdownToolbar = void 0;
|
7
|
+
const localization_1 = require("./localization");
|
8
|
+
const OverflowWidget_1 = __importDefault(require("./widgets/OverflowWidget"));
|
9
|
+
const AbstractToolbar_1 = __importDefault(require("./AbstractToolbar"));
|
10
|
+
const constants_1 = require("./constants");
|
11
|
+
const makeDropdownToolbar = (editor) => {
|
12
|
+
return new DropdownToolbar(editor, editor.getRootElement());
|
13
|
+
};
|
14
|
+
exports.makeDropdownToolbar = makeDropdownToolbar;
|
15
|
+
class DropdownToolbar extends AbstractToolbar_1.default {
|
16
|
+
/** @internal */
|
17
|
+
constructor(editor, parent, localizationTable = localization_1.defaultToolbarLocalization) {
|
18
|
+
super(editor, localizationTable);
|
19
|
+
// Flex-order of the next widget to be added.
|
20
|
+
this.widgetOrderCounter = 0;
|
21
|
+
// Widget to toggle overflow menu.
|
22
|
+
this.overflowWidget = null;
|
23
|
+
this.reLayoutQueued = false;
|
24
|
+
this.container = document.createElement('div');
|
25
|
+
this.container.classList.add(`${constants_1.toolbarCSSPrefix}root`);
|
26
|
+
this.container.classList.add(`${constants_1.toolbarCSSPrefix}element`);
|
27
|
+
this.container.classList.add(`${constants_1.toolbarCSSPrefix}dropdown-toolbar`);
|
28
|
+
this.container.setAttribute('role', 'toolbar');
|
29
|
+
parent.appendChild(this.container);
|
30
|
+
if ('ResizeObserver' in window) {
|
31
|
+
this.resizeObserver = new ResizeObserver((_entries) => {
|
32
|
+
this.reLayout();
|
33
|
+
});
|
34
|
+
this.resizeObserver.observe(this.container);
|
35
|
+
}
|
36
|
+
else {
|
37
|
+
console.warn('ResizeObserver not supported. Toolbar will not resize.');
|
38
|
+
}
|
39
|
+
}
|
40
|
+
queueReLayout() {
|
41
|
+
if (!this.reLayoutQueued) {
|
42
|
+
this.reLayoutQueued = true;
|
43
|
+
requestAnimationFrame(() => this.reLayout());
|
44
|
+
}
|
45
|
+
}
|
46
|
+
reLayout() {
|
47
|
+
this.reLayoutQueued = false;
|
48
|
+
if (!this.overflowWidget) {
|
49
|
+
return;
|
50
|
+
}
|
51
|
+
const getTotalWidth = (widgetList) => {
|
52
|
+
let totalWidth = 0;
|
53
|
+
for (const widget of widgetList) {
|
54
|
+
if (!widget.isHidden()) {
|
55
|
+
totalWidth += widget.getButtonWidth();
|
56
|
+
}
|
57
|
+
}
|
58
|
+
return totalWidth;
|
59
|
+
};
|
60
|
+
// Returns true if there is enough empty space to move the first child
|
61
|
+
// from the overflow menu to the main menu.
|
62
|
+
const canRemoveFirstChildFromOverflow = (freeSpaceInMainMenu) => {
|
63
|
+
const overflowChildren = this.overflowWidget?.getChildWidgets() ?? [];
|
64
|
+
if (overflowChildren.length === 0) {
|
65
|
+
return false;
|
66
|
+
}
|
67
|
+
return overflowChildren[0].getButtonWidth() <= freeSpaceInMainMenu;
|
68
|
+
};
|
69
|
+
const allWidgets = this.getAllWidgets();
|
70
|
+
let overflowWidgetsWidth = getTotalWidth(this.overflowWidget.getChildWidgets());
|
71
|
+
let shownWidgetWidth = getTotalWidth(allWidgets) - overflowWidgetsWidth;
|
72
|
+
let availableWidth = this.container.clientWidth * 0.87;
|
73
|
+
// If on a device that has enough vertical space, allow
|
74
|
+
// showing two rows of buttons.
|
75
|
+
// TODO: Fix magic numbers
|
76
|
+
if (window.innerHeight > availableWidth * 1.75) {
|
77
|
+
availableWidth *= 1.75;
|
78
|
+
}
|
79
|
+
let updatedChildren = false;
|
80
|
+
// If we can remove at least one child from the overflow menu,
|
81
|
+
if (canRemoveFirstChildFromOverflow(availableWidth - shownWidgetWidth)) {
|
82
|
+
// Move widgets to the main menu.
|
83
|
+
const overflowChildren = this.overflowWidget.clearChildren();
|
84
|
+
for (const child of overflowChildren) {
|
85
|
+
child.addTo(this.container);
|
86
|
+
child.setIsToplevel(true);
|
87
|
+
if (!child.isHidden()) {
|
88
|
+
shownWidgetWidth += child.getButtonWidth();
|
89
|
+
}
|
90
|
+
}
|
91
|
+
overflowWidgetsWidth = 0;
|
92
|
+
updatedChildren = true;
|
93
|
+
}
|
94
|
+
if (shownWidgetWidth >= availableWidth) {
|
95
|
+
// Move widgets to the overflow menu.
|
96
|
+
// Start with the rightmost widget, move to the leftmost
|
97
|
+
for (let i = allWidgets.length - 1; i >= 0 && shownWidgetWidth >= availableWidth; i--) {
|
98
|
+
const child = allWidgets[i];
|
99
|
+
if (this.overflowWidget.hasAsChild(child)) {
|
100
|
+
continue;
|
101
|
+
}
|
102
|
+
if (child.canBeInOverflowMenu()) {
|
103
|
+
shownWidgetWidth -= child.getButtonWidth();
|
104
|
+
this.overflowWidget.addToOverflow(child);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
updatedChildren = true;
|
108
|
+
}
|
109
|
+
// Hide/show the overflow widget.
|
110
|
+
this.overflowWidget.setHidden(this.overflowWidget.getChildWidgets().length === 0);
|
111
|
+
if (updatedChildren) {
|
112
|
+
this.setupColorPickers();
|
113
|
+
}
|
114
|
+
}
|
115
|
+
addWidgetInternal(widget) {
|
116
|
+
const container = widget.addTo(this.container);
|
117
|
+
// Ensure that the widget gets displayed in the correct
|
118
|
+
// place in the toolbar, even if it's removed and re-added.
|
119
|
+
container.style.order = `${this.widgetOrderCounter++}`;
|
120
|
+
this.queueReLayout();
|
121
|
+
}
|
122
|
+
removeWidgetInternal(widget) {
|
123
|
+
widget.remove();
|
124
|
+
this.queueReLayout();
|
125
|
+
}
|
126
|
+
addSpacer(options = {}) {
|
127
|
+
const spacer = document.createElement('div');
|
128
|
+
spacer.classList.add(`${constants_1.toolbarCSSPrefix}spacer`);
|
129
|
+
if (options.grow) {
|
130
|
+
spacer.style.flexGrow = `${options.grow}`;
|
131
|
+
}
|
132
|
+
if (options.minSize) {
|
133
|
+
spacer.style.minWidth = options.minSize;
|
134
|
+
}
|
135
|
+
if (options.maxSize) {
|
136
|
+
spacer.style.maxWidth = options.maxSize;
|
137
|
+
}
|
138
|
+
spacer.style.order = `${this.widgetOrderCounter++}`;
|
139
|
+
this.container.appendChild(spacer);
|
140
|
+
}
|
141
|
+
/**
|
142
|
+
* Adds a widget that toggles the overflow menu. Call `addOverflowWidget` to ensure
|
143
|
+
* that this widget is in the correct space (if shown).
|
144
|
+
*
|
145
|
+
* @example
|
146
|
+
* ```ts
|
147
|
+
* toolbar.addDefaultToolWidgets();
|
148
|
+
* toolbar.addOverflowWidget();
|
149
|
+
* toolbar.addDefaultActionButtons();
|
150
|
+
* ```
|
151
|
+
* shows the overflow widget between the default tool widgets and the default action buttons,
|
152
|
+
* if shown.
|
153
|
+
*/
|
154
|
+
addOverflowWidget() {
|
155
|
+
this.overflowWidget = new OverflowWidget_1.default(this.editor, this.localizationTable);
|
156
|
+
this.addWidget(this.overflowWidget);
|
157
|
+
}
|
158
|
+
/**
|
159
|
+
* Adds both the default tool widgets and action buttons. Equivalent to
|
160
|
+
* ```ts
|
161
|
+
* toolbar.addDefaultToolWidgets();
|
162
|
+
* toolbar.addOverflowWidget();
|
163
|
+
* toolbar.addDefaultActionButtons();
|
164
|
+
* ```
|
165
|
+
*/
|
166
|
+
addDefaults() {
|
167
|
+
this.addDefaultToolWidgets();
|
168
|
+
this.addOverflowWidget();
|
169
|
+
this.addDefaultActionButtons();
|
170
|
+
}
|
171
|
+
onRemove() {
|
172
|
+
this.container.remove();
|
173
|
+
this.resizeObserver.disconnect();
|
174
|
+
}
|
175
|
+
}
|
176
|
+
exports.default = DropdownToolbar;
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import Editor from '../Editor';
|
2
|
+
import { ToolbarLocalization } from './localization';
|
3
|
+
import BaseWidget from './widgets/BaseWidget';
|
4
|
+
import AbstractToolbar, { SpacerOptions } from './AbstractToolbar';
|
5
|
+
export declare const makeEdgeToolbar: (editor: Editor) => AbstractToolbar;
|
6
|
+
export default class EdgeToolbar extends AbstractToolbar {
|
7
|
+
private toolbarContainer;
|
8
|
+
private toolbarActionRow;
|
9
|
+
private toolbarToolRow;
|
10
|
+
private toolRowResizeObserver;
|
11
|
+
private menuContainer;
|
12
|
+
private sidebarContainer;
|
13
|
+
private sidebarContent;
|
14
|
+
private closeButton;
|
15
|
+
private layoutManager;
|
16
|
+
private sidebarVisible;
|
17
|
+
private sidebarY;
|
18
|
+
private sidebarTitle;
|
19
|
+
/** @internal */
|
20
|
+
constructor(editor: Editor, parent: HTMLElement, localizationTable: ToolbarLocalization);
|
21
|
+
private listenForVisibilityChanges;
|
22
|
+
private onToolbarRowResize;
|
23
|
+
addSpacer(_options?: Partial<SpacerOptions> | undefined): void;
|
24
|
+
addUndoRedoButtons(): void;
|
25
|
+
addDefaults(): void;
|
26
|
+
private updateWidgetCSSClasses;
|
27
|
+
protected addWidgetInternal(widget: BaseWidget): void;
|
28
|
+
protected removeWidgetInternal(widget: BaseWidget): void;
|
29
|
+
protected onRemove(): void;
|
30
|
+
private initDragListeners;
|
31
|
+
/**
|
32
|
+
* Updates the position of this menu **during** a drag. After a drag ends,
|
33
|
+
* {@link finalizeDrag} should be called.
|
34
|
+
*/
|
35
|
+
private handleDrag;
|
36
|
+
/** Returns `this.sidebarY` rounded to a valid value. */
|
37
|
+
private snappedSidebarY;
|
38
|
+
/**
|
39
|
+
* Moves the menu to a valid location or closes it, depending on
|
40
|
+
* the position set by the drag.
|
41
|
+
*/
|
42
|
+
private finalizeDrag;
|
43
|
+
protected serializeInternal(): {
|
44
|
+
menuSizeY: number;
|
45
|
+
};
|
46
|
+
protected deserializeInternal(json: any): void;
|
47
|
+
}
|