angular-three-soba 2.0.0-beta.236 → 2.0.0-beta.237
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/cameras/README.md +3 -0
- package/cameras/index.d.ts +2 -0
- package/cameras/lib/camera-content.d.ts +10 -0
- package/cameras/lib/perspective-camera.d.ts +35 -0
- package/controls/index.d.ts +1 -1
- package/controls/{orbit-controls → lib}/orbit-controls.d.ts +4 -3
- package/esm2022/cameras/angular-three-soba-cameras.mjs +5 -0
- package/esm2022/cameras/index.mjs +3 -0
- package/esm2022/cameras/lib/camera-content.mjs +14 -0
- package/esm2022/cameras/lib/perspective-camera.mjs +109 -0
- package/esm2022/controls/index.mjs +2 -2
- package/esm2022/controls/lib/orbit-controls.mjs +140 -0
- package/esm2022/loaders/index.mjs +5 -5
- package/esm2022/loaders/lib/gltf-loader.mjs +33 -0
- package/esm2022/loaders/lib/loader.mjs +108 -0
- package/esm2022/loaders/lib/progress.mjs +51 -0
- package/esm2022/loaders/lib/texture-loader.mjs +32 -0
- package/esm2022/misc/angular-three-soba-misc.mjs +5 -0
- package/esm2022/misc/index.mjs +4 -0
- package/esm2022/misc/lib/animations.mjs +74 -0
- package/esm2022/misc/lib/content.mjs +14 -0
- package/esm2022/misc/lib/deprecated.mjs +15 -0
- package/esm2022/misc/lib/fbo.mjs +87 -0
- package/esm2022/staging/angular-three-soba-staging.mjs +5 -0
- package/esm2022/staging/index.mjs +2 -0
- package/esm2022/staging/lib/matcap-texture.mjs +46 -0
- package/fesm2022/angular-three-soba-cameras.mjs +127 -0
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -0
- package/fesm2022/angular-three-soba-controls.mjs +11 -3
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +17 -17
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +175 -0
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -0
- package/fesm2022/angular-three-soba-staging.mjs +53 -0
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -0
- package/loaders/index.d.ts +4 -4
- package/loaders/{gltf-loader → lib}/gltf-loader.d.ts +4 -4
- package/loaders/{progress → lib}/progress.d.ts +1 -1
- package/loaders/{texture-loader → lib}/texture-loader.d.ts +4 -4
- package/metadata.json +1 -1
- package/misc/README.md +3 -0
- package/misc/index.d.ts +3 -0
- package/misc/lib/animations.d.ts +14 -0
- package/misc/lib/content.d.ts +8 -0
- package/misc/lib/deprecated.d.ts +14 -0
- package/misc/lib/fbo.d.ts +47 -0
- package/package.json +24 -6
- package/staging/README.md +3 -0
- package/staging/index.d.ts +1 -0
- package/staging/lib/matcap-texture.d.ts +11 -0
- package/web-types.json +1 -1
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -132
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -33
- package/esm2022/loaders/loader/loader.mjs +0 -108
- package/esm2022/loaders/progress/progress.mjs +0 -51
- package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -32
- /package/loaders/{loader → lib}/loader.d.ts +0 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Signal } from '@angular/core';
|
|
2
|
+
import { Texture } from 'three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class NgtsCameraContentWithFboTexture {
|
|
5
|
+
static ngTemplateContextGuard(_: NgtsCameraContentWithFboTexture, ctx: unknown): ctx is {
|
|
6
|
+
$implicit: Signal<Texture>;
|
|
7
|
+
};
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCameraContentWithFboTexture, never>;
|
|
9
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtsCameraContentWithFboTexture, "ng-template[withTexture]", never, {}, {}, never, never, true, never>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { TemplateRef } from '@angular/core';
|
|
2
|
+
import { Group, PerspectiveCamera, Texture } from 'three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export interface NgtsPerspectiveCameraOptions extends Partial<PerspectiveCamera> {
|
|
5
|
+
/** Registers the camera as the system default, fiber will start rendering with it */
|
|
6
|
+
makeDefault?: boolean;
|
|
7
|
+
/** Making it manual will stop responsiveness and you have to calculate aspect ratio yourself. */
|
|
8
|
+
manual?: boolean;
|
|
9
|
+
/** Number of frames to render, Infinity */
|
|
10
|
+
frames: number;
|
|
11
|
+
/** Resolution of the FBO, 256 */
|
|
12
|
+
resolution: number;
|
|
13
|
+
/** Optional environment map for functional use */
|
|
14
|
+
envMap?: Texture;
|
|
15
|
+
}
|
|
16
|
+
export declare class NgtsPerspectiveCamera {
|
|
17
|
+
cameraRef: import("@angular/core").InputSignal<import("angular-three").NgtInjectedRef<PerspectiveCamera>>;
|
|
18
|
+
options: import("@angular/core").InputSignalWithTransform<NgtsPerspectiveCameraOptions, "" | Partial<NgtsPerspectiveCameraOptions>>;
|
|
19
|
+
parameters: import("@angular/core").Signal<NgtsPerspectiveCameraOptions>;
|
|
20
|
+
content: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
21
|
+
withTextureContent: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
22
|
+
groupRef: import("angular-three").NgtInjectedRef<Group<import("three").Object3DEventMap>>;
|
|
23
|
+
private autoEffect;
|
|
24
|
+
private store;
|
|
25
|
+
private camera;
|
|
26
|
+
private size;
|
|
27
|
+
private manual;
|
|
28
|
+
private makeDefault;
|
|
29
|
+
private resolution;
|
|
30
|
+
private fbo;
|
|
31
|
+
texture: import("@angular/core").Signal<Texture>;
|
|
32
|
+
constructor();
|
|
33
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsPerspectiveCamera, never>;
|
|
34
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsPerspectiveCamera, "ngts-perspective-camera", never, { "cameraRef": { "alias": "cameraRef"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, ["content", "withTextureContent"], never, true, never>;
|
|
35
|
+
}
|
package/controls/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './lib/orbit-controls';
|
|
@@ -2,7 +2,7 @@ import { NgtInjectedRef, NgtVector3 } from 'angular-three';
|
|
|
2
2
|
import { Camera, Event } from 'three';
|
|
3
3
|
import { OrbitControls } from 'three-stdlib';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
export interface
|
|
5
|
+
export interface NgtsOrbitControlsOptions {
|
|
6
6
|
camera?: Camera;
|
|
7
7
|
domElement?: HTMLElement;
|
|
8
8
|
target?: NgtVector3;
|
|
@@ -16,11 +16,12 @@ declare global {
|
|
|
16
16
|
/**
|
|
17
17
|
* @extends three-stdlib|OrbitControls
|
|
18
18
|
*/
|
|
19
|
-
'ngts-orbit-controls': OrbitControls &
|
|
19
|
+
'ngts-orbit-controls': OrbitControls & NgtsOrbitControlsOptions;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
export declare class NgtsOrbitControls {
|
|
23
|
-
options: import("@angular/core").InputSignalWithTransform<
|
|
23
|
+
options: import("@angular/core").InputSignalWithTransform<Partial<OrbitControls> & NgtsOrbitControlsOptions, "" | Partial<Partial<OrbitControls> & NgtsOrbitControlsOptions>>;
|
|
24
|
+
parameters: import("@angular/core").Signal<Partial<OrbitControls> & NgtsOrbitControlsOptions>;
|
|
24
25
|
controlsRef: import("@angular/core").InputSignal<NgtInjectedRef<OrbitControls>>;
|
|
25
26
|
changed: import("@angular/core").OutputEmitterRef<Event<string, unknown>>;
|
|
26
27
|
started: import("@angular/core").OutputEmitterRef<Event<string, unknown>>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLWNhbWVyYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvY2FtZXJhcy9zcmMvYW5ndWxhci10aHJlZS1zb2JhLWNhbWVyYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './lib/camera-content';
|
|
2
|
+
export * from './lib/perspective-camera';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvY2FtZXJhcy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY2FtZXJhLWNvbnRlbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGVyc3BlY3RpdmUtY2FtZXJhJztcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class NgtsCameraContentWithFboTexture {
|
|
4
|
+
static ngTemplateContextGuard(_, ctx) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsCameraContentWithFboTexture, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
8
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: NgtsCameraContentWithFboTexture, isStandalone: true, selector: "ng-template[withTexture]", ngImport: i0 }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsCameraContentWithFboTexture, decorators: [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{ standalone: true, selector: 'ng-template[withTexture]' }]
|
|
13
|
+
}] });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLWNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvY2FtZXJhcy9zcmMvbGliL2NhbWVyYS1jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBSWxELE1BQU0sT0FBTywrQkFBK0I7SUFDM0MsTUFBTSxDQUFDLHNCQUFzQixDQUM1QixDQUFrQyxFQUNsQyxHQUFZO1FBRVosT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDOzhHQU5XLCtCQUErQjtrR0FBL0IsK0JBQStCOzsyRkFBL0IsK0JBQStCO2tCQUQzQyxTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUsIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbd2l0aFRleHR1cmVdJyB9KVxuZXhwb3J0IGNsYXNzIE5ndHNDYW1lcmFDb250ZW50V2l0aEZib1RleHR1cmUge1xuXHRzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChcblx0XHRfOiBOZ3RzQ2FtZXJhQ29udGVudFdpdGhGYm9UZXh0dXJlLFxuXHRcdGN0eDogdW5rbm93bixcblx0KTogY3R4IGlzIHsgJGltcGxpY2l0OiBTaWduYWw8VGV4dHVyZT4gfSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, TemplateRef, afterNextRender, computed, contentChild, input, untracked, } from '@angular/core';
|
|
3
|
+
import { extend, injectBeforeRender, injectNgtRef, injectNgtStore, makeParameters } from 'angular-three';
|
|
4
|
+
import { NgtsContent, injectFBO } from 'angular-three-soba/misc';
|
|
5
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
6
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
7
|
+
import { Group, PerspectiveCamera } from 'three';
|
|
8
|
+
import { NgtsCameraContentWithFboTexture } from './camera-content';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
extend({ PerspectiveCamera, Group });
|
|
11
|
+
const defaultOptions = {
|
|
12
|
+
frames: Infinity,
|
|
13
|
+
resolution: 256,
|
|
14
|
+
makeDefault: false,
|
|
15
|
+
manual: false,
|
|
16
|
+
};
|
|
17
|
+
export class NgtsPerspectiveCamera {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.cameraRef = input(injectNgtRef());
|
|
20
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
21
|
+
this.parameters = makeParameters(this.options, ['envMap', 'makeDefault', 'manual', 'frames', 'resolution']);
|
|
22
|
+
this.content = contentChild(NgtsContent, { read: TemplateRef });
|
|
23
|
+
this.withTextureContent = contentChild(NgtsCameraContentWithFboTexture, { read: TemplateRef });
|
|
24
|
+
this.groupRef = injectNgtRef();
|
|
25
|
+
this.autoEffect = injectAutoEffect();
|
|
26
|
+
this.store = injectNgtStore();
|
|
27
|
+
this.camera = this.store.select('camera');
|
|
28
|
+
this.size = this.store.select('size');
|
|
29
|
+
this.manual = computed(() => this.options().manual);
|
|
30
|
+
this.makeDefault = computed(() => this.options().makeDefault);
|
|
31
|
+
this.resolution = computed(() => this.options().resolution);
|
|
32
|
+
this.fbo = injectFBO(() => ({ width: this.resolution() }));
|
|
33
|
+
this.texture = computed(() => this.fbo().texture);
|
|
34
|
+
afterNextRender(() => {
|
|
35
|
+
this.autoEffect(() => {
|
|
36
|
+
if (!this.manual()) {
|
|
37
|
+
this.cameraRef().nativeElement.aspect = this.size().width / this.size().height;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
this.autoEffect(() => {
|
|
41
|
+
if (this.makeDefault()) {
|
|
42
|
+
const oldCam = untracked(this.camera);
|
|
43
|
+
this.store.update({ camera: this.cameraRef().nativeElement });
|
|
44
|
+
return () => this.store.update(() => ({ camera: oldCam }));
|
|
45
|
+
}
|
|
46
|
+
return;
|
|
47
|
+
});
|
|
48
|
+
this.cameraRef().nativeElement.aspect = this.size().width / this.size().height;
|
|
49
|
+
});
|
|
50
|
+
let count = 0;
|
|
51
|
+
let oldEnvMap = null;
|
|
52
|
+
injectBeforeRender(({ gl, scene }) => {
|
|
53
|
+
const [{ frames, envMap }, group, camera, fbo] = [
|
|
54
|
+
this.options(),
|
|
55
|
+
this.groupRef.nativeElement,
|
|
56
|
+
this.cameraRef().nativeElement,
|
|
57
|
+
this.fbo(),
|
|
58
|
+
];
|
|
59
|
+
if (this.withTextureContent() && group && camera && fbo && (frames === Infinity || count < frames)) {
|
|
60
|
+
group.visible = false;
|
|
61
|
+
gl.setRenderTarget(fbo);
|
|
62
|
+
oldEnvMap = scene.background;
|
|
63
|
+
if (envMap)
|
|
64
|
+
scene.background = envMap;
|
|
65
|
+
gl.render(scene, camera);
|
|
66
|
+
scene.background = oldEnvMap;
|
|
67
|
+
gl.setRenderTarget(null);
|
|
68
|
+
group.visible = true;
|
|
69
|
+
count++;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsPerspectiveCamera, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
74
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtsPerspectiveCamera, isStandalone: true, selector: "ngts-perspective-camera", inputs: { cameraRef: { classPropertyName: "cameraRef", publicName: "cameraRef", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: NgtsContent, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "withTextureContent", first: true, predicate: NgtsCameraContentWithFboTexture, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: `
|
|
75
|
+
<ngt-perspective-camera [ref]="cameraRef()" [parameters]="parameters()">
|
|
76
|
+
@if (content(); as template) {
|
|
77
|
+
<ng-container [ngTemplateOutlet]="template" />
|
|
78
|
+
}
|
|
79
|
+
</ngt-perspective-camera>
|
|
80
|
+
<ngt-group [ref]="groupRef">
|
|
81
|
+
@if (withTextureContent(); as withTextureTemplate) {
|
|
82
|
+
<ng-container [ngTemplateOutlet]="withTextureTemplate" [ngTemplateOutletContext]="{ $implicit: texture }" />
|
|
83
|
+
}
|
|
84
|
+
</ngt-group>
|
|
85
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
86
|
+
}
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsPerspectiveCamera, decorators: [{
|
|
88
|
+
type: Component,
|
|
89
|
+
args: [{
|
|
90
|
+
selector: 'ngts-perspective-camera',
|
|
91
|
+
standalone: true,
|
|
92
|
+
template: `
|
|
93
|
+
<ngt-perspective-camera [ref]="cameraRef()" [parameters]="parameters()">
|
|
94
|
+
@if (content(); as template) {
|
|
95
|
+
<ng-container [ngTemplateOutlet]="template" />
|
|
96
|
+
}
|
|
97
|
+
</ngt-perspective-camera>
|
|
98
|
+
<ngt-group [ref]="groupRef">
|
|
99
|
+
@if (withTextureContent(); as withTextureTemplate) {
|
|
100
|
+
<ng-container [ngTemplateOutlet]="withTextureTemplate" [ngTemplateOutletContext]="{ $implicit: texture }" />
|
|
101
|
+
}
|
|
102
|
+
</ngt-group>
|
|
103
|
+
`,
|
|
104
|
+
imports: [NgTemplateOutlet],
|
|
105
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
106
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
107
|
+
}]
|
|
108
|
+
}], ctorParameters: () => [] });
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc3BlY3RpdmUtY2FtZXJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2NhbWVyYXMvc3JjL2xpYi9wZXJzcGVjdGl2ZS1jYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUNOLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxlQUFlLEVBQ2YsUUFBUSxFQUNSLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFTLEtBQUssRUFBRSxpQkFBaUIsRUFBVyxNQUFNLE9BQU8sQ0FBQztBQUNqRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFbkUsTUFBTSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQWVyQyxNQUFNLGNBQWMsR0FBaUM7SUFDcEQsTUFBTSxFQUFFLFFBQVE7SUFDaEIsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixNQUFNLEVBQUUsS0FBSztDQUNiLENBQUM7QUFxQkYsTUFBTSxPQUFPLHFCQUFxQjtJQXNCakM7UUFyQkEsY0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQXFCLENBQUMsQ0FB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MkJBQVUsV0FBVyw2Q0F0QjVFOzs7Ozs7Ozs7OztFQVdULDREQUNTLGdCQUFnQjs7MkZBSWQscUJBQXFCO2tCQW5CakMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7OztFQVdUO29CQUNELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUMzQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRUZW1wbGF0ZVJlZixcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0Y29udGVudENoaWxkLFxuXHRpbnB1dCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RSZWYsIGluamVjdE5ndFN0b3JlLCBtYWtlUGFyYW1ldGVycyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0c0NvbnRlbnQsIGluamVjdEZCTyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9taXNjJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IENvbG9yLCBHcm91cCwgUGVyc3BlY3RpdmVDYW1lcmEsIFRleHR1cmUgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RzQ2FtZXJhQ29udGVudFdpdGhGYm9UZXh0dXJlIH0gZnJvbSAnLi9jYW1lcmEtY29udGVudCc7XG5cbmV4dGVuZCh7IFBlcnNwZWN0aXZlQ2FtZXJhLCBHcm91cCB9KTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzUGVyc3BlY3RpdmVDYW1lcmFPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxQZXJzcGVjdGl2ZUNhbWVyYT4ge1xuXHQvKiogUmVnaXN0ZXJzIHRoZSBjYW1lcmEgYXMgdGhlIHN5c3RlbSBkZWZhdWx0LCBmaWJlciB3aWxsIHN0YXJ0IHJlbmRlcmluZyB3aXRoIGl0ICovXG5cdG1ha2VEZWZhdWx0PzogYm9vbGVhbjtcblx0LyoqIE1ha2luZyBpdCBtYW51YWwgd2lsbCBzdG9wIHJlc3BvbnNpdmVuZXNzIGFuZCB5b3UgaGF2ZSB0byBjYWxjdWxhdGUgYXNwZWN0IHJhdGlvIHlvdXJzZWxmLiAqL1xuXHRtYW51YWw/OiBib29sZWFuO1xuXHQvKiogTnVtYmVyIG9mIGZyYW1lcyB0byByZW5kZXIsIEluZmluaXR5ICovXG5cdGZyYW1lczogbnVtYmVyO1xuXHQvKiogUmVzb2x1dGlvbiBvZiB0aGUgRkJPLCAyNTYgKi9cblx0cmVzb2x1dGlvbjogbnVtYmVyO1xuXHQvKiogT3B0aW9uYWwgZW52aXJvbm1lbnQgbWFwIGZvciBmdW5jdGlvbmFsIHVzZSAqL1xuXHRlbnZNYXA/OiBUZXh0dXJlO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c1BlcnNwZWN0aXZlQ2FtZXJhT3B0aW9ucyA9IHtcblx0ZnJhbWVzOiBJbmZpbml0eSxcblx0cmVzb2x1dGlvbjogMjU2LFxuXHRtYWtlRGVmYXVsdDogZmFsc2UsXG5cdG1hbnVhbDogZmFsc2UsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXBlcnNwZWN0aXZlLWNhbWVyYScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wZXJzcGVjdGl2ZS1jYW1lcmEgW3JlZl09XCJjYW1lcmFSZWYoKVwiIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiPlxuXHRcdFx0QGlmIChjb250ZW50KCk7IGFzIHRlbXBsYXRlKSB7XG5cdFx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIiAvPlxuXHRcdFx0fVxuXHRcdDwvbmd0LXBlcnNwZWN0aXZlLWNhbWVyYT5cblx0XHQ8bmd0LWdyb3VwIFtyZWZdPVwiZ3JvdXBSZWZcIj5cblx0XHRcdEBpZiAod2l0aFRleHR1cmVDb250ZW50KCk7IGFzIHdpdGhUZXh0dXJlVGVtcGxhdGUpIHtcblx0XHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ3aXRoVGV4dHVyZVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB0ZXh0dXJlIH1cIiAvPlxuXHRcdFx0fVxuXHRcdDwvbmd0LWdyb3VwPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldF0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNQZXJzcGVjdGl2ZUNhbWVyYSB7XG5cdGNhbWVyYVJlZiA9IGlucHV0KGluamVjdE5ndFJlZjxQZXJzcGVjdGl2ZUNhbWVyYT4oKSk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG1ha2VQYXJhbWV0ZXJzKHRoaXMub3B0aW9ucywgWydlbnZNYXAnLCAnbWFrZURlZmF1bHQnLCAnbWFudWFsJywgJ2ZyYW1lcycsICdyZXNvbHV0aW9uJ10pO1xuXG5cdGNvbnRlbnQgPSBjb250ZW50Q2hpbGQoTmd0c0NvbnRlbnQsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSk7XG5cdHdpdGhUZXh0dXJlQ29udGVudCA9IGNvbnRlbnRDaGlsZChOZ3RzQ2FtZXJhQ29udGVudFdpdGhGYm9UZXh0dXJlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pO1xuXG5cdGdyb3VwUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuXG5cdHByaXZhdGUgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cdHByaXZhdGUgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cblx0cHJpdmF0ZSBtYW51YWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5tYW51YWwpO1xuXHRwcml2YXRlIG1ha2VEZWZhdWx0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCkubWFrZURlZmF1bHQpO1xuXHRwcml2YXRlIHJlc29sdXRpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5yZXNvbHV0aW9uKTtcblx0cHJpdmF0ZSBmYm8gPSBpbmplY3RGQk8oKCkgPT4gKHsgd2lkdGg6IHRoaXMucmVzb2x1dGlvbigpIH0pKTtcblx0dGV4dHVyZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmJvKCkudGV4dHVyZSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdHRoaXMuYXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5tYW51YWwoKSkge1xuXHRcdFx0XHRcdHRoaXMuY2FtZXJhUmVmKCkubmF0aXZlRWxlbWVudC5hc3BlY3QgPSB0aGlzLnNpemUoKS53aWR0aCAvIHRoaXMuc2l6ZSgpLmhlaWdodDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLm1ha2VEZWZhdWx0KCkpIHtcblx0XHRcdFx0XHRjb25zdCBvbGRDYW0gPSB1bnRyYWNrZWQodGhpcy5jYW1lcmEpO1xuXHRcdFx0XHRcdHRoaXMuc3RvcmUudXBkYXRlKHsgY2FtZXJhOiB0aGlzLmNhbWVyYVJlZigpLm5hdGl2ZUVsZW1lbnQgfSk7XG5cdFx0XHRcdFx0cmV0dXJuICgpID0+IHRoaXMuc3RvcmUudXBkYXRlKCgpID0+ICh7IGNhbWVyYTogb2xkQ2FtIH0pKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYW1lcmFSZWYoKS5uYXRpdmVFbGVtZW50LmFzcGVjdCA9IHRoaXMuc2l6ZSgpLndpZHRoIC8gdGhpcy5zaXplKCkuaGVpZ2h0O1xuXHRcdH0pO1xuXG5cdFx0bGV0IGNvdW50ID0gMDtcblx0XHRsZXQgb2xkRW52TWFwOiBDb2xvciB8IFRleHR1cmUgfCBudWxsID0gbnVsbDtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgZ2wsIHNjZW5lIH0pID0+IHtcblx0XHRcdGNvbnN0IFt7IGZyYW1lcywgZW52TWFwIH0sIGdyb3VwLCBjYW1lcmEsIGZib10gPSBbXG5cdFx0XHRcdHRoaXMub3B0aW9ucygpLFxuXHRcdFx0XHR0aGlzLmdyb3VwUmVmLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdHRoaXMuY2FtZXJhUmVmKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5mYm8oKSxcblx0XHRcdF07XG5cdFx0XHRpZiAodGhpcy53aXRoVGV4dHVyZUNvbnRlbnQoKSAmJiBncm91cCAmJiBjYW1lcmEgJiYgZmJvICYmIChmcmFtZXMgPT09IEluZmluaXR5IHx8IGNvdW50IDwgZnJhbWVzKSkge1xuXHRcdFx0XHRncm91cC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdGdsLnNldFJlbmRlclRhcmdldChmYm8pO1xuXHRcdFx0XHRvbGRFbnZNYXAgPSBzY2VuZS5iYWNrZ3JvdW5kO1xuXHRcdFx0XHRpZiAoZW52TWFwKSBzY2VuZS5iYWNrZ3JvdW5kID0gZW52TWFwO1xuXHRcdFx0XHRnbC5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG5cdFx0XHRcdHNjZW5lLmJhY2tncm91bmQgPSBvbGRFbnZNYXA7XG5cdFx0XHRcdGdsLnNldFJlbmRlclRhcmdldChudWxsKTtcblx0XHRcdFx0Z3JvdXAudmlzaWJsZSA9IHRydWU7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './lib/orbit-controls';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvY29udHJvbHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9vcmJpdC1jb250cm9scyc7XG4iXX0=
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, input, output } from '@angular/core';
|
|
2
|
+
import { injectBeforeRender, injectNgtRef, injectNgtStore, makeParameters, NgtArgs, } from 'angular-three';
|
|
3
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
+
import { OrbitControls } from 'three-stdlib';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const defaultOptions = {
|
|
7
|
+
enableDamping: true,
|
|
8
|
+
regress: false,
|
|
9
|
+
makeDefault: false,
|
|
10
|
+
keyEvents: false,
|
|
11
|
+
};
|
|
12
|
+
export class NgtsOrbitControls {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
15
|
+
this.parameters = makeParameters(this.options, [
|
|
16
|
+
'makeDefault',
|
|
17
|
+
'camera',
|
|
18
|
+
'regress',
|
|
19
|
+
'domElement',
|
|
20
|
+
'keyEvents',
|
|
21
|
+
'enableDamping',
|
|
22
|
+
]);
|
|
23
|
+
this.controlsRef = input(injectNgtRef());
|
|
24
|
+
this.changed = output();
|
|
25
|
+
this.started = output();
|
|
26
|
+
this.ended = output();
|
|
27
|
+
this.store = injectNgtStore();
|
|
28
|
+
this.invalidate = this.store.select('invalidate');
|
|
29
|
+
this.performanceRegress = this.store.select('performance', 'regress');
|
|
30
|
+
this.defaultCamera = this.store.select('camera');
|
|
31
|
+
this.glDomElement = this.store.select('gl', 'domElement');
|
|
32
|
+
this.camera = computed(() => this.options().camera);
|
|
33
|
+
this.regress = computed(() => this.options().regress);
|
|
34
|
+
this.keyEvents = computed(() => this.options().keyEvents);
|
|
35
|
+
this.domElement = computed(() => this.options().domElement);
|
|
36
|
+
this.makeDefault = computed(() => this.options().makeDefault);
|
|
37
|
+
this.args = computed(() => [this.controlsRef().nativeElement]);
|
|
38
|
+
this.enableDamping = computed(() => this.options().enableDamping);
|
|
39
|
+
injectBeforeRender(() => {
|
|
40
|
+
const controls = this.controlsRef().nativeElement;
|
|
41
|
+
if (controls?.enabled) {
|
|
42
|
+
controls.update();
|
|
43
|
+
}
|
|
44
|
+
}, { priority: -1 });
|
|
45
|
+
this.setControls();
|
|
46
|
+
this.connectElement();
|
|
47
|
+
this.makeControlsDefault();
|
|
48
|
+
this.setEvents();
|
|
49
|
+
}
|
|
50
|
+
setControls() {
|
|
51
|
+
effect(() => {
|
|
52
|
+
const [camera, defaultCamera, controlsRef] = [this.camera(), this.defaultCamera(), this.controlsRef()];
|
|
53
|
+
const controlsCamera = camera || defaultCamera;
|
|
54
|
+
if (!controlsRef.nativeElement || controlsRef.nativeElement.object !== controlsCamera) {
|
|
55
|
+
controlsRef.nativeElement = new OrbitControls(controlsCamera);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
connectElement() {
|
|
60
|
+
effect((onCleanup) => {
|
|
61
|
+
const [keyEvents, domElement, controls] = [
|
|
62
|
+
this.keyEvents(),
|
|
63
|
+
this.domElement() || this.store.get('events', 'connected') || this.glDomElement(),
|
|
64
|
+
this.controlsRef().nativeElement,
|
|
65
|
+
this.invalidate(),
|
|
66
|
+
this.regress(),
|
|
67
|
+
];
|
|
68
|
+
if (!controls)
|
|
69
|
+
return;
|
|
70
|
+
if (keyEvents) {
|
|
71
|
+
controls.connect(keyEvents === true ? domElement : keyEvents);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
controls.connect(domElement);
|
|
75
|
+
}
|
|
76
|
+
onCleanup(() => void controls.dispose());
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
makeControlsDefault() {
|
|
80
|
+
effect((onCleanup) => {
|
|
81
|
+
const [controls, makeDefault] = [this.controlsRef().nativeElement, this.makeDefault()];
|
|
82
|
+
if (!controls)
|
|
83
|
+
return;
|
|
84
|
+
if (makeDefault) {
|
|
85
|
+
const oldControls = this.store.get('controls');
|
|
86
|
+
this.store.update({ controls });
|
|
87
|
+
onCleanup(() => void this.store.update({ controls: oldControls }));
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
setEvents() {
|
|
92
|
+
effect((onCleanup) => {
|
|
93
|
+
const [controls, invalidate, performanceRegress, regress] = [
|
|
94
|
+
this.controlsRef().nativeElement,
|
|
95
|
+
this.invalidate(),
|
|
96
|
+
this.performanceRegress(),
|
|
97
|
+
this.regress(),
|
|
98
|
+
];
|
|
99
|
+
if (!controls)
|
|
100
|
+
return;
|
|
101
|
+
const changeCallback = (e) => {
|
|
102
|
+
invalidate();
|
|
103
|
+
if (regress)
|
|
104
|
+
performanceRegress();
|
|
105
|
+
this.changed.emit(e);
|
|
106
|
+
};
|
|
107
|
+
const startCallback = this.started.emit.bind(this.started);
|
|
108
|
+
const endCallback = this.ended.emit.bind(this.ended);
|
|
109
|
+
controls.addEventListener('change', changeCallback);
|
|
110
|
+
controls.addEventListener('start', startCallback);
|
|
111
|
+
controls.addEventListener('end', endCallback);
|
|
112
|
+
onCleanup(() => {
|
|
113
|
+
controls.removeEventListener('change', changeCallback);
|
|
114
|
+
controls.removeEventListener('start', startCallback);
|
|
115
|
+
controls.removeEventListener('end', endCallback);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsOrbitControls, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
120
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.3", type: NgtsOrbitControls, isStandalone: true, selector: "ngts-orbit-controls", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, controlsRef: { classPropertyName: "controlsRef", publicName: "controlsRef", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", started: "started", ended: "ended" }, ngImport: i0, template: `
|
|
121
|
+
<ngt-primitive ngtCompound *args="args()" [parameters]="parameters()" [enableDamping]="enableDamping()">
|
|
122
|
+
<ng-content />
|
|
123
|
+
</ngt-primitive>
|
|
124
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
125
|
+
}
|
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsOrbitControls, decorators: [{
|
|
127
|
+
type: Component,
|
|
128
|
+
args: [{
|
|
129
|
+
selector: 'ngts-orbit-controls',
|
|
130
|
+
standalone: true,
|
|
131
|
+
template: `
|
|
132
|
+
<ngt-primitive ngtCompound *args="args()" [parameters]="parameters()" [enableDamping]="enableDamping()">
|
|
133
|
+
<ng-content />
|
|
134
|
+
</ngt-primitive>
|
|
135
|
+
`,
|
|
136
|
+
imports: [NgtArgs],
|
|
137
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
138
|
+
}]
|
|
139
|
+
}], ctorParameters: () => [] });
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JiaXQtY29udHJvbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvY29udHJvbHMvc3JjL2xpYi9vcmJpdC1jb250cm9scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQ04sa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixjQUFjLEVBQ2QsY0FBYyxFQUNkLE9BQU8sR0FJUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFxQjdDLE1BQU0sY0FBYyxHQUFzRDtJQUN6RSxhQUFhLEVBQUUsSUFBSTtJQUNuQixPQUFPLEVBQUUsS0FBSztJQUNkLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFNBQVMsRUFBRSxLQUFLO0NBQ2hCLENBQUM7QUFhRixNQUFNLE9BQU8saUJBQWlCO0lBK0I3QjtRQTlCQSxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN6QyxhQUFhO1lBQ2IsUUFBUTtZQUNSLFNBQVM7WUFDVCxZQUFZO1lBQ1osV0FBVztZQUNYLGVBQWU7U0FDZixDQUFDLENBQUM7UUFDSCxnQkFBVyxHQUFHLEtBQUssQ0FBZ0MsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVuRSxZQUFPLEdBQUcsTUFBTSxFQUFTLENBQUM7UUFDMUIsWUFBTyxHQUFHLE1BQU0sRUFBUyxDQUFDO1FBQzFCLFVBQUssR0FBRyxNQUFNLEVBQVMsQ0FBQztRQUVoQixVQUFLLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDekIsZUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLHVCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRSxrQkFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXJELFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2RCxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDMUQsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBR3RFLGtCQUFrQixDQUNqQixHQUFHLEVBQUU7WUFDSixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ2xELElBQUksUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNGLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUNoQixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVPLFdBQVc7UUFDbEIsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLE1BQU0sQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN2RyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksYUFBYSxDQUFDO1lBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN2RixXQUFXLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLGNBQTJCLENBQUMsQ0FBQztZQUM1RSxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYztRQUNyQixNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNqRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYTtnQkFDaEMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRTthQUNkLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQ3RCLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9ELENBQUM7aUJBQU0sQ0FBQztnQkFDUCxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUI7UUFDMUIsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUN0QixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNqQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVM7UUFDaEIsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQzNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQUU7YUFDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUN0QixNQUFNLGNBQWMsR0FBdUIsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDaEQsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxPQUFPO29CQUFFLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQztZQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVyRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3BELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDbEQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztZQUU5QyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3ZELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ3JELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBckhXLGlCQUFpQjtrR0FBakIsaUJBQWlCLHdhQVJuQjs7OztFQUlULDREQUNTLE9BQU87OzJGQUdMLGlCQUFpQjtrQkFYN0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBlZmZlY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpbmplY3ROZ3RTdG9yZSxcblx0bWFrZVBhcmFtZXRlcnMsXG5cdE5ndEFyZ3MsXG5cdE5ndENhbWVyYSxcblx0Tmd0SW5qZWN0ZWRSZWYsXG5cdE5ndFZlY3RvcjMsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQ2FtZXJhLCBFdmVudCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE9yYml0Q29udHJvbHMgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNPcmJpdENvbnRyb2xzT3B0aW9ucyB7XG5cdGNhbWVyYT86IENhbWVyYTtcblx0ZG9tRWxlbWVudD86IEhUTUxFbGVtZW50O1xuXHR0YXJnZXQ/OiBOZ3RWZWN0b3IzO1xuXHRtYWtlRGVmYXVsdDogYm9vbGVhbjtcblx0cmVncmVzczogYm9vbGVhbjtcblx0ZW5hYmxlRGFtcGluZzogYm9vbGVhbjtcblx0a2V5RXZlbnRzOiBib29sZWFuIHwgSFRNTEVsZW1lbnQ7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgdGhyZWUtc3RkbGlifE9yYml0Q29udHJvbHNcblx0XHQgKi9cblx0XHQnbmd0cy1vcmJpdC1jb250cm9scyc6IE9yYml0Q29udHJvbHMgJiBOZ3RzT3JiaXRDb250cm9sc09wdGlvbnM7XG5cdH1cbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8T3JiaXRDb250cm9scz4gJiBOZ3RzT3JiaXRDb250cm9sc09wdGlvbnMgPSB7XG5cdGVuYWJsZURhbXBpbmc6IHRydWUsXG5cdHJlZ3Jlc3M6IGZhbHNlLFxuXHRtYWtlRGVmYXVsdDogZmFsc2UsXG5cdGtleUV2ZW50czogZmFsc2UsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLW9yYml0LWNvbnRyb2xzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZSBuZ3RDb21wb3VuZCAqYXJncz1cImFyZ3MoKVwiIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiIFtlbmFibGVEYW1waW5nXT1cImVuYWJsZURhbXBpbmcoKVwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1wcmltaXRpdmU+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzT3JiaXRDb250cm9scyB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG1ha2VQYXJhbWV0ZXJzKHRoaXMub3B0aW9ucywgW1xuXHRcdCdtYWtlRGVmYXVsdCcsXG5cdFx0J2NhbWVyYScsXG5cdFx0J3JlZ3Jlc3MnLFxuXHRcdCdkb21FbGVtZW50Jyxcblx0XHQna2V5RXZlbnRzJyxcblx0XHQnZW5hYmxlRGFtcGluZycsXG5cdF0pO1xuXHRjb250cm9sc1JlZiA9IGlucHV0PE5ndEluamVjdGVkUmVmPE9yYml0Q29udHJvbHM+PihpbmplY3ROZ3RSZWYoKSk7XG5cblx0Y2hhbmdlZCA9IG91dHB1dDxFdmVudD4oKTtcblx0c3RhcnRlZCA9IG91dHB1dDxFdmVudD4oKTtcblx0ZW5kZWQgPSBvdXRwdXQ8RXZlbnQ+KCk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdHByaXZhdGUgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cdHByaXZhdGUgcGVyZm9ybWFuY2VSZWdyZXNzID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3BlcmZvcm1hbmNlJywgJ3JlZ3Jlc3MnKTtcblx0cHJpdmF0ZSBkZWZhdWx0Q2FtZXJhID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpO1xuXHRwcml2YXRlIGdsRG9tRWxlbWVudCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdnbCcsICdkb21FbGVtZW50Jyk7XG5cblx0cHJpdmF0ZSBjYW1lcmEgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5jYW1lcmEpO1xuXHRwcml2YXRlIHJlZ3Jlc3MgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5yZWdyZXNzKTtcblx0cHJpdmF0ZSBrZXlFdmVudHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5rZXlFdmVudHMpO1xuXHRwcml2YXRlIGRvbUVsZW1lbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5kb21FbGVtZW50KTtcblx0cHJpdmF0ZSBtYWtlRGVmYXVsdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpLm1ha2VEZWZhdWx0KTtcblxuXHRwcm90ZWN0ZWQgYXJncyA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudF0pO1xuXHRwcm90ZWN0ZWQgZW5hYmxlRGFtcGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpLmVuYWJsZURhbXBpbmcpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgY29udHJvbHMgPSB0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdFx0aWYgKGNvbnRyb2xzPy5lbmFibGVkKSB7XG5cdFx0XHRcdFx0Y29udHJvbHMudXBkYXRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IHByaW9yaXR5OiAtMSB9LFxuXHRcdCk7XG5cblx0XHR0aGlzLnNldENvbnRyb2xzKCk7XG5cdFx0dGhpcy5jb25uZWN0RWxlbWVudCgpO1xuXHRcdHRoaXMubWFrZUNvbnRyb2xzRGVmYXVsdCgpO1xuXHRcdHRoaXMuc2V0RXZlbnRzKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldENvbnRyb2xzKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbY2FtZXJhLCBkZWZhdWx0Q2FtZXJhLCBjb250cm9sc1JlZl0gPSBbdGhpcy5jYW1lcmEoKSwgdGhpcy5kZWZhdWx0Q2FtZXJhKCksIHRoaXMuY29udHJvbHNSZWYoKV07XG5cdFx0XHRjb25zdCBjb250cm9sc0NhbWVyYSA9IGNhbWVyYSB8fCBkZWZhdWx0Q2FtZXJhO1xuXHRcdFx0aWYgKCFjb250cm9sc1JlZi5uYXRpdmVFbGVtZW50IHx8IGNvbnRyb2xzUmVmLm5hdGl2ZUVsZW1lbnQub2JqZWN0ICE9PSBjb250cm9sc0NhbWVyYSkge1xuXHRcdFx0XHRjb250cm9sc1JlZi5uYXRpdmVFbGVtZW50ID0gbmV3IE9yYml0Q29udHJvbHMoY29udHJvbHNDYW1lcmEgYXMgTmd0Q2FtZXJhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgY29ubmVjdEVsZW1lbnQoKSB7XG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IFtrZXlFdmVudHMsIGRvbUVsZW1lbnQsIGNvbnRyb2xzXSA9IFtcblx0XHRcdFx0dGhpcy5rZXlFdmVudHMoKSxcblx0XHRcdFx0dGhpcy5kb21FbGVtZW50KCkgfHwgdGhpcy5zdG9yZS5nZXQoJ2V2ZW50cycsICdjb25uZWN0ZWQnKSB8fCB0aGlzLmdsRG9tRWxlbWVudCgpLFxuXHRcdFx0XHR0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdFx0XHRcdHRoaXMucmVncmVzcygpLFxuXHRcdFx0XTtcblx0XHRcdGlmICghY29udHJvbHMpIHJldHVybjtcblx0XHRcdGlmIChrZXlFdmVudHMpIHtcblx0XHRcdFx0Y29udHJvbHMuY29ubmVjdChrZXlFdmVudHMgPT09IHRydWUgPyBkb21FbGVtZW50IDoga2V5RXZlbnRzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRyb2xzLmNvbm5lY3QoZG9tRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4gdm9pZCBjb250cm9scy5kaXNwb3NlKCkpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBtYWtlQ29udHJvbHNEZWZhdWx0KCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbY29udHJvbHMsIG1ha2VEZWZhdWx0XSA9IFt0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudCwgdGhpcy5tYWtlRGVmYXVsdCgpXTtcblx0XHRcdGlmICghY29udHJvbHMpIHJldHVybjtcblx0XHRcdGlmIChtYWtlRGVmYXVsdCkge1xuXHRcdFx0XHRjb25zdCBvbGRDb250cm9scyA9IHRoaXMuc3RvcmUuZ2V0KCdjb250cm9scycpO1xuXHRcdFx0XHR0aGlzLnN0b3JlLnVwZGF0ZSh7IGNvbnRyb2xzIH0pO1xuXHRcdFx0XHRvbkNsZWFudXAoKCkgPT4gdm9pZCB0aGlzLnN0b3JlLnVwZGF0ZSh7IGNvbnRyb2xzOiBvbGRDb250cm9scyB9KSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHNldEV2ZW50cygpIHtcblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgW2NvbnRyb2xzLCBpbnZhbGlkYXRlLCBwZXJmb3JtYW5jZVJlZ3Jlc3MsIHJlZ3Jlc3NdID0gW1xuXHRcdFx0XHR0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdFx0XHRcdHRoaXMucGVyZm9ybWFuY2VSZWdyZXNzKCksXG5cdFx0XHRcdHRoaXMucmVncmVzcygpLFxuXHRcdFx0XTtcblx0XHRcdGlmICghY29udHJvbHMpIHJldHVybjtcblx0XHRcdGNvbnN0IGNoYW5nZUNhbGxiYWNrOiAoZTogRXZlbnQpID0+IHZvaWQgPSAoZSkgPT4ge1xuXHRcdFx0XHRpbnZhbGlkYXRlKCk7XG5cdFx0XHRcdGlmIChyZWdyZXNzKSBwZXJmb3JtYW5jZVJlZ3Jlc3MoKTtcblx0XHRcdFx0dGhpcy5jaGFuZ2VkLmVtaXQoZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBzdGFydENhbGxiYWNrID0gdGhpcy5zdGFydGVkLmVtaXQuYmluZCh0aGlzLnN0YXJ0ZWQpO1xuXHRcdFx0Y29uc3QgZW5kQ2FsbGJhY2sgPSB0aGlzLmVuZGVkLmVtaXQuYmluZCh0aGlzLmVuZGVkKTtcblxuXHRcdFx0Y29udHJvbHMuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgY2hhbmdlQ2FsbGJhY2spO1xuXHRcdFx0Y29udHJvbHMuYWRkRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBzdGFydENhbGxiYWNrKTtcblx0XHRcdGNvbnRyb2xzLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZCcsIGVuZENhbGxiYWNrKTtcblxuXHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0Y29udHJvbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgY2hhbmdlQ2FsbGJhY2spO1xuXHRcdFx0XHRjb250cm9scy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFydCcsIHN0YXJ0Q2FsbGJhY2spO1xuXHRcdFx0XHRjb250cm9scy5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmQnLCBlbmRDYWxsYmFjayk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './lib/gltf-loader';
|
|
2
|
+
export * from './lib/loader';
|
|
3
|
+
export * from './lib/progress';
|
|
4
|
+
export * from './lib/texture-loader';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9nbHRmLWxvYWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvZ3Jlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dHVyZS1sb2FkZXInO1xuIl19
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { injectLoader } from 'angular-three';
|
|
2
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
3
|
+
import { DRACOLoader, GLTFLoader, MeshoptDecoder } from 'three-stdlib';
|
|
4
|
+
let dracoLoader = null;
|
|
5
|
+
let decoderPath = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/';
|
|
6
|
+
function _extensions(useDraco, useMeshOpt, extensions) {
|
|
7
|
+
return (loader) => {
|
|
8
|
+
if (extensions) {
|
|
9
|
+
extensions(loader);
|
|
10
|
+
}
|
|
11
|
+
if (useDraco) {
|
|
12
|
+
if (!dracoLoader) {
|
|
13
|
+
dracoLoader = new DRACOLoader();
|
|
14
|
+
}
|
|
15
|
+
dracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath);
|
|
16
|
+
loader.setDRACOLoader(dracoLoader);
|
|
17
|
+
}
|
|
18
|
+
if (useMeshOpt) {
|
|
19
|
+
loader.setMeshoptDecoder(typeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function _injectGLTFLoader(path, { useDraco = true, useMeshOpt = true, injector, extensions, } = {}) {
|
|
24
|
+
return assertInjector(_injectGLTFLoader, injector, () => injectLoader(() => GLTFLoader, path, { extensions: _extensions(useDraco, useMeshOpt, extensions) }));
|
|
25
|
+
}
|
|
26
|
+
_injectGLTFLoader.preload = (path, { useDraco = true, useMeshOpt = true, extensions, } = {}) => {
|
|
27
|
+
injectLoader.preload(() => GLTFLoader, path, _extensions(useDraco, useMeshOpt, extensions));
|
|
28
|
+
};
|
|
29
|
+
_injectGLTFLoader.setDecoderPath = (path) => {
|
|
30
|
+
decoderPath = path;
|
|
31
|
+
};
|
|
32
|
+
export const injectGLTFLoader = _injectGLTFLoader;
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x0Zi1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvbGliL2dsdGYtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBa0MsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFRLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0UsSUFBSSxXQUFXLEdBQXVCLElBQUksQ0FBQztBQUMzQyxJQUFJLFdBQVcsR0FBRyx5REFBeUQsQ0FBQztBQUU1RSxTQUFTLFdBQVcsQ0FBQyxRQUEwQixFQUFFLFVBQW1CLEVBQUUsVUFBeUM7SUFDOUcsT0FBTyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQ3pCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEIsVUFBVSxDQUFDLE1BQW9CLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbEIsV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakMsQ0FBQztZQUVELFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pGLE1BQXFCLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBcUIsQ0FBQyxpQkFBaUIsQ0FDdkMsT0FBTyxjQUFjLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUN4RSxDQUFDO1FBQ0gsQ0FBQztJQUNGLENBQUMsQ0FBQztBQUNILENBQUM7QUFJRCxTQUFTLGlCQUFpQixDQUN6QixJQUFnQixFQUNoQixFQUNDLFFBQVEsR0FBRyxJQUFJLEVBQ2YsVUFBVSxHQUFHLElBQUksRUFDakIsUUFBUSxFQUNSLFVBQVUsTUFNUCxFQUFFO0lBRU4sT0FBTyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUN2RCxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQ3JDLENBQUM7QUFDakUsQ0FBQztBQUVELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxDQUMzQixJQUFnQixFQUNoQixFQUNDLFFBQVEsR0FBRyxJQUFJLEVBQ2YsVUFBVSxHQUFHLElBQUksRUFDakIsVUFBVSxNQUMyRixFQUFFLEVBQ3ZHLEVBQUU7SUFDSCxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFRLENBQUMsQ0FBQztBQUNwRyxDQUFDLENBQUM7QUFFRixpQkFBaUIsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUNuRCxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUdGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFtQixpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndExvYWRlclJlc3VsdHMsIE5ndE9iamVjdE1hcCwgaW5qZWN0TG9hZGVyIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IERSQUNPTG9hZGVyLCBHTFRGLCBHTFRGTG9hZGVyLCBNZXNob3B0RGVjb2RlciB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmxldCBkcmFjb0xvYWRlcjogRFJBQ09Mb2FkZXIgfCBudWxsID0gbnVsbDtcbmxldCBkZWNvZGVyUGF0aCA9ICdodHRwczovL3d3dy5nc3RhdGljLmNvbS9kcmFjby92ZXJzaW9uZWQvZGVjb2RlcnMvMS41LjUvJztcblxuZnVuY3Rpb24gX2V4dGVuc2lvbnModXNlRHJhY286IGJvb2xlYW4gfCBzdHJpbmcsIHVzZU1lc2hPcHQ6IGJvb2xlYW4sIGV4dGVuc2lvbnM/OiAobG9hZGVyOiBHTFRGTG9hZGVyKSA9PiB2b2lkKSB7XG5cdHJldHVybiAobG9hZGVyOiBMb2FkZXIpID0+IHtcblx0XHRpZiAoZXh0ZW5zaW9ucykge1xuXHRcdFx0ZXh0ZW5zaW9ucyhsb2FkZXIgYXMgR0xURkxvYWRlcik7XG5cdFx0fVxuXG5cdFx0aWYgKHVzZURyYWNvKSB7XG5cdFx0XHRpZiAoIWRyYWNvTG9hZGVyKSB7XG5cdFx0XHRcdGRyYWNvTG9hZGVyID0gbmV3IERSQUNPTG9hZGVyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGRyYWNvTG9hZGVyLnNldERlY29kZXJQYXRoKHR5cGVvZiB1c2VEcmFjbyA9PT0gJ3N0cmluZycgPyB1c2VEcmFjbyA6IGRlY29kZXJQYXRoKTtcblx0XHRcdChsb2FkZXIgYXMgR0xURkxvYWRlcikuc2V0RFJBQ09Mb2FkZXIoZHJhY29Mb2FkZXIpO1xuXHRcdH1cblx0XHRpZiAodXNlTWVzaE9wdCkge1xuXHRcdFx0KGxvYWRlciBhcyBHTFRGTG9hZGVyKS5zZXRNZXNob3B0RGVjb2Rlcihcblx0XHRcdFx0dHlwZW9mIE1lc2hvcHREZWNvZGVyID09PSAnZnVuY3Rpb24nID8gTWVzaG9wdERlY29kZXIoKSA6IE1lc2hvcHREZWNvZGVyLFxuXHRcdFx0KTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCB0eXBlIE5ndHNHTFRGPFQgZXh0ZW5kcyBQYXJ0aWFsPE5ndE9iamVjdE1hcD4+ID0gR0xURiAmIE5ndE9iamVjdE1hcCAmIFQ7XG5cbmZ1bmN0aW9uIF9pbmplY3RHTFRGTG9hZGVyPFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuXHRwYXRoOiAoKSA9PiBUVXJsLFxuXHR7XG5cdFx0dXNlRHJhY28gPSB0cnVlLFxuXHRcdHVzZU1lc2hPcHQgPSB0cnVlLFxuXHRcdGluamVjdG9yLFxuXHRcdGV4dGVuc2lvbnMsXG5cdH06IHtcblx0XHR1c2VEcmFjbz86IGJvb2xlYW4gfCBzdHJpbmc7XG5cdFx0dXNlTWVzaE9wdD86IGJvb2xlYW47XG5cdFx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcblx0XHRleHRlbnNpb25zPzogKGxvYWRlcjogR0xURkxvYWRlcikgPT4gdm9pZDtcblx0fSA9IHt9LFxuKTogU2lnbmFsPE5ndExvYWRlclJlc3VsdHM8VFVybCwgR0xURiAmIE5ndE9iamVjdE1hcD4gfCBudWxsPiB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihfaW5qZWN0R0xURkxvYWRlciwgaW5qZWN0b3IsICgpID0+XG5cdFx0aW5qZWN0TG9hZGVyKCgpID0+IEdMVEZMb2FkZXIsIHBhdGgsIHsgZXh0ZW5zaW9uczogX2V4dGVuc2lvbnModXNlRHJhY28sIHVzZU1lc2hPcHQsIGV4dGVuc2lvbnMpIH0pLFxuXHQpIGFzIFNpZ25hbDxOZ3RMb2FkZXJSZXN1bHRzPFRVcmwsIEdMVEYgJiBOZ3RPYmplY3RNYXA+IHwgbnVsbD47XG59XG5cbl9pbmplY3RHTFRGTG9hZGVyLnByZWxvYWQgPSA8VFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG5cdHBhdGg6ICgpID0+IFRVcmwsXG5cdHtcblx0XHR1c2VEcmFjbyA9IHRydWUsXG5cdFx0dXNlTWVzaE9wdCA9IHRydWUsXG5cdFx0ZXh0ZW5zaW9ucyxcblx0fTogeyB1c2VEcmFjbz86IGJvb2xlYW4gfCBzdHJpbmc7IHVzZU1lc2hPcHQ/OiBib29sZWFuOyBleHRlbnNpb25zPzogKGxvYWRlcjogR0xURkxvYWRlcikgPT4gdm9pZCB9ID0ge30sXG4pID0+IHtcblx0aW5qZWN0TG9hZGVyLnByZWxvYWQoKCkgPT4gR0xURkxvYWRlciwgcGF0aCwgX2V4dGVuc2lvbnModXNlRHJhY28sIHVzZU1lc2hPcHQsIGV4dGVuc2lvbnMpIGFzIGFueSk7XG59O1xuXG5faW5qZWN0R0xURkxvYWRlci5zZXREZWNvZGVyUGF0aCA9IChwYXRoOiBzdHJpbmcpID0+IHtcblx0ZGVjb2RlclBhdGggPSBwYXRoO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0c0dMVEZMb2FkZXIgPSB0eXBlb2YgX2luamVjdEdMVEZMb2FkZXI7XG5leHBvcnQgY29uc3QgaW5qZWN0R0xURkxvYWRlcjogTmd0c0dMVEZMb2FkZXIgPSBfaW5qZWN0R0xURkxvYWRlcjtcbiJdfQ==
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, effect, input, signal, untracked, viewChild, } from '@angular/core';
|
|
2
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
3
|
+
import { injectProgress } from './progress';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
const defaultDataInterpolation = (p) => `Loading ${p.toFixed(2)}%`;
|
|
6
|
+
const defaultOptions = {
|
|
7
|
+
containerClass: '',
|
|
8
|
+
innerClass: '',
|
|
9
|
+
barClass: '',
|
|
10
|
+
dataClass: '',
|
|
11
|
+
dataInterpolation: defaultDataInterpolation,
|
|
12
|
+
initialState: (value) => value,
|
|
13
|
+
};
|
|
14
|
+
export class NgtsLoader {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.progressState = injectProgress();
|
|
17
|
+
this.active = computed(() => this.progressState().active);
|
|
18
|
+
this.progress = computed(() => this.progressState().progress);
|
|
19
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
20
|
+
this.containerClass = computed(() => this.options().containerClass);
|
|
21
|
+
this.innerClass = computed(() => this.options().innerClass);
|
|
22
|
+
this.barClass = computed(() => this.options().barClass);
|
|
23
|
+
this.dataClass = computed(() => this.options().dataClass);
|
|
24
|
+
this.initialState = computed(() => this.options().initialState);
|
|
25
|
+
this.dataInterpolation = computed(() => this.options().dataInterpolation);
|
|
26
|
+
this.progressSpanRef = viewChild('progressSpanRef');
|
|
27
|
+
this.shown = signal(this.initialState()(this.active()));
|
|
28
|
+
this.setShown();
|
|
29
|
+
this.updateProgress();
|
|
30
|
+
}
|
|
31
|
+
setShown() {
|
|
32
|
+
effect((onCleanup) => {
|
|
33
|
+
const [active, lastShown] = [this.active(), untracked(this.shown)];
|
|
34
|
+
if (lastShown !== active) {
|
|
35
|
+
const timeoutId = setTimeout(() => {
|
|
36
|
+
this.shown.set(active);
|
|
37
|
+
}, 300);
|
|
38
|
+
onCleanup(() => clearTimeout(timeoutId));
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
updateProgress() {
|
|
43
|
+
let progressRef = 0;
|
|
44
|
+
let rafId;
|
|
45
|
+
effect((onCleanup) => {
|
|
46
|
+
const [dataInterpolation, progress] = [this.dataInterpolation(), this.progress()];
|
|
47
|
+
const updateProgress = () => {
|
|
48
|
+
const progressSpan = this.progressSpanRef()?.nativeElement;
|
|
49
|
+
if (!progressSpan)
|
|
50
|
+
return;
|
|
51
|
+
progressRef += (progress - progressRef) / 2;
|
|
52
|
+
if (progressRef > 0.95 * progress || progress === 100)
|
|
53
|
+
progressRef = progress;
|
|
54
|
+
progressSpan.innerText = dataInterpolation(progressRef);
|
|
55
|
+
if (progressRef < progress) {
|
|
56
|
+
rafId = requestAnimationFrame(updateProgress);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
updateProgress();
|
|
60
|
+
onCleanup(() => cancelAnimationFrame(rafId));
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsLoader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
64
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtsLoader, isStandalone: true, selector: "ngts-loader", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "progressSpanRef", first: true, predicate: ["progressSpanRef"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
65
|
+
@if (shown()) {
|
|
66
|
+
<div
|
|
67
|
+
class="ngts-loader-container"
|
|
68
|
+
[class]="containerClass() || ''"
|
|
69
|
+
[style.--ngts-loader-container-opacity]="active() ? 1 : 0"
|
|
70
|
+
>
|
|
71
|
+
<div>
|
|
72
|
+
<div class="ngts-loader-inner" [class]="innerClass() || ''">
|
|
73
|
+
<div
|
|
74
|
+
class="ngts-loader-bar"
|
|
75
|
+
[class]="barClass() || ''"
|
|
76
|
+
[style.--ngts-loader-bar-scale]="progress() / 100"
|
|
77
|
+
></div>
|
|
78
|
+
<span #progressSpanRef class="ngts-loader-data" [class]="dataClass() || ''"></span>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
}
|
|
83
|
+
`, isInline: true, styles: [".ngts-loader-container{--ngts-loader-container-opacity: 0;position:absolute;top:0;left:0;width:100%;height:100%;background:#171717;display:flex;align-items:center;justify-content:center;transition:opacity .3s ease;z-index:1000;opacity:var(--ngts-loader-container-opacity)}.ngts-loader-inner{width:100px;height:3px;background:#272727;text-align:center}.ngts-loader-bar{--ngts-loader-bar-scale: 0;height:3px;width:100px;background:#fff;transition:transform .2s;transform-origin:left center;transform:scaleX(var(--ngts-loader-bar-scale))}.ngts-loader-data{display:inline-block;position:relative;font-variant-numeric:tabular-nums;margin-top:.8em;color:#f0f0f0;font-size:.6em;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Helvetica Neue,Helvetica,Arial,Roboto,Ubuntu,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;white-space:nowrap}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
84
|
+
}
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsLoader, decorators: [{
|
|
86
|
+
type: Component,
|
|
87
|
+
args: [{ selector: 'ngts-loader', standalone: true, template: `
|
|
88
|
+
@if (shown()) {
|
|
89
|
+
<div
|
|
90
|
+
class="ngts-loader-container"
|
|
91
|
+
[class]="containerClass() || ''"
|
|
92
|
+
[style.--ngts-loader-container-opacity]="active() ? 1 : 0"
|
|
93
|
+
>
|
|
94
|
+
<div>
|
|
95
|
+
<div class="ngts-loader-inner" [class]="innerClass() || ''">
|
|
96
|
+
<div
|
|
97
|
+
class="ngts-loader-bar"
|
|
98
|
+
[class]="barClass() || ''"
|
|
99
|
+
[style.--ngts-loader-bar-scale]="progress() / 100"
|
|
100
|
+
></div>
|
|
101
|
+
<span #progressSpanRef class="ngts-loader-data" [class]="dataClass() || ''"></span>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
}
|
|
106
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".ngts-loader-container{--ngts-loader-container-opacity: 0;position:absolute;top:0;left:0;width:100%;height:100%;background:#171717;display:flex;align-items:center;justify-content:center;transition:opacity .3s ease;z-index:1000;opacity:var(--ngts-loader-container-opacity)}.ngts-loader-inner{width:100px;height:3px;background:#272727;text-align:center}.ngts-loader-bar{--ngts-loader-bar-scale: 0;height:3px;width:100px;background:#fff;transition:transform .2s;transform-origin:left center;transform:scaleX(var(--ngts-loader-bar-scale))}.ngts-loader-data{display:inline-block;position:relative;font-variant-numeric:tabular-nums;margin-top:.8em;color:#f0f0f0;font-size:.6em;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Helvetica Neue,Helvetica,Arial,Roboto,Ubuntu,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;white-space:nowrap}\n"] }]
|
|
107
|
+
}], ctorParameters: () => [] });
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2xvYWRlcnMvc3JjL2xpYi9sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBRTVDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBVzNFLE1BQU0sY0FBYyxHQUFvQjtJQUN2QyxjQUFjLEVBQUUsRUFBRTtJQUNsQixVQUFVLEVBQUUsRUFBRTtJQUNkLFFBQVEsRUFBRSxFQUFFO0lBQ1osU0FBUyxFQUFFLEVBQUU7SUFDYixpQkFBaUIsRUFBRSx3QkFBd0I7SUFDM0MsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO0NBQzlCLENBQUM7QUE0QkYsTUFBTSxPQUFPLFVBQVU7SUFtQnRCO1FBbEJRLGtCQUFhLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFFekMsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekQsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNB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QyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0F2RFcsVUFBVTtrR0FBVixVQUFVLHFWQXZCWjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVDs7MkZBSVcsVUFBVTtrQkExQnRCLFNBQVM7K0JBQ0MsYUFBYSxjQUNYLElBQUksWUFDTjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVCxtQkFFZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdGNvbXB1dGVkLFxuXHRlZmZlY3QsXG5cdGlucHV0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IGluamVjdFByb2dyZXNzIH0gZnJvbSAnLi9wcm9ncmVzcyc7XG5cbmNvbnN0IGRlZmF1bHREYXRhSW50ZXJwb2xhdGlvbiA9IChwOiBudW1iZXIpID0+IGBMb2FkaW5nICR7cC50b0ZpeGVkKDIpfSVgO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNMb2FkZXJTdGF0ZSB7XG5cdGNvbnRhaW5lckNsYXNzPzogc3RyaW5nO1xuXHRpbm5lckNsYXNzPzogc3RyaW5nO1xuXHRiYXJDbGFzcz86IHN0cmluZztcblx0ZGF0YUNsYXNzPzogc3RyaW5nO1xuXHRkYXRhSW50ZXJwb2xhdGlvbjogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZztcblx0aW5pdGlhbFN0YXRlOiAodmFsdWU6IGJvb2xlYW4pID0+IGJvb2xlYW47XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzTG9hZGVyU3RhdGUgPSB7XG5cdGNvbnRhaW5lckNsYXNzOiAnJyxcblx0aW5uZXJDbGFzczogJycsXG5cdGJhckNsYXNzOiAnJyxcblx0ZGF0YUNsYXNzOiAnJyxcblx0ZGF0YUludGVycG9sYXRpb246IGRlZmF1bHREYXRhSW50ZXJwb2xhdGlvbixcblx0aW5pdGlhbFN0YXRlOiAodmFsdWUpID0+IHZhbHVlLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1sb2FkZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdEBpZiAoc2hvd24oKSkge1xuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzcz1cIm5ndHMtbG9hZGVyLWNvbnRhaW5lclwiXG5cdFx0XHRcdFtjbGFzc109XCJjb250YWluZXJDbGFzcygpIHx8ICcnXCJcblx0XHRcdFx0W3N0eWxlLi0tbmd0cy1sb2FkZXItY29udGFpbmVyLW9wYWNpdHldPVwiYWN0aXZlKCkgPyAxIDogMFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm5ndHMtbG9hZGVyLWlubmVyXCIgW2NsYXNzXT1cImlubmVyQ2xhc3MoKSB8fCAnJ1wiPlxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cIm5ndHMtbG9hZGVyLWJhclwiXG5cdFx0XHRcdFx0XHRcdFtjbGFzc109XCJiYXJDbGFzcygpIHx8ICcnXCJcblx0XHRcdFx0XHRcdFx0W3N0eWxlLi0tbmd0cy1sb2FkZXItYmFyLXNjYWxlXT1cInByb2dyZXNzKCkgLyAxMDBcIlxuXHRcdFx0XHRcdFx0PjwvZGl2PlxuXHRcdFx0XHRcdFx0PHNwYW4gI3Byb2dyZXNzU3BhblJlZiBjbGFzcz1cIm5ndHMtbG9hZGVyLWRhdGFcIiBbY2xhc3NdPVwiZGF0YUNsYXNzKCkgfHwgJydcIj48L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0fVxuXHRgLFxuXHRzdHlsZVVybHM6IFsnLi9sb2FkZXIuY3NzJ10sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTG9hZGVyIHtcblx0cHJpdmF0ZSBwcm9ncmVzc1N0YXRlID0gaW5qZWN0UHJvZ3Jlc3MoKTtcblxuXHRhY3RpdmUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb2dyZXNzU3RhdGUoKS5hY3RpdmUpO1xuXHRwcm9ncmVzcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvZ3Jlc3NTdGF0ZSgpLnByb2dyZXNzKTtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cblx0Y29udGFpbmVyQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5jb250YWluZXJDbGFzcyk7XG5cdGlubmVyQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5pbm5lckNsYXNzKTtcblx0YmFyQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5iYXJDbGFzcyk7XG5cdGRhdGFDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpLmRhdGFDbGFzcyk7XG5cdGluaXRpYWxTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpLmluaXRpYWxTdGF0ZSk7XG5cdGRhdGFJbnRlcnBvbGF0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCkuZGF0YUludGVycG9sYXRpb24pO1xuXG5cdHByb2dyZXNzU3BhblJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxTcGFuRWxlbWVudD4+KCdwcm9ncmVzc1NwYW5SZWYnKTtcblxuXHRzaG93biA9IHNpZ25hbCh0aGlzLmluaXRpYWxTdGF0ZSgpKHRoaXMuYWN0aXZlKCkpKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnNldFNob3duKCk7XG5cdFx0dGhpcy51cGRhdGVQcm9ncmVzcygpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRTaG93bigpIHtcblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgW2FjdGl2ZSwgbGFzdFNob3duXSA9IFt0aGlzLmFjdGl2ZSgpLCB1bnRyYWNrZWQodGhpcy5zaG93bildO1xuXHRcdFx0aWYgKGxhc3RTaG93biAhPT0gYWN0aXZlKSB7XG5cdFx0XHRcdGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc2hvd24uc2V0KGFjdGl2ZSk7XG5cdFx0XHRcdH0sIDMwMCk7XG5cdFx0XHRcdG9uQ2xlYW51cCgoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dElkKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVByb2dyZXNzKCkge1xuXHRcdGxldCBwcm9ncmVzc1JlZiA9IDA7XG5cdFx0bGV0IHJhZklkOiBSZXR1cm5UeXBlPHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU+O1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IFtkYXRhSW50ZXJwb2xhdGlvbiwgcHJvZ3Jlc3NdID0gW3RoaXMuZGF0YUludGVycG9sYXRpb24oKSwgdGhpcy5wcm9ncmVzcygpXTtcblx0XHRcdGNvbnN0IHVwZGF0ZVByb2dyZXNzID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwcm9ncmVzc1NwYW4gPSB0aGlzLnByb2dyZXNzU3BhblJlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0XHRpZiAoIXByb2dyZXNzU3BhbikgcmV0dXJuO1xuXHRcdFx0XHRwcm9ncmVzc1JlZiArPSAocHJvZ3Jlc3MgLSBwcm9ncmVzc1JlZikgLyAyO1xuXHRcdFx0XHRpZiAocHJvZ3Jlc3NSZWYgPiAwLjk1ICogcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT09IDEwMCkgcHJvZ3Jlc3NSZWYgPSBwcm9ncmVzcztcblx0XHRcdFx0cHJvZ3Jlc3NTcGFuLmlubmVyVGV4dCA9IGRhdGFJbnRlcnBvbGF0aW9uKHByb2dyZXNzUmVmKTtcblx0XHRcdFx0aWYgKHByb2dyZXNzUmVmIDwgcHJvZ3Jlc3MpIHtcblx0XHRcdFx0XHRyYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVQcm9ncmVzcyk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR1cGRhdGVQcm9ncmVzcygpO1xuXHRcdFx0b25DbGVhbnVwKCgpID0+IGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKSk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|