js-draw 1.22.0 → 1.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/bundle.js +1 -1
- package/dist/cjs/Editor.d.ts +1 -3
- package/dist/cjs/Editor.js +2 -4
- package/dist/cjs/SVGLoader/SVGLoader.js +2 -0
- package/dist/cjs/Viewport.d.ts +1 -1
- package/dist/cjs/Viewport.js +1 -1
- package/dist/cjs/components/AbstractComponent.d.ts +1 -1
- package/dist/cjs/components/AbstractComponent.js +1 -1
- package/dist/cjs/components/builders/ArrowBuilder.d.ts +1 -1
- package/dist/cjs/components/builders/ArrowBuilder.js +1 -1
- package/dist/cjs/image/EditorImage.d.ts +30 -7
- package/dist/cjs/image/EditorImage.js +30 -7
- package/dist/cjs/rendering/renderers/CanvasRenderer.d.ts +2 -25
- package/dist/cjs/rendering/renderers/CanvasRenderer.js +2 -25
- package/dist/cjs/rendering/renderers/SVGRenderer.js +2 -2
- package/dist/cjs/toolbar/AbstractToolbar.d.ts +19 -0
- package/dist/cjs/toolbar/AbstractToolbar.js +19 -0
- package/dist/cjs/toolbar/IconProvider.d.ts +5 -1
- package/dist/cjs/toolbar/IconProvider.js +112 -146
- package/dist/cjs/toolbar/localization.js +2 -2
- package/dist/cjs/toolbar/widgets/BaseWidget.d.ts +1 -1
- package/dist/cjs/toolbar/widgets/BaseWidget.js +1 -1
- package/dist/cjs/tools/PanZoom.js +1 -1
- package/dist/cjs/tools/Pen.d.ts +13 -0
- package/dist/cjs/tools/Pen.js +13 -0
- package/dist/cjs/tools/lib.d.ts +1 -0
- package/dist/cjs/tools/lib.js +3 -1
- package/dist/cjs/util/cloneElementWithStyles.js +1 -1
- package/dist/cjs/util/createElement.d.ts +62 -0
- package/dist/cjs/util/createElement.js +53 -0
- package/dist/cjs/version.js +1 -1
- package/dist/mjs/Editor.d.ts +1 -3
- package/dist/mjs/Editor.mjs +2 -4
- package/dist/mjs/SVGLoader/SVGLoader.mjs +2 -0
- package/dist/mjs/Viewport.d.ts +1 -1
- package/dist/mjs/Viewport.mjs +1 -1
- package/dist/mjs/components/AbstractComponent.d.ts +1 -1
- package/dist/mjs/components/AbstractComponent.mjs +1 -1
- package/dist/mjs/components/builders/ArrowBuilder.d.ts +1 -1
- package/dist/mjs/components/builders/ArrowBuilder.mjs +1 -1
- package/dist/mjs/image/EditorImage.d.ts +30 -7
- package/dist/mjs/image/EditorImage.mjs +30 -7
- package/dist/mjs/rendering/renderers/CanvasRenderer.d.ts +2 -25
- package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +2 -25
- package/dist/mjs/rendering/renderers/SVGRenderer.mjs +2 -2
- package/dist/mjs/toolbar/AbstractToolbar.d.ts +19 -0
- package/dist/mjs/toolbar/AbstractToolbar.mjs +19 -0
- package/dist/mjs/toolbar/IconProvider.d.ts +5 -1
- package/dist/mjs/toolbar/IconProvider.mjs +112 -146
- package/dist/mjs/toolbar/localization.mjs +2 -2
- package/dist/mjs/toolbar/widgets/BaseWidget.d.ts +1 -1
- package/dist/mjs/toolbar/widgets/BaseWidget.mjs +1 -1
- package/dist/mjs/tools/PanZoom.mjs +1 -1
- package/dist/mjs/tools/Pen.d.ts +13 -0
- package/dist/mjs/tools/Pen.mjs +13 -0
- package/dist/mjs/tools/lib.d.ts +1 -0
- package/dist/mjs/tools/lib.mjs +1 -0
- package/dist/mjs/util/cloneElementWithStyles.mjs +1 -1
- package/dist/mjs/util/createElement.d.ts +62 -0
- package/dist/mjs/util/createElement.mjs +47 -0
- package/dist/mjs/version.mjs +1 -1
- package/package.json +4 -4
package/dist/cjs/Editor.d.ts
CHANGED
@@ -411,9 +411,7 @@ export declare class Editor {
|
|
411
411
|
* Use this to show finalized commands that don't need to have `announceForAccessibility`
|
412
412
|
* called.
|
413
413
|
*
|
414
|
-
*
|
415
|
-
* clients to listen for the application of commands (e.g. `SerializableCommand`s so they can
|
416
|
-
* be sent across the network), while `apply` does not.
|
414
|
+
* If `addToHistory` is `false`, this is equivalent to `command.apply(editor)`.
|
417
415
|
*
|
418
416
|
* @example
|
419
417
|
* ```
|
package/dist/cjs/Editor.js
CHANGED
@@ -137,7 +137,7 @@ class Editor {
|
|
137
137
|
maxZoom: settings.maxZoom ?? 1e12,
|
138
138
|
keyboardShortcutOverrides: settings.keyboardShortcutOverrides ?? {},
|
139
139
|
iconProvider: settings.iconProvider ?? new IconProvider_1.default(),
|
140
|
-
notices: [],
|
140
|
+
notices: settings.notices ?? [],
|
141
141
|
appInfo: settings.appInfo ? { ...settings.appInfo } : null,
|
142
142
|
pens: {
|
143
143
|
additionalPenTypes: settings.pens?.additionalPenTypes ?? [],
|
@@ -755,9 +755,7 @@ class Editor {
|
|
755
755
|
* Use this to show finalized commands that don't need to have `announceForAccessibility`
|
756
756
|
* called.
|
757
757
|
*
|
758
|
-
*
|
759
|
-
* clients to listen for the application of commands (e.g. `SerializableCommand`s so they can
|
760
|
-
* be sent across the network), while `apply` does not.
|
758
|
+
* If `addToHistory` is `false`, this is equivalent to `command.apply(editor)`.
|
761
759
|
*
|
762
760
|
* @example
|
763
761
|
* ```
|
@@ -561,6 +561,7 @@ class SVGLoader {
|
|
561
561
|
const { svgElem, cleanUp } = (() => {
|
562
562
|
// If the user requested an iframe load (the default) try to load with an iframe.
|
563
563
|
// There are some cases (e.g. in a sandboxed iframe) where this doesn't work.
|
564
|
+
// TODO(v2): Use domParserLoad by default.
|
564
565
|
if (!domParserLoad) {
|
565
566
|
try {
|
566
567
|
const sandbox = document.createElement('iframe');
|
@@ -600,6 +601,7 @@ class SVGLoader {
|
|
600
601
|
`);
|
601
602
|
sandboxDoc.close();
|
602
603
|
const svgElem = sandboxDoc.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
604
|
+
// eslint-disable-next-line no-unsanitized/property -- setting innerHTML in a sandboxed document.
|
603
605
|
svgElem.innerHTML = text;
|
604
606
|
sandboxDoc.body.appendChild(svgElem);
|
605
607
|
const cleanUp = () => {
|
package/dist/cjs/Viewport.d.ts
CHANGED
@@ -53,7 +53,7 @@ export declare class Viewport {
|
|
53
53
|
/**
|
54
54
|
* Snaps `canvasPos` to the nearest grid cell corner.
|
55
55
|
*
|
56
|
-
* @see {@link getGridSize}
|
56
|
+
* @see {@link getGridSize}.
|
57
57
|
*/
|
58
58
|
snapToGrid(canvasPos: Point2): {
|
59
59
|
readonly x: number;
|
package/dist/cjs/Viewport.js
CHANGED
@@ -107,7 +107,7 @@ class Viewport {
|
|
107
107
|
/**
|
108
108
|
* Snaps `canvasPos` to the nearest grid cell corner.
|
109
109
|
*
|
110
|
-
* @see {@link getGridSize}
|
110
|
+
* @see {@link getGridSize}.
|
111
111
|
*/
|
112
112
|
snapToGrid(canvasPos) {
|
113
113
|
const scaleFactor = this.getScaleFactorToNearestPowerOf(2);
|
@@ -122,7 +122,7 @@ export default abstract class AbstractComponent {
|
|
122
122
|
* updates the editor.
|
123
123
|
*
|
124
124
|
* The transformed component is also moved to the top (use
|
125
|
-
* {@link AbstractComponent
|
125
|
+
* {@link AbstractComponent#setZIndexAndTransformBy} to avoid this behavior).
|
126
126
|
*/
|
127
127
|
transformBy(affineTransfm: Mat33): SerializableCommand;
|
128
128
|
setZIndex(newZIndex: number): SerializableCommand;
|
@@ -162,7 +162,7 @@ class AbstractComponent {
|
|
162
162
|
* updates the editor.
|
163
163
|
*
|
164
164
|
* The transformed component is also moved to the top (use
|
165
|
-
* {@link AbstractComponent
|
165
|
+
* {@link AbstractComponent#setZIndexAndTransformBy} to avoid this behavior).
|
166
166
|
*/
|
167
167
|
transformBy(affineTransfm) {
|
168
168
|
return new AbstractComponent.TransformElementCommand(affineTransfm, this.getId(), this);
|
@@ -5,7 +5,7 @@ import Viewport from '../../Viewport';
|
|
5
5
|
import AbstractComponent from '../AbstractComponent';
|
6
6
|
import { ComponentBuilder, ComponentBuilderFactory } from './types';
|
7
7
|
/**
|
8
|
-
* Creates a stroke builder that generates arrows
|
8
|
+
* Creates a stroke builder that generates arrows.
|
9
9
|
*
|
10
10
|
* Example:
|
11
11
|
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
@@ -8,7 +8,7 @@ const math_1 = require("@js-draw/math");
|
|
8
8
|
const Stroke_1 = __importDefault(require("../Stroke"));
|
9
9
|
const makeSnapToGridAutocorrect_1 = __importDefault(require("./autocorrect/makeSnapToGridAutocorrect"));
|
10
10
|
/**
|
11
|
-
* Creates a stroke builder that generates arrows
|
11
|
+
* Creates a stroke builder that generates arrows.
|
12
12
|
*
|
13
13
|
* Example:
|
14
14
|
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
@@ -22,7 +22,20 @@ export type EditorImageNotifier = EventDispatcher<EditorImageEventType, {
|
|
22
22
|
*/
|
23
23
|
export type PreRenderComponentCallback = (component: AbstractComponent, componentsProcessed: number, totalComponents: number) => Promise<boolean>;
|
24
24
|
/**
|
25
|
-
* Handles lookup/storage of elements in the image.
|
25
|
+
* @summary Handles lookup/storage of elements in the image.
|
26
|
+
*
|
27
|
+
* `js-draw` images are made up of a collection of {@link AbstractComponent}s (which
|
28
|
+
* includes {@link Stroke}s, {@link TextComponent}s, etc.). An `EditorImage`
|
29
|
+
* is the data structure that stores these components.
|
30
|
+
*
|
31
|
+
* Here's how to do a few common operations:
|
32
|
+
* - **Get all components in a {@link @js-draw/math!Rect2 | Rect2}**:
|
33
|
+
* {@link EditorImage.getElementsIntersectingRegion}.
|
34
|
+
* - **Draw an `EditorImage` onto a canvas/SVG**: {@link EditorImage.render}.
|
35
|
+
* - **Adding a new component**: {@link EditorImage.addElement}.
|
36
|
+
*
|
37
|
+
* **Example**:
|
38
|
+
* [[include:doc-pages/inline-examples/image-add-and-lookup.md]]
|
26
39
|
*/
|
27
40
|
export default class EditorImage {
|
28
41
|
private root;
|
@@ -40,10 +53,13 @@ export default class EditorImage {
|
|
40
53
|
/** @internal */
|
41
54
|
renderWithCache(screenRenderer: AbstractRenderer, cache: RenderingCache, viewport: Viewport): void;
|
42
55
|
/**
|
43
|
-
* Renders
|
56
|
+
* Renders this image to the given `renderer`.
|
44
57
|
*
|
45
|
-
* `viewport` is
|
46
|
-
*
|
58
|
+
* If `viewport` is non-null, only components that can be seen from that viewport
|
59
|
+
* will be rendered. If `viewport` is `null`, **all** components are rendered.
|
60
|
+
*
|
61
|
+
* **Example**:
|
62
|
+
* [[include:doc-pages/inline-examples/canvas-renderer.md]]
|
47
63
|
*/
|
48
64
|
render(renderer: AbstractRenderer, viewport: Viewport | null): void;
|
49
65
|
/**
|
@@ -63,14 +79,21 @@ export default class EditorImage {
|
|
63
79
|
*/
|
64
80
|
renderAll(renderer: AbstractRenderer): void;
|
65
81
|
/**
|
66
|
-
* @returns all elements in the image, sorted by z-index
|
82
|
+
* @returns all elements in the image, sorted by z-index (low to high).
|
67
83
|
*
|
68
|
-
*
|
84
|
+
* This can be slow for large images. If you only need all elemenst in part of the image,
|
85
|
+
* consider using {@link getElementsIntersectingRegion} instead.
|
86
|
+
*
|
87
|
+
* **Note**: The result does not include background elements. See {@link getBackgroundComponents}.
|
69
88
|
*/
|
70
89
|
getAllElements(): AbstractComponent[];
|
71
90
|
/** Returns the number of elements added to this image. @internal */
|
72
91
|
estimateNumElements(): number;
|
73
|
-
/**
|
92
|
+
/**
|
93
|
+
* @returns a list of `AbstractComponent`s intersecting `region`, sorted by increasing z-index.
|
94
|
+
*
|
95
|
+
* Components in the background layer are only included if `includeBackground` is `true`.
|
96
|
+
*/
|
74
97
|
getElementsIntersectingRegion(region: Rect2, includeBackground?: boolean): AbstractComponent[];
|
75
98
|
/** Called whenever (just after) an element is completely removed. @internal */
|
76
99
|
onDestroyElement(elem: AbstractComponent): void;
|
@@ -51,7 +51,20 @@ var EditorImageEventType;
|
|
51
51
|
})(EditorImageEventType || (exports.EditorImageEventType = EditorImageEventType = {}));
|
52
52
|
let debugMode = false;
|
53
53
|
/**
|
54
|
-
* Handles lookup/storage of elements in the image.
|
54
|
+
* @summary Handles lookup/storage of elements in the image.
|
55
|
+
*
|
56
|
+
* `js-draw` images are made up of a collection of {@link AbstractComponent}s (which
|
57
|
+
* includes {@link Stroke}s, {@link TextComponent}s, etc.). An `EditorImage`
|
58
|
+
* is the data structure that stores these components.
|
59
|
+
*
|
60
|
+
* Here's how to do a few common operations:
|
61
|
+
* - **Get all components in a {@link @js-draw/math!Rect2 | Rect2}**:
|
62
|
+
* {@link EditorImage.getElementsIntersectingRegion}.
|
63
|
+
* - **Draw an `EditorImage` onto a canvas/SVG**: {@link EditorImage.render}.
|
64
|
+
* - **Adding a new component**: {@link EditorImage.addElement}.
|
65
|
+
*
|
66
|
+
* **Example**:
|
67
|
+
* [[include:doc-pages/inline-examples/image-add-and-lookup.md]]
|
55
68
|
*/
|
56
69
|
class EditorImage {
|
57
70
|
// @internal
|
@@ -110,10 +123,13 @@ class EditorImage {
|
|
110
123
|
}
|
111
124
|
}
|
112
125
|
/**
|
113
|
-
* Renders
|
126
|
+
* Renders this image to the given `renderer`.
|
114
127
|
*
|
115
|
-
* `viewport` is
|
116
|
-
*
|
128
|
+
* If `viewport` is non-null, only components that can be seen from that viewport
|
129
|
+
* will be rendered. If `viewport` is `null`, **all** components are rendered.
|
130
|
+
*
|
131
|
+
* **Example**:
|
132
|
+
* [[include:doc-pages/inline-examples/canvas-renderer.md]]
|
117
133
|
*/
|
118
134
|
render(renderer, viewport) {
|
119
135
|
this.background.render(renderer, viewport?.visibleRect);
|
@@ -144,9 +160,12 @@ class EditorImage {
|
|
144
160
|
this.render(renderer, null);
|
145
161
|
}
|
146
162
|
/**
|
147
|
-
* @returns all elements in the image, sorted by z-index
|
163
|
+
* @returns all elements in the image, sorted by z-index (low to high).
|
148
164
|
*
|
149
|
-
*
|
165
|
+
* This can be slow for large images. If you only need all elemenst in part of the image,
|
166
|
+
* consider using {@link getElementsIntersectingRegion} instead.
|
167
|
+
*
|
168
|
+
* **Note**: The result does not include background elements. See {@link getBackgroundComponents}.
|
150
169
|
*/
|
151
170
|
getAllElements() {
|
152
171
|
const leaves = this.root.getLeaves();
|
@@ -157,7 +176,11 @@ class EditorImage {
|
|
157
176
|
estimateNumElements() {
|
158
177
|
return this.componentCount;
|
159
178
|
}
|
160
|
-
/**
|
179
|
+
/**
|
180
|
+
* @returns a list of `AbstractComponent`s intersecting `region`, sorted by increasing z-index.
|
181
|
+
*
|
182
|
+
* Components in the background layer are only included if `includeBackground` is `true`.
|
183
|
+
*/
|
161
184
|
getElementsIntersectingRegion(region, includeBackground = false) {
|
162
185
|
let leaves = this.root.getLeavesIntersectingRegion(region);
|
163
186
|
if (includeBackground) {
|
@@ -7,31 +7,8 @@ import RenderablePathSpec from '../RenderablePathSpec';
|
|
7
7
|
/**
|
8
8
|
* Renders onto a `CanvasRenderingContext2D`.
|
9
9
|
*
|
10
|
-
*
|
11
|
-
*
|
12
|
-
* import {Editor,CanvasRenderer} from 'js-draw';
|
13
|
-
*
|
14
|
-
* // Create an editor and load initial data -- don't add to the body (hidden editor).
|
15
|
-
* const editor = new Editor(document.createElement('div'));
|
16
|
-
* await editor.loadFromSVG('<svg><path d="m0,0 l100,5 l-50,60 l30,20 z" fill="green"/></svg>');
|
17
|
-
* ---visible---
|
18
|
-
* // Given some editor.
|
19
|
-
* // Set up the canvas to be drawn onto.
|
20
|
-
* const canvas = document.createElement('canvas');
|
21
|
-
* const ctx = canvas.getContext('2d');
|
22
|
-
*
|
23
|
-
* // Ensure that the canvas can fit the entire rendering
|
24
|
-
* const viewport = editor.image.getImportExportViewport();
|
25
|
-
* canvas.width = viewport.getScreenRectSize().x;
|
26
|
-
* canvas.height = viewport.getScreenRectSize().y;
|
27
|
-
*
|
28
|
-
* // Render editor.image onto the renderer
|
29
|
-
* const renderer = new CanvasRenderer(ctx, viewport);
|
30
|
-
* editor.image.render(renderer, viewport);
|
31
|
-
*
|
32
|
-
* // Add the rendered canvas to the document.
|
33
|
-
* document.body.appendChild(canvas);
|
34
|
-
* ```
|
10
|
+
* **Example**:
|
11
|
+
* [[include:doc-pages/inline-examples/canvas-renderer.md]]
|
35
12
|
*/
|
36
13
|
export default class CanvasRenderer extends AbstractRenderer {
|
37
14
|
private ctx;
|
@@ -10,31 +10,8 @@ const RenderablePathSpec_1 = require("../RenderablePathSpec");
|
|
10
10
|
/**
|
11
11
|
* Renders onto a `CanvasRenderingContext2D`.
|
12
12
|
*
|
13
|
-
*
|
14
|
-
*
|
15
|
-
* import {Editor,CanvasRenderer} from 'js-draw';
|
16
|
-
*
|
17
|
-
* // Create an editor and load initial data -- don't add to the body (hidden editor).
|
18
|
-
* const editor = new Editor(document.createElement('div'));
|
19
|
-
* await editor.loadFromSVG('<svg><path d="m0,0 l100,5 l-50,60 l30,20 z" fill="green"/></svg>');
|
20
|
-
* ---visible---
|
21
|
-
* // Given some editor.
|
22
|
-
* // Set up the canvas to be drawn onto.
|
23
|
-
* const canvas = document.createElement('canvas');
|
24
|
-
* const ctx = canvas.getContext('2d');
|
25
|
-
*
|
26
|
-
* // Ensure that the canvas can fit the entire rendering
|
27
|
-
* const viewport = editor.image.getImportExportViewport();
|
28
|
-
* canvas.width = viewport.getScreenRectSize().x;
|
29
|
-
* canvas.height = viewport.getScreenRectSize().y;
|
30
|
-
*
|
31
|
-
* // Render editor.image onto the renderer
|
32
|
-
* const renderer = new CanvasRenderer(ctx, viewport);
|
33
|
-
* editor.image.render(renderer, viewport);
|
34
|
-
*
|
35
|
-
* // Add the rendered canvas to the document.
|
36
|
-
* document.body.appendChild(canvas);
|
37
|
-
* ```
|
13
|
+
* **Example**:
|
14
|
+
* [[include:doc-pages/inline-examples/canvas-renderer.md]]
|
38
15
|
*/
|
39
16
|
class CanvasRenderer extends AbstractRenderer_1.default {
|
40
17
|
/**
|
@@ -49,7 +49,7 @@ class SVGRenderer extends AbstractRenderer_1.default {
|
|
49
49
|
if (!this.elem.querySelector(`#${exports.renderedStylesheetId}`)) {
|
50
50
|
// Default to rounded strokes.
|
51
51
|
const styleSheet = document.createElementNS('http://www.w3.org/2000/svg', 'style');
|
52
|
-
styleSheet.
|
52
|
+
styleSheet.appendChild(document.createTextNode(`
|
53
53
|
path {
|
54
54
|
stroke-linecap: round;
|
55
55
|
stroke-linejoin: round;
|
@@ -58,7 +58,7 @@ class SVGRenderer extends AbstractRenderer_1.default {
|
|
58
58
|
text {
|
59
59
|
white-space: pre;
|
60
60
|
}
|
61
|
-
`.replace(/\s+/g, '');
|
61
|
+
`.replace(/\s+/g, '')));
|
62
62
|
styleSheet.setAttribute('id', exports.renderedStylesheetId);
|
63
63
|
this.elem.appendChild(styleSheet);
|
64
64
|
}
|
@@ -110,6 +110,25 @@ export default abstract class AbstractToolbar {
|
|
110
110
|
* as being the value of `mustBeToplevel`.
|
111
111
|
*
|
112
112
|
* @return The added button.
|
113
|
+
*
|
114
|
+
* **Example**:
|
115
|
+
* ```ts,runnable
|
116
|
+
* import { Editor } from 'js-draw';
|
117
|
+
* const editor = new Editor(document.body);
|
118
|
+
* const toolbar = editor.addToolbar();
|
119
|
+
*
|
120
|
+
* function makeTrashIcon() {
|
121
|
+
* const container = document.createElement('div');
|
122
|
+
* container.textContent = '🗑️';
|
123
|
+
* return container;
|
124
|
+
* }
|
125
|
+
*
|
126
|
+
* toolbar.addActionButton({
|
127
|
+
* icon: makeTrashIcon(), // can be any Element not in the DOM
|
128
|
+
* label: 'Delete all',
|
129
|
+
* }, () => {
|
130
|
+
* alert('to-do!');
|
131
|
+
* });
|
113
132
|
*/
|
114
133
|
addActionButton(title: string | ActionButtonIcon, command: () => void, options?: ToolbarActionButtonOptions | boolean): BaseWidget;
|
115
134
|
/**
|
@@ -269,6 +269,25 @@ class AbstractToolbar {
|
|
269
269
|
* as being the value of `mustBeToplevel`.
|
270
270
|
*
|
271
271
|
* @return The added button.
|
272
|
+
*
|
273
|
+
* **Example**:
|
274
|
+
* ```ts,runnable
|
275
|
+
* import { Editor } from 'js-draw';
|
276
|
+
* const editor = new Editor(document.body);
|
277
|
+
* const toolbar = editor.addToolbar();
|
278
|
+
*
|
279
|
+
* function makeTrashIcon() {
|
280
|
+
* const container = document.createElement('div');
|
281
|
+
* container.textContent = '🗑️';
|
282
|
+
* return container;
|
283
|
+
* }
|
284
|
+
*
|
285
|
+
* toolbar.addActionButton({
|
286
|
+
* icon: makeTrashIcon(), // can be any Element not in the DOM
|
287
|
+
* label: 'Delete all',
|
288
|
+
* }, () => {
|
289
|
+
* alert('to-do!');
|
290
|
+
* });
|
272
291
|
*/
|
273
292
|
addActionButton(title, command, options = true) {
|
274
293
|
const widget = this.makeActionButton(title, command, options);
|
@@ -80,9 +80,13 @@ export default class IconProvider {
|
|
80
80
|
* @returns An object with both the definition of a checkerboard pattern and the syntax to
|
81
81
|
* reference that pattern. The defs provided by this function should be wrapped within a
|
82
82
|
* `<defs></defs>` element.
|
83
|
+
*
|
84
|
+
* **Note**: This function's return value includes both `patternDefElement` (which returns
|
85
|
+
* an Element) and a (deprecated) `patternDef` string. Avoid using the `patternDef` result.
|
83
86
|
*/
|
84
87
|
protected makeCheckerboardPattern(): {
|
85
|
-
|
88
|
+
patternDefElement: SVGElement;
|
89
|
+
readonly patternDef: string;
|
86
90
|
patternRef: string;
|
87
91
|
};
|
88
92
|
/**
|