angular-three 0.0.0-replace
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/esm2022/angular-three.mjs +5 -0
- package/esm2022/index.mjs +20 -0
- package/esm2022/lib/canvas.mjs +187 -0
- package/esm2022/lib/directives/args.mjs +35 -0
- package/esm2022/lib/directives/common.mjs +42 -0
- package/esm2022/lib/directives/parent.mjs +35 -0
- package/esm2022/lib/dom/events.mjs +73 -0
- package/esm2022/lib/events.mjs +362 -0
- package/esm2022/lib/instance.mjs +70 -0
- package/esm2022/lib/loader.mjs +64 -0
- package/esm2022/lib/loop.mjs +153 -0
- package/esm2022/lib/portal.mjs +208 -0
- package/esm2022/lib/ref.mjs +46 -0
- package/esm2022/lib/renderer/catalogue.mjs +7 -0
- package/esm2022/lib/renderer/constants.mjs +21 -0
- package/esm2022/lib/renderer/index.mjs +432 -0
- package/esm2022/lib/renderer/store.mjs +423 -0
- package/esm2022/lib/renderer/utils.mjs +201 -0
- package/esm2022/lib/roots.mjs +261 -0
- package/esm2022/lib/routed-scene.mjs +33 -0
- package/esm2022/lib/store.mjs +181 -0
- package/esm2022/lib/three-types.mjs +2 -0
- package/esm2022/lib/types.mjs +2 -0
- package/esm2022/lib/utils/apply-props.mjs +123 -0
- package/esm2022/lib/utils/attach.mjs +32 -0
- package/esm2022/lib/utils/before-render.mjs +12 -0
- package/esm2022/lib/utils/create-api-token.mjs +13 -0
- package/esm2022/lib/utils/inputs.mjs +18 -0
- package/esm2022/lib/utils/is.mjs +52 -0
- package/esm2022/lib/utils/make.mjs +53 -0
- package/esm2022/lib/utils/signal-store.mjs +101 -0
- package/esm2022/lib/utils/update.mjs +34 -0
- package/fesm2022/angular-three.mjs +3167 -0
- package/fesm2022/angular-three.mjs.map +1 -0
- package/index.d.ts +22 -0
- package/lib/canvas.d.ts +1170 -0
- package/lib/directives/args.d.ts +11 -0
- package/lib/directives/common.d.ts +26 -0
- package/lib/directives/parent.d.ts +13 -0
- package/lib/dom/events.d.ts +5 -0
- package/lib/events.d.ts +83 -0
- package/lib/instance.d.ts +46 -0
- package/lib/loader.d.ts +32 -0
- package/lib/loop.d.ts +68 -0
- package/lib/portal.d.ts +58 -0
- package/lib/ref.d.ts +7 -0
- package/lib/renderer/catalogue.d.ts +13 -0
- package/lib/renderer/constants.d.ts +20 -0
- package/lib/renderer/index.d.ts +56 -0
- package/lib/renderer/store.d.ts +64 -0
- package/lib/renderer/utils.d.ts +31 -0
- package/lib/roots.d.ts +12 -0
- package/lib/routed-scene.d.ts +10 -0
- package/lib/store.d.ts +141 -0
- package/lib/three-types.d.ts +302 -0
- package/lib/types.d.ts +12 -0
- package/lib/utils/apply-props.d.ts +3 -0
- package/lib/utils/attach.d.ts +11 -0
- package/lib/utils/before-render.d.ts +6 -0
- package/lib/utils/create-api-token.d.ts +23 -0
- package/lib/utils/inputs.d.ts +5 -0
- package/lib/utils/is.d.ts +23 -0
- package/lib/utils/make.d.ts +19 -0
- package/lib/utils/signal-store.d.ts +30 -0
- package/lib/utils/update.d.ts +4 -0
- package/metadata.json +1 -0
- package/package.json +73 -0
- package/plugin/README.md +11 -0
- package/plugin/generators.json +17 -0
- package/plugin/src/generators/init/compat.d.ts +2 -0
- package/plugin/src/generators/init/compat.js +6 -0
- package/plugin/src/generators/init/compat.js.map +1 -0
- package/plugin/src/generators/init/files/experience/experience.component.html__tmpl__ +4 -0
- package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +18 -0
- package/plugin/src/generators/init/generator.d.ts +3 -0
- package/plugin/src/generators/init/generator.js +143 -0
- package/plugin/src/generators/init/generator.js.map +1 -0
- package/plugin/src/generators/init/schema.json +6 -0
- package/plugin/src/generators/utils.d.ts +2 -0
- package/plugin/src/generators/utils.js +34 -0
- package/plugin/src/generators/utils.js.map +1 -0
- package/plugin/src/generators/version.d.ts +14 -0
- package/plugin/src/generators/version.js +18 -0
- package/plugin/src/generators/version.js.map +1 -0
- package/plugin/src/index.d.ts +0 -0
- package/plugin/src/index.js +1 -0
- package/plugin/src/index.js.map +1 -0
- package/web-types.json +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvYW5ndWxhci10aHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export * from './lib/canvas';
|
|
2
|
+
export * from './lib/directives/args';
|
|
3
|
+
export * from './lib/instance';
|
|
4
|
+
export * from './lib/loader';
|
|
5
|
+
export { addAfterEffect, addEffect, addTail } from './lib/loop';
|
|
6
|
+
export { NgtPortal, NgtPortalContent } from './lib/portal';
|
|
7
|
+
export * from './lib/ref';
|
|
8
|
+
export * from './lib/renderer';
|
|
9
|
+
export * from './lib/routed-scene';
|
|
10
|
+
export * from './lib/store';
|
|
11
|
+
export * from './lib/utils/apply-props';
|
|
12
|
+
export { createAttachFunction } from './lib/utils/attach';
|
|
13
|
+
export * from './lib/utils/before-render';
|
|
14
|
+
export * from './lib/utils/create-api-token';
|
|
15
|
+
export * from './lib/utils/inputs';
|
|
16
|
+
export * from './lib/utils/is';
|
|
17
|
+
export * from './lib/utils/make';
|
|
18
|
+
export * from './lib/utils/signal-store';
|
|
19
|
+
export * from './lib/utils/update';
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRCxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY2FudmFzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvYXJncyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnN0YW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2FkZXInO1xuZXhwb3J0IHsgYWRkQWZ0ZXJFZmZlY3QsIGFkZEVmZmVjdCwgYWRkVGFpbCB9IGZyb20gJy4vbGliL2xvb3AnO1xuZXhwb3J0IHsgTmd0UG9ydGFsLCBOZ3RQb3J0YWxDb250ZW50IH0gZnJvbSAnLi9saWIvcG9ydGFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlZic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZW5kZXJlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZWQtc2NlbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYXBwbHktcHJvcHMnO1xuZXhwb3J0IHsgY3JlYXRlQXR0YWNoRnVuY3Rpb24gfSBmcm9tICcuL2xpYi91dGlscy9hdHRhY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYmVmb3JlLXJlbmRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jcmVhdGUtYXBpLXRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2lucHV0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9pcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9tYWtlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy91cGRhdGUnO1xuXG5leHBvcnQgdHlwZSB7IE5ndENhbWVyYSwgTmd0VGhyZWVFdmVudCB9IGZyb20gJy4vbGliL2V2ZW50cyc7XG5leHBvcnQgdHlwZSAqIGZyb20gJy4vbGliL3RocmVlLXR5cGVzJztcbmV4cG9ydCB0eXBlICogZnJvbSAnLi9saWIvdHlwZXMnO1xuIl19
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, EnvironmentInjector, Injector, NgZone, ViewContainerRef, afterNextRender, booleanAttribute, computed, createEnvironmentInjector, inject, input, output, signal, untracked, viewChild, } from '@angular/core';
|
|
2
|
+
import { outputFromObservable } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
4
|
+
import { NgxResize, provideResizeOptions } from 'ngxtension/resize';
|
|
5
|
+
import * as THREE from 'three';
|
|
6
|
+
import { createPointerEvents } from './dom/events';
|
|
7
|
+
import { provideNgtRenderer } from './renderer';
|
|
8
|
+
import { injectCanvasRootInitializer } from './roots';
|
|
9
|
+
import { injectNgtStore, provideNgtStore, } from './store';
|
|
10
|
+
import { is } from './utils/is';
|
|
11
|
+
import {} from './utils/signal-store';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export class NgtCanvas {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.store = injectNgtStore();
|
|
16
|
+
this.initRoot = injectCanvasRootInitializer();
|
|
17
|
+
this.autoEffect = injectAutoEffect();
|
|
18
|
+
this.host = inject(ElementRef);
|
|
19
|
+
this.zone = inject(NgZone);
|
|
20
|
+
this.environmentInjector = inject(EnvironmentInjector);
|
|
21
|
+
this.injector = inject(Injector);
|
|
22
|
+
this.sceneGraph = input.required();
|
|
23
|
+
this.compoundPrefixes = input([]);
|
|
24
|
+
this.sceneGraphInputs = input({});
|
|
25
|
+
this.gl = input();
|
|
26
|
+
this.size = input();
|
|
27
|
+
this.shadows = input(false, {
|
|
28
|
+
transform: (value) => {
|
|
29
|
+
if (value === '') {
|
|
30
|
+
return booleanAttribute(value);
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
this.legacy = input(false, { transform: booleanAttribute });
|
|
36
|
+
this.linear = input(false, { transform: booleanAttribute });
|
|
37
|
+
this.flat = input(false, { transform: booleanAttribute });
|
|
38
|
+
this.orthographic = input(false, { transform: booleanAttribute });
|
|
39
|
+
this.frameloop = input('always');
|
|
40
|
+
this.performance = input();
|
|
41
|
+
this.dpr = input([1, 2]);
|
|
42
|
+
this.raycaster = input();
|
|
43
|
+
this.scene = input();
|
|
44
|
+
this.camera = input();
|
|
45
|
+
this.events = input(createPointerEvents);
|
|
46
|
+
this.eventSource = input();
|
|
47
|
+
this.eventPrefix = input('offset');
|
|
48
|
+
this.lookAt = input();
|
|
49
|
+
this.created = output();
|
|
50
|
+
this.pointerMissed = outputFromObservable(this.store.get('pointerMissed$'));
|
|
51
|
+
this.glCanvas = viewChild.required('glCanvas');
|
|
52
|
+
this.glCanvasViewContainerRef = viewChild.required('glCanvas', { read: ViewContainerRef });
|
|
53
|
+
// NOTE: this signal is updated outside of Zone
|
|
54
|
+
this.resizeResult = signal({}, { equal: Object.is });
|
|
55
|
+
this.hbPointerEvents = computed(() => (this.eventSource() ? 'none' : 'auto'));
|
|
56
|
+
afterNextRender(() => {
|
|
57
|
+
this.zone.runOutsideAngular(() => {
|
|
58
|
+
this.configurator = this.initRoot(this.glCanvas().nativeElement);
|
|
59
|
+
this.noZoneResizeEffect();
|
|
60
|
+
this.noZoneSceneGraphInputsEffect();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
inject(DestroyRef).onDestroy(() => {
|
|
64
|
+
this.glRef?.destroy();
|
|
65
|
+
this.glEnvironmentInjector?.destroy();
|
|
66
|
+
this.configurator?.destroy();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
noZoneResizeEffect() {
|
|
70
|
+
this.autoEffect(() => {
|
|
71
|
+
const resizeResult = this.resizeResult();
|
|
72
|
+
if (resizeResult.width > 0 && resizeResult.height > 0) {
|
|
73
|
+
if (!this.configurator)
|
|
74
|
+
this.configurator = this.initRoot(this.glCanvas().nativeElement);
|
|
75
|
+
this.configurator.configure({
|
|
76
|
+
gl: this.gl(),
|
|
77
|
+
shadows: this.shadows(),
|
|
78
|
+
legacy: this.legacy(),
|
|
79
|
+
linear: this.linear(),
|
|
80
|
+
flat: this.flat(),
|
|
81
|
+
orthographic: this.orthographic(),
|
|
82
|
+
frameloop: this.frameloop(),
|
|
83
|
+
performance: this.performance(),
|
|
84
|
+
dpr: this.dpr(),
|
|
85
|
+
raycaster: this.raycaster(),
|
|
86
|
+
scene: this.scene(),
|
|
87
|
+
camera: this.camera(),
|
|
88
|
+
events: this.events(),
|
|
89
|
+
eventSource: this.eventSource(),
|
|
90
|
+
eventPrefix: this.eventPrefix(),
|
|
91
|
+
lookAt: this.lookAt(),
|
|
92
|
+
size: resizeResult,
|
|
93
|
+
});
|
|
94
|
+
untracked(() => {
|
|
95
|
+
if (this.glRef) {
|
|
96
|
+
this.glRef.changeDetectorRef.detectChanges();
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
this.noZoneRender();
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
noZoneRender() {
|
|
106
|
+
// NOTE: destroy previous instances if existed
|
|
107
|
+
this.glEnvironmentInjector?.destroy();
|
|
108
|
+
this.glRef?.destroy();
|
|
109
|
+
// NOTE: Flag the canvas active, rendering will now begin
|
|
110
|
+
this.store.update((state) => ({ internal: { ...state.internal, active: true } }));
|
|
111
|
+
const [state, eventSource, eventPrefix] = [
|
|
112
|
+
this.store.snapshot,
|
|
113
|
+
untracked(this.eventSource),
|
|
114
|
+
untracked(this.eventPrefix),
|
|
115
|
+
];
|
|
116
|
+
// connect to event source
|
|
117
|
+
state.events.connect?.(eventSource ? (is.ref(eventSource) ? eventSource.nativeElement : eventSource) : this.host.nativeElement);
|
|
118
|
+
// setup compute for eventPrefix
|
|
119
|
+
if (eventPrefix) {
|
|
120
|
+
state.setEvents({
|
|
121
|
+
compute: (event, store) => {
|
|
122
|
+
const { pointer, raycaster, camera, size } = store.snapshot;
|
|
123
|
+
const x = event[(eventPrefix + 'X')];
|
|
124
|
+
const y = event[(eventPrefix + 'Y')];
|
|
125
|
+
pointer.set((x / size.width) * 2 - 1, -(y / size.height) * 2 + 1);
|
|
126
|
+
raycaster.setFromCamera(pointer, camera);
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// emit created event if observed
|
|
131
|
+
this.created.emit(this.store.snapshot);
|
|
132
|
+
if (!this.store.get('events', 'connected')) {
|
|
133
|
+
this.store.get('events').connect?.(this.glCanvas().nativeElement);
|
|
134
|
+
}
|
|
135
|
+
this.glEnvironmentInjector = createEnvironmentInjector([provideNgtRenderer(this.store, untracked(this.compoundPrefixes))], this.environmentInjector);
|
|
136
|
+
this.glRef = untracked(this.glCanvasViewContainerRef).createComponent(untracked(this.sceneGraph), {
|
|
137
|
+
environmentInjector: this.glEnvironmentInjector,
|
|
138
|
+
injector: this.injector,
|
|
139
|
+
});
|
|
140
|
+
this.glRef.changeDetectorRef.detectChanges();
|
|
141
|
+
this.setSceneGraphInputs(untracked(this.sceneGraphInputs));
|
|
142
|
+
}
|
|
143
|
+
noZoneSceneGraphInputsEffect() {
|
|
144
|
+
this.autoEffect(() => {
|
|
145
|
+
this.setSceneGraphInputs(this.sceneGraphInputs());
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
setSceneGraphInputs(sceneGraphInputs) {
|
|
149
|
+
if (this.glRef) {
|
|
150
|
+
for (const [key, value] of Object.entries(sceneGraphInputs)) {
|
|
151
|
+
this.glRef.setInput(key, value);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
156
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.0", type: NgtCanvas, isStandalone: true, selector: "ngt-canvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null }, compoundPrefixes: { classPropertyName: "compoundPrefixes", publicName: "compoundPrefixes", isSignal: true, isRequired: false, transformFunction: null }, sceneGraphInputs: { classPropertyName: "sceneGraphInputs", publicName: "sceneGraphInputs", isSignal: true, isRequired: false, transformFunction: null }, gl: { classPropertyName: "gl", publicName: "gl", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shadows: { classPropertyName: "shadows", publicName: "shadows", isSignal: true, isRequired: false, transformFunction: null }, legacy: { classPropertyName: "legacy", publicName: "legacy", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, flat: { classPropertyName: "flat", publicName: "flat", isSignal: true, isRequired: false, transformFunction: null }, orthographic: { classPropertyName: "orthographic", publicName: "orthographic", isSignal: true, isRequired: false, transformFunction: null }, frameloop: { classPropertyName: "frameloop", publicName: "frameloop", isSignal: true, isRequired: false, transformFunction: null }, performance: { classPropertyName: "performance", publicName: "performance", isSignal: true, isRequired: false, transformFunction: null }, dpr: { classPropertyName: "dpr", publicName: "dpr", isSignal: true, isRequired: false, transformFunction: null }, raycaster: { classPropertyName: "raycaster", publicName: "raycaster", isSignal: true, isRequired: false, transformFunction: null }, scene: { classPropertyName: "scene", publicName: "scene", isSignal: true, isRequired: false, transformFunction: null }, camera: { classPropertyName: "camera", publicName: "camera", isSignal: true, isRequired: false, transformFunction: null }, events: { classPropertyName: "events", publicName: "events", isSignal: true, isRequired: false, transformFunction: null }, eventSource: { classPropertyName: "eventSource", publicName: "eventSource", isSignal: true, isRequired: false, transformFunction: null }, eventPrefix: { classPropertyName: "eventPrefix", publicName: "eventPrefix", isSignal: true, isRequired: false, transformFunction: null }, lookAt: { classPropertyName: "lookAt", publicName: "lookAt", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { created: "created", pointerMissed: "pointerMissed" }, host: { properties: { "style.pointerEvents": "hbPointerEvents()" }, styleAttribute: "display: block;position: relative;width: 100%;height: 100%;overflow: hidden;" }, providers: [
|
|
157
|
+
provideResizeOptions({ emitInZone: false, emitInitialResult: true, debounce: 250 }),
|
|
158
|
+
provideNgtStore(),
|
|
159
|
+
], viewQueries: [{ propertyName: "glCanvas", first: true, predicate: ["glCanvas"], descendants: true, isSignal: true }, { propertyName: "glCanvasViewContainerRef", first: true, predicate: ["glCanvas"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
|
|
160
|
+
<div (ngxResize)="resizeResult.set($event)" style="height: 100%; width: 100%;">
|
|
161
|
+
<canvas #glCanvas style="display: block;"></canvas>
|
|
162
|
+
</div>
|
|
163
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgxResize, selector: "[ngxResize]", inputs: ["ngxResizeOptions"], outputs: ["ngxResize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
164
|
+
}
|
|
165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtCanvas, decorators: [{
|
|
166
|
+
type: Component,
|
|
167
|
+
args: [{
|
|
168
|
+
selector: 'ngt-canvas',
|
|
169
|
+
standalone: true,
|
|
170
|
+
template: `
|
|
171
|
+
<div (ngxResize)="resizeResult.set($event)" style="height: 100%; width: 100%;">
|
|
172
|
+
<canvas #glCanvas style="display: block;"></canvas>
|
|
173
|
+
</div>
|
|
174
|
+
`,
|
|
175
|
+
imports: [NgxResize],
|
|
176
|
+
providers: [
|
|
177
|
+
provideResizeOptions({ emitInZone: false, emitInitialResult: true, debounce: 250 }),
|
|
178
|
+
provideNgtStore(),
|
|
179
|
+
],
|
|
180
|
+
host: {
|
|
181
|
+
style: 'display: block;position: relative;width: 100%;height: 100%;overflow: hidden;',
|
|
182
|
+
'[style.pointerEvents]': 'hbPointerEvents()',
|
|
183
|
+
},
|
|
184
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
185
|
+
}]
|
|
186
|
+
}], ctorParameters: () => [] });
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FudmFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFFBQVEsRUFDUixNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLHlCQUF5QixFQUN6QixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUF5QyxNQUFNLG1CQUFtQixDQUFDO0FBQzNHLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEQsT0FBTyxFQUFFLDJCQUEyQixFQUFxRCxNQUFNLFNBQVMsQ0FBQztBQUN6RyxPQUFPLEVBQ04sY0FBYyxFQUNkLGVBQWUsR0FNZixNQUFNLFNBQVMsQ0FBQztBQUdqQixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBdUIsTUFBTSxzQkFBc0IsQ0FBQzs7QUF1RjNELE1BQU0sT0FBTyxTQUFTO0lBc0RyQjtRQXJEUSxVQUFLLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDekIsYUFBUSxHQUFHLDJCQUEyQixFQUFFLENBQUM7UUFDekMsZUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFFaEMsU0FBSSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDbkQsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0Qix3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFhLENBQUM7UUFDekMscUJBQWdCLEdBQUcsS0FBSyxDQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLHFCQUFnQixHQUFHLEtBQUssQ0FBZSxFQUFFLENBQUMsQ0FBQztRQUMzQyxPQUFFLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBQzNCLFNBQUksR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUN4QixZQUFPLEdBQUcsS0FBSyxDQUEwRCxLQUFLLEVBQUU7WUFDL0UsU0FBUyxFQUFFLENBQUMsS0FBYyxFQUFFLEVBQUU7Z0JBQzdCLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUNsQixPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO2dCQUVELE9BQU8sS0FBdUQsQ0FBQztZQUNoRSxDQUFDO1NBQ0QsQ0FBQyxDQUFDO1FBQ0gsV0FBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELFdBQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUN2RCxTQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDckQsaUJBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUM3RCxjQUFTLEdBQUcsS0FBSyxDQUErQixRQUFRLENBQUMsQ0FBQztRQUMxRCxnQkFBVyxHQUFHLEtBQUssRUFBa0MsQ0FBQztRQUN0RCxRQUFHLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsY0FBUyxHQUFHLEtBQUssRUFBZ0MsQ0FBQztRQUNsRCxVQUFLLEdBQUcsS0FBSyxFQUE0QixDQUFDO1FBQzFDLFdBQU0sR0FBRyxLQUFLLEVBQTZCLENBQUM7UUFDNUMsV0FBTSxHQUFHLEtBQUssQ0FBNEIsbUJBQW1CLENBQUMsQ0FBQztRQUMvRCxnQkFBVyxHQUFHLEtBQUssRUFBa0MsQ0FBQztRQUN0RCxnQkFBVyxHQUFHLEtBQUssQ0FBaUMsUUFBUSxDQUFDLENBQUM7UUFDOUQsV0FBTSxHQUFHLEtBQUssRUFBNkIsQ0FBQztRQUU1QyxZQUFPLEdBQUcsTUFBTSxFQUFZLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFFdkUsYUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWdDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pFLDZCQUF3QixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUV0RiwrQ0FBK0M7UUFDckMsaUJBQVksR0FBRyxNQUFNLENBQWUsRUFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU5RSxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBT2xGLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxrQkFBa0I7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLElBQUksWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO29CQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3pGLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO29CQUMzQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtvQkFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDakIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ2pDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUMzQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDL0IsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUMvQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3JCLElBQUksRUFBRSxZQUFZO2lCQUNsQixDQUFDLENBQUM7Z0JBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDOUMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNQLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDckIsQ0FBQztnQkFDRixDQUFDLENBQUMsQ0FBQztZQUNKLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZO1FBQ25CLDhDQUE4QztRQUM5QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV0Qix5REFBeUQ7UUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWxGLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHO1lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUMzQixDQUFDO1FBRUYsMEJBQTBCO1FBQzFCLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQ3JCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3ZHLENBQUM7UUFFRixnQ0FBZ0M7UUFDaEMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUNmLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDekIsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQzVELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQXNCLENBQVcsQ0FBQztvQkFDcEUsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBc0IsQ0FBVyxDQUFDO29CQUNwRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbEUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzFDLENBQUM7YUFDRCxDQUFDLENBQUM7UUFDSixDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHlCQUF5QixDQUNyRCxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFDbEUsSUFBSSxDQUFDLG1CQUFtQixDQUN4QixDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDakcsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUMvQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLDRCQUE0QjtRQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxnQkFBOEI7UUFDekQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDOzhHQTFLVyxTQUFTO2tHQUFULFNBQVMsK3pGQVZWO1lBQ1Ysb0JBQW9CLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFtQixDQUFDO1lBQ3BHLGVBQWUsRUFBRTtTQUNqQixrT0FrRGlFLGdCQUFnQiw2Q0EzRHhFOzs7O0VBSVQsNERBQ1MsU0FBUzs7MkZBV1AsU0FBUztrQkFuQnJCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ3BCLFNBQVMsRUFBRTt3QkFDVixvQkFBb0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQW1CLENBQUM7d0JBQ3BHLGVBQWUsRUFBRTtxQkFDakI7b0JBQ0QsSUFBSSxFQUFFO3dCQUNMLEtBQUssRUFBRSw4RUFBOEU7d0JBQ3JGLHVCQUF1QixFQUFFLG1CQUFtQjtxQkFDNUM7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RGVzdHJveVJlZixcblx0RWxlbWVudFJlZixcblx0RW52aXJvbm1lbnRJbmplY3Rvcixcblx0SW5qZWN0b3IsXG5cdE5nWm9uZSxcblx0Vmlld0NvbnRhaW5lclJlZixcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRib29sZWFuQXR0cmlidXRlLFxuXHRjb21wdXRlZCxcblx0Y3JlYXRlRW52aXJvbm1lbnRJbmplY3Rvcixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0b3V0cHV0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcblx0dmlld0NoaWxkLFxuXHR0eXBlIENvbXBvbmVudFJlZixcblx0dHlwZSBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgTmd4UmVzaXplLCBwcm92aWRlUmVzaXplT3B0aW9ucywgdHlwZSBSZXNpemVPcHRpb25zLCB0eXBlIFJlc2l6ZVJlc3VsdCB9IGZyb20gJ25neHRlbnNpb24vcmVzaXplJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGNyZWF0ZVBvaW50ZXJFdmVudHMgfSBmcm9tICcuL2RvbS9ldmVudHMnO1xuaW1wb3J0IHR5cGUgeyBOZ3RDYW1lcmEsIE5ndERvbUV2ZW50LCBOZ3RFdmVudE1hbmFnZXIgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgeyBwcm92aWRlTmd0UmVuZGVyZXIgfSBmcm9tICcuL3JlbmRlcmVyJztcbmltcG9ydCB7IGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplciwgdHlwZSBOZ3RDYW52YXNDb25maWd1cmF0b3IsIHR5cGUgTmd0Q2FudmFzRWxlbWVudCB9IGZyb20gJy4vcm9vdHMnO1xuaW1wb3J0IHtcblx0aW5qZWN0Tmd0U3RvcmUsXG5cdHByb3ZpZGVOZ3RTdG9yZSxcblx0dHlwZSBOZ3REcHIsXG5cdHR5cGUgTmd0UGVyZm9ybWFuY2UsXG5cdHR5cGUgTmd0UmVuZGVyZXJMaWtlLFxuXHR0eXBlIE5ndFNpemUsXG5cdHR5cGUgTmd0U3RhdGUsXG59IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RPYmplY3QzRE5vZGUgfSBmcm9tICcuL3RocmVlLXR5cGVzJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkLCBOZ3RQcm9wZXJ0aWVzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgdHlwZSBOZ3RTaWduYWxTdG9yZSB9IGZyb20gJy4vdXRpbHMvc2lnbmFsLXN0b3JlJztcblxuZXhwb3J0IHR5cGUgTmd0R0xPcHRpb25zID1cblx0fCBOZ3RSZW5kZXJlckxpa2Vcblx0fCAoKGNhbnZhczogTmd0Q2FudmFzRWxlbWVudCkgPT4gTmd0UmVuZGVyZXJMaWtlKVxuXHR8IFBhcnRpYWw8Tmd0UHJvcGVydGllczxUSFJFRS5XZWJHTFJlbmRlcmVyPiB8IFRIUkVFLldlYkdMUmVuZGVyZXJQYXJhbWV0ZXJzPlxuXHR8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgTmd0Q2FudmFzSW5wdXRzID0ge1xuXHQvKiogQSB0aHJlZWpzIHJlbmRlcmVyIGluc3RhbmNlIG9yIHByb3BzIHRoYXQgZ28gaW50byB0aGUgZGVmYXVsdCByZW5kZXJlciAqL1xuXHRnbD86IE5ndEdMT3B0aW9ucztcblx0LyoqIERpbWVuc2lvbnMgdG8gZml0IHRoZSByZW5kZXJlciB0by4gV2lsbCBtZWFzdXJlIGNhbnZhcyBkaW1lbnNpb25zIGlmIG9taXR0ZWQgKi9cblx0c2l6ZT86IE5ndFNpemU7XG5cdC8qKlxuXHQgKiBFbmFibGVzIHNoYWRvd3MgKGJ5IGRlZmF1bHQgUENGc29mdCkuIENhbiBhY2NlcHQgYGdsLnNoYWRvd01hcGAgb3B0aW9ucyBmb3IgZmluZS10dW5pbmcsXG5cdCAqIGJ1dCBhbHNvIHN0cmluZ3M6ICdiYXNpYycgfCAncGVyY2VudGFnZScgfCAnc29mdCcgfCAndmFyaWFuY2UnLlxuXHQgKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL3JlbmRlcmVycy9XZWJHTFJlbmRlcmVyLnNoYWRvd01hcFxuXHQgKi9cblx0c2hhZG93cz86IGJvb2xlYW4gfCAnYmFzaWMnIHwgJ3BlcmNlbnRhZ2UnIHwgJ3NvZnQnIHwgJ3ZhcmlhbmNlJyB8IFBhcnRpYWw8VEhSRUUuV2ViR0xTaGFkb3dNYXA+O1xuXHQvKipcblx0ICogRGlzYWJsZXMgdGhyZWUgcjEzOSBjb2xvciBtYW5hZ2VtZW50LlxuXHQgKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jbWFudWFsL2VuL2ludHJvZHVjdGlvbi9Db2xvci1tYW5hZ2VtZW50XG5cdCAqL1xuXHRsZWdhY3k/OiBib29sZWFuO1xuXHQvKiogU3dpdGNoIG9mZiBhdXRvbWF0aWMgc1JHQiBjb2xvciBzcGFjZSBhbmQgZ2FtbWEgY29ycmVjdGlvbiAqL1xuXHRsaW5lYXI/OiBib29sZWFuO1xuXHQvKiogVXNlIGBUSFJFRS5Ob1RvbmVNYXBwaW5nYCBpbnN0ZWFkIG9mIGBUSFJFRS5BQ0VTRmlsbWljVG9uZU1hcHBpbmdgICovXG5cdGZsYXQ/OiBib29sZWFuO1xuXHQvKiogQ3JlYXRlcyBhbiBvcnRob2dyYXBoaWMgY2FtZXJhICovXG5cdG9ydGhvZ3JhcGhpYz86IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBSM0YncyByZW5kZXIgbW9kZS4gU2V0IHRvIGBkZW1hbmRgIHRvIG9ubHkgcmVuZGVyIG9uIHN0YXRlIGNoYW5nZSBvciBgbmV2ZXJgIHRvIHRha2UgY29udHJvbC5cblx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hZHZhbmNlZC9zY2FsaW5nLXBlcmZvcm1hbmNlI29uLWRlbWFuZC1yZW5kZXJpbmdcblx0ICovXG5cdGZyYW1lbG9vcD86ICdhbHdheXMnIHwgJ2RlbWFuZCcgfCAnbmV2ZXInO1xuXHQvKipcblx0ICogUjNGIHBlcmZvcm1hbmNlIG9wdGlvbnMgZm9yIGFkYXB0aXZlIHBlcmZvcm1hbmNlLlxuXHQgKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FkdmFuY2VkL3NjYWxpbmctcGVyZm9ybWFuY2UjbW92ZW1lbnQtcmVncmVzc2lvblxuXHQgKi9cblx0cGVyZm9ybWFuY2U/OiBQYXJ0aWFsPE9taXQ8Tmd0UGVyZm9ybWFuY2UsICdyZWdyZXNzJz4+O1xuXHQvKiogVGFyZ2V0IHBpeGVsIHJhdGlvLiBDYW4gY2xhbXAgYmV0d2VlbiBhIHJhbmdlOiBgW21pbiwgbWF4XWAgKi9cblx0ZHByPzogTmd0RHByO1xuXHQvKiogUHJvcHMgdGhhdCBnbyBpbnRvIHRoZSBkZWZhdWx0IHJheWNhc3RlciAqL1xuXHRyYXljYXN0ZXI/OiBQYXJ0aWFsPFRIUkVFLlJheWNhc3Rlcj47XG5cdC8qKiBBIGBUSFJFRS5TY2VuZWAgaW5zdGFuY2Ugb3IgcHJvcHMgdGhhdCBnbyBpbnRvIHRoZSBkZWZhdWx0IHNjZW5lICovXG5cdHNjZW5lPzogVEhSRUUuU2NlbmUgfCBQYXJ0aWFsPFRIUkVFLlNjZW5lPjtcblx0LyoqIEEgYENhbWVyYWAgaW5zdGFuY2Ugb3IgcHJvcHMgdGhhdCBnbyBpbnRvIHRoZSBkZWZhdWx0IGNhbWVyYSAqL1xuXHRjYW1lcmE/OiAoXG5cdFx0fCBOZ3RDYW1lcmFcblx0XHR8IFBhcnRpYWw8XG5cdFx0XHRcdE5ndE9iamVjdDNETm9kZTxUSFJFRS5DYW1lcmEsIHR5cGVvZiBUSFJFRS5DYW1lcmE+ICZcblx0XHRcdFx0XHROZ3RPYmplY3QzRE5vZGU8VEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEsIHR5cGVvZiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYT4gJlxuXHRcdFx0XHRcdE5ndE9iamVjdDNETm9kZTxUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEsIHR5cGVvZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmE+XG5cdFx0ICA+XG5cdCkgJiB7XG5cdFx0LyoqIEZsYWdzIHRoZSBjYW1lcmEgYXMgbWFudWFsLCBwdXR0aW5nIHByb2plY3Rpb24gaW50byB5b3VyIG93biBoYW5kcyAqL1xuXHRcdG1hbnVhbD86IGJvb2xlYW47XG5cdH07XG5cdC8qKiBBbiBSM0YgZXZlbnQgbWFuYWdlciB0byBtYW5hZ2UgZWxlbWVudHMnIHBvaW50ZXIgZXZlbnRzICovXG5cdGV2ZW50cz86IChzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+KSA9PiBOZ3RFdmVudE1hbmFnZXI8SFRNTEVsZW1lbnQ+O1xuXHQvKiogVGhlIHRhcmdldCB3aGVyZSBldmVudHMgYXJlIGJlaW5nIHN1YnNjcmliZWQgdG8sIGRlZmF1bHQ6IHRoZSBkaXYgdGhhdCB3cmFwcyBjYW52YXMgKi9cblx0ZXZlbnRTb3VyY2U/OiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXHQvKiogVGhlIGV2ZW50IHByZWZpeCB0aGF0IGlzIGNhc3QgaW50byBjYW52YXMgcG9pbnRlciB4L3kgZXZlbnRzLCBkZWZhdWx0OiBcIm9mZnNldFwiICovXG5cdGV2ZW50UHJlZml4PzogJ29mZnNldCcgfCAnY2xpZW50JyB8ICdwYWdlJyB8ICdsYXllcicgfCAnc2NyZWVuJztcblx0LyoqIERlZmF1bHQgY29vcmRpbmF0ZSBmb3IgdGhlIGNhbWVyYSB0byBsb29rIGF0ICovXG5cdGxvb2tBdD86IFRIUkVFLlZlY3RvcjMgfCBQYXJhbWV0ZXJzPFRIUkVFLlZlY3RvcjNbJ3NldCddPjtcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndC1jYW52YXMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxkaXYgKG5neFJlc2l6ZSk9XCJyZXNpemVSZXN1bHQuc2V0KCRldmVudClcIiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7XCI+XG5cdFx0XHQ8Y2FudmFzICNnbENhbnZhcyBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPjwvY2FudmFzPlxuXHRcdDwvZGl2PlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd4UmVzaXplXSxcblx0cHJvdmlkZXJzOiBbXG5cdFx0cHJvdmlkZVJlc2l6ZU9wdGlvbnMoeyBlbWl0SW5ab25lOiBmYWxzZSwgZW1pdEluaXRpYWxSZXN1bHQ6IHRydWUsIGRlYm91bmNlOiAyNTAgfSBhcyBSZXNpemVPcHRpb25zKSxcblx0XHRwcm92aWRlTmd0U3RvcmUoKSxcblx0XSxcblx0aG9zdDoge1xuXHRcdHN0eWxlOiAnZGlzcGxheTogYmxvY2s7cG9zaXRpb246IHJlbGF0aXZlO3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTtvdmVyZmxvdzogaGlkZGVuOycsXG5cdFx0J1tzdHlsZS5wb2ludGVyRXZlbnRzXSc6ICdoYlBvaW50ZXJFdmVudHMoKScsXG5cdH0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RDYW52YXMge1xuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJpdmF0ZSBpbml0Um9vdCA9IGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplcigpO1xuXHRwcml2YXRlIGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cblx0cHJpdmF0ZSBob3N0ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblx0cHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdHByaXZhdGUgZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcblx0cHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0c2NlbmVHcmFwaCA9IGlucHV0LnJlcXVpcmVkPFR5cGU8YW55Pj4oKTtcblx0Y29tcG91bmRQcmVmaXhlcyA9IGlucHV0PHN0cmluZ1tdPihbXSk7XG5cdHNjZW5lR3JhcGhJbnB1dHMgPSBpbnB1dDxOZ3RBbnlSZWNvcmQ+KHt9KTtcblx0Z2wgPSBpbnB1dDxOZ3RHTE9wdGlvbnM+KCk7XG5cdHNpemUgPSBpbnB1dDxOZ3RTaXplPigpO1xuXHRzaGFkb3dzID0gaW5wdXQ8RXhjbHVkZTxOZ3RDYW52YXNJbnB1dHNbJ3NoYWRvd3MnXSwgdW5kZWZpbmVkPiwgdW5rbm93bj4oZmFsc2UsIHtcblx0XHR0cmFuc2Zvcm06ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuXHRcdFx0aWYgKHZhbHVlID09PSAnJykge1xuXHRcdFx0XHRyZXR1cm4gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSBhcyBFeGNsdWRlPE5ndENhbnZhc0lucHV0c1snc2hhZG93cyddLCB1bmRlZmluZWQ+O1xuXHRcdH0sXG5cdH0pO1xuXHRsZWdhY3kgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cdGxpbmVhciA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblx0ZmxhdCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblx0b3J0aG9ncmFwaGljID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXHRmcmFtZWxvb3AgPSBpbnB1dDxOZ3RDYW52YXNJbnB1dHNbJ2ZyYW1lbG9vcCddPignYWx3YXlzJyk7XG5cdHBlcmZvcm1hbmNlID0gaW5wdXQ8Tmd0Q2FudmFzSW5wdXRzWydwZXJmb3JtYW5jZSddPigpO1xuXHRkcHIgPSBpbnB1dDxOZ3REcHI+KFsxLCAyXSk7XG5cdHJheWNhc3RlciA9IGlucHV0PE5ndENhbnZhc0lucHV0c1sncmF5Y2FzdGVyJ10+KCk7XG5cdHNjZW5lID0gaW5wdXQ8Tmd0Q2FudmFzSW5wdXRzWydzY2VuZSddPigpO1xuXHRjYW1lcmEgPSBpbnB1dDxOZ3RDYW52YXNJbnB1dHNbJ2NhbWVyYSddPigpO1xuXHRldmVudHMgPSBpbnB1dDxOZ3RDYW52YXNJbnB1dHNbJ2V2ZW50cyddPihjcmVhdGVQb2ludGVyRXZlbnRzKTtcblx0ZXZlbnRTb3VyY2UgPSBpbnB1dDxOZ3RDYW52YXNJbnB1dHNbJ2V2ZW50U291cmNlJ10+KCk7XG5cdGV2ZW50UHJlZml4ID0gaW5wdXQ8Tmd0Q2FudmFzSW5wdXRzWydldmVudFByZWZpeCddPignb2Zmc2V0Jyk7XG5cdGxvb2tBdCA9IGlucHV0PE5ndENhbnZhc0lucHV0c1snbG9va0F0J10+KCk7XG5cblx0Y3JlYXRlZCA9IG91dHB1dDxOZ3RTdGF0ZT4oKTtcblx0cG9pbnRlck1pc3NlZCA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRoaXMuc3RvcmUuZ2V0KCdwb2ludGVyTWlzc2VkJCcpKTtcblxuXHRnbENhbnZhcyA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50Pj4oJ2dsQ2FudmFzJyk7XG5cdGdsQ2FudmFzVmlld0NvbnRhaW5lclJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZCgnZ2xDYW52YXMnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSk7XG5cblx0Ly8gTk9URTogdGhpcyBzaWduYWwgaXMgdXBkYXRlZCBvdXRzaWRlIG9mIFpvbmVcblx0cHJvdGVjdGVkIHJlc2l6ZVJlc3VsdCA9IHNpZ25hbDxSZXNpemVSZXN1bHQ+KHt9IGFzIFJlc2l6ZVJlc3VsdCwgeyBlcXVhbDogT2JqZWN0LmlzIH0pO1xuXG5cdHByb3RlY3RlZCBoYlBvaW50ZXJFdmVudHMgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5ldmVudFNvdXJjZSgpID8gJ25vbmUnIDogJ2F1dG8nKSk7XG5cblx0cHJpdmF0ZSBjb25maWd1cmF0b3I/OiBOZ3RDYW52YXNDb25maWd1cmF0b3I7XG5cdHByaXZhdGUgZ2xFbnZpcm9ubWVudEluamVjdG9yPzogRW52aXJvbm1lbnRJbmplY3Rvcjtcblx0cHJpdmF0ZSBnbFJlZj86IENvbXBvbmVudFJlZjx1bmtub3duPjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdFx0dGhpcy5jb25maWd1cmF0b3IgPSB0aGlzLmluaXRSb290KHRoaXMuZ2xDYW52YXMoKS5uYXRpdmVFbGVtZW50KTtcblx0XHRcdFx0dGhpcy5ub1pvbmVSZXNpemVFZmZlY3QoKTtcblx0XHRcdFx0dGhpcy5ub1pvbmVTY2VuZUdyYXBoSW5wdXRzRWZmZWN0KCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdFx0dGhpcy5nbFJlZj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3I/LmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuY29uZmlndXJhdG9yPy5kZXN0cm95KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIG5vWm9uZVJlc2l6ZUVmZmVjdCgpIHtcblx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzaXplUmVzdWx0ID0gdGhpcy5yZXNpemVSZXN1bHQoKTtcblx0XHRcdGlmIChyZXNpemVSZXN1bHQud2lkdGggPiAwICYmIHJlc2l6ZVJlc3VsdC5oZWlnaHQgPiAwKSB7XG5cdFx0XHRcdGlmICghdGhpcy5jb25maWd1cmF0b3IpIHRoaXMuY29uZmlndXJhdG9yID0gdGhpcy5pbml0Um9vdCh0aGlzLmdsQ2FudmFzKCkubmF0aXZlRWxlbWVudCk7XG5cdFx0XHRcdHRoaXMuY29uZmlndXJhdG9yLmNvbmZpZ3VyZSh7XG5cdFx0XHRcdFx0Z2w6IHRoaXMuZ2woKSxcblx0XHRcdFx0XHRzaGFkb3dzOiB0aGlzLnNoYWRvd3MoKSxcblx0XHRcdFx0XHRsZWdhY3k6IHRoaXMubGVnYWN5KCksXG5cdFx0XHRcdFx0bGluZWFyOiB0aGlzLmxpbmVhcigpLFxuXHRcdFx0XHRcdGZsYXQ6IHRoaXMuZmxhdCgpLFxuXHRcdFx0XHRcdG9ydGhvZ3JhcGhpYzogdGhpcy5vcnRob2dyYXBoaWMoKSxcblx0XHRcdFx0XHRmcmFtZWxvb3A6IHRoaXMuZnJhbWVsb29wKCksXG5cdFx0XHRcdFx0cGVyZm9ybWFuY2U6IHRoaXMucGVyZm9ybWFuY2UoKSxcblx0XHRcdFx0XHRkcHI6IHRoaXMuZHByKCksXG5cdFx0XHRcdFx0cmF5Y2FzdGVyOiB0aGlzLnJheWNhc3RlcigpLFxuXHRcdFx0XHRcdHNjZW5lOiB0aGlzLnNjZW5lKCksXG5cdFx0XHRcdFx0Y2FtZXJhOiB0aGlzLmNhbWVyYSgpLFxuXHRcdFx0XHRcdGV2ZW50czogdGhpcy5ldmVudHMoKSxcblx0XHRcdFx0XHRldmVudFNvdXJjZTogdGhpcy5ldmVudFNvdXJjZSgpLFxuXHRcdFx0XHRcdGV2ZW50UHJlZml4OiB0aGlzLmV2ZW50UHJlZml4KCksXG5cdFx0XHRcdFx0bG9va0F0OiB0aGlzLmxvb2tBdCgpLFxuXHRcdFx0XHRcdHNpemU6IHJlc2l6ZVJlc3VsdCxcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nbFJlZikge1xuXHRcdFx0XHRcdFx0dGhpcy5nbFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMubm9ab25lUmVuZGVyKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgbm9ab25lUmVuZGVyKCkge1xuXHRcdC8vIE5PVEU6IGRlc3Ryb3kgcHJldmlvdXMgaW5zdGFuY2VzIGlmIGV4aXN0ZWRcblx0XHR0aGlzLmdsRW52aXJvbm1lbnRJbmplY3Rvcj8uZGVzdHJveSgpO1xuXHRcdHRoaXMuZ2xSZWY/LmRlc3Ryb3koKTtcblxuXHRcdC8vIE5PVEU6IEZsYWcgdGhlIGNhbnZhcyBhY3RpdmUsIHJlbmRlcmluZyB3aWxsIG5vdyBiZWdpblxuXHRcdHRoaXMuc3RvcmUudXBkYXRlKChzdGF0ZSkgPT4gKHsgaW50ZXJuYWw6IHsgLi4uc3RhdGUuaW50ZXJuYWwsIGFjdGl2ZTogdHJ1ZSB9IH0pKTtcblxuXHRcdGNvbnN0IFtzdGF0ZSwgZXZlbnRTb3VyY2UsIGV2ZW50UHJlZml4XSA9IFtcblx0XHRcdHRoaXMuc3RvcmUuc25hcHNob3QsXG5cdFx0XHR1bnRyYWNrZWQodGhpcy5ldmVudFNvdXJjZSksXG5cdFx0XHR1bnRyYWNrZWQodGhpcy5ldmVudFByZWZpeCksXG5cdFx0XTtcblxuXHRcdC8vIGNvbm5lY3QgdG8gZXZlbnQgc291cmNlXG5cdFx0c3RhdGUuZXZlbnRzLmNvbm5lY3Q/Lihcblx0XHRcdGV2ZW50U291cmNlID8gKGlzLnJlZihldmVudFNvdXJjZSkgPyBldmVudFNvdXJjZS5uYXRpdmVFbGVtZW50IDogZXZlbnRTb3VyY2UpIDogdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0KTtcblxuXHRcdC8vIHNldHVwIGNvbXB1dGUgZm9yIGV2ZW50UHJlZml4XG5cdFx0aWYgKGV2ZW50UHJlZml4KSB7XG5cdFx0XHRzdGF0ZS5zZXRFdmVudHMoe1xuXHRcdFx0XHRjb21wdXRlOiAoZXZlbnQsIHN0b3JlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgeyBwb2ludGVyLCByYXljYXN0ZXIsIGNhbWVyYSwgc2l6ZSB9ID0gc3RvcmUuc25hcHNob3Q7XG5cdFx0XHRcdFx0Y29uc3QgeCA9IGV2ZW50WyhldmVudFByZWZpeCArICdYJykgYXMga2V5b2YgTmd0RG9tRXZlbnRdIGFzIG51bWJlcjtcblx0XHRcdFx0XHRjb25zdCB5ID0gZXZlbnRbKGV2ZW50UHJlZml4ICsgJ1knKSBhcyBrZXlvZiBOZ3REb21FdmVudF0gYXMgbnVtYmVyO1xuXHRcdFx0XHRcdHBvaW50ZXIuc2V0KCh4IC8gc2l6ZS53aWR0aCkgKiAyIC0gMSwgLSh5IC8gc2l6ZS5oZWlnaHQpICogMiArIDEpO1xuXHRcdFx0XHRcdHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHBvaW50ZXIsIGNhbWVyYSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBlbWl0IGNyZWF0ZWQgZXZlbnQgaWYgb2JzZXJ2ZWRcblx0XHR0aGlzLmNyZWF0ZWQuZW1pdCh0aGlzLnN0b3JlLnNuYXBzaG90KTtcblxuXHRcdGlmICghdGhpcy5zdG9yZS5nZXQoJ2V2ZW50cycsICdjb25uZWN0ZWQnKSkge1xuXHRcdFx0dGhpcy5zdG9yZS5nZXQoJ2V2ZW50cycpLmNvbm5lY3Q/Lih0aGlzLmdsQ2FudmFzKCkubmF0aXZlRWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3IgPSBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yKFxuXHRcdFx0W3Byb3ZpZGVOZ3RSZW5kZXJlcih0aGlzLnN0b3JlLCB1bnRyYWNrZWQodGhpcy5jb21wb3VuZFByZWZpeGVzKSldLFxuXHRcdFx0dGhpcy5lbnZpcm9ubWVudEluamVjdG9yLFxuXHRcdCk7XG5cdFx0dGhpcy5nbFJlZiA9IHVudHJhY2tlZCh0aGlzLmdsQ2FudmFzVmlld0NvbnRhaW5lclJlZikuY3JlYXRlQ29tcG9uZW50KHVudHJhY2tlZCh0aGlzLnNjZW5lR3JhcGgpLCB7XG5cdFx0XHRlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmdsRW52aXJvbm1lbnRJbmplY3Rvcixcblx0XHRcdGluamVjdG9yOiB0aGlzLmluamVjdG9yLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5nbFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0dGhpcy5zZXRTY2VuZUdyYXBoSW5wdXRzKHVudHJhY2tlZCh0aGlzLnNjZW5lR3JhcGhJbnB1dHMpKTtcblx0fVxuXG5cdHByaXZhdGUgbm9ab25lU2NlbmVHcmFwaElucHV0c0VmZmVjdCgpIHtcblx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy5zZXRTY2VuZUdyYXBoSW5wdXRzKHRoaXMuc2NlbmVHcmFwaElucHV0cygpKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2NlbmVHcmFwaElucHV0cyhzY2VuZUdyYXBoSW5wdXRzOiBOZ3RBbnlSZWNvcmQpIHtcblx0XHRpZiAodGhpcy5nbFJlZikge1xuXHRcdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2NlbmVHcmFwaElucHV0cykpIHtcblx0XHRcdFx0dGhpcy5nbFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Directive, effect, input } from '@angular/core';
|
|
2
|
+
import { NgtCommonDirective, provideNodeType } from './common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class NgtArgs extends NgtCommonDirective {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this.args = input(null);
|
|
8
|
+
this.injectedArgs = [];
|
|
9
|
+
effect(() => {
|
|
10
|
+
const args = this.args();
|
|
11
|
+
if (args == null || !Array.isArray(args) || (args.length === 1 && args[0] === null))
|
|
12
|
+
return;
|
|
13
|
+
this.injected = false;
|
|
14
|
+
this.injectedArgs = args;
|
|
15
|
+
this.createView();
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
get value() {
|
|
19
|
+
if (this.validate()) {
|
|
20
|
+
this.injected = true;
|
|
21
|
+
return this.injectedArgs;
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
validate() {
|
|
26
|
+
return !this.injected && !!this.injectedArgs.length;
|
|
27
|
+
}
|
|
28
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtArgs, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
29
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.0", type: NgtArgs, isStandalone: true, selector: "ng-template[args]", inputs: { args: { classPropertyName: "args", publicName: "args", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideNodeType('args')], usesInheritance: true, ngImport: i0 }); }
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtArgs, decorators: [{
|
|
32
|
+
type: Directive,
|
|
33
|
+
args: [{ selector: 'ng-template[args]', standalone: true, providers: [provideNodeType('args')] }]
|
|
34
|
+
}], ctorParameters: () => [] });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFHL0QsTUFBTSxPQUFPLE9BQXFDLFNBQVEsa0JBQWtCO0lBSzNFO1FBQ0MsS0FBSyxFQUFFLENBQUM7UUFMVCxTQUFJLEdBQUcsS0FBSyxDQUFlLElBQUksQ0FBQyxDQUFDO1FBRXpCLGlCQUFZLEdBQVUsRUFBc0IsQ0FBQztRQUlwRCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDO2dCQUFFLE9BQU87WUFDNUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksS0FBSztRQUNSLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRCxRQUFRO1FBQ1AsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ3JELENBQUM7OEdBMUJXLE9BQU87a0dBQVAsT0FBTyxpTUFEcUQsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7OzJGQUNyRixPQUFPO2tCQURuQixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndENvbW1vbkRpcmVjdGl2ZSwgcHJvdmlkZU5vZGVUeXBlIH0gZnJvbSAnLi9jb21tb24nO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVthcmdzXScsIHN0YW5kYWxvbmU6IHRydWUsIHByb3ZpZGVyczogW3Byb3ZpZGVOb2RlVHlwZSgnYXJncycpXSB9KVxuZXhwb3J0IGNsYXNzIE5ndEFyZ3M8VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdPiBleHRlbmRzIE5ndENvbW1vbkRpcmVjdGl2ZSB7XG5cdGFyZ3MgPSBpbnB1dDxUQXJncyB8IG51bGw+KG51bGwpO1xuXG5cdHByaXZhdGUgaW5qZWN0ZWRBcmdzOiBUQXJncyA9IFtdIGFzIHVua25vd24gYXMgVEFyZ3M7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgYXJncyA9IHRoaXMuYXJncygpO1xuXHRcdFx0aWYgKGFyZ3MgPT0gbnVsbCB8fCAhQXJyYXkuaXNBcnJheShhcmdzKSB8fCAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXSA9PT0gbnVsbCkpIHJldHVybjtcblx0XHRcdHRoaXMuaW5qZWN0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuaW5qZWN0ZWRBcmdzID0gYXJncztcblx0XHRcdHRoaXMuY3JlYXRlVmlldygpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0IHZhbHVlKCkge1xuXHRcdGlmICh0aGlzLnZhbGlkYXRlKCkpIHtcblx0XHRcdHRoaXMuaW5qZWN0ZWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5qZWN0ZWRBcmdzO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhbGlkYXRlKCkge1xuXHRcdHJldHVybiAhdGhpcy5pbmplY3RlZCAmJiAhIXRoaXMuaW5qZWN0ZWRBcmdzLmxlbmd0aDtcblx0fVxufVxuIl19
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DestroyRef, Directive, NgZone, TemplateRef, ViewContainerRef, inject, } from '@angular/core';
|
|
2
|
+
import { createInjectionToken } from 'ngxtension/create-injection-token';
|
|
3
|
+
import { SPECIAL_INTERNAL_ADD_COMMENT } from '../renderer/constants';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export const [injectNodeType, provideNodeType] = createInjectionToken(() => '', {
|
|
6
|
+
isRoot: false,
|
|
7
|
+
});
|
|
8
|
+
export class NgtCommonDirective {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.vcr = inject(ViewContainerRef);
|
|
11
|
+
this.zone = inject(NgZone);
|
|
12
|
+
this.template = inject(TemplateRef);
|
|
13
|
+
this.nodeType = injectNodeType();
|
|
14
|
+
this.injected = false;
|
|
15
|
+
this.shouldCreateView = true;
|
|
16
|
+
const commentNode = this.vcr.element.nativeElement;
|
|
17
|
+
if (commentNode[SPECIAL_INTERNAL_ADD_COMMENT]) {
|
|
18
|
+
commentNode[SPECIAL_INTERNAL_ADD_COMMENT](this.nodeType);
|
|
19
|
+
delete commentNode[SPECIAL_INTERNAL_ADD_COMMENT];
|
|
20
|
+
}
|
|
21
|
+
inject(DestroyRef).onDestroy(() => {
|
|
22
|
+
this.view?.destroy();
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
createView() {
|
|
26
|
+
this.zone.runOutsideAngular(() => {
|
|
27
|
+
if (this.shouldCreateView) {
|
|
28
|
+
if (this.view && !this.view.destroyed) {
|
|
29
|
+
this.view.destroy();
|
|
30
|
+
}
|
|
31
|
+
this.view = this.vcr.createEmbeddedView(this.template);
|
|
32
|
+
this.view.detectChanges();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtCommonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
37
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: NgtCommonDirective, ngImport: i0 }); }
|
|
38
|
+
}
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtCommonDirective, decorators: [{
|
|
40
|
+
type: Directive
|
|
41
|
+
}], ctorParameters: () => [] });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsTUFBTSxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUVyRSxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUE0QixFQUFFO0lBQ3pHLE1BQU0sRUFBRSxLQUFLO0NBQ2IsQ0FBQyxDQUFDO0FBR0gsTUFBTSxPQUFnQixrQkFBa0I7SUFVdkM7UUFUUSxRQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0IsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLGFBQVEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUxQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUlqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbkQsSUFBSSxXQUFXLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDO1lBQy9DLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxPQUFPLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUlTLFVBQVU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBbENvQixrQkFBa0I7a0dBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEdkMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERlc3Ryb3lSZWYsXG5cdERpcmVjdGl2ZSxcblx0Tmdab25lLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcblx0aW5qZWN0LFxuXHR0eXBlIEVtYmVkZGVkVmlld1JlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ25neHRlbnNpb24vY3JlYXRlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQgeyBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UIH0gZnJvbSAnLi4vcmVuZGVyZXIvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IFtpbmplY3ROb2RlVHlwZSwgcHJvdmlkZU5vZGVUeXBlXSA9IGNyZWF0ZUluamVjdGlvblRva2VuKCgpID0+ICcnIGFzICdhcmdzJyB8ICdwYXJlbnQnIHwgJycsIHtcblx0aXNSb290OiBmYWxzZSxcbn0pO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3RDb21tb25EaXJlY3RpdmUge1xuXHRwcml2YXRlIHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblx0cHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdHByaXZhdGUgdGVtcGxhdGUgPSBpbmplY3QoVGVtcGxhdGVSZWYpO1xuXHRwcml2YXRlIG5vZGVUeXBlID0gaW5qZWN0Tm9kZVR5cGUoKTtcblxuXHRwcm90ZWN0ZWQgaW5qZWN0ZWQgPSBmYWxzZTtcblx0cHJvdGVjdGVkIHNob3VsZENyZWF0ZVZpZXcgPSB0cnVlO1xuXHRwcml2YXRlIHZpZXc/OiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj47XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgY29tbWVudE5vZGUgPSB0aGlzLnZjci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKGNvbW1lbnROb2RlW1NQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlRdKSB7XG5cdFx0XHRjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSh0aGlzLm5vZGVUeXBlKTtcblx0XHRcdGRlbGV0ZSBjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXTtcblx0XHR9XG5cblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcblx0XHRcdHRoaXMudmlldz8uZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0YWJzdHJhY3QgdmFsaWRhdGUoKTogYm9vbGVhbjtcblxuXHRwcm90ZWN0ZWQgY3JlYXRlVmlldygpIHtcblx0XHR0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuc2hvdWxkQ3JlYXRlVmlldykge1xuXHRcdFx0XHRpZiAodGhpcy52aWV3ICYmICF0aGlzLnZpZXcuZGVzdHJveWVkKSB7XG5cdFx0XHRcdFx0dGhpcy52aWV3LmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnZpZXcgPSB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7XG5cdFx0XHRcdHRoaXMudmlldy5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Directive, effect, input } from '@angular/core';
|
|
2
|
+
import { NgtCommonDirective, provideNodeType } from './common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class NgtParent extends NgtCommonDirective {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this.parent = input.required();
|
|
8
|
+
this.injectedParent = null;
|
|
9
|
+
effect(() => {
|
|
10
|
+
const parent = this.parent();
|
|
11
|
+
if (!parent)
|
|
12
|
+
return;
|
|
13
|
+
this.injected = false;
|
|
14
|
+
this.injectedParent = parent;
|
|
15
|
+
this.createView();
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
get value() {
|
|
19
|
+
if (this.validate()) {
|
|
20
|
+
this.injected = true;
|
|
21
|
+
return this.injectedParent;
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
validate() {
|
|
26
|
+
return !this.injected && !!this.injectedParent;
|
|
27
|
+
}
|
|
28
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtParent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
29
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.0", type: NgtParent, isStandalone: true, selector: "ng-template[parent]", inputs: { parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: true, transformFunction: null } }, providers: [provideNodeType('parent')], usesInheritance: true, ngImport: i0 }); }
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtParent, decorators: [{
|
|
32
|
+
type: Directive,
|
|
33
|
+
args: [{ selector: 'ng-template[parent]', standalone: true, providers: [provideNodeType('parent')] }]
|
|
34
|
+
}], ctorParameters: () => [] });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9wYXJlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRy9ELE1BQU0sT0FBTyxTQUFVLFNBQVEsa0JBQWtCO0lBSWhEO1FBQ0MsS0FBSyxFQUFFLENBQUM7UUFKVCxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBbUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFvQyxJQUFLLENBQUM7UUFJL0QsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsUUFBUTtRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ2hELENBQUM7OEdBekJXLFNBQVM7a0dBQVQsU0FBUyx3TUFEcUQsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7OzJGQUN6RixTQUFTO2tCQURyQixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RSZWYgfSBmcm9tICcuLi9yZWYnO1xuaW1wb3J0IHsgTmd0Q29tbW9uRGlyZWN0aXZlLCBwcm92aWRlTm9kZVR5cGUgfSBmcm9tICcuL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW3BhcmVudF0nLCBzdGFuZGFsb25lOiB0cnVlLCBwcm92aWRlcnM6IFtwcm92aWRlTm9kZVR5cGUoJ3BhcmVudCcpXSB9KVxuZXhwb3J0IGNsYXNzIE5ndFBhcmVudCBleHRlbmRzIE5ndENvbW1vbkRpcmVjdGl2ZSB7XG5cdHBhcmVudCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZyB8IE5ndFJlZjxUSFJFRS5PYmplY3QzRD4+KCk7XG5cdHByaXZhdGUgaW5qZWN0ZWRQYXJlbnQ6IHN0cmluZyB8IE5ndFJlZjxUSFJFRS5PYmplY3QzRD4gPSBudWxsITtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudCgpO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblx0XHRcdHRoaXMuaW5qZWN0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuaW5qZWN0ZWRQYXJlbnQgPSBwYXJlbnQ7XG5cdFx0XHR0aGlzLmNyZWF0ZVZpZXcoKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRpZiAodGhpcy52YWxpZGF0ZSgpKSB7XG5cdFx0XHR0aGlzLmluamVjdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybiB0aGlzLmluamVjdGVkUGFyZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhdGhpcy5pbmplY3RlZCAmJiAhIXRoaXMuaW5qZWN0ZWRQYXJlbnQ7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { createEvents } from '../events';
|
|
2
|
+
const DOM_EVENTS = {
|
|
3
|
+
click: false,
|
|
4
|
+
contextmenu: false,
|
|
5
|
+
dblclick: false,
|
|
6
|
+
wheel: false, // passive wheel errors with OrbitControls
|
|
7
|
+
pointerdown: true,
|
|
8
|
+
pointerup: true,
|
|
9
|
+
pointerleave: true,
|
|
10
|
+
pointermove: true,
|
|
11
|
+
pointercancel: true,
|
|
12
|
+
lostpointercapture: true,
|
|
13
|
+
};
|
|
14
|
+
export const supportedEvents = [
|
|
15
|
+
'click',
|
|
16
|
+
'contextmenu',
|
|
17
|
+
'dblclick',
|
|
18
|
+
'pointerup',
|
|
19
|
+
'pointerdown',
|
|
20
|
+
'pointerover',
|
|
21
|
+
'pointerout',
|
|
22
|
+
'pointerenter',
|
|
23
|
+
'pointerleave',
|
|
24
|
+
'pointermove',
|
|
25
|
+
'pointermissed',
|
|
26
|
+
'pointercancel',
|
|
27
|
+
'wheel',
|
|
28
|
+
];
|
|
29
|
+
export function createPointerEvents(store) {
|
|
30
|
+
const { handlePointer } = createEvents(store);
|
|
31
|
+
return {
|
|
32
|
+
priority: 1,
|
|
33
|
+
enabled: true,
|
|
34
|
+
compute: (event, root) => {
|
|
35
|
+
const state = root.get();
|
|
36
|
+
// https://github.com/pmndrs/react-three-fiber/pull/782
|
|
37
|
+
// Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
|
|
38
|
+
state.pointer.set((event.offsetX / state.size.width) * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
|
|
39
|
+
state.raycaster.setFromCamera(state.pointer, state.camera);
|
|
40
|
+
},
|
|
41
|
+
connected: undefined,
|
|
42
|
+
handlers: Object.keys(DOM_EVENTS).reduce((handlers, supportedEventName) => {
|
|
43
|
+
handlers[supportedEventName] = handlePointer(supportedEventName);
|
|
44
|
+
return handlers;
|
|
45
|
+
}, {}),
|
|
46
|
+
update: () => {
|
|
47
|
+
const { events, internal } = store.get();
|
|
48
|
+
if (internal.lastEvent?.nativeElement && events.handlers)
|
|
49
|
+
events.handlers.pointermove(internal.lastEvent.nativeElement);
|
|
50
|
+
},
|
|
51
|
+
connect: (target) => {
|
|
52
|
+
const state = store.get();
|
|
53
|
+
state.events.disconnect?.();
|
|
54
|
+
state.setEvents({ connected: target });
|
|
55
|
+
Object.entries(state.events.handlers ?? {}).forEach(([eventName, eventHandler]) => {
|
|
56
|
+
const passive = DOM_EVENTS[eventName];
|
|
57
|
+
target.addEventListener(eventName, eventHandler, { passive });
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
disconnect: () => {
|
|
61
|
+
const { events, setEvents } = store.get();
|
|
62
|
+
if (events.connected) {
|
|
63
|
+
Object.entries(events.handlers ?? {}).forEach(([eventName, eventHandler]) => {
|
|
64
|
+
if (events.connected instanceof HTMLElement) {
|
|
65
|
+
events.connected.removeEventListener(eventName, eventHandler);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
setEvents({ connected: undefined });
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZG9tL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUEwRCxNQUFNLFdBQVcsQ0FBQztBQUtqRyxNQUFNLFVBQVUsR0FBRztJQUNsQixLQUFLLEVBQUUsS0FBSztJQUNaLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsS0FBSyxFQUFFLEtBQUssRUFBRSwwQ0FBMEM7SUFDeEQsV0FBVyxFQUFFLElBQUk7SUFDakIsU0FBUyxFQUFFLElBQUk7SUFDZixZQUFZLEVBQUUsSUFBSTtJQUNsQixXQUFXLEVBQUUsSUFBSTtJQUNqQixhQUFhLEVBQUUsSUFBSTtJQUNuQixrQkFBa0IsRUFBRSxJQUFJO0NBQ2YsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM5QixPQUFPO0lBQ1AsYUFBYTtJQUNiLFVBQVU7SUFDVixXQUFXO0lBQ1gsYUFBYTtJQUNiLGFBQWE7SUFDYixZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxhQUFhO0lBQ2IsZUFBZTtJQUNmLGVBQWU7SUFDZixPQUFPO0NBQ0UsQ0FBQztBQUVYLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUErQjtJQUNsRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlDLE9BQU87UUFDTixRQUFRLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFLENBQUMsS0FBa0IsRUFBRSxJQUE4QixFQUFFLEVBQUU7WUFDL0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLHVEQUF1RDtZQUN2RCw0RkFBNEY7WUFDNUYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1RyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsU0FBUyxFQUFFLFNBQVM7UUFDcEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBc0IsRUFBRSxrQkFBa0IsRUFBRSxFQUFFO1lBQ3ZGLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sUUFBUSxDQUFDO1FBQ2pCLENBQUMsRUFBRSxFQUFFLENBQWM7UUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNaLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxhQUFhLElBQUksTUFBTSxDQUFDLFFBQVE7Z0JBQ3ZELE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLE1BQW1CLEVBQUUsRUFBRTtZQUNoQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBRTVCLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBMEIsRUFBRSxFQUFFO2dCQUMxRyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBb0MsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDO1FBQ0QsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNoQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBMEIsRUFBRSxFQUFFO29CQUNwRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLFlBQVksV0FBVyxFQUFFLENBQUM7d0JBQzdDLE1BQU0sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUMvRCxDQUFDO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2dCQUVILFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDRixDQUFDO0tBQ0QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVFdmVudHMsIHR5cGUgTmd0RG9tRXZlbnQsIHR5cGUgTmd0RXZlbnRNYW5hZ2VyLCB0eXBlIE5ndEV2ZW50cyB9IGZyb20gJy4uL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ndFN0YXRlIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFsLXN0b3JlJztcblxuY29uc3QgRE9NX0VWRU5UUyA9IHtcblx0Y2xpY2s6IGZhbHNlLFxuXHRjb250ZXh0bWVudTogZmFsc2UsXG5cdGRibGNsaWNrOiBmYWxzZSxcblx0d2hlZWw6IGZhbHNlLCAvLyBwYXNzaXZlIHdoZWVsIGVycm9ycyB3aXRoIE9yYml0Q29udHJvbHNcblx0cG9pbnRlcmRvd246IHRydWUsXG5cdHBvaW50ZXJ1cDogdHJ1ZSxcblx0cG9pbnRlcmxlYXZlOiB0cnVlLFxuXHRwb2ludGVybW92ZTogdHJ1ZSxcblx0cG9pbnRlcmNhbmNlbDogdHJ1ZSxcblx0bG9zdHBvaW50ZXJjYXB0dXJlOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZEV2ZW50cyA9IFtcblx0J2NsaWNrJyxcblx0J2NvbnRleHRtZW51Jyxcblx0J2RibGNsaWNrJyxcblx0J3BvaW50ZXJ1cCcsXG5cdCdwb2ludGVyZG93bicsXG5cdCdwb2ludGVyb3ZlcicsXG5cdCdwb2ludGVyb3V0Jyxcblx0J3BvaW50ZXJlbnRlcicsXG5cdCdwb2ludGVybGVhdmUnLFxuXHQncG9pbnRlcm1vdmUnLFxuXHQncG9pbnRlcm1pc3NlZCcsXG5cdCdwb2ludGVyY2FuY2VsJyxcblx0J3doZWVsJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb2ludGVyRXZlbnRzKHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pOiBOZ3RFdmVudE1hbmFnZXI8SFRNTEVsZW1lbnQ+IHtcblx0Y29uc3QgeyBoYW5kbGVQb2ludGVyIH0gPSBjcmVhdGVFdmVudHMoc3RvcmUpO1xuXG5cdHJldHVybiB7XG5cdFx0cHJpb3JpdHk6IDEsXG5cdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRjb21wdXRlOiAoZXZlbnQ6IE5ndERvbUV2ZW50LCByb290OiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pID0+IHtcblx0XHRcdGNvbnN0IHN0YXRlID0gcm9vdC5nZXQoKTtcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW5kcnMvcmVhY3QtdGhyZWUtZmliZXIvcHVsbC83ODJcblx0XHRcdC8vIEV2ZW50cyB0cmlnZ2VyIG91dHNpZGUgb2YgY2FudmFzIHdoZW4gbW92ZWQsIHVzZSBvZmZzZXRYL1kgYnkgZGVmYXVsdCBhbmQgYWxsb3cgb3ZlcnJpZGVzXG5cdFx0XHRzdGF0ZS5wb2ludGVyLnNldCgoZXZlbnQub2Zmc2V0WCAvIHN0YXRlLnNpemUud2lkdGgpICogMiAtIDEsIC0oZXZlbnQub2Zmc2V0WSAvIHN0YXRlLnNpemUuaGVpZ2h0KSAqIDIgKyAxKTtcblx0XHRcdHN0YXRlLnJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHN0YXRlLnBvaW50ZXIsIHN0YXRlLmNhbWVyYSk7XG5cdFx0fSxcblx0XHRjb25uZWN0ZWQ6IHVuZGVmaW5lZCxcblx0XHRoYW5kbGVyczogT2JqZWN0LmtleXMoRE9NX0VWRU5UUykucmVkdWNlKChoYW5kbGVyczogTmd0QW55UmVjb3JkLCBzdXBwb3J0ZWRFdmVudE5hbWUpID0+IHtcblx0XHRcdGhhbmRsZXJzW3N1cHBvcnRlZEV2ZW50TmFtZV0gPSBoYW5kbGVQb2ludGVyKHN1cHBvcnRlZEV2ZW50TmFtZSk7XG5cdFx0XHRyZXR1cm4gaGFuZGxlcnM7XG5cdFx0fSwge30pIGFzIE5ndEV2ZW50cyxcblx0XHR1cGRhdGU6ICgpID0+IHtcblx0XHRcdGNvbnN0IHsgZXZlbnRzLCBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG5cdFx0XHRpZiAoaW50ZXJuYWwubGFzdEV2ZW50Py5uYXRpdmVFbGVtZW50ICYmIGV2ZW50cy5oYW5kbGVycylcblx0XHRcdFx0ZXZlbnRzLmhhbmRsZXJzLnBvaW50ZXJtb3ZlKGludGVybmFsLmxhc3RFdmVudC5uYXRpdmVFbGVtZW50KTtcblx0XHR9LFxuXHRcdGNvbm5lY3Q6ICh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG5cdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLmdldCgpO1xuXHRcdFx0c3RhdGUuZXZlbnRzLmRpc2Nvbm5lY3Q/LigpO1xuXG5cdFx0XHRzdGF0ZS5zZXRFdmVudHMoeyBjb25uZWN0ZWQ6IHRhcmdldCB9KTtcblxuXHRcdFx0T2JqZWN0LmVudHJpZXMoc3RhdGUuZXZlbnRzLmhhbmRsZXJzID8/IHt9KS5mb3JFYWNoKChbZXZlbnROYW1lLCBldmVudEhhbmRsZXJdOiBbc3RyaW5nLCBFdmVudExpc3RlbmVyXSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXNzaXZlID0gRE9NX0VWRU5UU1tldmVudE5hbWUgYXMga2V5b2YgdHlwZW9mIERPTV9FVkVOVFNdO1xuXHRcdFx0XHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlciwgeyBwYXNzaXZlIH0pO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0OiAoKSA9PiB7XG5cdFx0XHRjb25zdCB7IGV2ZW50cywgc2V0RXZlbnRzIH0gPSBzdG9yZS5nZXQoKTtcblx0XHRcdGlmIChldmVudHMuY29ubmVjdGVkKSB7XG5cdFx0XHRcdE9iamVjdC5lbnRyaWVzKGV2ZW50cy5oYW5kbGVycyA/PyB7fSkuZm9yRWFjaCgoW2V2ZW50TmFtZSwgZXZlbnRIYW5kbGVyXTogW3N0cmluZywgRXZlbnRMaXN0ZW5lcl0pID0+IHtcblx0XHRcdFx0XHRpZiAoZXZlbnRzLmNvbm5lY3RlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRldmVudHMuY29ubmVjdGVkLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2V0RXZlbnRzKHsgY29ubmVjdGVkOiB1bmRlZmluZWQgfSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0fTtcbn1cbiJdfQ==
|