@edv4h/usketch-plugin-viewport-nav 2.1.0 → 2.2.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 CHANGED
@@ -23,10 +23,16 @@ createViewportNavPlugin({ zoomSensitivity: 2.5 });
23
23
  interface ViewportNavOptions {
24
24
  /**
25
25
  * ホイール/トラックパッドのズーム感度。`1` が既定で従来相当。
26
- * 大きいほど 1 操作あたりの倍率変化が大きくなる(0.25〜3 にクランプ)。
26
+ * 大きいほど 1 操作あたりの倍率変化が大きくなる(既定 0.25〜6 にクランプ)。
27
27
  * 値だけでなく「ライブに読む getter」も渡せる(設定 UI からの即時反映用)。
28
28
  */
29
29
  zoomSensitivity?: number | (() => number);
30
+ /**
31
+ * zoomSensitivity のクランプ範囲。既定 { min: 0.25, max: 6 }。
32
+ * タッチ/トラックパッド主体のホストが可動域を広げる/狭める用途に使う。
33
+ * min > max などの破綻した指定は無視して既定にフォールバックする。
34
+ */
35
+ zoomSensitivityRange?: { min?: number; max?: number };
30
36
  }
31
37
  ```
32
38
 
@@ -53,3 +59,18 @@ let zoomSensitivity = 1;
53
59
  createViewportNavPlugin({ zoomSensitivity: () => zoomSensitivity });
54
60
  // 以降 zoomSensitivity を書き換えれば次のズームから反映される
55
61
  ```
62
+
63
+ ### クランプ可動域の上書き
64
+
65
+ 既定のクランプは `{ min: 0.25, max: 6 }`。タッチ/トラックパッド主体で更に速くしたい等、
66
+ ホスト側でスライダーの可動域を決めたい場合は `zoomSensitivityRange` で上書きできる。
67
+
68
+ ```ts
69
+ // 最速を s=10 まで許容する
70
+ createViewportNavPlugin({
71
+ zoomSensitivity: () => hostSlider.value, // 例: 0.25〜10 のスライダー
72
+ zoomSensitivityRange: { max: 10 },
73
+ });
74
+ ```
75
+
76
+ 範囲は setup 時に一度だけ解決される(`zoomSensitivity` の getter は wheel ごとに評価)。
package/dist/plugin.d.ts CHANGED
@@ -2,12 +2,21 @@ import type { UsketchPlugin } from "@edv4h/usketch-shared";
2
2
  export interface ViewportNavOptions {
3
3
  /**
4
4
  * ホイール/トラックパッドのズーム感度。`1` が既定で従来相当。
5
- * 大きいほど 1 操作あたりの倍率変化が大きくなる({@link MIN_ZOOM_SENSITIVITY}〜{@link MAX_ZOOM_SENSITIVITY} にクランプ)。
5
+ * 大きいほど 1 操作あたりの倍率変化が大きくなる({@link ViewportNavOptions.zoomSensitivityRange} にクランプ)。
6
6
  *
7
7
  * 設定 UI からの即時反映のため、値だけでなく「ライブに読む getter」も渡せる。
8
8
  * getter は wheel イベントごとに評価される。
9
9
  */
10
10
  zoomSensitivity?: number | (() => number);
11
+ /**
12
+ * zoomSensitivity のクランプ範囲。既定 `{ min: 0.25, max: 6 }`。
13
+ * タッチ/トラックパッド主体のホストが可動域を広げる/狭める用途に使う。
14
+ * `min <= max` を満たさない/非有限な指定は無視して既定にフォールバックする。
15
+ */
16
+ zoomSensitivityRange?: {
17
+ min?: number;
18
+ max?: number;
19
+ };
11
20
  }
12
21
  export declare function createViewportNavPlugin(options?: ViewportNavOptions): UsketchPlugin;
13
22
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKX,aAAa,EACb,MAAM,uBAAuB,CAAC;AAW/B,MAAM,WAAW,kBAAkB;IAClC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CAC1C;AASD,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAyDnF"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKX,aAAa,EACb,MAAM,uBAAuB,CAAC;AAiB/B,MAAM,WAAW,kBAAkB;IAClC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAC1C;;;;OAIG;IACH,oBAAoB,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AA2BD,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa,CA4DnF"}
package/dist/plugin.js CHANGED
@@ -2,15 +2,29 @@
2
2
  * 既定感度(=1)で deltaY≈100 → factor≈exp(-0.1)≈0.905、deltaY≈-100 → ≈1.105 となり、
