@edv4h/usketch-plugin-shape-freedraw 3.0.2 → 3.1.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 (60) hide show
  1. package/README.md +59 -0
  2. package/dist/config.d.ts +54 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +46 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/draw-tool.d.ts +12 -0
  7. package/dist/draw-tool.d.ts.map +1 -0
  8. package/dist/draw-tool.js +202 -0
  9. package/dist/draw-tool.js.map +1 -0
  10. package/dist/eraser.d.ts +10 -0
  11. package/dist/eraser.d.ts.map +1 -0
  12. package/dist/eraser.js +33 -0
  13. package/dist/eraser.js.map +1 -0
  14. package/dist/geometry/brush-outline.d.ts +19 -0
  15. package/dist/geometry/brush-outline.d.ts.map +1 -0
  16. package/dist/geometry/brush-outline.js +59 -0
  17. package/dist/geometry/brush-outline.js.map +1 -0
  18. package/dist/geometry/hit.d.ts +17 -0
  19. package/dist/geometry/hit.d.ts.map +1 -0
  20. package/dist/geometry/hit.js +101 -0
  21. package/dist/geometry/hit.js.map +1 -0
  22. package/dist/geometry/simplify.d.ts +7 -0
  23. package/dist/geometry/simplify.d.ts.map +1 -0
  24. package/dist/geometry/simplify.js +47 -0
  25. package/dist/geometry/simplify.js.map +1 -0
  26. package/dist/geometry/smooth-path.d.ts +9 -0
  27. package/dist/geometry/smooth-path.d.ts.map +1 -0
  28. package/dist/geometry/smooth-path.js +21 -0
  29. package/dist/geometry/smooth-path.js.map +1 -0
  30. package/dist/index.d.ts +3 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/pen-meta.d.ts +26 -0
  35. package/dist/pen-meta.d.ts.map +1 -0
  36. package/dist/pen-meta.js +39 -0
  37. package/dist/pen-meta.js.map +1 -0
  38. package/dist/plugin.d.ts +3 -2
  39. package/dist/plugin.d.ts.map +1 -1
  40. package/dist/plugin.js +106 -255
  41. package/dist/plugin.js.map +1 -1
  42. package/dist/settings-store.d.ts +22 -0
  43. package/dist/settings-store.d.ts.map +1 -0
  44. package/dist/settings-store.js +65 -0
  45. package/dist/settings-store.js.map +1 -0
  46. package/dist/shape.d.ts +6 -0
  47. package/dist/shape.d.ts.map +1 -0
  48. package/dist/shape.js +193 -0
  49. package/dist/shape.js.map +1 -0
  50. package/dist/types.d.ts +20 -3
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/ui/cursor-overlay.d.ts +21 -0
  53. package/dist/ui/cursor-overlay.d.ts.map +1 -0
  54. package/dist/ui/cursor-overlay.js +48 -0
  55. package/dist/ui/cursor-overlay.js.map +1 -0
  56. package/dist/ui/palette.d.ts +14 -0
  57. package/dist/ui/palette.d.ts.map +1 -0
  58. package/dist/ui/palette.js +89 -0
  59. package/dist/ui/palette.js.map +1 -0
  60. package/package.json +3 -1
