js-draw 0.22.0 → 0.23.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 (67) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/bundle.js +3 -3
  3. package/dist/bundledStyles.js +1 -1
  4. package/dist/cjs/src/Pointer.d.ts +3 -1
  5. package/dist/cjs/src/Pointer.js +27 -2
  6. package/dist/cjs/src/commands/Duplicate.d.ts +24 -0
  7. package/dist/cjs/src/commands/Duplicate.js +26 -0
  8. package/dist/cjs/src/commands/Erase.d.ts +20 -0
  9. package/dist/cjs/src/commands/Erase.js +20 -0
  10. package/dist/cjs/src/commands/invertCommand.js +6 -0
  11. package/dist/cjs/src/commands/uniteCommands.js +14 -13
  12. package/dist/cjs/src/components/BackgroundComponent.js +9 -2
  13. package/dist/cjs/src/components/ImageComponent.d.ts +6 -6
  14. package/dist/cjs/src/components/ImageComponent.js +17 -12
  15. package/dist/cjs/src/components/lib.d.ts +1 -1
  16. package/dist/cjs/src/components/lib.js +2 -2
  17. package/dist/cjs/src/components/localization.d.ts +1 -0
  18. package/dist/cjs/src/components/localization.js +1 -0
  19. package/dist/cjs/src/math/Vec2.d.ts +20 -0
  20. package/dist/cjs/src/math/Vec2.js +20 -0
  21. package/dist/cjs/src/rendering/renderers/AbstractRenderer.d.ts +17 -0
  22. package/dist/cjs/src/rendering/renderers/AbstractRenderer.js +21 -3
  23. package/dist/cjs/src/rendering/renderers/CanvasRenderer.js +12 -7
  24. package/dist/cjs/src/toolbar/localization.d.ts +1 -0
  25. package/dist/cjs/src/toolbar/localization.js +1 -0
  26. package/dist/cjs/src/toolbar/makeColorInput.js +8 -0
  27. package/dist/cjs/src/toolbar/widgets/BaseWidget.d.ts +1 -0
  28. package/dist/cjs/src/toolbar/widgets/BaseWidget.js +29 -6
  29. package/dist/cjs/src/tools/Pen.d.ts +4 -0
  30. package/dist/cjs/src/tools/Pen.js +24 -1
  31. package/dist/cjs/src/tools/SelectionTool/SelectionTool.d.ts +1 -0
  32. package/dist/cjs/src/tools/SelectionTool/SelectionTool.js +8 -0
  33. package/dist/cjs/src/util/waitForAll.d.ts +6 -0
  34. package/dist/cjs/src/util/waitForAll.js +17 -0
  35. package/dist/mjs/src/Pointer.d.ts +3 -1
  36. package/dist/mjs/src/Pointer.mjs +27 -2
  37. package/dist/mjs/src/commands/Duplicate.d.ts +24 -0
  38. package/dist/mjs/src/commands/Duplicate.mjs +26 -0
  39. package/dist/mjs/src/commands/Erase.d.ts +20 -0
  40. package/dist/mjs/src/commands/Erase.mjs +20 -0
  41. package/dist/mjs/src/commands/invertCommand.mjs +6 -0
  42. package/dist/mjs/src/commands/uniteCommands.mjs +14 -13
  43. package/dist/mjs/src/components/BackgroundComponent.mjs +9 -2
  44. package/dist/mjs/src/components/ImageComponent.d.ts +6 -6
  45. package/dist/mjs/src/components/ImageComponent.mjs +17 -12
  46. package/dist/mjs/src/components/lib.d.ts +1 -1
  47. package/dist/mjs/src/components/lib.mjs +3 -1
  48. package/dist/mjs/src/components/localization.d.ts +1 -0
  49. package/dist/mjs/src/components/localization.mjs +1 -0
  50. package/dist/mjs/src/math/Vec2.d.ts +20 -0
  51. package/dist/mjs/src/math/Vec2.mjs +20 -0
  52. package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +17 -0
  53. package/dist/mjs/src/rendering/renderers/AbstractRenderer.mjs +21 -3
  54. package/dist/mjs/src/rendering/renderers/CanvasRenderer.mjs +12 -7
  55. package/dist/mjs/src/toolbar/localization.d.ts +1 -0
  56. package/dist/mjs/src/toolbar/localization.mjs +1 -0
  57. package/dist/mjs/src/toolbar/makeColorInput.mjs +8 -0
  58. package/dist/mjs/src/toolbar/widgets/BaseWidget.d.ts +1 -0
  59. package/dist/mjs/src/toolbar/widgets/BaseWidget.mjs +29 -6
  60. package/dist/mjs/src/tools/Pen.d.ts +4 -0
  61. package/dist/mjs/src/tools/Pen.mjs +24 -1
  62. package/dist/mjs/src/tools/SelectionTool/SelectionTool.d.ts +1 -0
  63. package/dist/mjs/src/tools/SelectionTool/SelectionTool.mjs +8 -0
  64. package/dist/mjs/src/util/waitForAll.d.ts +6 -0
  65. package/dist/mjs/src/util/waitForAll.mjs +15 -0
  66. package/package.json +12 -12
  67. package/src/toolbar/toolbar.css +35 -1
