@edv4h/usketch-plugin-shape-freedraw 3.5.1 → 3.6.1
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/README.md +11 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/custom-pens.d.ts +7 -0
- package/dist/custom-pens.d.ts.map +1 -1
- package/dist/custom-pens.js.map +1 -1
- package/dist/draw-tool.d.ts +5 -1
- package/dist/draw-tool.d.ts.map +1 -1
- package/dist/draw-tool.js +31 -5
- package/dist/draw-tool.js.map +1 -1
- package/dist/endpoint-snap.d.ts +21 -0
- package/dist/endpoint-snap.d.ts.map +1 -0
- package/dist/endpoint-snap.js +68 -0
- package/dist/endpoint-snap.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +7 -1
- package/dist/plugin.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -64,6 +64,15 @@ createFreedrawPlugin(undefined, {
|
|
|
64
64
|
写されるので、座標は入れない(点列から毎回作る)。
|
|
65
65
|
ペンを登録していないクライアントでは、そのストロークはボールペンの線(色・太さはそのまま)で描かれる。
|
|
66
66
|
|
|
67
|
+
## 線の端をつなぐ
|
|
68
|
+
|
|
69
|
+
`endpointSnap: true`(または `freedraw:set-endpoint-snap` `{enabled}`)のとき、手を離した線の
|
|
70
|
+
始点・終点が**同じペン**の近くの線に入っていたら、その線のいちばん近い点まで線を伸ばしてつなぐ。
|
|
71
|
+
Ctrl / ⌘ を押しながら離すと、その線だけ有効・無効が逆になる。つないだ端は shape の
|
|
72
|
+
`joins`(`{ start?: true, end?: true }`)に残るので、足したペンの描画はそれを見て端の飾りを省ける。
|
|
73
|
+
つなぐ距離は、画面上の 12px + 線の太さの半分。足したペンは `snapDistance(size)` で決められ、
|
|
74
|
+
`finalize` が `snapEnds: false` を返した線(端が無い周回など)はつながない。
|
|
75
|
+
|
|
67
76
|
## 消しゴム
|
|
68
77
|
|
|
69
78
|
`mode: "eraser"` のとき、触れた freedraw ストロークを丸ごと削除する(ピクセル消去ではない)。
|
|
@@ -80,6 +89,7 @@ interface FreedrawShapeData extends ShapeData {
|
|
|
80
89
|
pen?: PenId; // 省略時 ballpoint(旧データ後方互換)
|
|
81
90
|
penData?: Record<string, unknown>; // 足したペンの finalize が返したデータ
|
|
82
91
|
draft?: boolean; // 描いている最中だけ true
|
|
92
|
+
joins?: { start?: true; end?: true }; // 端を近くの線へつないだか(endpointSnap)
|
|
83
93
|
}
|
|
84
94
|
```
|
|
85
95
|
|
|
@@ -89,4 +99,4 @@ interface FreedrawShapeData extends ShapeData {
|
|
|
89
99
|
|
|
90
100
|
`ctx.events.emit` で設定を操作できる(vim プラグインの ex コマンド等から):
|
|
91
101
|
`freedraw:set-pen` `{pen}` / `freedraw:set-color` `{color}` / `freedraw:set-size` `{size}` /
|
|
92
|
-
`freedraw:toggle-eraser`。
|
|
102
|
+
`freedraw:toggle-eraser` / `freedraw:set-endpoint-snap` `{enabled}`。
|
package/dist/config.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export declare const TUNING: {
|
|
|
25
25
|
readonly startPressure: 0.45;
|
|
26
26
|
/** 確定時の RDP 間引き許容誤差(world px、0 で無効)。 */
|
|
27
27
|
readonly simplifyTolerance: 0.6;
|
|
28
|
+
/** 線の端を近くの線へつなぐ距離(screen px)。これに線の太さの半分を足す。 */
|
|
29
|
+
readonly endpointSnapDist: 12;
|
|
28
30
|
};
|
|
29
31
|
/** プラグイン設定(JSON 可、Zod 検証)。実行時の可変状態は settings-store が持つ。 */
|
|
30
32
|
export declare const FreedrawConfigSchema: z.ZodObject<{
|
|
@@ -42,6 +44,7 @@ export declare const FreedrawConfigSchema: z.ZodObject<{
|
|
|
42
44
|
bounds: "bounds";
|
|
43
45
|
stroke: "stroke";
|
|
44
46
|
}>>;
|
|
47
|
+
endpointSnap: z.ZodDefault<z.ZodBoolean>;
|
|
45
48
|
cursorPreview: z.ZodDefault<z.ZodBoolean>;
|
|
46
49
|
persistSettings: z.ZodDefault<z.ZodBoolean>;
|
|
47
50
|
}, z.core.$strip>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,uCAAuC;AACvC,eAAO,MAAM,UAAU;aAAK,GAAG,EAAE,CAAC;aAAE,GAAG,EAAE,EAAE;aAAE,IAAI,EAAE,GAAG;CAAW,CAAC;AAClE,eAAO,MAAM,YAAY;aAAK,GAAG,EAAE,EAAE;aAAE,GAAG,EAAE,GAAG;aAAE,IAAI,EAAE,CAAC;CAAW,CAAC;AACpE,eAAO,MAAM,oBAAoB;aAAK,GAAG,EAAE,EAAE;aAAE,GAAG,EAAE,GAAG;aAAE,IAAI,EAAE,CAAC;CAAW,CAAC;AAE5E,qBAAqB;AACrB,eAAO,MAAM,MAAM;IAClB,yCAAyC;aACzC,aAAa,EAAE,GAAG;IAClB,+BAA+B;aAC/B,cAAc,EAAE,GAAG;IACnB,wBAAwB;aACxB,aAAa,EAAE,IAAI;IACnB,wCAAwC;aACxC,iBAAiB,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,uCAAuC;AACvC,eAAO,MAAM,UAAU;aAAK,GAAG,EAAE,CAAC;aAAE,GAAG,EAAE,EAAE;aAAE,IAAI,EAAE,GAAG;CAAW,CAAC;AAClE,eAAO,MAAM,YAAY;aAAK,GAAG,EAAE,EAAE;aAAE,GAAG,EAAE,GAAG;aAAE,IAAI,EAAE,CAAC;CAAW,CAAC;AACpE,eAAO,MAAM,oBAAoB;aAAK,GAAG,EAAE,EAAE;aAAE,GAAG,EAAE,GAAG;aAAE,IAAI,EAAE,CAAC;CAAW,CAAC;AAE5E,qBAAqB;AACrB,eAAO,MAAM,MAAM;IAClB,yCAAyC;aACzC,aAAa,EAAE,GAAG;IAClB,+BAA+B;aAC/B,cAAc,EAAE,GAAG;IACnB,wBAAwB;aACxB,aAAa,EAAE,IAAI;IACnB,wCAAwC;aACxC,iBAAiB,EAAE,GAAG;IACtB,+CAA+C;aAC/C,gBAAgB,EAAE,EAAE;CACX,CAAC;AAYX,2DAA2D;AAC3D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;iBA0B/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAE/E;AAED,uBAAuB;AACvB,eAAO,MAAM,WAAW,+BAA+B,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -14,6 +14,8 @@ export const TUNING = {
|
|
|
14
14
|
startPressure: 0.45,
|
|
15
15
|
/** 確定時の RDP 間引き許容誤差(world px、0 で無効)。 */
|
|
16
16
|
simplifyTolerance: 0.6,
|
|
17
|
+
/** 線の端を近くの線へつなぐ距離(screen px)。これに線の太さの半分を足す。 */
|
|
18
|
+
endpointSnapDist: 12,
|
|
17
19
|
};
|
|
18
20
|
// 組み込みの 4 種は必須。外から足したペンの太さも id をキーにして持てる。
|
|
19
21
|
const SizesSchema = z
|
|
@@ -41,6 +43,12 @@ export const FreedrawConfigSchema = z.object({
|
|
|
41
43
|
* 実行時は `freedraw:set-hit-test` イベントで切り替えられる。
|
|
42
44
|
*/
|
|
43
45
|
hitTest: z.enum(["stroke", "bounds"]).default("stroke"),
|
|
46
|
+
/**
|
|
47
|
+
* 手を離したとき、線の端が同じペンの近くの線に入っていたら、その線のいちばん近い点まで
|
|
48
|
+
* 伸ばしてつなぐ。実行時は `freedraw:set-endpoint-snap` イベントで切り替えられる。
|
|
49
|
+
* Ctrl / ⌘ を押しながら離すと、その線だけ逆になる。
|
|
50
|
+
*/
|
|
51
|
+
endpointSnap: z.boolean().default(false),
|
|
44
52
|
/** ペン先カーソル表示。 */
|
|
45
53
|
cursorPreview: z.boolean().default(true),
|
|
46
54
|
/** 設定の localStorage 永続化を行うか。 */
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE1E,uCAAuC;AACvC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAW,CAAC;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAW,CAAC;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAW,CAAC;AAE5E,qBAAqB;AACrB,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,yCAAyC;IACzC,aAAa,EAAE,GAAG;IAClB,+BAA+B;IAC/B,cAAc,EAAE,GAAG;IACnB,wBAAwB;IACxB,aAAa,EAAE,IAAI;IACnB,wCAAwC;IACxC,iBAAiB,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/custom-pens.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface FinalizedStroke {
|
|
|
14
14
|
* 変わり、`penData` はそのまま写されるので、座標(点列から作った形など)は入れない。
|
|
15
15
|
*/
|
|
16
16
|
penData?: Record<string, unknown>;
|
|
17
|
+
/** `false` なら端をつながない(周回コースのように端が無い線)。既定 `true`。 */
|
|
18
|
+
snapEnds?: boolean;
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* 外から足すペンの定義(`createFreedrawPlugin(config, { pens })` で渡す)。
|
|
@@ -48,6 +50,11 @@ export interface FreedrawPenDefinition {
|
|
|
48
50
|
* 省略時は `size / 2`。
|
|
49
51
|
*/
|
|
50
52
|
halfWidth?(size: number): number;
|
|
53
|
+
/**
|
|
54
|
+
* 端をつなぐ距離(world px、`endpointSnap` が有効なとき)。省略時は
|
|
55
|
+
* 画面上の数 px + `halfWidth(size)`。
|
|
56
|
+
*/
|
|
57
|
+
snapDistance?(size: number): number;
|
|
51
58
|
}
|
|
52
59
|
/** 組み込みのペンの id なら例外にする(登録より前に全部確かめるため分けている)。 */
|
|
53
60
|
export declare function assertCustomPenId(id: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-pens.d.ts","sourceRoot":"","sources":["../src/custom-pens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAW,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1E,uBAAuB;AACvB,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC/B,wBAAwB;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-pens.d.ts","sourceRoot":"","sources":["../src/custom-pens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAW,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1E,uBAAuB;AACvB,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC/B,wBAAwB;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACrC,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAAC;IAC/C,8DAA8D;IAC9D,WAAW,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAAC;IACrD;;;OAGG;IACH,QAAQ,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,CAAC;IACzE;;;OAGG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC;;;OAGG;IACH,YAAY,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACpC;AAkBD,gDAAgD;AAChD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAmBlE;AAED,+BAA+B;AAC/B,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,GAAG,SAAS,CAE1F;AAED,yBAAyB;AACzB,wBAAgB,kBAAkB,IAAI,qBAAqB,EAAE,CAE5D;AAED,yBAAyB;AACzB,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAK7D;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,GAAG,EAAE,qBAAqB,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzF"}
|
package/dist/custom-pens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-pens.js","sourceRoot":"","sources":["../src/custom-pens.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"custom-pens.js","sourceRoot":"","sources":["../src/custom-pens.ts"],"names":[],"mappings":"AA4DA,yDAAyD;AACzD,iDAAiD;AACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyD,CAAC;AAClF,gEAAgE;AAChE,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAU;IAC1D,WAAW;IACX,MAAM;IACN,OAAO;IACP,aAAa;CACb,CAAC,CAAC;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AAExC,MAAM,MAAM,GAAG,GAAG,EAAE;IACnB,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,CAAC,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;AACrF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAA0B;IACrD,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG;QAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;SACtC,CAAC;QACL,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC;IACV,CAAC;IACD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,EAAE;QACX,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;YAAE,OAAO;QACxC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QACjB,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;YAAE,OAAO;QAC5B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,EAAE,CAAC;IACV,CAAC,CAAC;AACH,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,gBAAgB,CAAC,EAAsB;IACtD,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAC7D,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,kBAAkB;IACjC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,YAAY,CAAC,QAAoB;IAChD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACX,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,YAAY,CAAC,GAAsC,EAAE,IAAY;IAChF,MAAM,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC;IACzB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
package/dist/draw-tool.d.ts
CHANGED
|
@@ -8,5 +8,9 @@ export interface DrawController {
|
|
|
8
8
|
/** ツール無効化時のクリーンアップ。 */
|
|
9
9
|
reset(): void;
|
|
10
10
|
}
|
|
11
|
-
export
|
|
11
|
+
export interface DrawControllerOptions {
|
|
12
|
+
/** 線の端を同じペンの近くの線へつなぐか(Ctrl / ⌘ を押しながら離すと逆になる)。 */
|
|
13
|
+
endpointSnap?: () => boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function createDrawController(settings: FreedrawSettingsStore, pointer: PointerStore, options?: DrawControllerOptions): DrawController;
|
|
12
16
|
//# sourceMappingURL=draw-tool.d.ts.map
|
package/dist/draw-tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draw-tool.d.ts","sourceRoot":"","sources":["../src/draw-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,kBAAkB,EAIvB,KAAK,WAAW,EAChB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"draw-tool.d.ts","sourceRoot":"","sources":["../src/draw-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,kBAAkB,EAIvB,KAAK,WAAW,EAChB,MAAM,uBAAuB,CAAC;AAU/B,OAAO,EAAE,KAAK,qBAAqB,EAAW,MAAM,qBAAqB,CAAC;AAE1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAyC3D,MAAM,WAAW,cAAc;IAC9B,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrE,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrE,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnE,uBAAuB;IACvB,KAAK,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACrC,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;CAC7B;AAcD,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,qBAA0B,GACjC,cAAc,CAoMhB"}
|
package/dist/draw-tool.js
CHANGED
|
@@ -2,11 +2,12 @@ import { DEFAULT_STYLE, generateId, } from "@edv4h/usketch-shared";
|
|
|
2
2
|
import { createAddShapeCommand } from "@edv4h/usketch-store";
|
|
3
3
|
import { TUNING } from "./config.js";
|
|
4
4
|
import { getPenDefinition } from "./custom-pens.js";
|
|
5
|
+
import { snapEndpoints } from "./endpoint-snap.js";
|
|
5
6
|
import { createEraseStrokesCommand, findErasedStrokes } from "./eraser.js";
|
|
6
7
|
import { smoothPressure, speedPressure } from "./geometry/brush-outline.js";
|
|
7
8
|
import { penHalfWidth } from "./geometry/hit.js";
|
|
8
9
|
import { simplifyPoints } from "./geometry/simplify.js";
|
|
9
|
-
import { penMeta } from "./pen-meta.js";
|
|
10
|
+
import { DEFAULT_PEN, penMeta } from "./pen-meta.js";
|
|
10
11
|
import { penSize } from "./settings-store.js";
|
|
11
12
|
function boundsOf(points, pad) {
|
|
12
13
|
let minX = Number.POSITIVE_INFINITY;
|
|
@@ -31,7 +32,20 @@ function boundsOf(points, pad) {
|
|
|
31
32
|
};
|
|
32
33
|
}
|
|
33
34
|
const now = () => (typeof performance !== "undefined" ? performance.now() : Date.now());
|
|
34
|
-
|
|
35
|
+
/** つなぐ相手: 同じペンの、確定した freedraw の線。 */
|
|
36
|
+
function snapTargets(toolCtx, pen, selfId) {
|
|
37
|
+
const out = [];
|
|
38
|
+
for (const [, shape] of toolCtx.store.getShapes()) {
|
|
39
|
+
if (shape.type !== "freedraw" || shape.id === selfId)
|
|
40
|
+
continue;
|
|
41
|
+
const f = shape;
|
|
42
|
+
if (f.draft || (f.pen ?? DEFAULT_PEN) !== pen)
|
|
43
|
+
continue;
|
|
44
|
+
out.push(f);
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
export function createDrawController(settings, pointer, options = {}) {
|
|
35
49
|
let stroke = null;
|
|
36
50
|
let erase = null;
|
|
37
51
|
let raf = 0;
|
|
@@ -151,7 +165,7 @@ export function createDrawController(settings, pointer) {
|
|
|
151
165
|
stroke.lastT = now();
|
|
152
166
|
flush(toolCtx);
|
|
153
167
|
},
|
|
154
|
-
onPointerUp(toolCtx,
|
|
168
|
+
onPointerUp(toolCtx, event) {
|
|
155
169
|
const s = settings.getSnapshot();
|
|
156
170
|
if (s.mode === "eraser") {
|
|
157
171
|
if (erase) {
|
|
@@ -174,10 +188,21 @@ export function createDrawController(settings, pointer) {
|
|
|
174
188
|
// 確定: scratch を削除 → 間引き →(外から足したペンは finalize)→ undo 可能な追加コマンド。
|
|
175
189
|
toolCtx.store.deleteShape(cur.id);
|
|
176
190
|
const simplified = simplifyPoints(cur.points, TUNING.simplifyTolerance);
|
|
177
|
-
const
|
|
178
|
-
const
|
|
191
|
+
const def = getPenDefinition(cur.pen);
|
|
192
|
+
const finalized = def?.finalize?.(simplified, { size: cur.size });
|
|
193
|
+
let points = finalized?.points ?? simplified;
|
|
179
194
|
if (points.length === 0)
|
|
180
195
|
return;
|
|
196
|
+
let joins;
|
|
197
|
+
const snapOn = (options.endpointSnap?.() ?? false) !== (event.ctrlKey || event.metaKey);
|
|
198
|
+
if (snapOn && finalized?.snapEnds !== false) {
|
|
199
|
+
const zoom = toolCtx.store.getViewport().zoom || 1;
|
|
200
|
+
const maxDist = def?.snapDistance?.(cur.size) ??
|
|
201
|
+
TUNING.endpointSnapDist / zoom + penHalfWidth(cur.pen, cur.size);
|
|
202
|
+
const snapped = snapEndpoints(points, snapTargets(toolCtx, cur.pen, cur.id), maxDist);
|
|
203
|
+
points = snapped.points;
|
|
204
|
+
joins = snapped.joins;
|
|
205
|
+
}
|
|
181
206
|
const pad = penHalfWidth(cur.pen, cur.size);
|
|
182
207
|
const b = boundsOf(points, pad);
|
|
183
208
|
const shape = {
|
|
@@ -191,6 +216,7 @@ export function createDrawController(settings, pointer) {
|
|
|
191
216
|
points,
|
|
192
217
|
pen: cur.pen,
|
|
193
218
|
...(finalized?.penData ? { penData: finalized.penData } : {}),
|
|
219
|
+
...(joins ? { joins } : {}),
|
|
194
220
|
};
|
|
195
221
|
toolCtx.commands.execute(createAddShapeCommand(toolCtx.store, shape));
|
|
196
222
|
},
|
package/dist/draw-tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draw-tool.js","sourceRoot":"","sources":["../src/draw-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,aAAa,EACb,UAAU,GAGV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"draw-tool.js","sourceRoot":"","sources":["../src/draw-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FreedrawShapeData, StrokeJoins, StrokePoint } from "./types.js";
|
|
2
|
+
export interface Nearest {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
dist: number;
|
|
6
|
+
}
|
|
7
|
+
/** 点 q から折れ線 pts へのいちばん近い点。 */
|
|
8
|
+
export declare function nearestOnPolyline(q: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
}, pts: readonly StrokePoint[]): Nearest | null;
|
|
12
|
+
/**
|
|
13
|
+
* 始点・終点が `targets` のどれかから `maxDist` 以内なら、その線のいちばん近い点まで
|
|
14
|
+
* 線を伸ばす(端の点を動かさず、点を 1 つ足す)。つないだ端を `joins` に返す。
|
|
15
|
+
* 2 点未満の線(点)はつながない。
|
|
16
|
+
*/
|
|
17
|
+
export declare function snapEndpoints(points: readonly StrokePoint[], targets: readonly FreedrawShapeData[], maxDist: number): {
|
|
18
|
+
points: StrokePoint[];
|
|
19
|
+
joins?: StrokeJoins;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=endpoint-snap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-snap.d.ts","sourceRoot":"","sources":["../src/endpoint-snap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,WAAW,OAAO;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;CACb;AAED,+BAA+B;AAC/B,wBAAgB,iBAAiB,CAChC,CAAC,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3B,GAAG,EAAE,SAAS,WAAW,EAAE,GACzB,OAAO,GAAG,IAAI,CAqBhB;AAwBD;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,OAAO,EAAE,MAAM,GACb;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAAE,CAkBhD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** 点 q から折れ線 pts へのいちばん近い点。 */
|
|
2
|
+
export function nearestOnPolyline(q, pts) {
|
|
3
|
+
if (pts.length === 0)
|
|
4
|
+
return null;
|
|
5
|
+
let best = {
|
|
6
|
+
x: pts[0].x,
|
|
7
|
+
y: pts[0].y,
|
|
8
|
+
dist: Math.hypot(q.x - pts[0].x, q.y - pts[0].y),
|
|
9
|
+
};
|
|
10
|
+
for (let i = 1; i < pts.length; i++) {
|
|
11
|
+
const a = pts[i - 1];
|
|
12
|
+
const b = pts[i];
|
|
13
|
+
const dx = b.x - a.x;
|
|
14
|
+
const dy = b.y - a.y;
|
|
15
|
+
const len2 = dx * dx + dy * dy;
|
|
16
|
+
const t = len2 === 0 ? 0 : Math.max(0, Math.min(1, ((q.x - a.x) * dx + (q.y - a.y) * dy) / len2));
|
|
17
|
+
const x = a.x + dx * t;
|
|
18
|
+
const y = a.y + dy * t;
|
|
19
|
+
const dist = Math.hypot(q.x - x, q.y - y);
|
|
20
|
+
if (dist < best.dist)
|
|
21
|
+
best = { x, y, dist };
|
|
22
|
+
}
|
|
23
|
+
return best;
|
|
24
|
+
}
|
|
25
|
+
function nearestAmong(q, targets, maxDist) {
|
|
26
|
+
let best = null;
|
|
27
|
+
for (const t of targets) {
|
|
28
|
+
// 外接矩形で先に弾く(shape.x/y/width/height は太さぶん広げてある)。
|
|
29
|
+
if (q.x < t.x - maxDist ||
|
|
30
|
+
q.y < t.y - maxDist ||
|
|
31
|
+
q.x > t.x + t.width + maxDist ||
|
|
32
|
+
q.y > t.y + t.height + maxDist) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const n = nearestOnPolyline(q, t.points ?? []);
|
|
36
|
+
if (n && n.dist <= maxDist && (!best || n.dist < best.dist))
|
|
37
|
+
best = n;
|
|
38
|
+
}
|
|
39
|
+
return best;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 始点・終点が `targets` のどれかから `maxDist` 以内なら、その線のいちばん近い点まで
|
|
43
|
+
* 線を伸ばす(端の点を動かさず、点を 1 つ足す)。つないだ端を `joins` に返す。
|
|
44
|
+
* 2 点未満の線(点)はつながない。
|
|
45
|
+
*/
|
|
46
|
+
export function snapEndpoints(points, targets, maxDist) {
|
|
47
|
+
const out = [...points];
|
|
48
|
+
if (out.length < 2 || targets.length === 0 || !(maxDist > 0))
|
|
49
|
+
return { points: out };
|
|
50
|
+
const joins = {};
|
|
51
|
+
const first = out[0];
|
|
52
|
+
const last = out[out.length - 1];
|
|
53
|
+
const s = nearestAmong(first, targets, maxDist);
|
|
54
|
+
const e = nearestAmong(last, targets, maxDist);
|
|
55
|
+
const EPS = 1e-6;
|
|
56
|
+
if (s) {
|
|
57
|
+
if (s.dist > EPS)
|
|
58
|
+
out.unshift({ x: s.x, y: s.y, p: first.p });
|
|
59
|
+
joins.start = true;
|
|
60
|
+
}
|
|
61
|
+
if (e) {
|
|
62
|
+
if (e.dist > EPS)
|
|
63
|
+
out.push({ x: e.x, y: e.y, p: last.p });
|
|
64
|
+
joins.end = true;
|
|
65
|
+
}
|
|
66
|
+
return joins.start || joins.end ? { points: out, joins } : { points: out };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=endpoint-snap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-snap.js","sourceRoot":"","sources":["../src/endpoint-snap.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { type FreedrawConfig, type FreedrawConfigInput, FreedrawConfigSchema, parseFreedrawConfig, } from "./config.js";
|
|
2
2
|
export type { FinalizedStroke, FreedrawPenDefinition, PenSizeRange } from "./custom-pens.js";
|
|
3
|
+
export { type Nearest, nearestOnPolyline, snapEndpoints } from "./endpoint-snap.js";
|
|
3
4
|
export { type FreedrawApi, type FreedrawCurrentSettings, type FreedrawPenInfo, freedrawService, getFreedrawApi, listPens, } from "./freedraw-service.js";
|
|
4
5
|
export { penHalfWidth } from "./geometry/hit.js";
|
|
5
6
|
export { DEFAULT_PEN, PEN_KINDS, PEN_META, PRESET_COLORS } from "./pen-meta.js";
|
|
6
7
|
export { createFreedrawPlugin, type FreedrawPluginOptions } from "./plugin.js";
|
|
7
8
|
export type { FreedrawMode } from "./settings-store.js";
|
|
8
9
|
export type { FreedrawHitTestMode } from "./shape.js";
|
|
9
|
-
export type { FreedrawShapeData, PenId, PenKind, StrokePoint } from "./types.js";
|
|
10
|
+
export type { FreedrawShapeData, PenId, PenKind, StrokeJoins, StrokePoint } from "./types.js";
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,eAAe,EACf,cAAc,EACd,QAAQ,GACR,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC/E,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,KAAK,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,eAAe,EACf,cAAc,EACd,QAAQ,GACR,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC/E,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { FreedrawConfigSchema, parseFreedrawConfig, } from "./config.js";
|
|
2
|
+
export { nearestOnPolyline, snapEndpoints } from "./endpoint-snap.js";
|
|
2
3
|
export { freedrawService, getFreedrawApi, listPens, } from "./freedraw-service.js";
|
|
3
4
|
export { penHalfWidth } from "./geometry/hit.js";
|
|
4
5
|
export { DEFAULT_PEN, PEN_KINDS, PEN_META, PRESET_COLORS } from "./pen-meta.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAIN,eAAe,EACf,cAAc,EACd,QAAQ,GACR,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAA8B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAgB,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAIN,eAAe,EACf,cAAc,EACd,QAAQ,GACR,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAA8B,MAAM,aAAa,CAAC"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAGN,KAAK,qBAAqB,EAG1B,MAAM,kBAAkB,CAAC;AA4C1B,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,IAAI,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC/B;AAID,wBAAgB,oBAAoB,CACnC,WAAW,CAAC,EAAE,mBAAmB,EACjC,OAAO,GAAE,qBAA0B,GACjC,aAAa,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAGN,KAAK,qBAAqB,EAG1B,MAAM,kBAAkB,CAAC;AA4C1B,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,IAAI,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC/B;AAID,wBAAgB,oBAAoB,CACnC,WAAW,CAAC,EAAE,mBAAmB,EACjC,OAAO,GAAE,qBAA0B,GACjC,aAAa,CAkLf"}
|
package/dist/plugin.js
CHANGED
|
@@ -46,7 +46,8 @@ export function createFreedrawPlugin(configInput, options = {}) {
|
|
|
46
46
|
const offService = freedrawService.provide(ctx.services, createFreedrawApi(settings));
|
|
47
47
|
const pointer = createPointerStore();
|
|
48
48
|
const active = createBoolStore(ctx.store.getActiveToolId() === TOOL_ID);
|
|
49
|
-
|
|
49
|
+
let endpointSnap = config.endpointSnap;
|
|
50
|
+
const draw = createDrawController(settings, pointer, { endpointSnap: () => endpointSnap });
|
|
50
51
|
let hitMode = config.hitTest;
|
|
51
52
|
ctx.shapes.register("freedraw", createFreedrawShapeDefinition(() => hitMode));
|
|
52
53
|
ctx.tools.register(TOOL_ID, {
|
|
@@ -100,6 +101,10 @@ export function createFreedrawPlugin(configInput, options = {}) {
|
|
|
100
101
|
settings.update({ sizes: { ...cur.sizes, [cur.pen]: clamped } });
|
|
101
102
|
}
|
|
102
103
|
});
|
|
104
|
+
const offEndpointSnap = ctx.events.on("freedraw:set-endpoint-snap", ({ enabled }) => {
|
|
105
|
+
if (typeof enabled === "boolean")
|
|
106
|
+
endpointSnap = enabled;
|
|
107
|
+
});
|
|
103
108
|
const offHitTest = ctx.events.on("freedraw:set-hit-test", ({ mode }) => {
|
|
104
109
|
if (mode === "stroke" || mode === "bounds")
|
|
105
110
|
hitMode = mode;
|
|
@@ -178,6 +183,7 @@ export function createFreedrawPlugin(configInput, options = {}) {
|
|
|
178
183
|
offSize();
|
|
179
184
|
offEraser();
|
|
180
185
|
offHitTest();
|
|
186
|
+
offEndpointSnap();
|
|
181
187
|
for (const off of offActions)
|
|
182
188
|
off();
|
|
183
189
|
if (typeof window !== "undefined") {
|
package/dist/plugin.js.map
CHANGED
|
@@ -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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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -28,5 +28,15 @@ export interface FreedrawShapeData extends ShapeData {
|
|
|
28
28
|
penData?: Record<string, unknown>;
|
|
29
29
|
/** 描いている最中の仮のストロークだけ `true`(確定で消える)。 */
|
|
30
30
|
draft?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* 端を近くの線へつないだか(`endpointSnap`)。`start` は points の先頭、`end` は末尾。
|
|
33
|
+
* 座標は持たないので、移動・拡大縮小でもそのまま写る。
|
|
34
|
+
*/
|
|
35
|
+
joins?: StrokeJoins;
|
|
36
|
+
}
|
|
37
|
+
/** {@link FreedrawShapeData.joins}。 */
|
|
38
|
+
export interface StrokeJoins {
|
|
39
|
+
start?: true;
|
|
40
|
+
end?: true;
|
|
31
41
|
}
|
|
32
42
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,kDAAkD;AAClD,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE5C;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IACnD,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,wCAAwC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,kDAAkD;AAClD,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE5C;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IACnD,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,wCAAwC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC3B,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,CAAC;CACX"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edv4h/usketch-plugin-shape-freedraw",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@edv4h/usketch-core": "2.4.
|
|
16
|
-
"@edv4h/usketch-shared": "4.
|
|
17
|
-
"@edv4h/usketch-store": "3.11.
|
|
15
|
+
"@edv4h/usketch-core": "2.4.12",
|
|
16
|
+
"@edv4h/usketch-shared": "4.22.0",
|
|
17
|
+
"@edv4h/usketch-store": "3.11.4",
|
|
18
18
|
"perfect-freehand": "^1.2.2",
|
|
19
19
|
"zod": "^4.0.0"
|
|
20
20
|
},
|