@geometra/renderer-three 0.2.0 → 1.4.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/dist/__tests__/scene3d-manager.test.d.ts +2 -0
- package/dist/__tests__/scene3d-manager.test.d.ts.map +1 -0
- package/dist/__tests__/scene3d-manager.test.js +80 -0
- package/dist/__tests__/scene3d-manager.test.js.map +1 -0
- package/dist/host-css-coerce.d.ts +39 -0
- package/dist/host-css-coerce.d.ts.map +1 -0
- package/dist/host-css-coerce.js +69 -0
- package/dist/host-css-coerce.js.map +1 -0
- package/dist/host-layout-plain.d.ts +164 -0
- package/dist/host-layout-plain.d.ts.map +1 -0
- package/dist/host-layout-plain.js +255 -0
- package/dist/host-layout-plain.js.map +1 -0
- package/dist/index.d.ts +43 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -5
- package/dist/index.js.map +1 -1
- package/dist/layout-sync.d.ts +51 -0
- package/dist/layout-sync.d.ts.map +1 -0
- package/dist/layout-sync.js +59 -0
- package/dist/layout-sync.js.map +1 -0
- package/dist/page-host.d.ts +41 -0
- package/dist/page-host.d.ts.map +1 -0
- package/dist/page-host.js +89 -0
- package/dist/page-host.js.map +1 -0
- package/dist/scene3d-manager.d.ts +33 -0
- package/dist/scene3d-manager.d.ts.map +1 -0
- package/dist/scene3d-manager.js +394 -0
- package/dist/scene3d-manager.js.map +1 -0
- package/dist/split-host.d.ts +65 -9
- package/dist/split-host.d.ts.map +1 -1
- package/dist/split-host.js +115 -39
- package/dist/split-host.js.map +1 -1
- package/dist/stacked-host.d.ts +64 -14
- package/dist/stacked-host.d.ts.map +1 -1
- package/dist/stacked-host.js +77 -41
- package/dist/stacked-host.js.map +1 -1
- package/dist/three-scene-basics.d.ts +313 -2
- package/dist/three-scene-basics.d.ts.map +1 -1
- package/dist/three-scene-basics.js +418 -1
- package/dist/three-scene-basics.js.map +1 -1
- package/dist/utils.d.ts +156 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +207 -6
- package/dist/utils.js.map +1 -1
- package/package.json +15 -18
- package/LICENSE +0 -21
- package/README.md +0 -111
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-layout-plain.js","sourceRoot":"","sources":["../src/host-layout-plain.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `@geometra/renderer-three` — split/stacked Three.js + Geometra canvas hosts, WebGL sizing helpers
|
|
3
|
+
* ({@link resizeGeometraThreePerspectiveView}, {@link toPlainGeometraThreeViewSizingState}, {@link isPlainGeometraThreeViewSizingState}, {@link resizeGeometraThreeDrawingBufferView} / {@link resizeGeometraThreeDrawingBufferViewHeadless}, DPR capping, {@link GEOMETRA_HEADLESS_RAW_DEVICE_PIXEL_RATIO}, {@link resolveHeadlessHostDevicePixelRatio}, {@link createGeometraThreePerspectiveResizeHandlerHeadless}), shared scene defaults
|
|
4
|
+
* ({@link createGeometraThreeSceneBasics}, {@link resolveGeometraThreeSceneBasicsOptions}, {@link toPlainGeometraThreeSceneBasicsOptions},
|
|
5
|
+
* {@link createGeometraThreeSceneBasicsFromPlain},
|
|
6
|
+
* {@link createGeometraThreeWebGLWithSceneBasics}, {@link createGeometraThreeWebGLWithSceneBasicsFromPlain},
|
|
7
|
+
* {@link resizeGeometraThreeWebGLWithSceneBasicsView}, {@link resizeGeometraThreeWebGLWithSceneBasicsViewHeadless},
|
|
8
|
+
* {@link resizeGeometraThreeWebGLWithSceneBasicsViewFromPlainViewSizing},
|
|
9
|
+
* {@link toPlainGeometraThreeViewSizingStateHeadless},
|
|
10
|
+
* {@link renderGeometraThreeWebGLWithSceneBasicsFrame},
|
|
11
|
+
* {@link tickGeometraThreeWebGLWithSceneBasicsFrame} (`onFrame` may return `false` to skip `render` and make the tick return `false`; {@link disposeGeometraThreeWebGLWithSceneBasics} inside `onFrame` skips `render` too, like host {@link ThreeRuntimeContext.destroy}; if `onFrame` throws, the error propagates and `render` is not called, matching split/stacked {@link ThreeGeometraSplitHostOptions.onThreeFrame} ordering), {@link resizeTickGeometraThreeWebGLWithSceneBasics} (resize + tick with explicit raw DPR), {@link resizeTickGeometraThreeWebGLWithSceneBasicsFromPlainViewSizing} (resize + tick from plain {@link PlainGeometraThreeViewSizingState}), {@link resizeTickGeometraThreeWebGLWithSceneBasicsFromPlainHostSnapshot} (same from full {@link PlainGeometraThreeHostSnapshot} / composite JSON), {@link resizeTickGeometraThreeWebGLWithSceneBasicsHeadless} (same with raw DPR **1**), {@link disposeGeometraThreeWebGLWithSceneBasics} (optional `clock` stops timing after dispose),
|
|
12
|
+
* {@link toPlainGeometraThreeHostSnapshot}, {@link toPlainGeometraThreeHostSnapshotHeadless},
|
|
13
|
+
* {@link toPlainGeometraThreeHostSnapshotFromViewSizing}, {@link mergePlainGeometraThreeHostSnapshot},
|
|
14
|
+
* {@link toPlainGeometraSplitHostLayoutOptions} / {@link toPlainGeometraStackedHostLayoutOptions},
|
|
15
|
+
* {@link toPlainGeometraThreeSplitHostSnapshot} / {@link toPlainGeometraThreeStackedHostSnapshot} (and headless variants)
|
|
16
|
+
* for JSON-stable split/stacked layout plus viewport/scene in one object ({@link isGeometraHybridHostKind}, {@link coerceGeometraHybridHostKind}, {@link GEOMETRA_HYBRID_HOST_KINDS},
|
|
17
|
+
* {@link isPlainGeometraThreeHostSnapshot}, {@link isPlainGeometraThreeSceneBasicsOptions}, {@link isPlainGeometraSplitHostLayoutOptions}, {@link isPlainGeometraStackedHostLayoutOptions},
|
|
18
|
+
* {@link isPlainGeometraThreeSplitHostSnapshot}, {@link isPlainGeometraThreeStackedHostSnapshot}, {@link isPlainGeometraHybridHostKind}),
|
|
19
|
+
* {@link toPlainGeometraStackedHudRect} for stacked HUD box math (same insets as {@link createThreeGeometraStackedHost}), and
|
|
20
|
+
* {@link createGeometraHostLayoutSyncRaf} for custom hybrid layouts, {@link coerceHostStackingZIndexCss},
|
|
21
|
+
* {@link coerceGeometraHudPointerEvents}, and {@link coerceGeometraHudPlacement} for stacked-overlay stacking and
|
|
22
|
+
* HUD corner rules, and {@link GEOMETRA_SPLIT_HOST_LAYOUT_DEFAULTS} /
|
|
23
|
+
* {@link GEOMETRA_STACKED_HOST_LAYOUT_DEFAULTS} for host layout defaults (custom layouts, logs, agent payloads).
|
|
24
|
+
*/
|
|
25
|
+
export { createThreeGeometraSplitHost, GEOMETRA_SPLIT_HOST_LAYOUT_DEFAULTS, type GeometraHostBrowserCanvasClientOptions, type ThreeGeometraSplitHostHandle, type ThreeGeometraSplitHostOptions, type ThreeFrameContext, type ThreeRuntimeContext, } from './split-host.js';
|
|
26
|
+
export { createThreeGeometraStackedHost, GEOMETRA_STACKED_HOST_LAYOUT_DEFAULTS, type ThreeGeometraStackedHostHandle, type ThreeGeometraStackedHostOptions, } from './stacked-host.js';
|
|
27
|
+
export { GEOMETRA_HEADLESS_RAW_DEVICE_PIXEL_RATIO, createGeometraThreePerspectiveResizeHandler, createGeometraThreePerspectiveResizeHandlerHeadless, geometraHostPerspectiveAspectFromCss, isPlainGeometraThreeViewSizingState, normalizeGeometraLayoutPixels, resizeGeometraThreeDrawingBufferView, resizeGeometraThreeDrawingBufferViewHeadless, resizeGeometraThreePerspectiveView, resolveHeadlessHostDevicePixelRatio, resolveHostDevicePixelRatio, setWebGLDrawingBufferSize, syncGeometraThreePerspectiveFromBuffer, toPlainGeometraThreeViewSizingState, toPlainGeometraThreeViewSizingStateHeadless, type PlainGeometraThreeViewSizingState, } from './utils.js';
|
|
28
|
+
export { GEOMETRA_HOST_WEBGL_RENDERER_OPTIONS, GEOMETRA_THREE_HOST_SCENE_DEFAULTS, createGeometraHostWebGLRendererParams, createGeometraThreeSceneBasics, createGeometraThreeSceneBasicsFromPlain, resolveGeometraThreeSceneBasicsOptions, toPlainGeometraThreeSceneBasicsOptions, toPlainGeometraThreeHostSnapshot, toPlainGeometraThreeHostSnapshotHeadless, toPlainGeometraThreeHostSnapshotFromViewSizing, mergePlainGeometraThreeHostSnapshot, createGeometraThreeWebGLRenderer, createGeometraThreeWebGLWithSceneBasics, createGeometraThreeWebGLWithSceneBasicsFromPlain, disposeGeometraThreeWebGLWithSceneBasics, isPlainGeometraThreeHostSnapshot, isPlainGeometraThreeSceneBasicsOptions, renderGeometraThreeWebGLWithSceneBasicsFrame, tickGeometraThreeWebGLWithSceneBasicsFrame, resizeGeometraThreeWebGLWithSceneBasicsView, resizeGeometraThreeWebGLWithSceneBasicsViewHeadless, resizeGeometraThreeWebGLWithSceneBasicsViewFromPlainViewSizing, resizeTickGeometraThreeWebGLWithSceneBasics, resizeTickGeometraThreeWebGLWithSceneBasicsFromPlainViewSizing, resizeTickGeometraThreeWebGLWithSceneBasicsFromPlainHostSnapshot, resizeTickGeometraThreeWebGLWithSceneBasicsHeadless, type GeometraThreeSceneBasics, type GeometraThreeSceneBasicsOptions, type PlainGeometraThreeSceneBasicsOptions, type PlainGeometraThreeHostSnapshot, type GeometraThreeWebGLWithSceneBasics, type GeometraThreeWebGLWithSceneBasicsTickContext, } from './three-scene-basics.js';
|
|
29
|
+
export { createGeometraHostLayoutSyncRaf, type GeometraHostLayoutSyncRaf, type GeometraHostLayoutSyncRafOptions, } from './layout-sync.js';
|
|
30
|
+
export { coerceGeometraHudPlacement, coerceGeometraHudPointerEvents, coerceHostNonNegativeCssPx, coerceHostStackingZIndexCss, } from './host-css-coerce.js';
|
|
31
|
+
export type { GeometraHudPlacement } from './host-css-coerce.js';
|
|
32
|
+
export { GEOMETRA_HYBRID_HOST_KINDS, coerceGeometraHybridHostKind, isGeometraHybridHostKind, isPlainGeometraHybridHostKind, isPlainGeometraSplitHostLayoutOptions, isPlainGeometraStackedHostLayoutOptions, isPlainGeometraThreeSplitHostSnapshot, isPlainGeometraThreeStackedHostSnapshot, toPlainGeometraSplitHostLayoutOptions, toPlainGeometraStackedHostLayoutOptions, toPlainGeometraThreeSplitHostSnapshot, toPlainGeometraThreeSplitHostSnapshotHeadless, toPlainGeometraThreeStackedHostSnapshot, toPlainGeometraThreeStackedHostSnapshotHeadless, toPlainGeometraStackedHudRect, type GeometraHybridHostKind, type GeometraStackedHudRectLayoutInput, type PlainGeometraStackedHudRect, type PlainGeometraSplitHostLayoutOptions, type PlainGeometraStackedHostLayoutOptions, type PlainGeometraThreeSplitHostSnapshot, type PlainGeometraThreeStackedHostSnapshot, type ToPlainGeometraSplitHostLayoutOptionsInput, type ToPlainGeometraStackedHostLayoutOptionsInput, } from './host-layout-plain.js';
|
|
33
|
+
/**
|
|
34
|
+
* WebSocket **data channel** id for tracker snapshot JSON on the GEOM socket (re-exported from
|
|
35
|
+
* `@geometra/client`). Use in `onData` handlers passed through {@link createThreeGeometraSplitHost} /
|
|
36
|
+
* {@link createThreeGeometraStackedHost} so comparisons stay aligned with the thin client and agent
|
|
37
|
+
* payloads without importing `@geometra/client` only for this string.
|
|
38
|
+
*
|
|
39
|
+
* The runtime value is **`geom.tracker.snapshot`**; `npm run release:gate` asserts it still matches
|
|
40
|
+
* the installed `@geometra/client` package.
|
|
41
|
+
*/
|
|
42
|
+
export { createThreeGeometraPageHost, type GeometraPageSection, type ThreeGeometraPageHostOptions, type ThreeGeometraPageHostHandle, } from './page-host.js';
|
|
6
43
|
export { GEOM_DATA_CHANNEL_TRACKER_SNAPSHOT } from '@geometra/client';
|
|
44
|
+
export { Scene3dManager } from './scene3d-manager.js';
|
|
7
45
|
//# 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,EACL,4BAA4B,EAC5B,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,8BAA8B,EAC9B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,4BAA4B,EAC5B,mCAAmC,EACnC,KAAK,sCAAsC,EAC3C,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,EACrC,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,GACrC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,wCAAwC,EACxC,2CAA2C,EAC3C,mDAAmD,EACnD,oCAAoC,EACpC,mCAAmC,EACnC,6BAA6B,EAC7B,oCAAoC,EACpC,4CAA4C,EAC5C,kCAAkC,EAClC,mCAAmC,EACnC,2BAA2B,EAC3B,yBAAyB,EACzB,sCAAsC,EACtC,mCAAmC,EACnC,2CAA2C,EAC3C,KAAK,iCAAiC,GACvC,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,oCAAoC,EACpC,kCAAkC,EAClC,qCAAqC,EACrC,8BAA8B,EAC9B,uCAAuC,EACvC,sCAAsC,EACtC,sCAAsC,EACtC,gCAAgC,EAChC,wCAAwC,EACxC,8CAA8C,EAC9C,mCAAmC,EACnC,gCAAgC,EAChC,uCAAuC,EACvC,gDAAgD,EAChD,wCAAwC,EACxC,gCAAgC,EAChC,sCAAsC,EACtC,4CAA4C,EAC5C,0CAA0C,EAC1C,2CAA2C,EAC3C,mDAAmD,EACnD,8DAA8D,EAC9D,2CAA2C,EAC3C,8DAA8D,EAC9D,gEAAgE,EAChE,mDAAmD,EACnD,KAAK,wBAAwB,EAC7B,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,EACzC,KAAK,8BAA8B,EACnC,KAAK,iCAAiC,EACtC,KAAK,4CAA4C,GAClD,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,+BAA+B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,GACtC,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,qCAAqC,EACrC,uCAAuC,EACvC,qCAAqC,EACrC,uCAAuC,EACvC,qCAAqC,EACrC,uCAAuC,EACvC,qCAAqC,EACrC,6CAA6C,EAC7C,uCAAuC,EACvC,+CAA+C,EAC/C,6BAA6B,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,iCAAiC,EACtC,KAAK,2BAA2B,EAChC,KAAK,mCAAmC,EACxC,KAAK,qCAAqC,EAC1C,KAAK,mCAAmC,EACxC,KAAK,qCAAqC,EAC1C,KAAK,0CAA0C,EAC/C,KAAK,4CAA4C,GAClD,MAAM,wBAAwB,CAAA;AAE/B;;;;;;;;GAQG;AACH,OAAO,EACL,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,GACjC,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,kCAAkC,EAAE,MAAM,kBAAkB,CAAA;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `@geometra/renderer-three` — split/stacked Three.js + Geometra canvas hosts, WebGL sizing helpers
|
|
3
|
+
* ({@link resizeGeometraThreePerspectiveView}, {@link toPlainGeometraThreeViewSizingState}, {@link isPlainGeometraThreeViewSizingState}, {@link resizeGeometraThreeDrawingBufferView} / {@link resizeGeometraThreeDrawingBufferViewHeadless}, DPR capping, {@link GEOMETRA_HEADLESS_RAW_DEVICE_PIXEL_RATIO}, {@link resolveHeadlessHostDevicePixelRatio}, {@link createGeometraThreePerspectiveResizeHandlerHeadless}), shared scene defaults
|
|
4
|
+
* ({@link createGeometraThreeSceneBasics}, {@link resolveGeometraThreeSceneBasicsOptions}, {@link toPlainGeometraThreeSceneBasicsOptions},
|
|
5
|
+
* {@link createGeometraThreeSceneBasicsFromPlain},
|
|
6
|
+
* {@link createGeometraThreeWebGLWithSceneBasics}, {@link createGeometraThreeWebGLWithSceneBasicsFromPlain},
|
|
7
|
+
* {@link resizeGeometraThreeWebGLWithSceneBasicsView}, {@link resizeGeometraThreeWebGLWithSceneBasicsViewHeadless},
|
|
8
|
+
* {@link resizeGeometraThreeWebGLWithSceneBasicsViewFromPlainViewSizing},
|
|
9
|
+
* {@link toPlainGeometraThreeViewSizingStateHeadless},
|
|
10
|
+
* {@link renderGeometraThreeWebGLWithSceneBasicsFrame},
|
|
11
|
+
* {@link tickGeometraThreeWebGLWithSceneBasicsFrame} (`onFrame` may return `false` to skip `render` and make the tick return `false`; {@link disposeGeometraThreeWebGLWithSceneBasics} inside `onFrame` skips `render` too, like host {@link ThreeRuntimeContext.destroy}; if `onFrame` throws, the error propagates and `render` is not called, matching split/stacked {@link ThreeGeometraSplitHostOptions.onThreeFrame} ordering), {@link resizeTickGeometraThreeWebGLWithSceneBasics} (resize + tick with explicit raw DPR), {@link resizeTickGeometraThreeWebGLWithSceneBasicsFromPlainViewSizing} (resize + tick from plain {@link PlainGeometraThreeViewSizingState}), {@link resizeTickGeometraThreeWebGLWithSceneBasicsFromPlainHostSnapshot} (same from full {@link PlainGeometraThreeHostSnapshot} / composite JSON), {@link resizeTickGeometraThreeWebGLWithSceneBasicsHeadless} (same with raw DPR **1**), {@link disposeGeometraThreeWebGLWithSceneBasics} (optional `clock` stops timing after dispose),
|
|
12
|
+
* {@link toPlainGeometraThreeHostSnapshot}, {@link toPlainGeometraThreeHostSnapshotHeadless},
|
|
13
|
+
* {@link toPlainGeometraThreeHostSnapshotFromViewSizing}, {@link mergePlainGeometraThreeHostSnapshot},
|
|
14
|
+
* {@link toPlainGeometraSplitHostLayoutOptions} / {@link toPlainGeometraStackedHostLayoutOptions},
|
|
15
|
+
* {@link toPlainGeometraThreeSplitHostSnapshot} / {@link toPlainGeometraThreeStackedHostSnapshot} (and headless variants)
|
|
16
|
+
* for JSON-stable split/stacked layout plus viewport/scene in one object ({@link isGeometraHybridHostKind}, {@link coerceGeometraHybridHostKind}, {@link GEOMETRA_HYBRID_HOST_KINDS},
|
|
17
|
+
* {@link isPlainGeometraThreeHostSnapshot}, {@link isPlainGeometraThreeSceneBasicsOptions}, {@link isPlainGeometraSplitHostLayoutOptions}, {@link isPlainGeometraStackedHostLayoutOptions},
|
|
18
|
+
* {@link isPlainGeometraThreeSplitHostSnapshot}, {@link isPlainGeometraThreeStackedHostSnapshot}, {@link isPlainGeometraHybridHostKind}),
|
|
19
|
+
* {@link toPlainGeometraStackedHudRect} for stacked HUD box math (same insets as {@link createThreeGeometraStackedHost}), and
|
|
20
|
+
* {@link createGeometraHostLayoutSyncRaf} for custom hybrid layouts, {@link coerceHostStackingZIndexCss},
|
|
21
|
+
* {@link coerceGeometraHudPointerEvents}, and {@link coerceGeometraHudPlacement} for stacked-overlay stacking and
|
|
22
|
+
* HUD corner rules, and {@link GEOMETRA_SPLIT_HOST_LAYOUT_DEFAULTS} /
|
|
23
|
+
* {@link GEOMETRA_STACKED_HOST_LAYOUT_DEFAULTS} for host layout defaults (custom layouts, logs, agent payloads).
|
|
24
|
+
*/
|
|
25
|
+
export { createThreeGeometraSplitHost, GEOMETRA_SPLIT_HOST_LAYOUT_DEFAULTS, } from './split-host.js';
|
|
26
|
+
export { createThreeGeometraStackedHost, GEOMETRA_STACKED_HOST_LAYOUT_DEFAULTS, } from './stacked-host.js';
|
|
27
|
+
export { GEOMETRA_HEADLESS_RAW_DEVICE_PIXEL_RATIO, createGeometraThreePerspectiveResizeHandler, createGeometraThreePerspectiveResizeHandlerHeadless, geometraHostPerspectiveAspectFromCss, isPlainGeometraThreeViewSizingState, normalizeGeometraLayoutPixels, resizeGeometraThreeDrawingBufferView, resizeGeometraThreeDrawingBufferViewHeadless, resizeGeometraThreePerspectiveView, resolveHeadlessHostDevicePixelRatio, resolveHostDevicePixelRatio, setWebGLDrawingBufferSize, syncGeometraThreePerspectiveFromBuffer, toPlainGeometraThreeViewSizingState, toPlainGeometraThreeViewSizingStateHeadless, } from './utils.js';
|
|
28
|
+
export { GEOMETRA_HOST_WEBGL_RENDERER_OPTIONS, GEOMETRA_THREE_HOST_SCENE_DEFAULTS, createGeometraHostWebGLRendererParams, createGeometraThreeSceneBasics, createGeometraThreeSceneBasicsFromPlain, resolveGeometraThreeSceneBasicsOptions, toPlainGeometraThreeSceneBasicsOptions, toPlainGeometraThreeHostSnapshot, toPlainGeometraThreeHostSnapshotHeadless, toPlainGeometraThreeHostSnapshotFromViewSizing, mergePlainGeometraThreeHostSnapshot, createGeometraThreeWebGLRenderer, createGeometraThreeWebGLWithSceneBasics, createGeometraThreeWebGLWithSceneBasicsFromPlain, disposeGeometraThreeWebGLWithSceneBasics, isPlainGeometraThreeHostSnapshot, isPlainGeometraThreeSceneBasicsOptions, renderGeometraThreeWebGLWithSceneBasicsFrame, tickGeometraThreeWebGLWithSceneBasicsFrame, resizeGeometraThreeWebGLWithSceneBasicsView, resizeGeometraThreeWebGLWithSceneBasicsViewHeadless, resizeGeometraThreeWebGLWithSceneBasicsViewFromPlainViewSizing, resizeTickGeometraThreeWebGLWithSceneBasics, resizeTickGeometraThreeWebGLWithSceneBasicsFromPlainViewSizing, resizeTickGeometraThreeWebGLWithSceneBasicsFromPlainHostSnapshot, resizeTickGeometraThreeWebGLWithSceneBasicsHeadless, } from './three-scene-basics.js';
|
|
29
|
+
export { createGeometraHostLayoutSyncRaf, } from './layout-sync.js';
|
|
30
|
+
export { coerceGeometraHudPlacement, coerceGeometraHudPointerEvents, coerceHostNonNegativeCssPx, coerceHostStackingZIndexCss, } from './host-css-coerce.js';
|
|
31
|
+
export { GEOMETRA_HYBRID_HOST_KINDS, coerceGeometraHybridHostKind, isGeometraHybridHostKind, isPlainGeometraHybridHostKind, isPlainGeometraSplitHostLayoutOptions, isPlainGeometraStackedHostLayoutOptions, isPlainGeometraThreeSplitHostSnapshot, isPlainGeometraThreeStackedHostSnapshot, toPlainGeometraSplitHostLayoutOptions, toPlainGeometraStackedHostLayoutOptions, toPlainGeometraThreeSplitHostSnapshot, toPlainGeometraThreeSplitHostSnapshotHeadless, toPlainGeometraThreeStackedHostSnapshot, toPlainGeometraThreeStackedHostSnapshotHeadless, toPlainGeometraStackedHudRect, } from './host-layout-plain.js';
|
|
32
|
+
/**
|
|
33
|
+
* WebSocket **data channel** id for tracker snapshot JSON on the GEOM socket (re-exported from
|
|
34
|
+
* `@geometra/client`). Use in `onData` handlers passed through {@link createThreeGeometraSplitHost} /
|
|
35
|
+
* {@link createThreeGeometraStackedHost} so comparisons stay aligned with the thin client and agent
|
|
36
|
+
* payloads without importing `@geometra/client` only for this string.
|
|
37
|
+
*
|
|
38
|
+
* The runtime value is **`geom.tracker.snapshot`**; `npm run release:gate` asserts it still matches
|
|
39
|
+
* the installed `@geometra/client` package.
|
|
40
|
+
*/
|
|
41
|
+
export { createThreeGeometraPageHost, } from './page-host.js';
|
|
6
42
|
export { GEOM_DATA_CHANNEL_TRACKER_SNAPSHOT } from '@geometra/client';
|
|
43
|
+
export { Scene3dManager } from './scene3d-manager.js';
|
|
7
44
|
//# 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,EACL,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,4BAA4B,EAC5B,mCAAmC,GAMpC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,GAGtC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,wCAAwC,EACxC,2CAA2C,EAC3C,mDAAmD,EACnD,oCAAoC,EACpC,mCAAmC,EACnC,6BAA6B,EAC7B,oCAAoC,EACpC,4CAA4C,EAC5C,kCAAkC,EAClC,mCAAmC,EACnC,2BAA2B,EAC3B,yBAAyB,EACzB,sCAAsC,EACtC,mCAAmC,EACnC,2CAA2C,GAE5C,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,oCAAoC,EACpC,kCAAkC,EAClC,qCAAqC,EACrC,8BAA8B,EAC9B,uCAAuC,EACvC,sCAAsC,EACtC,sCAAsC,EACtC,gCAAgC,EAChC,wCAAwC,EACxC,8CAA8C,EAC9C,mCAAmC,EACnC,gCAAgC,EAChC,uCAAuC,EACvC,gDAAgD,EAChD,wCAAwC,EACxC,gCAAgC,EAChC,sCAAsC,EACtC,4CAA4C,EAC5C,0CAA0C,EAC1C,2CAA2C,EAC3C,mDAAmD,EACnD,8DAA8D,EAC9D,2CAA2C,EAC3C,8DAA8D,EAC9D,gEAAgE,EAChE,mDAAmD,GAOpD,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,+BAA+B,GAGhC,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,qCAAqC,EACrC,uCAAuC,EACvC,qCAAqC,EACrC,uCAAuC,EACvC,qCAAqC,EACrC,uCAAuC,EACvC,qCAAqC,EACrC,6CAA6C,EAC7C,uCAAuC,EACvC,+CAA+C,EAC/C,6BAA6B,GAU9B,MAAM,wBAAwB,CAAA;AAE/B;;;;;;;;GAQG;AACH,OAAO,EACL,2BAA2B,GAI5B,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,kCAAkC,EAAE,MAAM,kBAAkB,CAAA;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One `requestAnimationFrame` coalescer for hybrid Three + Geometra hosts: paired
|
|
3
|
+
* `ResizeObserver` notifications run WebGL buffer sync at most once per frame, and an optional
|
|
4
|
+
* synthetic `window` `resize` can fire on the same tick so the Geometra thin client picks up
|
|
5
|
+
* layout size without double work on real window resizes.
|
|
6
|
+
*
|
|
7
|
+
* {@link createThreeGeometraSplitHost} and {@link createThreeGeometraStackedHost} use this
|
|
8
|
+
* internally; export is for custom layouts that need the same behavior.
|
|
9
|
+
*/
|
|
10
|
+
export interface GeometraHostLayoutSyncRaf {
|
|
11
|
+
/**
|
|
12
|
+
* At most one drawing-buffer sync per animation frame. When `notifyGeometra` is true for any
|
|
13
|
+
* call coalesced into that frame, `dispatchGeometraResize` runs after `syncLayout`.
|
|
14
|
+
*/
|
|
15
|
+
schedule(notifyGeometra: boolean): void;
|
|
16
|
+
/** Cancel a pending frame (e.g. on host destroy). */
|
|
17
|
+
cancel(): void;
|
|
18
|
+
}
|
|
19
|
+
export interface GeometraHostLayoutSyncRafOptions {
|
|
20
|
+
/** Return true after teardown so scheduled frames no-op. */
|
|
21
|
+
isDestroyed: () => boolean;
|
|
22
|
+
/** Resize WebGL + camera (runs inside the rAF callback). */
|
|
23
|
+
syncLayout: () => void;
|
|
24
|
+
/**
|
|
25
|
+
* e.g. `() => win.dispatchEvent(new Event('resize'))` for Geometra thin client.
|
|
26
|
+
* Runs only when {@link GeometraHostLayoutSyncRaf.schedule} requested a notify for this coalesced
|
|
27
|
+
* frame, after the layout sync callback, and only if {@link isDestroyed} is still false (avoids
|
|
28
|
+
* synthetic `resize` after teardown). If teardown happens after a successful `syncLayout` but before
|
|
29
|
+
* dispatch, the pending notify is cleared for the same reason. If the layout sync callback throws, the
|
|
30
|
+
* pending notify stays set so a later coalesced frame can still dispatch once sync succeeds. If `dispatchGeometraResize`
|
|
31
|
+
* throws, the pending notify is also left set so a later coalesced frame can retry the dispatch after
|
|
32
|
+
* `syncLayout` runs again.
|
|
33
|
+
*/
|
|
34
|
+
dispatchGeometraResize: () => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Build a layout sync coalescer bound to `win` (typically the Geometra client’s `window` option).
|
|
38
|
+
* Call {@link GeometraHostLayoutSyncRaf.schedule} from `ResizeObserver` callbacks with
|
|
39
|
+
* `notifyGeometra: true` when Geometra’s canvas layout changed without a browser `resize`, and
|
|
40
|
+
* from real `window` `resize` handlers with `notifyGeometra: false`.
|
|
41
|
+
*
|
|
42
|
+
* If `syncLayout` or `dispatchGeometraResize` throws, the error propagates from the scheduled
|
|
43
|
+
* animation-frame callback (same as an uncaught rAF handler in the browser). A pending Geometra
|
|
44
|
+
* notify is cleared only after a successful `dispatchGeometraResize`; see
|
|
45
|
+
* {@link GeometraHostLayoutSyncRafOptions.dispatchGeometraResize}. If `isDestroyed` is true before
|
|
46
|
+
* `syncLayout` runs, or becomes true after `syncLayout` before `dispatchGeometraResize` (when
|
|
47
|
+
* {@link GeometraHostLayoutSyncRaf.cancel} was not used), the pending notify flag is cleared so later
|
|
48
|
+
* schedules do not inherit a stale synthetic `resize`.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createGeometraHostLayoutSyncRaf(win: Window, options: GeometraHostLayoutSyncRafOptions): GeometraHostLayoutSyncRaf;
|
|
51
|
+
//# sourceMappingURL=layout-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-sync.d.ts","sourceRoot":"","sources":["../src/layout-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAA;IACvC,qDAAqD;IACrD,MAAM,IAAI,IAAI,CAAA;CACf;AAED,MAAM,WAAW,gCAAgC;IAC/C,4DAA4D;IAC5D,WAAW,EAAE,MAAM,OAAO,CAAA;IAC1B,4DAA4D;IAC5D,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB;;;;;;;;;OASG;IACH,sBAAsB,EAAE,MAAM,IAAI,CAAA;CACnC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gCAAgC,GACxC,yBAAyB,CAoC3B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One `requestAnimationFrame` coalescer for hybrid Three + Geometra hosts: paired
|
|
3
|
+
* `ResizeObserver` notifications run WebGL buffer sync at most once per frame, and an optional
|
|
4
|
+
* synthetic `window` `resize` can fire on the same tick so the Geometra thin client picks up
|
|
5
|
+
* layout size without double work on real window resizes.
|
|
6
|
+
*
|
|
7
|
+
* {@link createThreeGeometraSplitHost} and {@link createThreeGeometraStackedHost} use this
|
|
8
|
+
* internally; export is for custom layouts that need the same behavior.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Build a layout sync coalescer bound to `win` (typically the Geometra client’s `window` option).
|
|
12
|
+
* Call {@link GeometraHostLayoutSyncRaf.schedule} from `ResizeObserver` callbacks with
|
|
13
|
+
* `notifyGeometra: true` when Geometra’s canvas layout changed without a browser `resize`, and
|
|
14
|
+
* from real `window` `resize` handlers with `notifyGeometra: false`.
|
|
15
|
+
*
|
|
16
|
+
* If `syncLayout` or `dispatchGeometraResize` throws, the error propagates from the scheduled
|
|
17
|
+
* animation-frame callback (same as an uncaught rAF handler in the browser). A pending Geometra
|
|
18
|
+
* notify is cleared only after a successful `dispatchGeometraResize`; see
|
|
19
|
+
* {@link GeometraHostLayoutSyncRafOptions.dispatchGeometraResize}. If `isDestroyed` is true before
|
|
20
|
+
* `syncLayout` runs, or becomes true after `syncLayout` before `dispatchGeometraResize` (when
|
|
21
|
+
* {@link GeometraHostLayoutSyncRaf.cancel} was not used), the pending notify flag is cleared so later
|
|
22
|
+
* schedules do not inherit a stale synthetic `resize`.
|
|
23
|
+
*/
|
|
24
|
+
export function createGeometraHostLayoutSyncRaf(win, options) {
|
|
25
|
+
const { isDestroyed, syncLayout, dispatchGeometraResize } = options;
|
|
26
|
+
let layoutSyncRafId;
|
|
27
|
+
let pendingGeometraResizeNotify = false;
|
|
28
|
+
const schedule = (notifyGeometra) => {
|
|
29
|
+
if (notifyGeometra)
|
|
30
|
+
pendingGeometraResizeNotify = true;
|
|
31
|
+
if (layoutSyncRafId !== undefined)
|
|
32
|
+
return;
|
|
33
|
+
layoutSyncRafId = win.requestAnimationFrame(() => {
|
|
34
|
+
layoutSyncRafId = undefined;
|
|
35
|
+
if (isDestroyed()) {
|
|
36
|
+
pendingGeometraResizeNotify = false;
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
syncLayout();
|
|
40
|
+
if (isDestroyed()) {
|
|
41
|
+
pendingGeometraResizeNotify = false;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (pendingGeometraResizeNotify) {
|
|
45
|
+
dispatchGeometraResize();
|
|
46
|
+
pendingGeometraResizeNotify = false;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
const cancel = () => {
|
|
51
|
+
if (layoutSyncRafId !== undefined) {
|
|
52
|
+
win.cancelAnimationFrame(layoutSyncRafId);
|
|
53
|
+
layoutSyncRafId = undefined;
|
|
54
|
+
}
|
|
55
|
+
pendingGeometraResizeNotify = false;
|
|
56
|
+
};
|
|
57
|
+
return { schedule, cancel };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=layout-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-sync.js","sourceRoot":"","sources":["../src/layout-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8BH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,+BAA+B,CAC7C,GAAW,EACX,OAAyC;IAEzC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAA;IAEnE,IAAI,eAAmC,CAAA;IACvC,IAAI,2BAA2B,GAAG,KAAK,CAAA;IAEvC,MAAM,QAAQ,GAAG,CAAC,cAAuB,EAAE,EAAE;QAC3C,IAAI,cAAc;YAAE,2BAA2B,GAAG,IAAI,CAAA;QACtD,IAAI,eAAe,KAAK,SAAS;YAAE,OAAM;QACzC,eAAe,GAAG,GAAG,CAAC,qBAAqB,CAAC,GAAG,EAAE;YAC/C,eAAe,GAAG,SAAS,CAAA;YAC3B,IAAI,WAAW,EAAE,EAAE,CAAC;gBAClB,2BAA2B,GAAG,KAAK,CAAA;gBACnC,OAAM;YACR,CAAC;YACD,UAAU,EAAE,CAAA;YACZ,IAAI,WAAW,EAAE,EAAE,CAAC;gBAClB,2BAA2B,GAAG,KAAK,CAAA;gBACnC,OAAM;YACR,CAAC;YACD,IAAI,2BAA2B,EAAE,CAAC;gBAChC,sBAAsB,EAAE,CAAA;gBACxB,2BAA2B,GAAG,KAAK,CAAA;YACrC,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,GAAG,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAA;YACzC,eAAe,GAAG,SAAS,CAAA;QAC7B,CAAC;QACD,2BAA2B,GAAG,KAAK,CAAA;IACrC,CAAC,CAAA;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AAC7B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type BrowserCanvasClientHandle, type BrowserCanvasClientOptions } from '@geometra/renderer-canvas';
|
|
2
|
+
import { type ThreeGeometraSplitHostHandle, type ThreeGeometraSplitHostOptions } from './split-host.js';
|
|
3
|
+
/** A Geometra canvas section rendered as a full-width block in the page flow. */
|
|
4
|
+
export interface GeometraPageSection {
|
|
5
|
+
/** Unique id for this section. */
|
|
6
|
+
id: string;
|
|
7
|
+
/** WebSocket URL for the Geometra server view. */
|
|
8
|
+
url: string;
|
|
9
|
+
/** Fixed height in CSS pixels. The server should compute layout at this height. */
|
|
10
|
+
height: number;
|
|
11
|
+
/** Enable binary framing for the WebSocket. */
|
|
12
|
+
binaryFraming?: boolean;
|
|
13
|
+
/** Renderer options (background color, etc.). */
|
|
14
|
+
rendererOptions?: Omit<BrowserCanvasClientOptions['rendererOptions'], 'canvas'>;
|
|
15
|
+
}
|
|
16
|
+
export interface ThreeGeometraPageHostOptions extends ThreeGeometraSplitHostOptions {
|
|
17
|
+
/** Optional header section rendered above the split host. */
|
|
18
|
+
headerSection?: GeometraPageSection;
|
|
19
|
+
/** Additional Geometra sections rendered below the split host in document flow. */
|
|
20
|
+
belowFoldSections?: GeometraPageSection[];
|
|
21
|
+
}
|
|
22
|
+
export interface ThreeGeometraPageHostHandle extends ThreeGeometraSplitHostHandle {
|
|
23
|
+
/** Header Geometra client (present when `headerSection` was provided). */
|
|
24
|
+
header?: BrowserCanvasClientHandle;
|
|
25
|
+
/** Below-fold Geometra clients keyed by section id. */
|
|
26
|
+
belowFold: Map<string, BrowserCanvasClientHandle>;
|
|
27
|
+
/** The outer page container (scrollable). */
|
|
28
|
+
pageRoot: HTMLDivElement;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Page-level host that composes multiple Geometra canvas sections into a scrollable page.
|
|
32
|
+
*
|
|
33
|
+
* The top section is a viewport-height split host (Three.js + Geometra console panel).
|
|
34
|
+
* Optional header and below-fold sections are standard Geometra canvas clients rendered
|
|
35
|
+
* at full page width in normal document flow, so the browser handles scrolling.
|
|
36
|
+
*
|
|
37
|
+
* Each section connects to its own WebSocket endpoint. The server exposes multiple
|
|
38
|
+
* `createGeometraServer` instances on different `wsPath` values.
|
|
39
|
+
*/
|
|
40
|
+
export declare function createThreeGeometraPageHost(options: ThreeGeometraPageHostOptions): ThreeGeometraPageHostHandle;
|
|
41
|
+
//# sourceMappingURL=page-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-host.d.ts","sourceRoot":"","sources":["../src/page-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAChC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EACnC,MAAM,iBAAiB,CAAA;AAExB,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAA;IACX,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iDAAiD;IACjD,eAAe,CAAC,EAAE,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,CAAA;CAChF;AAED,MAAM,WAAW,4BAA6B,SAAQ,6BAA6B;IACjF,6DAA6D;IAC7D,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAC1C;AAED,MAAM,WAAW,2BAA4B,SAAQ,4BAA4B;IAC/E,0EAA0E;IAC1E,MAAM,CAAC,EAAE,yBAAyB,CAAA;IAClC,uDAAuD;IACvD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;IACjD,6CAA6C;IAC7C,QAAQ,EAAE,cAAc,CAAA;CACzB;AAiCD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,2BAA2B,CAiE7B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createBrowserCanvasClient, } from '@geometra/renderer-canvas';
|
|
2
|
+
import { createThreeGeometraSplitHost, } from './split-host.js';
|
|
3
|
+
function createSectionCanvas(doc, section, win) {
|
|
4
|
+
const wrapper = doc.createElement('div');
|
|
5
|
+
wrapper.style.width = '100%';
|
|
6
|
+
wrapper.style.height = `${section.height}px`;
|
|
7
|
+
wrapper.style.minWidth = '0';
|
|
8
|
+
wrapper.dataset.geometraSection = section.id;
|
|
9
|
+
const canvas = doc.createElement('canvas');
|
|
10
|
+
canvas.style.display = 'block';
|
|
11
|
+
canvas.style.width = '100%';
|
|
12
|
+
canvas.style.height = '100%';
|
|
13
|
+
wrapper.appendChild(canvas);
|
|
14
|
+
const handle = createBrowserCanvasClient({
|
|
15
|
+
url: section.url,
|
|
16
|
+
binaryFraming: section.binaryFraming,
|
|
17
|
+
canvas,
|
|
18
|
+
window: win,
|
|
19
|
+
rendererOptions: {
|
|
20
|
+
background: '#0b0e14',
|
|
21
|
+
...section.rendererOptions,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
return { wrapper, handle };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Page-level host that composes multiple Geometra canvas sections into a scrollable page.
|
|
28
|
+
*
|
|
29
|
+
* The top section is a viewport-height split host (Three.js + Geometra console panel).
|
|
30
|
+
* Optional header and below-fold sections are standard Geometra canvas clients rendered
|
|
31
|
+
* at full page width in normal document flow, so the browser handles scrolling.
|
|
32
|
+
*
|
|
33
|
+
* Each section connects to its own WebSocket endpoint. The server exposes multiple
|
|
34
|
+
* `createGeometraServer` instances on different `wsPath` values.
|
|
35
|
+
*/
|
|
36
|
+
export function createThreeGeometraPageHost(options) {
|
|
37
|
+
const { container, headerSection, belowFoldSections = [], ...splitOptions } = options;
|
|
38
|
+
const doc = container.ownerDocument;
|
|
39
|
+
const win = options.window ?? doc.defaultView;
|
|
40
|
+
if (!win) {
|
|
41
|
+
throw new Error('createThreeGeometraPageHost requires a browser window');
|
|
42
|
+
}
|
|
43
|
+
// Outer page container (normal document flow, scrollable)
|
|
44
|
+
const pageRoot = doc.createElement('div');
|
|
45
|
+
pageRoot.style.width = '100%';
|
|
46
|
+
container.appendChild(pageRoot);
|
|
47
|
+
// Header section (optional)
|
|
48
|
+
let headerHandle;
|
|
49
|
+
if (headerSection) {
|
|
50
|
+
const { wrapper, handle } = createSectionCanvas(doc, headerSection, win);
|
|
51
|
+
pageRoot.appendChild(wrapper);
|
|
52
|
+
headerHandle = handle;
|
|
53
|
+
}
|
|
54
|
+
// Split host section (viewport height)
|
|
55
|
+
const splitMount = doc.createElement('div');
|
|
56
|
+
splitMount.style.width = '100%';
|
|
57
|
+
splitMount.style.height = 'calc(100vh - ' + (headerSection ? headerSection.height : 0) + 'px)';
|
|
58
|
+
splitMount.style.clipPath = 'inset(0)';
|
|
59
|
+
pageRoot.appendChild(splitMount);
|
|
60
|
+
const splitHost = createThreeGeometraSplitHost({
|
|
61
|
+
...splitOptions,
|
|
62
|
+
container: splitMount,
|
|
63
|
+
});
|
|
64
|
+
// Below-fold sections
|
|
65
|
+
const belowFoldMap = new Map();
|
|
66
|
+
for (const section of belowFoldSections) {
|
|
67
|
+
const { wrapper, handle } = createSectionCanvas(doc, section, win);
|
|
68
|
+
pageRoot.appendChild(wrapper);
|
|
69
|
+
belowFoldMap.set(section.id, handle);
|
|
70
|
+
}
|
|
71
|
+
const originalDestroy = splitHost.destroy;
|
|
72
|
+
const destroy = () => {
|
|
73
|
+
headerHandle?.destroy();
|
|
74
|
+
for (const handle of belowFoldMap.values()) {
|
|
75
|
+
handle.destroy();
|
|
76
|
+
}
|
|
77
|
+
belowFoldMap.clear();
|
|
78
|
+
originalDestroy();
|
|
79
|
+
pageRoot.remove();
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
...splitHost,
|
|
83
|
+
header: headerHandle,
|
|
84
|
+
belowFold: belowFoldMap,
|
|
85
|
+
pageRoot,
|
|
86
|
+
destroy,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=page-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-host.js","sourceRoot":"","sources":["../src/page-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import type { Scene3dElement } from '@geometra/core';
|
|
3
|
+
/**
|
|
4
|
+
* Manages a Three.js scene graph from declarative {@link Scene3dObject} descriptors streamed
|
|
5
|
+
* from a Geometra server. Call {@link Scene3dManager.sync} each frame (or when the tree updates)
|
|
6
|
+
* to reconcile the live scene with the latest descriptor array.
|
|
7
|
+
*/
|
|
8
|
+
export declare class Scene3dManager {
|
|
9
|
+
readonly scene: THREE.Scene;
|
|
10
|
+
readonly camera: THREE.PerspectiveCamera;
|
|
11
|
+
private managed;
|
|
12
|
+
private sceneGroup;
|
|
13
|
+
private orbitControls;
|
|
14
|
+
private orbitControlsModule;
|
|
15
|
+
private cameraInitialized;
|
|
16
|
+
private lastCameraTarget;
|
|
17
|
+
constructor(scene: THREE.Scene, camera: THREE.PerspectiveCamera);
|
|
18
|
+
/**
|
|
19
|
+
* Reconcile the live Three.js scene with the given element's props.
|
|
20
|
+
* Creates, updates, or removes objects as needed.
|
|
21
|
+
* Camera position/target are applied on the first call; subsequent calls update
|
|
22
|
+
* orbit controls target but leave camera position to user interaction.
|
|
23
|
+
*/
|
|
24
|
+
sync(element: Scene3dElement, canvas?: HTMLCanvasElement): void;
|
|
25
|
+
/** Update orbit controls damping each frame. */
|
|
26
|
+
tick(): void;
|
|
27
|
+
private syncOrbitControls;
|
|
28
|
+
private applyOrbitConfig;
|
|
29
|
+
private reconcileObjects;
|
|
30
|
+
private clearManaged;
|
|
31
|
+
dispose(): void;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=scene3d-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene3d-manager.d.ts","sourceRoot":"","sources":["../src/scene3d-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EASV,cAAc,EAEf,MAAM,gBAAgB,CAAA;AAwBvB;;;;GAIG;AACH,qBAAa,cAAc;IASvB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK;IAC3B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,iBAAiB;IAT1C,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,aAAa,CAAoF;IACzG,OAAO,CAAC,mBAAmB,CAA6E;IACxG,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,gBAAgB,CAAsC;gBAGnD,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,iBAAiB;IAK1C;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI;IAqD/D,gDAAgD;IAChD,IAAI,IAAI,IAAI;IAIZ,OAAO,CAAC,iBAAiB;IAoCzB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,YAAY;IAQpB,OAAO,IAAI,IAAI;CAQhB"}
|