js-draw 1.22.0 → 1.24.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. package/README.md +1 -1
  2. package/dist/Editor.css +21 -0
  3. package/dist/bundle.js +2 -2
  4. package/dist/bundledStyles.js +1 -1
  5. package/dist/cjs/Editor.d.ts +8 -4
  6. package/dist/cjs/Editor.js +73 -13
  7. package/dist/cjs/SVGLoader/SVGLoader.js +19 -7
  8. package/dist/cjs/Viewport.d.ts +3 -1
  9. package/dist/cjs/Viewport.js +1 -2
  10. package/dist/cjs/components/AbstractComponent.d.ts +2 -2
  11. package/dist/cjs/components/AbstractComponent.js +1 -1
  12. package/dist/cjs/components/BackgroundComponent.js +17 -7
  13. package/dist/cjs/components/SVGGlobalAttributesObject.js +17 -7
  14. package/dist/cjs/components/UnknownSVGObject.js +17 -7
  15. package/dist/cjs/components/builders/ArrowBuilder.d.ts +1 -1
  16. package/dist/cjs/components/builders/ArrowBuilder.js +1 -1
  17. package/dist/cjs/components/lib.js +17 -7
  18. package/dist/cjs/image/EditorImage.d.ts +30 -7
  19. package/dist/cjs/image/EditorImage.js +47 -14
  20. package/dist/cjs/rendering/renderers/CanvasRenderer.d.ts +2 -25
  21. package/dist/cjs/rendering/renderers/CanvasRenderer.js +2 -25
  22. package/dist/cjs/rendering/renderers/SVGRenderer.js +2 -2
  23. package/dist/cjs/testing/sendPenEvent.js +17 -7
  24. package/dist/cjs/testing/sendTouchEvent.js +17 -7
  25. package/dist/cjs/toolbar/AbstractToolbar.d.ts +19 -0
  26. package/dist/cjs/toolbar/AbstractToolbar.js +19 -0
  27. package/dist/cjs/toolbar/EdgeToolbar.d.ts +1 -1
  28. package/dist/cjs/toolbar/IconProvider.d.ts +5 -1
  29. package/dist/cjs/toolbar/IconProvider.js +112 -146
  30. package/dist/cjs/toolbar/localization.js +2 -2
  31. package/dist/cjs/toolbar/widgets/BaseWidget.d.ts +1 -1
  32. package/dist/cjs/toolbar/widgets/BaseWidget.js +1 -1
  33. package/dist/cjs/toolbar/widgets/DocumentPropertiesWidget.js +17 -7
  34. package/dist/cjs/toolbar/widgets/HandToolWidget.js +17 -7
  35. package/dist/cjs/tools/InputFilter/ContextMenuRecognizer.js +17 -7
  36. package/dist/cjs/tools/PanZoom.js +1 -1
  37. package/dist/cjs/tools/Pen.d.ts +13 -0
  38. package/dist/cjs/tools/Pen.js +30 -7
  39. package/dist/cjs/tools/SelectionTool/Selection.js +17 -7
  40. package/dist/cjs/tools/SelectionTool/SelectionMenuShortcut.js +1 -1
  41. package/dist/cjs/tools/SelectionTool/util/makeClipboardErrorHandlers.d.ts +2 -2
  42. package/dist/cjs/tools/SelectionTool/util/makeClipboardErrorHandlers.js +1 -1
  43. package/dist/cjs/tools/SoundUITool.js +1 -1
  44. package/dist/cjs/tools/TextTool.d.ts +4 -4
  45. package/dist/cjs/tools/TextTool.js +45 -51
  46. package/dist/cjs/tools/ToolController.js +17 -7
  47. package/dist/cjs/tools/UndoRedoShortcut.js +2 -2
  48. package/dist/cjs/tools/lib.d.ts +1 -0
  49. package/dist/cjs/tools/lib.js +3 -1
  50. package/dist/cjs/util/ClipboardHandler.js +1 -0
  51. package/dist/cjs/util/cloneElementWithStyles.js +1 -1
  52. package/dist/cjs/util/createElement.d.ts +62 -0
  53. package/dist/cjs/util/createElement.js +53 -0
  54. package/dist/cjs/version.js +1 -1
  55. package/dist/mjs/Editor.d.ts +8 -4
  56. package/dist/mjs/Editor.mjs +56 -6
  57. package/dist/mjs/SVGLoader/SVGLoader.mjs +2 -0
  58. package/dist/mjs/Viewport.d.ts +3 -1
  59. package/dist/mjs/Viewport.mjs +1 -2
  60. package/dist/mjs/components/AbstractComponent.d.ts +2 -2
  61. package/dist/mjs/components/AbstractComponent.mjs +1 -1
  62. package/dist/mjs/components/builders/ArrowBuilder.d.ts +1 -1
  63. package/dist/mjs/components/builders/ArrowBuilder.mjs +1 -1
  64. package/dist/mjs/image/EditorImage.d.ts +30 -7
  65. package/dist/mjs/image/EditorImage.mjs +30 -7
  66. package/dist/mjs/rendering/renderers/CanvasRenderer.d.ts +2 -25
  67. package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +2 -25
  68. package/dist/mjs/rendering/renderers/SVGRenderer.mjs +2 -2
  69. package/dist/mjs/toolbar/AbstractToolbar.d.ts +19 -0
  70. package/dist/mjs/toolbar/AbstractToolbar.mjs +19 -0
  71. package/dist/mjs/toolbar/EdgeToolbar.d.ts +1 -1
  72. package/dist/mjs/toolbar/IconProvider.d.ts +5 -1
  73. package/dist/mjs/toolbar/IconProvider.mjs +112 -146
  74. package/dist/mjs/toolbar/localization.mjs +2 -2
  75. package/dist/mjs/toolbar/widgets/BaseWidget.d.ts +1 -1
  76. package/dist/mjs/toolbar/widgets/BaseWidget.mjs +1 -1
  77. package/dist/mjs/tools/PanZoom.mjs +1 -1
  78. package/dist/mjs/tools/Pen.d.ts +13 -0
  79. package/dist/mjs/tools/Pen.mjs +13 -0
  80. package/dist/mjs/tools/SelectionTool/SelectionMenuShortcut.mjs +1 -1
  81. package/dist/mjs/tools/SelectionTool/util/makeClipboardErrorHandlers.d.ts +2 -2
  82. package/dist/mjs/tools/SelectionTool/util/makeClipboardErrorHandlers.mjs +1 -1
  83. package/dist/mjs/tools/SoundUITool.mjs +1 -1
  84. package/dist/mjs/tools/TextTool.d.ts +4 -4
  85. package/dist/mjs/tools/TextTool.mjs +45 -51
  86. package/dist/mjs/tools/UndoRedoShortcut.mjs +2 -2
  87. package/dist/mjs/tools/lib.d.ts +1 -0
  88. package/dist/mjs/tools/lib.mjs +1 -0
  89. package/dist/mjs/util/ClipboardHandler.mjs +1 -0
  90. package/dist/mjs/util/cloneElementWithStyles.mjs +1 -1
  91. package/dist/mjs/util/createElement.d.ts +62 -0
  92. package/dist/mjs/util/createElement.mjs +47 -0
  93. package/dist/mjs/version.mjs +1 -1
  94. package/package.json +4 -4
  95. package/src/Editor.scss +31 -0
