@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.
Files changed (47) hide show
  1. package/dist/__tests__/scene3d-manager.test.d.ts +2 -0
  2. package/dist/__tests__/scene3d-manager.test.d.ts.map +1 -0
  3. package/dist/__tests__/scene3d-manager.test.js +80 -0
  4. package/dist/__tests__/scene3d-manager.test.js.map +1 -0
  5. package/dist/host-css-coerce.d.ts +39 -0
  6. package/dist/host-css-coerce.d.ts.map +1 -0
  7. package/dist/host-css-coerce.js +69 -0
  8. package/dist/host-css-coerce.js.map +1 -0
  9. package/dist/host-layout-plain.d.ts +164 -0
  10. package/dist/host-layout-plain.d.ts.map +1 -0
  11. package/dist/host-layout-plain.js +255 -0
  12. package/dist/host-layout-plain.js.map +1 -0
  13. package/dist/index.d.ts +43 -5
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +42 -5
  16. package/dist/index.js.map +1 -1
  17. package/dist/layout-sync.d.ts +51 -0
  18. package/dist/layout-sync.d.ts.map +1 -0
  19. package/dist/layout-sync.js +59 -0
  20. package/dist/layout-sync.js.map +1 -0
  21. package/dist/page-host.d.ts +41 -0
  22. package/dist/page-host.d.ts.map +1 -0
  23. package/dist/page-host.js +89 -0
  24. package/dist/page-host.js.map +1 -0
  25. package/dist/scene3d-manager.d.ts +33 -0
  26. package/dist/scene3d-manager.d.ts.map +1 -0
  27. package/dist/scene3d-manager.js +394 -0
  28. package/dist/scene3d-manager.js.map +1 -0
  29. package/dist/split-host.d.ts +65 -9
  30. package/dist/split-host.d.ts.map +1 -1
  31. package/dist/split-host.js +115 -39
  32. package/dist/split-host.js.map +1 -1
  33. package/dist/stacked-host.d.ts +64 -14
  34. package/dist/stacked-host.d.ts.map +1 -1
  35. package/dist/stacked-host.js +77 -41
  36. package/dist/stacked-host.js.map +1 -1
  37. package/dist/three-scene-basics.d.ts +313 -2
  38. package/dist/three-scene-basics.d.ts.map +1 -1
  39. package/dist/three-scene-basics.js +418 -1
  40. package/dist/three-scene-basics.js.map +1 -1
  41. package/dist/utils.d.ts +156 -0
  42. package/dist/utils.d.ts.map +1 -1
  43. package/dist/utils.js +207 -6
  44. package/dist/utils.js.map +1 -1
  45. package/package.json +15 -18
  46. package/LICENSE +0 -21
  47. 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
- export { createThreeGeometraSplitHost, type ThreeGeometraSplitHostHandle, type ThreeGeometraSplitHostOptions, type ThreeFrameContext, type ThreeRuntimeContext, } from './split-host.js';
2
- export { createThreeGeometraStackedHost, type GeometraHudPlacement, type ThreeGeometraStackedHostHandle, type ThreeGeometraStackedHostOptions, } from './stacked-host.js';
3
- export { resizeGeometraThreePerspectiveView, setWebGLDrawingBufferSize } from './utils.js';
4
- export { createGeometraThreeSceneBasics, type GeometraThreeSceneBasicsOptions, } from './three-scene-basics.js';
5
- /** Re-export for hybrid apps using {@link createThreeGeometraSplitHost} with `onData`. */
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
@@ -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,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,GACrC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,kCAAkC,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAC1F,OAAO,EACL,8BAA8B,EAC9B,KAAK,+BAA+B,GACrC,MAAM,yBAAyB,CAAA;AAEhC,0FAA0F;AAC1F,OAAO,EAAE,kCAAkC,EAAE,MAAM,kBAAkB,CAAA"}
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
- export { createThreeGeometraSplitHost, } from './split-host.js';
2
- export { createThreeGeometraStackedHost, } from './stacked-host.js';
3
- export { resizeGeometraThreePerspectiveView, setWebGLDrawingBufferSize } from './utils.js';
4
- export { createGeometraThreeSceneBasics, } from './three-scene-basics.js';
5
- /** Re-export for hybrid apps using {@link createThreeGeometraSplitHost} with `onData`. */
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,GAK7B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,8BAA8B,GAI/B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,kCAAkC,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAC1F,OAAO,EACL,8BAA8B,GAE/B,MAAM,yBAAyB,CAAA;AAEhC,0FAA0F;AAC1F,OAAO,EAAE,kCAAkC,EAAE,MAAM,kBAAkB,CAAA"}
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":"AAAA,OAAO,EACL,yBAAyB,GAG1B,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,4BAA4B,GAG7B,MAAM,iBAAiB,CAAA;AAgCxB,SAAS,mBAAmB,CAC1B,GAAa,EACb,OAA4B,EAC5B,GAAW;IAEX,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACxC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAA;IAC5B,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAA;IAC5C,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAA;IAC5B,OAAO,CAAC,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,EAAE,CAAA;IAE5C,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAA;IAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;IAC5B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAE3B,MAAM,MAAM,GAAG,yBAAyB,CAAC;QACvC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM;QACN,MAAM,EAAE,GAAG;QACX,eAAe,EAAE;YACf,UAAU,EAAE,SAAS;YACrB,GAAG,OAAO,CAAC,eAAe;SAC3B;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AAC5B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAqC;IAErC,MAAM,EACJ,SAAS,EACT,aAAa,EACb,iBAAiB,GAAG,EAAE,EACtB,GAAG,YAAY,EAChB,GAAG,OAAO,CAAA;IAEX,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAA;IACnC,MAAM,GAAG,GAAI,OAA+B,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,CAAA;IACtE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IAED,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACzC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAA;IAC7B,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAE/B,4BAA4B;IAC5B,IAAI,YAAmD,CAAA;IACvD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,CAAC,CAAA;QACxE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC7B,YAAY,GAAG,MAAM,CAAA;IACvB,CAAC;IAED,uCAAuC;IACvC,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC3C,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAA;IAC/B,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,eAAe,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;IAC9F,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IAEhC,MAAM,SAAS,GAAG,4BAA4B,CAAC;QAC7C,GAAG,YAAY;QACf,SAAS,EAAE,UAAU;KACtB,CAAC,CAAA;IAEF,sBAAsB;IACtB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqC,CAAA;IACjE,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;QAClE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC7B,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAA;IACzC,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,YAAY,EAAE,OAAO,EAAE,CAAA;QACvB,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC;QACD,YAAY,CAAC,KAAK,EAAE,CAAA;QACpB,eAAe,EAAE,CAAA;QACjB,QAAQ,CAAC,MAAM,EAAE,CAAA;IACnB,CAAC,CAAA;IAED,OAAO;QACL,GAAG,SAAS;QACZ,MAAM,EAAE,YAAY;QACpB,SAAS,EAAE,YAAY;QACvB,QAAQ;QACR,OAAO;KACR,CAAA;AACH,CAAC"}
@@ -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"}