3
3
  * 従来の固定 0.9 / 1.1 とほぼ同じ体感になる。 */
4
4
  const ZOOM_STEP = 0.001;
5
- /** zoomSensitivity のクランプ範囲(極端な値で操作不能になるのを防ぐ)。 */
6
- const MIN_ZOOM_SENSITIVITY = 0.25;
7
- const MAX_ZOOM_SENSITIVITY = 3;
8
- /** number | (() => number) を解決し、有効な感度値へクランプする。 */
9
- function resolveZoomSensitivity(source) {
5
+ /** zoomSensitivity のクランプ既定範囲(極端な値で操作不能になるのを防ぐ)。
6
+ * ホストは {@link ViewportNavOptions.zoomSensitivityRange} で上書きできる。 */
7
+ const DEFAULT_MIN_ZOOM_SENSITIVITY = 0.25;
8
+ const DEFAULT_MAX_ZOOM_SENSITIVITY = 6;
9
+ /** オプションの範囲指定を検証済みの {min,max} に解決する(不正値は既定へフォールバック)。 */
10
+ function resolveRange(range) {
11
+ const min = typeof range?.min === "number" && Number.isFinite(range.min)
12
+ ? range.min
13
+ : DEFAULT_MIN_ZOOM_SENSITIVITY;
14
+ const max = typeof range?.max === "number" && Number.isFinite(range.max)
15
+ ? range.max
16
+ : DEFAULT_MAX_ZOOM_SENSITIVITY;
17
+ // 破綻した範囲(min > max)は既定に戻す。
18
+ if (min > max)
19
+ return { min: DEFAULT_MIN_ZOOM_SENSITIVITY, max: DEFAULT_MAX_ZOOM_SENSITIVITY };
20
+ return { min, max };
21
+ }
22
+ /** number | (() => number) を解決し、range へクランプする。不正値は 1(既定感度)。 */
23
+ function resolveZoomSensitivity(source, range) {
10
24
  const raw = typeof source === "function" ? source() : source;
11
25
  if (typeof raw !== "number" || !Number.isFinite(raw))
12
26
  return 1;
13
- return Math.min(MAX_ZOOM_SENSITIVITY, Math.max(MIN_ZOOM_SENSITIVITY, raw));
27
+ return Math.min(range.max, Math.max(range.min, raw));
14
28
  }
15
29
  export function createViewportNavPlugin(options) {
16
30
  return {
@@ -19,12 +33,14 @@ export function createViewportNavPlugin(options) {
19
33
  setup(ctx) {
20
34
  // ── Local pan state (scoped to this setup closure) ──
21
35
  let middlePanState = null;
36
+ // クランプ範囲は setup 時に一度だけ解決(zoomSensitivity 自体は getter で毎回読む)。
37
+ const range = resolveRange(options?.zoomSensitivityRange);
22
38
  // ── Wheel: zoom & pan ──
23
39
  const offWheel = ctx.events.on("canvas:wheel", (event) => {
24
40
  if (event.ctrlKey || event.metaKey) {
25
41
  // Zoom toward cursor — factor は deltaY の大きさに比例(トラックパッドのピンチも滑らか)
26
42
  const viewport = ctx.store.getViewport();
27
- const sensitivity = resolveZoomSensitivity(options?.zoomSensitivity);
43
+ const sensitivity = resolveZoomSensitivity(options?.zoomSensitivity, range);
28
44
  const factor = Math.exp(-event.deltaY * ZOOM_STEP * sensitivity);
29
45
  ctx.store.zoomTo(viewport.zoom * factor, event.screenPoint);
30
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edv4h/usketch-plugin-viewport-nav",
3
- "version": "2.1.0",
3
+ "version": "2.2.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.2",
16
- "@edv4h/usketch-shared": "4.12.0",
17
- "@edv4h/usketch-store": "3.5.4"
15
+ "@edv4h/usketch-core": "2.4.3",
16
+ "@edv4h/usketch-shared": "4.13.0",
17
+ "@edv4h/usketch-store": "3.7.0"
18
18
  },
19
19
  "devDependencies": {
20
20
  "typescript": "7.0.2",