@iwsdk/core 0.4.2 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -7
- package/dist/asset/asset-manager.d.ts +136 -8
- package/dist/asset/asset-manager.d.ts.map +1 -1
- package/dist/asset/asset-manager.js +491 -47
- package/dist/asset/asset-manager.js.map +1 -1
- package/dist/asset/cache-manager.d.ts +4 -2
- package/dist/asset/cache-manager.d.ts.map +1 -1
- package/dist/asset/cache-manager.js +10 -3
- package/dist/asset/cache-manager.js.map +1 -1
- package/dist/asset/loaders/audio-loader.d.ts +1 -1
- package/dist/asset/loaders/audio-loader.d.ts.map +1 -1
- package/dist/asset/loaders/audio-loader.js +8 -26
- package/dist/asset/loaders/audio-loader.js.map +1 -1
- package/dist/asset/loaders/cached-asset-load.d.ts +35 -0
- package/dist/asset/loaders/cached-asset-load.d.ts.map +1 -0
- package/dist/asset/loaders/cached-asset-load.js +100 -0
- package/dist/asset/loaders/cached-asset-load.js.map +1 -0
- package/dist/asset/loaders/gltf-loader.d.ts +28 -1
- package/dist/asset/loaders/gltf-loader.d.ts.map +1 -1
- package/dist/asset/loaders/gltf-loader.js +254 -33
- package/dist/asset/loaders/gltf-loader.js.map +1 -1
- package/dist/asset/loaders/hdr-texture-loader.d.ts +1 -1
- package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -1
- package/dist/asset/loaders/hdr-texture-loader.js +19 -29
- package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
- package/dist/asset/loaders/texture-loader.d.ts +1 -1
- package/dist/asset/loaders/texture-loader.d.ts.map +1 -1
- package/dist/asset/loaders/texture-loader.js +9 -26
- package/dist/asset/loaders/texture-loader.js.map +1 -1
- package/dist/asset/loaders/uikitml-loader.d.ts +12 -0
- package/dist/asset/loaders/uikitml-loader.d.ts.map +1 -0
- package/dist/asset/loaders/uikitml-loader.js +44 -0
- package/dist/asset/loaders/uikitml-loader.js.map +1 -0
- package/dist/audio/audio-pool.d.ts +7 -0
- package/dist/audio/audio-pool.d.ts.map +1 -1
- package/dist/audio/audio-pool.js.map +1 -1
- package/dist/audio/audio-system.d.ts +1 -0
- package/dist/audio/audio-system.d.ts.map +1 -1
- package/dist/audio/audio-system.js +16 -2
- package/dist/audio/audio-system.js.map +1 -1
- package/dist/camera/camera-system.d.ts.map +1 -1
- package/dist/camera/camera-system.js +5 -3
- package/dist/camera/camera-system.js.map +1 -1
- package/dist/depth/depth-sensing-system.d.ts.map +1 -1
- package/dist/depth/depth-sensing-system.js +31 -10
- package/dist/depth/depth-sensing-system.js.map +1 -1
- package/dist/ecs/builtin-components.d.ts +1239 -0
- package/dist/ecs/builtin-components.d.ts.map +1 -0
- package/dist/ecs/builtin-components.js +87 -0
- package/dist/ecs/builtin-components.js.map +1 -0
- package/dist/ecs/component-editor-metadata.d.ts +19 -0
- package/dist/ecs/component-editor-metadata.d.ts.map +1 -0
- package/dist/ecs/component-editor-metadata.js +19 -0
- package/dist/ecs/component-editor-metadata.js.map +1 -0
- package/dist/ecs/component-manifest.d.ts +24 -0
- package/dist/ecs/component-manifest.d.ts.map +1 -0
- package/dist/ecs/component-manifest.js +121 -0
- package/dist/ecs/component-manifest.js.map +1 -0
- package/dist/ecs/component.d.ts +1 -0
- package/dist/ecs/component.d.ts.map +1 -1
- package/dist/ecs/entity.d.ts +20 -2
- package/dist/ecs/entity.d.ts.map +1 -1
- package/dist/ecs/entity.js +59 -3
- package/dist/ecs/entity.js.map +1 -1
- package/dist/ecs/index.d.ts +3 -1
- package/dist/ecs/index.d.ts.map +1 -1
- package/dist/ecs/system.d.ts +9 -0
- package/dist/ecs/system.d.ts.map +1 -1
- package/dist/ecs/system.js.map +1 -1
- package/dist/ecs/world.d.ts +158 -4
- package/dist/ecs/world.d.ts.map +1 -1
- package/dist/ecs/world.js +304 -5
- package/dist/ecs/world.js.map +1 -1
- package/dist/environment/dome-gradient.d.ts +2 -1
- package/dist/environment/dome-gradient.d.ts.map +1 -1
- package/dist/environment/dome-gradient.js +2 -1
- package/dist/environment/dome-gradient.js.map +1 -1
- package/dist/environment/environment-system.d.ts +19 -3
- package/dist/environment/environment-system.d.ts.map +1 -1
- package/dist/environment/environment-system.js +78 -48
- package/dist/environment/environment-system.js.map +1 -1
- package/dist/environment/gradient-environment.d.ts.map +1 -1
- package/dist/environment/gradient-environment.js +13 -7
- package/dist/environment/gradient-environment.js.map +1 -1
- package/dist/environment/scene-ar-environment.d.ts +39 -0
- package/dist/environment/scene-ar-environment.d.ts.map +1 -0
- package/dist/environment/scene-ar-environment.js +93 -0
- package/dist/environment/scene-ar-environment.js.map +1 -0
- package/dist/grab/grab-helpers.d.ts +39 -0
- package/dist/grab/grab-helpers.d.ts.map +1 -0
- package/dist/grab/grab-helpers.js +59 -0
- package/dist/grab/grab-helpers.js.map +1 -0
- package/dist/grab/grab-system.d.ts +45 -0
- package/dist/grab/grab-system.d.ts.map +1 -1
- package/dist/grab/grab-system.js +67 -5
- package/dist/grab/grab-system.js.map +1 -1
- package/dist/grab/grab-warnings.d.ts +14 -0
- package/dist/grab/grab-warnings.d.ts.map +1 -0
- package/dist/grab/grab-warnings.js +53 -0
- package/dist/grab/grab-warnings.js.map +1 -0
- package/dist/grab/handles.d.ts.map +1 -1
- package/dist/grab/handles.js +8 -3
- package/dist/grab/handles.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -16
- package/dist/index.js.map +1 -1
- package/dist/init/world-initializer.d.ts +11 -7
- package/dist/init/world-initializer.d.ts.map +1 -1
- package/dist/init/world-initializer.js +118 -57
- package/dist/init/world-initializer.js.map +1 -1
- package/dist/init/xr.d.ts +0 -1
- package/dist/init/xr.d.ts.map +1 -1
- package/dist/init/xr.js +12 -3
- package/dist/init/xr.js.map +1 -1
- package/dist/input/input-system.d.ts.map +1 -1
- package/dist/input/input-system.js +26 -11
- package/dist/input/input-system.js.map +1 -1
- package/dist/layers/xr-layer-state.d.ts +47 -0
- package/dist/layers/xr-layer-state.d.ts.map +1 -0
- package/dist/layers/xr-layer-state.js +23 -0
- package/dist/layers/xr-layer-state.js.map +1 -0
- package/dist/layers/xr-layer-system.d.ts +45 -93
- package/dist/layers/xr-layer-system.d.ts.map +1 -1
- package/dist/layers/xr-layer-system.js +4 -25
- package/dist/layers/xr-layer-system.js.map +1 -1
- package/dist/level/index.d.ts +6 -2
- package/dist/level/index.d.ts.map +1 -1
- package/dist/level/level-component-applier.d.ts +24 -0
- package/dist/level/level-component-applier.d.ts.map +1 -0
- package/dist/level/level-component-applier.js +199 -0
- package/dist/level/level-component-applier.js.map +1 -0
- package/dist/level/level-player-rig.d.ts +17 -0
- package/dist/level/level-player-rig.d.ts.map +1 -0
- package/dist/level/level-player-rig.js +113 -0
- package/dist/level/level-player-rig.js.map +1 -0
- package/dist/level/level-scene-environment.d.ts +28 -0
- package/dist/level/level-scene-environment.d.ts.map +1 -0
- package/dist/level/level-scene-environment.js +121 -0
- package/dist/level/level-scene-environment.js.map +1 -0
- package/dist/level/level-scene-json-importer.d.ts +53 -0
- package/dist/level/level-scene-json-importer.d.ts.map +1 -0
- package/dist/level/level-scene-json-importer.js +256 -0
- package/dist/level/level-scene-json-importer.js.map +1 -0
- package/dist/level/level-scene-material.d.ts +22 -0
- package/dist/level/level-scene-material.d.ts.map +1 -0
- package/dist/level/level-scene-material.js +231 -0
- package/dist/level/level-scene-material.js.map +1 -0
- package/dist/level/level-scene-object.d.ts +49 -0
- package/dist/level/level-scene-object.d.ts.map +1 -0
- package/dist/level/level-scene-object.js +396 -0
- package/dist/level/level-scene-object.js.map +1 -0
- package/dist/level/level-scene-primitive.d.ts +21 -0
- package/dist/level/level-scene-primitive.d.ts.map +1 -0
- package/dist/level/level-scene-primitive.js +159 -0
- package/dist/level/level-scene-primitive.js.map +1 -0
- package/dist/level/level-system.d.ts +14 -20
- package/dist/level/level-system.d.ts.map +1 -1
- package/dist/level/level-system.js +114 -49
- package/dist/level/level-system.js.map +1 -1
- package/dist/lighting/index.d.ts +10 -0
- package/dist/lighting/index.d.ts.map +1 -0
- package/dist/lighting/index.js +4 -0
- package/dist/lighting/index.js.map +1 -0
- package/dist/lighting/light-binding.d.ts +76 -0
- package/dist/lighting/light-binding.d.ts.map +1 -0
- package/dist/lighting/light-binding.js +229 -0
- package/dist/lighting/light-binding.js.map +1 -0
- package/dist/lighting/light-components.d.ts +885 -0
- package/dist/lighting/light-components.d.ts.map +1 -0
- package/dist/lighting/light-components.js +146 -0
- package/dist/lighting/light-components.js.map +1 -0
- package/dist/lighting/light-system.d.ts +919 -0
- package/dist/lighting/light-system.d.ts.map +1 -0
- package/dist/lighting/light-system.js +244 -0
- package/dist/lighting/light-system.js.map +1 -0
- package/dist/locomotion/locomotion-environment.d.ts +27 -0
- package/dist/locomotion/locomotion-environment.d.ts.map +1 -0
- package/dist/locomotion/locomotion-environment.js +22 -0
- package/dist/locomotion/locomotion-environment.js.map +1 -0
- package/dist/locomotion/locomotion.d.ts +5 -34
- package/dist/locomotion/locomotion.d.ts.map +1 -1
- package/dist/locomotion/locomotion.js +33 -31
- package/dist/locomotion/locomotion.js.map +1 -1
- package/dist/locomotion/materials/line.js +1 -1
- package/dist/locomotion/slide.d.ts.map +1 -1
- package/dist/locomotion/slide.js +2 -2
- package/dist/locomotion/slide.js.map +1 -1
- package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
- package/dist/mcp/ecs-debug-tools.js +10 -2
- package/dist/mcp/ecs-debug-tools.js.map +1 -1
- package/dist/mcp/mcp-runtime.d.ts.map +1 -1
- package/dist/mcp/mcp-runtime.js +4 -1
- package/dist/mcp/mcp-runtime.js.map +1 -1
- package/dist/mcp/scene-tools.d.ts +152 -1
- package/dist/mcp/scene-tools.d.ts.map +1 -1
- package/dist/mcp/scene-tools.js +538 -8
- package/dist/mcp/scene-tools.js.map +1 -1
- package/dist/physics/index.js +11 -4
- package/dist/physics/index.js.map +1 -1
- package/dist/physics/physics-system.d.ts +704 -11
- package/dist/physics/physics-system.d.ts.map +1 -1
- package/dist/physics/physics-system.js +307 -25
- package/dist/physics/physics-system.js.map +1 -1
- package/dist/physics/physicsBody.d.ts +40 -1
- package/dist/physics/physicsBody.d.ts.map +1 -1
- package/dist/physics/physicsBody.js +39 -0
- package/dist/physics/physicsBody.js.map +1 -1
- package/dist/physics/physicsManipulation.d.ts +1 -1
- package/dist/physics/physicsManipulation.d.ts.map +1 -1
- package/dist/physics/physicsShape.d.ts +5 -3
- package/dist/physics/physicsShape.d.ts.map +1 -1
- package/dist/physics/physicsShape.js +2 -1
- package/dist/physics/physicsShape.js.map +1 -1
- package/dist/physics/utils.d.ts +10 -0
- package/dist/physics/utils.d.ts.map +1 -1
- package/dist/physics/utils.js +82 -48
- package/dist/physics/utils.js.map +1 -1
- package/dist/project/index.d.ts +11 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +5 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/normalize.d.ts +19 -0
- package/dist/project/normalize.d.ts.map +1 -0
- package/dist/project/normalize.js +206 -0
- package/dist/project/normalize.js.map +1 -0
- package/dist/project/paths.d.ts +21 -0
- package/dist/project/paths.d.ts.map +1 -0
- package/dist/project/paths.js +75 -0
- package/dist/project/paths.js.map +1 -0
- package/dist/project/types.d.ts +159 -0
- package/dist/project/types.d.ts.map +1 -0
- package/dist/project/types.js +11 -0
- package/dist/project/types.js.map +1 -0
- package/dist/project/validation.d.ts +17 -0
- package/dist/project/validation.d.ts.map +1 -0
- package/dist/project/validation.js +501 -0
- package/dist/project/validation.js.map +1 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts +23 -2
- package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
- package/dist/scene-understanding/scene-understanding-system.js +76 -54
- package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
- package/dist/schemas/iwsdk-project.v1.schema.json +305 -0
- package/dist/transform/transform-component.d.ts +32 -0
- package/dist/transform/transform-component.d.ts.map +1 -0
- package/dist/transform/transform-component.js +24 -0
- package/dist/transform/transform-component.js.map +1 -0
- package/dist/transform/transform.d.ts +9 -42
- package/dist/transform/transform.d.ts.map +1 -1
- package/dist/transform/transform.js +8 -25
- package/dist/transform/transform.js.map +1 -1
- package/dist/ui/document.d.ts +9 -2
- package/dist/ui/document.d.ts.map +1 -1
- package/dist/ui/document.js +30 -5
- package/dist/ui/document.js.map +1 -1
- package/dist/ui/follow-component.d.ts +57 -0
- package/dist/ui/follow-component.d.ts.map +1 -0
- package/dist/ui/follow-component.js +38 -0
- package/dist/ui/follow-component.js.map +1 -0
- package/dist/ui/follow.d.ts +28 -102
- package/dist/ui/follow.d.ts.map +1 -1
- package/dist/ui/follow.js +10 -48
- package/dist/ui/follow.js.map +1 -1
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/panel-components.d.ts +29 -0
- package/dist/ui/panel-components.d.ts.map +1 -0
- package/dist/ui/panel-components.js +22 -0
- package/dist/ui/panel-components.js.map +1 -0
- package/dist/ui/screenspace-component.d.ts +39 -0
- package/dist/ui/screenspace-component.d.ts.map +1 -0
- package/dist/ui/screenspace-component.js +21 -0
- package/dist/ui/screenspace-component.js.map +1 -0
- package/dist/ui/screenspace.d.ts +47 -135
- package/dist/ui/screenspace.d.ts.map +1 -1
- package/dist/ui/screenspace.js +127 -65
- package/dist/ui/screenspace.js.map +1 -1
- package/dist/ui/ui.d.ts +20 -122
- package/dist/ui/ui.d.ts.map +1 -1
- package/dist/ui/ui.js +44 -107
- package/dist/ui/ui.js.map +1 -1
- package/dist/ui/uikitml-asset.d.ts +25 -0
- package/dist/ui/uikitml-asset.d.ts.map +1 -0
- package/dist/ui/uikitml-asset.js +56 -0
- package/dist/ui/uikitml-asset.js.map +1 -0
- package/dist/ui/uikitml.d.ts +41 -0
- package/dist/ui/uikitml.d.ts.map +1 -0
- package/dist/ui/uikitml.js +119 -0
- package/dist/ui/uikitml.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/visibility/visibility-component.d.ts +14 -0
- package/dist/visibility/visibility-component.d.ts.map +1 -0
- package/dist/visibility/visibility-component.js +15 -0
- package/dist/visibility/visibility-component.js.map +1 -0
- package/dist/visibility/visibility.d.ts +3 -10
- package/dist/visibility/visibility.d.ts.map +1 -1
- package/dist/visibility/visibility.js +9 -12
- package/dist/visibility/visibility.js.map +1 -1
- package/package.json +36 -8
- package/dist/ecs/component-registry.d.ts +0 -54
- package/dist/ecs/component-registry.d.ts.map +0 -1
- package/dist/ecs/component-registry.js +0 -86
- package/dist/ecs/component-registry.js.map +0 -1
- package/dist/level/level-entity-creator.d.ts +0 -27
- package/dist/level/level-entity-creator.d.ts.map +0 -1
- package/dist/level/level-entity-creator.js +0 -108
- package/dist/level/level-entity-creator.js.map +0 -1
- package/dist/level/level-glxf-importer.d.ts +0 -23
- package/dist/level/level-glxf-importer.d.ts.map +0 -1
- package/dist/level/level-glxf-importer.js +0 -40
- package/dist/level/level-glxf-importer.js.map +0 -1
package/dist/ui/screenspace.d.ts
CHANGED
|
@@ -4,185 +4,72 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* CSS‑like screen‑space layout for a {@link PanelUI}.
|
|
10
|
-
*
|
|
11
|
-
* @remarks
|
|
12
|
-
* When XR is not presenting, the panel is re‑parented under the active camera and positioned
|
|
13
|
-
* in pixels using CSS‑like expressions for `top`/`left`/`bottom`/`right`, with `width`/`height`
|
|
14
|
-
* specified in any CSS units supported by the browser (e.g. `px`, `vw`, `vh`, `%`, `em`).
|
|
15
|
-
*
|
|
16
|
-
* On XR session start, the panel is automatically returned to world space.
|
|
17
|
-
*
|
|
18
|
-
* All size inputs are ultimately converted to meters using the camera frustum at `zOffset`.
|
|
19
|
-
*
|
|
20
|
-
* @example Place a panel at bottom‑right, 40% width, auto height
|
|
21
|
-
* ```ts
|
|
22
|
-
* entity.addComponent(PanelUI, { config: '/ui/menu.json' })
|
|
23
|
-
* entity.addComponent(ScreenSpace, {
|
|
24
|
-
* width: '40vw',
|
|
25
|
-
* height: 'auto',
|
|
26
|
-
* bottom: '24px',
|
|
27
|
-
* right: '24px',
|
|
28
|
-
* zOffset: 0.25,
|
|
29
|
-
* })
|
|
30
|
-
* ```
|
|
31
|
-
*
|
|
32
|
-
* @category UI
|
|
33
|
-
*/
|
|
34
|
-
export declare const ScreenSpace: import("elics").Component<{
|
|
35
|
-
/** CSS size expression for height (e.g., `240px`, `40vh`, `auto`). */
|
|
36
|
-
height: {
|
|
37
|
-
type: Types.String;
|
|
38
|
-
default: string;
|
|
39
|
-
};
|
|
40
|
-
/** CSS size expression for width (e.g., `480px`, `40vw`, `auto`). */
|
|
41
|
-
width: {
|
|
42
|
-
type: Types.String;
|
|
43
|
-
default: string;
|
|
44
|
-
};
|
|
45
|
-
/** CSS absolute `top` position (pixels/percent/vh) or `auto`. */
|
|
46
|
-
top: {
|
|
47
|
-
type: Types.String;
|
|
48
|
-
default: string;
|
|
49
|
-
};
|
|
50
|
-
/** CSS absolute `bottom` position (pixels/percent/vh) or `auto`. */
|
|
51
|
-
bottom: {
|
|
52
|
-
type: Types.String;
|
|
53
|
-
default: string;
|
|
54
|
-
};
|
|
55
|
-
/** CSS absolute `left` position (pixels/percent/vw) or `auto`. */
|
|
56
|
-
left: {
|
|
57
|
-
type: Types.String;
|
|
58
|
-
default: string;
|
|
59
|
-
};
|
|
60
|
-
/** CSS absolute `right` position (pixels/percent/vw) or `auto`. */
|
|
61
|
-
right: {
|
|
62
|
-
type: Types.String;
|
|
63
|
-
default: string;
|
|
64
|
-
};
|
|
65
|
-
/** Distance in meters in front of the camera’s near plane. */
|
|
66
|
-
zOffset: {
|
|
67
|
-
type: Types.Float32;
|
|
68
|
-
default: number;
|
|
69
|
-
};
|
|
70
|
-
}>;
|
|
7
|
+
export { ScreenSpace } from './screenspace-component.js';
|
|
71
8
|
declare const ScreenSpaceUISystem_base: import("elics").SystemConstructor<import("elics").SystemSchema, {
|
|
72
9
|
panels: {
|
|
73
|
-
required:
|
|
74
|
-
config: {
|
|
75
|
-
type: Types.String;
|
|
76
|
-
default: string;
|
|
77
|
-
};
|
|
78
|
-
maxWidth: {
|
|
79
|
-
type: Types.Float32;
|
|
80
|
-
default: number;
|
|
81
|
-
};
|
|
82
|
-
maxHeight: {
|
|
83
|
-
type: Types.Float32;
|
|
84
|
-
default: number;
|
|
85
|
-
};
|
|
86
|
-
}> | import("elics").Component<{
|
|
87
|
-
document: {
|
|
88
|
-
type: Types.Object;
|
|
89
|
-
default: undefined;
|
|
90
|
-
};
|
|
91
|
-
}> | import("elics").Component<{
|
|
92
|
-
/** CSS size expression for height (e.g., `240px`, `40vh`, `auto`). */
|
|
10
|
+
required: import("elics").Component<{
|
|
93
11
|
height: {
|
|
94
|
-
type: Types.String;
|
|
12
|
+
type: import("elics").Types.String;
|
|
95
13
|
default: string;
|
|
96
14
|
};
|
|
97
|
-
/** CSS size expression for width (e.g., `480px`, `40vw`, `auto`). */
|
|
98
15
|
width: {
|
|
99
|
-
type: Types.String;
|
|
16
|
+
type: import("elics").Types.String;
|
|
100
17
|
default: string;
|
|
101
18
|
};
|
|
102
|
-
/** CSS absolute `top` position (pixels/percent/vh) or `auto`. */
|
|
103
19
|
top: {
|
|
104
|
-
type: Types.String;
|
|
20
|
+
type: import("elics").Types.String;
|
|
105
21
|
default: string;
|
|
106
22
|
};
|
|
107
|
-
/** CSS absolute `bottom` position (pixels/percent/vh) or `auto`. */
|
|
108
23
|
bottom: {
|
|
109
|
-
type: Types.String;
|
|
24
|
+
type: import("elics").Types.String;
|
|
110
25
|
default: string;
|
|
111
26
|
};
|
|
112
|
-
/** CSS absolute `left` position (pixels/percent/vw) or `auto`. */
|
|
113
27
|
left: {
|
|
114
|
-
type: Types.String;
|
|
28
|
+
type: import("elics").Types.String;
|
|
115
29
|
default: string;
|
|
116
30
|
};
|
|
117
|
-
/** CSS absolute `right` position (pixels/percent/vw) or `auto`. */
|
|
118
31
|
right: {
|
|
119
|
-
type: Types.String;
|
|
32
|
+
type: import("elics").Types.String;
|
|
120
33
|
default: string;
|
|
121
34
|
};
|
|
122
|
-
/** Distance in meters in front of the camera’s near plane. */
|
|
123
35
|
zOffset: {
|
|
124
|
-
type: Types.Float32;
|
|
36
|
+
type: import("elics").Types.Float32;
|
|
125
37
|
default: number;
|
|
126
38
|
};
|
|
127
|
-
}>
|
|
39
|
+
}>[];
|
|
128
40
|
};
|
|
129
41
|
}, import("../index.js").World, import("../ecs/system.js").System<import("elics").SystemSchema, {
|
|
130
42
|
panels: {
|
|
131
|
-
required:
|
|
132
|
-
config: {
|
|
133
|
-
type: Types.String;
|
|
134
|
-
default: string;
|
|
135
|
-
};
|
|
136
|
-
maxWidth: {
|
|
137
|
-
type: Types.Float32;
|
|
138
|
-
default: number;
|
|
139
|
-
};
|
|
140
|
-
maxHeight: {
|
|
141
|
-
type: Types.Float32;
|
|
142
|
-
default: number;
|
|
143
|
-
};
|
|
144
|
-
}> | import("elics").Component<{
|
|
145
|
-
document: {
|
|
146
|
-
type: Types.Object;
|
|
147
|
-
default: undefined;
|
|
148
|
-
};
|
|
149
|
-
}> | import("elics").Component<{
|
|
150
|
-
/** CSS size expression for height (e.g., `240px`, `40vh`, `auto`). */
|
|
43
|
+
required: import("elics").Component<{
|
|
151
44
|
height: {
|
|
152
|
-
type: Types.String;
|
|
45
|
+
type: import("elics").Types.String;
|
|
153
46
|
default: string;
|
|
154
47
|
};
|
|
155
|
-
/** CSS size expression for width (e.g., `480px`, `40vw`, `auto`). */
|
|
156
48
|
width: {
|
|
157
|
-
type: Types.String;
|
|
49
|
+
type: import("elics").Types.String;
|
|
158
50
|
default: string;
|
|
159
51
|
};
|
|
160
|
-
/** CSS absolute `top` position (pixels/percent/vh) or `auto`. */
|
|
161
52
|
top: {
|
|
162
|
-
type: Types.String;
|
|
53
|
+
type: import("elics").Types.String;
|
|
163
54
|
default: string;
|
|
164
55
|
};
|
|
165
|
-
/** CSS absolute `bottom` position (pixels/percent/vh) or `auto`. */
|
|
166
56
|
bottom: {
|
|
167
|
-
type: Types.String;
|
|
57
|
+
type: import("elics").Types.String;
|
|
168
58
|
default: string;
|
|
169
59
|
};
|
|
170
|
-
/** CSS absolute `left` position (pixels/percent/vw) or `auto`. */
|
|
171
60
|
left: {
|
|
172
|
-
type: Types.String;
|
|
61
|
+
type: import("elics").Types.String;
|
|
173
62
|
default: string;
|
|
174
63
|
};
|
|
175
|
-
/** CSS absolute `right` position (pixels/percent/vw) or `auto`. */
|
|
176
64
|
right: {
|
|
177
|
-
type: Types.String;
|
|
65
|
+
type: import("elics").Types.String;
|
|
178
66
|
default: string;
|
|
179
67
|
};
|
|
180
|
-
/** Distance in meters in front of the camera’s near plane. */
|
|
181
68
|
zOffset: {
|
|
182
|
-
type: Types.Float32;
|
|
69
|
+
type: import("elics").Types.Float32;
|
|
183
70
|
default: number;
|
|
184
71
|
};
|
|
185
|
-
}>
|
|
72
|
+
}>[];
|
|
186
73
|
};
|
|
187
74
|
}>>;
|
|
188
75
|
/**
|
|
@@ -193,29 +80,54 @@ declare const ScreenSpaceUISystem_base: import("elics").SystemConstructor<import
|
|
|
193
80
|
* a camera‑relative plane given by `zOffset`.
|
|
194
81
|
* - Automatically toggles between screen‑space (under the camera) and world‑space depending on
|
|
195
82
|
* `renderer.xr.isPresenting`.
|
|
196
|
-
* -
|
|
197
|
-
*
|
|
83
|
+
* - Uses {@link UIKitDocument.setTargetDimensions} while camera-local, then restores intrinsic
|
|
84
|
+
* size in XR so the entity transform remains the world-space scale authority.
|
|
198
85
|
*
|
|
199
86
|
* @category UI
|
|
200
87
|
*/
|
|
201
88
|
export declare class ScreenSpaceUISystem extends ScreenSpaceUISystem_base {
|
|
202
89
|
private screenSpaceDescendants;
|
|
90
|
+
private documentSizes;
|
|
91
|
+
private entityDocuments;
|
|
92
|
+
private layoutEnvironment?;
|
|
203
93
|
private layoutHelpers;
|
|
204
94
|
private resized;
|
|
95
|
+
private autoDimensionWarned;
|
|
205
96
|
/** Prepare hidden DOM helpers and resize listener. */
|
|
206
97
|
init(): void;
|
|
207
98
|
/** Move panels between world and screen space and recompute layout on changes. */
|
|
208
99
|
update(): void;
|
|
100
|
+
/** Detect every renderer/camera input used to map screen pixels into world units. */
|
|
101
|
+
private hasLayoutEnvironmentChanged;
|
|
102
|
+
/** Resolve legacy component-backed and manifest-backed UIKit documents. */
|
|
103
|
+
private resolveDocument;
|
|
104
|
+
/** Track intrinsic UIKit dimensions so late font/content layout invalidates positioning. */
|
|
105
|
+
private hasDocumentSizeChanged;
|
|
209
106
|
/** Compute pixel size/position and apply camera‑relative transform. */
|
|
210
107
|
private calculateLayout;
|
|
211
108
|
/**
|
|
212
109
|
* Evaluate CSS expressions for width/height using a temporary DOM node.
|
|
213
110
|
* Returns pixel values from `window.getComputedStyle`.
|
|
111
|
+
*
|
|
112
|
+
* @remarks
|
|
113
|
+
* Older scene documents may explicitly declare `'auto'`. On a floating
|
|
114
|
+
* helper `<div>` the browser resolves an unconstrained `auto`
|
|
115
|
+
* dimension to `0px`. A `0px` target collapses {@link
|
|
116
|
+
* UIKitDocument.setTargetDimensions} and the panel retains its intrinsic
|
|
117
|
+
* world-space size inside camera space, blowing the UI up to most of the
|
|
118
|
+
* viewport. Until aspect-ratio derivation from the
|
|
119
|
+
* other axis lands, treat `'auto'` as an unsupported size for screen-space
|
|
120
|
+
* layout: warn once per axis, and clamp the contributing CSS expression to
|
|
121
|
+
* a viewport-relative fallback that produces a sensibly-sized HUD.
|
|
214
122
|
*/
|
|
215
123
|
private getComputedDimensionValues;
|
|
124
|
+
/**
|
|
125
|
+
* Substitute a `'25vw'` / `'25vh'` fallback for `'auto'` on the given axis,
|
|
126
|
+
* logging a single warning per axis the first time it triggers.
|
|
127
|
+
*/
|
|
128
|
+
private resolveAutoDimension;
|
|
216
129
|
/** Evaluate CSS absolute positioning and return `top`/`left` in pixels. */
|
|
217
130
|
private getComputedPositionValues;
|
|
218
131
|
destroy(): void;
|
|
219
132
|
}
|
|
220
|
-
export {};
|
|
221
133
|
//# sourceMappingURL=screenspace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenspace.d.ts","sourceRoot":"","sources":["../../src/ui/screenspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"screenspace.d.ts","sourceRoot":"","sources":["../../src/ui/screenspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQzD;;;;;;;;;;;;GAYG;AACH,qBAAa,mBAAoB,SAAQ,wBAEvC;IACA,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,aAAa,CAGjB;IACJ,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAKnB;IACF,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,mBAAmB,CAAmC;IAE9D,sDAAsD;IACtD,IAAI;IAoBJ,kFAAkF;IAClF,MAAM,IAAI,IAAI;IAkDd,qFAAqF;IACrF,OAAO,CAAC,2BAA2B;IAkBnC,2EAA2E;IAC3E,OAAO,CAAC,eAAe;IA4BvB,4FAA4F;IAC5F,OAAO,CAAC,sBAAsB;IAe9B,uEAAuE;IACvE,OAAO,CAAC,eAAe;IA4EvB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,0BAA0B;IAmBlC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAkB5B,2EAA2E;IAC3E,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,IAAI,IAAI;CAOhB"}
|
package/dist/ui/screenspace.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createComponent, Types } from 'elics';
|
|
2
1
|
import { createSystem } from '../ecs/system.js';
|
|
3
|
-
import '
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
2
|
+
import { UIKitDocument } from './document.js';
|
|
3
|
+
import { ScreenSpace } from './screenspace-component.js';
|
|
4
|
+
import './ui.js';
|
|
5
|
+
import { PanelDocument } from './panel-components.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
@@ -10,48 +10,6 @@ import { MathUtils } from 'three';
|
|
|
10
10
|
* This source code is licensed under the MIT license found in the
|
|
11
11
|
* LICENSE file in the root directory of this source tree.
|
|
12
12
|
*/
|
|
13
|
-
/**
|
|
14
|
-
* CSS‑like screen‑space layout for a {@link PanelUI}.
|
|
15
|
-
*
|
|
16
|
-
* @remarks
|
|
17
|
-
* When XR is not presenting, the panel is re‑parented under the active camera and positioned
|
|
18
|
-
* in pixels using CSS‑like expressions for `top`/`left`/`bottom`/`right`, with `width`/`height`
|
|
19
|
-
* specified in any CSS units supported by the browser (e.g. `px`, `vw`, `vh`, `%`, `em`).
|
|
20
|
-
*
|
|
21
|
-
* On XR session start, the panel is automatically returned to world space.
|
|
22
|
-
*
|
|
23
|
-
* All size inputs are ultimately converted to meters using the camera frustum at `zOffset`.
|
|
24
|
-
*
|
|
25
|
-
* @example Place a panel at bottom‑right, 40% width, auto height
|
|
26
|
-
* ```ts
|
|
27
|
-
* entity.addComponent(PanelUI, { config: '/ui/menu.json' })
|
|
28
|
-
* entity.addComponent(ScreenSpace, {
|
|
29
|
-
* width: '40vw',
|
|
30
|
-
* height: 'auto',
|
|
31
|
-
* bottom: '24px',
|
|
32
|
-
* right: '24px',
|
|
33
|
-
* zOffset: 0.25,
|
|
34
|
-
* })
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* @category UI
|
|
38
|
-
*/
|
|
39
|
-
const ScreenSpace = createComponent('ScreenSpace', {
|
|
40
|
-
/** CSS size expression for height (e.g., `240px`, `40vh`, `auto`). */
|
|
41
|
-
height: { type: Types.String, default: 'auto' },
|
|
42
|
-
/** CSS size expression for width (e.g., `480px`, `40vw`, `auto`). */
|
|
43
|
-
width: { type: Types.String, default: 'auto' },
|
|
44
|
-
/** CSS absolute `top` position (pixels/percent/vh) or `auto`. */
|
|
45
|
-
top: { type: Types.String, default: 'auto' },
|
|
46
|
-
/** CSS absolute `bottom` position (pixels/percent/vh) or `auto`. */
|
|
47
|
-
bottom: { type: Types.String, default: 'auto' },
|
|
48
|
-
/** CSS absolute `left` position (pixels/percent/vw) or `auto`. */
|
|
49
|
-
left: { type: Types.String, default: 'auto' },
|
|
50
|
-
/** CSS absolute `right` position (pixels/percent/vw) or `auto`. */
|
|
51
|
-
right: { type: Types.String, default: 'auto' },
|
|
52
|
-
/** Distance in meters in front of the camera’s near plane. */
|
|
53
|
-
zOffset: { type: Types.Float32, default: 0.2 },
|
|
54
|
-
}, 'Component for screen-space UI positioning');
|
|
55
13
|
/**
|
|
56
14
|
* Positions {@link PanelUI} documents relative to the camera with CSS‑like semantics.
|
|
57
15
|
*
|
|
@@ -60,17 +18,19 @@ const ScreenSpace = createComponent('ScreenSpace', {
|
|
|
60
18
|
* a camera‑relative plane given by `zOffset`.
|
|
61
19
|
* - Automatically toggles between screen‑space (under the camera) and world‑space depending on
|
|
62
20
|
* `renderer.xr.isPresenting`.
|
|
63
|
-
* -
|
|
64
|
-
*
|
|
21
|
+
* - Uses {@link UIKitDocument.setTargetDimensions} while camera-local, then restores intrinsic
|
|
22
|
+
* size in XR so the entity transform remains the world-space scale authority.
|
|
65
23
|
*
|
|
66
24
|
* @category UI
|
|
67
25
|
*/
|
|
68
26
|
class ScreenSpaceUISystem extends createSystem({
|
|
69
|
-
panels: { required: [
|
|
27
|
+
panels: { required: [ScreenSpace] },
|
|
70
28
|
}) {
|
|
71
29
|
constructor() {
|
|
72
30
|
super(...arguments);
|
|
73
31
|
this.screenSpaceDescendants = [];
|
|
32
|
+
this.documentSizes = new WeakMap();
|
|
33
|
+
this.entityDocuments = new WeakMap();
|
|
74
34
|
this.layoutHelpers = {
|
|
75
35
|
dimensionContainer: document.createElement('div'),
|
|
76
36
|
positionContainer: document.createElement('div'),
|
|
@@ -78,6 +38,7 @@ class ScreenSpaceUISystem extends createSystem({
|
|
|
78
38
|
positionElement: document.createElement('div'),
|
|
79
39
|
};
|
|
80
40
|
this.resized = true;
|
|
41
|
+
this.autoDimensionWarned = { width: false, height: false };
|
|
81
42
|
}
|
|
82
43
|
/** Prepare hidden DOM helpers and resize listener. */
|
|
83
44
|
init() {
|
|
@@ -89,51 +50,114 @@ class ScreenSpaceUISystem extends createSystem({
|
|
|
89
50
|
this.layoutHelpers.positionContainer.style.height = '100vh';
|
|
90
51
|
this.layoutHelpers.positionContainer.style.position = 'relative';
|
|
91
52
|
this.layoutHelpers.positionContainer.style.visibility = 'hidden';
|
|
92
|
-
|
|
53
|
+
const onResize = () => {
|
|
93
54
|
this.resized = true;
|
|
94
|
-
}
|
|
55
|
+
};
|
|
56
|
+
window.addEventListener('resize', onResize, false);
|
|
57
|
+
this.cleanupFuncs.push(() => window.removeEventListener('resize', onResize, false));
|
|
95
58
|
}
|
|
96
59
|
/** Move panels between world and screen space and recompute layout on changes. */
|
|
97
60
|
update() {
|
|
98
61
|
this.screenSpaceDescendants.length = 0;
|
|
62
|
+
const resized = this.resized;
|
|
63
|
+
const layoutEnvironmentChanged = this.hasLayoutEnvironmentChanged();
|
|
99
64
|
this.queries.panels.entities.forEach((entity) => {
|
|
100
65
|
const parent = entity.object3D;
|
|
101
|
-
const document =
|
|
66
|
+
const document = this.resolveDocument(entity);
|
|
102
67
|
if (!document) {
|
|
103
68
|
return;
|
|
104
69
|
} // Skip if UI not loaded yet
|
|
105
70
|
const panelInScreenSpace = document.parent === this.camera;
|
|
71
|
+
const documentSizeChanged = this.hasDocumentSizeChanged(document);
|
|
106
72
|
if (this.renderer.xr.isPresenting && panelInScreenSpace) {
|
|
107
73
|
// Move back to world space when entering XR
|
|
108
74
|
parent === null || parent === void 0 ? void 0 : parent.add(document);
|
|
75
|
+
document.clearTargetDimensions();
|
|
109
76
|
// Reset position that were set during screen space layout
|
|
110
77
|
document.position.set(0, 0, 0);
|
|
111
78
|
}
|
|
112
79
|
else if (!this.renderer.xr.isPresenting && !panelInScreenSpace) {
|
|
113
80
|
// Move to screen space when not in XR
|
|
114
81
|
this.camera.add(document);
|
|
115
|
-
this.calculateLayout(entity);
|
|
82
|
+
this.calculateLayout(entity, document);
|
|
116
83
|
}
|
|
117
|
-
else if (panelInScreenSpace &&
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
84
|
+
else if (panelInScreenSpace &&
|
|
85
|
+
(resized || documentSizeChanged || layoutEnvironmentChanged)) {
|
|
86
|
+
// Recalculate when the viewport, camera projection, or UIKit's intrinsic
|
|
87
|
+
// layout changes. In particular, three.js restores the browser camera one
|
|
88
|
+
// frame after XR ends, so the first non-XR layout may still see the XR
|
|
89
|
+
// projection and must self-correct on the following frame.
|
|
90
|
+
this.calculateLayout(entity, document);
|
|
121
91
|
}
|
|
122
92
|
if (document.parent === this.camera) {
|
|
123
93
|
this.screenSpaceDescendants.push(document);
|
|
124
94
|
}
|
|
125
95
|
});
|
|
96
|
+
this.resized = false;
|
|
126
97
|
const scene = this.scene;
|
|
127
98
|
scene.screenSpaceDescendants =
|
|
128
99
|
this.screenSpaceDescendants.length > 0
|
|
129
100
|
? this.screenSpaceDescendants
|
|
130
101
|
: undefined;
|
|
131
102
|
}
|
|
103
|
+
/** Detect every renderer/camera input used to map screen pixels into world units. */
|
|
104
|
+
hasLayoutEnvironmentChanged() {
|
|
105
|
+
const next = {
|
|
106
|
+
canvasWidth: this.renderer.domElement.clientWidth,
|
|
107
|
+
canvasHeight: this.renderer.domElement.clientHeight,
|
|
108
|
+
// Matrix element 5 is the vertical projection scale. Unlike camera.fov,
|
|
109
|
+
// it also reflects zoom and direct projection-matrix changes.
|
|
110
|
+
projectionScaleY: this.camera.projectionMatrix.elements[5],
|
|
111
|
+
};
|
|
112
|
+
const previous = this.layoutEnvironment;
|
|
113
|
+
this.layoutEnvironment = next;
|
|
114
|
+
return (previous == null ||
|
|
115
|
+
previous.canvasWidth !== next.canvasWidth ||
|
|
116
|
+
previous.canvasHeight !== next.canvasHeight ||
|
|
117
|
+
previous.projectionScaleY !== next.projectionScaleY);
|
|
118
|
+
}
|
|
119
|
+
/** Resolve legacy component-backed and manifest-backed UIKit documents. */
|
|
120
|
+
resolveDocument(entity) {
|
|
121
|
+
const host = entity.object3D;
|
|
122
|
+
if (!host) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
const cached = this.entityDocuments.get(host);
|
|
126
|
+
if (cached && !cached.disposed) {
|
|
127
|
+
return cached;
|
|
128
|
+
}
|
|
129
|
+
const componentDocument = PanelDocument.data.document[entity.index];
|
|
130
|
+
if (componentDocument && !componentDocument.disposed) {
|
|
131
|
+
this.entityDocuments.set(host, componentDocument);
|
|
132
|
+
return componentDocument;
|
|
133
|
+
}
|
|
134
|
+
let discovered;
|
|
135
|
+
host.traverse((object) => {
|
|
136
|
+
if (!discovered && object instanceof UIKitDocument && !object.disposed) {
|
|
137
|
+
discovered = object;
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
if (discovered) {
|
|
141
|
+
this.entityDocuments.set(host, discovered);
|
|
142
|
+
}
|
|
143
|
+
return discovered;
|
|
144
|
+
}
|
|
145
|
+
/** Track intrinsic UIKit dimensions so late font/content layout invalidates positioning. */
|
|
146
|
+
hasDocumentSizeChanged(document) {
|
|
147
|
+
const size = document.computedSize;
|
|
148
|
+
if (!size) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
const previous = this.documentSizes.get(document);
|
|
152
|
+
this.documentSizes.set(document, size);
|
|
153
|
+
return (previous == null ||
|
|
154
|
+
previous.width !== size.width ||
|
|
155
|
+
previous.height !== size.height);
|
|
156
|
+
}
|
|
132
157
|
/** Compute pixel size/position and apply camera‑relative transform. */
|
|
133
|
-
calculateLayout(entity) {
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
if (document && computedSize) {
|
|
158
|
+
calculateLayout(entity, document) {
|
|
159
|
+
const computedSize = document.computedSize;
|
|
160
|
+
if (computedSize) {
|
|
137
161
|
const widthExp = entity.getValue(ScreenSpace, 'width');
|
|
138
162
|
const heightExp = entity.getValue(ScreenSpace, 'height');
|
|
139
163
|
const top = entity.getValue(ScreenSpace, 'top');
|
|
@@ -149,9 +173,18 @@ class ScreenSpaceUISystem extends createSystem({
|
|
|
149
173
|
// Screen dimensions
|
|
150
174
|
const W = this.renderer.domElement.clientWidth;
|
|
151
175
|
const H = this.renderer.domElement.clientHeight;
|
|
176
|
+
const projectionScaleY = this.camera.projectionMatrix.elements[5];
|
|
177
|
+
// A hidden or transitioning canvas can temporarily report unusable
|
|
178
|
+
// dimensions. Leave the document attached and retry when the tracked
|
|
179
|
+
// layout environment becomes valid instead of writing NaN/Infinity.
|
|
180
|
+
if (W <= 0 ||
|
|
181
|
+
H <= 0 ||
|
|
182
|
+
!Number.isFinite(projectionScaleY) ||
|
|
183
|
+
projectionScaleY <= 0) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
152
186
|
// Calculate world-to-pixel conversion for screen space at zOffset
|
|
153
|
-
const
|
|
154
|
-
const worldHeightAtZ = 2 * Math.tan(vFOV / 2) * zOffset;
|
|
187
|
+
const worldHeightAtZ = (2 * zOffset) / projectionScaleY;
|
|
155
188
|
const worldPerPixel = worldHeightAtZ / H;
|
|
156
189
|
// Calculate desired world space dimensions
|
|
157
190
|
const targetWorldWidth = wPx * worldPerPixel;
|
|
@@ -182,12 +215,25 @@ class ScreenSpaceUISystem extends createSystem({
|
|
|
182
215
|
/**
|
|
183
216
|
* Evaluate CSS expressions for width/height using a temporary DOM node.
|
|
184
217
|
* Returns pixel values from `window.getComputedStyle`.
|
|
218
|
+
*
|
|
219
|
+
* @remarks
|
|
220
|
+
* Older scene documents may explicitly declare `'auto'`. On a floating
|
|
221
|
+
* helper `<div>` the browser resolves an unconstrained `auto`
|
|
222
|
+
* dimension to `0px`. A `0px` target collapses {@link
|
|
223
|
+
* UIKitDocument.setTargetDimensions} and the panel retains its intrinsic
|
|
224
|
+
* world-space size inside camera space, blowing the UI up to most of the
|
|
225
|
+
* viewport. Until aspect-ratio derivation from the
|
|
226
|
+
* other axis lands, treat `'auto'` as an unsupported size for screen-space
|
|
227
|
+
* layout: warn once per axis, and clamp the contributing CSS expression to
|
|
228
|
+
* a viewport-relative fallback that produces a sensibly-sized HUD.
|
|
185
229
|
*/
|
|
186
230
|
getComputedDimensionValues(widthExp, heightExp) {
|
|
231
|
+
const widthForLayout = this.resolveAutoDimension(widthExp, 'width');
|
|
232
|
+
const heightForLayout = this.resolveAutoDimension(heightExp, 'height');
|
|
187
233
|
const { dimensionElement: element, dimensionContainer: container } = this.layoutHelpers;
|
|
188
234
|
document.body.appendChild(container);
|
|
189
|
-
element.style.width =
|
|
190
|
-
element.style.height =
|
|
235
|
+
element.style.width = widthForLayout;
|
|
236
|
+
element.style.height = heightForLayout;
|
|
191
237
|
container.appendChild(element);
|
|
192
238
|
const pixelValues = window.getComputedStyle(element);
|
|
193
239
|
const result = {
|
|
@@ -197,6 +243,22 @@ class ScreenSpaceUISystem extends createSystem({
|
|
|
197
243
|
document.body.removeChild(container);
|
|
198
244
|
return result;
|
|
199
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Substitute a `'25vw'` / `'25vh'` fallback for `'auto'` on the given axis,
|
|
248
|
+
* logging a single warning per axis the first time it triggers.
|
|
249
|
+
*/
|
|
250
|
+
resolveAutoDimension(expression, axis) {
|
|
251
|
+
if (expression !== 'auto') {
|
|
252
|
+
return expression;
|
|
253
|
+
}
|
|
254
|
+
if (!this.autoDimensionWarned[axis]) {
|
|
255
|
+
this.autoDimensionWarned[axis] = true;
|
|
256
|
+
console.warn(`[ScreenSpace] ${axis}: 'auto' is not supported in screen-space layout; ` +
|
|
257
|
+
`clamping to '25v${axis === 'width' ? 'w' : 'h'}'. Set an explicit CSS ` +
|
|
258
|
+
`size (e.g. '320px', '40vw') to silence this warning.`);
|
|
259
|
+
}
|
|
260
|
+
return axis === 'width' ? '25vw' : '25vh';
|
|
261
|
+
}
|
|
200
262
|
/** Evaluate CSS absolute positioning and return `top`/`left` in pixels. */
|
|
201
263
|
getComputedPositionValues(widthPx, heightPx, { top = 'auto', bottom = 'auto', left = 'auto', right = 'auto' }) {
|
|
202
264
|
const { positionElement: element, positionContainer: container } = this.layoutHelpers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenspace.js","sources":["../../src/ui/screenspace.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;
|
|
1
|
+
{"version":3,"file":"screenspace.js","sources":["../../src/ui/screenspace.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|