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.
Files changed (227) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/bundle.js +2 -2
  3. package/dist/bundledStyles.js +1 -0
  4. package/dist/cjs/src/Color4.d.ts +8 -0
  5. package/dist/cjs/src/Color4.js +67 -0
  6. package/dist/cjs/src/Editor.d.ts +2 -2
  7. package/dist/cjs/src/Editor.js +2 -2
  8. package/dist/cjs/src/SVGLoader.js +8 -5
  9. package/dist/cjs/src/components/AbstractComponent.d.ts +2 -2
  10. package/dist/cjs/src/components/AbstractComponent.js +3 -3
  11. package/dist/cjs/src/components/ImageBackground.js +1 -1
  12. package/dist/cjs/src/components/RestylableComponent.d.ts +21 -2
  13. package/dist/cjs/src/components/Stroke.d.ts +35 -0
  14. package/dist/cjs/src/components/Stroke.js +36 -2
  15. package/dist/cjs/src/components/TextComponent.d.ts +26 -4
  16. package/dist/cjs/src/components/TextComponent.js +22 -0
  17. package/dist/cjs/src/components/lib.d.ts +3 -2
  18. package/dist/cjs/src/lib.d.ts +30 -0
  19. package/dist/cjs/src/lib.js +30 -0
  20. package/dist/cjs/src/rendering/RenderingStyle.d.ts +4 -4
  21. package/dist/cjs/src/rendering/TextRenderingStyle.d.ts +10 -10
  22. package/dist/cjs/src/rendering/lib.d.ts +2 -0
  23. package/dist/cjs/src/rendering/renderers/AbstractRenderer.d.ts +2 -2
  24. package/dist/cjs/src/rendering/renderers/CanvasRenderer.d.ts +2 -2
  25. package/dist/cjs/src/rendering/renderers/DummyRenderer.d.ts +2 -2
  26. package/dist/cjs/src/rendering/renderers/SVGRenderer.d.ts +2 -2
  27. package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.d.ts +2 -2
  28. package/dist/cjs/src/toolbar/IconProvider.d.ts +2 -2
  29. package/dist/cjs/src/toolbar/localization.js +1 -1
  30. package/dist/cjs/src/toolbar/widgets/BaseWidget.js +1 -1
  31. package/dist/cjs/src/tools/SoundUITool.d.ts +24 -0
  32. package/dist/cjs/src/tools/SoundUITool.js +164 -0
  33. package/dist/cjs/src/tools/TextTool.d.ts +2 -2
  34. package/dist/cjs/src/tools/ToolController.js +6 -1
  35. package/dist/cjs/src/tools/lib.d.ts +1 -0
  36. package/dist/cjs/src/tools/lib.js +3 -1
  37. package/dist/cjs/src/tools/localization.d.ts +3 -0
  38. package/dist/cjs/src/tools/localization.js +3 -0
  39. package/dist/mjs/src/Color4.d.ts +8 -0
  40. package/dist/mjs/src/Color4.mjs +64 -0
  41. package/dist/mjs/src/Editor.d.ts +2 -2
  42. package/dist/mjs/src/Editor.mjs +2 -2
  43. package/dist/mjs/src/SVGLoader.mjs +8 -5
  44. package/dist/mjs/src/components/AbstractComponent.d.ts +2 -2
  45. package/dist/mjs/src/components/AbstractComponent.mjs +3 -3
  46. package/dist/mjs/src/components/ImageBackground.mjs +1 -1
  47. package/dist/mjs/src/components/RestylableComponent.d.ts +21 -2
  48. package/dist/mjs/src/components/Stroke.d.ts +35 -0
  49. package/dist/mjs/src/components/Stroke.mjs +36 -2
  50. package/dist/mjs/src/components/TextComponent.d.ts +26 -4
  51. package/dist/mjs/src/components/TextComponent.mjs +22 -0
  52. package/dist/mjs/src/components/lib.d.ts +3 -2
  53. package/dist/mjs/src/lib.d.ts +30 -0
  54. package/dist/mjs/src/lib.mjs +30 -0
  55. package/dist/mjs/src/rendering/RenderingStyle.d.ts +4 -4
  56. package/dist/mjs/src/rendering/TextRenderingStyle.d.ts +10 -10
  57. package/dist/mjs/src/rendering/lib.d.ts +2 -0
  58. package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +2 -2
  59. package/dist/mjs/src/rendering/renderers/CanvasRenderer.d.ts +2 -2
  60. package/dist/mjs/src/rendering/renderers/DummyRenderer.d.ts +2 -2
  61. package/dist/mjs/src/rendering/renderers/SVGRenderer.d.ts +2 -2
  62. package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.d.ts +2 -2
  63. package/dist/mjs/src/toolbar/IconProvider.d.ts +2 -2
  64. package/dist/mjs/src/toolbar/localization.mjs +1 -1
  65. package/dist/mjs/src/toolbar/widgets/BaseWidget.mjs +1 -1
  66. package/dist/mjs/src/tools/SoundUITool.d.ts +24 -0
  67. package/dist/mjs/src/tools/SoundUITool.mjs +158 -0
  68. package/dist/mjs/src/tools/TextTool.d.ts +2 -2
  69. package/dist/mjs/src/tools/ToolController.mjs +6 -1
  70. package/dist/mjs/src/tools/lib.d.ts +1 -0
  71. package/dist/mjs/src/tools/lib.mjs +1 -0
  72. package/dist/mjs/src/tools/localization.d.ts +3 -0
  73. package/dist/mjs/src/tools/localization.mjs +3 -0
  74. package/package.json +6 -4
  75. package/src/Editor.css +2 -2
  76. package/src/tools/SoundUITool.css +15 -0
  77. package/src/tools/tools.css +4 -0
  78. package/src/Color4.test.ts +0 -40
  79. package/src/Color4.ts +0 -236
  80. package/src/Editor.loadFrom.test.ts +0 -24
  81. package/src/Editor.toSVG.test.ts +0 -111
  82. package/src/Editor.ts +0 -1122
  83. package/src/EditorImage.test.ts +0 -120
  84. package/src/EditorImage.ts +0 -603
  85. package/src/EventDispatcher.test.ts +0 -123
  86. package/src/EventDispatcher.ts +0 -71
  87. package/src/Pointer.ts +0 -127
  88. package/src/SVGLoader.test.ts +0 -114
  89. package/src/SVGLoader.ts +0 -511
  90. package/src/UndoRedoHistory.test.ts +0 -33
  91. package/src/UndoRedoHistory.ts +0 -102
  92. package/src/Viewport.ts +0 -319
  93. package/src/bundle/bundled.ts +0 -7
  94. package/src/commands/Command.ts +0 -45
  95. package/src/commands/Duplicate.ts +0 -48
  96. package/src/commands/Erase.ts +0 -74
  97. package/src/commands/SerializableCommand.ts +0 -49
  98. package/src/commands/UnresolvedCommand.ts +0 -37
  99. package/src/commands/invertCommand.ts +0 -51
  100. package/src/commands/lib.ts +0 -16
  101. package/src/commands/localization.ts +0 -47
  102. package/src/commands/uniteCommands.test.ts +0 -23
  103. package/src/commands/uniteCommands.ts +0 -135
  104. package/src/components/AbstractComponent.transformBy.test.ts +0 -22
  105. package/src/components/AbstractComponent.ts +0 -364
  106. package/src/components/ImageBackground.test.ts +0 -35
  107. package/src/components/ImageBackground.ts +0 -176
  108. package/src/components/ImageComponent.ts +0 -171
  109. package/src/components/RestylableComponent.ts +0 -142
  110. package/src/components/SVGGlobalAttributesObject.ts +0 -81
  111. package/src/components/Stroke.test.ts +0 -139
  112. package/src/components/Stroke.ts +0 -245
  113. package/src/components/TextComponent.test.ts +0 -99
  114. package/src/components/TextComponent.ts +0 -315
  115. package/src/components/UnknownSVGObject.test.ts +0 -10
  116. package/src/components/UnknownSVGObject.ts +0 -60
  117. package/src/components/builders/ArrowBuilder.ts +0 -107
  118. package/src/components/builders/FreehandLineBuilder.ts +0 -212
  119. package/src/components/builders/LineBuilder.ts +0 -77
  120. package/src/components/builders/PressureSensitiveFreehandLineBuilder.ts +0 -454
  121. package/src/components/builders/RectangleBuilder.ts +0 -74
  122. package/src/components/builders/types.ts +0 -15
  123. package/src/components/lib.ts +0 -25
  124. package/src/components/localization.ts +0 -22
  125. package/src/components/util/StrokeSmoother.ts +0 -293
  126. package/src/components/util/describeComponentList.ts +0 -18
  127. package/src/lib.ts +0 -37
  128. package/src/localization.ts +0 -34
  129. package/src/localizations/de.ts +0 -98
  130. package/src/localizations/en.ts +0 -8
  131. package/src/localizations/es.ts +0 -74
  132. package/src/localizations/getLocalizationTable.test.ts +0 -27
  133. package/src/localizations/getLocalizationTable.ts +0 -55
  134. package/src/math/LineSegment2.test.ts +0 -99
  135. package/src/math/LineSegment2.ts +0 -160
  136. package/src/math/Mat33.test.ts +0 -244
  137. package/src/math/Mat33.ts +0 -437
  138. package/src/math/Path.fromString.test.ts +0 -223
  139. package/src/math/Path.test.ts +0 -198
  140. package/src/math/Path.toString.test.ts +0 -77
  141. package/src/math/Path.ts +0 -790
  142. package/src/math/Rect2.test.ts +0 -204
  143. package/src/math/Rect2.ts +0 -315
  144. package/src/math/Triangle.ts +0 -29
  145. package/src/math/Vec2.test.ts +0 -30
  146. package/src/math/Vec2.ts +0 -18
  147. package/src/math/Vec3.test.ts +0 -44
  148. package/src/math/Vec3.ts +0 -218
  149. package/src/math/lib.ts +0 -15
  150. package/src/math/rounding.test.ts +0 -65
  151. package/src/math/rounding.ts +0 -156
  152. package/src/rendering/Display.ts +0 -249
  153. package/src/rendering/RenderingStyle.test.ts +0 -68
  154. package/src/rendering/RenderingStyle.ts +0 -55
  155. package/src/rendering/TextRenderingStyle.ts +0 -45
  156. package/src/rendering/caching/CacheRecord.test.ts +0 -49
  157. package/src/rendering/caching/CacheRecord.ts +0 -77
  158. package/src/rendering/caching/CacheRecordManager.ts +0 -71
  159. package/src/rendering/caching/RenderingCache.test.ts +0 -44
  160. package/src/rendering/caching/RenderingCache.ts +0 -66
  161. package/src/rendering/caching/RenderingCacheNode.ts +0 -405
  162. package/src/rendering/caching/testUtils.ts +0 -35
  163. package/src/rendering/caching/types.ts +0 -34
  164. package/src/rendering/lib.ts +0 -6
  165. package/src/rendering/localization.ts +0 -20
  166. package/src/rendering/renderers/AbstractRenderer.ts +0 -222
  167. package/src/rendering/renderers/CanvasRenderer.ts +0 -296
  168. package/src/rendering/renderers/DummyRenderer.test.ts +0 -42
  169. package/src/rendering/renderers/DummyRenderer.ts +0 -136
  170. package/src/rendering/renderers/SVGRenderer.ts +0 -354
  171. package/src/rendering/renderers/TextOnlyRenderer.ts +0 -70
  172. package/src/testing/beforeEachFile.ts +0 -8
  173. package/src/testing/createEditor.ts +0 -11
  174. package/src/testing/global.d.ts +0 -17
  175. package/src/testing/lib.ts +0 -3
  176. package/src/testing/loadExpectExtensions.ts +0 -25
  177. package/src/testing/sendPenEvent.ts +0 -31
  178. package/src/testing/sendTouchEvent.ts +0 -78
  179. package/src/toolbar/HTMLToolbar.ts +0 -492
  180. package/src/toolbar/IconProvider.ts +0 -736
  181. package/src/toolbar/lib.ts +0 -4
  182. package/src/toolbar/localization.ts +0 -106
  183. package/src/toolbar/makeColorInput.ts +0 -145
  184. package/src/toolbar/types.ts +0 -5
  185. package/src/toolbar/widgets/ActionButtonWidget.ts +0 -39
  186. package/src/toolbar/widgets/BaseToolWidget.ts +0 -56
  187. package/src/toolbar/widgets/BaseWidget.ts +0 -377
  188. package/src/toolbar/widgets/DocumentPropertiesWidget.ts +0 -167
  189. package/src/toolbar/widgets/EraserToolWidget.ts +0 -85
  190. package/src/toolbar/widgets/HandToolWidget.ts +0 -250
  191. package/src/toolbar/widgets/InsertImageWidget.ts +0 -223
  192. package/src/toolbar/widgets/OverflowWidget.ts +0 -92
  193. package/src/toolbar/widgets/PenToolWidget.ts +0 -288
  194. package/src/toolbar/widgets/SelectionToolWidget.ts +0 -190
  195. package/src/toolbar/widgets/TextToolWidget.ts +0 -145
  196. package/src/toolbar/widgets/lib.ts +0 -13
  197. package/src/tools/BaseTool.ts +0 -76
  198. package/src/tools/Eraser.test.ts +0 -103
  199. package/src/tools/Eraser.ts +0 -139
  200. package/src/tools/FindTool.ts +0 -152
  201. package/src/tools/PanZoom.test.ts +0 -310
  202. package/src/tools/PanZoom.ts +0 -520
  203. package/src/tools/PasteHandler.ts +0 -95
  204. package/src/tools/Pen.test.ts +0 -194
  205. package/src/tools/Pen.ts +0 -226
  206. package/src/tools/PipetteTool.ts +0 -55
  207. package/src/tools/SelectionTool/SelectAllShortcutHandler.ts +0 -28
  208. package/src/tools/SelectionTool/Selection.ts +0 -607
  209. package/src/tools/SelectionTool/SelectionHandle.ts +0 -108
  210. package/src/tools/SelectionTool/SelectionTool.test.ts +0 -261
  211. package/src/tools/SelectionTool/SelectionTool.ts +0 -480
  212. package/src/tools/SelectionTool/TransformMode.ts +0 -114
  213. package/src/tools/SelectionTool/types.ts +0 -11
  214. package/src/tools/TextTool.ts +0 -326
  215. package/src/tools/ToolController.ts +0 -178
  216. package/src/tools/ToolEnabledGroup.ts +0 -14
  217. package/src/tools/ToolSwitcherShortcut.ts +0 -39
  218. package/src/tools/ToolbarShortcutHandler.ts +0 -34
  219. package/src/tools/UndoRedoShortcut.test.ts +0 -56
  220. package/src/tools/UndoRedoShortcut.ts +0 -25
  221. package/src/tools/lib.ts +0 -21
  222. package/src/tools/localization.ts +0 -66
  223. package/src/types.ts +0 -234
  224. package/src/util/assertions.ts +0 -55
  225. package/src/util/fileToBase64.ts +0 -18
  226. package/src/util/untilNextAnimationFrame.ts +0 -9
  227. 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 lib!EditorImage.lookupElement }
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 a {@link ImageLoader}.
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 an image in the editor.
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 TextStyle from '../rendering/TextRenderingStyle';
4
+ import TextRenderingStyle from '../rendering/TextRenderingStyle';
5
5
  import AbstractComponent from './AbstractComponent';
