js-draw 0.1.6 → 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.
Files changed (133) hide show
  1. package/.eslintrc.js +1 -0
  2. package/CHANGELOG.md +7 -0
  3. package/README.md +2 -2
  4. package/dist/bundle.js +1 -1
  5. package/dist/src/Color4.js +6 -2
  6. package/dist/src/Editor.d.ts +1 -0
  7. package/dist/src/Editor.js +19 -8
  8. package/dist/src/EditorImage.d.ts +8 -13
  9. package/dist/src/EditorImage.js +51 -29
  10. package/dist/src/Viewport.d.ts +9 -1
  11. package/dist/src/Viewport.js +3 -1
  12. package/dist/src/commands/Command.d.ts +9 -8
  13. package/dist/src/commands/Command.js +15 -14
  14. package/dist/src/commands/Duplicate.d.ts +14 -0
  15. package/dist/src/commands/Duplicate.js +34 -0
  16. package/dist/src/commands/Erase.d.ts +5 -2
  17. package/dist/src/commands/Erase.js +28 -9
  18. package/dist/src/commands/SerializableCommand.d.ts +13 -0
  19. package/dist/src/commands/SerializableCommand.js +28 -0
  20. package/dist/src/commands/localization.d.ts +2 -0
  21. package/dist/src/commands/localization.js +2 -0
  22. package/dist/src/components/AbstractComponent.d.ts +15 -2
  23. package/dist/src/components/AbstractComponent.js +122 -26
  24. package/dist/src/components/SVGGlobalAttributesObject.d.ts +6 -1
  25. package/dist/src/components/SVGGlobalAttributesObject.js +23 -1
  26. package/dist/src/components/Stroke.d.ts +5 -0
  27. package/dist/src/components/Stroke.js +32 -1
  28. package/dist/src/components/Text.d.ts +11 -4
  29. package/dist/src/components/Text.js +57 -3
  30. package/dist/src/components/UnknownSVGObject.d.ts +2 -0
  31. package/dist/src/components/UnknownSVGObject.js +12 -1
  32. package/dist/src/components/util/describeComponentList.d.ts +4 -0
  33. package/dist/src/components/util/describeComponentList.js +14 -0
  34. package/dist/src/geometry/Path.d.ts +4 -1
  35. package/dist/src/geometry/Path.js +4 -0
  36. package/dist/src/rendering/Display.d.ts +3 -0
  37. package/dist/src/rendering/Display.js +13 -0
  38. package/dist/src/rendering/RenderingStyle.d.ts +24 -0
  39. package/dist/src/rendering/RenderingStyle.js +32 -0
  40. package/dist/src/rendering/renderers/AbstractRenderer.d.ts +1 -8
  41. package/dist/src/rendering/renderers/AbstractRenderer.js +1 -6
  42. package/dist/src/rendering/renderers/CanvasRenderer.d.ts +2 -1
  43. package/dist/src/rendering/renderers/DummyRenderer.d.ts +2 -1
  44. package/dist/src/rendering/renderers/SVGRenderer.d.ts +2 -1
  45. package/dist/src/rendering/renderers/TextOnlyRenderer.d.ts +2 -1
  46. package/dist/src/toolbar/HTMLToolbar.d.ts +1 -1
  47. package/dist/src/toolbar/HTMLToolbar.js +52 -534
  48. package/dist/src/toolbar/icons.d.ts +5 -0
  49. package/dist/src/toolbar/icons.js +186 -13
  50. package/dist/src/toolbar/localization.d.ts +4 -0
  51. package/dist/src/toolbar/localization.js +4 -0
  52. package/dist/src/toolbar/makeColorInput.d.ts +5 -0
  53. package/dist/src/toolbar/makeColorInput.js +81 -0
  54. package/dist/src/toolbar/widgets/BaseToolWidget.d.ts +12 -0
  55. package/dist/src/toolbar/widgets/BaseToolWidget.js +44 -0
  56. package/dist/src/toolbar/widgets/BaseWidget.d.ts +32 -0
  57. package/dist/src/toolbar/widgets/BaseWidget.js +148 -0
  58. package/dist/src/toolbar/widgets/EraserWidget.d.ts +6 -0
  59. package/dist/src/toolbar/widgets/EraserWidget.js +14 -0
  60. package/dist/src/toolbar/widgets/HandToolWidget.d.ts +13 -0
  61. package/dist/src/toolbar/widgets/HandToolWidget.js +133 -0
  62. package/dist/src/toolbar/widgets/PenWidget.d.ts +20 -0
  63. package/dist/src/toolbar/widgets/PenWidget.js +131 -0
  64. package/dist/src/toolbar/widgets/SelectionWidget.d.ts +11 -0
  65. package/dist/src/toolbar/widgets/SelectionWidget.js +56 -0
  66. package/dist/src/toolbar/widgets/TextToolWidget.d.ts +13 -0
  67. package/dist/src/toolbar/widgets/TextToolWidget.js +72 -0
  68. package/dist/src/tools/Pen.js +1 -1
  69. package/dist/src/tools/PipetteTool.d.ts +20 -0
  70. package/dist/src/tools/PipetteTool.js +40 -0
  71. package/dist/src/tools/SelectionTool.d.ts +2 -0
  72. package/dist/src/tools/SelectionTool.js +41 -23
  73. package/dist/src/tools/TextTool.js +1 -1
  74. package/dist/src/tools/ToolController.d.ts +3 -1
  75. package/dist/src/tools/ToolController.js +4 -0
  76. package/dist/src/tools/localization.d.ts +2 -1
  77. package/dist/src/tools/localization.js +3 -2
  78. package/dist/src/types.d.ts +7 -2
  79. package/dist/src/types.js +1 -0
  80. package/jest.config.js +2 -0
  81. package/package.json +6 -6
  82. package/src/Color4.ts +9 -3
  83. package/src/Editor.ts +23 -11
  84. package/src/EditorImage.test.ts +4 -4
  85. package/src/EditorImage.ts +61 -20
  86. package/src/SVGLoader.ts +2 -1
  87. package/src/Viewport.ts +2 -1
  88. package/src/commands/Command.ts +21 -19
  89. package/src/commands/Duplicate.ts +49 -0
  90. package/src/commands/Erase.ts +34 -13
  91. package/src/commands/SerializableCommand.ts +41 -0
  92. package/src/commands/localization.ts +5 -0
  93. package/src/components/AbstractComponent.ts +168 -26
  94. package/src/components/SVGGlobalAttributesObject.ts +34 -2
  95. package/src/components/Stroke.test.ts +53 -0
  96. package/src/components/Stroke.ts +37 -2
  97. package/src/components/Text.test.ts +38 -0
  98. package/src/components/Text.ts +80 -5
  99. package/src/components/UnknownSVGObject.test.ts +10 -0
  100. package/src/components/UnknownSVGObject.ts +15 -1
  101. package/src/components/builders/FreehandLineBuilder.ts +2 -1
  102. package/src/components/util/describeComponentList.ts +18 -0
  103. package/src/geometry/Path.ts +8 -1
  104. package/src/rendering/Display.ts +17 -1
  105. package/src/rendering/RenderingStyle.test.ts +68 -0
  106. package/src/rendering/RenderingStyle.ts +46 -0
  107. package/src/rendering/caching/RenderingCache.test.ts +1 -1
  108. package/src/rendering/renderers/AbstractRenderer.ts +1 -15
  109. package/src/rendering/renderers/CanvasRenderer.ts +2 -1
  110. package/src/rendering/renderers/DummyRenderer.ts +2 -1
  111. package/src/rendering/renderers/SVGRenderer.ts +2 -1
  112. package/src/rendering/renderers/TextOnlyRenderer.ts +2 -1
  113. package/src/toolbar/HTMLToolbar.ts +58 -660
  114. package/src/toolbar/icons.ts +205 -13
  115. package/src/toolbar/localization.ts +10 -2
  116. package/src/toolbar/makeColorInput.ts +105 -0
  117. package/src/toolbar/toolbar.css +116 -78
  118. package/src/toolbar/widgets/BaseToolWidget.ts +53 -0
  119. package/src/toolbar/widgets/BaseWidget.ts +175 -0
  120. package/src/toolbar/widgets/EraserWidget.ts +16 -0
  121. package/src/toolbar/widgets/HandToolWidget.ts +186 -0
  122. package/src/toolbar/widgets/PenWidget.ts +165 -0
  123. package/src/toolbar/widgets/SelectionWidget.ts +72 -0
  124. package/src/toolbar/widgets/TextToolWidget.ts +90 -0
  125. package/src/tools/Pen.ts +1 -1
  126. package/src/tools/PipetteTool.ts +56 -0
  127. package/src/tools/SelectionTool.test.ts +2 -4
  128. package/src/tools/SelectionTool.ts +47 -27
  129. package/src/tools/TextTool.ts +1 -1
  130. package/src/tools/ToolController.ts +10 -6
  131. package/src/tools/UndoRedoShortcut.test.ts +1 -1
  132. package/src/tools/localization.ts +6 -3
  133. package/src/types.ts +12 -1
@@ -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
- export interface RenderingStyle {
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
- const stylesEqual = (a, b) => {
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 AbstractRenderer, { RenderablePathSpec, RenderingStyle } from './AbstractRenderer';
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 AbstractRenderer, { RenderingStyle } from './AbstractRenderer';
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 AbstractRenderer, { RenderingStyle } from './AbstractRenderer';
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;
@@ -4,7 +4,8 @@ import Rect2 from '../../geometry/Rect2';
4
4
  import Vec3 from '../../geometry/Vec3';
5
5
  import Viewport from '../../Viewport';
6
6
  import { TextRendererLocalization } from '../localization';
7
- import AbstractRenderer, { RenderingStyle } from './AbstractRenderer';
7
+ import RenderingStyle from '../RenderingStyle';
8
+ import AbstractRenderer from './AbstractRenderer';
8
9
  export default class TextOnlyRenderer extends AbstractRenderer {
9
10
  private localizationTable;
10
11
  private descriptionBuilder;
@@ -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;