@edv4h/usketch-plugin-shape-freedraw 1.0.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/LICENSE +21 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +244 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 EdV4H
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"AAAA,OAAO,EAYN,KAAK,aAAa,EAClB,MAAM,uBAAuB,CAAC;AAsL/B,eAAO,MAAM,cAAc,EAAE,aA4F5B,CAAC"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cssColorToRgbaOrDefault, DEFAULT_STYLE, generateId, } from "@edv4h/usketch-shared";
|
|
3
|
+
import { createAddShapeCommand } from "@edv4h/usketch-store";
|
|
4
|
+
function render(data) {
|
|
5
|
+
const points = data.points ?? [];
|
|
6
|
+
const pointsStr = points.map((p) => `${p.x},${p.y}`).join(" ");
|
|
7
|
+
return (_jsx("polyline", { points: pointsStr, fill: "none", stroke: data.style.stroke, strokeWidth: data.style.strokeWidth, opacity: data.style.opacity, strokeLinecap: "round", strokeLinejoin: "round" }));
|
|
8
|
+
}
|
|
9
|
+
function getBounds(data) {
|
|
10
|
+
const points = data.points ?? [];
|
|
11
|
+
if (points.length === 0) {
|
|
12
|
+
return { x: data.x, y: data.y, width: 0, height: 0 };
|
|
13
|
+
}
|
|
14
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
15
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
16
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
17
|
+
let maxY = Number.NEGATIVE_INFINITY;
|
|
18
|
+
for (const p of points) {
|
|
19
|
+
if (p.x < minX)
|
|
20
|
+
minX = p.x;
|
|
21
|
+
if (p.y < minY)
|
|
22
|
+
minY = p.y;
|
|
23
|
+
if (p.x > maxX)
|
|
24
|
+
maxX = p.x;
|
|
25
|
+
if (p.y > maxY)
|
|
26
|
+
maxY = p.y;
|
|
27
|
+
}
|
|
28
|
+
return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
|
|
29
|
+
}
|
|
30
|
+
function hitTest(data, point) {
|
|
31
|
+
const bounds = getBounds(data);
|
|
32
|
+
return (point.x >= bounds.x &&
|
|
33
|
+
point.x <= bounds.x + bounds.width &&
|
|
34
|
+
point.y >= bounds.y &&
|
|
35
|
+
point.y <= bounds.y + bounds.height);
|
|
36
|
+
}
|
|
37
|
+
function resize(data, handle, delta) {
|
|
38
|
+
const points = data.points ?? [];
|
|
39
|
+
const bounds = getBounds(data);
|
|
40
|
+
if (bounds.width === 0 && bounds.height === 0)
|
|
41
|
+
return data;
|
|
42
|
+
let newX = bounds.x;
|
|
43
|
+
let newY = bounds.y;
|
|
44
|
+
let newWidth = bounds.width;
|
|
45
|
+
let newHeight = bounds.height;
|
|
46
|
+
switch (handle) {
|
|
47
|
+
case "se":
|
|
48
|
+
newWidth += delta.x;
|
|
49
|
+
newHeight += delta.y;
|
|
50
|
+
break;
|
|
51
|
+
case "nw":
|
|
52
|
+
newX += delta.x;
|
|
53
|
+
newY += delta.y;
|
|
54
|
+
newWidth -= delta.x;
|
|
55
|
+
newHeight -= delta.y;
|
|
56
|
+
break;
|
|
57
|
+
case "ne":
|
|
58
|
+
newY += delta.y;
|
|
59
|
+
newWidth += delta.x;
|
|
60
|
+
newHeight -= delta.y;
|
|
61
|
+
break;
|
|
62
|
+
case "sw":
|
|
63
|
+
newX += delta.x;
|
|
64
|
+
newWidth -= delta.x;
|
|
65
|
+
newHeight += delta.y;
|
|
66
|
+
break;
|
|
67
|
+
case "e":
|
|
68
|
+
newWidth += delta.x;
|
|
69
|
+
break;
|
|
70
|
+
case "w":
|
|
71
|
+
newX += delta.x;
|
|
72
|
+
newWidth -= delta.x;
|
|
73
|
+
break;
|
|
74
|
+
case "n":
|
|
75
|
+
newY += delta.y;
|
|
76
|
+
newHeight -= delta.y;
|
|
77
|
+
break;
|
|
78
|
+
case "s":
|
|
79
|
+
newHeight += delta.y;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
newWidth = Math.max(1, newWidth);
|
|
83
|
+
newHeight = Math.max(1, newHeight);
|
|
84
|
+
const scaleX = bounds.width !== 0 ? newWidth / bounds.width : 1;
|
|
85
|
+
const scaleY = bounds.height !== 0 ? newHeight / bounds.height : 1;
|
|
86
|
+
const newPoints = points.map((p) => ({
|
|
87
|
+
x: newX + (p.x - bounds.x) * scaleX,
|
|
88
|
+
y: newY + (p.y - bounds.y) * scaleY,
|
|
89
|
+
}));
|
|
90
|
+
return {
|
|
91
|
+
...data,
|
|
92
|
+
x: newX,
|
|
93
|
+
y: newY,
|
|
94
|
+
width: newWidth,
|
|
95
|
+
height: newHeight,
|
|
96
|
+
points: newPoints,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function move(data, dx, dy) {
|
|
100
|
+
const points = data.points ?? [];
|
|
101
|
+
return {
|
|
102
|
+
x: data.x + dx,
|
|
103
|
+
y: data.y + dy,
|
|
104
|
+
points: points.map((p) => ({ x: p.x + dx, y: p.y + dy })),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function applyBounds(data, newBounds) {
|
|
108
|
+
const points = data.points ?? [];
|
|
109
|
+
const oldBounds = getBounds(data);
|
|
110
|
+
const scaleX = oldBounds.width !== 0 ? newBounds.width / oldBounds.width : 1;
|
|
111
|
+
const scaleY = oldBounds.height !== 0 ? newBounds.height / oldBounds.height : 1;
|
|
112
|
+
return {
|
|
113
|
+
x: newBounds.x,
|
|
114
|
+
y: newBounds.y,
|
|
115
|
+
width: newBounds.width,
|
|
116
|
+
height: newBounds.height,
|
|
117
|
+
points: points.map((p) => ({
|
|
118
|
+
x: newBounds.x + (p.x - oldBounds.x) * scaleX,
|
|
119
|
+
y: newBounds.y + (p.y - oldBounds.y) * scaleY,
|
|
120
|
+
})),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function createDefault(params) {
|
|
124
|
+
return {
|
|
125
|
+
id: params.id,
|
|
126
|
+
type: "freedraw",
|
|
127
|
+
x: params.x,
|
|
128
|
+
y: params.y,
|
|
129
|
+
width: 0,
|
|
130
|
+
height: 0,
|
|
131
|
+
style: { ...DEFAULT_STYLE },
|
|
132
|
+
points: [],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function computeBounds(points) {
|
|
136
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
137
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
138
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
139
|
+
let maxY = Number.NEGATIVE_INFINITY;
|
|
140
|
+
for (const p of points) {
|
|
141
|
+
if (p.x < minX)
|
|
142
|
+
minX = p.x;
|
|
143
|
+
if (p.y < minY)
|
|
144
|
+
minY = p.y;
|
|
145
|
+
if (p.x > maxX)
|
|
146
|
+
maxX = p.x;
|
|
147
|
+
if (p.y > maxY)
|
|
148
|
+
maxY = p.y;
|
|
149
|
+
}
|
|
150
|
+
return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
|
|
151
|
+
}
|
|
152
|
+
function FreedrawIcon() {
|
|
153
|
+
return (_jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", children: _jsx("path", { d: "M4 16 C6 10, 10 4, 16 6", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }));
|
|
154
|
+
}
|
|
155
|
+
export const freedrawPlugin = {
|
|
156
|
+
id: "usketch-plugin-shape-freedraw",
|
|
157
|
+
name: "フリーハンド",
|
|
158
|
+
setup(ctx) {
|
|
159
|
+
// ── Local draw state (scoped to this setup closure) ──
|
|
160
|
+
let drawState = null;
|
|
161
|
+
function onPointerDown(toolCtx, event) {
|
|
162
|
+
const id = generateId();
|
|
163
|
+
const startPoint = { x: event.worldPoint.x, y: event.worldPoint.y };
|
|
164
|
+
drawState = { shapeId: id, points: [startPoint] };
|
|
165
|
+
const shape = createDefault({ id, x: startPoint.x, y: startPoint.y });
|
|
166
|
+
shape.points = [startPoint];
|
|
167
|
+
shape.style = { ...toolCtx.store.getStyleSettings() };
|
|
168
|
+
toolCtx.store.addShape(shape);
|
|
169
|
+
}
|
|
170
|
+
function onPointerMove(toolCtx, event) {
|
|
171
|
+
if (!drawState)
|
|
172
|
+
return;
|
|
173
|
+
const newPoint = { x: event.worldPoint.x, y: event.worldPoint.y };
|
|
174
|
+
drawState.points.push(newPoint);
|
|
175
|
+
const bounds = computeBounds(drawState.points);
|
|
176
|
+
toolCtx.store.updateShape(drawState.shapeId, {
|
|
177
|
+
x: bounds.x,
|
|
178
|
+
y: bounds.y,
|
|
179
|
+
width: bounds.width,
|
|
180
|
+
height: bounds.height,
|
|
181
|
+
points: [...drawState.points],
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function onPointerUp(toolCtx) {
|
|
185
|
+
if (!drawState)
|
|
186
|
+
return;
|
|
187
|
+
const shape = toolCtx.store.getShape(drawState.shapeId);
|
|
188
|
+
if (shape && drawState.points.length > 1) {
|
|
189
|
+
// Replace with undoable command
|
|
190
|
+
toolCtx.store.deleteShape(drawState.shapeId);
|
|
191
|
+
toolCtx.commands.execute(createAddShapeCommand(toolCtx.store, shape));
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
toolCtx.store.deleteShape(drawState.shapeId);
|
|
195
|
+
}
|
|
196
|
+
drawState = null;
|
|
197
|
+
}
|
|
198
|
+
function gpuPrimitive(data) {
|
|
199
|
+
const pts = data.points ?? [];
|
|
200
|
+
if (pts.length < 2)
|
|
201
|
+
return null;
|
|
202
|
+
const verts = new Float32Array(pts.length * 2);
|
|
203
|
+
for (let i = 0; i < pts.length; i++) {
|
|
204
|
+
verts[i * 2] = pts[i].x;
|
|
205
|
+
verts[i * 2 + 1] = pts[i].y;
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
kind: "polyline",
|
|
209
|
+
bounds: getBounds(data),
|
|
210
|
+
vertices: verts,
|
|
211
|
+
fill: [0, 0, 0, 0],
|
|
212
|
+
stroke: cssColorToRgbaOrDefault(data.style.stroke),
|
|
213
|
+
strokeWidth: data.style.strokeWidth,
|
|
214
|
+
opacity: data.style.opacity,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
ctx.shapes.register("freedraw", {
|
|
218
|
+
render,
|
|
219
|
+
getBounds,
|
|
220
|
+
hitTest,
|
|
221
|
+
resize,
|
|
222
|
+
createDefault,
|
|
223
|
+
move,
|
|
224
|
+
applyBounds,
|
|
225
|
+
gpuPrimitive,
|
|
226
|
+
});
|
|
227
|
+
ctx.tools.register("freedraw-draw", {
|
|
228
|
+
icon: FreedrawIcon,
|
|
229
|
+
cursor: "crosshair",
|
|
230
|
+
shortcut: "p",
|
|
231
|
+
order: 30,
|
|
232
|
+
onActivate(toolCtx) {
|
|
233
|
+
toolCtx.events.emit("snap:configure", { enabled: false });
|
|
234
|
+
},
|
|
235
|
+
onDeactivate(toolCtx) {
|
|
236
|
+
toolCtx.events.emit("snap:configure", { enabled: true });
|
|
237
|
+
},
|
|
238
|
+
onPointerDown,
|
|
239
|
+
onPointerMove,
|
|
240
|
+
onPointerUp,
|
|
241
|
+
});
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@edv4h/usketch-plugin-shape-freedraw",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"source": "./src/index.ts",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@edv4h/usketch-core": "1.0.0",
|
|
16
|
+
"@edv4h/usketch-shared": "1.0.0",
|
|
17
|
+
"@edv4h/usketch-store": "1.0.0"
|
|
18
|
+
},
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"react": ">=19"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/react": "19.2.14",
|
|
24
|
+
"typescript": "5.9.3",
|
|
25
|
+
"vitest": "3.2.4"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"README.md"
|
|
33
|
+
],
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/EdV4H/usketch.git",
|
|
38
|
+
"directory": "plugins/usketch-plugin-shape-freedraw"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://github.com/EdV4H/usketch#readme",
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/EdV4H/usketch/issues"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsc -p tsconfig.json",
|
|
46
|
+
"typecheck": "tsc --noEmit",
|
|
47
|
+
"test": "vitest run --passWithNoTests",
|
|
48
|
+
"clean": "rm -rf dist"
|
|
49
|
+
}
|
|
50
|
+
}
|