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.
- package/CHANGELOG.md +14 -0
- package/dist/bundle.js +3 -3
- package/dist/bundledStyles.js +1 -1
- package/dist/cjs/src/Pointer.d.ts +3 -1
- package/dist/cjs/src/Pointer.js +27 -2
- package/dist/cjs/src/commands/Duplicate.d.ts +24 -0
- package/dist/cjs/src/commands/Duplicate.js +26 -0
- package/dist/cjs/src/commands/Erase.d.ts +20 -0
- package/dist/cjs/src/commands/Erase.js +20 -0
- package/dist/cjs/src/commands/invertCommand.js +6 -0
- package/dist/cjs/src/commands/uniteCommands.js +14 -13
- package/dist/cjs/src/components/BackgroundComponent.js +9 -2
- package/dist/cjs/src/components/ImageComponent.d.ts +6 -6
- package/dist/cjs/src/components/ImageComponent.js +17 -12
- package/dist/cjs/src/components/lib.d.ts +1 -1
- package/dist/cjs/src/components/lib.js +2 -2
- package/dist/cjs/src/components/localization.d.ts +1 -0
- package/dist/cjs/src/components/localization.js +1 -0
- package/dist/cjs/src/math/Vec2.d.ts +20 -0
- package/dist/cjs/src/math/Vec2.js +20 -0
- package/dist/cjs/src/rendering/renderers/AbstractRenderer.d.ts +17 -0
- package/dist/cjs/src/rendering/renderers/AbstractRenderer.js +21 -3
- package/dist/cjs/src/rendering/renderers/CanvasRenderer.js +12 -7
- package/dist/cjs/src/toolbar/localization.d.ts +1 -0
- package/dist/cjs/src/toolbar/localization.js +1 -0
- package/dist/cjs/src/toolbar/makeColorInput.js +8 -0
- package/dist/cjs/src/toolbar/widgets/BaseWidget.d.ts +1 -0
- package/dist/cjs/src/toolbar/widgets/BaseWidget.js +29 -6
- package/dist/cjs/src/tools/Pen.d.ts +4 -0
- package/dist/cjs/src/tools/Pen.js +24 -1
- package/dist/cjs/src/tools/SelectionTool/SelectionTool.d.ts +1 -0
- package/dist/cjs/src/tools/SelectionTool/SelectionTool.js +8 -0
- package/dist/cjs/src/util/waitForAll.d.ts +6 -0
- package/dist/cjs/src/util/waitForAll.js +17 -0
- package/dist/mjs/src/Pointer.d.ts +3 -1
- package/dist/mjs/src/Pointer.mjs +27 -2
- package/dist/mjs/src/commands/Duplicate.d.ts +24 -0
- package/dist/mjs/src/commands/Duplicate.mjs +26 -0
- package/dist/mjs/src/commands/Erase.d.ts +20 -0
- package/dist/mjs/src/commands/Erase.mjs +20 -0
- package/dist/mjs/src/commands/invertCommand.mjs +6 -0
- package/dist/mjs/src/commands/uniteCommands.mjs +14 -13
- package/dist/mjs/src/components/BackgroundComponent.mjs +9 -2
- package/dist/mjs/src/components/ImageComponent.d.ts +6 -6
- package/dist/mjs/src/components/ImageComponent.mjs +17 -12
- package/dist/mjs/src/components/lib.d.ts +1 -1
- package/dist/mjs/src/components/lib.mjs +3 -1
- package/dist/mjs/src/components/localization.d.ts +1 -0
- package/dist/mjs/src/components/localization.mjs +1 -0
- package/dist/mjs/src/math/Vec2.d.ts +20 -0
- package/dist/mjs/src/math/Vec2.mjs +20 -0
- package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +17 -0
- package/dist/mjs/src/rendering/renderers/AbstractRenderer.mjs +21 -3
- package/dist/mjs/src/rendering/renderers/CanvasRenderer.mjs +12 -7
- package/dist/mjs/src/toolbar/localization.d.ts +1 -0
- package/dist/mjs/src/toolbar/localization.mjs +1 -0
- package/dist/mjs/src/toolbar/makeColorInput.mjs +8 -0
- package/dist/mjs/src/toolbar/widgets/BaseWidget.d.ts +1 -0
- package/dist/mjs/src/toolbar/widgets/BaseWidget.mjs +29 -6
- package/dist/mjs/src/tools/Pen.d.ts +4 -0
- package/dist/mjs/src/tools/Pen.mjs +24 -1
- package/dist/mjs/src/tools/SelectionTool/SelectionTool.d.ts +1 -0
- package/dist/mjs/src/tools/SelectionTool/SelectionTool.mjs +8 -0
- package/dist/mjs/src/util/waitForAll.d.ts +6 -0
- package/dist/mjs/src/util/waitForAll.mjs +15 -0
- package/package.json +12 -12
- 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,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.
|
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.
|
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.
|
90
|
+
"@types/jest": "^29.5.1",
|
91
91
|
"@types/jsdom": "^21.1.1",
|
92
|
-
"@types/node": "^
|
93
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
94
|
-
"@typescript-eslint/parser": "^5.
|
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.
|
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": "^
|
101
|
-
"lint-staged": "^13.2.
|
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.
|
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.
|
108
|
+
"typedoc": "^0.24.7",
|
109
109
|
"typescript": "^5.0.4",
|
110
|
-
"webpack": "^5.
|
110
|
+
"webpack": "^5.82.0"
|
111
111
|
},
|
112
112
|
"bugs": {
|
113
113
|
"url": "https://github.com/personalizedrefrigerator/js-draw/issues"
|
package/src/toolbar/toolbar.css
CHANGED
@@ -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)
|
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;
|