@edv4h/usketch-plugin-mode7 0.2.1 → 0.3.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/README.md +18 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mode7-layers.d.ts.map +1 -1
- package/dist/mode7-layers.js +5 -2
- package/dist/mode7-layers.js.map +1 -1
- package/dist/mode7-runtime.d.ts.map +1 -1
- package/dist/mode7-runtime.js +5 -4
- package/dist/mode7-runtime.js.map +1 -1
- package/dist/mode7-service.d.ts +15 -6
- package/dist/mode7-service.d.ts.map +1 -1
- package/dist/mode7-service.js +6 -4
- package/dist/mode7-service.js.map +1 -1
- package/dist/mode7-store.d.ts +14 -0
- package/dist/mode7-store.d.ts.map +1 -1
- package/dist/mode7-store.js +19 -3
- package/dist/mode7-store.js.map +1 -1
- package/dist/mode7-transform.d.ts +10 -1
- package/dist/mode7-transform.d.ts.map +1 -1
- package/dist/mode7-transform.js +17 -2
- package/dist/mode7-transform.js.map +1 -1
- package/dist/mode7-transition.d.ts +34 -0
- package/dist/mode7-transition.d.ts.map +1 -0
- package/dist/mode7-transition.js +99 -0
- package/dist/mode7-transition.js.map +1 -0
- package/dist/plugin.d.ts +8 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +4 -1
- package/dist/plugin.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -39,6 +39,7 @@ createApp({
|
|
|
39
39
|
look: { sky: "#0b1026", fog: 0.35 },
|
|
40
40
|
// tiltLayerIds: [...], // 傾ける層を上書き
|
|
41
41
|
// shortcuts: { toggle: "…" }, // キーバインド(opt-in・既定なし)
|
|
42
|
+
// transition: { durationMs: 900, easing: "ease-in-out" }, // 切替アニメ(既定 0=即時)
|
|
42
43
|
}),
|
|
43
44
|
],
|
|
44
45
|
});
|
|
@@ -47,6 +48,21 @@ createApp({
|
|
|
47
48
|
有効化は HUD の「3Dビュー切替」アクション、サービス `getMode7Api(app.services)?.toggle()`、
|
|
48
49
|
またはイベント `app.events.emit("mode7:toggle")` のいずれでも可能。
|
|
49
50
|
|
|
51
|
+
### 切替アニメーション(`transition`)
|
|
52
|
+
|
|
53
|
+
`transition.durationMs` を指定すると、ON/OFF が**アニメーション**になる(既定 `0`=従来どおり即時)。
|
|
54
|
+
|
|
55
|
+
- **ON**: 地面が平ら(pitch 0)から `camera.pitch` までせり上がり、空・フォグがフェードイン。
|
|
56
|
+
- **OFF**: 逆再生し、平らに戻りきってから非アクティブになる(それまで capture 層が編集を塞ぐ)。
|
|
57
|
+
- 途中で切り替えると、**今の状態から逆再生**(ジャンプしない)。
|
|
58
|
+
- 保存されたカメラ/見た目は常に目標値のまま。アニメするのは描画値だけ(pitch・yaw を
|
|
59
|
+
遷移量でスケール、空/フォグは不透明度、描画距離の手前切り取りも同率でフェード)。
|
|
60
|
+
- 1 フレームにつき store 更新は 1 回。`prefers-reduced-motion` なら終了状態へ即時。
|
|
61
|
+
- 呼び出し単位で上書き可: `api.enable({ animate: true })` / `api.disable({ animate: false })`。
|
|
62
|
+
`durationMs` 未設定で `animate: true` の場合は 900ms。
|
|
63
|
+
- `api.isTransitioning()` / `api.getTransitionAmount()`(0…1)で進行中かを取れる。`onChange` は
|
|
64
|
+
遷移中も毎フレーム発火するので、ホスト側のオーバーレイを同期できる。
|
|
65
|
+
|
|
50
66
|
## カメラ
|
|
51
67
|
|
|
52
68
|
| パラメータ | 意味 | 範囲 |
|
|
@@ -91,7 +107,8 @@ api?.setPitch(60);
|
|
|
91
107
|
api?.setYaw(30);
|
|
92
108
|
```
|
|
93
109
|
|
|
94
|
-
`Mode7Api`: `isActive` / `enable` / `disable` / `toggle
|
|
110
|
+
`Mode7Api`: `isActive` / `enable` / `disable` / `toggle`(各 `{ animate? }`)/ `isTransitioning` /
|
|
111
|
+
`getTransitionAmount` / `getCamera` / `setPitch` / `setYaw` /
|
|
95
112
|
`setFov` / `setHorizon` / `adjust` / `getLook` / `setSky` / `setFog` / `setFogColor` / `reset` /
|
|
96
113
|
`getTiltLayers` / `setTiltLayers` / `toggleTiltLayer` / `getDrawDistance` / `setDrawDistance` /
|
|
97
114
|
`isCaptureFrameVisible` / `setCaptureFrameVisible` / `toggleCaptureFrame` / `getCaptureRect` / `onChange`。
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export { CAMERA_LIMITS, type Camera, DEFAULT_CAMERA, } from "./mode7-camera.js";
|
|
|
2
2
|
export { getMode7Api, type Mode7Api, mode7Service } from "./mode7-service.js";
|
|
3
3
|
export type { Look } from "./mode7-store.js";
|
|
4
4
|
export { drawDistanceClip, drawDistanceOverscanPx, fogBackground, skyBackground, type TiltTransform, tiltTransform, } from "./mode7-transform.js";
|
|
5
|
+
export { DEFAULT_TRANSITION_MS, type Mode7Easing, type Mode7SwitchOptions, type Mode7TransitionOptions, } from "./mode7-transition.js";
|
|
5
6
|
export { createMode7Plugin, type Mode7PluginOptions } from "./plugin.js";
|
|
6
7
|
export type { Mode7ActionKey, Mode7Shortcuts, } from "./register-mode7-actions.js";
|
|
7
8
|
//# 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,aAAa,EACb,KAAK,MAAM,EACX,cAAc,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACN,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,aAAa,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EACX,cAAc,EACd,cAAc,GACd,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,KAAK,MAAM,EACX,cAAc,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACN,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,aAAa,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EACX,cAAc,EACd,cAAc,GACd,MAAM,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { CAMERA_LIMITS, DEFAULT_CAMERA, } from "./mode7-camera.js";
|
|
2
2
|
export { getMode7Api, mode7Service } from "./mode7-service.js";
|
|
3
3
|
export { drawDistanceClip, drawDistanceOverscanPx, fogBackground, skyBackground, tiltTransform, } from "./mode7-transform.js";
|
|
4
|
+
export { DEFAULT_TRANSITION_MS, } from "./mode7-transition.js";
|
|
4
5
|
export { createMode7Plugin } from "./plugin.js";
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EAEb,cAAc,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAiB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EACN,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,aAAa,EAEb,aAAa,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAA2B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EAEb,cAAc,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAiB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EACN,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,aAAa,EAEb,aAAa,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,qBAAqB,GAIrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAA2B,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-layers.d.ts","sourceRoot":"","sources":["../src/mode7-layers.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiBnD,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"mode7-layers.d.ts","sourceRoot":"","sources":["../src/mode7-layers.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiBnD,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,sCAexD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,sCAmBrF;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,sCAcxD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC3B,GAAG,EACH,KAAK,EACL,QAAQ,GACR,EAAE;IACF,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,+BAwCA;AAED,MAAM,WAAW,eAAe;IAC/B,wDAAwD;IACxD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,wEAAwE;IACxE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC/D;AAED,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,QAAQ,GACR,EAAE;IACF,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;CAC1B,sCAoCA"}
|
package/dist/mode7-layers.js
CHANGED
|
@@ -11,7 +11,7 @@ function localCenter(e) {
|
|
|
11
11
|
return { x: e.clientX - r.left, y: e.clientY - r.top };
|
|
12
12
|
}
|
|
13
13
|
export function SkyLayer({ store }) {
|
|
14
|
-
const { active, camera, look } = useMode7(store);
|
|
14
|
+
const { active, amount, camera, look } = useMode7(store);
|
|
15
15
|
if (!active)
|
|
16
16
|
return null;
|
|
17
17
|
return (_jsx("div", { style: {
|
|
@@ -19,6 +19,8 @@ export function SkyLayer({ store }) {
|
|
|
19
19
|
inset: 0,
|
|
20
20
|
pointerEvents: "none",
|
|
21
21
|
background: skyBackground(look.sky, camera.horizon),
|
|
22
|
+
// Fades with the enter/exit transition (1 when settled).
|
|
23
|
+
opacity: amount,
|
|
22
24
|
} }));
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
@@ -47,7 +49,7 @@ export function CaptureFrameLayer({ store, zoom }) {
|
|
|
47
49
|
} }));
|
|
48
50
|
}
|
|
49
51
|
export function FogLayer({ store }) {
|
|
50
|
-
const { active, camera, look } = useMode7(store);
|
|
52
|
+
const { active, amount, camera, look } = useMode7(store);
|
|
51
53
|
if (!active || fogOpacity(look.fog) <= 0)
|
|
52
54
|
return null;
|
|
53
55
|
return (_jsx("div", { style: {
|
|
@@ -55,6 +57,7 @@ export function FogLayer({ store }) {
|
|
|
55
57
|
inset: 0,
|
|
56
58
|
pointerEvents: "none",
|
|
57
59
|
background: fogBackground(look.fogColor, look.fog, camera.horizon),
|
|
60
|
+
opacity: amount,
|
|
58
61
|
} }));
|
|
59
62
|
}
|
|
60
63
|
/**
|
package/dist/mode7-layers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-layers.js","sourceRoot":"","sources":["../src/mode7-layers.tsx"],"names":[],"mappings":";AASA,OAAO,EAA0C,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAE7F,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEhF,SAAS,QAAQ,CAAC,KAAiB;IAClC,OAAO,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9E,CAAC;AAED;sFACsF;AACtF,SAAS,WAAW,CAAC,CAA+D;IAInF,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;IAClD,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAyB;IACxD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mode7-layers.js","sourceRoot":"","sources":["../src/mode7-layers.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-runtime.d.ts","sourceRoot":"","sources":["../src/mode7-runtime.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"mode7-runtime.d.ts","sourceRoot":"","sources":["../src/mode7-runtime.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnD,iDAAiD;AACjD,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAoC5D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,IAAI,CA+KnF"}
|
package/dist/mode7-runtime.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { CaptureFrameLayer, CaptureLayer, FogLayer, SkyLayer } from "./mode7-layers.js";
|
|
3
|
-
import { drawDistanceClip, drawDistanceOverscanPx, tiltTransform } from "./mode7-transform.js";
|
|
3
|
+
import { drawDistanceClip, drawDistanceOverscanPx, tiltTransform, transitionCamera, } from "./mode7-transform.js";
|
|
4
4
|
/** The plugin's own layer ids (never tilted). */
|
|
5
5
|
export const SKY_LAYER_ID = "mode7-sky";
|
|
6
6
|
export const FOG_LAYER_ID = "mode7-fog";
|
|
@@ -74,8 +74,9 @@ export function setupMode7Runtime(ctx, store) {
|
|
|
74
74
|
ensureStyleEl();
|
|
75
75
|
if (!styleEl)
|
|
76
76
|
return;
|
|
77
|
-
const { camera, drawDistance } = store.getState();
|
|
78
|
-
|
|
77
|
+
const { camera, drawDistance, amount } = store.getState();
|
|
78
|
+
// During an enter/exit transition the tilt is scaled by the eased amount.
|
|
79
|
+
const { transform, transformOrigin } = tiltTransform(transitionCamera(camera, amount));
|
|
79
80
|
// Clip each tilted wrapper (so overflow:visible doesn't float content past the
|
|
80
81
|
// grid); a finite draw distance tightens the top, one beyond the viewport lets it
|
|
81
82
|
// extend (negative inset) with the grid overscanned to match. Distance is canvas
|
|
@@ -83,7 +84,7 @@ export function setupMode7Runtime(ctx, store) {
|
|
|
83
84
|
// changes. clip-path keeps the tilt (overflow flattens).
|
|
84
85
|
const zoom = ctx.store.getViewport().zoom;
|
|
85
86
|
const heightPx = container.getBoundingClientRect().height;
|
|
86
|
-
const clip = drawDistanceClip(drawDistance, zoom, heightPx);
|
|
87
|
+
const clip = drawDistanceClip(drawDistance, zoom, heightPx, amount);
|
|
87
88
|
const overscan = drawDistanceOverscanPx(drawDistance, zoom, heightPx);
|
|
88
89
|
driveGridOverscan(overscan > 0 ? overscan + OVERSCAN_BUFFER : 0);
|
|
89
90
|
const clipRule = `clip-path:${clip} !important;`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-runtime.js","sourceRoot":"","sources":["../src/mode7-runtime.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAExF,OAAO,
|
|
1
|
+
{"version":3,"file":"mode7-runtime.js","sourceRoot":"","sources":["../src/mode7-runtime.tsx"],"names":[],"mappings":"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"}
|
package/dist/mode7-service.d.ts
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import { type BoundingBox, type ServiceRegistry } from "@edv4h/usketch-shared";
|
|
2
2
|
import type { Camera } from "./mode7-camera.js";
|
|
3
3
|
import type { Look, Mode7Store } from "./mode7-store.js";
|
|
4
|
+
import type { Mode7SwitchOptions, Mode7Transition } from "./mode7-transition.js";
|
|
4
5
|
export interface Mode7Api {
|
|
5
|
-
/** Whether the 3D view is currently
|
|
6
|
+
/** Whether the 3D view is currently shown (still `true` during an exit transition). */
|
|
6
7
|
isActive(): boolean;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/** Turn the view on. `{ animate: true }` raises the ground from flat and fades the
|
|
9
|
+
* sky/fog in; the default follows the plugin's `transition` option. */
|
|
10
|
+
enable(opts?: Mode7SwitchOptions): void;
|
|
11
|
+
/** Turn the view off (animated: back to flat, then inactive). */
|
|
12
|
+
disable(opts?: Mode7SwitchOptions): void;
|
|
13
|
+
/** Flip the view; mid-transition it reverses from the current state. */
|
|
14
|
+
toggle(opts?: Mode7SwitchOptions): void;
|
|
15
|
+
/** Whether an enter/exit transition is running (fires `onChange` per frame). */
|
|
16
|
+
isTransitioning(): boolean;
|
|
17
|
+
/** The rendered transition amount, 0 (flat/off) … 1 (fully 3D), eased. */
|
|
18
|
+
getTransitionAmount(): number;
|
|
10
19
|
/** The current camera geometry. */
|
|
11
20
|
getCamera(): Camera;
|
|
12
21
|
setPitch(deg: number): void;
|
|
@@ -40,11 +49,11 @@ export interface Mode7Api {
|
|
|
40
49
|
toggleCaptureFrame(): void;
|
|
41
50
|
/** The world rect captured at the last switch-on, or `null`. */
|
|
42
51
|
getCaptureRect(): BoundingBox | null;
|
|
43
|
-
/** Fire on any active/camera/look/tilt-layer/frame change. Returns an unsubscribe. */
|
|
52
|
+
/** Fire on any active/transition/camera/look/tilt-layer/frame change. Returns an unsubscribe. */
|
|
44
53
|
onChange(listener: () => void): () => void;
|
|
45
54
|
}
|
|
46
55
|
export declare const mode7Service: import("@edv4h/usketch-shared").ServiceHandle<Mode7Api>;
|
|
47
|
-
export declare function createMode7Api(store: Mode7Store): Mode7Api;
|
|
56
|
+
export declare function createMode7Api(store: Mode7Store, transition: Mode7Transition): Mode7Api;
|
|
48
57
|
/** Host accessor: `getMode7Api(app.services)?.toggle()`. Undefined when inactive. */
|
|
49
58
|
export declare function getMode7Api(services: ServiceRegistry): Mode7Api | undefined;
|
|
50
59
|
//# sourceMappingURL=mode7-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-service.d.ts","sourceRoot":"","sources":["../src/mode7-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAiB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"mode7-service.d.ts","sourceRoot":"","sources":["../src/mode7-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAiB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEjF,MAAM,WAAW,QAAQ;IACxB,uFAAuF;IACvF,QAAQ,IAAI,OAAO,CAAC;IACpB;4EACwE;IACxE,MAAM,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,iEAAiE;IACjE,OAAO,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,wEAAwE;IACxE,MAAM,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,gFAAgF;IAChF,eAAe,IAAI,OAAO,CAAC;IAC3B,0EAA0E;IAC1E,mBAAmB,IAAI,MAAM,CAAC;IAC9B,mCAAmC;IACnC,SAAS,IAAI,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kDAAkD;IAClD,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACrC,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,qEAAqE;IACrE,KAAK,IAAI,IAAI,CAAC;IACd,8CAA8C;IAC9C,aAAa,IAAI,SAAS,MAAM,EAAE,CAAC;IACnC,iDAAiD;IACjD,aAAa,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,mDAAmD;IACnD,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sEAAsE;IACtE,eAAe,IAAI,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,4DAA4D;IAC5D,qBAAqB,IAAI,OAAO,CAAC;IACjC,2CAA2C;IAC3C,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,iDAAiD;IACjD,kBAAkB,IAAI,IAAI,CAAC;IAC3B,gEAAgE;IAChE,cAAc,IAAI,WAAW,GAAG,IAAI,CAAC;IACrC,iGAAiG;IACjG,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,YAAY,yDAAkD,CAAC;AAE5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,GAAG,QAAQ,CA8BvF;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,GAAG,SAAS,CAE3E"}
|
package/dist/mode7-service.js
CHANGED
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
// can drive the Mode 7 view without the HUD.
|
|
4
4
|
import { defineService } from "@edv4h/usketch-shared";
|
|
5
5
|
export const mode7Service = defineService("usketch-plugin-mode7");
|
|
6
|
-
export function createMode7Api(store) {
|
|
6
|
+
export function createMode7Api(store, transition) {
|
|
7
7
|
return {
|
|
8
8
|
isActive: () => store.getState().active,
|
|
9
|
-
enable: () =>
|
|
10
|
-
disable: () =>
|
|
11
|
-
toggle: () =>
|
|
9
|
+
enable: (opts) => transition.enable(opts),
|
|
10
|
+
disable: (opts) => transition.disable(opts),
|
|
11
|
+
toggle: (opts) => transition.toggle(opts),
|
|
12
|
+
isTransitioning: () => transition.isTransitioning(),
|
|
13
|
+
getTransitionAmount: () => store.getState().amount,
|
|
12
14
|
getCamera: () => store.getState().camera,
|
|
13
15
|
setPitch: (deg) => store.setCamera({ pitch: deg }),
|
|
14
16
|
setYaw: (deg) => store.setCamera({ yaw: deg }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-service.js","sourceRoot":"","sources":["../src/mode7-service.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,oFAAoF;AACpF,6CAA6C;AAC7C,OAAO,EAAoB,aAAa,EAAwB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"mode7-service.js","sourceRoot":"","sources":["../src/mode7-service.ts"],"names":[],"mappings":"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"}
|
package/dist/mode7-store.d.ts
CHANGED
|
@@ -22,7 +22,16 @@ export declare const DEFAULT_DRAW_DISTANCE = 1500;
|
|
|
22
22
|
*/
|
|
23
23
|
export declare const DEFAULT_TILT_LAYER_IDS: readonly string[];
|
|
24
24
|
export interface Mode7State {
|
|
25
|
+
/** Whether the 3D view is shown. Stays `true` while an exit transition plays, so the
|
|
26
|
+
* capture layer keeps blocking edits until the board is flat again. */
|
|
25
27
|
active: boolean;
|
|
28
|
+
/** Linear transition progress, 0 (flat / off) … 1 (fully in 3D). Settled at `1`
|
|
29
|
+
* while active and `0` while inactive; only in between during a transition. */
|
|
30
|
+
progress: number;
|
|
31
|
+
/** The eased amount actually RENDERED (tilt scale, sky/fog opacity), 0 … 1. */
|
|
32
|
+
amount: number;
|
|
33
|
+
/** Whether an enter/exit transition is running. */
|
|
34
|
+
transitioning: boolean;
|
|
26
35
|
camera: Camera;
|
|
27
36
|
look: Look;
|
|
28
37
|
/** Layer ids currently rendered in 3D (user-selectable at runtime). */
|
|
@@ -48,11 +57,16 @@ export interface Mode7Init {
|
|
|
48
57
|
drawDistance?: number;
|
|
49
58
|
showCaptureFrame?: boolean;
|
|
50
59
|
}
|
|
60
|
+
/** The presentation fields a transition drives, set together in ONE update per frame. */
|
|
61
|
+
export type Mode7Presentation = Pick<Mode7State, "active" | "progress" | "amount" | "transitioning">;
|
|
51
62
|
export interface Mode7Store {
|
|
52
63
|
getState(): Mode7State;
|
|
53
64
|
subscribe(cb: () => void): () => void;
|
|
65
|
+
/** Switch instantly (settles progress/amount, cancels nothing — see the transition). */
|
|
54
66
|
setActive(active: boolean): void;
|
|
55
67
|
toggle(): void;
|
|
68
|
+
/** Set the transition-driven fields in one notification (used by the transition). */
|
|
69
|
+
setPresentation(p: Mode7Presentation): void;
|
|
56
70
|
setCamera(patch: Partial<Camera>): void;
|
|
57
71
|
adjustCamera(delta: Partial<Camera>): void;
|
|
58
72
|
setLook(patch: Partial<Look>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-store.d.ts","sourceRoot":"","sources":["../src/mode7-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAA6C,MAAM,mBAAmB,CAAC;AAE3F,+DAA+D;AAC/D,MAAM,WAAW,IAAI;IACpB,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,EAAE,IAAyD,CAAC;AAErF;mFACmF;AACnF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAQ1C;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EA+BnD,CAAC;AAEF,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,uEAAuE;IACvE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB;2FACuF;IACvF,YAAY,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IAC1B,QAAQ,IAAI,UAAU,CAAC;IACvB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IACtC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,MAAM,IAAI,IAAI,CAAC;IACf,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACxC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC3C,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,iDAAiD;IACjD,aAAa,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,mDAAmD;IACnD,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sFAAsF;IACtF,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,qDAAqD;IACrD,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,iDAAiD;IACjD,kBAAkB,IAAI,IAAI,CAAC;IAC3B,+EAA+E;IAC/E,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/C,KAAK,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,SAAc,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"mode7-store.d.ts","sourceRoot":"","sources":["../src/mode7-store.ts"],"names":[],"mappings":"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"}
|
package/dist/mode7-store.js
CHANGED
|
@@ -53,6 +53,9 @@ export function createMode7Store(init = {}) {
|
|
|
53
53
|
const baseLook = { ...DEFAULT_LOOK, ...init.look };
|
|
54
54
|
let state = {
|
|
55
55
|
active: init.active ?? false,
|
|
56
|
+
progress: init.active ? 1 : 0,
|
|
57
|
+
amount: init.active ? 1 : 0,
|
|
58
|
+
transitioning: false,
|
|
56
59
|
camera: baseCamera,
|
|
57
60
|
look: baseLook,
|
|
58
61
|
tiltLayers: [...(init.tiltLayers ?? DEFAULT_TILT_LAYER_IDS)],
|
|
@@ -74,13 +77,26 @@ export function createMode7Store(init = {}) {
|
|
|
74
77
|
};
|
|
75
78
|
},
|
|
76
79
|
setActive(active) {
|
|
77
|
-
|
|
80
|
+
const v = active ? 1 : 0;
|
|
81
|
+
if (state.active === active && state.progress === v && !state.transitioning)
|
|
78
82
|
return;
|
|
79
|
-
state = { ...state, active };
|
|
83
|
+
state = { ...state, active, progress: v, amount: v, transitioning: false };
|
|
80
84
|
notify();
|
|
81
85
|
},
|
|
82
86
|
toggle() {
|
|
83
|
-
|
|
87
|
+
const active = !state.active;
|
|
88
|
+
const v = active ? 1 : 0;
|
|
89
|
+
state = { ...state, active, progress: v, amount: v, transitioning: false };
|
|
90
|
+
notify();
|
|
91
|
+
},
|
|
92
|
+
setPresentation(p) {
|
|
93
|
+
if (state.active === p.active &&
|
|
94
|
+
state.progress === p.progress &&
|
|
95
|
+
state.amount === p.amount &&
|
|
96
|
+
state.transitioning === p.transitioning) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
state = { ...state, ...p };
|
|
84
100
|
notify();
|
|
85
101
|
},
|
|
86
102
|
setCamera(patch) {
|
package/dist/mode7-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-store.js","sourceRoot":"","sources":["../src/mode7-store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAY3F,MAAM,CAAC,MAAM,YAAY,GAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAErF;mFACmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAE1C,2FAA2F;AAC3F,SAAS,aAAa,CAAC,CAAS;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,CAAC;AACV,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACxD,wBAAwB;IACxB,SAAS;IACT,SAAS;IACT,iBAAiB;IACjB,YAAY;IACZ,YAAY;IACZ,uCAAuC;IACvC,+EAA+E;IAC/E,gBAAgB;IAChB,0BAA0B;IAC1B,wBAAwB;IACxB,qBAAqB;IACrB,wBAAwB;IACxB,yCAAyC;IACzC,6BAA6B;IAC7B,4BAA4B;IAC5B,wDAAwD;IACxD,aAAa;IACb,aAAa;IACb,OAAO;IACP,iBAAiB;IACjB,WAAW;IACX,eAAe;IACf,mBAAmB;IACnB,uBAAuB;IACvB,WAAW;IACX,QAAQ;IACR,2BAA2B;IAC3B,8EAA8E;IAC9E,WAAW;CACX,CAAC;
|
|
1
|
+
{"version":3,"file":"mode7-store.js","sourceRoot":"","sources":["../src/mode7-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,12 @@ export interface TiltTransform {
|
|
|
6
6
|
transformOrigin: string;
|
|
7
7
|
}
|
|
8
8
|
/** The full CSS transform (perspective + rotate) for a tilted layer wrapper. */
|
|
9
|
+
/**
|
|
10
|
+
* The camera as rendered at transition `amount` (0 = flat, 1 = the stored camera):
|
|
11
|
+
* pitch and yaw scale toward 0 so the ground rises from (and settles back to) the
|
|
12
|
+
* flat board without a heading snap. fov/horizon are kept — at pitch 0 they're inert.
|
|
13
|
+
*/
|
|
14
|
+
export declare function transitionCamera(cam: Camera, amount: number): Camera;
|
|
9
15
|
export declare function tiltTransform(cam: Camera): TiltTransform;
|
|
10
16
|
/**
|
|
11
17
|
* Sky backdrop (painted behind the tilted plane): a vertical gradient from the sky
|
|
@@ -39,7 +45,10 @@ export declare function fogOpacity(density: number): number;
|
|
|
39
45
|
* must be extended to match (see {@link drawDistanceOverscanPx}) or that far content
|
|
40
46
|
* would float; `clip-path` keeps the 3D tilt intact (unlike `overflow`, flattening).
|
|
41
47
|
*/
|
|
42
|
-
export declare function drawDistanceClip(distance: number, zoom: number, viewportHeightPx: number
|
|
48
|
+
export declare function drawDistanceClip(distance: number, zoom: number, viewportHeightPx: number,
|
|
49
|
+
/** Transition amount 0…1: a near-band clip fades in with the tilt, so the still-flat
|
|
50
|
+
* board isn't cut off at the top while the ground rises. */
|
|
51
|
+
strength?: number): string;
|
|
43
52
|
/**
|
|
44
53
|
* The px the background grid must extend ABOVE/BEYOND the viewport box to stay under the
|
|
45
54
|
* content that {@link drawDistanceClip} reveals for a draw `distance` larger than the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-transform.d.ts","sourceRoot":"","sources":["../src/mode7-transform.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC7B,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAKxD;AAUD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"mode7-transform.d.ts","sourceRoot":"","sources":["../src/mode7-transform.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC7B,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,gFAAgF;AAChF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIpE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAKxD;AAUD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM;AACxB;6DAC6D;AAC7D,QAAQ,SAAI,GACV,MAAM,CAeR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GACtB,MAAM,CAIR;AAuBD;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYzD"}
|
package/dist/mode7-transform.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
/** The full CSS transform (perspective + rotate) for a tilted layer wrapper. */
|
|
2
|
+
/**
|
|
3
|
+
* The camera as rendered at transition `amount` (0 = flat, 1 = the stored camera):
|
|
4
|
+
* pitch and yaw scale toward 0 so the ground rises from (and settles back to) the
|
|
5
|
+
* flat board without a heading snap. fov/horizon are kept — at pitch 0 they're inert.
|
|
6
|
+
*/
|
|
7
|
+
export function transitionCamera(cam, amount) {
|
|
8
|
+
const a = Math.min(1, Math.max(0, amount));
|
|
9
|
+
if (a === 1)
|
|
10
|
+
return cam;
|
|
11
|
+
return { ...cam, pitch: cam.pitch * a, yaw: cam.yaw * a };
|
|
12
|
+
}
|
|
2
13
|
export function tiltTransform(cam) {
|
|
3
14
|
return {
|
|
4
15
|
transform: `perspective(${round(cam.fov)}px) rotateX(${round(cam.pitch)}deg) rotateZ(${round(cam.yaw)}deg)`,
|
|
@@ -57,14 +68,18 @@ export function fogOpacity(density) {
|
|
|
57
68
|
* must be extended to match (see {@link drawDistanceOverscanPx}) or that far content
|
|
58
69
|
* would float; `clip-path` keeps the 3D tilt intact (unlike `overflow`, flattening).
|
|
59
70
|
*/
|
|
60
|
-
export function drawDistanceClip(distance, zoom, viewportHeightPx
|
|
71
|
+
export function drawDistanceClip(distance, zoom, viewportHeightPx,
|
|
72
|
+
/** Transition amount 0…1: a near-band clip fades in with the tilt, so the still-flat
|
|
73
|
+
* board isn't cut off at the top while the ground rises. */
|
|
74
|
+
strength = 1) {
|
|
61
75
|
if (!(distance > 0) || !(zoom > 0) || !(viewportHeightPx > 0)) {
|
|
62
76
|
return "inset(0% 0% 0% 0%)"; // auto → clip to the box
|
|
63
77
|
}
|
|
64
78
|
const bandPx = distance * zoom;
|
|
65
79
|
if (bandPx <= viewportHeightPx) {
|
|
66
80
|
// Within the viewport: keep only the near band; sides stay at the box.
|
|
67
|
-
|
|
81
|
+
const s = Math.min(1, Math.max(0, strength));
|
|
82
|
+
return `inset(${round((1 - bandPx / viewportHeightPx) * 100 * s)}% 0% 0% 0%)`;
|
|
68
83
|
}
|
|
69
84
|
// Beyond the viewport: extend equally on ALL sides so the far ground fans out
|
|
70
85
|
// (not just a box-wide strip). The grid overscans to match; the canvas container
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode7-transform.js","sourceRoot":"","sources":["../src/mode7-transform.ts"],"names":[],"mappings":"AAsBA,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,GAAW;IACxC,OAAO;QACN,SAAS,EAAE,eAAe,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM;QAC3G,eAAe,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG;KACnD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,OAAe;IACzD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO,8BAA8B,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,kBAAkB,WAAW,IAAI,CAAC;AACvH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,OAAe,EAAE,OAAe;IAC5E,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,OAAO,0CAA0C,SAAS,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC3G,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,UAAU,CAAC,OAAe;IACzC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,
|
|
1
|
+
{"version":3,"file":"mode7-transform.js","sourceRoot":"","sources":["../src/mode7-transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Mode7Store } from "./mode7-store.js";
|
|
2
|
+
export type Mode7Easing = "linear" | "ease-in" | "ease-out" | "ease-in-out" | ((t: number) => number);
|
|
3
|
+
export interface Mode7TransitionOptions {
|
|
4
|
+
/** Duration of a full enter/exit in ms. `0` (default) = switch instantly unless a
|
|
5
|
+
* call passes `{ animate: true }` (which then uses {@link DEFAULT_TRANSITION_MS}). */
|
|
6
|
+
durationMs?: number;
|
|
7
|
+
/** Default `"ease-in-out"`. */
|
|
8
|
+
easing?: Mode7Easing;
|
|
9
|
+
}
|
|
10
|
+
/** Duration used by an explicit `{ animate: true }` when no `durationMs` is configured. */
|
|
11
|
+
export declare const DEFAULT_TRANSITION_MS = 900;
|
|
12
|
+
export interface Mode7SwitchOptions {
|
|
13
|
+
/** Animate this switch (default: animate iff a `transition.durationMs > 0` is set). */
|
|
14
|
+
animate?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** Injectable timing (tests drive frames by hand). */
|
|
17
|
+
export interface Mode7Clock {
|
|
18
|
+
now(): number;
|
|
19
|
+
requestFrame(cb: (now: number) => void): number;
|
|
20
|
+
cancelFrame(id: number): void;
|
|
21
|
+
prefersReducedMotion(): boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface Mode7Transition {
|
|
24
|
+
enable(opts?: Mode7SwitchOptions): void;
|
|
25
|
+
disable(opts?: Mode7SwitchOptions): void;
|
|
26
|
+
toggle(opts?: Mode7SwitchOptions): void;
|
|
27
|
+
isTransitioning(): boolean;
|
|
28
|
+
/** Stop any running animation, leaving the current rendered state. */
|
|
29
|
+
dispose(): void;
|
|
30
|
+
}
|
|
31
|
+
export declare function resolveEasing(e: Mode7Easing | undefined): (t: number) => number;
|
|
32
|
+
export declare function browserClock(): Mode7Clock;
|
|
33
|
+
export declare function createMode7Transition(store: Mode7Store, options?: Mode7TransitionOptions, clock?: Mode7Clock): Mode7Transition;
|
|
34
|
+
//# sourceMappingURL=mode7-transition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode7-transition.d.ts","sourceRoot":"","sources":["../src/mode7-transition.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,WAAW,GACpB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,aAAa,GACb,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;AAE3B,MAAM,WAAW,sBAAsB;IACtC;2FACuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,2FAA2F;AAC3F,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IAClC,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,sDAAsD;AACtD,MAAM,WAAW,UAAU;IAC1B,GAAG,IAAI,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAC;IAChD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oBAAoB,IAAI,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,eAAe,IAAI,OAAO,CAAC;IAC3B,sEAAsE;IACtE,OAAO,IAAI,IAAI,CAAC;CAChB;AASD,wBAAgB,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAG/E;AAID,wBAAgB,YAAY,IAAI,UAAU,CAgBzC;AAED,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,sBAA2B,EACpC,KAAK,GAAE,UAA2B,GAChC,eAAe,CAqEjB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/** Duration used by an explicit `{ animate: true }` when no `durationMs` is configured. */
|
|
2
|
+
export const DEFAULT_TRANSITION_MS = 900;
|
|
3
|
+
const EASINGS = {
|
|
4
|
+
linear: (t) => t,
|
|
5
|
+
"ease-in": (t) => t * t * t,
|
|
6
|
+
"ease-out": (t) => 1 - (1 - t) ** 3,
|
|
7
|
+
"ease-in-out": (t) => (t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2),
|
|
8
|
+
};
|
|
9
|
+
export function resolveEasing(e) {
|
|
10
|
+
if (typeof e === "function")
|
|
11
|
+
return e;
|
|
12
|
+
return EASINGS[e ?? "ease-in-out"] ?? EASINGS["ease-in-out"];
|
|
13
|
+
}
|
|
14
|
+
const clamp01 = (v) => (v < 0 ? 0 : v > 1 ? 1 : v);
|
|
15
|
+
export function browserClock() {
|
|
16
|
+
return {
|
|
17
|
+
now: () => (typeof performance !== "undefined" ? performance.now() : Date.now()),
|
|
18
|
+
requestFrame: (cb) => typeof requestAnimationFrame === "function"
|
|
19
|
+
? requestAnimationFrame(cb)
|
|
20
|
+
: setTimeout(() => cb(Date.now()), 16),
|
|
21
|
+
cancelFrame: (id) => {
|
|
22
|
+
if (typeof cancelAnimationFrame === "function")
|
|
23
|
+
cancelAnimationFrame(id);
|
|
24
|
+
else
|
|
25
|
+
clearTimeout(id);
|
|
26
|
+
},
|
|
27
|
+
prefersReducedMotion: () => typeof window !== "undefined" &&
|
|
28
|
+
typeof window.matchMedia === "function" &&
|
|
29
|
+
window.matchMedia("(prefers-reduced-motion: reduce)").matches,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function createMode7Transition(store, options = {}, clock = browserClock()) {
|
|
33
|
+
const configured = Math.max(0, options.durationMs ?? 0);
|
|
34
|
+
const ease = resolveEasing(options.easing);
|
|
35
|
+
let frame = null;
|
|
36
|
+
let direction = 1;
|
|
37
|
+
let last = 0;
|
|
38
|
+
const stop = () => {
|
|
39
|
+
if (frame !== null)
|
|
40
|
+
clock.cancelFrame(frame);
|
|
41
|
+
frame = null;
|
|
42
|
+
};
|
|
43
|
+
/** Where a switch would end up: the running direction, else the settled state. */
|
|
44
|
+
const target = () => (frame !== null ? direction === 1 : store.getState().active);
|
|
45
|
+
const settle = (on) => {
|
|
46
|
+
stop();
|
|
47
|
+
store.setActive(on);
|
|
48
|
+
};
|
|
49
|
+
const step = (now, durationMs) => {
|
|
50
|
+
frame = null;
|
|
51
|
+
const dt = Math.max(0, now - last);
|
|
52
|
+
last = now;
|
|
53
|
+
const p = clamp01(store.getState().progress + (direction * dt) / durationMs);
|
|
54
|
+
const done = direction === 1 ? p >= 1 : p <= 0;
|
|
55
|
+
if (done) {
|
|
56
|
+
store.setPresentation({
|
|
57
|
+
active: direction === 1,
|
|
58
|
+
progress: direction === 1 ? 1 : 0,
|
|
59
|
+
amount: direction === 1 ? 1 : 0,
|
|
60
|
+
transitioning: false,
|
|
61
|
+
});
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
store.setPresentation({ active: true, progress: p, amount: ease(p), transitioning: true });
|
|
65
|
+
frame = clock.requestFrame((t) => step(t, durationMs));
|
|
66
|
+
};
|
|
67
|
+
const run = (on, opts) => {
|
|
68
|
+
const animate = opts?.animate ?? configured > 0;
|
|
69
|
+
const durationMs = configured > 0 ? configured : DEFAULT_TRANSITION_MS;
|
|
70
|
+
if (!animate || clock.prefersReducedMotion()) {
|
|
71
|
+
settle(on);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const s = store.getState();
|
|
75
|
+
// Already settled at the requested end → nothing to animate.
|
|
76
|
+
if (frame === null && s.active === on && s.progress === (on ? 1 : 0))
|
|
77
|
+
return;
|
|
78
|
+
direction = on ? 1 : -1;
|
|
79
|
+
if (frame !== null)
|
|
80
|
+
return; // reversing mid-flight: keep the running loop, new direction
|
|
81
|
+
last = clock.now();
|
|
82
|
+
// Mark the transition started (and `active` on for an enter) in the same update.
|
|
83
|
+
store.setPresentation({
|
|
84
|
+
active: true,
|
|
85
|
+
progress: s.progress,
|
|
86
|
+
amount: ease(s.progress),
|
|
87
|
+
transitioning: true,
|
|
88
|
+
});
|
|
89
|
+
frame = clock.requestFrame((t) => step(t, durationMs));
|
|
90
|
+
};
|
|
91
|
+
return {
|
|
92
|
+
enable: (opts) => run(true, opts),
|
|
93
|
+
disable: (opts) => run(false, opts),
|
|
94
|
+
toggle: (opts) => run(!target(), opts),
|
|
95
|
+
isTransitioning: () => store.getState().transitioning,
|
|
96
|
+
dispose: stop,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=mode7-transition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode7-transition.js","sourceRoot":"","sources":["../src/mode7-transition.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { UsketchPlugin } from "@edv4h/usketch-shared";
|
|
2
2
|
import type { Camera } from "./mode7-camera.js";
|
|
3
3
|
import { type Look } from "./mode7-store.js";
|
|
4
|
+
import { type Mode7TransitionOptions } from "./mode7-transition.js";
|
|
4
5
|
import { type Mode7Shortcuts } from "./register-mode7-actions.js";
|
|
5
6
|
export interface Mode7PluginOptions {
|
|
6
7
|
/** Start with the 3D view already on (default `false`). */
|
|
@@ -22,6 +23,13 @@ export interface Mode7PluginOptions {
|
|
|
22
23
|
showCaptureFrame?: boolean;
|
|
23
24
|
/** Keyboard shortcut bindings (opt-in; no defaults). */
|
|
24
25
|
shortcuts?: Mode7Shortcuts;
|
|
26
|
+
/**
|
|
27
|
+
* Animate switching the view on/off: the ground rises from flat to `camera.pitch`
|
|
28
|
+
* (and back) while the sky/fog fade. Default `durationMs: 0` = instant; with it
|
|
29
|
+
* set, every switch (HUD, actions, `mode7:toggle`, service) animates unless a call
|
|
30
|
+
* passes `{ animate: false }`. Honors `prefers-reduced-motion`.
|
|
31
|
+
*/
|
|
32
|
+
transition?: Mode7TransitionOptions;
|
|
25
33
|
}
|
|
26
34
|
export declare function createMode7Plugin(options?: Mode7PluginOptions): UsketchPlugin;
|
|
27
35
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAShD,OAAO,EAAoB,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,6BAA6B,CAAC;AAGxF,MAAM,WAAW,kBAAkB;IAClC,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,sCAAsC;IACtC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB;+DAC2D;IAC3D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;4DACwD;IACxD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;oEACgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wDAAwD;IACxD,SAAS,CAAC,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAShD,OAAO,EAAoB,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,6BAA6B,CAAC;AAGxF,MAAM,WAAW,kBAAkB;IAClC,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,sCAAsC;IACtC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB;+DAC2D;IAC3D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;4DACwD;IACxD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;oEACgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wDAAwD;IACxD,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,aAAa,CAyCjF"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CAPTURE_FRAME_LAYER_ID, CAPTURE_LAYER_ID, FOG_LAYER_ID, SKY_LAYER_ID, setupMode7Runtime, } from "./mode7-runtime.js";
|
|
2
2
|
import { createMode7Api, mode7Service } from "./mode7-service.js";
|
|
3
3
|
import { createMode7Store } from "./mode7-store.js";
|
|
4
|
+
import { createMode7Transition } from "./mode7-transition.js";
|
|
4
5
|
import { registerMode7Actions } from "./register-mode7-actions.js";
|
|
5
6
|
import { registerMode7Hud } from "./register-mode7-hud.js";
|
|
6
7
|
export function createMode7Plugin(options = {}) {
|
|
@@ -12,7 +13,8 @@ export function createMode7Plugin(options = {}) {
|
|
|
12
13
|
drawDistance: options.drawDistance,
|
|
13
14
|
showCaptureFrame: options.showCaptureFrame,
|
|
14
15
|
});
|
|
15
|
-
const
|
|
16
|
+
const transition = createMode7Transition(store, options.transition);
|
|
17
|
+
const api = createMode7Api(store, transition);
|
|
16
18
|
// Layers the picker must never tilt (tilting the HUD or our own overlays makes
|
|
17
19
|
// no sense and could hide the very controls used to turn the view off).
|
|
18
20
|
const excludedLayerIds = [
|
|
@@ -36,6 +38,7 @@ export function createMode7Plugin(options = {}) {
|
|
|
36
38
|
unprovideService();
|
|
37
39
|
stopHud();
|
|
38
40
|
stopActions();
|
|
41
|
+
transition.dispose();
|
|
39
42
|
stopRuntime();
|
|
40
43
|
};
|
|
41
44
|
},
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAQA,OAAO,EACN,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAa,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAuB,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAQA,OAAO,EACN,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAa,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAA+B,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAuB,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA+B3D,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAuB,EAAE;IACjE,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK;QACzC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,YAAY;QAChC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC1C,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9C,+EAA+E;IAC/E,wEAAwE;IACxE,MAAM,gBAAgB,GAAG;QACxB,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,sBAAsB;QACtB,WAAW;QACX,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;KAC/B,CAAC;IAEF,OAAO;QACN,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,iBAAiB;QACvB,KAAK,CAAC,GAAkB;YACvB,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACpE,mEAAmE;YACnE,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAEjE,OAAO,GAAG,EAAE;gBACX,gBAAgB,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;gBACV,WAAW,EAAE,CAAC;gBACd,UAAU,CAAC,OAAO,EAAE,CAAC;gBACrB,WAAW,EAAE,CAAC;YACf,CAAC,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edv4h/usketch-plugin-mode7",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@edv4h/usketch-
|
|
16
|
-
"@edv4h/usketch-
|
|
15
|
+
"@edv4h/usketch-store": "3.8.0",
|
|
16
|
+
"@edv4h/usketch-shared": "4.14.0"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
19
|
"react": ">=19"
|