@@ -20,13 +20,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
20
20
  }) : function(o, v) {
21
21
  o["default"] = v;
22
22
  });
23
- var __importStar = (this && this.__importStar) || function (mod) {
24
- if (mod && mod.__esModule) return mod;
25
- var result = {};
26
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
27
- __setModuleDefault(result, mod);
28
- return result;
29
- };
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
30
40
  var __importDefault = (this && this.__importDefault) || function (mod) {
31
41
  return (mod && mod.__esModule) ? mod : { "default": mod };
32
42
  };
@@ -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 circles.
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 circles.
11
+ * Creates a stroke builder that generates arrows.
12
12
  *
13
13
  * Example:
14
14
  * [[include:doc-pages/inline-examples/changing-pen-types.md]]
@@ -18,13 +18,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
18
18
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
19
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
20
  };
21
- var __importStar = (this && this.__importStar) || function (mod) {
22
- if (mod && mod.__esModule) return mod;
23
- var result = {};
24
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
- __setModuleDefault(result, mod);
26
- return result;
27
- };
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
28
38
  var __importDefault = (this && this.__importDefault) || function (mod) {
29
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
30
40
  };
@@ -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 all nodes visible from `viewport` (or all nodes if `viewport = null`).
56
+ * Renders this image to the given `renderer`.
44
57
  *
45
- * `viewport` is used to improve rendering performance. If given, it must match
46
- * the viewport used by the `renderer` (if any).
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. This can be slow for large images.
82
+ * @returns all elements in the image, sorted by z-index (low to high).
67
83
  *
68
- * Does not include background elements. See {@link getBackgroundComponents}.
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
- /** @returns a list of `AbstractComponent`s intersecting `region`, sorted by z-index. */
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;
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
26
36
  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
