@blcklab/anyo-player 0.5.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/CHANGELOG.md +19 -0
- package/LICENSE +21 -0
- package/README.md +304 -0
- package/dist/createAnyoPlayer.d.ts +3 -0
- package/dist/createAnyoPlayer.d.ts.map +1 -0
- package/dist/createAnyoPlayer.js +5 -0
- package/dist/createAnyoPlayer.js.map +1 -0
- package/dist/element-define.d.ts +2 -0
- package/dist/element-define.d.ts.map +1 -0
- package/dist/element-define.js +4 -0
- package/dist/element-define.js.map +1 -0
- package/dist/element.d.ts +66 -0
- package/dist/element.d.ts.map +1 -0
- package/dist/element.js +363 -0
- package/dist/element.js.map +1 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +21 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/inputBindings.d.ts +3 -0
- package/dist/inputBindings.d.ts.map +1 -0
- package/dist/inputBindings.js +3 -0
- package/dist/inputBindings.js.map +1 -0
- package/dist/internal/AccessibilityController.d.ts +50 -0
- package/dist/internal/AccessibilityController.d.ts.map +1 -0
- package/dist/internal/AccessibilityController.js +212 -0
- package/dist/internal/AccessibilityController.js.map +1 -0
- package/dist/internal/AnyoPlayerCore.d.ts +357 -0
- package/dist/internal/AnyoPlayerCore.d.ts.map +1 -0
- package/dist/internal/AnyoPlayerCore.js +3880 -0
- package/dist/internal/AnyoPlayerCore.js.map +1 -0
- package/dist/internal/AudioController.d.ts +37 -0
- package/dist/internal/AudioController.d.ts.map +1 -0
- package/dist/internal/AudioController.js +167 -0
- package/dist/internal/AudioController.js.map +1 -0
- package/dist/internal/CaptionController.d.ts +16 -0
- package/dist/internal/CaptionController.d.ts.map +1 -0
- package/dist/internal/CaptionController.js +83 -0
- package/dist/internal/CaptionController.js.map +1 -0
- package/dist/internal/ContainerHost.d.ts +17 -0
- package/dist/internal/ContainerHost.d.ts.map +1 -0
- package/dist/internal/ContainerHost.js +110 -0
- package/dist/internal/ContainerHost.js.map +1 -0
- package/dist/internal/DesktopInputController.d.ts +80 -0
- package/dist/internal/DesktopInputController.d.ts.map +1 -0
- package/dist/internal/DesktopInputController.js +367 -0
- package/dist/internal/DesktopInputController.js.map +1 -0
- package/dist/internal/EmbeddingController.d.ts +33 -0
- package/dist/internal/EmbeddingController.d.ts.map +1 -0
- package/dist/internal/EmbeddingController.js +161 -0
- package/dist/internal/EmbeddingController.js.map +1 -0
- package/dist/internal/EventHub.d.ts +7 -0
- package/dist/internal/EventHub.d.ts.map +1 -0
- package/dist/internal/EventHub.js +27 -0
- package/dist/internal/EventHub.js.map +1 -0
- package/dist/internal/FrameworkAdapterController.d.ts +46 -0
- package/dist/internal/FrameworkAdapterController.d.ts.map +1 -0
- package/dist/internal/FrameworkAdapterController.js +165 -0
- package/dist/internal/FrameworkAdapterController.js.map +1 -0
- package/dist/internal/FullscreenController.d.ts +29 -0
- package/dist/internal/FullscreenController.d.ts.map +1 -0
- package/dist/internal/FullscreenController.js +122 -0
- package/dist/internal/FullscreenController.js.map +1 -0
- package/dist/internal/GamepadController.d.ts +54 -0
- package/dist/internal/GamepadController.d.ts.map +1 -0
- package/dist/internal/GamepadController.js +276 -0
- package/dist/internal/GamepadController.js.map +1 -0
- package/dist/internal/InputBindingsController.d.ts +34 -0
- package/dist/internal/InputBindingsController.d.ts.map +1 -0
- package/dist/internal/InputBindingsController.js +223 -0
- package/dist/internal/InputBindingsController.js.map +1 -0
- package/dist/internal/InteractionPresentationController.d.ts +38 -0
- package/dist/internal/InteractionPresentationController.d.ts.map +1 -0
- package/dist/internal/InteractionPresentationController.js +208 -0
- package/dist/internal/InteractionPresentationController.js.map +1 -0
- package/dist/internal/MapController.d.ts +16 -0
- package/dist/internal/MapController.d.ts.map +1 -0
- package/dist/internal/MapController.js +68 -0
- package/dist/internal/MapController.js.map +1 -0
- package/dist/internal/PerformanceController.d.ts +94 -0
- package/dist/internal/PerformanceController.d.ts.map +1 -0
- package/dist/internal/PerformanceController.js +455 -0
- package/dist/internal/PerformanceController.js.map +1 -0
- package/dist/internal/PlayerCameraController.d.ts +79 -0
- package/dist/internal/PlayerCameraController.d.ts.map +1 -0
- package/dist/internal/PlayerCameraController.js +551 -0
- package/dist/internal/PlayerCameraController.js.map +1 -0
- package/dist/internal/ResponsiveController.d.ts +37 -0
- package/dist/internal/ResponsiveController.d.ts.map +1 -0
- package/dist/internal/ResponsiveController.js +143 -0
- package/dist/internal/ResponsiveController.js.map +1 -0
- package/dist/internal/RuntimeFactory.d.ts +42 -0
- package/dist/internal/RuntimeFactory.d.ts.map +1 -0
- package/dist/internal/RuntimeFactory.js +93 -0
- package/dist/internal/RuntimeFactory.js.map +1 -0
- package/dist/internal/ScreenshotController.d.ts +8 -0
- package/dist/internal/ScreenshotController.d.ts.map +1 -0
- package/dist/internal/ScreenshotController.js +47 -0
- package/dist/internal/ScreenshotController.js.map +1 -0
- package/dist/internal/SessionController.d.ts +44 -0
- package/dist/internal/SessionController.d.ts.map +1 -0
- package/dist/internal/SessionController.js +411 -0
- package/dist/internal/SessionController.js.map +1 -0
- package/dist/internal/SourceResolver.d.ts +31 -0
- package/dist/internal/SourceResolver.d.ts.map +1 -0
- package/dist/internal/SourceResolver.js +362 -0
- package/dist/internal/SourceResolver.js.map +1 -0
- package/dist/internal/StateMachine.d.ts +10 -0
- package/dist/internal/StateMachine.d.ts.map +1 -0
- package/dist/internal/StateMachine.js +35 -0
- package/dist/internal/StateMachine.js.map +1 -0
- package/dist/internal/StyleController.d.ts +14 -0
- package/dist/internal/StyleController.d.ts.map +1 -0
- package/dist/internal/StyleController.js +116 -0
- package/dist/internal/StyleController.js.map +1 -0
- package/dist/internal/TelemetryController.d.ts +28 -0
- package/dist/internal/TelemetryController.d.ts.map +1 -0
- package/dist/internal/TelemetryController.js +113 -0
- package/dist/internal/TelemetryController.js.map +1 -0
- package/dist/internal/TouchInputController.d.ts +73 -0
- package/dist/internal/TouchInputController.d.ts.map +1 -0
- package/dist/internal/TouchInputController.js +379 -0
- package/dist/internal/TouchInputController.js.map +1 -0
- package/dist/internal/VfxController.d.ts +11 -0
- package/dist/internal/VfxController.d.ts.map +1 -0
- package/dist/internal/VfxController.js +23 -0
- package/dist/internal/VfxController.js.map +1 -0
- package/dist/internal/ViewPreferenceController.d.ts +40 -0
- package/dist/internal/ViewPreferenceController.d.ts.map +1 -0
- package/dist/internal/ViewPreferenceController.js +132 -0
- package/dist/internal/ViewPreferenceController.js.map +1 -0
- package/dist/internal/VisibilityController.d.ts +26 -0
- package/dist/internal/VisibilityController.d.ts.map +1 -0
- package/dist/internal/VisibilityController.js +62 -0
- package/dist/internal/VisibilityController.js.map +1 -0
- package/dist/internal/XRController.d.ts +42 -0
- package/dist/internal/XRController.d.ts.map +1 -0
- package/dist/internal/XRController.js +169 -0
- package/dist/internal/XRController.js.map +1 -0
- package/dist/internal/sourceUrls.d.ts +6 -0
- package/dist/internal/sourceUrls.d.ts.map +1 -0
- package/dist/internal/sourceUrls.js +79 -0
- package/dist/internal/sourceUrls.js.map +1 -0
- package/dist/react.d.ts +44 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +115 -0
- package/dist/react.js.map +1 -0
- package/dist/session.d.ts +3 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +3 -0
- package/dist/session.js.map +1 -0
- package/dist/styleText.d.ts +2 -0
- package/dist/styleText.d.ts.map +1 -0
- package/dist/styleText.js +2 -0
- package/dist/styleText.js.map +1 -0
- package/dist/styles.css +573 -0
- package/dist/types.d.ts +1476 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/PlayerUI.d.ts +193 -0
- package/dist/ui/PlayerUI.d.ts.map +1 -0
- package/dist/ui/PlayerUI.js +1201 -0
- package/dist/ui/PlayerUI.js.map +1 -0
- package/dist/vue.d.ts +97 -0
- package/dist/vue.d.ts.map +1 -0
- package/dist/vue.js +126 -0
- package/dist/vue.js.map +1 -0
- package/dist/worldCache.d.ts +16 -0
- package/dist/worldCache.d.ts.map +1 -0
- package/dist/worldCache.js +46 -0
- package/dist/worldCache.js.map +1 -0
- package/dist/worldSources.d.ts +19 -0
- package/dist/worldSources.d.ts.map +1 -0
- package/dist/worldSources.js +51 -0
- package/dist/worldSources.js.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
export class ResponsiveController {
|
|
2
|
+
container;
|
|
3
|
+
document;
|
|
4
|
+
window;
|
|
5
|
+
enabled;
|
|
6
|
+
fixedPixelRatio;
|
|
7
|
+
maxPixelRatio;
|
|
8
|
+
callbacks;
|
|
9
|
+
renderer = null;
|
|
10
|
+
observer = null;
|
|
11
|
+
mediaQuery = null;
|
|
12
|
+
current = { width: 1, height: 1, pixelRatio: 1 };
|
|
13
|
+
started = false;
|
|
14
|
+
disposed = false;
|
|
15
|
+
constructor(container, options, rendererPixelRatio, rendererMaxPixelRatio, callbacks) {
|
|
16
|
+
this.container = container;
|
|
17
|
+
this.document = container.ownerDocument;
|
|
18
|
+
this.window = this.document.defaultView;
|
|
19
|
+
this.enabled = options !== false && options?.enabled !== false;
|
|
20
|
+
const requestedRatio = options === false
|
|
21
|
+
? rendererPixelRatio
|
|
22
|
+
: options?.pixelRatio === 'device'
|
|
23
|
+
? undefined
|
|
24
|
+
: options?.pixelRatio ?? rendererPixelRatio;
|
|
25
|
+
this.fixedPixelRatio = requestedRatio === undefined ? null : normalizePositive(requestedRatio, 1);
|
|
26
|
+
this.maxPixelRatio = normalizePositive(options === false ? rendererMaxPixelRatio : options?.maxPixelRatio ?? rendererMaxPixelRatio ?? 2, 2);
|
|
27
|
+
this.callbacks = callbacks;
|
|
28
|
+
}
|
|
29
|
+
get viewport() {
|
|
30
|
+
return { ...this.current };
|
|
31
|
+
}
|
|
32
|
+
start() {
|
|
33
|
+
if (!this.enabled || this.started || this.disposed)
|
|
34
|
+
return;
|
|
35
|
+
this.started = true;
|
|
36
|
+
const scopedWindow = this.window;
|
|
37
|
+
const ResizeObserverConstructor = scopedWindow?.ResizeObserver ?? globalThis.ResizeObserver;
|
|
38
|
+
if (typeof ResizeObserverConstructor === 'function') {
|
|
39
|
+
const observer = new ResizeObserverConstructor(() => this.resizeNow());
|
|
40
|
+
this.observer = observer;
|
|
41
|
+
observer.observe(this.container);
|
|
42
|
+
}
|
|
43
|
+
this.window?.addEventListener('resize', this.handleWindowResize);
|
|
44
|
+
this.window?.addEventListener('orientationchange', this.handleWindowResize);
|
|
45
|
+
this.installDprWatcher();
|
|
46
|
+
this.resizeNow();
|
|
47
|
+
}
|
|
48
|
+
attach(renderer) {
|
|
49
|
+
if (this.disposed)
|
|
50
|
+
return;
|
|
51
|
+
this.renderer = renderer;
|
|
52
|
+
this.resizeNow(true);
|
|
53
|
+
}
|
|
54
|
+
detach(renderer) {
|
|
55
|
+
if (renderer && this.renderer !== renderer)
|
|
56
|
+
return;
|
|
57
|
+
this.renderer = null;
|
|
58
|
+
}
|
|
59
|
+
resizeNow(force = false) {
|
|
60
|
+
if (this.disposed)
|
|
61
|
+
return this.viewport;
|
|
62
|
+
const next = this.measure();
|
|
63
|
+
const changed = force
|
|
64
|
+
|| next.width !== this.current.width
|
|
65
|
+
|| next.height !== this.current.height
|
|
66
|
+
|| next.pixelRatio !== this.current.pixelRatio;
|
|
67
|
+
this.current = next;
|
|
68
|
+
if (this.enabled && this.renderer) {
|
|
69
|
+
try {
|
|
70
|
+
this.renderer.resize(next.width, next.height, next.pixelRatio);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.callbacks.onWarning(`Anyo Player could not resize the renderer: ${String(error)}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (changed)
|
|
77
|
+
this.callbacks.onResize(this.viewport);
|
|
78
|
+
return this.viewport;
|
|
79
|
+
}
|
|
80
|
+
dispose() {
|
|
81
|
+
if (this.disposed)
|
|
82
|
+
return;
|
|
83
|
+
this.disposed = true;
|
|
84
|
+
this.renderer = null;
|
|
85
|
+
this.observer?.disconnect();
|
|
86
|
+
this.observer = null;
|
|
87
|
+
this.window?.removeEventListener('resize', this.handleWindowResize);
|
|
88
|
+
this.window?.removeEventListener('orientationchange', this.handleWindowResize);
|
|
89
|
+
this.removeDprWatcher();
|
|
90
|
+
}
|
|
91
|
+
measure() {
|
|
92
|
+
const rect = this.container.getBoundingClientRect?.();
|
|
93
|
+
const rawWidth = rect?.width ?? this.container.clientWidth ?? 0;
|
|
94
|
+
const rawHeight = rect?.height ?? this.container.clientHeight ?? 0;
|
|
95
|
+
return {
|
|
96
|
+
width: Math.max(1, Math.round(Number.isFinite(rawWidth) ? rawWidth : 1)),
|
|
97
|
+
height: Math.max(1, Math.round(Number.isFinite(rawHeight) ? rawHeight : 1)),
|
|
98
|
+
pixelRatio: this.resolvePixelRatio(),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
rawDevicePixelRatio() {
|
|
102
|
+
const ratio = this.window?.devicePixelRatio ?? globalThis.devicePixelRatio ?? 1;
|
|
103
|
+
return normalizePositive(ratio, 1);
|
|
104
|
+
}
|
|
105
|
+
resolvePixelRatio() {
|
|
106
|
+
const ratio = this.fixedPixelRatio ?? this.window?.devicePixelRatio ?? globalThis.devicePixelRatio ?? 1;
|
|
107
|
+
return Math.max(0.25, Math.min(this.maxPixelRatio, normalizePositive(ratio, 1)));
|
|
108
|
+
}
|
|
109
|
+
installDprWatcher() {
|
|
110
|
+
this.removeDprWatcher();
|
|
111
|
+
if (this.fixedPixelRatio !== null || !this.window?.matchMedia)
|
|
112
|
+
return;
|
|
113
|
+
try {
|
|
114
|
+
const query = `(resolution: ${this.rawDevicePixelRatio()}dppx)`;
|
|
115
|
+
this.mediaQuery = this.window.matchMedia(query);
|
|
116
|
+
this.mediaQuery.addEventListener?.('change', this.handleDprChange);
|
|
117
|
+
this.mediaQuery.addListener?.(this.handleLegacyDprChange);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
this.callbacks.onWarning(`Anyo Player could not observe device-pixel-ratio changes: ${String(error)}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
removeDprWatcher() {
|
|
124
|
+
this.mediaQuery?.removeEventListener?.('change', this.handleDprChange);
|
|
125
|
+
this.mediaQuery?.removeListener?.(this.handleLegacyDprChange);
|
|
126
|
+
this.mediaQuery = null;
|
|
127
|
+
}
|
|
128
|
+
handleWindowResize = () => {
|
|
129
|
+
this.resizeNow();
|
|
130
|
+
};
|
|
131
|
+
handleDprChange = () => {
|
|
132
|
+
this.installDprWatcher();
|
|
133
|
+
this.resizeNow();
|
|
134
|
+
};
|
|
135
|
+
handleLegacyDprChange = () => {
|
|
136
|
+
this.installDprWatcher();
|
|
137
|
+
this.resizeNow();
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function normalizePositive(value, fallback) {
|
|
141
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : fallback;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=ResponsiveController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResponsiveController.js","sourceRoot":"","sources":["../../src/internal/ResponsiveController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type RendererAdapter, type World, type WorldPlugin, type WorldSystem, type RuntimeSystemsOptions } from '@blcklab/anyo';
|
|
2
|
+
import { type WebSurfacePluginOptions } from '@blcklab/anyo/web-surface';
|
|
3
|
+
import type { AnyoPlayerComponentOptions, AnyoPlayerExplorationOptions, AnyoPlayerRendererOptions, AnyoPlayerPerformanceOptions, AnyoPlayerCameraMode, AnyoPlayerFallRecoveryStatus } from '../types.js';
|
|
4
|
+
import type { WorldValidationOptions } from '@blcklab/anyo';
|
|
5
|
+
import { PlayerCameraController } from './PlayerCameraController.js';
|
|
6
|
+
export interface PlayerRuntime {
|
|
7
|
+
world: World;
|
|
8
|
+
renderer: RendererAdapter;
|
|
9
|
+
camera?: PlayerCameraController;
|
|
10
|
+
}
|
|
11
|
+
export interface RuntimeFactoryOptions {
|
|
12
|
+
canvas: HTMLCanvasElement;
|
|
13
|
+
renderer: AnyoPlayerRendererOptions;
|
|
14
|
+
performance: false | AnyoPlayerPerformanceOptions | undefined;
|
|
15
|
+
exploration: AnyoPlayerExplorationOptions;
|
|
16
|
+
webSurface: false | WebSurfacePluginOptions;
|
|
17
|
+
components?: AnyoPlayerComponentOptions;
|
|
18
|
+
plugins: readonly WorldPlugin[];
|
|
19
|
+
systems?: readonly WorldSystem[];
|
|
20
|
+
systemOptions?: RuntimeSystemsOptions;
|
|
21
|
+
validation?: WorldValidationOptions;
|
|
22
|
+
onWarning: (message: string) => void;
|
|
23
|
+
onCameraModeChange?: (previous: AnyoPlayerCameraMode, mode: AnyoPlayerCameraMode) => void;
|
|
24
|
+
onFallRecoveryChange?: (status: AnyoPlayerFallRecoveryStatus) => void;
|
|
25
|
+
}
|
|
26
|
+
export interface PlayerRuntimeFactory {
|
|
27
|
+
create(options: RuntimeFactoryOptions): PlayerRuntime;
|
|
28
|
+
}
|
|
29
|
+
export interface RuntimePlan {
|
|
30
|
+
backend: 'auto' | 'webgpu' | 'webgl2';
|
|
31
|
+
desktopExploration: false | {
|
|
32
|
+
browserInput: false;
|
|
33
|
+
pointerLock?: boolean;
|
|
34
|
+
lookSensitivity?: number;
|
|
35
|
+
};
|
|
36
|
+
xrEnabled: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare function createRuntimePlan(renderer: AnyoPlayerRendererOptions, exploration: AnyoPlayerExplorationOptions, onWarning: (message: string) => void): RuntimePlan;
|
|
39
|
+
export declare class DefaultRuntimeFactory implements PlayerRuntimeFactory {
|
|
40
|
+
create(options: RuntimeFactoryOptions): PlayerRuntime;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=RuntimeFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeFactory.d.ts","sourceRoot":"","sources":["../../src/internal/RuntimeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAA;AAEtB,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EACV,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,EACpB,4BAA4B,EAC7B,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAGpE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,eAAe,CAAA;IACzB,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,iBAAiB,CAAA;IACzB,QAAQ,EAAE,yBAAyB,CAAA;IACnC,WAAW,EAAE,KAAK,GAAG,4BAA4B,GAAG,SAAS,CAAA;IAC7D,WAAW,EAAE,4BAA4B,CAAA;IACzC,UAAU,EAAE,KAAK,GAAG,uBAAuB,CAAA;IAC3C,UAAU,CAAC,EAAE,0BAA0B,CAAA;IACvC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAChC,aAAa,CAAC,EAAE,qBAAqB,CAAA;IACrC,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAA;IACzF,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,CAAA;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAA;CACtD;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACrC,kBAAkB,EAAE,KAAK,GAAG;QAC1B,YAAY,EAAE,KAAK,CAAA;QACnB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,yBAAyB,EACnC,WAAW,EAAE,4BAA4B,EACzC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACnC,WAAW,CAkBb;AA2BD,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa;CAkDtD"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { createWorld, entitiesPlugin, explorableBuildingPreset, xrExplorationPlugin, } from '@blcklab/anyo';
|
|
2
|
+
import { Sekai64Renderer } from '@blcklab/anyo/renderer-sekai64';
|
|
3
|
+
import { webSurfacePlugin, } from '@blcklab/anyo/web-surface';
|
|
4
|
+
import { PlayerCameraController } from './PlayerCameraController.js';
|
|
5
|
+
import { applyQualityToRendererOptions } from './PerformanceController.js';
|
|
6
|
+
export function createRuntimePlan(renderer, exploration, onWarning) {
|
|
7
|
+
const requestedBackend = renderer.backend ?? 'auto';
|
|
8
|
+
const vrEnabled = exploration.vr === true || typeof exploration.vr === 'object';
|
|
9
|
+
const backend = vrEnabled ? 'webgl2' : requestedBackend;
|
|
10
|
+
if (vrEnabled && requestedBackend === 'webgpu') {
|
|
11
|
+
onWarning('VR is enabled, so Anyo Player selected Sekai64 WebGL2 instead of WebGPU for the current XR backend.');
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
backend,
|
|
15
|
+
desktopExploration: exploration.desktop === false && exploration.touch === false
|
|
16
|
+
? false
|
|
17
|
+
: {
|
|
18
|
+
browserInput: false,
|
|
19
|
+
...(exploration.pointerLock === undefined ? {} : { pointerLock: exploration.pointerLock }),
|
|
20
|
+
...(exploration.lookSensitivity === undefined ? {} : { lookSensitivity: exploration.lookSensitivity }),
|
|
21
|
+
},
|
|
22
|
+
xrEnabled: vrEnabled,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function createPlugins(plan, exploration, webSurface, hostPlugins, camera, components) {
|
|
26
|
+
const plugins = explorableBuildingPreset({ exploration: false });
|
|
27
|
+
if (plan.desktopExploration)
|
|
28
|
+
plugins.push(camera.plugin);
|
|
29
|
+
if (components?.registry || components?.unknown) {
|
|
30
|
+
const entityPluginIndex = plugins.findIndex(plugin => plugin.name === 'anyo:entities');
|
|
31
|
+
const configuredEntityPlugin = entitiesPlugin({
|
|
32
|
+
...(components.registry ? { componentRegistry: components.registry } : {}),
|
|
33
|
+
...(components.unknown ? { unknownComponents: components.unknown } : {}),
|
|
34
|
+
});
|
|
35
|
+
if (entityPluginIndex >= 0)
|
|
36
|
+
plugins.splice(entityPluginIndex, 1, configuredEntityPlugin);
|
|
37
|
+
else
|
|
38
|
+
plugins.push(configuredEntityPlugin);
|
|
39
|
+
}
|
|
40
|
+
if (plan.xrEnabled)
|
|
41
|
+
plugins.push(xrExplorationPlugin(exploration.xr));
|
|
42
|
+
if (webSurface !== false)
|
|
43
|
+
plugins.push(webSurfacePlugin(webSurface));
|
|
44
|
+
plugins.push(...hostPlugins);
|
|
45
|
+
return plugins;
|
|
46
|
+
}
|
|
47
|
+
export class DefaultRuntimeFactory {
|
|
48
|
+
create(options) {
|
|
49
|
+
const rendererOptions = applyQualityToRendererOptions(options.renderer, options.performance);
|
|
50
|
+
const plan = createRuntimePlan(rendererOptions, options.exploration, options.onWarning);
|
|
51
|
+
const camera = new PlayerCameraController(plan.desktopExploration || { browserInput: false }, options.exploration.fallRecovery === false ? false : (options.exploration.fallRecovery ?? {}), {
|
|
52
|
+
...(options.onCameraModeChange ? { onModeChange: options.onCameraModeChange } : {}),
|
|
53
|
+
...(options.onFallRecoveryChange ? { onRecoveryChange: options.onFallRecoveryChange } : {}),
|
|
54
|
+
});
|
|
55
|
+
const renderer = new Sekai64Renderer({
|
|
56
|
+
canvas: options.canvas,
|
|
57
|
+
backend: plan.backend,
|
|
58
|
+
...(rendererOptions.antialias === undefined ? {} : { antialias: rendererOptions.antialias }),
|
|
59
|
+
...(rendererOptions.alpha === undefined ? {} : { alpha: rendererOptions.alpha }),
|
|
60
|
+
...(rendererOptions.pixelRatio === undefined ? {} : { pixelRatio: rendererOptions.pixelRatio }),
|
|
61
|
+
...(rendererOptions.maxPixelRatio === undefined ? {} : { maxPixelRatio: rendererOptions.maxPixelRatio }),
|
|
62
|
+
...(rendererOptions.fieldOfView === undefined ? {} : { fieldOfView: rendererOptions.fieldOfView }),
|
|
63
|
+
...(rendererOptions.near === undefined ? {} : { near: rendererOptions.near }),
|
|
64
|
+
...(rendererOptions.far === undefined ? {} : { far: rendererOptions.far }),
|
|
65
|
+
...(rendererOptions.development === undefined ? {} : { development: rendererOptions.development }),
|
|
66
|
+
...(rendererOptions.maxPointLights === undefined ? {} : { maxPointLights: rendererOptions.maxPointLights }),
|
|
67
|
+
...(rendererOptions.colorManagement === undefined ? {} : { colorManagement: rendererOptions.colorManagement }),
|
|
68
|
+
...(rendererOptions.environmentLighting === undefined ? {} : { environmentLighting: rendererOptions.environmentLighting }),
|
|
69
|
+
...(rendererOptions.shadows === undefined ? {} : { shadows: rendererOptions.shadows }),
|
|
70
|
+
...(rendererOptions.imageQuality === undefined ? {} : { imageQuality: rendererOptions.imageQuality }),
|
|
71
|
+
...(rendererOptions.atmosphere === undefined ? {} : { atmosphere: rendererOptions.atmosphere }),
|
|
72
|
+
...(rendererOptions.colorGrading === undefined ? {} : { colorGrading: rendererOptions.colorGrading }),
|
|
73
|
+
...(rendererOptions.postProcessing === undefined ? {} : { postProcessing: rendererOptions.postProcessing }),
|
|
74
|
+
...(rendererOptions.optimization === undefined ? {} : { optimization: rendererOptions.optimization }),
|
|
75
|
+
...(rendererOptions.entityGeometry === undefined ? {} : { entityGeometry: rendererOptions.entityGeometry }),
|
|
76
|
+
...(rendererOptions.assetConcurrency === undefined ? {} : { assetConcurrency: rendererOptions.assetConcurrency }),
|
|
77
|
+
...(rendererOptions.assetLoaders === undefined ? {} : { assetLoaders: rendererOptions.assetLoaders }),
|
|
78
|
+
...(rendererOptions.modules === undefined ? {} : { modules: rendererOptions.modules }),
|
|
79
|
+
});
|
|
80
|
+
const world = createWorld({
|
|
81
|
+
renderer,
|
|
82
|
+
plugins: createPlugins(plan, options.exploration, options.webSurface, options.plugins, camera, options.components),
|
|
83
|
+
systems: [...(options.systems ?? [])],
|
|
84
|
+
...(options.systemOptions === undefined ? {} : { systemOptions: options.systemOptions }),
|
|
85
|
+
autoResize: false,
|
|
86
|
+
...(options.validation === undefined ? {} : { validation: options.validation }),
|
|
87
|
+
onWarning: options.onWarning,
|
|
88
|
+
});
|
|
89
|
+
world.exploration.setInputEnabled(false);
|
|
90
|
+
return { world, renderer, camera };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=RuntimeFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeFactory.js","sourceRoot":"","sources":["../../src/internal/RuntimeFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AnyoPlayerScreenshotOptions, AnyoPlayerScreenshotResult } from '../types.js';
|
|
2
|
+
export declare class ScreenshotController {
|
|
3
|
+
private readonly now;
|
|
4
|
+
constructor(now?: () => Date);
|
|
5
|
+
capture(canvas: HTMLCanvasElement, render: (() => void) | undefined, options?: AnyoPlayerScreenshotOptions): Promise<AnyoPlayerScreenshotResult>;
|
|
6
|
+
private captureBlob;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=ScreenshotController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenshotController.d.ts","sourceRoot":"","sources":["../../src/internal/ScreenshotController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAE1F,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,GAAE,MAAM,IAAuB;IAEzD,OAAO,CACX,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,EAChC,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,0BAA0B,CAAC;IA8BtC,OAAO,CAAC,WAAW;CAiBpB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AnyoPlayerError } from '../errors.js';
|
|
2
|
+
export class ScreenshotController {
|
|
3
|
+
now;
|
|
4
|
+
constructor(now = () => new Date()) {
|
|
5
|
+
this.now = now;
|
|
6
|
+
}
|
|
7
|
+
async capture(canvas, render, options = {}) {
|
|
8
|
+
const type = options.type ?? 'image/png';
|
|
9
|
+
const quality = options.quality;
|
|
10
|
+
if (!['image/png', 'image/jpeg', 'image/webp'].includes(type)) {
|
|
11
|
+
throw new TypeError('Screenshot type must be image/png, image/jpeg, or image/webp.');
|
|
12
|
+
}
|
|
13
|
+
if (quality !== undefined && (!Number.isFinite(quality) || quality < 0 || quality > 1)) {
|
|
14
|
+
throw new TypeError('Screenshot quality must be a finite number between 0 and 1.');
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
render?.();
|
|
18
|
+
const blob = await this.captureBlob(canvas, type, quality);
|
|
19
|
+
return {
|
|
20
|
+
blob,
|
|
21
|
+
type: blob.type || type,
|
|
22
|
+
width: canvas.width,
|
|
23
|
+
height: canvas.height,
|
|
24
|
+
createdAt: this.now().toISOString(),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch (cause) {
|
|
28
|
+
if (cause instanceof AnyoPlayerError)
|
|
29
|
+
throw cause;
|
|
30
|
+
throw new AnyoPlayerError('PLAYER_SCREENSHOT_FAILED', 'Anyo Player could not capture the current canvas frame.', { cause });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
captureBlob(canvas, type, quality) {
|
|
34
|
+
if (typeof canvas.toBlob !== 'function') {
|
|
35
|
+
throw new AnyoPlayerError('PLAYER_SCREENSHOT_UNAVAILABLE', 'Canvas screenshot capture is unavailable in this browser.');
|
|
36
|
+
}
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
canvas.toBlob(blob => {
|
|
39
|
+
if (blob)
|
|
40
|
+
resolve(blob);
|
|
41
|
+
else
|
|
42
|
+
reject(new AnyoPlayerError('PLAYER_SCREENSHOT_FAILED', 'The browser returned an empty screenshot.'));
|
|
43
|
+
}, type, quality);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=ScreenshotController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenshotController.js","sourceRoot":"","sources":["../../src/internal/ScreenshotController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,MAAkB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;QAAlC,QAAG,GAAH,GAAG,CAA+B;IAAG,CAAC;IAEnE,KAAK,CAAC,OAAO,CACX,MAAyB,EACzB,MAAgC,EAChC,UAAuC,EAAE;QAEzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAA;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,SAAS,CAAC,+DAA+D,CAAC,CAAA;QACtF,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,SAAS,CAAC,6DAA6D,CAAC,CAAA;QACpF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,CAAA;YACV,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;YAC1D,OAAO;gBACL,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;aACpC,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,eAAe;gBAAE,MAAM,KAAK,CAAA;YACjD,MAAM,IAAI,eAAe,CACvB,0BAA0B,EAC1B,yDAAyD,EACzD,EAAE,KAAK,EAAE,CACV,CAAA;QACH,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,MAAyB,EAAE,IAAY,EAAE,OAAgB;QAC3E,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,eAAe,CACvB,+BAA+B,EAC/B,2DAA2D,CAC5D,CAAA;QACH,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAA;;oBAClB,MAAM,CAAC,IAAI,eAAe,CAC7B,0BAA0B,EAC1B,2CAA2C,CAC5C,CAAC,CAAA;YACJ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { World, WorldDocument } from '@blcklab/anyo';
|
|
2
|
+
import type { AnyoPlayerInputMode, AnyoPlayerPauseReason, AnyoPlayerSessionCaptureOptions, AnyoPlayerSessionOptions, AnyoPlayerSessionRestoreOptions, AnyoPlayerSessionSnapshot, AnyoPlayerSessionStorage } from '../types.js';
|
|
3
|
+
export interface SessionCaptureContext {
|
|
4
|
+
world: World;
|
|
5
|
+
document: WorldDocument;
|
|
6
|
+
paused: boolean;
|
|
7
|
+
pauseReason: AnyoPlayerPauseReason | null;
|
|
8
|
+
inputMode: AnyoPlayerInputMode | null;
|
|
9
|
+
}
|
|
10
|
+
export interface SessionRestoreContext {
|
|
11
|
+
world: World;
|
|
12
|
+
document: WorldDocument;
|
|
13
|
+
onWarning: (message: string) => void;
|
|
14
|
+
}
|
|
15
|
+
export interface SessionControllerEnvironment {
|
|
16
|
+
storage?: AnyoPlayerSessionStorage;
|
|
17
|
+
now?: () => Date;
|
|
18
|
+
}
|
|
19
|
+
export declare class SessionController {
|
|
20
|
+
readonly enabled: boolean;
|
|
21
|
+
readonly storageKey: string | null;
|
|
22
|
+
readonly worldKey: string | null;
|
|
23
|
+
readonly restoreOnLoad: boolean;
|
|
24
|
+
readonly saveOnPause: boolean;
|
|
25
|
+
readonly saveOnVisibilityHidden: boolean;
|
|
26
|
+
private readonly options;
|
|
27
|
+
private readonly storage;
|
|
28
|
+
private readonly now;
|
|
29
|
+
constructor(container: HTMLElement, options: false | AnyoPlayerSessionOptions | undefined, environment?: SessionControllerEnvironment);
|
|
30
|
+
get storageAvailable(): boolean;
|
|
31
|
+
capture(context: SessionCaptureContext, options?: AnyoPlayerSessionCaptureOptions): AnyoPlayerSessionSnapshot;
|
|
32
|
+
parse(value: unknown): AnyoPlayerSessionSnapshot;
|
|
33
|
+
restoreWorld(context: SessionRestoreContext, snapshotInput: unknown, options?: AnyoPlayerSessionRestoreOptions): Promise<AnyoPlayerSessionSnapshot>;
|
|
34
|
+
save(key: string | undefined, snapshot: AnyoPlayerSessionSnapshot): Promise<string>;
|
|
35
|
+
load(key?: string): Promise<{
|
|
36
|
+
key: string;
|
|
37
|
+
snapshot: AnyoPlayerSessionSnapshot;
|
|
38
|
+
} | null>;
|
|
39
|
+
clear(key?: string): Promise<string>;
|
|
40
|
+
private assertEnabled;
|
|
41
|
+
private requireStorage;
|
|
42
|
+
private resolveKey;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=SessionController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionController.d.ts","sourceRoot":"","sources":["../../src/internal/SessionController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,EAE/B,wBAAwB,EACxB,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,aAAa,CAAA;AAMpB,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACzC,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAA;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,wBAAwB,CAAA;IAClC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAgHD,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAA;IAExC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAG9B,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,KAAK,GAAG,wBAAwB,GAAG,SAAS,EACrD,WAAW,GAAE,4BAAiC;IAahD,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,OAAO,CACL,OAAO,EAAE,qBAAqB,EAC9B,OAAO,GAAE,+BAAoC,GAC5C,yBAAyB;IA+D5B,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB;IA4D1C,YAAY,CAChB,OAAO,EAAE,qBAAqB,EAC9B,aAAa,EAAE,OAAO,EACtB,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,yBAAyB,CAAC;IAuF/B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnF,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,yBAAyB,CAAA;KAAE,GAAG,IAAI,CAAC;IA2BxF,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB1C,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,UAAU;CAUnB"}
|