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.
Files changed (58) hide show
  1. package/cameras/README.md +3 -0
  2. package/cameras/index.d.ts +2 -0
  3. package/cameras/lib/camera-content.d.ts +10 -0
  4. package/cameras/lib/perspective-camera.d.ts +35 -0
  5. package/controls/index.d.ts +1 -1
  6. package/controls/{orbit-controls → lib}/orbit-controls.d.ts +4 -3
  7. package/esm2022/cameras/angular-three-soba-cameras.mjs +5 -0
  8. package/esm2022/cameras/index.mjs +3 -0
  9. package/esm2022/cameras/lib/camera-content.mjs +14 -0
  10. package/esm2022/cameras/lib/perspective-camera.mjs +109 -0
  11. package/esm2022/controls/index.mjs +2 -2
  12. package/esm2022/controls/lib/orbit-controls.mjs +140 -0
  13. package/esm2022/loaders/index.mjs +5 -5
  14. package/esm2022/loaders/lib/gltf-loader.mjs +33 -0
  15. package/esm2022/loaders/lib/loader.mjs +108 -0
  16. package/esm2022/loaders/lib/progress.mjs +51 -0
  17. package/esm2022/loaders/lib/texture-loader.mjs +32 -0
  18. package/esm2022/misc/angular-three-soba-misc.mjs +5 -0
  19. package/esm2022/misc/index.mjs +4 -0
  20. package/esm2022/misc/lib/animations.mjs +74 -0
  21. package/esm2022/misc/lib/content.mjs +14 -0
  22. package/esm2022/misc/lib/deprecated.mjs +15 -0
  23. package/esm2022/misc/lib/fbo.mjs +87 -0
  24. package/esm2022/staging/angular-three-soba-staging.mjs +5 -0
  25. package/esm2022/staging/index.mjs +2 -0
  26. package/esm2022/staging/lib/matcap-texture.mjs +46 -0
  27. package/fesm2022/angular-three-soba-cameras.mjs +127 -0
  28. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -0
  29. package/fesm2022/angular-three-soba-controls.mjs +11 -3
  30. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  31. package/fesm2022/angular-three-soba-loaders.mjs +17 -17
  32. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  33. package/fesm2022/angular-three-soba-misc.mjs +175 -0
  34. package/fesm2022/angular-three-soba-misc.mjs.map +1 -0
  35. package/fesm2022/angular-three-soba-staging.mjs +53 -0
  36. package/fesm2022/angular-three-soba-staging.mjs.map +1 -0
  37. package/loaders/index.d.ts +4 -4
  38. package/loaders/{gltf-loader → lib}/gltf-loader.d.ts +4 -4
  39. package/loaders/{progress → lib}/progress.d.ts +1 -1
  40. package/loaders/{texture-loader → lib}/texture-loader.d.ts +4 -4
  41. package/metadata.json +1 -1
  42. package/misc/README.md +3 -0
  43. package/misc/index.d.ts +3 -0
  44. package/misc/lib/animations.d.ts +14 -0
  45. package/misc/lib/content.d.ts +8 -0
  46. package/misc/lib/deprecated.d.ts +14 -0
  47. package/misc/lib/fbo.d.ts +47 -0
  48. package/package.json +24 -6
  49. package/staging/README.md +3 -0
  50. package/staging/index.d.ts +1 -0
  51. package/staging/lib/matcap-texture.d.ts +11 -0
  52. package/web-types.json +1 -1
  53. package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -132
  54. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -33
  55. package/esm2022/loaders/loader/loader.mjs +0 -108
  56. package/esm2022/loaders/progress/progress.mjs +0 -51
  57. package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -32
  58. /package/loaders/{loader → lib}/loader.d.ts +0 -0
@@ -0,0 +1,3 @@
1
+ # angular-three-soba/cameras
2
+
3
+ Secondary entry point of `angular-three-soba`. It can be used by importing from `angular-three-soba/cameras`.
@@ -0,0 +1,2 @@
1
+ export * from './lib/camera-content';
2
+ export * from './lib/perspective-camera';
@@ -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
+ }
@@ -1 +1 @@
1
- export * from './orbit-controls/orbit-controls';
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 NgtsOrbitControlsState {
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 & NgtsOrbitControlsState;
19
+ 'ngts-orbit-controls': OrbitControls & NgtsOrbitControlsOptions;
20
20
  }