27
37
  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
@@ -51,7 +61,20 @@ var EditorImageEventType;
51
61
  })(EditorImageEventType || (exports.EditorImageEventType = EditorImageEventType = {}));
52
62
  let debugMode = false;
53
63
  /**
54
- * Handles lookup/storage of elements in the image.
64
+ * @summary Handles lookup/storage of elements in the image.
65
+ *
66
+ * `js-draw` images are made up of a collection of {@link AbstractComponent}s (which
67
+ * includes {@link Stroke}s, {@link TextComponent}s, etc.). An `EditorImage`
68
+ * is the data structure that stores these components.
69
+ *
70
+ * Here's how to do a few common operations:
71
+ * - **Get all components in a {@link @js-draw/math!Rect2 | Rect2}**:
72
+ * {@link EditorImage.getElementsIntersectingRegion}.
73
+ * - **Draw an `EditorImage` onto a canvas/SVG**: {@link EditorImage.render}.
74
+ * - **Adding a new component**: {@link EditorImage.addElement}.
75
+ *
76
+ * **Example**:
77
+ * [[include:doc-pages/inline-examples/image-add-and-lookup.md]]
55
78
  */
56
79
  class EditorImage {
57
80
  // @internal
@@ -110,10 +133,13 @@ class EditorImage {
110
133
  }
111
134
  }
112
135
  /**
113
- * Renders all nodes visible from `viewport` (or all nodes if `viewport = null`).
136
+ * Renders this image to the given `renderer`.
114
137
  *
115
- * `viewport` is used to improve rendering performance. If given, it must match
116
- * the viewport used by the `renderer` (if any).
138
+ * If `viewport` is non-null, only components that can be seen from that viewport
139
+ * will be rendered. If `viewport` is `null`, **all** components are rendered.
140
+ *
141
+ * **Example**:
142
+ * [[include:doc-pages/inline-examples/canvas-renderer.md]]
117
143
  */
118
144
  render(renderer, viewport) {
119
145
  this.background.render(renderer, viewport?.visibleRect);
@@ -144,9 +170,12 @@ class EditorImage {
144
170
  this.render(renderer, null);
145
171
  }
146
172
  /**
147
- * @returns all elements in the image, sorted by z-index. This can be slow for large images.
173
+ * @returns all elements in the image, sorted by z-index (low to high).
174
+ *
175
+ * This can be slow for large images. If you only need all elemenst in part of the image,
176
+ * consider using {@link getElementsIntersectingRegion} instead.
148
177
  *
149
- * Does not include background elements. See {@link getBackgroundComponents}.
178
+ * **Note**: The result does not include background elements. See {@link getBackgroundComponents}.
150
179
  */
151
180
  getAllElements() {
152
181
  const leaves = this.root.getLeaves();
@@ -157,7 +186,11 @@ class EditorImage {
157
186
  estimateNumElements() {
158
187
  return this.componentCount;
159
188
  }
160
- /** @returns a list of `AbstractComponent`s intersecting `region`, sorted by z-index. */
189
+ /**
190
+ * @returns a list of `AbstractComponent`s intersecting `region`, sorted by increasing z-index.
191
+ *
192
+ * Components in the background layer are only included if `includeBackground` is `true`.
193
+ */
161
194
  getElementsIntersectingRegion(region, includeBackground = false) {
162
195
  let leaves = this.root.getLeavesIntersectingRegion(region);
163
196
  if (includeBackground) {
@@ -7,31 +7,8 @@ import RenderablePathSpec from '../RenderablePathSpec';
7
7
  /**
8
8
  * Renders onto a `CanvasRenderingContext2D`.
9
9
  *
10
- * @example
11
- * ```ts,runnable
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
- * @example
14
- * ```ts,runnable
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.innerHTML = `
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
  }
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
@@ -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);
@@ -49,7 +49,7 @@ export default class EdgeToolbar extends AbstractToolbar {
49
49
  constructor(editor: Editor, parent: HTMLElement, localizationTable: ToolbarLocalization);
50
50
  private listenForVisibilityChanges;
51
51
  private onToolbarRowResize;
52
- addSpacer(_options?: Partial<SpacerOptions> | undefined): void;
52
+ addSpacer(_options?: Partial<SpacerOptions>): void;
53
53
  addUndoRedoButtons(): void;
54
54
  addDefaults(): void;
55
55
  private updateWidgetCSSClasses;
@@ -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
- patternDef: string;
88
+ patternDefElement: SVGElement;
89
+ readonly patternDef: string;
86
90
  patternRef: string;
87
91
  };
88
92
  /**