js-draw 0.18.2 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/bundle.js +2 -2
- package/dist/bundledStyles.js +1 -0
- package/dist/cjs/src/Color4.d.ts +8 -0
- package/dist/cjs/src/Color4.js +67 -0
- package/dist/cjs/src/Editor.d.ts +2 -2
- package/dist/cjs/src/Editor.js +2 -2
- package/dist/cjs/src/SVGLoader.js +8 -5
- package/dist/cjs/src/components/AbstractComponent.d.ts +2 -2
- package/dist/cjs/src/components/AbstractComponent.js +3 -3
- package/dist/cjs/src/components/ImageBackground.js +1 -1
- package/dist/cjs/src/components/RestylableComponent.d.ts +21 -2
- package/dist/cjs/src/components/Stroke.d.ts +35 -0
- package/dist/cjs/src/components/Stroke.js +36 -2
- package/dist/cjs/src/components/TextComponent.d.ts +26 -4
- package/dist/cjs/src/components/TextComponent.js +22 -0
- package/dist/cjs/src/components/lib.d.ts +3 -2
- package/dist/cjs/src/lib.d.ts +30 -0
- package/dist/cjs/src/lib.js +30 -0
- package/dist/cjs/src/rendering/RenderingStyle.d.ts +4 -4
- package/dist/cjs/src/rendering/TextRenderingStyle.d.ts +10 -10
- package/dist/cjs/src/rendering/lib.d.ts +2 -0
- package/dist/cjs/src/rendering/renderers/AbstractRenderer.d.ts +2 -2
- package/dist/cjs/src/rendering/renderers/CanvasRenderer.d.ts +2 -2
- package/dist/cjs/src/rendering/renderers/DummyRenderer.d.ts +2 -2
- package/dist/cjs/src/rendering/renderers/SVGRenderer.d.ts +2 -2
- package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.d.ts +2 -2
- package/dist/cjs/src/toolbar/IconProvider.d.ts +2 -2
- package/dist/cjs/src/toolbar/localization.js +1 -1
- package/dist/cjs/src/toolbar/widgets/BaseWidget.js +1 -1
- package/dist/cjs/src/tools/SoundUITool.d.ts +24 -0
- package/dist/cjs/src/tools/SoundUITool.js +164 -0
- package/dist/cjs/src/tools/TextTool.d.ts +2 -2
- package/dist/cjs/src/tools/ToolController.js +6 -1
- package/dist/cjs/src/tools/lib.d.ts +1 -0
- package/dist/cjs/src/tools/lib.js +3 -1
- package/dist/cjs/src/tools/localization.d.ts +3 -0
- package/dist/cjs/src/tools/localization.js +3 -0
- package/dist/mjs/src/Color4.d.ts +8 -0
- package/dist/mjs/src/Color4.mjs +64 -0
- package/dist/mjs/src/Editor.d.ts +2 -2
- package/dist/mjs/src/Editor.mjs +2 -2
- package/dist/mjs/src/SVGLoader.mjs +8 -5
- package/dist/mjs/src/components/AbstractComponent.d.ts +2 -2
- package/dist/mjs/src/components/AbstractComponent.mjs +3 -3
- package/dist/mjs/src/components/ImageBackground.mjs +1 -1
- package/dist/mjs/src/components/RestylableComponent.d.ts +21 -2
- package/dist/mjs/src/components/Stroke.d.ts +35 -0
- package/dist/mjs/src/components/Stroke.mjs +36 -2
- package/dist/mjs/src/components/TextComponent.d.ts +26 -4
- package/dist/mjs/src/components/TextComponent.mjs +22 -0
- package/dist/mjs/src/components/lib.d.ts +3 -2
- package/dist/mjs/src/lib.d.ts +30 -0
- package/dist/mjs/src/lib.mjs +30 -0
- package/dist/mjs/src/rendering/RenderingStyle.d.ts +4 -4
- package/dist/mjs/src/rendering/TextRenderingStyle.d.ts +10 -10
- package/dist/mjs/src/rendering/lib.d.ts +2 -0
- package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +2 -2
- package/dist/mjs/src/rendering/renderers/CanvasRenderer.d.ts +2 -2
- package/dist/mjs/src/rendering/renderers/DummyRenderer.d.ts +2 -2
- package/dist/mjs/src/rendering/renderers/SVGRenderer.d.ts +2 -2
- package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.d.ts +2 -2
- package/dist/mjs/src/toolbar/IconProvider.d.ts +2 -2
- package/dist/mjs/src/toolbar/localization.mjs +1 -1
- package/dist/mjs/src/toolbar/widgets/BaseWidget.mjs +1 -1
- package/dist/mjs/src/tools/SoundUITool.d.ts +24 -0
- package/dist/mjs/src/tools/SoundUITool.mjs +158 -0
- package/dist/mjs/src/tools/TextTool.d.ts +2 -2
- package/dist/mjs/src/tools/ToolController.mjs +6 -1
- package/dist/mjs/src/tools/lib.d.ts +1 -0
- package/dist/mjs/src/tools/lib.mjs +1 -0
- package/dist/mjs/src/tools/localization.d.ts +3 -0
- package/dist/mjs/src/tools/localization.mjs +3 -0
- package/package.json +6 -4
- package/src/Editor.css +2 -2
- package/src/tools/SoundUITool.css +15 -0
- package/src/tools/tools.css +4 -0
- package/src/Color4.test.ts +0 -40
- package/src/Color4.ts +0 -236
- 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/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/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.ts +0 -223
- 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.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.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
@@ -27,7 +27,7 @@ export default class AbstractComponent {
|
|
27
27
|
}
|
28
28
|
}
|
29
29
|
// Returns a unique ID for this element.
|
30
|
-
// @see { @link
|
30
|
+
// @see { @link EditorImage.lookupElement }
|
31
31
|
getId() {
|
32
32
|
return this.id;
|
33
33
|
}
|
@@ -40,7 +40,7 @@ export default class AbstractComponent {
|
|
40
40
|
/**
|
41
41
|
* Attach data that can be used while exporting the component (e.g. to SVG).
|
42
42
|
*
|
43
|
-
* This is intended for use by
|
43
|
+
* This is intended for use by an {@link ImageLoader}.
|
44
44
|
*/
|
45
45
|
attachLoadSaveData(key, data) {
|
46
46
|
if (!this.loadSaveData[key]) {
|
@@ -55,7 +55,7 @@ export default class AbstractComponent {
|
|
55
55
|
getZIndex() {
|
56
56
|
return this.zIndex;
|
57
57
|
}
|
58
|
-
/** @returns the bounding box of
|
58
|
+
/** @returns the bounding box of this. */
|
59
59
|
getBBox() {
|
60
60
|
return this.contentBBox;
|
61
61
|
}
|
@@ -9,7 +9,7 @@ export var BackgroundType;
|
|
9
9
|
BackgroundType[BackgroundType["None"] = 1] = "None";
|
10
10
|
})(BackgroundType || (BackgroundType = {}));
|
11
11
|
export const imageBackgroundCSSClassName = 'js-draw-image-background';
|
12
|
-
// Represents the background of
|
12
|
+
// Represents the background of the editor's canvas.
|
13
13
|
export default class ImageBackground extends AbstractComponent {
|
14
14
|
constructor(backgroundType, mainColor) {
|
15
15
|
super('image-background', 0);
|
@@ -1,16 +1,35 @@
|
|
1
1
|
import Color4 from '../Color4';
|
2
2
|
import SerializableCommand from '../commands/SerializableCommand';
|
3
3
|
import Editor from '../Editor';
|
4
|
-
import
|
4
|
+
import TextRenderingStyle from '../rendering/TextRenderingStyle';
|
5
5
|
import AbstractComponent from './AbstractComponent';
|
6
6
|
export interface ComponentStyle {
|
7
7
|
color?: Color4;
|
8
|
-
textStyle?:
|
8
|
+
textStyle?: TextRenderingStyle;
|
9
9
|
}
|
10
10
|
export declare const createRestyleComponentCommand: (initialStyle: ComponentStyle, newStyle: ComponentStyle, component: RestyleableComponent) => SerializableCommand;
|
11
11
|
export declare const isRestylableComponent: (component: AbstractComponent) => component is RestyleableComponent;
|
12
|
+
/**
|
13
|
+
* An interface to be implemented by components with a changable color or {@link TextRenderingStyle}.
|
14
|
+
*
|
15
|
+
* All such classes must have a member variable, `isRestylableComponent` that is set to `true`
|
16
|
+
* to allow testing whether the class is a `RestylableComponent` (see {@link isRestylableComponent}).
|
17
|
+
*/
|
12
18
|
export interface RestyleableComponent extends AbstractComponent {
|
19
|
+
/**
|
20
|
+
* @returns a partial representation of this component's style.
|
21
|
+
*/
|
13
22
|
getStyle(): ComponentStyle;
|
23
|
+
/**
|
24
|
+
* Returns a {@link Command} that updates portions of this component's style
|
25
|
+
* to the given `style`.
|
26
|
+
*
|
27
|
+
* @example
|
28
|
+
* For some component and editor,
|
29
|
+
* ```ts
|
30
|
+
* editor.dispatch(component.updateStyle({ color: Color4.red }));
|
31
|
+
* ```
|
32
|
+
*/
|
14
33
|
updateStyle(style: ComponentStyle): SerializableCommand;
|
15
34
|
/**
|
16
35
|
* Set the style of this component in a way that can't be undone/redone
|
@@ -8,11 +8,43 @@ import AbstractRenderer, { RenderablePathSpec } from '../rendering/renderers/Abs
|
|
8
8
|
import AbstractComponent from './AbstractComponent';
|
9
9
|
import { ImageComponentLocalization } from './localization';
|
10
10
|
import RestyleableComponent, { ComponentStyle } from './RestylableComponent';
|
11
|
+
/**
|
12
|
+
* Represents an {@link AbstractComponent} made up of one or more {@link Path}s.
|
13
|
+
*
|
14
|
+
* @example
|
15
|
+
* For some {@link Editor} editor and `Stroke` stroke,
|
16
|
+
*
|
17
|
+
* **Restyling**:
|
18
|
+
* ```ts
|
19
|
+
* editor.dispatch(stroke.updateStyle({ color: Color4.red }));
|
20
|
+
* ```
|
21
|
+
*
|
22
|
+
* **Transforming**:
|
23
|
+
* ```ts
|
24
|
+
* editor.dispatch(stroke.transformBy(Mat33.translation(Vec2.of(10, 0))));
|
25
|
+
* ```
|
26
|
+
*/
|
11
27
|
export default class Stroke extends AbstractComponent implements RestyleableComponent {
|
12
28
|
private parts;
|
13
29
|
protected contentBBox: Rect2;
|
14
30
|
readonly isRestylableComponent: true;
|
15
31
|
private approximateRenderingTime;
|
32
|
+
/**
|
33
|
+
* Creates a `Stroke` from the given `parts`. All parts should have the
|
34
|
+
* same color.
|
35
|
+
*
|
36
|
+
* @example
|
37
|
+
* ```ts
|
38
|
+
* // A path that starts at (1,1), moves to the right by (2, 0),
|
39
|
+
* // then moves down and right by (3, 3)
|
40
|
+
* const path = Path.fromString('m1,1 2,0 3,3');
|
41
|
+
*
|
42
|
+
* const stroke = new Stroke([
|
43
|
+
* // Fill with red
|
44
|
+
* path.toRenderable({ fill: Color4.red })
|
45
|
+
* ]);
|
46
|
+
* ```
|
47
|
+
*/
|
16
48
|
constructor(parts: RenderablePathSpec[]);
|
17
49
|
getStyle(): ComponentStyle;
|
18
50
|
updateStyle(style: ComponentStyle): SerializableCommand;
|
@@ -22,6 +54,9 @@ export default class Stroke extends AbstractComponent implements RestyleableComp
|
|
22
54
|
getProportionalRenderingTime(): number;
|
23
55
|
private bboxForPart;
|
24
56
|
protected applyTransformation(affineTransfm: Mat33): void;
|
57
|
+
/**
|
58
|
+
* @returns the {@link Path.union} of all paths that make up this stroke.
|
59
|
+
*/
|
25
60
|
getPath(): Path;
|
26
61
|
description(localization: ImageComponentLocalization): string;
|
27
62
|
protected createClone(): AbstractComponent;
|
@@ -3,12 +3,43 @@ import Rect2 from '../math/Rect2.mjs';
|
|
3
3
|
import { styleFromJSON, styleToJSON } from '../rendering/RenderingStyle.mjs';
|
4
4
|
import AbstractComponent from './AbstractComponent.mjs';
|
5
5
|
import { createRestyleComponentCommand } from './RestylableComponent.mjs';
|
6
|
+
/**
|
7
|
+
* Represents an {@link AbstractComponent} made up of one or more {@link Path}s.
|
8
|
+
*
|
9
|
+
* @example
|
10
|
+
* For some {@link Editor} editor and `Stroke` stroke,
|
11
|
+
*
|
12
|
+
* **Restyling**:
|
13
|
+
* ```ts
|
14
|
+
* editor.dispatch(stroke.updateStyle({ color: Color4.red }));
|
15
|
+
* ```
|
16
|
+
*
|
17
|
+
* **Transforming**:
|
18
|
+
* ```ts
|
19
|
+
* editor.dispatch(stroke.transformBy(Mat33.translation(Vec2.of(10, 0))));
|
20
|
+
* ```
|
21
|
+
*/
|
6
22
|
export default class Stroke extends AbstractComponent {
|
7
|
-
|
8
|
-
|
23
|
+
/**
|
24
|
+
* Creates a `Stroke` from the given `parts`. All parts should have the
|
25
|
+
* same color.
|
26
|
+
*
|
27
|
+
* @example
|
28
|
+
* ```ts
|
29
|
+
* // A path that starts at (1,1), moves to the right by (2, 0),
|
30
|
+
* // then moves down and right by (3, 3)
|
31
|
+
* const path = Path.fromString('m1,1 2,0 3,3');
|
32
|
+
*
|
33
|
+
* const stroke = new Stroke([
|
34
|
+
* // Fill with red
|
35
|
+
* path.toRenderable({ fill: Color4.red })
|
36
|
+
* ]);
|
37
|
+
* ```
|
38
|
+
*/
|
9
39
|
constructor(parts) {
|
10
40
|
var _a;
|
11
41
|
super('stroke');
|
42
|
+
// @internal
|
12
43
|
// eslint-disable-next-line @typescript-eslint/prefer-as-const
|
13
44
|
this.isRestylableComponent = true;
|
14
45
|
this.approximateRenderingTime = 0;
|
@@ -141,6 +172,9 @@ export default class Stroke extends AbstractComponent {
|
|
141
172
|
};
|
142
173
|
});
|
143
174
|
}
|
175
|
+
/**
|
176
|
+
* @returns the {@link Path.union} of all paths that make up this stroke.
|
177
|
+
*/
|
144
178
|
getPath() {
|
145
179
|
let result = null;
|
146
180
|
for (const part of this.parts) {
|
@@ -4,18 +4,26 @@ import Mat33 from '../math/Mat33';
|
|
4
4
|
import Rect2 from '../math/Rect2';
|
5
5
|
import Editor from '../Editor';
|
6
6
|
import AbstractRenderer from '../rendering/renderers/AbstractRenderer';
|
7
|
-
import {
|
7
|
+
import { TextRenderingStyle } from '../rendering/TextRenderingStyle';
|
8
8
|
import AbstractComponent from './AbstractComponent';
|
9
9
|
import { ImageComponentLocalization } from './localization';
|
10
10
|
import RestyleableComponent, { ComponentStyle } from './RestylableComponent';
|
11
|
+
/**
|
12
|
+
* Displays text.
|
13
|
+
*/
|
11
14
|
export default class TextComponent extends AbstractComponent implements RestyleableComponent {
|
12
15
|
protected readonly textObjects: Array<string | TextComponent>;
|
13
16
|
private transform;
|
14
17
|
private style;
|
15
18
|
protected contentBBox: Rect2;
|
16
19
|
readonly isRestylableComponent: true;
|
17
|
-
|
18
|
-
|
20
|
+
/**
|
21
|
+
* Creates a new text object from a list of component text or child TextComponents.
|
22
|
+
*
|
23
|
+
* @see {@link fromLines}
|
24
|
+
*/
|
25
|
+
constructor(textObjects: Array<string | TextComponent>, transform: Mat33, style: TextRenderingStyle);
|
26
|
+
static applyTextStyles(ctx: CanvasRenderingContext2D, style: TextRenderingStyle): void;
|
19
27
|
private static textMeasuringCtx;
|
20
28
|
private static estimateTextDimens;
|
21
29
|
private static getTextDimens;
|
@@ -49,5 +57,19 @@ export default class TextComponent extends AbstractComponent implements Restylea
|
|
49
57
|
description(localizationTable: ImageComponentLocalization): string;
|
50
58
|
protected serializeToJSON(): Record<string, any>;
|
51
59
|
static deserializeFromString(json: any): TextComponent;
|
52
|
-
|
60
|
+
/**
|
61
|
+
* Creates a `TextComponent` from `lines`.
|
62
|
+
*
|
63
|
+
* @example
|
64
|
+
* ```ts
|
65
|
+
* const textStyle = {
|
66
|
+
* size: 12,
|
67
|
+
* fontFamily: 'serif',
|
68
|
+
* renderingStyle: { fill: Color4.black },
|
69
|
+
* };
|
70
|
+
*
|
71
|
+
* const text = TextComponent.fromLines('foo\nbar'.split('\n'), Mat33.identity, textStyle);
|
72
|
+
* ```
|
73
|
+
*/
|
74
|
+
static fromLines(lines: string[], transform: Mat33, style: TextRenderingStyle): AbstractComponent;
|
53
75
|
}
|
@@ -6,7 +6,15 @@ import { cloneTextStyle, textStyleFromJSON, textStyleToJSON } from '../renderi
|
|
6
6
|
import AbstractComponent from './AbstractComponent.mjs';
|
7
7
|
import { createRestyleComponentCommand } from './RestylableComponent.mjs';
|
8
8
|
const componentTypeId = 'text';
|
9
|
+
/**
|
10
|
+
* Displays text.
|
11
|
+
*/
|
9
12
|
export default class TextComponent extends AbstractComponent {
|
13
|
+
/**
|
14
|
+
* Creates a new text object from a list of component text or child TextComponents.
|
15
|
+
*
|
16
|
+
* @see {@link fromLines}
|
17
|
+
*/
|
10
18
|
constructor(textObjects, transform, style) {
|
11
19
|
super(componentTypeId);
|
12
20
|
this.textObjects = textObjects;
|
@@ -232,6 +240,20 @@ export default class TextComponent extends AbstractComponent {
|
|
232
240
|
const transform = new Mat33(...transformData);
|
233
241
|
return new TextComponent(textObjects, transform, style);
|
234
242
|
}
|
243
|
+
/**
|
244
|
+
* Creates a `TextComponent` from `lines`.
|
245
|
+
*
|
246
|
+
* @example
|
247
|
+
* ```ts
|
248
|
+
* const textStyle = {
|
249
|
+
* size: 12,
|
250
|
+
* fontFamily: 'serif',
|
251
|
+
* renderingStyle: { fill: Color4.black },
|
252
|
+
* };
|
253
|
+
*
|
254
|
+
* const text = TextComponent.fromLines('foo\nbar'.split('\n'), Mat33.identity, textStyle);
|
255
|
+
* ```
|
256
|
+
*/
|
235
257
|
static fromLines(lines, transform, style) {
|
236
258
|
let lastComponent = null;
|
237
259
|
const components = [];
|
@@ -7,6 +7,7 @@ export { default as AbstractComponent } from './AbstractComponent';
|
|
7
7
|
import Stroke from './Stroke';
|
8
8
|
import TextComponent from './TextComponent';
|
9
9
|
import ImageComponent from './ImageComponent';
|
10
|
-
import RestyleableComponent
|
10
|
+
import RestyleableComponent from './RestylableComponent';
|
11
|
+
import { createRestyleComponentCommand, isRestylableComponent, ComponentStyle as RestyleableComponentStyle } from './RestylableComponent';
|
11
12
|
import ImageBackground from './ImageBackground';
|
12
|
-
export { Stroke, TextComponent as Text, RestyleableComponent, createRestyleComponentCommand, isRestylableComponent, TextComponent, Stroke as StrokeComponent, ImageBackground as BackgroundComponent, ImageComponent, };
|
13
|
+
export { Stroke, TextComponent as Text, RestyleableComponent, createRestyleComponentCommand, isRestylableComponent, RestyleableComponentStyle, TextComponent, Stroke as StrokeComponent, ImageBackground as BackgroundComponent, ImageComponent, };
|
package/dist/mjs/src/lib.d.ts
CHANGED
@@ -5,10 +5,40 @@
|
|
5
5
|
* @example
|
6
6
|
* ```
|
7
7
|
* import { Editor, Vec3, Mat33 } from 'js-draw';
|
8
|
+
*
|
9
|
+
* // Apply js-draw CSS
|
10
|
+
* import 'js-draw/styles';
|
11
|
+
* // If your bundler doesn't support the above, try
|
12
|
+
* // import 'js-draw/bundledStyles';
|
13
|
+
*
|
14
|
+
* (async () => {
|
15
|
+
* const editor = new Editor(document.body);
|
16
|
+
* const toolbar = editor.addToolbar();
|
17
|
+
* editor.getRootElement().style.height = '600px';
|
18
|
+
*
|
19
|
+
* await editor.loadFromSVG(`
|
20
|
+
* <svg viewBox="0 0 500 500" width="500" height="500" version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
|
21
|
+
* <style id="js-draw-style-sheet">path{stroke-linecap:round;stroke-linejoin:round;}text{white-space:pre;}</style>
|
22
|
+
* <path d="M500,500L500,0L0,0L0,500L500,500" fill="#423131bf" class="js-draw-image-background"></path>
|
23
|
+
* <text style="transform: matrix(1, 0, 0, 1, 57, 192); font-family: serif; font-size: 32px; fill: rgb(204, 102, 51);">Testing...</text>
|
24
|
+
* </svg>
|
25
|
+
* `);
|
26
|
+
*
|
27
|
+
* toolbar.addActionButton({
|
28
|
+
* label: 'Save',
|
29
|
+
* icon: editor.icons.makeSaveIcon(),
|
30
|
+
* }, () => {
|
31
|
+
* const saveData = editor.toSVG().outerHTML;
|
32
|
+
*
|
33
|
+
* // Do something with saveData
|
34
|
+
* });
|
35
|
+
* })();
|
8
36
|
* ```
|
9
37
|
*
|
10
38
|
* @see
|
11
39
|
* {@link Editor}
|
40
|
+
* {@link Editor.loadFromSVG}
|
41
|
+
* {@link HTMLToolbar.addActionButton }
|
12
42
|
*
|
13
43
|
* @packageDocumentation
|
14
44
|
*/
|
package/dist/mjs/src/lib.mjs
CHANGED
@@ -5,10 +5,40 @@
|
|
5
5
|
* @example
|
6
6
|
* ```
|
7
7
|
* import { Editor, Vec3, Mat33 } from 'js-draw';
|
8
|
+
*
|
9
|
+
* // Apply js-draw CSS
|
10
|
+
* import 'js-draw/styles';
|
11
|
+
* // If your bundler doesn't support the above, try
|
12
|
+
* // import 'js-draw/bundledStyles';
|
13
|
+
*
|
14
|
+
* (async () => {
|
15
|
+
* const editor = new Editor(document.body);
|
16
|
+
* const toolbar = editor.addToolbar();
|
17
|
+
* editor.getRootElement().style.height = '600px';
|
18
|
+
*
|
19
|
+
* await editor.loadFromSVG(`
|
20
|
+
* <svg viewBox="0 0 500 500" width="500" height="500" version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
|
21
|
+
* <style id="js-draw-style-sheet">path{stroke-linecap:round;stroke-linejoin:round;}text{white-space:pre;}</style>
|
22
|
+
* <path d="M500,500L500,0L0,0L0,500L500,500" fill="#423131bf" class="js-draw-image-background"></path>
|
23
|
+
* <text style="transform: matrix(1, 0, 0, 1, 57, 192); font-family: serif; font-size: 32px; fill: rgb(204, 102, 51);">Testing...</text>
|
24
|
+
* </svg>
|
25
|
+
* `);
|
26
|
+
*
|
27
|
+
* toolbar.addActionButton({
|
28
|
+
* label: 'Save',
|
29
|
+
* icon: editor.icons.makeSaveIcon(),
|
30
|
+
* }, () => {
|
31
|
+
* const saveData = editor.toSVG().outerHTML;
|
32
|
+
*
|
33
|
+
* // Do something with saveData
|
34
|
+
* });
|
35
|
+
* })();
|
8
36
|
* ```
|
9
37
|
*
|
10
38
|
* @see
|
11
39
|
* {@link Editor}
|
40
|
+
* {@link Editor.loadFromSVG}
|
41
|
+
* {@link HTMLToolbar.addActionButton }
|
12
42
|
*
|
13
43
|
* @packageDocumentation
|
14
44
|
*/
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import Color4 from '../Color4';
|
2
2
|
interface RenderingStyle {
|
3
|
-
fill: Color4;
|
4
|
-
stroke?: {
|
5
|
-
color: Color4;
|
6
|
-
width: number;
|
3
|
+
readonly fill: Color4;
|
4
|
+
readonly stroke?: {
|
5
|
+
readonly color: Color4;
|
6
|
+
readonly width: number;
|
7
7
|
};
|
8
8
|
}
|
9
9
|
export default RenderingStyle;
|
@@ -1,13 +1,13 @@
|
|
1
1
|
import RenderingStyle from './RenderingStyle';
|
2
|
-
export interface
|
3
|
-
size: number;
|
4
|
-
fontFamily: string;
|
5
|
-
fontWeight?: string;
|
6
|
-
fontVariant?: string;
|
7
|
-
renderingStyle: RenderingStyle;
|
2
|
+
export interface TextRenderingStyle {
|
3
|
+
readonly size: number;
|
4
|
+
readonly fontFamily: string;
|
5
|
+
readonly fontWeight?: string;
|
6
|
+
readonly fontVariant?: string;
|
7
|
+
readonly renderingStyle: RenderingStyle;
|
8
8
|
}
|
9
|
-
export default
|
10
|
-
export declare const cloneTextStyle: (style:
|
9
|
+
export default TextRenderingStyle;
|
10
|
+
export declare const cloneTextStyle: (style: TextRenderingStyle) => {
|
11
11
|
renderingStyle: {
|
12
12
|
fill: import("../Color4").default;
|
13
13
|
stroke: {
|
@@ -20,8 +20,8 @@ export declare const cloneTextStyle: (style: TextStyle) => {
|
|
20
20
|
fontWeight?: string | undefined;
|
21
21
|
fontVariant?: string | undefined;
|
22
22
|
};
|
23
|
-
export declare const textStyleFromJSON: (json: any) =>
|
24
|
-
export declare const textStyleToJSON: (style:
|
23
|
+
export declare const textStyleFromJSON: (json: any) => TextRenderingStyle;
|
24
|
+
export declare const textStyleToJSON: (style: TextRenderingStyle) => {
|
25
25
|
renderingStyle: {
|
26
26
|
fill: string;
|
27
27
|
stroke: {
|
@@ -3,3 +3,5 @@ export { default as DummyRenderer } from './renderers/DummyRenderer';
|
|
3
3
|
export { default as SVGRenderer } from './renderers/SVGRenderer';
|
4
4
|
export { default as CanvasRenderer } from './renderers/CanvasRenderer';
|
5
5
|
export { default as Display, RenderingMode } from './Display';
|
6
|
+
export { default as TextRenderingStyle } from './TextRenderingStyle';
|
7
|
+
export { default as RenderingStyle } from './RenderingStyle';
|
@@ -6,7 +6,7 @@ import Rect2 from '../../math/Rect2';
|
|
6
6
|
import { Point2, Vec2 } from '../../math/Vec2';
|
7
7
|
import Viewport from '../../Viewport';
|
8
8
|
import RenderingStyle from '../RenderingStyle';
|
9
|
-
import
|
9
|
+
import TextRenderingStyle from '../TextRenderingStyle';
|
10
10
|
export interface RenderablePathSpec {
|
11
11
|
startPoint: Point2;
|
12
12
|
commands: PathCommand[];
|
@@ -33,7 +33,7 @@ export default abstract class AbstractRenderer {
|
|
33
33
|
protected abstract moveTo(point: Point2): void;
|
34
34
|
protected abstract traceCubicBezierCurve(p1: Point2, p2: Point2, p3: Point2): void;
|
35
35
|
protected abstract traceQuadraticBezierCurve(controlPoint: Point2, endPoint: Point2): void;
|
36
|
-
abstract drawText(text: string, transform: Mat33, style:
|
36
|
+
abstract drawText(text: string, transform: Mat33, style: TextRenderingStyle): void;
|
37
37
|
abstract drawImage(image: RenderableImage): void;
|
38
38
|
abstract isTooSmallToRender(rect: Rect2): boolean;
|
39
39
|
setDraftMode(_draftMode: boolean): void;
|
@@ -4,7 +4,7 @@ import { Point2, Vec2 } from '../../math/Vec2';
|
|
4
4
|
import Vec3 from '../../math/Vec3';
|
5
5
|
import Viewport from '../../Viewport';
|
6
6
|
import RenderingStyle from '../RenderingStyle';
|
7
|
-
import
|
7
|
+
import TextRenderingStyle from '../TextRenderingStyle';
|
8
8
|
import AbstractRenderer, { RenderableImage, RenderablePathSpec } from './AbstractRenderer';
|
9
9
|
/**
|
10
10
|
* Renders onto a `CanvasRenderingContext2D`.
|
@@ -53,7 +53,7 @@ export default class CanvasRenderer extends AbstractRenderer {
|
|
53
53
|
protected traceCubicBezierCurve(p1: Point2, p2: Point2, p3: Point2): void;
|
54
54
|
protected traceQuadraticBezierCurve(controlPoint: Vec3, endPoint: Vec3): void;
|
55
55
|
drawPath(path: RenderablePathSpec): void;
|
56
|
-
drawText(text: string, transform: Mat33, style:
|
56
|
+
drawText(text: string, transform: Mat33, style: TextRenderingStyle): void;
|
57
57
|
drawImage(image: RenderableImage): void;
|
58
58
|
private clipLevels;
|
59
59
|
startObject(boundingBox: Rect2, clip?: boolean): void;
|
@@ -4,7 +4,7 @@ import { Point2, Vec2 } from '../../math/Vec2';
|
|
4
4
|
import Vec3 from '../../math/Vec3';
|
5
5
|
import Viewport from '../../Viewport';
|
6
6
|
import RenderingStyle from '../RenderingStyle';
|
7
|
-
import
|
7
|
+
import TextRenderingStyle from '../TextRenderingStyle';
|
8
8
|
import AbstractRenderer, { RenderableImage } from './AbstractRenderer';
|
9
9
|
export default class DummyRenderer extends AbstractRenderer {
|
10
10
|
clearedCount: number;
|
@@ -25,7 +25,7 @@ export default class DummyRenderer extends AbstractRenderer {
|
|
25
25
|
protected traceCubicBezierCurve(p1: Vec3, p2: Vec3, p3: Vec3): void;
|
26
26
|
protected traceQuadraticBezierCurve(controlPoint: Vec3, endPoint: Vec3): void;
|
27
27
|
drawPoints(..._points: Vec3[]): void;
|
28
|
-
drawText(text: string, _transform: Mat33, _style:
|
28
|
+
drawText(text: string, _transform: Mat33, _style: TextRenderingStyle): void;
|
29
29
|
drawImage(image: RenderableImage): void;
|
30
30
|
startObject(boundingBox: Rect2, _clip: boolean): void;
|
31
31
|
endObject(): void;
|
@@ -4,7 +4,7 @@ import Rect2 from '../../math/Rect2';
|
|
4
4
|
import { Point2, Vec2 } from '../../math/Vec2';
|
5
5
|
import Viewport from '../../Viewport';
|
6
6
|
import RenderingStyle from '../RenderingStyle';
|
7
|
-
import
|
7
|
+
import TextRenderingStyle from '../TextRenderingStyle';
|
8
8
|
import AbstractRenderer, { RenderableImage, RenderablePathSpec } from './AbstractRenderer';
|
9
9
|
export declare const renderedStylesheetId = "js-draw-style-sheet";
|
10
10
|
/**
|
@@ -36,7 +36,7 @@ export default class SVGRenderer extends AbstractRenderer {
|
|
36
36
|
private textContainer;
|
37
37
|
private textContainerTransform;
|
38
38
|
private textParentStyle;
|
39
|
-
drawText(text: string, transform: Mat33, style:
|
39
|
+
drawText(text: string, transform: Mat33, style: TextRenderingStyle): void;
|
40
40
|
drawImage(image: RenderableImage): void;
|
41
41
|
startObject(boundingBox: Rect2): void;
|
42
42
|
endObject(loaderData?: LoadSaveDataTable, elemClassNames?: string[]): void;
|
@@ -4,7 +4,7 @@ import Vec3 from '../../math/Vec3';
|
|
4
4
|
import Viewport from '../../Viewport';
|
5
5
|
import { TextRendererLocalization } from '../localization';
|
6
6
|
import RenderingStyle from '../RenderingStyle';
|
7
|
-
import
|
7
|
+
import TextRenderingStyle from '../TextRenderingStyle';
|
8
8
|
import AbstractRenderer, { RenderableImage } from './AbstractRenderer';
|
9
9
|
export default class TextOnlyRenderer extends AbstractRenderer {
|
10
10
|
private localizationTable;
|
@@ -22,7 +22,7 @@ export default class TextOnlyRenderer extends AbstractRenderer {
|
|
22
22
|
protected moveTo(_point: Vec3): void;
|
23
23
|
protected traceCubicBezierCurve(_p1: Vec3, _p2: Vec3, _p3: Vec3): void;
|
24
24
|
protected traceQuadraticBezierCurve(_controlPoint: Vec3, _endPoint: Vec3): void;
|
25
|
-
drawText(text: string, _transform: Mat33, _style:
|
25
|
+
drawText(text: string, _transform: Mat33, _style: TextRenderingStyle): void;
|
26
26
|
drawImage(image: RenderableImage): void;
|
27
27
|
isTooSmallToRender(rect: Rect2): boolean;
|
28
28
|
drawPoints(..._points: Vec3[]): void;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import Color4 from '../Color4';
|
2
2
|
import { ComponentBuilderFactory } from '../components/builders/types';
|
3
|
-
import
|
3
|
+
import TextRenderingStyle from '../rendering/TextRenderingStyle';
|
4
4
|
import Pen from '../tools/Pen';
|
5
5
|
export type IconType = HTMLImageElement | SVGElement;
|
6
6
|
/**
|
@@ -47,7 +47,7 @@ export default class IconProvider {
|
|
47
47
|
makeZoomIcon(): IconType;
|
48
48
|
makeRotationLockIcon(): IconType;
|
49
49
|
makeInsertImageIcon(): IconType;
|
50
|
-
makeTextIcon(textStyle:
|
50
|
+
makeTextIcon(textStyle: TextRenderingStyle): IconType;
|
51
51
|
makePenIcon(strokeSize: number, color: string | Color4, rounded?: boolean): IconType;
|
52
52
|
makeIconFromFactory(pen: Pen, factory: ComponentBuilderFactory): IconType;
|
53
53
|
makePipetteIcon(color?: Color4): IconType;
|
@@ -24,7 +24,7 @@ export const defaultToolbarLocalization = {
|
|
24
24
|
pickColorFromScreen: 'Pick color from screen',
|
25
25
|
clickToPickColorAnnouncement: 'Click on the screen to pick a color',
|
26
26
|
selectionToolKeyboardShortcuts: 'Selection tool: Use arrow keys to move selected items, lowercase/uppercase ‘i’ and ‘o’ to resize.',
|
27
|
-
documentProperties: '
|
27
|
+
documentProperties: 'Page',
|
28
28
|
backgroundColor: 'Background Color: ',
|
29
29
|
imageWidthOption: 'Width: ',
|
30
30
|
imageHeightOption: 'Height: ',
|
@@ -122,7 +122,7 @@ export default class BaseWidget {
|
|
122
122
|
}
|
123
123
|
// Add a listener that is triggered when a key is pressed.
|
124
124
|
// Listeners will fire regardless of whether this widget is selected and require that
|
125
|
-
// {@link
|
125
|
+
// {@link Editor.toolController} to have an enabled {@link ToolbarShortcutHandler} tool.
|
126
126
|
onKeyPress(_event) {
|
127
127
|
return false;
|
128
128
|
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import Editor from '../Editor';
|
2
|
+
import { PointerEvt } from '../types';
|
3
|
+
import BaseTool from './BaseTool';
|
4
|
+
/**
|
5
|
+
* This tool, when enabled, plays a sound representing the color of the portion of the display
|
6
|
+
* currently under the cursor. This tool adds a button that can be navigated to with the tab key
|
7
|
+
* that enables/disables the tool.
|
8
|
+
*
|
9
|
+
* This allows the user to explore the content of the display without a working screen.
|
10
|
+
*/
|
11
|
+
export default class SoundUITool extends BaseTool {
|
12
|
+
private editor;
|
13
|
+
private soundFeedback;
|
14
|
+
private toggleButton;
|
15
|
+
private toggleButtonContainer;
|
16
|
+
constructor(editor: Editor, description: string);
|
17
|
+
private updateToggleButtonText;
|
18
|
+
setEnabled(enabled: boolean): void;
|
19
|
+
private lastPointerPos;
|
20
|
+
onPointerDown({ current, allPointers }: PointerEvt): boolean;
|
21
|
+
onPointerMove({ current }: PointerEvt): void;
|
22
|
+
onPointerUp(_event: PointerEvt): void;
|
23
|
+
onGestureCancel(): void;
|
24
|
+
}
|