21
21
  }
22
22
  export declare class NgtsOrbitControls {
23
- options: import("@angular/core").InputSignalWithTransform<NgtsOrbitControlsState, "" | Partial<NgtsOrbitControlsState>>;
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 './orbit-controls/orbit-controls';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvY29udHJvbHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29yYml0LWNvbnRyb2xzL29yYml0LWNvbnRyb2xzJztcbiJdfQ==
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JiaXQtY29udHJvbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvY29udHJvbHMvc3JjL2xpYi9vcmJpdC1jb250cm9scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQ04sa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixjQUFjLEVBQ2QsY0FBYyxFQUNkLE9BQU8sR0FJUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFxQjdDLE1BQU0sY0FBYyxHQUFzRDtJQUN6RSxhQUFhLEVBQUUsSUFBSTtJQUNuQixPQUFPLEVBQUUsS0FBSztJQUNkLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFNBQVMsRUFBRSxLQUFLO0NBQ2hCLENBQUM7QUFhRixNQUFNLE9BQU8saUJBQWlCO0lBK0I3QjtRQTlCQSxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN6QyxhQUFhO1lBQ2IsUUFBUTtZQUNSLFNBQVM7WUFDVCxZQUFZO1lBQ1osV0FBVztZQUNYLGVBQWU7U0FDZixDQUFDLENBQUM7UUFDSCxnQkFBVyxHQUFHLEtBQUssQ0FBZ0MsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVuRSxZQUFPLEdBQUcsTUFBTSxFQUFTLENBQUM7UUFDMUIsWUFBTyxHQUFHLE1BQU0sRUFBUyxDQUFDO1FBQzFCLFVBQUssR0FBRyxNQUFN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Q0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3ZELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ3JELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBckhXLGlCQUFpQjtrR0FBakIsaUJBQWlCLHdhQVJuQjs7OztFQUlULDREQUNTLE9BQU87OzJGQUdMLGlCQUFpQjtrQkFYN0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBlZmZlY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpbmplY3ROZ3RTdG9yZSxcblx0bWFrZVBhcmFtZXRlcnMsXG5cdE5ndEFyZ3MsXG5cdE5ndENhbWVyYSxcblx0Tmd0SW5qZWN0ZWRSZWYsXG5cdE5ndFZlY3RvcjMsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQ2FtZXJhLCBFdmVudCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE9yYml0Q29udHJvbHMgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNPcmJpdENvbnRyb2xzT3B0aW9ucyB7XG5cdGNhbWVyYT86IENhbWVyYTtcblx0ZG9tRWxlbWVudD86IEhUTUxFbGVtZW50O1xuXHR0YXJnZXQ/OiBOZ3RWZWN0b3IzO1xuXHRtYWtlRGVmYXVsdDogYm9vbGVhbjtcblx0cmVncmVzczogYm9vbGVhbjtcblx0ZW5hYmxlRGFtcGluZzogYm9vbGVhbjtcblx0a2V5RXZlbnRzOiBib29sZWFuIHwgSFRNTEVsZW1lbnQ7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgdGhyZWUtc3RkbGlifE9yYml0Q29udHJvbHNcblx0XHQgKi9cblx0XHQnbmd0cy1vcmJpdC1jb250cm9scyc6IE9yYml0Q29udHJvbHMgJiBOZ3RzT3JiaXRDb250cm9sc09wdGlvbnM7XG5cdH1cbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8T3JiaXRDb250cm9scz4gJiBOZ3RzT3JiaXRDb250cm9sc09wdGlvbnMgPSB7XG5cdGVuYWJsZURhbXBpbmc6IHRydWUsXG5cdHJlZ3Jlc3M6IGZhbHNlLFxuXHRtYWtlRGVmYXVsdDogZmFsc2UsXG5cdGtleUV2ZW50czogZmFsc2UsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLW9yYml0LWNvbnRyb2xzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZSBuZ3RDb21wb3VuZCAqYXJncz1cImFyZ3MoKVwiIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiIFtlbmFibGVEYW1waW5nXT1cImVuYWJsZURhbXBpbmcoKVwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1wcmltaXRpdmU+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzT3JiaXRDb250cm9scyB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG1ha2VQYXJhbWV0ZXJzKHRoaXMub3B0aW9ucywgW1xuXHRcdCdtYWtlRGVmYXVsdCcsXG5cdFx0J2NhbWVyYScsXG5cdFx0J3JlZ3Jlc3MnLFxuXHRcdCdkb21FbGVtZW50Jyxcblx0XHQna2V5RXZlbnRzJyxcblx0XHQnZW5hYmxlRGFtcGluZycsXG5cdF0pO1xuXHRjb250cm9sc1JlZiA9IGlucHV0PE5ndEluamVjdGVkUmVmPE9yYml0Q29udHJvbHM+PihpbmplY3ROZ3RSZWYoKSk7XG5cblx0Y2hhbmdlZCA9IG91dHB1dDxFdmVudD4oKTtcblx0c3RhcnRlZCA9IG91dHB1dDxFdmVudD4oKTtcblx0ZW5kZWQgPSBvdXRwdXQ8RXZlbnQ+KCk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdHByaXZhdGUgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cdHByaXZhdGUgcGVyZm9ybWFuY2VSZWdyZXNzID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3BlcmZvcm1hbmNlJywgJ3JlZ3Jlc3MnKTtcblx0cHJpdmF0ZSBkZWZhdWx0Q2FtZXJhID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpO1xuXHRwcml2YXRlIGdsRG9tRWxlbWVudCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdnbCcsICdkb21FbGVtZW50Jyk7XG5cblx0cHJpdmF0ZSBjYW1lcmEgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5jYW1lcmEpO1xuXHRwcml2YXRlIHJlZ3Jlc3MgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5yZWdyZXNzKTtcblx0cHJpdmF0ZSBrZXlFdmVudHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5rZXlFdmVudHMpO1xuXHRwcml2YXRlIGRvbUVsZW1lbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5kb21FbGVtZW50KTtcblx0cHJpdmF0ZSBtYWtlRGVmYXVsdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpLm1ha2VEZWZhdWx0KTtcblxuXHRwcm90ZWN0ZWQgYXJncyA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudF0pO1xuXHRwcm90ZWN0ZWQgZW5hYmxlRGFtcGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpLmVuYWJsZURhbXBpbmcpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgY29udHJvbHMgPSB0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdFx0aWYgKGNvbnRyb2xzPy5lbmFibGVkKSB7XG5cdFx0XHRcdFx0Y29udHJvbHMudXBkYXRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IHByaW9yaXR5OiAtMSB9LFxuXHRcdCk7XG5cblx0XHR0aGlzLnNldENvbnRyb2xzKCk7XG5cdFx0dGhpcy5jb25uZWN0RWxlbWVudCgpO1xuXHRcdHRoaXMubWFrZUNvbnRyb2xzRGVmYXVsdCgpO1xuXHRcdHRoaXMuc2V0RXZlbnRzKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldENvbnRyb2xzKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbY2FtZXJhLCBkZWZhdWx0Q2FtZXJhLCBjb250cm9sc1JlZl0gPSBbdGhpcy5jYW1lcmEoKSwgdGhpcy5kZWZhdWx0Q2FtZXJhKCksIHRoaXMuY29udHJvbHNSZWYoKV07XG5cdFx0XHRjb25zdCBjb250cm9sc0NhbWVyYSA9IGNhbWVyYSB8fCBkZWZhdWx0Q2FtZXJhO1xuXHRcdFx0aWYgKCFjb250cm9sc1JlZi5uYXRpdmVFbGVtZW50IHx8IGNvbnRyb2xzUmVmLm5hdGl2ZUVsZW1lbnQub2JqZWN0ICE9PSBjb250cm9sc0NhbWVyYSkge1xuXHRcdFx0XHRjb250cm9sc1JlZi5uYXRpdmVFbGVtZW50ID0gbmV3IE9yYml0Q29udHJvbHMoY29udHJvbHNDYW1lcmEgYXMgTmd0Q2FtZXJhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgY29ubmVjdEVsZW1lbnQoKSB7XG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IFtrZXlFdmVudHMsIGRvbUVsZW1lbnQsIGNvbnRyb2xzXSA9IFtcblx0XHRcdFx0dGhpcy5rZXlFdmVudHMoKSxcblx0XHRcdFx0dGhpcy5kb21FbGVtZW50KCkgfHwgdGhpcy5zdG9yZS5nZXQoJ2V2ZW50cycsICdjb25uZWN0ZWQnKSB8fCB0aGlzLmdsRG9tRWxlbWVudCgpLFxuXHRcdFx0XHR0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdFx0XHRcdHRoaXMucmVncmVzcygpLFxuXHRcdFx0XTtcblx0XHRcdGlmICghY29udHJvbHMpIHJldHVybjtcblx0XHRcdGlmIChrZXlFdmVudHMpIHtcblx0XHRcdFx0Y29udHJvbHMuY29ubmVjdChrZXlFdmVudHMgPT09IHRydWUgPyBkb21FbGVtZW50IDoga2V5RXZlbnRzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRyb2xzLmNvbm5lY3QoZG9tRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4gdm9pZCBjb250cm9scy5kaXNwb3NlKCkpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBtYWtlQ29udHJvbHNEZWZhdWx0KCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbY29udHJvbHMsIG1ha2VEZWZhdWx0XSA9IFt0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudCwgdGhpcy5tYWtlRGVmYXVsdCgpXTtcblx0XHRcdGlmICghY29udHJvbHMpIHJldHVybjtcblx0XHRcdGlmIChtYWtlRGVmYXVsdCkge1xuXHRcdFx0XHRjb25zdCBvbGRDb250cm9scyA9IHRoaXMuc3RvcmUuZ2V0KCdjb250cm9scycpO1xuXHRcdFx0XHR0aGlzLnN0b3JlLnVwZGF0ZSh7IGNvbnRyb2xzIH0pO1xuXHRcdFx0XHRvbkNsZWFudXAoKCkgPT4gdm9pZCB0aGlzLnN0b3JlLnVwZGF0ZSh7IGNvbnRyb2xzOiBvbGRDb250cm9scyB9KSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHNldEV2ZW50cygpIHtcblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgW2NvbnRyb2xzLCBpbnZhbGlkYXRlLCBwZXJmb3JtYW5jZVJlZ3Jlc3MsIHJlZ3Jlc3NdID0gW1xuXHRcdFx0XHR0aGlzLmNvbnRyb2xzUmVmKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdFx0XHRcdHRoaXMucGVyZm9ybWFuY2VSZWdyZXNzKCksXG5cdFx0XHRcdHRoaXMucmVncmVzcygpLFxuXHRcdFx0XTtcblx0XHRcdGlmICghY29udHJvbHMpIHJldHVybjtcblx0XHRcdGNvbnN0IGNoYW5nZUNhbGxiYWNrOiAoZTogRXZlbnQpID0+IHZvaWQgPSAoZSkgPT4ge1xuXHRcdFx0XHRpbnZhbGlkYXRlKCk7XG5cdFx0XHRcdGlmIChyZWdyZXNzKSBwZXJmb3JtYW5jZVJlZ3Jlc3MoKTtcblx0XHRcdFx0dGhpcy5jaGFuZ2VkLmVtaXQoZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBzdGFydENhbGxiYWNrID0gdGhpcy5zdGFydGVkLmVtaXQuYmluZCh0aGlzLnN0YXJ0ZWQpO1xuXHRcdFx0Y29uc3QgZW5kQ2FsbGJhY2sgPSB0aGlzLmVuZGVkLmVtaXQuYmluZCh0aGlzLmVuZGVkKTtcblxuXHRcdFx0Y29udHJvbHMuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgY2hhbmdlQ2FsbGJhY2spO1xuXHRcdFx0Y29udHJvbHMuYWRkRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBzdGFydENhbGxiYWNrKTtcblx0XHRcdGNvbnRyb2xzLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZCcsIGVuZENhbGxiYWNrKTtcblxuXHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0Y29udHJvbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgY2hhbmdlQ2FsbGJhY2spO1xuXHRcdFx0XHRjb250cm9scy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFydCcsIHN0YXJ0Q2FsbGJhY2spO1xuXHRcdFx0XHRjb250cm9scy5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmQnLCBlbmRDYWxsYmFjayk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -1,5 +1,5 @@
1
- export * from './gltf-loader/gltf-loader';
2
- export * from './loader/loader';
3
- export * from './progress/progress';
4
- export * from './texture-loader/texture-loader';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZ2x0Zi1sb2FkZXIvZ2x0Zi1sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkZXIvbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZ3Jlc3MvcHJvZ3Jlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0dXJlLWxvYWRlci90ZXh0dXJlLWxvYWRlcic7XG4iXX0=
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==