js-draw 0.17.4 → 0.18.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/CHANGELOG.md +8 -0
- package/dist/bundle.js +9 -1
- package/package.json +35 -33
- package/tsconfig.json +3 -2
- package/tsconfig.mjs.json +9 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -34
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.github/ISSUE_TEMPLATE/translation.yml +0 -902
- package/.github/pull_request_template.md +0 -15
- package/.github/workflows/firebase-hosting-merge.yml +0 -32
- package/.github/workflows/firebase-hosting-pull-request.yml +0 -32
- package/.github/workflows/github-pages.yml +0 -56
- package/.husky/pre-commit +0 -4
- package/build_tools/BundledFile.ts +0 -167
- package/build_tools/buildTranslationTemplate.ts +0 -121
- package/build_tools/bundle.ts +0 -11
- package/dist/build_tools/BundledFile.d.ts +0 -13
- package/dist/build_tools/BundledFile.js +0 -157
- package/dist/build_tools/buildTranslationTemplate.d.ts +0 -1
- package/dist/build_tools/buildTranslationTemplate.js +0 -94
- package/dist/build_tools/bundle.d.ts +0 -1
- package/dist/build_tools/bundle.js +0 -5
- package/dist/src/Color4.d.ts +0 -60
- package/dist/src/Color4.js +0 -192
- package/dist/src/Editor.d.ts +0 -308
- package/dist/src/Editor.js +0 -874
- package/dist/src/EditorImage.d.ts +0 -97
- package/dist/src/EditorImage.js +0 -477
- package/dist/src/EventDispatcher.d.ts +0 -30
- package/dist/src/EventDispatcher.js +0 -54
- package/dist/src/Pointer.d.ts +0 -24
- package/dist/src/Pointer.js +0 -80
- package/dist/src/SVGLoader.d.ts +0 -48
- package/dist/src/SVGLoader.js +0 -442
- package/dist/src/UndoRedoHistory.d.ts +0 -19
- package/dist/src/UndoRedoHistory.js +0 -91
- package/dist/src/Viewport.d.ts +0 -71
- package/dist/src/Viewport.js +0 -256
- package/dist/src/bundle/bundled.d.ts +0 -4
- package/dist/src/bundle/bundled.js +0 -5
- package/dist/src/commands/Command.d.ts +0 -16
- package/dist/src/commands/Command.js +0 -30
- package/dist/src/commands/Duplicate.d.ts +0 -14
- package/dist/src/commands/Duplicate.js +0 -33
- package/dist/src/commands/Erase.d.ts +0 -14
- package/dist/src/commands/Erase.js +0 -57
- package/dist/src/commands/SerializableCommand.d.ts +0 -12
- package/dist/src/commands/SerializableCommand.js +0 -36
- package/dist/src/commands/UnresolvedCommand.d.ts +0 -14
- package/dist/src/commands/UnresolvedCommand.js +0 -22
- package/dist/src/commands/invertCommand.d.ts +0 -4
- package/dist/src/commands/invertCommand.js +0 -44
- package/dist/src/commands/lib.d.ts +0 -7
- package/dist/src/commands/lib.js +0 -7
- package/dist/src/commands/localization.d.ts +0 -23
- package/dist/src/commands/localization.js +0 -21
- package/dist/src/commands/uniteCommands.d.ts +0 -4
- package/dist/src/commands/uniteCommands.js +0 -116
- package/dist/src/components/AbstractComponent.d.ts +0 -73
- package/dist/src/components/AbstractComponent.js +0 -252
- package/dist/src/components/ImageBackground.d.ts +0 -42
- package/dist/src/components/ImageBackground.js +0 -139
- package/dist/src/components/ImageComponent.d.ts +0 -31
- package/dist/src/components/ImageComponent.js +0 -146
- package/dist/src/components/RestylableComponent.d.ts +0 -24
- package/dist/src/components/RestylableComponent.js +0 -80
- package/dist/src/components/SVGGlobalAttributesObject.d.ts +0 -21
- package/dist/src/components/SVGGlobalAttributesObject.js +0 -59
- package/dist/src/components/Stroke.d.ts +0 -40
- package/dist/src/components/Stroke.js +0 -185
- package/dist/src/components/TextComponent.d.ts +0 -53
- package/dist/src/components/TextComponent.js +0 -252
- package/dist/src/components/UnknownSVGObject.d.ts +0 -18
- package/dist/src/components/UnknownSVGObject.js +0 -44
- package/dist/src/components/builders/ArrowBuilder.d.ts +0 -19
- package/dist/src/components/builders/ArrowBuilder.js +0 -86
- package/dist/src/components/builders/FreehandLineBuilder.d.ts +0 -33
- package/dist/src/components/builders/FreehandLineBuilder.js +0 -165
- package/dist/src/components/builders/LineBuilder.d.ts +0 -18
- package/dist/src/components/builders/LineBuilder.js +0 -58
- package/dist/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +0 -36
- package/dist/src/components/builders/PressureSensitiveFreehandLineBuilder.js +0 -339
- package/dist/src/components/builders/RectangleBuilder.d.ts +0 -20
- package/dist/src/components/builders/RectangleBuilder.js +0 -50
- package/dist/src/components/builders/types.d.ts +0 -12
- package/dist/src/components/builders/types.js +0 -1
- package/dist/src/components/lib.d.ts +0 -12
- package/dist/src/components/lib.js +0 -12
- package/dist/src/components/localization.d.ts +0 -11
- package/dist/src/components/localization.js +0 -10
- package/dist/src/components/util/StrokeSmoother.d.ts +0 -35
- package/dist/src/components/util/StrokeSmoother.js +0 -210
- package/dist/src/components/util/describeComponentList.d.ts +0 -4
- package/dist/src/components/util/describeComponentList.js +0 -14
- package/dist/src/lib.d.ts +0 -34
- package/dist/src/lib.js +0 -34
- package/dist/src/localization.d.ts +0 -14
- package/dist/src/localization.js +0 -10
- package/dist/src/localizations/de.d.ts +0 -3
- package/dist/src/localizations/de.js +0 -4
- package/dist/src/localizations/en.d.ts +0 -3
- package/dist/src/localizations/en.js +0 -4
- package/dist/src/localizations/es.d.ts +0 -3
- package/dist/src/localizations/es.js +0 -18
- package/dist/src/localizations/getLocalizationTable.d.ts +0 -3
- package/dist/src/localizations/getLocalizationTable.js +0 -45
- package/dist/src/math/LineSegment2.d.ts +0 -24
- package/dist/src/math/LineSegment2.js +0 -125
- package/dist/src/math/Mat33.d.ts +0 -118
- package/dist/src/math/Mat33.js +0 -326
- package/dist/src/math/Path.d.ts +0 -71
- package/dist/src/math/Path.js +0 -648
- package/dist/src/math/Rect2.d.ts +0 -52
- package/dist/src/math/Rect2.js +0 -228
- package/dist/src/math/Triangle.d.ts +0 -11
- package/dist/src/math/Triangle.js +0 -19
- package/dist/src/math/Vec2.d.ts +0 -13
- package/dist/src/math/Vec2.js +0 -13
- package/dist/src/math/Vec3.d.ts +0 -106
- package/dist/src/math/Vec3.js +0 -174
- package/dist/src/math/lib.d.ts +0 -7
- package/dist/src/math/lib.js +0 -7
- package/dist/src/math/rounding.d.ts +0 -4
- package/dist/src/math/rounding.js +0 -128
- package/dist/src/rendering/Display.d.ts +0 -75
- package/dist/src/rendering/Display.js +0 -207
- package/dist/src/rendering/RenderingStyle.d.ts +0 -31
- package/dist/src/rendering/RenderingStyle.js +0 -38
- package/dist/src/rendering/TextRenderingStyle.d.ts +0 -36
- package/dist/src/rendering/TextRenderingStyle.js +0 -23
- package/dist/src/rendering/caching/CacheRecord.d.ts +0 -20
- package/dist/src/rendering/caching/CacheRecord.js +0 -55
- package/dist/src/rendering/caching/CacheRecordManager.d.ts +0 -12
- package/dist/src/rendering/caching/CacheRecordManager.js +0 -43
- package/dist/src/rendering/caching/RenderingCache.d.ts +0 -11
- package/dist/src/rendering/caching/RenderingCache.js +0 -45
- package/dist/src/rendering/caching/RenderingCacheNode.d.ts +0 -29
- package/dist/src/rendering/caching/RenderingCacheNode.js +0 -320
- package/dist/src/rendering/caching/testUtils.d.ts +0 -9
- package/dist/src/rendering/caching/testUtils.js +0 -20
- package/dist/src/rendering/caching/types.d.ts +0 -19
- package/dist/src/rendering/caching/types.js +0 -1
- package/dist/src/rendering/lib.d.ts +0 -5
- package/dist/src/rendering/lib.js +0 -5
- package/dist/src/rendering/localization.d.ts +0 -10
- package/dist/src/rendering/localization.js +0 -9
- package/dist/src/rendering/renderers/AbstractRenderer.d.ts +0 -68
- package/dist/src/rendering/renderers/AbstractRenderer.js +0 -144
- package/dist/src/rendering/renderers/CanvasRenderer.d.ts +0 -63
- package/dist/src/rendering/renderers/CanvasRenderer.js +0 -230
- package/dist/src/rendering/renderers/DummyRenderer.d.ts +0 -35
- package/dist/src/rendering/renderers/DummyRenderer.js +0 -106
- package/dist/src/rendering/renderers/SVGRenderer.d.ts +0 -57
- package/dist/src/rendering/renderers/SVGRenderer.js +0 -304
- package/dist/src/rendering/renderers/TextOnlyRenderer.d.ts +0 -29
- package/dist/src/rendering/renderers/TextOnlyRenderer.js +0 -57
- package/dist/src/testing/beforeEachFile.d.ts +0 -1
- package/dist/src/testing/beforeEachFile.js +0 -7
- package/dist/src/testing/createEditor.d.ts +0 -4
- package/dist/src/testing/createEditor.js +0 -9
- package/dist/src/testing/lib.d.ts +0 -2
- package/dist/src/testing/lib.js +0 -2
- package/dist/src/testing/loadExpectExtensions.d.ts +0 -2
- package/dist/src/testing/loadExpectExtensions.js +0 -24
- package/dist/src/testing/sendPenEvent.d.ts +0 -12
- package/dist/src/testing/sendPenEvent.js +0 -19
- package/dist/src/testing/sendTouchEvent.d.ts +0 -42
- package/dist/src/testing/sendTouchEvent.js +0 -62
- package/dist/src/toolbar/HTMLToolbar.d.ts +0 -103
- package/dist/src/toolbar/HTMLToolbar.js +0 -376
- package/dist/src/toolbar/IconProvider.d.ts +0 -62
- package/dist/src/toolbar/IconProvider.js +0 -654
- package/dist/src/toolbar/lib.d.ts +0 -3
- package/dist/src/toolbar/lib.js +0 -3
- package/dist/src/toolbar/localization.d.ts +0 -49
- package/dist/src/toolbar/localization.js +0 -48
- package/dist/src/toolbar/makeColorInput.d.ts +0 -6
- package/dist/src/toolbar/makeColorInput.js +0 -113
- package/dist/src/toolbar/types.d.ts +0 -4
- package/dist/src/toolbar/types.js +0 -1
- package/dist/src/toolbar/widgets/ActionButtonWidget.d.ts +0 -15
- package/dist/src/toolbar/widgets/ActionButtonWidget.js +0 -25
- package/dist/src/toolbar/widgets/BaseToolWidget.d.ts +0 -11
- package/dist/src/toolbar/widgets/BaseToolWidget.js +0 -44
- package/dist/src/toolbar/widgets/BaseWidget.d.ts +0 -72
- package/dist/src/toolbar/widgets/BaseWidget.js +0 -307
- package/dist/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +0 -18
- package/dist/src/toolbar/widgets/DocumentPropertiesWidget.js +0 -120
- package/dist/src/toolbar/widgets/EraserToolWidget.d.ts +0 -17
- package/dist/src/toolbar/widgets/EraserToolWidget.js +0 -57
- package/dist/src/toolbar/widgets/HandToolWidget.d.ts +0 -17
- package/dist/src/toolbar/widgets/HandToolWidget.js +0 -172
- package/dist/src/toolbar/widgets/InsertImageWidget.d.ts +0 -19
- package/dist/src/toolbar/widgets/InsertImageWidget.js +0 -170
- package/dist/src/toolbar/widgets/OverflowWidget.d.ts +0 -25
- package/dist/src/toolbar/widgets/OverflowWidget.js +0 -71
- package/dist/src/toolbar/widgets/PenToolWidget.d.ts +0 -27
- package/dist/src/toolbar/widgets/PenToolWidget.js +0 -220
- package/dist/src/toolbar/widgets/SelectionToolWidget.d.ts +0 -13
- package/dist/src/toolbar/widgets/SelectionToolWidget.js +0 -147
- package/dist/src/toolbar/widgets/TextToolWidget.d.ts +0 -16
- package/dist/src/toolbar/widgets/TextToolWidget.js +0 -109
- package/dist/src/toolbar/widgets/lib.d.ts +0 -10
- package/dist/src/toolbar/widgets/lib.js +0 -10
- package/dist/src/tools/BaseTool.d.ts +0 -22
- package/dist/src/tools/BaseTool.js +0 -63
- package/dist/src/tools/Eraser.d.ts +0 -23
- package/dist/src/tools/Eraser.js +0 -106
- package/dist/src/tools/FindTool.d.ts +0 -21
- package/dist/src/tools/FindTool.js +0 -114
- package/dist/src/tools/PanZoom.d.ts +0 -52
- package/dist/src/tools/PanZoom.js +0 -414
- package/dist/src/tools/PasteHandler.d.ts +0 -23
- package/dist/src/tools/PasteHandler.js +0 -93
- package/dist/src/tools/Pen.d.ts +0 -39
- package/dist/src/tools/Pen.js +0 -173
- package/dist/src/tools/PipetteTool.d.ts +0 -18
- package/dist/src/tools/PipetteTool.js +0 -39
- package/dist/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -8
- package/dist/src/tools/SelectionTool/SelectAllShortcutHandler.js +0 -22
- package/dist/src/tools/SelectionTool/Selection.d.ts +0 -64
- package/dist/src/tools/SelectionTool/Selection.js +0 -459
- package/dist/src/tools/SelectionTool/SelectionHandle.d.ts +0 -38
- package/dist/src/tools/SelectionTool/SelectionHandle.js +0 -81
- package/dist/src/tools/SelectionTool/SelectionTool.d.ts +0 -36
- package/dist/src/tools/SelectionTool/SelectionTool.js +0 -398
- package/dist/src/tools/SelectionTool/TransformMode.d.ts +0 -34
- package/dist/src/tools/SelectionTool/TransformMode.js +0 -98
- package/dist/src/tools/SelectionTool/types.d.ts +0 -9
- package/dist/src/tools/SelectionTool/types.js +0 -11
- package/dist/src/tools/TextTool.d.ts +0 -33
- package/dist/src/tools/TextTool.js +0 -256
- package/dist/src/tools/ToolController.d.ts +0 -18
- package/dist/src/tools/ToolController.js +0 -158
- package/dist/src/tools/ToolEnabledGroup.d.ts +0 -6
- package/dist/src/tools/ToolEnabledGroup.js +0 -11
- package/dist/src/tools/ToolSwitcherShortcut.d.ts +0 -16
- package/dist/src/tools/ToolSwitcherShortcut.js +0 -32
- package/dist/src/tools/ToolbarShortcutHandler.d.ts +0 -12
- package/dist/src/tools/ToolbarShortcutHandler.js +0 -23
- package/dist/src/tools/UndoRedoShortcut.d.ts +0 -8
- package/dist/src/tools/UndoRedoShortcut.js +0 -22
- package/dist/src/tools/lib.d.ts +0 -16
- package/dist/src/tools/lib.js +0 -16
- package/dist/src/tools/localization.d.ts +0 -28
- package/dist/src/tools/localization.js +0 -27
- package/dist/src/types.d.ts +0 -151
- package/dist/src/types.js +0 -35
- package/dist/src/util/assertions.d.ts +0 -23
- package/dist/src/util/assertions.js +0 -45
- package/dist/src/util/fileToBase64.d.ts +0 -3
- package/dist/src/util/fileToBase64.js +0 -13
- package/dist/src/util/untilNextAnimationFrame.d.ts +0 -3
- package/dist/src/util/untilNextAnimationFrame.js +0 -7
- package/dist/src/util/waitForTimeout.d.ts +0 -2
- package/dist/src/util/waitForTimeout.js +0 -7
- package/src/Color4.test.ts +0 -40
- package/src/Color4.ts +0 -234
- package/src/Editor.css +0 -86
- package/src/Editor.loadFrom.test.ts +0 -24
- package/src/Editor.toSVG.test.ts +0 -111
- package/src/Editor.ts +0 -1122
- package/src/EditorImage.test.ts +0 -120
- package/src/EditorImage.ts +0 -603
- package/src/EventDispatcher.test.ts +0 -123
- package/src/EventDispatcher.ts +0 -71
- package/src/Pointer.ts +0 -127
- package/src/SVGLoader.test.ts +0 -114
- package/src/SVGLoader.ts +0 -511
- package/src/UndoRedoHistory.test.ts +0 -33
- package/src/UndoRedoHistory.ts +0 -102
- package/src/Viewport.ts +0 -319
- package/src/bundle/bundled.ts +0 -7
- package/src/commands/Command.ts +0 -45
- package/src/commands/Duplicate.ts +0 -48
- package/src/commands/Erase.ts +0 -74
- package/src/commands/SerializableCommand.ts +0 -49
- package/src/commands/UnresolvedCommand.ts +0 -37
- package/src/commands/invertCommand.ts +0 -51
- package/src/commands/lib.ts +0 -16
- package/src/commands/localization.ts +0 -47
- package/src/commands/uniteCommands.test.ts +0 -23
- package/src/commands/uniteCommands.ts +0 -135
- package/src/components/AbstractComponent.transformBy.test.ts +0 -22
- package/src/components/AbstractComponent.ts +0 -364
- package/src/components/ImageBackground.test.ts +0 -35
- package/src/components/ImageBackground.ts +0 -176
- package/src/components/ImageComponent.ts +0 -171
- package/src/components/RestylableComponent.ts +0 -142
- package/src/components/SVGGlobalAttributesObject.ts +0 -81
- package/src/components/Stroke.test.ts +0 -139
- package/src/components/Stroke.ts +0 -245
- package/src/components/TextComponent.test.ts +0 -99
- package/src/components/TextComponent.ts +0 -315
- package/src/components/UnknownSVGObject.test.ts +0 -10
- package/src/components/UnknownSVGObject.ts +0 -60
- package/src/components/builders/ArrowBuilder.ts +0 -107
- package/src/components/builders/FreehandLineBuilder.ts +0 -212
- package/src/components/builders/LineBuilder.ts +0 -77
- package/src/components/builders/PressureSensitiveFreehandLineBuilder.ts +0 -454
- package/src/components/builders/RectangleBuilder.ts +0 -74
- package/src/components/builders/types.ts +0 -15
- package/src/components/lib.ts +0 -25
- package/src/components/localization.ts +0 -22
- package/src/components/util/StrokeSmoother.ts +0 -293
- package/src/components/util/describeComponentList.ts +0 -18
- package/src/lib.ts +0 -37
- package/src/localization.ts +0 -34
- package/src/localizations/de.ts +0 -98
- package/src/localizations/en.ts +0 -8
- package/src/localizations/es.ts +0 -74
- package/src/localizations/getLocalizationTable.test.ts +0 -27
- package/src/localizations/getLocalizationTable.ts +0 -55
- package/src/math/LineSegment2.test.ts +0 -99
- package/src/math/LineSegment2.ts +0 -160
- package/src/math/Mat33.test.ts +0 -244
- package/src/math/Mat33.ts +0 -437
- package/src/math/Path.fromString.test.ts +0 -223
- package/src/math/Path.test.ts +0 -198
- package/src/math/Path.toString.test.ts +0 -77
- package/src/math/Path.ts +0 -790
- package/src/math/Rect2.test.ts +0 -204
- package/src/math/Rect2.ts +0 -315
- package/src/math/Triangle.ts +0 -29
- package/src/math/Vec2.test.ts +0 -30
- package/src/math/Vec2.ts +0 -18
- 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/rounding.test.ts +0 -65
- package/src/math/rounding.ts +0 -156
- package/src/rendering/Display.ts +0 -249
- package/src/rendering/RenderingStyle.test.ts +0 -68
- package/src/rendering/RenderingStyle.ts +0 -55
- package/src/rendering/TextRenderingStyle.ts +0 -45
- package/src/rendering/caching/CacheRecord.test.ts +0 -49
- package/src/rendering/caching/CacheRecord.ts +0 -77
- package/src/rendering/caching/CacheRecordManager.ts +0 -71
- package/src/rendering/caching/RenderingCache.test.ts +0 -44
- package/src/rendering/caching/RenderingCache.ts +0 -66
- package/src/rendering/caching/RenderingCacheNode.ts +0 -405
- package/src/rendering/caching/testUtils.ts +0 -35
- package/src/rendering/caching/types.ts +0 -34
- package/src/rendering/lib.ts +0 -6
- package/src/rendering/localization.ts +0 -20
- package/src/rendering/renderers/AbstractRenderer.ts +0 -222
- package/src/rendering/renderers/CanvasRenderer.ts +0 -296
- package/src/rendering/renderers/DummyRenderer.test.ts +0 -42
- package/src/rendering/renderers/DummyRenderer.ts +0 -136
- package/src/rendering/renderers/SVGRenderer.ts +0 -354
- package/src/rendering/renderers/TextOnlyRenderer.ts +0 -70
- package/src/styles.js +0 -7
- package/src/testing/beforeEachFile.ts +0 -8
- package/src/testing/createEditor.ts +0 -11
- package/src/testing/global.d.ts +0 -17
- package/src/testing/lib.ts +0 -3
- package/src/testing/loadExpectExtensions.ts +0 -25
- package/src/testing/sendPenEvent.ts +0 -31
- package/src/testing/sendTouchEvent.ts +0 -78
- package/src/toolbar/HTMLToolbar.ts +0 -492
- package/src/toolbar/IconProvider.ts +0 -736
- package/src/toolbar/lib.ts +0 -4
- package/src/toolbar/localization.ts +0 -106
- package/src/toolbar/makeColorInput.ts +0 -145
- package/src/toolbar/toolbar.css +0 -213
- package/src/toolbar/types.ts +0 -5
- package/src/toolbar/widgets/ActionButtonWidget.ts +0 -39
- package/src/toolbar/widgets/BaseToolWidget.ts +0 -56
- package/src/toolbar/widgets/BaseWidget.ts +0 -377
- package/src/toolbar/widgets/DocumentPropertiesWidget.ts +0 -167
- package/src/toolbar/widgets/EraserToolWidget.ts +0 -85
- package/src/toolbar/widgets/HandToolWidget.ts +0 -250
- package/src/toolbar/widgets/InsertImageWidget.css +0 -44
- package/src/toolbar/widgets/InsertImageWidget.ts +0 -223
- package/src/toolbar/widgets/OverflowWidget.css +0 -27
- package/src/toolbar/widgets/OverflowWidget.ts +0 -92
- package/src/toolbar/widgets/PenToolWidget.ts +0 -288
- package/src/toolbar/widgets/SelectionToolWidget.ts +0 -190
- package/src/toolbar/widgets/TextToolWidget.ts +0 -145
- package/src/toolbar/widgets/lib.ts +0 -13
- package/src/tools/BaseTool.ts +0 -76
- package/src/tools/Eraser.test.ts +0 -103
- package/src/tools/Eraser.ts +0 -139
- package/src/tools/FindTool.css +0 -7
- package/src/tools/FindTool.ts +0 -152
- package/src/tools/PanZoom.test.ts +0 -310
- package/src/tools/PanZoom.ts +0 -520
- package/src/tools/PasteHandler.ts +0 -95
- package/src/tools/Pen.test.ts +0 -194
- package/src/tools/Pen.ts +0 -226
- package/src/tools/PipetteTool.ts +0 -55
- package/src/tools/SelectionTool/SelectAllShortcutHandler.ts +0 -28
- package/src/tools/SelectionTool/Selection.ts +0 -607
- package/src/tools/SelectionTool/SelectionHandle.ts +0 -108
- package/src/tools/SelectionTool/SelectionTool.css +0 -23
- package/src/tools/SelectionTool/SelectionTool.test.ts +0 -261
- package/src/tools/SelectionTool/SelectionTool.ts +0 -480
- package/src/tools/SelectionTool/TransformMode.ts +0 -114
- package/src/tools/SelectionTool/types.ts +0 -11
- package/src/tools/TextTool.ts +0 -326
- package/src/tools/ToolController.ts +0 -178
- package/src/tools/ToolEnabledGroup.ts +0 -14
- package/src/tools/ToolSwitcherShortcut.ts +0 -39
- package/src/tools/ToolbarShortcutHandler.ts +0 -34
- package/src/tools/UndoRedoShortcut.test.ts +0 -56
- package/src/tools/UndoRedoShortcut.ts +0 -25
- package/src/tools/lib.ts +0 -21
- package/src/tools/localization.ts +0 -66
- package/src/types.ts +0 -234
- package/src/util/assertions.ts +0 -55
- package/src/util/fileToBase64.ts +0 -18
- package/src/util/untilNextAnimationFrame.ts +0 -9
- package/src/util/waitForTimeout.ts +0 -9
@@ -1,123 +0,0 @@
|
|
1
|
-
import EventDispatcher from './EventDispatcher';
|
2
|
-
|
3
|
-
enum TestKey {
|
4
|
-
FooEvent,
|
5
|
-
BarEvent,
|
6
|
-
BazEvent,
|
7
|
-
}
|
8
|
-
|
9
|
-
describe('EventDispatcher', () => {
|
10
|
-
it('should trigger after adding a listener', () => {
|
11
|
-
const dispatcher = new EventDispatcher<TestKey, void>();
|
12
|
-
let calledCount = 0;
|
13
|
-
dispatcher.on(TestKey.FooEvent, () => {
|
14
|
-
calledCount ++;
|
15
|
-
});
|
16
|
-
|
17
|
-
expect(calledCount).toBe(0);
|
18
|
-
dispatcher.dispatch(TestKey.FooEvent);
|
19
|
-
expect(calledCount).toBe(1);
|
20
|
-
});
|
21
|
-
|
22
|
-
it('should not trigger after removing a listener', () => {
|
23
|
-
const dispatcher = new EventDispatcher<TestKey, void>();
|
24
|
-
let calledCount = 0;
|
25
|
-
const handle = dispatcher.on(TestKey.FooEvent, () => {
|
26
|
-
calledCount ++;
|
27
|
-
});
|
28
|
-
|
29
|
-
handle.remove();
|
30
|
-
|
31
|
-
expect(calledCount).toBe(0);
|
32
|
-
dispatcher.dispatch(TestKey.FooEvent);
|
33
|
-
expect(calledCount).toBe(0);
|
34
|
-
});
|
35
|
-
|
36
|
-
it('adding and removing listeners should not affect other listeners', () => {
|
37
|
-
const dispatcher = new EventDispatcher<TestKey, void>();
|
38
|
-
|
39
|
-
let fooCount = 0;
|
40
|
-
const fooListener = dispatcher.on(TestKey.FooEvent, () => {
|
41
|
-
fooCount ++;
|
42
|
-
});
|
43
|
-
|
44
|
-
let barCount = 0;
|
45
|
-
const barListener1 = dispatcher.on(TestKey.BarEvent, () => {
|
46
|
-
barCount ++;
|
47
|
-
});
|
48
|
-
const barListener2 = dispatcher.on(TestKey.BarEvent, () => {
|
49
|
-
barCount += 3;
|
50
|
-
});
|
51
|
-
const barListener3 = dispatcher.on(TestKey.BarEvent, () => {
|
52
|
-
barCount += 2;
|
53
|
-
});
|
54
|
-
|
55
|
-
dispatcher.dispatch(TestKey.BarEvent);
|
56
|
-
expect(barCount).toBe(6);
|
57
|
-
|
58
|
-
dispatcher.dispatch(TestKey.FooEvent);
|
59
|
-
expect(barCount).toBe(6);
|
60
|
-
expect(fooCount).toBe(1);
|
61
|
-
|
62
|
-
fooListener.remove();
|
63
|
-
barListener2.remove();
|
64
|
-
|
65
|
-
// barListener2 shouldn't be fired
|
66
|
-
dispatcher.dispatch(TestKey.BarEvent);
|
67
|
-
expect(barCount).toBe(9);
|
68
|
-
|
69
|
-
// The BazEvent shouldn't change fooCount or barCount
|
70
|
-
dispatcher.dispatch(TestKey.BazEvent);
|
71
|
-
expect(barCount).toBe(9);
|
72
|
-
expect(fooCount).toBe(1);
|
73
|
-
|
74
|
-
// Removing a listener for the first time should return true (it removed the listener)
|
75
|
-
// and false all subsequent times
|
76
|
-
expect(barListener1.remove()).toBe(true);
|
77
|
-
expect(barListener1.remove()).toBe(false);
|
78
|
-
expect(barListener3.remove()).toBe(true);
|
79
|
-
});
|
80
|
-
|
81
|
-
it('should fire all un-removed listeners if removing a listener in a listener', () => {
|
82
|
-
const dispatcher = new EventDispatcher<TestKey, void>();
|
83
|
-
|
84
|
-
let count = 0;
|
85
|
-
const barListener = () => {
|
86
|
-
};
|
87
|
-
const bazListener = () => {
|
88
|
-
count += 5;
|
89
|
-
};
|
90
|
-
const fooListener = () => {
|
91
|
-
count ++;
|
92
|
-
dispatcher.off(TestKey.FooEvent, barListener);
|
93
|
-
};
|
94
|
-
dispatcher.on(TestKey.FooEvent, barListener);
|
95
|
-
dispatcher.on(TestKey.FooEvent, fooListener);
|
96
|
-
dispatcher.on(TestKey.FooEvent, bazListener);
|
97
|
-
|
98
|
-
// Removing a listener shouldn't cause other listeners to be skipped
|
99
|
-
dispatcher.dispatch(TestKey.FooEvent);
|
100
|
-
|
101
|
-
expect(count).toBe(6);
|
102
|
-
});
|
103
|
-
|
104
|
-
it('should send correct data associated with events', () => {
|
105
|
-
const dispatcher = new EventDispatcher<TestKey, string>();
|
106
|
-
|
107
|
-
let lastResult = '';
|
108
|
-
const resultListener = (result: string) => {
|
109
|
-
lastResult = result;
|
110
|
-
};
|
111
|
-
|
112
|
-
dispatcher.on(TestKey.BarEvent, resultListener);
|
113
|
-
|
114
|
-
dispatcher.dispatch(TestKey.BazEvent, 'Testing...');
|
115
|
-
expect(lastResult).toBe('');
|
116
|
-
|
117
|
-
dispatcher.dispatch(TestKey.BarEvent, 'Test.');
|
118
|
-
dispatcher.off(TestKey.BarEvent, resultListener);
|
119
|
-
|
120
|
-
dispatcher.dispatch(TestKey.BarEvent, 'Testing.');
|
121
|
-
expect(lastResult).toBe('Test.');
|
122
|
-
});
|
123
|
-
});
|
package/src/EventDispatcher.ts
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Handles notifying listeners of events.
|
3
|
-
*
|
4
|
-
* `EventKeyType` is used to distinguish events (e.g. a `ClickEvent` vs a `TouchEvent`)
|
5
|
-
* while `EventMessageType` is the type of the data sent with an event (can be `void`).
|
6
|
-
*
|
7
|
-
* @example
|
8
|
-
* ```
|
9
|
-
* const dispatcher = new EventDispatcher<'event1'|'event2'|'event3', void>();
|
10
|
-
* dispatcher.on('event1', () => {
|
11
|
-
* console.log('Event 1 triggered.');
|
12
|
-
* });
|
13
|
-
* dispatcher.dispatch('event1');
|
14
|
-
* ```
|
15
|
-
*
|
16
|
-
* @packageDocumentation
|
17
|
-
*/
|
18
|
-
|
19
|
-
// Code shared with Joplin (js-draw was originally intended to be part of Joplin).
|
20
|
-
|
21
|
-
type Listener<Value> = (data: Value)=> void;
|
22
|
-
type CallbackHandler<EventType> = (data: EventType)=> void;
|
23
|
-
export interface DispatcherEventListener {
|
24
|
-
remove: ()=>void;
|
25
|
-
}
|
26
|
-
|
27
|
-
// { @inheritDoc EventDispatcher! }
|
28
|
-
export default class EventDispatcher<EventKeyType extends string|symbol|number, EventMessageType> {
|
29
|
-
private listeners: Partial<Record<EventKeyType, Array<Listener<EventMessageType>>>>;
|
30
|
-
public constructor() {
|
31
|
-
this.listeners = {};
|
32
|
-
}
|
33
|
-
|
34
|
-
public dispatch(eventName: EventKeyType, event: EventMessageType) {
|
35
|
-
const listenerList = this.listeners[eventName];
|
36
|
-
|
37
|
-
if (listenerList) {
|
38
|
-
for (let i = 0; i < listenerList.length; i++) {
|
39
|
-
listenerList[i](event);
|
40
|
-
}
|
41
|
-
}
|
42
|
-
}
|
43
|
-
|
44
|
-
public on(eventName: EventKeyType, callback: CallbackHandler<EventMessageType>): DispatcherEventListener {
|
45
|
-
if (!this.listeners[eventName]) this.listeners[eventName] = [];
|
46
|
-
this.listeners[eventName]!.push(callback);
|
47
|
-
|
48
|
-
return {
|
49
|
-
// Retuns false if the listener has already been removed, true otherwise.
|
50
|
-
remove: (): boolean => {
|
51
|
-
const originalListeners = this.listeners[eventName]!;
|
52
|
-
this.off(eventName, callback);
|
53
|
-
|
54
|
-
return originalListeners.length !== this.listeners[eventName]!.length;
|
55
|
-
},
|
56
|
-
};
|
57
|
-
}
|
58
|
-
|
59
|
-
/** Removes an event listener. This is equivalent to calling `.remove()` on the object returned by `.on`. */
|
60
|
-
public off(eventName: EventKeyType, callback: CallbackHandler<EventMessageType>) {
|
61
|
-
const listeners = this.listeners[eventName];
|
62
|
-
if (!listeners) return;
|
63
|
-
|
64
|
-
// Replace the current list of listeners with a new, shortened list.
|
65
|
-
// This allows any iterators over this.listeners to continue iterating
|
66
|
-
// without skipping elements.
|
67
|
-
this.listeners[eventName] = listeners.filter(
|
68
|
-
otherCallback => otherCallback !== callback
|
69
|
-
);
|
70
|
-
}
|
71
|
-
}
|
package/src/Pointer.ts
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
import { Point2, Vec2 } from './math/Vec2';
|
2
|
-
import Viewport from './Viewport';
|
3
|
-
|
4
|
-
export enum PointerDevice {
|
5
|
-
Pen,
|
6
|
-
Eraser,
|
7
|
-
Touch,
|
8
|
-
PrimaryButtonMouse,
|
9
|
-
RightButtonMouse,
|
10
|
-
Other,
|
11
|
-
}
|
12
|
-
|
13
|
-
// Provides a snapshot containing information about a pointer. A Pointer
|
14
|
-
// object is immutable — it will not be updated when the pointer's information changes.
|
15
|
-
export default class Pointer {
|
16
|
-
private constructor(
|
17
|
-
// The (x, y) position of the pointer relative to the top-left corner
|
18
|
-
// of the visible canvas.
|
19
|
-
public readonly screenPos: Point2,
|
20
|
-
|
21
|
-
// Position of the pointer relative to the top left corner of the drawing
|
22
|
-
// surface.
|
23
|
-
public readonly canvasPos: Point2,
|
24
|
-
|
25
|
-
public readonly pressure: number|null,
|
26
|
-
public readonly isPrimary: boolean,
|
27
|
-
public readonly down: boolean,
|
28
|
-
|
29
|
-
public readonly device: PointerDevice,
|
30
|
-
|
31
|
-
// Unique ID for the pointer
|
32
|
-
public readonly id: number,
|
33
|
-
|
34
|
-
// Numeric timestamp (milliseconds, as from `(new Date).getTime()`)
|
35
|
-
public readonly timeStamp: number,
|
36
|
-
) {
|
37
|
-
}
|
38
|
-
|
39
|
-
// Snaps this pointer to the nearest grid point (rounds the coordinates of this
|
40
|
-
// pointer based on the current zoom). Returns a new Pointer and does not modify
|
41
|
-
// this.
|
42
|
-
public snappedToGrid(viewport: Viewport): Pointer {
|
43
|
-
const snappedCanvasPos = viewport.snapToGrid(this.canvasPos);
|
44
|
-
const snappedScreenPos = viewport.canvasToScreen(snappedCanvasPos);
|
45
|
-
|
46
|
-
return new Pointer(
|
47
|
-
snappedScreenPos,
|
48
|
-
snappedCanvasPos,
|
49
|
-
this.pressure,
|
50
|
-
this.isPrimary,
|
51
|
-
this.down,
|
52
|
-
this.device,
|
53
|
-
this.id,
|
54
|
-
this.timeStamp,
|
55
|
-
);
|
56
|
-
}
|
57
|
-
|
58
|
-
// Creates a Pointer from a DOM event. If `relativeTo` is given, (0, 0) in screen coordinates is
|
59
|
-
// considered the top left of `relativeTo`.
|
60
|
-
public static ofEvent(evt: PointerEvent, isDown: boolean, viewport: Viewport, relativeTo?: HTMLElement): Pointer {
|
61
|
-
let screenPos = Vec2.of(evt.clientX, evt.clientY);
|
62
|
-
if (relativeTo) {
|
63
|
-
const bbox = relativeTo.getBoundingClientRect();
|
64
|
-
screenPos = screenPos.minus(Vec2.of(bbox.left, bbox.top));
|
65
|
-
}
|
66
|
-
|
67
|
-
const pointerTypeToDevice: Record<string, PointerDevice> = {
|
68
|
-
'mouse': PointerDevice.PrimaryButtonMouse,
|
69
|
-
'pen': PointerDevice.Pen,
|
70
|
-
'touch': PointerDevice.Touch,
|
71
|
-
};
|
72
|
-
|
73
|
-
let device = pointerTypeToDevice[evt.pointerType] ?? PointerDevice.Other;
|
74
|
-
const eraserButtonMask = 0x20;
|
75
|
-
if (device === PointerDevice.Pen && (evt.buttons & eraserButtonMask) !== 0) {
|
76
|
-
device = PointerDevice.Eraser;
|
77
|
-
}
|
78
|
-
|
79
|
-
const timeStamp = (new Date()).getTime();
|
80
|
-
const canvasPos = viewport.roundPoint(viewport.screenToCanvas(screenPos));
|
81
|
-
|
82
|
-
if (device === PointerDevice.PrimaryButtonMouse) {
|
83
|
-
if (evt.buttons & 0x2) {
|
84
|
-
device = PointerDevice.RightButtonMouse;
|
85
|
-
} else if (!(evt.buttons & 0x1)) {
|
86
|
-
device = PointerDevice.Other;
|
87
|
-
}
|
88
|
-
}
|
89
|
-
|
90
|
-
return new Pointer(
|
91
|
-
screenPos,
|
92
|
-
canvasPos,
|
93
|
-
evt.pressure ?? null,
|
94
|
-
evt.isPrimary,
|
95
|
-
isDown,
|
96
|
-
device,
|
97
|
-
evt.pointerId,
|
98
|
-
timeStamp,
|
99
|
-
);
|
100
|
-
}
|
101
|
-
|
102
|
-
// Create a new Pointer from a point on the canvas.
|
103
|
-
// Intended for unit tests.
|
104
|
-
public static ofCanvasPoint(
|
105
|
-
canvasPos: Point2,
|
106
|
-
isDown: boolean,
|
107
|
-
viewport: Viewport,
|
108
|
-
id: number = 0,
|
109
|
-
device: PointerDevice = PointerDevice.Pen,
|
110
|
-
isPrimary: boolean = true,
|
111
|
-
pressure: number|null = null
|
112
|
-
): Pointer {
|
113
|
-
const screenPos = viewport.canvasToScreen(canvasPos);
|
114
|
-
const timeStamp = (new Date()).getTime();
|
115
|
-
|
116
|
-
return new Pointer(
|
117
|
-
screenPos,
|
118
|
-
canvasPos,
|
119
|
-
pressure,
|
120
|
-
isPrimary,
|
121
|
-
isDown,
|
122
|
-
device,
|
123
|
-
id,
|
124
|
-
timeStamp
|
125
|
-
);
|
126
|
-
}
|
127
|
-
}
|
package/src/SVGLoader.test.ts
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
import { Rect2, TextComponent, Vec2 } from './lib';
|
2
|
-
import SVGLoader from './SVGLoader';
|
3
|
-
import createEditor from './testing/createEditor';
|
4
|
-
|
5
|
-
describe('SVGLoader', () => {
|
6
|
-
it('should correctly load x/y-positioned text nodes', async () => {
|
7
|
-
const editor = createEditor();
|
8
|
-
await editor.loadFrom(SVGLoader.fromString(`
|
9
|
-
<svg>
|
10
|
-
<text>Testing...</text>
|
11
|
-
<text y=100>Test 2...</text>
|
12
|
-
<text x=100>Test 3...</text>
|
13
|
-
<text x=100 y=100>Test 3...</text>
|
14
|
-
|
15
|
-
<!-- Transform matrix: translate by (100,0) -->
|
16
|
-
<text style='transform: matrix(1,0,0,1,100,0);'>Test 3...</text>
|
17
|
-
</svg>
|
18
|
-
`, true));
|
19
|
-
const elems = editor.image
|
20
|
-
.getElementsIntersectingRegion(new Rect2(-1000, -1000, 10000, 10000))
|
21
|
-
.filter(elem => elem instanceof TextComponent);
|
22
|
-
expect(elems).toHaveLength(5);
|
23
|
-
const topLefts = elems.map(elem => elem.getBBox().topLeft);
|
24
|
-
|
25
|
-
// Top-left of Testing... should be (0, 0) ± 10 pixels (objects are aligned based on baseline)
|
26
|
-
expect(topLefts[0]).objEq(Vec2.of(0, 0), 10);
|
27
|
-
|
28
|
-
expect(topLefts[1].y - topLefts[0].y).toBe(100);
|
29
|
-
expect(topLefts[1].x - topLefts[0].x).toBe(0);
|
30
|
-
|
31
|
-
expect(topLefts[2].y - topLefts[0].y).toBe(0);
|
32
|
-
expect(topLefts[2].x - topLefts[0].x).toBe(100);
|
33
|
-
|
34
|
-
expect(topLefts[4].x - topLefts[0].x).toBe(100);
|
35
|
-
expect(topLefts[4].y - topLefts[0].y).toBe(0);
|
36
|
-
});
|
37
|
-
|
38
|
-
it('should correctly load tspans within texts nodes', async () => {
|
39
|
-
const editor = createEditor();
|
40
|
-
await editor.loadFrom(SVGLoader.fromString(`
|
41
|
-
<svg>
|
42
|
-
<text>
|
43
|
-
Testing...
|
44
|
-
<tspan x=0 y=100>Test 2...</tspan>
|
45
|
-
<tspan x=0 y=200>Test 2...</tspan>
|
46
|
-
</text>
|
47
|
-
</svg>
|
48
|
-
`, true));
|
49
|
-
const elem = editor.image
|
50
|
-
.getElementsIntersectingRegion(new Rect2(-1000, -1000, 10000, 10000))
|
51
|
-
.filter(elem => elem instanceof TextComponent)[0];
|
52
|
-
expect(elem).not.toBeNull();
|
53
|
-
expect(elem.getBBox().topLeft.y).toBeLessThan(0);
|
54
|
-
expect(elem.getBBox().topLeft.x).toBe(0);
|
55
|
-
expect(elem.getBBox().h).toBeGreaterThan(200);
|
56
|
-
});
|
57
|
-
|
58
|
-
it('tspans without specified font-sizes should inherit their font size from their parent element', async () => {
|
59
|
-
const editor = createEditor();
|
60
|
-
await editor.loadFrom(SVGLoader.fromString(`
|
61
|
-
<svg>
|
62
|
-
<text style='font-size: 22px;'>
|
63
|
-
Testing...
|
64
|
-
<tspan>Test 2...</tspan>
|
65
|
-
<tspan>Test 3...</tspan>
|
66
|
-
<tspan style='font-size: 3px;'>Test 4...</tspan>
|
67
|
-
</text>
|
68
|
-
</svg>
|
69
|
-
`, true));
|
70
|
-
const elem = editor.image
|
71
|
-
.getAllElements()
|
72
|
-
.filter(elem => elem instanceof TextComponent)[0] as TextComponent;
|
73
|
-
expect(elem).not.toBeNull();
|
74
|
-
|
75
|
-
// Ensure each child object has the correct size
|
76
|
-
expect(elem.serialize().data).toMatchObject({
|
77
|
-
'textObjects': [
|
78
|
-
{ },
|
79
|
-
{
|
80
|
-
'json':
|
81
|
-
{
|
82
|
-
'textObjects': [{ 'text': 'Test 2...' }],
|
83
|
-
'style': {
|
84
|
-
'size': 22,
|
85
|
-
}
|
86
|
-
}
|
87
|
-
},
|
88
|
-
{ },
|
89
|
-
{
|
90
|
-
'json': {
|
91
|
-
'textObjects': [{ 'text': 'Test 3...' }],
|
92
|
-
'style': {
|
93
|
-
'size': 22
|
94
|
-
}
|
95
|
-
}
|
96
|
-
},
|
97
|
-
{ },
|
98
|
-
{
|
99
|
-
'json': {
|
100
|
-
'textObjects': [{ 'text': 'Test 4...' }],
|
101
|
-
'style': {
|
102
|
-
'size': 3,
|
103
|
-
}
|
104
|
-
}
|
105
|
-
},
|
106
|
-
{ }
|
107
|
-
],
|
108
|
-
|
109
|
-
'style': {
|
110
|
-
'size': 22,
|
111
|
-
}
|
112
|
-
});
|
113
|
-
});
|
114
|
-
});
|