package/dist/plugin.js CHANGED
@@ -1,275 +1,126 @@
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(shape) {
5
- const data = shape;
6
- const points = data.points ?? [];
7
- const pointsStr = points.map((p) => `${p.x},${p.y}`).join(" ");
8
- return (_jsx("polyline", { points: pointsStr, fill: "none", stroke: data.style.stroke, strokeWidth: data.style.strokeWidth, opacity: data.style.opacity, strokeLinecap: "round", strokeLinejoin: "round" }));
9
- }
10
- function getBounds(shape) {
11
- const data = shape;
12
- const points = data.points ?? [];
13
- if (points.length === 0) {
14
- return { x: data.x, y: data.y, width: 0, height: 0 };
15
- }
16
- let minX = Number.POSITIVE_INFINITY;
17
- let minY = Number.POSITIVE_INFINITY;
18
- let maxX = Number.NEGATIVE_INFINITY;
19
- let maxY = Number.NEGATIVE_INFINITY;
20
- for (const p of points) {
21
- if (p.x < minX)
22
- minX = p.x;
23
- if (p.y < minY)
24
- minY = p.y;
25
- if (p.x > maxX)
26
- maxX = p.x;
27
- if (p.y > maxY)
28
- maxY = p.y;
29
- }
30
- return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
31
- }
32
- function hitTest(data, point) {
33
- const bounds = getBounds(data);
34
- return (point.x >= bounds.x &&
35
- point.x <= bounds.x + bounds.width &&
36
- point.y >= bounds.y &&
37
- point.y <= bounds.y + bounds.height);
38
- }
39
- function resize(shape, handle, delta) {
40
- const data = shape;
41
- const points = data.points ?? [];
42
- const bounds = getBounds(data);
43
- if (bounds.width === 0 && bounds.height === 0)
44
- return data;
45
- let newX = bounds.x;
46
- let newY = bounds.y;
47
- let newWidth = bounds.width;
48
- let newHeight = bounds.height;
49
- switch (handle) {
50
- case "se":
51
- newWidth += delta.x;
52
- newHeight += delta.y;
53
- break;
54
- case "nw":
55
- newX += delta.x;
56
- newY += delta.y;
57
- newWidth -= delta.x;
58
- newHeight -= delta.y;
59
- break;
60
- case "ne":
61
- newY += delta.y;
62
- newWidth += delta.x;
63
- newHeight -= delta.y;
64
- break;
65
- case "sw":
66
- newX += delta.x;
67
- newWidth -= delta.x;
68
- newHeight += delta.y;
69
- break;
70
- case "e":
71
- newWidth += delta.x;
72
- break;
73
- case "w":
74
- newX += delta.x;
75
- newWidth -= delta.x;
76
- break;
77
- case "n":
78
- newY += delta.y;
79
- newHeight -= delta.y;
80
- break;
81
- case "s":
82
- newHeight += delta.y;
83
- break;
84
- }
85
- newWidth = Math.max(1, newWidth);
86
- newHeight = Math.max(1, newHeight);
87
- const scaleX = bounds.width !== 0 ? newWidth / bounds.width : 1;
88
- const scaleY = bounds.height !== 0 ? newHeight / bounds.height : 1;
89
- const newPoints = points.map((p) => ({
90
- x: newX + (p.x - bounds.x) * scaleX,
91
- y: newY + (p.y - bounds.y) * scaleY,
92
- }));
93
- return {
94
- ...data,
95
- x: newX,
96
- y: newY,
97
- width: newWidth,
98
- height: newHeight,
99
- points: newPoints,
100
- };
101
- }
102
- function move(shape, dx, dy) {
103
- const data = shape;
104
- const points = data.points ?? [];
105
- return {
106
- x: data.x + dx,
107
- y: data.y + dy,
108
- points: points.map((p) => ({ x: p.x + dx, y: p.y + dy })),
109
- };
110
- }
111
- function applyBounds(shape, newBounds) {
112
- const data = shape;
113
- const points = data.points ?? [];
114
- const oldBounds = getBounds(data);
115
- const scaleX = oldBounds.width !== 0 ? newBounds.width / oldBounds.width : 1;
116
- const scaleY = oldBounds.height !== 0 ? newBounds.height / oldBounds.height : 1;
117
- return {
118
- x: newBounds.x,
119
- y: newBounds.y,
120
- width: newBounds.width,
121
- height: newBounds.height,
122
- points: points.map((p) => ({
123
- x: newBounds.x + (p.x - oldBounds.x) * scaleX,
124
- y: newBounds.y + (p.y - oldBounds.y) * scaleY,
125
- })),
126
- };
127
- }
128
- function createDefault(params) {
129
- return {
130
- id: params.id,
131
- type: "freedraw",
132
- x: params.x,
133
- y: params.y,
134
- width: 0,
135
- height: 0,
136
- style: { ...DEFAULT_STYLE },
137
- points: [],
138
- };
139
- }
140
- function computeBounds(points) {
141
- let minX = Number.POSITIVE_INFINITY;
142
- let minY = Number.POSITIVE_INFINITY;
143
- let maxX = Number.NEGATIVE_INFINITY;
144
- let maxY = Number.NEGATIVE_INFINITY;
145
- for (const p of points) {
146
- if (p.x < minX)
147
- minX = p.x;
148
- if (p.y < minY)
149
- minY = p.y;
150
- if (p.x > maxX)
151
- maxX = p.x;
152
- if (p.y > maxY)
153
- maxY = p.y;
154
- }
155
- return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
156
- }
157
- function serializeForAi(shape) {
158
- const data = shape;
159
- return { pointCount: (data.points ?? []).length };
160
- }
161
- function serializeForRecognition(shape) {
162
- const data = shape;
163
- const points = data.points ?? [];
164
- if (points.length < 2)
165
- return null;
166
- // `points` is already `{x,y}[]`; pass it through to avoid an O(n) copy.
167
- return { kind: "stroke", points };
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { parseFreedrawConfig } from "./config.js";
3
+ import { createDrawController } from "./draw-tool.js";
4
+ import { PEN_META } from "./pen-meta.js";
5
+ import { createFreedrawSettingsStore } from "./settings-store.js";
6
+ import { freedrawShapeDefinition } from "./shape.js";
7
+ import { createPointerStore, FreedrawCursor } from "./ui/cursor-overlay.js";
8
+ import { FreedrawPalette } from "./ui/palette.js";
9
+ const TOOL_ID = "freedraw-draw";
10
+ function FreedrawIcon() {
11
+ return (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", "aria-hidden": "true", children: [_jsx("title", { children: "Freedraw" }), _jsx("path", { d: "M4 16 C6 10, 10 4, 16 6", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })] }));
168
12
  }
169
- function debugFields(shape) {
170
- const data = shape;
171
- const points = data.points ?? [];
172
- return {
173
- pointCount: points.length,
174
- firstPoint: points[0] ?? null,
175
- lastPoint: points[points.length - 1] ?? null,
13
+ function createBoolStore(initial) {
14
+ let value = initial;
15
+ const listeners = new Set();
16
+ const store = {
17
+ getSnapshot: () => value,
18
+ subscribe(l) {
19
+ listeners.add(l);
20
+ return () => listeners.delete(l);
21
+ },
22
+ set(v) {
23
+ value = v;
24
+ for (const l of listeners)
25
+ l();
26
+ },
176
27
  };
28
+ return store;
177
29
  }
178
- function FreedrawIcon() {
179
- 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" }) }));
180
- }
181
- export function createFreedrawPlugin() {
30
+ export function createFreedrawPlugin(configInput) {
31
+ const config = parseFreedrawConfig(configInput);
182
32
  return {
183
33
  id: "usketch-plugin-shape-freedraw",
184
34
  name: "フリーハンド",
185
35
  setup(ctx) {
186
- // ── Local draw state (scoped to this setup closure) ──
187
- let drawState = null;
188
- function onPointerDown(toolCtx, event) {
189
- const id = generateId();
190
- const startPoint = { x: event.worldPoint.x, y: event.worldPoint.y };
191
- drawState = { shapeId: id, points: [startPoint] };
192
- const shape = createDefault({ id, x: startPoint.x, y: startPoint.y });
193
- shape.points = [startPoint];
194
- shape.style = { ...toolCtx.store.getStyleSettings() };
195
- toolCtx.store.addShape(shape);
196
- }
197
- function onPointerMove(toolCtx, event) {
198
- if (!drawState)
199
- return;
200
- const newPoint = { x: event.worldPoint.x, y: event.worldPoint.y };
201
- drawState.points.push(newPoint);
202
- const bounds = computeBounds(drawState.points);
203
- toolCtx.store.updateShape(drawState.shapeId, {
204
- x: bounds.x,
205
- y: bounds.y,
206
- width: bounds.width,
207
- height: bounds.height,
208
- points: [...drawState.points],
209
- });
210
- }
211
- function onPointerUp(toolCtx) {
212
- if (!drawState)
213
- return;
214
- const shape = toolCtx.store.getShape(drawState.shapeId);
215
- if (shape && drawState.points.length > 1) {
216
- // Replace with undoable command
217
- toolCtx.store.deleteShape(drawState.shapeId);
218
- toolCtx.commands.execute(createAddShapeCommand(toolCtx.store, shape));
219
- }
220
- else {
221
- toolCtx.store.deleteShape(drawState.shapeId);
222
- }
223
- drawState = null;
224
- }
225
- function gpuPrimitive(shape) {
226
- const data = shape;
227
- const pts = data.points ?? [];
228
- if (pts.length < 2)
229
- return null;
230
- const verts = new Float32Array(pts.length * 2);
231
- for (let i = 0; i < pts.length; i++) {
232
- verts[i * 2] = pts[i].x;
233
- verts[i * 2 + 1] = pts[i].y;
234
- }
235
- return {
236
- kind: "polyline",
237
- bounds: getBounds(data),
238
- vertices: verts,
239
- fill: [0, 0, 0, 0],
240
- stroke: cssColorToRgbaOrDefault(data.style.stroke),
241
- strokeWidth: data.style.strokeWidth,
242
- opacity: data.style.opacity,
243
- };
244
- }
245
- ctx.shapes.register("freedraw", {
246
- render,
247
- getBounds,
248
- hitTest,
249
- resize,
250
- createDefault,
251
- move,
252
- applyBounds,
253
- gpuPrimitive,
254
- serializeForAi,
255
- serializeForRecognition,
256
- debugFields,
257
- });
258
- ctx.tools.register("freedraw-draw", {
36
+ const settings = createFreedrawSettingsStore(config);
37
+ const pointer = createPointerStore();
38
+ const active = createBoolStore(ctx.store.getActiveToolId() === TOOL_ID);
39
+ const draw = createDrawController(settings, pointer);
40
+ ctx.shapes.register("freedraw", freedrawShapeDefinition);
41
+ ctx.tools.register(TOOL_ID, {
259
42
  icon: FreedrawIcon,
260
- cursor: "crosshair",
43
+ cursor: config.cursorPreview ? "none" : "crosshair",
261
44
  shortcut: "p",
262
45
  order: 30,
263
46
  onActivate(toolCtx) {
47
+ active.set(true);
264
48
  toolCtx.events.emit("snap:configure", { enabled: false });
265
49
  },
266
50
  onDeactivate(toolCtx) {
51
+ active.set(false);
52
+ draw.reset();
267
53
  toolCtx.events.emit("snap:configure", { enabled: true });
268
54
  },
269
- onPointerDown,
270
- onPointerMove,
271
- onPointerUp,
55
+ onPointerDown: draw.onPointerDown,
56
+ onPointerMove: draw.onPointerMove,
57
+ onPointerUp: draw.onPointerUp,
58
+ });
59
+ // ── 自前 UI レイヤー(Vim-first でツールバーが無くても動く) ──
60
+ ctx.layers.register({
61
+ id: "freedraw-cursor",
62
+ order: 92,
63
+ fixed: true,
64
+ interactable: false,
65
+ render: (rc) => (_jsx(FreedrawCursor, { settings: settings, pointer: pointer, viewport: rc.viewport })),
272
66
  });
67
+ ctx.layers.register({
68
+ id: "freedraw-palette",
69
+ order: 126,
70
+ fixed: true,
71
+ interactable: true,
72
+ render: () => _jsx(FreedrawPalette, { settings: settings, active: active }),
73
+ });
74
+ // ── vim 連携 / 外部からの設定変更イベント ──
75
+ const offPen = ctx.events.on("freedraw:set-pen", ({ pen }) => {
76
+ if (PEN_META[pen])
77
+ settings.update({ pen, mode: "pen" });
78
+ });
79
+ const offColor = ctx.events.on("freedraw:set-color", ({ color }) => {
80
+ const cur = settings.getSnapshot();
81
+ const custom = cur.customColors.includes(color)
82
+ ? cur.customColors
83
+ : [...cur.customColors, color];
84
+ settings.update({ color, customColors: custom, mode: "pen" });
85
+ });
86
+ const offSize = ctx.events.on("freedraw:set-size", ({ size }) => {
87
+ const cur = settings.getSnapshot();
88
+ if (cur.mode === "eraser")
89
+ settings.update({ eraserSize: size });
90
+ else
91
+ settings.update({ sizes: { ...cur.sizes, [cur.pen]: size } });
92
+ });
93
+ const offEraser = ctx.events.on("freedraw:toggle-eraser", () => {
94
+ const cur = settings.getSnapshot();
95
+ settings.update({ mode: cur.mode === "eraser" ? "pen" : "eraser" });
96
+ });
97
+ // Escape: 消しゴム中ならペンへ、そうでなければ既定ツール(Vim-first では vim)へ戻る。
98
+ const onKeyDown = (e) => {
99
+ if (ctx.store.getActiveToolId() !== TOOL_ID || e.key !== "Escape")
100
+ return;
101
+ if (settings.getSnapshot().mode === "eraser") {
102
+ settings.update({ mode: "pen" });
103
+ }
104
+ else {
105
+ ctx.store.resetToDefaultTool();
106
+ }
107
+ e.preventDefault();
108
+ e.stopImmediatePropagation();
109
+ };
110
+ if (typeof window !== "undefined") {
111
+ window.addEventListener("keydown", onKeyDown, true);
112
+ }
113
+ return () => {
114
+ offPen();
115
+ offColor();
116
+ offSize();
117
+ offEraser();
118
+ if (typeof window !== "undefined") {
119
+ window.removeEventListener("keydown", onKeyDown, true);
120
+ }
121
+ ctx.layers.unregister("freedraw-cursor");
122
+ ctx.layers.unregister("freedraw-palette");
123
+ };
273
124
  },
274
125
  };
275
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type FreedrawConfig } from "./config.js";
2
+ import type { PenKind } from "./types.js";
3
+ export type FreedrawMode = "pen" | "eraser";
4
+ export interface FreedrawSettings {
5
+ mode: FreedrawMode;
6
+ pen: PenKind;
7
+ color: string;
8
+ sizes: Record<PenKind, number>;
9
+ eraserSize: number;
10
+ brushDynamics: number;
11
+ customColors: string[];
12
+ cursorPreview: boolean;
13
+ }
14
+ export interface FreedrawSettingsStore {
15
+ getSnapshot(): FreedrawSettings;
16
+ subscribe(listener: () => void): () => void;
17
+ update(patch: Partial<FreedrawSettings>): void;
18
+ /** 現在の実効太さ(pen モード=現ペンの太さ / eraser モード=消しゴム)。 */
19
+ currentSize(): number;
20
+ }
21
+ export declare function createFreedrawSettingsStore(config: FreedrawConfig): FreedrawSettingsStore;
22
+ //# sourceMappingURL=settings-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-store.d.ts","sourceRoot":"","sources":["../src/settings-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC,WAAW,IAAI,gBAAgB,CAAC;IAChC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC/C,iDAAiD;IACjD,WAAW,IAAI,MAAM,CAAC;CACtB;AAyCD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CA6BzF"}
@@ -0,0 +1,65 @@
1
+ import { STORAGE_KEY } from "./config.js";
2
+ function loadPersisted() {
3
+ if (typeof localStorage === "undefined")
4
+ return null;
5
+ try {
6
+ const raw = localStorage.getItem(STORAGE_KEY);
7
+ if (!raw)
8
+ return null;
9
+ const d = JSON.parse(raw);
10
+ return typeof d === "object" && d !== null ? d : null;
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ function savePersisted(s) {
17
+ if (typeof localStorage === "undefined")
18
+ return;
19
+ try {
20
+ const payload = {
21
+ pen: s.pen,
22
+ color: s.color,
23
+ sizes: s.sizes,
24
+ eraserSize: s.eraserSize,
25
+ brushDynamics: s.brushDynamics,
26
+ customColors: s.customColors,
27
+ };
28
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(payload));
29
+ }
30
+ catch {
31
+ // クォータ超過等は握りつぶす(描画は継続)。設計書 §10。
32
+ }
33
+ }
34
+ export function createFreedrawSettingsStore(config) {
35
+ const persisted = config.persistSettings ? loadPersisted() : null;
36
+ let state = {
37
+ mode: "pen",
38
+ pen: persisted?.pen ?? config.defaultPen,
39
+ color: persisted?.color ?? config.defaultColor,
40
+ sizes: { ...config.defaultSizes, ...(persisted?.sizes ?? {}) },
41
+ eraserSize: persisted?.eraserSize ?? config.defaultEraserSize,
42
+ brushDynamics: persisted?.brushDynamics ?? config.brushDynamics,
43
+ customColors: persisted?.customColors ?? [],
44
+ cursorPreview: config.cursorPreview,
45
+ };
46
+ const listeners = new Set();
47
+ return {
48
+ getSnapshot: () => state,
49
+ subscribe(listener) {
50
+ listeners.add(listener);
51
+ return () => listeners.delete(listener);
52
+ },
53
+ update(patch) {
54
+ state = { ...state, ...patch };
55
+ if (config.persistSettings)
56
+ savePersisted(state);
57
+ for (const l of listeners)
58
+ l();
59
+ },
60
+ currentSize() {
61
+ return state.mode === "eraser" ? state.eraserSize : state.sizes[state.pen];
62
+ },
63
+ };
64
+ }
65
+ //# sourceMappingURL=settings-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../src/settings-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,WAAW,EAAE,MAAM,aAAa,CAAC;AAkC/D,SAAS,aAAa;IACrB,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAE,CAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,CAAmB;IACzC,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE,OAAO;IAChD,IAAI,CAAC;QACJ,MAAM,OAAO,GAAsB;YAClC,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,YAAY,EAAE,CAAC,CAAC,YAAY;SAC5B,CAAC;QACF,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACR,gCAAgC;IACjC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAsB;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,IAAI,KAAK,GAAqB;QAC7B,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,UAAU;QACxC,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,MAAM,CAAC,YAAY;QAC9C,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;QAC9D,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,MAAM,CAAC,iBAAiB;QAC7D,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,MAAM,CAAC,aAAa;QAC/D,YAAY,EAAE,SAAS,EAAE,YAAY,IAAI,EAAE;QAC3C,aAAa,EAAE,MAAM,CAAC,aAAa;KACnC,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAExC,OAAO;QACN,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;QACxB,SAAS,CAAC,QAAQ;YACjB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,CAAC,KAAK;YACX,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;YAC/B,IAAI,MAAM,CAAC,eAAe;gBAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACjD,KAAK,MAAM,CAAC,IAAI,SAAS;gBAAE,CAAC,EAAE,CAAC;QAChC,CAAC;QACD,WAAW;YACV,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5E,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type ShapeDefinition } from "@edv4h/usketch-shared";
2
+ import { eraserHits, maxHalfWidth, strokeBounds } from "./geometry/hit.js";
3
+ /** shape レジストリ用の定義。 */
4
+ export declare const freedrawShapeDefinition: ShapeDefinition;
5
+ export { eraserHits, maxHalfWidth, strokeBounds };
6
+ //# sourceMappingURL=shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQN,KAAK,eAAe,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAa,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAuNtF,uBAAuB;AACvB,eAAO,MAAM,uBAAuB,EAAE,eAYrC,CAAC;AAGF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC"}