@@ -14,6 +14,7 @@ class SelectionTool extends BaseTool {
14
14
  super(editor.notifier, description);
15
15
  this.editor = editor;
16
16
  this.lastEvtTarget = null;
17
+ this.startPoint = null; // canvas position
17
18
  this.expandingSelectionBox = false;
18
19
  this.shiftKeyPressed = false;
19
20
  this.ctrlKeyPressed = false;
@@ -24,6 +25,9 @@ class SelectionTool extends BaseTool {
24
25
  this.handleOverlay.classList.add('handleOverlay');
25
26
  editor.notifier.on(EditorEventType.ViewportChanged, _data => {
26
27
  var _a;
28
+ // The selection box could be using the wet ink display if its transformation
29
+ // hasn't been finalized yet. Clear before updating the UI.
30
+ this.editor.clearWetInk();
27
31
  (_a = this.selectionBox) === null || _a === void 0 ? void 0 : _a.updateUI();
28
32
  });
29
33
  this.editor.handleKeyEventsFrom(this.handleOverlay);
@@ -61,6 +65,7 @@ class SelectionTool extends BaseTool {
61
65
  current = current.snappedToGrid(this.editor.viewport);
62
66
  }
63
67
  if (allPointers.length === 1 && current.isPrimary) {
68
+ this.startPoint = current.canvasPos;
64
69
  let transforming = false;
65
70
  if (this.lastEvtTarget && this.selectionBox) {
66
71
  if (snapToGrid) {
@@ -86,6 +91,9 @@ class SelectionTool extends BaseTool {
86
91
  if (!this.selectionBox)
87
92
  return;
88
93
  let currentPointer = event.current;
94
+ if (!this.expandingSelectionBox && this.shiftKeyPressed && this.startPoint) {
95
+ currentPointer = currentPointer.lockedToXYAxes(this.startPoint, this.editor.viewport);
96
+ }
89
97
  if (this.ctrlKeyPressed) {
90
98
  currentPointer = currentPointer.snappedToGrid(this.editor.viewport);
91
99
  }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Resolves when all given promises have resolved. If no promises are given,
3
+ * does not return a Promise.
4
+ */
5
+ declare const waitForAll: (results: (Promise<void> | void)[]) => Promise<void> | void;
6
+ export default waitForAll;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Resolves when all given promises have resolved. If no promises are given,
3
+ * does not return a Promise.
4
+ */
5
+ const waitForAll = (results) => {
6
+ // If any are Promises...
7
+ if (results.some(command => command && command['then'])) {
8
+ // Wait for all commands to finish.
9
+ return Promise.all(results)
10
+ // Ensure we return a Promise<void> and not a Promise<void[]>
11
+ .then(() => { });
12
+ }
13
+ return;
14
+ };
15
+ export default waitForAll;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "js-draw",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Draw pictures using a pen, touchscreen, or mouse! JS-draw is a drawing library for JavaScript and TypeScript. ",
5
5
  "types": "./dist/mjs/src/lib.d.ts",
6
6
  "main": "./dist/cjs/src/lib.js",
@@ -82,32 +82,32 @@
82
82
  "postpack": "pinst --enable"
83
83
  },
84
84
  "dependencies": {
85
- "@melloware/coloris": "^0.18.0",
85
+ "@melloware/coloris": "^0.19.1",
86
86
  "bezier-js": "^6.1.3"
87
87
  },
88
88
  "devDependencies": {
89
89
  "@types/bezier-js": "^4.1.0",
90
- "@types/jest": "^29.5.0",
90
+ "@types/jest": "^29.5.1",
91
91
  "@types/jsdom": "^21.1.1",
92
- "@types/node": "^18.15.11",
93
- "@typescript-eslint/eslint-plugin": "^5.57.1",
94
- "@typescript-eslint/parser": "^5.57.1",
92
+ "@types/node": "^20.1.0",
93
+ "@typescript-eslint/eslint-plugin": "^5.59.2",
94
+ "@typescript-eslint/parser": "^5.59.2",
95
95
  "css-loader": "^6.7.3",
96
- "eslint": "^8.38.0",
96
+ "eslint": "^8.40.0",
97
97
  "husky": "^8.0.3",
98
98
  "jest": "^29.5.0",
99
99
  "jest-environment-jsdom": "^29.5.0",
100
- "jsdom": "^21.1.1",
101
- "lint-staged": "^13.2.1",
100
+ "jsdom": "^22.0.0",
101
+ "lint-staged": "^13.2.2",
102
102
  "pinst": "^3.0.0",
103
103
  "style-loader": "^3.3.2",
104
- "terser-webpack-plugin": "^5.3.7",
104
+ "terser-webpack-plugin": "^5.3.8",
105
105
  "ts-jest": "^29.1.0",
106
106
  "ts-loader": "^9.4.2",
107
107
  "ts-node": "^10.9.1",
108
- "typedoc": "^0.24.1",
108
+ "typedoc": "^0.24.7",
109
109
  "typescript": "^5.0.4",
110
- "webpack": "^5.78.0"
110
+ "webpack": "^5.82.0"
111
111
  },
112
112
  "bugs": {
113
113
  "url": "https://github.com/personalizedrefrigerator/js-draw/issues"
@@ -81,6 +81,7 @@
81
81
 
82
82
  .toolbar-button > label {
83
83
  cursor: inherit;
84
+ user-select: none;
84
85
  }
85
86
 
86
87
  /* Decrease the font size of labels in the main toolbar if they're long. */
@@ -105,6 +106,7 @@
105
106
 
106
107
  .toolbar-root .toolbar-icon {
107
108
  flex-shrink: 1;
109
+ user-select: none;
108
110
 
109
111
  width: 100%;
110
112
  min-width: 30px;
@@ -131,7 +133,8 @@
131
133
  }
132
134
 
133
135
  .toolbar-dropdown.hidden,
134
- .toolbar-toolContainer:not(.selected):not(.dropdownShowable) > .toolbar-dropdown {
136
+ .toolbar-toolContainer:not(.selected):not(.dropdownShowable)
137
+ > .toolbar-dropdown:not(.hiding) {
135
138
  display: none;
136
139
  }
137
140
 
@@ -153,6 +156,37 @@
153
156
  box-shadow: 0px 3px 3px var(--primary-shadow-color);
154
157
  }
155
158
 
159
+ /* Animate showing/hiding the dropdown. Animations triggered in JavaScript. */
160
+ @keyframes dropdown-transition-in {
161
+ 0% {
162
+ opacity: 0;
163
+ transform: scale(1, 0);
164
+ }
165
+ 100% {
166
+ opacity: 1;
167
+ transform: scale(1, 1);
168
+ }
169
+ }
170
+
171
+ @keyframes dropdown-transition-out {
172
+ 0% {
173
+ opacity: 1;
174
+ transform: scale(1, 1);
175
+ }
176
+ 100% {
177
+ opacity: 0;
178
+ transform: scale(1, 0);
179
+ }
180
+ }
181
+
182
+ .toolbar-dropdown {
183
+ /* Ensure the animation begins from the correct location. */
184
+ transform-origin: top left;
185
+
186
+ --dropdown-show-animation: dropdown-transition-in;
187
+ --dropdown-hide-animation: dropdown-transition-out;
188
+ }
189
+
156
190
  .toolbar-buttonGroup {
157
191
  display: flex;
158
192
  flex-direction: row;