js-draw 0.1.4 → 0.1.7
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/.eslintrc.js +1 -0
- package/CHANGELOG.md +15 -0
- package/README.md +2 -2
- package/dist/bundle.js +1 -1
- package/dist/src/Color4.js +6 -2
- package/dist/src/Editor.d.ts +1 -0
- package/dist/src/Editor.js +20 -9
- package/dist/src/EditorImage.d.ts +8 -13
- package/dist/src/EditorImage.js +51 -29
- package/dist/src/SVGLoader.js +6 -2
- package/dist/src/Viewport.d.ts +10 -2
- package/dist/src/Viewport.js +8 -6
- package/dist/src/commands/Command.d.ts +9 -8
- package/dist/src/commands/Command.js +15 -14
- package/dist/src/commands/Duplicate.d.ts +14 -0
- package/dist/src/commands/Duplicate.js +34 -0
- package/dist/src/commands/Erase.d.ts +5 -2
- package/dist/src/commands/Erase.js +28 -9
- package/dist/src/commands/SerializableCommand.d.ts +13 -0
- package/dist/src/commands/SerializableCommand.js +28 -0
- package/dist/src/commands/localization.d.ts +2 -0
- package/dist/src/commands/localization.js +2 -0
- package/dist/src/components/AbstractComponent.d.ts +15 -2
- package/dist/src/components/AbstractComponent.js +122 -26
- package/dist/src/components/SVGGlobalAttributesObject.d.ts +6 -1
- package/dist/src/components/SVGGlobalAttributesObject.js +23 -1
- package/dist/src/components/Stroke.d.ts +5 -0
- package/dist/src/components/Stroke.js +32 -1
- package/dist/src/components/Text.d.ts +11 -4
- package/dist/src/components/Text.js +57 -3
- package/dist/src/components/UnknownSVGObject.d.ts +2 -0
- package/dist/src/components/UnknownSVGObject.js +12 -1
- package/dist/src/components/util/describeComponentList.d.ts +4 -0
- package/dist/src/components/util/describeComponentList.js +14 -0
- package/dist/src/geometry/Path.d.ts +4 -1
- package/dist/src/geometry/Path.js +4 -0
- package/dist/src/localization.d.ts +2 -1
- package/dist/src/localization.js +2 -1
- package/dist/src/rendering/Display.d.ts +5 -0
- package/dist/src/rendering/Display.js +32 -0
- package/dist/src/rendering/RenderingStyle.d.ts +24 -0
- package/dist/src/rendering/RenderingStyle.js +32 -0
- package/dist/src/rendering/localization.d.ts +5 -0
- package/dist/src/rendering/localization.js +4 -0
- package/dist/src/rendering/renderers/AbstractRenderer.d.ts +1 -8
- package/dist/src/rendering/renderers/AbstractRenderer.js +1 -6
- package/dist/src/rendering/renderers/CanvasRenderer.d.ts +2 -1
- package/dist/src/rendering/renderers/DummyRenderer.d.ts +2 -1
- package/dist/src/rendering/renderers/SVGRenderer.d.ts +2 -1
- package/dist/src/rendering/renderers/TextOnlyRenderer.d.ts +25 -0
- package/dist/src/rendering/renderers/TextOnlyRenderer.js +40 -0
- package/dist/src/toolbar/HTMLToolbar.d.ts +1 -1
- package/dist/src/toolbar/HTMLToolbar.js +52 -534
- package/dist/src/toolbar/icons.d.ts +5 -0
- package/dist/src/toolbar/icons.js +186 -13
- package/dist/src/toolbar/localization.d.ts +4 -0
- package/dist/src/toolbar/localization.js +4 -0
- package/dist/src/toolbar/makeColorInput.d.ts +5 -0
- package/dist/src/toolbar/makeColorInput.js +81 -0
- package/dist/src/toolbar/widgets/BaseToolWidget.d.ts +12 -0
- package/dist/src/toolbar/widgets/BaseToolWidget.js +44 -0
- package/dist/src/toolbar/widgets/BaseWidget.d.ts +32 -0
- package/dist/src/toolbar/widgets/BaseWidget.js +148 -0
- package/dist/src/toolbar/widgets/EraserWidget.d.ts +6 -0
- package/dist/src/toolbar/widgets/EraserWidget.js +14 -0
- package/dist/src/toolbar/widgets/HandToolWidget.d.ts +13 -0
- package/dist/src/toolbar/widgets/HandToolWidget.js +133 -0
- package/dist/src/toolbar/widgets/PenWidget.d.ts +20 -0
- package/dist/src/toolbar/widgets/PenWidget.js +131 -0
- package/dist/src/toolbar/widgets/SelectionWidget.d.ts +11 -0
- package/dist/src/toolbar/widgets/SelectionWidget.js +56 -0
- package/dist/src/toolbar/widgets/TextToolWidget.d.ts +13 -0
- package/dist/src/toolbar/widgets/TextToolWidget.js +72 -0
- package/dist/src/tools/Pen.js +1 -1
- package/dist/src/tools/PipetteTool.d.ts +20 -0
- package/dist/src/tools/PipetteTool.js +40 -0
- package/dist/src/tools/SelectionTool.d.ts +2 -0
- package/dist/src/tools/SelectionTool.js +41 -23
- package/dist/src/tools/TextTool.d.ts +1 -0
- package/dist/src/tools/TextTool.js +5 -4
- package/dist/src/tools/ToolController.d.ts +3 -1
- package/dist/src/tools/ToolController.js +4 -0
- package/dist/src/tools/localization.d.ts +2 -1
- package/dist/src/tools/localization.js +3 -2
- package/dist/src/types.d.ts +7 -2
- package/dist/src/types.js +1 -0
- package/jest.config.js +2 -0
- package/package.json +6 -6
- package/src/Color4.ts +9 -3
- package/src/Editor.css +10 -0
- package/src/Editor.ts +24 -12
- package/src/EditorImage.test.ts +4 -4
- package/src/EditorImage.ts +61 -20
- package/src/SVGLoader.ts +9 -3
- package/src/Viewport.ts +7 -6
- package/src/commands/Command.ts +21 -19
- package/src/commands/Duplicate.ts +49 -0
- package/src/commands/Erase.ts +34 -13
- package/src/commands/SerializableCommand.ts +41 -0
- package/src/commands/localization.ts +5 -0
- package/src/components/AbstractComponent.ts +168 -26
- package/src/components/SVGGlobalAttributesObject.ts +34 -2
- package/src/components/Stroke.test.ts +53 -0
- package/src/components/Stroke.ts +37 -2
- package/src/components/Text.test.ts +38 -0
- package/src/components/Text.ts +80 -5
- package/src/components/UnknownSVGObject.test.ts +10 -0
- package/src/components/UnknownSVGObject.ts +15 -1
- package/src/components/builders/FreehandLineBuilder.ts +2 -1
- package/src/components/util/describeComponentList.ts +18 -0
- package/src/geometry/Path.ts +8 -1
- package/src/localization.ts +3 -1
- package/src/rendering/Display.ts +43 -1
- package/src/rendering/RenderingStyle.test.ts +68 -0
- package/src/rendering/RenderingStyle.ts +46 -0
- package/src/rendering/caching/RenderingCache.test.ts +1 -1
- package/src/rendering/localization.ts +10 -0
- package/src/rendering/renderers/AbstractRenderer.ts +1 -15
- package/src/rendering/renderers/CanvasRenderer.ts +2 -1
- package/src/rendering/renderers/DummyRenderer.ts +2 -1
- package/src/rendering/renderers/SVGRenderer.ts +2 -1
- package/src/rendering/renderers/TextOnlyRenderer.ts +52 -0
- package/src/toolbar/HTMLToolbar.ts +58 -660
- package/src/toolbar/icons.ts +205 -13
- package/src/toolbar/localization.ts +10 -2
- package/src/toolbar/makeColorInput.ts +105 -0
- package/src/toolbar/toolbar.css +116 -78
- package/src/toolbar/widgets/BaseToolWidget.ts +53 -0
- package/src/toolbar/widgets/BaseWidget.ts +175 -0
- package/src/toolbar/widgets/EraserWidget.ts +16 -0
- package/src/toolbar/widgets/HandToolWidget.ts +186 -0
- package/src/toolbar/widgets/PenWidget.ts +165 -0
- package/src/toolbar/widgets/SelectionWidget.ts +72 -0
- package/src/toolbar/widgets/TextToolWidget.ts +90 -0
- package/src/tools/Pen.ts +1 -1
- package/src/tools/PipetteTool.ts +56 -0
- package/src/tools/SelectionTool.test.ts +2 -4
- package/src/tools/SelectionTool.ts +47 -27
- package/src/tools/TextTool.ts +7 -3
- package/src/tools/ToolController.ts +10 -6
- package/src/tools/UndoRedoShortcut.test.ts +1 -1
- package/src/tools/localization.ts +6 -3
- package/src/types.ts +12 -1
@@ -1,6 +1,8 @@
|
|
1
1
|
import AbstractRenderer from './renderers/AbstractRenderer';
|
2
2
|
import { Editor } from '../Editor';
|
3
|
+
import { Point2 } from '../geometry/Vec2';
|
3
4
|
import RenderingCache from './caching/RenderingCache';
|
5
|
+
import Color4 from '../Color4';
|
4
6
|
export declare enum RenderingMode {
|
5
7
|
DummyRenderer = 0,
|
6
8
|
CanvasRenderer = 1
|
@@ -10,6 +12,7 @@ export default class Display {
|
|
10
12
|
private parent;
|
11
13
|
private dryInkRenderer;
|
12
14
|
private wetInkRenderer;
|
15
|
+
private textRenderer;
|
13
16
|
private cache;
|
14
17
|
private resizeSurfacesCallback?;
|
15
18
|
private flattenCallback?;
|
@@ -17,7 +20,9 @@ export default class Display {
|
|
17
20
|
get width(): number;
|
18
21
|
get height(): number;
|
19
22
|
getCache(): RenderingCache;
|
23
|
+
getColorAt: (_screenPos: Point2) => Color4 | null;
|
20
24
|
private initializeCanvasRendering;
|
25
|
+
private initializeTextRendering;
|
21
26
|
startRerender(): AbstractRenderer;
|
22
27
|
setDraftMode(draftMode: boolean): void;
|
23
28
|
getDryInkRenderer(): AbstractRenderer;
|
@@ -3,6 +3,8 @@ import { EditorEventType } from '../types';
|
|
3
3
|
import DummyRenderer from './renderers/DummyRenderer';
|
4
4
|
import { Vec2 } from '../geometry/Vec2';
|
5
5
|
import RenderingCache from './caching/RenderingCache';
|
6
|
+
import TextOnlyRenderer from './renderers/TextOnlyRenderer';
|
7
|
+
import Color4 from '../Color4';
|
6
8
|
export var RenderingMode;
|
7
9
|
(function (RenderingMode) {
|
8
10
|
RenderingMode[RenderingMode["DummyRenderer"] = 0] = "DummyRenderer";
|
@@ -13,6 +15,9 @@ export default class Display {
|
|
13
15
|
constructor(editor, mode, parent) {
|
14
16
|
this.editor = editor;
|
15
17
|
this.parent = parent;
|
18
|
+
this.getColorAt = (_screenPos) => {
|
19
|
+
return null;
|
20
|
+
};
|
16
21
|
if (mode === RenderingMode.CanvasRenderer) {
|
17
22
|
this.initializeCanvasRendering();
|
18
23
|
}
|
@@ -23,6 +28,8 @@ export default class Display {
|
|
23
28
|
else {
|
24
29
|
throw new Error(`Unknown rendering mode, ${mode}!`);
|
25
30
|
}
|
31
|
+
this.textRenderer = new TextOnlyRenderer(editor.viewport, editor.localization);
|
32
|
+
this.initializeTextRendering();
|
26
33
|
const cacheBlockResolution = Vec2.of(600, 600);
|
27
34
|
this.cache = new RenderingCache({
|
28
35
|
createRenderer: () => {
|
@@ -103,6 +110,31 @@ export default class Display {
|
|
103
110
|
this.flattenCallback = () => {
|
104
111
|
dryInkCtx.drawImage(wetInkCanvas, 0, 0);
|
105
112
|
};
|
113
|
+
this.getColorAt = (screenPos) => {
|
114
|
+
const pixel = dryInkCtx.getImageData(screenPos.x, screenPos.y, 1, 1);
|
115
|
+
const data = pixel === null || pixel === void 0 ? void 0 : pixel.data;
|
116
|
+
if (data) {
|
117
|
+
const color = Color4.ofRGBA(data[0] / 255, data[1] / 255, data[2] / 255, data[3] / 255);
|
118
|
+
return color;
|
119
|
+
}
|
120
|
+
return null;
|
121
|
+
};
|
122
|
+
}
|
123
|
+
initializeTextRendering() {
|
124
|
+
const textRendererOutputContainer = document.createElement('div');
|
125
|
+
textRendererOutputContainer.classList.add('textRendererOutputContainer');
|
126
|
+
const rerenderButton = document.createElement('button');
|
127
|
+
rerenderButton.classList.add('rerenderButton');
|
128
|
+
rerenderButton.innerText = this.editor.localization.rerenderAsText;
|
129
|
+
const rerenderOutput = document.createElement('div');
|
130
|
+
rerenderOutput.ariaLive = 'polite';
|
131
|
+
rerenderButton.onclick = () => {
|
132
|
+
this.textRenderer.clear();
|
133
|
+
this.editor.image.render(this.textRenderer, this.editor.viewport);
|
134
|
+
rerenderOutput.innerText = this.textRenderer.getDescription();
|
135
|
+
};
|
136
|
+
textRendererOutputContainer.replaceChildren(rerenderButton, rerenderOutput);
|
137
|
+
this.editor.createHTMLOverlay(textRendererOutputContainer);
|
106
138
|
}
|
107
139
|
// Clears the drawing surfaces and otherwise prepares for a rerender.
|
108
140
|
startRerender() {
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import Color4 from '../Color4';
|
2
|
+
interface RenderingStyle {
|
3
|
+
fill: Color4;
|
4
|
+
stroke?: {
|
5
|
+
color: Color4;
|
6
|
+
width: number;
|
7
|
+
};
|
8
|
+
}
|
9
|
+
export default RenderingStyle;
|
10
|
+
export declare const stylesEqual: (a: RenderingStyle, b: RenderingStyle) => boolean;
|
11
|
+
export declare const styleToJSON: (style: RenderingStyle) => {
|
12
|
+
fill: string;
|
13
|
+
stroke: {
|
14
|
+
color: string;
|
15
|
+
width: number;
|
16
|
+
} | undefined;
|
17
|
+
};
|
18
|
+
export declare const styleFromJSON: (json: Record<string, any>) => {
|
19
|
+
fill: Color4;
|
20
|
+
stroke: {
|
21
|
+
color: Color4;
|
22
|
+
width: any;
|
23
|
+
} | undefined;
|
24
|
+
};
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import Color4 from '../Color4';
|
2
|
+
export const stylesEqual = (a, b) => {
|
3
|
+
var _a, _b, _c, _d, _e, _f;
|
4
|
+
const result = a === b || (a.fill.eq(b.fill)
|
5
|
+
&& (a.stroke == undefined) === (b.stroke == undefined)
|
6
|
+
&& ((_d = (_b = (_a = a.stroke) === null || _a === void 0 ? void 0 : _a.color) === null || _b === void 0 ? void 0 : _b.eq((_c = b.stroke) === null || _c === void 0 ? void 0 : _c.color)) !== null && _d !== void 0 ? _d : true)
|
7
|
+
&& ((_e = a.stroke) === null || _e === void 0 ? void 0 : _e.width) === ((_f = b.stroke) === null || _f === void 0 ? void 0 : _f.width));
|
8
|
+
// Map undefined/null -> false
|
9
|
+
return result !== null && result !== void 0 ? result : false;
|
10
|
+
};
|
11
|
+
// Returns an object that can be converted to a JSON string with
|
12
|
+
// JSON.stringify.
|
13
|
+
export const styleToJSON = (style) => {
|
14
|
+
const stroke = !style.stroke ? undefined : {
|
15
|
+
color: style.stroke.color.toHexString(),
|
16
|
+
width: style.stroke.width,
|
17
|
+
};
|
18
|
+
return {
|
19
|
+
fill: style.fill.toHexString(),
|
20
|
+
stroke,
|
21
|
+
};
|
22
|
+
};
|
23
|
+
export const styleFromJSON = (json) => {
|
24
|
+
const stroke = json.stroke ? {
|
25
|
+
color: Color4.fromHex(json.stroke.color),
|
26
|
+
width: json.stroke.width,
|
27
|
+
} : undefined;
|
28
|
+
return {
|
29
|
+
fill: Color4.fromHex(json.fill),
|
30
|
+
stroke,
|
31
|
+
};
|
32
|
+
};
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import Color4 from '../../Color4';
|
2
1
|
import { LoadSaveDataTable } from '../../components/AbstractComponent';
|
3
2
|
import { TextStyle } from '../../components/Text';
|
4
3
|
import Mat33 from '../../geometry/Mat33';
|
@@ -6,13 +5,7 @@ import { PathCommand } from '../../geometry/Path';
|
|
6
5
|
import Rect2 from '../../geometry/Rect2';
|
7
6
|
import { Point2, Vec2 } from '../../geometry/Vec2';
|
8
7
|
import Viewport from '../../Viewport';
|
9
|
-
|
10
|
-
fill: Color4;
|
11
|
-
stroke?: {
|
12
|
-
color: Color4;
|
13
|
-
width: number;
|
14
|
-
};
|
15
|
-
}
|
8
|
+
import RenderingStyle from '../RenderingStyle';
|
16
9
|
export interface RenderablePathSpec {
|
17
10
|
startPoint: Point2;
|
18
11
|
commands: PathCommand[];
|
@@ -1,11 +1,6 @@
|
|
1
1
|
import Path, { PathCommandType } from '../../geometry/Path';
|
2
2
|
import { Vec2 } from '../../geometry/Vec2';
|
3
|
-
|
4
|
-
var _a, _b, _c, _d, _e;
|
5
|
-
return a === b || (a.fill.eq(b.fill)
|
6
|
-
&& ((_b = (_a = a.stroke) === null || _a === void 0 ? void 0 : _a.color) === null || _b === void 0 ? void 0 : _b.eq((_c = b.stroke) === null || _c === void 0 ? void 0 : _c.color))
|
7
|
-
&& ((_d = a.stroke) === null || _d === void 0 ? void 0 : _d.width) === ((_e = b.stroke) === null || _e === void 0 ? void 0 : _e.width));
|
8
|
-
};
|
3
|
+
import { stylesEqual } from '../RenderingStyle';
|
9
4
|
export default class AbstractRenderer {
|
10
5
|
constructor(viewport) {
|
11
6
|
this.viewport = viewport;
|
@@ -4,7 +4,8 @@ import Rect2 from '../../geometry/Rect2';
|
|
4
4
|
import { Point2, Vec2 } from '../../geometry/Vec2';
|
5
5
|
import Vec3 from '../../geometry/Vec3';
|
6
6
|
import Viewport from '../../Viewport';
|
7
|
-
import
|
7
|
+
import RenderingStyle from '../RenderingStyle';
|
8
|
+
import AbstractRenderer, { RenderablePathSpec } from './AbstractRenderer';
|
8
9
|
export default class CanvasRenderer extends AbstractRenderer {
|
9
10
|
private ctx;
|
10
11
|
private ignoreObjectsAboveLevel;
|
@@ -4,7 +4,8 @@ import Rect2 from '../../geometry/Rect2';
|
|
4
4
|
import { Point2, Vec2 } from '../../geometry/Vec2';
|
5
5
|
import Vec3 from '../../geometry/Vec3';
|
6
6
|
import Viewport from '../../Viewport';
|
7
|
-
import
|
7
|
+
import RenderingStyle from '../RenderingStyle';
|
8
|
+
import AbstractRenderer from './AbstractRenderer';
|
8
9
|
export default class DummyRenderer extends AbstractRenderer {
|
9
10
|
clearedCount: number;
|
10
11
|
renderedPathCount: number;
|
@@ -4,7 +4,8 @@ import Mat33 from '../../geometry/Mat33';
|
|
4
4
|
import Rect2 from '../../geometry/Rect2';
|
5
5
|
import { Point2, Vec2 } from '../../geometry/Vec2';
|
6
6
|
import Viewport from '../../Viewport';
|
7
|
-
import
|
7
|
+
import RenderingStyle from '../RenderingStyle';
|
8
|
+
import AbstractRenderer from './AbstractRenderer';
|
8
9
|
export default class SVGRenderer extends AbstractRenderer {
|
9
10
|
private elem;
|
10
11
|
private currentPath;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import { TextStyle } from '../../components/Text';
|
2
|
+
import Mat33 from '../../geometry/Mat33';
|
3
|
+
import Rect2 from '../../geometry/Rect2';
|
4
|
+
import Vec3 from '../../geometry/Vec3';
|
5
|
+
import Viewport from '../../Viewport';
|
6
|
+
import { TextRendererLocalization } from '../localization';
|
7
|
+
import RenderingStyle from '../RenderingStyle';
|
8
|
+
import AbstractRenderer from './AbstractRenderer';
|
9
|
+
export default class TextOnlyRenderer extends AbstractRenderer {
|
10
|
+
private localizationTable;
|
11
|
+
private descriptionBuilder;
|
12
|
+
constructor(viewport: Viewport, localizationTable: TextRendererLocalization);
|
13
|
+
displaySize(): Vec3;
|
14
|
+
clear(): void;
|
15
|
+
getDescription(): string;
|
16
|
+
protected beginPath(_startPoint: Vec3): void;
|
17
|
+
protected endPath(_style: RenderingStyle): void;
|
18
|
+
protected lineTo(_point: Vec3): void;
|
19
|
+
protected moveTo(_point: Vec3): void;
|
20
|
+
protected traceCubicBezierCurve(_p1: Vec3, _p2: Vec3, _p3: Vec3): void;
|
21
|
+
protected traceQuadraticBezierCurve(_controlPoint: Vec3, _endPoint: Vec3): void;
|
22
|
+
drawText(text: string, _transform: Mat33, _style: TextStyle): void;
|
23
|
+
isTooSmallToRender(rect: Rect2): boolean;
|
24
|
+
drawPoints(..._points: Vec3[]): void;
|
25
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { Vec2 } from '../../geometry/Vec2';
|
2
|
+
import AbstractRenderer from './AbstractRenderer';
|
3
|
+
// Outputs a description of what was rendered.
|
4
|
+
export default class TextOnlyRenderer extends AbstractRenderer {
|
5
|
+
constructor(viewport, localizationTable) {
|
6
|
+
super(viewport);
|
7
|
+
this.localizationTable = localizationTable;
|
8
|
+
this.descriptionBuilder = [];
|
9
|
+
}
|
10
|
+
displaySize() {
|
11
|
+
// We don't have a graphical display, export a reasonable size.
|
12
|
+
return Vec2.of(500, 500);
|
13
|
+
}
|
14
|
+
clear() {
|
15
|
+
this.descriptionBuilder = [];
|
16
|
+
}
|
17
|
+
getDescription() {
|
18
|
+
return this.descriptionBuilder.join('\n');
|
19
|
+
}
|
20
|
+
beginPath(_startPoint) {
|
21
|
+
}
|
22
|
+
endPath(_style) {
|
23
|
+
}
|
24
|
+
lineTo(_point) {
|
25
|
+
}
|
26
|
+
moveTo(_point) {
|
27
|
+
}
|
28
|
+
traceCubicBezierCurve(_p1, _p2, _p3) {
|
29
|
+
}
|
30
|
+
traceQuadraticBezierCurve(_controlPoint, _endPoint) {
|
31
|
+
}
|
32
|
+
drawText(text, _transform, _style) {
|
33
|
+
this.descriptionBuilder.push(this.localizationTable.textNode(text));
|
34
|
+
}
|
35
|
+
isTooSmallToRender(rect) {
|
36
|
+
return rect.maxDimension < 10 / this.getSizeOfCanvasPixelOnScreen();
|
37
|
+
}
|
38
|
+
drawPoints(..._points) {
|
39
|
+
}
|
40
|
+
}
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import Editor from '../Editor';
|
2
2
|
import { ToolbarLocalization } from './localization';
|
3
3
|
import { ActionButtonIcon } from './types';
|
4
|
+
export declare const toolbarCSSPrefix = "toolbar-";
|
4
5
|
export default class HTMLToolbar {
|
5
6
|
private editor;
|
6
7
|
private localizationTable;
|
7
8
|
private container;
|
8
|
-
private penTypes;
|
9
9
|
constructor(editor: Editor, parent: HTMLElement, localizationTable?: ToolbarLocalization);
|
10
10
|
setupColorPickers(): void;
|
11
11
|
addActionButton(title: string | ActionButtonIcon, command: () => void, parent?: Element): HTMLButtonElement;
|