6
6
  export interface ComponentStyle {
7
7
  color?: Color4;
8
- textStyle?: 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
- // Creates a `Stroke` from the given `parts`. All parts should have the
8
- // same color.
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 { TextStyle } from '../rendering/TextRenderingStyle';
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
- constructor(textObjects: Array<string | TextComponent>, transform: Mat33, style: TextStyle);
18
- static applyTextStyles(ctx: CanvasRenderingContext2D, style: TextStyle): void;
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
- static fromLines(lines: string[], transform: Mat33, style: TextStyle): AbstractComponent;
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, { createRestyleComponentCommand, isRestylableComponent } from './RestylableComponent';
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, };
@@ -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
  */
@@ -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 TextStyle {
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 TextStyle;
10
- export declare const cloneTextStyle: (style: TextStyle) => {
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) => TextStyle;
24
- export declare const textStyleToJSON: (style: TextStyle) => {
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 TextStyle from '../TextRenderingStyle';
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: TextStyle): void;
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 TextStyle from '../TextRenderingStyle';
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: TextStyle): void;
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 TextStyle from '../TextRenderingStyle';
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: TextStyle): void;
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 TextStyle from '../TextRenderingStyle';
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: TextStyle): void;
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 TextStyle from '../TextRenderingStyle';
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: TextStyle): void;
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 TextStyle from '../rendering/TextRenderingStyle';
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: TextStyle): IconType;
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: 'Document',
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 lib!Editor.toolController} to have an enabled {@link lib!ToolbarShortcutHandler} tool.
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
+ }